Gateway by Jorge Troncoso

Dependencies:   libmDot-mbed5

Committer:
jortronm2
Date:
Wed Jun 13 11:45:52 2018 +0000
Revision:
0:e671110e33a3
Gateway by Jorge Troncoso

Who changed what in which revision?

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