ducky's telemetry library
telemetry-data.cpp@0:80dd1516ad46, 2015-03-18 (annotated)
- Committer:
- dnleek
- Date:
- Wed Mar 18 07:59:36 2015 +0000
- Revision:
- 0:80dd1516ad46
Telemetry library from ducky
Who changed what in which revision?
User | Revision | Line number | New 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 | } |