Senet Packet API

Committer:
shaunkrnelson
Date:
Mon Mar 07 12:08:34 2016 -0500
Revision:
1:c4435fed9eb9
Parent:
0:08689149c8e3
Child:
2:6b85f72fe93b
Add buffer parameter to packet constructor
General cleanup

Who changed what in which revision?

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