Senet Packet API

Dependents:   MTDOT-UDKDemo_Senet Senet NAMote mDot-IKS01A1 unh-hackathon-example ... more

Committer:
shaunkrnelson
Date:
Fri Mar 11 12:19:51 2016 -0500
Revision:
1:3e0cc8ad24f1
Parent:
0:cc9f4010bba6
Child:
3:b6823438e893
Addng deserialize to SenetPacket and  ConfigWordPacket

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shaunkrnelson 0:cc9f4010bba6 1 /*
shaunkrnelson 0:cc9f4010bba6 2 * =====================================================================================
shaunkrnelson 0:cc9f4010bba6 3 *
shaunkrnelson 0:cc9f4010bba6 4 * Filename: senet_packet.cpp
shaunkrnelson 0:cc9f4010bba6 5 *
shaunkrnelson 0:cc9f4010bba6 6 * Description: Senet Packet Types implementation file
shaunkrnelson 0:cc9f4010bba6 7 *
shaunkrnelson 0:cc9f4010bba6 8 * Version: 1.0
shaunkrnelson 0:cc9f4010bba6 9 * Created: 03/05/2016 04:23:40 PM
shaunkrnelson 0:cc9f4010bba6 10 *
shaunkrnelson 0:cc9f4010bba6 11 * Author: S. Nelson
shaunkrnelson 0:cc9f4010bba6 12 * Company: Senet, Inc
shaunkrnelson 0:cc9f4010bba6 13 *
shaunkrnelson 0:cc9f4010bba6 14 * =====================================================================================
shaunkrnelson 0:cc9f4010bba6 15 */
shaunkrnelson 0:cc9f4010bba6 16 #include "senet_packet.h"
shaunkrnelson 0:cc9f4010bba6 17 #include <assert.h>
shaunkrnelson 0:cc9f4010bba6 18 #include <stdio.h>
shaunkrnelson 0:cc9f4010bba6 19
shaunkrnelson 0:cc9f4010bba6 20 #define ASSERT(_expr) assert(_expr)
shaunkrnelson 0:cc9f4010bba6 21
shaunkrnelson 0:cc9f4010bba6 22
shaunkrnelson 0:cc9f4010bba6 23 int32_t SenetPacket::
shaunkrnelson 0:cc9f4010bba6 24 PacketHeader::serialize(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 25 {
shaunkrnelson 1:3e0cc8ad24f1 26 int32_t serializedLen = -1;
shaunkrnelson 0:cc9f4010bba6 27
shaunkrnelson 0:cc9f4010bba6 28 if(len >= PacketHeader::HEADER_SIZE)
shaunkrnelson 0:cc9f4010bba6 29 {
shaunkrnelson 1:3e0cc8ad24f1 30 serializedLen = 0;
shaunkrnelson 1:3e0cc8ad24f1 31 frame[serializedLen++] = version;
shaunkrnelson 1:3e0cc8ad24f1 32 frame[serializedLen++] = type;
shaunkrnelson 1:3e0cc8ad24f1 33
shaunkrnelson 1:3e0cc8ad24f1 34 ASSERT(serializedLen == PacketHeader::HEADER_SIZE);
shaunkrnelson 0:cc9f4010bba6 35 }
shaunkrnelson 0:cc9f4010bba6 36
shaunkrnelson 0:cc9f4010bba6 37 return serializedLen;
shaunkrnelson 0:cc9f4010bba6 38 }
shaunkrnelson 0:cc9f4010bba6 39
shaunkrnelson 1:3e0cc8ad24f1 40 int32_t SenetPacket::
shaunkrnelson 0:cc9f4010bba6 41 PacketHeader::deserialize(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 42 {
shaunkrnelson 0:cc9f4010bba6 43 if((frame != NULL) && (len >= PacketHeader::HEADER_SIZE))
shaunkrnelson 0:cc9f4010bba6 44 {
shaunkrnelson 1:3e0cc8ad24f1 45 int32_t offset = 0;
shaunkrnelson 1:3e0cc8ad24f1 46 version = frame[offset++];
shaunkrnelson 1:3e0cc8ad24f1 47 type = frame[offset++];
shaunkrnelson 1:3e0cc8ad24f1 48
shaunkrnelson 1:3e0cc8ad24f1 49 ASSERT(offset == PacketHeader::HEADER_SIZE);
shaunkrnelson 1:3e0cc8ad24f1 50
shaunkrnelson 1:3e0cc8ad24f1 51 return PacketHeader::HEADER_SIZE;
shaunkrnelson 0:cc9f4010bba6 52 }
shaunkrnelson 0:cc9f4010bba6 53 return false;
shaunkrnelson 0:cc9f4010bba6 54 }
shaunkrnelson 0:cc9f4010bba6 55
shaunkrnelson 0:cc9f4010bba6 56
shaunkrnelson 0:cc9f4010bba6 57 SenetPacket::SenetPacket(uint8_t senetPktType, uint8_t *_buffer, uint8_t _buflen)
shaunkrnelson 0:cc9f4010bba6 58 {
shaunkrnelson 0:cc9f4010bba6 59 header.type = senetPktType;
shaunkrnelson 0:cc9f4010bba6 60 header.version = VERSION;
shaunkrnelson 0:cc9f4010bba6 61 pktLen = 0;
shaunkrnelson 0:cc9f4010bba6 62
shaunkrnelson 0:cc9f4010bba6 63 if(_buffer != NULL)
shaunkrnelson 0:cc9f4010bba6 64 {
shaunkrnelson 0:cc9f4010bba6 65 buffer = _buffer;
shaunkrnelson 0:cc9f4010bba6 66 bufferLen = _buflen;
shaunkrnelson 0:cc9f4010bba6 67 ownBuffer = false;
shaunkrnelson 0:cc9f4010bba6 68 }
shaunkrnelson 0:cc9f4010bba6 69 else
shaunkrnelson 0:cc9f4010bba6 70 {
shaunkrnelson 0:cc9f4010bba6 71 if(_buflen != 0)
shaunkrnelson 0:cc9f4010bba6 72 bufferLen = _buflen;
shaunkrnelson 0:cc9f4010bba6 73 else
shaunkrnelson 0:cc9f4010bba6 74 bufferLen = MAX_FRAME_SIZE;
shaunkrnelson 0:cc9f4010bba6 75
shaunkrnelson 0:cc9f4010bba6 76 buffer = new uint8_t[bufferLen];
shaunkrnelson 0:cc9f4010bba6 77 ASSERT(buffer != NULL);
shaunkrnelson 0:cc9f4010bba6 78 ownBuffer = true;
shaunkrnelson 0:cc9f4010bba6 79 }
shaunkrnelson 0:cc9f4010bba6 80 memset(buffer, 0, bufferLen);
shaunkrnelson 0:cc9f4010bba6 81 }
shaunkrnelson 0:cc9f4010bba6 82
shaunkrnelson 0:cc9f4010bba6 83
shaunkrnelson 0:cc9f4010bba6 84 SenetPacket::~SenetPacket()
shaunkrnelson 0:cc9f4010bba6 85 {
shaunkrnelson 0:cc9f4010bba6 86 if(ownBuffer == true)
shaunkrnelson 0:cc9f4010bba6 87 delete buffer;
shaunkrnelson 0:cc9f4010bba6 88 }
shaunkrnelson 0:cc9f4010bba6 89
shaunkrnelson 0:cc9f4010bba6 90
shaunkrnelson 0:cc9f4010bba6 91 int32_t SenetPacket::serialize()
shaunkrnelson 0:cc9f4010bba6 92 {
shaunkrnelson 0:cc9f4010bba6 93 pktLen = header.serialize(buffer, bufferLen);
shaunkrnelson 0:cc9f4010bba6 94 ASSERT(pktLen > 0);
shaunkrnelson 0:cc9f4010bba6 95
shaunkrnelson 0:cc9f4010bba6 96 if(pktLen > 0)
shaunkrnelson 0:cc9f4010bba6 97 {
shaunkrnelson 0:cc9f4010bba6 98 int32_t payloadLen = serializePayload(buffer + pktLen, bufferLen - pktLen);
shaunkrnelson 0:cc9f4010bba6 99
shaunkrnelson 0:cc9f4010bba6 100 ASSERT(payloadLen > 0);
shaunkrnelson 0:cc9f4010bba6 101
shaunkrnelson 0:cc9f4010bba6 102 if(payloadLen > 0)
shaunkrnelson 0:cc9f4010bba6 103 {
shaunkrnelson 0:cc9f4010bba6 104 pktLen += payloadLen;
shaunkrnelson 0:cc9f4010bba6 105 return pktLen;
shaunkrnelson 0:cc9f4010bba6 106 }
shaunkrnelson 0:cc9f4010bba6 107 }
shaunkrnelson 0:cc9f4010bba6 108
shaunkrnelson 0:cc9f4010bba6 109 return -1;
shaunkrnelson 0:cc9f4010bba6 110 }
shaunkrnelson 0:cc9f4010bba6 111
shaunkrnelson 1:3e0cc8ad24f1 112 int32_t SenetPacket::deserialize(uint8_t *frame, int32_t len)
shaunkrnelson 1:3e0cc8ad24f1 113 {
shaunkrnelson 1:3e0cc8ad24f1 114 int32_t bytes = 0;
shaunkrnelson 1:3e0cc8ad24f1 115
shaunkrnelson 1:3e0cc8ad24f1 116 bytes = header.deserialize(frame, len);
shaunkrnelson 1:3e0cc8ad24f1 117 if(bytes > 0)
shaunkrnelson 1:3e0cc8ad24f1 118 {
shaunkrnelson 1:3e0cc8ad24f1 119 int32_t payloadLen = deserializePayload(frame, len - bytes);
shaunkrnelson 1:3e0cc8ad24f1 120 if(payloadLen > 0)
shaunkrnelson 1:3e0cc8ad24f1 121 bytes += payloadLen;
shaunkrnelson 1:3e0cc8ad24f1 122 else
shaunkrnelson 1:3e0cc8ad24f1 123 bytes = payloadLen;
shaunkrnelson 1:3e0cc8ad24f1 124
shaunkrnelson 1:3e0cc8ad24f1 125 }
shaunkrnelson 1:3e0cc8ad24f1 126 return bytes;
shaunkrnelson 1:3e0cc8ad24f1 127 }
shaunkrnelson 1:3e0cc8ad24f1 128
shaunkrnelson 0:cc9f4010bba6 129
shaunkrnelson 0:cc9f4010bba6 130 bool SensorPacket::addSensorValue(uint8_t position, uint8_t type, uint16_t value)
shaunkrnelson 0:cc9f4010bba6 131 {
shaunkrnelson 0:cc9f4010bba6 132 if (position < MAX_SENSOR_VALUES)
shaunkrnelson 0:cc9f4010bba6 133 {
shaunkrnelson 0:cc9f4010bba6 134 sensorValue[position].type = type;
shaunkrnelson 0:cc9f4010bba6 135 sensorValue[position].value = value;
shaunkrnelson 0:cc9f4010bba6 136 sensorValue[position].isSet = true;
shaunkrnelson 0:cc9f4010bba6 137 return true;
shaunkrnelson 0:cc9f4010bba6 138 }
shaunkrnelson 0:cc9f4010bba6 139 else
shaunkrnelson 0:cc9f4010bba6 140 return false;
shaunkrnelson 0:cc9f4010bba6 141 }
shaunkrnelson 0:cc9f4010bba6 142
shaunkrnelson 0:cc9f4010bba6 143 int32_t SensorPacket::serializePayload(uint8_t *buffer, int32_t len)
shaunkrnelson 0:cc9f4010bba6 144 {
shaunkrnelson 0:cc9f4010bba6 145 int32_t bytes = 0;
shaunkrnelson 0:cc9f4010bba6 146 int32_t dataLen = 0;
shaunkrnelson 0:cc9f4010bba6 147
shaunkrnelson 0:cc9f4010bba6 148 for(int32_t i = 0; i < MAX_SENSOR_VALUES; i++)
shaunkrnelson 0:cc9f4010bba6 149 {
shaunkrnelson 0:cc9f4010bba6 150 if(sensorValue[i].isSet == true)
shaunkrnelson 0:cc9f4010bba6 151 {
shaunkrnelson 0:cc9f4010bba6 152 dataLen = sensorValue[i].serialize(buffer+bytes, len - bytes);
shaunkrnelson 0:cc9f4010bba6 153 if(dataLen == -1)
shaunkrnelson 0:cc9f4010bba6 154 return -1;
shaunkrnelson 0:cc9f4010bba6 155 bytes += dataLen;
shaunkrnelson 0:cc9f4010bba6 156 }
shaunkrnelson 0:cc9f4010bba6 157 }
shaunkrnelson 0:cc9f4010bba6 158 return bytes;
shaunkrnelson 0:cc9f4010bba6 159 }
shaunkrnelson 0:cc9f4010bba6 160
shaunkrnelson 0:cc9f4010bba6 161 bool SelfIdPacket::setDeviceType(uint32_t model, uint8_t revision)
shaunkrnelson 0:cc9f4010bba6 162 {
shaunkrnelson 0:cc9f4010bba6 163 if((model & 0x00FFFFFF) != model)
shaunkrnelson 0:cc9f4010bba6 164 return false;
shaunkrnelson 0:cc9f4010bba6 165
shaunkrnelson 0:cc9f4010bba6 166 deviceType = (model<<8)|revision;
shaunkrnelson 0:cc9f4010bba6 167 return true;
shaunkrnelson 0:cc9f4010bba6 168 }
shaunkrnelson 0:cc9f4010bba6 169
shaunkrnelson 0:cc9f4010bba6 170 bool SelfIdPacket::setSwVersion(uint8_t major, uint8_t minor, uint8_t point, uint16_t build, uint8_t developerId)
shaunkrnelson 0:cc9f4010bba6 171 {
shaunkrnelson 0:cc9f4010bba6 172 uint8_t _major = major & 0xf;
shaunkrnelson 0:cc9f4010bba6 173 uint8_t _minor = minor & 0xf;
shaunkrnelson 0:cc9f4010bba6 174 uint8_t _point = point & 0x3f;
shaunkrnelson 0:cc9f4010bba6 175 uint16_t _build = build & 0x3ff;
shaunkrnelson 0:cc9f4010bba6 176 uint8_t _devid = developerId & 0xff;
shaunkrnelson 0:cc9f4010bba6 177
shaunkrnelson 0:cc9f4010bba6 178 if((_major != major) || (_minor != minor) || (_point != point) || (_build != build) || (_devid != developerId))
shaunkrnelson 0:cc9f4010bba6 179 return false;
shaunkrnelson 0:cc9f4010bba6 180
shaunkrnelson 0:cc9f4010bba6 181 swVersion = (_major << 28) | (_minor << 24) | (_point << 18) | (_build << 8) | _devid;
shaunkrnelson 0:cc9f4010bba6 182 return true;
shaunkrnelson 0:cc9f4010bba6 183 }
shaunkrnelson 0:cc9f4010bba6 184
shaunkrnelson 0:cc9f4010bba6 185 void SelfIdPacket::setBatteryFailState(bool failed)
shaunkrnelson 0:cc9f4010bba6 186 {
shaunkrnelson 0:cc9f4010bba6 187 if(failed == true)
shaunkrnelson 0:cc9f4010bba6 188 powerMask |= 1 << 3;
shaunkrnelson 0:cc9f4010bba6 189 else
shaunkrnelson 0:cc9f4010bba6 190 powerMask &= ~(1 << 3);
shaunkrnelson 0:cc9f4010bba6 191 }
shaunkrnelson 0:cc9f4010bba6 192
shaunkrnelson 0:cc9f4010bba6 193 bool SelfIdPacket::setBatteryLevel(uint8_t level)
shaunkrnelson 0:cc9f4010bba6 194 {
shaunkrnelson 0:cc9f4010bba6 195 uint8_t _level = level & 0x7;
shaunkrnelson 0:cc9f4010bba6 196
shaunkrnelson 0:cc9f4010bba6 197 if(level != _level)
shaunkrnelson 0:cc9f4010bba6 198 return false;
shaunkrnelson 0:cc9f4010bba6 199
shaunkrnelson 0:cc9f4010bba6 200 powerMask &= 0xf8;
shaunkrnelson 0:cc9f4010bba6 201 powerMask |= _level;
shaunkrnelson 0:cc9f4010bba6 202
shaunkrnelson 0:cc9f4010bba6 203 return true;
shaunkrnelson 0:cc9f4010bba6 204 }
shaunkrnelson 0:cc9f4010bba6 205
shaunkrnelson 0:cc9f4010bba6 206 bool SelfIdPacket::setExtPowerSupplyState(uint8_t id, bool isPresent)
shaunkrnelson 0:cc9f4010bba6 207 {
shaunkrnelson 0:cc9f4010bba6 208 bool retVal = false;
shaunkrnelson 0:cc9f4010bba6 209 if(id == EXT_POWER_SUPPLY_1)
shaunkrnelson 0:cc9f4010bba6 210 {
shaunkrnelson 0:cc9f4010bba6 211 powerMask &= 0x7F;
shaunkrnelson 0:cc9f4010bba6 212 if(isPresent)
shaunkrnelson 0:cc9f4010bba6 213 powerMask |= 0x80;
shaunkrnelson 0:cc9f4010bba6 214 retVal = true;
shaunkrnelson 0:cc9f4010bba6 215 }
shaunkrnelson 0:cc9f4010bba6 216 else if(id == EXT_POWER_SUPPLY_2)
shaunkrnelson 0:cc9f4010bba6 217 {
shaunkrnelson 0:cc9f4010bba6 218 powerMask &= 0xBF;
shaunkrnelson 0:cc9f4010bba6 219 if(isPresent)
shaunkrnelson 0:cc9f4010bba6 220 powerMask |= 0x40;
shaunkrnelson 0:cc9f4010bba6 221 retVal = true;
shaunkrnelson 0:cc9f4010bba6 222 }
shaunkrnelson 0:cc9f4010bba6 223 return retVal;
shaunkrnelson 0:cc9f4010bba6 224 }
shaunkrnelson 0:cc9f4010bba6 225
shaunkrnelson 0:cc9f4010bba6 226 int32_t SelfIdPacket::serializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 227 {
shaunkrnelson 0:cc9f4010bba6 228 int32_t out = -1;
shaunkrnelson 0:cc9f4010bba6 229
shaunkrnelson 0:cc9f4010bba6 230 if(SELFID_PAYLOAD_LEN <= len)
shaunkrnelson 0:cc9f4010bba6 231 {
shaunkrnelson 0:cc9f4010bba6 232 frame[0] = (deviceType>>16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 233 frame[1] = (deviceType>>8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 234 frame[2] = deviceType & 0xff;
shaunkrnelson 0:cc9f4010bba6 235
shaunkrnelson 0:cc9f4010bba6 236 frame[3] = (swVersion >> 24) & 0xff;
shaunkrnelson 0:cc9f4010bba6 237 frame[4] = (swVersion >> 16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 238 frame[5] = (swVersion >> 8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 239 frame[6] = swVersion & 0xff;
shaunkrnelson 0:cc9f4010bba6 240
shaunkrnelson 0:cc9f4010bba6 241 frame[7] = powerMask;
shaunkrnelson 0:cc9f4010bba6 242
shaunkrnelson 0:cc9f4010bba6 243 out = SELFID_PAYLOAD_LEN;
shaunkrnelson 0:cc9f4010bba6 244 }
shaunkrnelson 0:cc9f4010bba6 245
shaunkrnelson 0:cc9f4010bba6 246 return out;
shaunkrnelson 0:cc9f4010bba6 247 }
shaunkrnelson 0:cc9f4010bba6 248
shaunkrnelson 0:cc9f4010bba6 249 int32_t ConfigWordPacket::serializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 250 {
shaunkrnelson 0:cc9f4010bba6 251 int32_t out = -1;
shaunkrnelson 0:cc9f4010bba6 252
shaunkrnelson 0:cc9f4010bba6 253 if(CONTROL_PAYLOAD_LENGTH <= len)
shaunkrnelson 0:cc9f4010bba6 254 {
shaunkrnelson 0:cc9f4010bba6 255 frame[0] = (config>>24) & 0xff;
shaunkrnelson 0:cc9f4010bba6 256 frame[1] = (config>>16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 257 frame[2] = (config>>8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 258 frame[3] = config & 0xff;
shaunkrnelson 0:cc9f4010bba6 259
shaunkrnelson 0:cc9f4010bba6 260 frame[4] = (mask>>24) & 0xff;
shaunkrnelson 0:cc9f4010bba6 261 frame[5] = (mask>>16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 262 frame[6] = (mask>>8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 263 frame[7] = mask & 0xff;
shaunkrnelson 0:cc9f4010bba6 264
shaunkrnelson 0:cc9f4010bba6 265 frame[8] = authKey;
shaunkrnelson 0:cc9f4010bba6 266 out = CONTROL_PAYLOAD_LENGTH;
shaunkrnelson 0:cc9f4010bba6 267 }
shaunkrnelson 0:cc9f4010bba6 268
shaunkrnelson 0:cc9f4010bba6 269 return out;
shaunkrnelson 0:cc9f4010bba6 270
shaunkrnelson 0:cc9f4010bba6 271 }
shaunkrnelson 0:cc9f4010bba6 272
shaunkrnelson 1:3e0cc8ad24f1 273 int32_t ConfigWordPacket::deserializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 1:3e0cc8ad24f1 274 {
shaunkrnelson 1:3e0cc8ad24f1 275 if(CONTROL_PAYLOAD_LENGTH <= len)
shaunkrnelson 1:3e0cc8ad24f1 276 {
shaunkrnelson 1:3e0cc8ad24f1 277 int32_t offset = 0;
shaunkrnelson 1:3e0cc8ad24f1 278
shaunkrnelson 1:3e0cc8ad24f1 279 config = frame[offset++]<<24;
shaunkrnelson 1:3e0cc8ad24f1 280 config |= frame[offset++]<<16;
shaunkrnelson 1:3e0cc8ad24f1 281 config |= frame[offset++]<<8;
shaunkrnelson 1:3e0cc8ad24f1 282 config |= frame[offset++];
shaunkrnelson 1:3e0cc8ad24f1 283
shaunkrnelson 1:3e0cc8ad24f1 284 mask = frame[offset++]<<24;
shaunkrnelson 1:3e0cc8ad24f1 285 mask |= frame[offset++]<<16;
shaunkrnelson 1:3e0cc8ad24f1 286 mask |= frame[offset++]<<8;
shaunkrnelson 1:3e0cc8ad24f1 287 mask |= frame[offset++];
shaunkrnelson 1:3e0cc8ad24f1 288
shaunkrnelson 1:3e0cc8ad24f1 289 authKey = frame[offset++];
shaunkrnelson 1:3e0cc8ad24f1 290
shaunkrnelson 1:3e0cc8ad24f1 291 return offset;
shaunkrnelson 1:3e0cc8ad24f1 292 }
shaunkrnelson 1:3e0cc8ad24f1 293 return -1;
shaunkrnelson 1:3e0cc8ad24f1 294 }
shaunkrnelson 1:3e0cc8ad24f1 295
shaunkrnelson 1:3e0cc8ad24f1 296
shaunkrnelson 0:cc9f4010bba6 297 int32_t BootInfoPacket::serializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 298 {
shaunkrnelson 0:cc9f4010bba6 299 int32_t out = -1;
shaunkrnelson 0:cc9f4010bba6 300
shaunkrnelson 0:cc9f4010bba6 301 if(BOOT_PAYLOAD_LENGTH <= len)
shaunkrnelson 0:cc9f4010bba6 302 {
shaunkrnelson 0:cc9f4010bba6 303 frame[0] = (bootCount<<8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 304 frame[1] = bootCount & 0xff;
shaunkrnelson 0:cc9f4010bba6 305
shaunkrnelson 0:cc9f4010bba6 306 frame[2] = (resetCount<<8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 307 frame[3] = resetCount & 0xff;
shaunkrnelson 0:cc9f4010bba6 308
shaunkrnelson 0:cc9f4010bba6 309 frame[4] = (lastBootReason<<24) & 0xff;
shaunkrnelson 0:cc9f4010bba6 310 frame[5] = (lastBootReason<<16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 311 frame[6] = (lastBootReason<<8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 312
shaunkrnelson 0:cc9f4010bba6 313 out = BOOT_PAYLOAD_LENGTH;
shaunkrnelson 0:cc9f4010bba6 314 }
shaunkrnelson 0:cc9f4010bba6 315
shaunkrnelson 0:cc9f4010bba6 316 return out;
shaunkrnelson 0:cc9f4010bba6 317 }
shaunkrnelson 0:cc9f4010bba6 318
shaunkrnelson 1:3e0cc8ad24f1 319 bool GpsPacket::setCoordinates(int32_t _latitude, int32_t _longitude, uint16_t _elevation)
shaunkrnelson 0:cc9f4010bba6 320 {
shaunkrnelson 0:cc9f4010bba6 321 latitude = _latitude;
shaunkrnelson 0:cc9f4010bba6 322 longitude = _longitude;
shaunkrnelson 0:cc9f4010bba6 323 elevation = _elevation;
shaunkrnelson 0:cc9f4010bba6 324
shaunkrnelson 0:cc9f4010bba6 325 return true;
shaunkrnelson 0:cc9f4010bba6 326 }
shaunkrnelson 0:cc9f4010bba6 327
shaunkrnelson 0:cc9f4010bba6 328 int32_t GpsPacket::serializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 329 {
shaunkrnelson 0:cc9f4010bba6 330 int32_t out = -1;
shaunkrnelson 0:cc9f4010bba6 331
shaunkrnelson 0:cc9f4010bba6 332 if(GPS_PAYLOAD_LENGTH <= len)
shaunkrnelson 0:cc9f4010bba6 333 {
shaunkrnelson 0:cc9f4010bba6 334 frame[0] = (latitude>>16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 335 frame[1] = (latitude>>8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 336 frame[2] = latitude & 0xff;
shaunkrnelson 0:cc9f4010bba6 337
shaunkrnelson 0:cc9f4010bba6 338 frame[3] = (longitude>>16) & 0xff;
shaunkrnelson 0:cc9f4010bba6 339 frame[4] = (longitude>>8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 340 frame[5] = longitude & 0xff;
shaunkrnelson 0:cc9f4010bba6 341
shaunkrnelson 0:cc9f4010bba6 342 frame[6] = (elevation>>8) & 0xff;
shaunkrnelson 0:cc9f4010bba6 343 frame[7] = elevation & 0xff;
shaunkrnelson 0:cc9f4010bba6 344
shaunkrnelson 0:cc9f4010bba6 345 frame[8] = txPower;
shaunkrnelson 0:cc9f4010bba6 346
shaunkrnelson 0:cc9f4010bba6 347 out = GPS_PAYLOAD_LENGTH;
shaunkrnelson 0:cc9f4010bba6 348 }
shaunkrnelson 0:cc9f4010bba6 349
shaunkrnelson 0:cc9f4010bba6 350 return out;
shaunkrnelson 0:cc9f4010bba6 351 }
shaunkrnelson 0:cc9f4010bba6 352
shaunkrnelson 0:cc9f4010bba6 353 int32_t RFDataPacket::serializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 354 {
shaunkrnelson 0:cc9f4010bba6 355 int32_t out = -1;
shaunkrnelson 0:cc9f4010bba6 356
shaunkrnelson 0:cc9f4010bba6 357 if(RFDATA_PAYLOAD_LEN <= len)
shaunkrnelson 0:cc9f4010bba6 358 {
shaunkrnelson 0:cc9f4010bba6 359 frame[0] = channel;
shaunkrnelson 0:cc9f4010bba6 360 frame[1] = txpower;
shaunkrnelson 0:cc9f4010bba6 361 frame[2] = datarate;
shaunkrnelson 0:cc9f4010bba6 362 frame[3] = snr;
shaunkrnelson 0:cc9f4010bba6 363 frame[4] = rssi;
shaunkrnelson 0:cc9f4010bba6 364 frame[5] = (timestamp >> 16)& 0xff;
shaunkrnelson 0:cc9f4010bba6 365 frame[6] = (timestamp >> 8)& 0xff;
shaunkrnelson 0:cc9f4010bba6 366 frame[7] = timestamp & 0xff;
shaunkrnelson 0:cc9f4010bba6 367 out = RFDATA_PAYLOAD_LEN;
shaunkrnelson 0:cc9f4010bba6 368 }
shaunkrnelson 0:cc9f4010bba6 369 return out;
shaunkrnelson 0:cc9f4010bba6 370 }
shaunkrnelson 0:cc9f4010bba6 371
shaunkrnelson 0:cc9f4010bba6 372
shaunkrnelson 0:cc9f4010bba6 373 OctetStringPacket::OctetStringPacket(uint8_t size) :
shaunkrnelson 0:cc9f4010bba6 374 SenetPacket(OCTET_STRING_PACKET, NULL, size + SenetPacket::PacketHeader::HEADER_SIZE)
shaunkrnelson 0:cc9f4010bba6 375 {
shaunkrnelson 0:cc9f4010bba6 376 max = size;
shaunkrnelson 0:cc9f4010bba6 377 oslen = 0;
shaunkrnelson 0:cc9f4010bba6 378 }
shaunkrnelson 0:cc9f4010bba6 379
shaunkrnelson 0:cc9f4010bba6 380 bool OctetStringPacket::setOctetString(uint8_t *os, uint8_t len)
shaunkrnelson 0:cc9f4010bba6 381 {
shaunkrnelson 0:cc9f4010bba6 382 if(len > max)
shaunkrnelson 0:cc9f4010bba6 383 return false;
shaunkrnelson 0:cc9f4010bba6 384
shaunkrnelson 0:cc9f4010bba6 385 oslen = len;
shaunkrnelson 0:cc9f4010bba6 386 memcpy(buffer+PacketHeader::HEADER_SIZE, os, oslen);
shaunkrnelson 0:cc9f4010bba6 387 return true;
shaunkrnelson 0:cc9f4010bba6 388 }
shaunkrnelson 0:cc9f4010bba6 389
shaunkrnelson 0:cc9f4010bba6 390 int32_t OctetStringPacket::serializePayload(uint8_t *frame, int32_t len)
shaunkrnelson 0:cc9f4010bba6 391 {
shaunkrnelson 0:cc9f4010bba6 392 int32_t out = -1;
shaunkrnelson 0:cc9f4010bba6 393
shaunkrnelson 0:cc9f4010bba6 394 if(oslen >= len)
shaunkrnelson 0:cc9f4010bba6 395 {
shaunkrnelson 0:cc9f4010bba6 396 memcpy(frame, buffer + PacketHeader::HEADER_SIZE, oslen);
shaunkrnelson 0:cc9f4010bba6 397 out = oslen;
shaunkrnelson 0:cc9f4010bba6 398 }
shaunkrnelson 0:cc9f4010bba6 399
shaunkrnelson 0:cc9f4010bba6 400 return out;
shaunkrnelson 0:cc9f4010bba6 401 }
shaunkrnelson 0:cc9f4010bba6 402