Sensor Code By Jorge Troncoso

Dependencies:   Sensor2 MAX31855-1 libmDot-1

Fork of 0A101_mDot_Sensor_Rev3_AUS by Jorge Troncoso

Committer:
jortronm2
Date:
Wed Jun 13 11:31:15 2018 +0000
Revision:
2:0417c5cdceaf
Parent:
0:1441b10e38a6
Sensor Code by Jorge Troncoso

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jortronm2 0:1441b10e38a6 1 // These functions are used to serialize the sensor data for transmission.
jortronm2 0:1441b10e38a6 2
jortronm2 0:1441b10e38a6 3
jortronm2 0:1441b10e38a6 4 #include "serialize.h"
jortronm2 0:1441b10e38a6 5
jortronm2 0:1441b10e38a6 6
jortronm2 0:1441b10e38a6 7 union float_bytes {
jortronm2 0:1441b10e38a6 8 float f;
jortronm2 0:1441b10e38a6 9 uint8_t b[sizeof(float)];
jortronm2 0:1441b10e38a6 10 };
jortronm2 0:1441b10e38a6 11
jortronm2 0:1441b10e38a6 12
jortronm2 0:1441b10e38a6 13 extern uint32_t serialize_sensor_to_bytes(struct sensor_data_raw in, uint8_t *out) {
jortronm2 0:1441b10e38a6 14 uint32_t i = 0;
jortronm2 0:1441b10e38a6 15
jortronm2 0:1441b10e38a6 16 i += serialize_u16_to_bytes(in.reading_number, &out[i]);
jortronm2 0:1441b10e38a6 17 i += serialize_u16_to_bytes(in.voltage_battery, &out[i]);
jortronm2 0:1441b10e38a6 18 for(int j = 0; j < 9; j++) {
jortronm2 0:1441b10e38a6 19 i += serialize_u16_to_bytes(in.voltage_wire[j], &out[i]);
jortronm2 0:1441b10e38a6 20 }
jortronm2 0:1441b10e38a6 21 i += serialize_s16_to_bytes(in.temperature, &out[i]);
jortronm2 0:1441b10e38a6 22
jortronm2 0:1441b10e38a6 23 return sizeof(struct sensor_data_raw);
jortronm2 0:1441b10e38a6 24 }
jortronm2 0:1441b10e38a6 25
jortronm2 0:1441b10e38a6 26 extern uint32_t serialize_float_to_bytes(float in, uint8_t *out) {
jortronm2 0:1441b10e38a6 27 uint32_t i;
jortronm2 0:1441b10e38a6 28 union float_bytes data;
jortronm2 0:1441b10e38a6 29
jortronm2 0:1441b10e38a6 30 data.f = in;
jortronm2 0:1441b10e38a6 31 for(i = 0; i < sizeof(float); i++) {
jortronm2 0:1441b10e38a6 32 out[i] = data.b[i];
jortronm2 0:1441b10e38a6 33 }
jortronm2 0:1441b10e38a6 34
jortronm2 0:1441b10e38a6 35 return sizeof(float);
jortronm2 0:1441b10e38a6 36 }
jortronm2 0:1441b10e38a6 37
jortronm2 0:1441b10e38a6 38 extern uint32_t serialize_u16_to_bytes(uint16_t in, uint8_t *out) {
jortronm2 0:1441b10e38a6 39 out[0] = (in >> 0);
jortronm2 0:1441b10e38a6 40 out[1] = (in >> 8);
jortronm2 0:1441b10e38a6 41
jortronm2 0:1441b10e38a6 42 return sizeof(uint16_t);
jortronm2 0:1441b10e38a6 43 }
jortronm2 0:1441b10e38a6 44
jortronm2 0:1441b10e38a6 45 extern uint32_t serialize_s16_to_bytes(int16_t in, uint8_t *out) {
jortronm2 0:1441b10e38a6 46 out[0] = (in >> 0);
jortronm2 0:1441b10e38a6 47 out[1] = (in >> 8);
jortronm2 0:1441b10e38a6 48
jortronm2 0:1441b10e38a6 49 return sizeof(int16_t);
jortronm2 0:1441b10e38a6 50 }
jortronm2 0:1441b10e38a6 51
jortronm2 0:1441b10e38a6 52 extern uint32_t serialize_bytes_to_sensor(uint8_t *in, struct sensor_data_raw *out) {
jortronm2 0:1441b10e38a6 53 uint32_t i = 0;
jortronm2 0:1441b10e38a6 54
jortronm2 0:1441b10e38a6 55 i += serialize_bytes_to_u16(&in[i], &out->reading_number);
jortronm2 0:1441b10e38a6 56 i += serialize_bytes_to_u16(&in[i], &out->voltage_battery);
jortronm2 0:1441b10e38a6 57 for(int j = 0; j < 9; j++) {
jortronm2 0:1441b10e38a6 58 i += serialize_bytes_to_u16(&in[i], &out->voltage_wire[j]);
jortronm2 0:1441b10e38a6 59 }
jortronm2 0:1441b10e38a6 60 i += serialize_bytes_to_s16(&in[i], &out->temperature);
jortronm2 0:1441b10e38a6 61
jortronm2 0:1441b10e38a6 62 return sizeof(struct sensor_data_raw);
jortronm2 0:1441b10e38a6 63 }
jortronm2 0:1441b10e38a6 64
jortronm2 0:1441b10e38a6 65 extern uint32_t serialize_bytes_to_float(uint8_t *in, float *out) {
jortronm2 0:1441b10e38a6 66 uint32_t i;
jortronm2 0:1441b10e38a6 67 union float_bytes data;
jortronm2 0:1441b10e38a6 68
jortronm2 0:1441b10e38a6 69 for(i = 0; i < sizeof(float); i++) {
jortronm2 0:1441b10e38a6 70 data.b[i] = in[i];
jortronm2 0:1441b10e38a6 71 }
jortronm2 0:1441b10e38a6 72 (*out) = data.f;
jortronm2 0:1441b10e38a6 73
jortronm2 0:1441b10e38a6 74 return sizeof(float);
jortronm2 0:1441b10e38a6 75 }
jortronm2 0:1441b10e38a6 76
jortronm2 0:1441b10e38a6 77 extern uint32_t serialize_bytes_to_u16(uint8_t *in, uint16_t *out) {
jortronm2 0:1441b10e38a6 78 (*out) = (((uint16_t)(in[1]) << 8) | ((uint16_t)(in[0]) << 0));
jortronm2 0:1441b10e38a6 79
jortronm2 0:1441b10e38a6 80 return sizeof(uint16_t);
jortronm2 0:1441b10e38a6 81 }
jortronm2 0:1441b10e38a6 82
jortronm2 0:1441b10e38a6 83 extern uint32_t serialize_bytes_to_s16(uint8_t *in, int16_t *out) {
jortronm2 0:1441b10e38a6 84 (*out) = (int16_t)(((uint16_t)(in[1]) << 8) | ((uint16_t)(in[0]) << 0));
jortronm2 0:1441b10e38a6 85
jortronm2 0:1441b10e38a6 86 return sizeof(int16_t);
jortronm2 0:1441b10e38a6 87 }
jortronm2 0:1441b10e38a6 88
jortronm2 0:1441b10e38a6 89
jortronm2 0:1441b10e38a6 90
jortronm2 0:1441b10e38a6 91
jortronm2 0:1441b10e38a6 92
jortronm2 0:1441b10e38a6 93
jortronm2 0:1441b10e38a6 94
jortronm2 0:1441b10e38a6 95
jortronm2 0:1441b10e38a6 96