Senet Packet API

Committer:
shaunkrnelson
Date:
Mon Jul 24 13:39:35 2017 -0400
Revision:
2:6b85f72fe93b
Parent:
1:c4435fed9eb9
To enable assert define ASSERT_IS_ENABLED

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