edge
/
testPayloadManipulation
initial publish
payload.h
- Committer:
- boddeke
- Date:
- 2016-05-18
- Revision:
- 0:31e47b639d0f
- Child:
- 1:f5b145be9d8e
File content as of revision 0:31e47b639d0f:
// automagically generated (version 20160519) // by: http://iot.edgetech.nl/iot/node/includeFile?node=0x01 // on: 20160519 #include <Semaphore.h> #pragma pack(push, 1) #define NODE_ID 0x01 typedef struct payloadvalues{ unsigned char node_id; unsigned char reed_sensor_value: 1; unsigned char change_in_last_ack_window: 1; unsigned char low_battery: 1; unsigned char battery_level; } PayloadValues; typedef union payload { PayloadValues values; char b[sizeof(PayloadValues)]; } Payload; Payload payload_new = {NODE_ID,0,0}; Payload payload_last = {NODE_ID,0,0}; #pragma pack(pop) Semaphore payload_protect(1); int setReedSensorValue(unsigned char value) { if(value>1) { return(0); } payload_protect.wait(); payload_new.values.reed_sensor_value = value; payload_protect.release(); return(1); } int setChangeInLastAckWindow(unsigned char value) { if(value>1) { return(0); } payload_protect.wait(); payload_new.values.change_in_last_ack_window = value; payload_protect.release(); return(1); } int setLowBattery(unsigned char value) { if(value>1) { return(0); } payload_protect.wait(); payload_new.values.low_battery = value; payload_protect.release(); return(1); } int setBatteryLevel(unsigned char value) { payload_protect.wait(); payload_new.values.battery_level = value; payload_protect.release(); return(1); } int hasChanges() { payload_protect.wait(); for(int i=1;i<sizeof(Payload);i++) { if(payload_new.b[i]!=payload_last.b[i]) { payload_protect.release(); return(1); } } payload_protect.release(); return(0); } void getDataAndUpdate(std::vector<uint8_t> *b) { payload_protect.wait(); std::copy(payload_new.b, payload_new.b + sizeof(Payload), b->begin()); std::copy(payload_new.b, payload_new.b + sizeof(Payload), payload_last.b); payload_protect.release(); }