ducky's telemetry library

Committer:
dnleek
Date:
Wed Mar 18 07:59:36 2015 +0000
Revision:
0:80dd1516ad46
Telemetry library from ducky

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dnleek 0:80dd1516ad46 1 /*
dnleek 0:80dd1516ad46 2 * telemetry-data.cpp
dnleek 0:80dd1516ad46 3 *
dnleek 0:80dd1516ad46 4 * Created on: Mar 2, 2015
dnleek 0:80dd1516ad46 5 * Author: Ducky
dnleek 0:80dd1516ad46 6 *
dnleek 0:80dd1516ad46 7 * Implementation for Telemetry Data classes.
dnleek 0:80dd1516ad46 8 */
dnleek 0:80dd1516ad46 9 #include <telemetry.h>
dnleek 0:80dd1516ad46 10 #include <string.h>
dnleek 0:80dd1516ad46 11
dnleek 0:80dd1516ad46 12 namespace telemetry {
dnleek 0:80dd1516ad46 13 void packet_write_string(TransmitPacketInterface& packet, const char* str) {
dnleek 0:80dd1516ad46 14 // TODO: move into HAL for higher performance?
dnleek 0:80dd1516ad46 15 while (*str != '\0') {
dnleek 0:80dd1516ad46 16 packet.write_uint8(*str);
dnleek 0:80dd1516ad46 17 str++;
dnleek 0:80dd1516ad46 18 }
dnleek 0:80dd1516ad46 19 packet.write_uint8('\0');
dnleek 0:80dd1516ad46 20 }
dnleek 0:80dd1516ad46 21
dnleek 0:80dd1516ad46 22 size_t Data::get_header_kvrs_length() {
dnleek 0:80dd1516ad46 23 return 1 + strlen(internal_name) + 1
dnleek 0:80dd1516ad46 24 + 1 + strlen(display_name) + 1
dnleek 0:80dd1516ad46 25 + 1 + strlen(units) + 1;
dnleek 0:80dd1516ad46 26 }
dnleek 0:80dd1516ad46 27
dnleek 0:80dd1516ad46 28 void Data::write_header_kvrs(TransmitPacketInterface& packet) {
dnleek 0:80dd1516ad46 29 packet.write_uint8(RECORDID_INTERNAL_NAME);
dnleek 0:80dd1516ad46 30 packet_write_string(packet, internal_name);
dnleek 0:80dd1516ad46 31 packet.write_uint8(RECORDID_DISPLAY_NAME);
dnleek 0:80dd1516ad46 32 packet_write_string(packet, display_name);
dnleek 0:80dd1516ad46 33 packet.write_uint8(RECORDID_UNITS);
dnleek 0:80dd1516ad46 34 packet_write_string(packet, units);
dnleek 0:80dd1516ad46 35 }
dnleek 0:80dd1516ad46 36
dnleek 0:80dd1516ad46 37 template<>
dnleek 0:80dd1516ad46 38 uint8_t Numeric<uint8_t>::get_subtype() {
dnleek 0:80dd1516ad46 39 return NUMERIC_SUBTYPE_UINT;
dnleek 0:80dd1516ad46 40 }
dnleek 0:80dd1516ad46 41 template<>
dnleek 0:80dd1516ad46 42 void Numeric<uint8_t>::serialize_data(uint8_t value, TransmitPacketInterface& packet) {
dnleek 0:80dd1516ad46 43 packet.write_uint8(value);
dnleek 0:80dd1516ad46 44 }
dnleek 0:80dd1516ad46 45 template<>
dnleek 0:80dd1516ad46 46 uint8_t Numeric<uint8_t>::deserialize_data(ReceivePacketBuffer& packet) {
dnleek 0:80dd1516ad46 47 return packet.read_uint8();
dnleek 0:80dd1516ad46 48 }
dnleek 0:80dd1516ad46 49
dnleek 0:80dd1516ad46 50 template<>
dnleek 0:80dd1516ad46 51 uint8_t Numeric<uint16_t>::get_subtype() {
dnleek 0:80dd1516ad46 52 return NUMERIC_SUBTYPE_UINT;
dnleek 0:80dd1516ad46 53 }
dnleek 0:80dd1516ad46 54 template<>
dnleek 0:80dd1516ad46 55 void Numeric<uint16_t>::serialize_data(uint16_t value, TransmitPacketInterface& packet) {
dnleek 0:80dd1516ad46 56 packet.write_uint16(value);
dnleek 0:80dd1516ad46 57 }
dnleek 0:80dd1516ad46 58 template<>
dnleek 0:80dd1516ad46 59 uint16_t Numeric<uint16_t>::deserialize_data(ReceivePacketBuffer& packet) {
dnleek 0:80dd1516ad46 60 return packet.read_uint16();
dnleek 0:80dd1516ad46 61 }
dnleek 0:80dd1516ad46 62
dnleek 0:80dd1516ad46 63 template<>
dnleek 0:80dd1516ad46 64 uint8_t Numeric<uint32_t>::get_subtype() {
dnleek 0:80dd1516ad46 65 return NUMERIC_SUBTYPE_UINT;
dnleek 0:80dd1516ad46 66 }
dnleek 0:80dd1516ad46 67 template<>
dnleek 0:80dd1516ad46 68 void Numeric<uint32_t>::serialize_data(uint32_t value, TransmitPacketInterface& packet) {
dnleek 0:80dd1516ad46 69 packet.write_uint32(value);
dnleek 0:80dd1516ad46 70 }
dnleek 0:80dd1516ad46 71 template<>
dnleek 0:80dd1516ad46 72 uint32_t Numeric<uint32_t>::deserialize_data(ReceivePacketBuffer& packet) {
dnleek 0:80dd1516ad46 73 return packet.read_uint32();
dnleek 0:80dd1516ad46 74 }
dnleek 0:80dd1516ad46 75
dnleek 0:80dd1516ad46 76 // TODO: move into HAL
dnleek 0:80dd1516ad46 77 template<>
dnleek 0:80dd1516ad46 78 uint8_t Numeric<float>::get_subtype() {
dnleek 0:80dd1516ad46 79 return NUMERIC_SUBTYPE_FLOAT;
dnleek 0:80dd1516ad46 80 }
dnleek 0:80dd1516ad46 81 template<>
dnleek 0:80dd1516ad46 82 void Numeric<float>::serialize_data(float value, TransmitPacketInterface& packet) {
dnleek 0:80dd1516ad46 83 packet.write_float(value);
dnleek 0:80dd1516ad46 84 }
dnleek 0:80dd1516ad46 85 template<>
dnleek 0:80dd1516ad46 86 float Numeric<float>::deserialize_data(ReceivePacketBuffer& packet) {
dnleek 0:80dd1516ad46 87 return packet.read_float();
dnleek 0:80dd1516ad46 88 }
dnleek 0:80dd1516ad46 89
dnleek 0:80dd1516ad46 90 }