edge
/
testPayloadManipulation
initial publish
payload.h@0:31e47b639d0f, 2016-05-18 (annotated)
- Committer:
- boddeke
- Date:
- Wed May 18 08:37:47 2016 +0000
- Revision:
- 0:31e47b639d0f
- Child:
- 1:f5b145be9d8e
updated with semaphores
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
boddeke | 0:31e47b639d0f | 1 | // automagically generated (version 20160519) |
boddeke | 0:31e47b639d0f | 2 | // by: http://iot.edgetech.nl/iot/node/includeFile?node=0x01 |
boddeke | 0:31e47b639d0f | 3 | // on: 20160519 |
boddeke | 0:31e47b639d0f | 4 | #include <Semaphore.h> |
boddeke | 0:31e47b639d0f | 5 | |
boddeke | 0:31e47b639d0f | 6 | #pragma pack(push, 1) |
boddeke | 0:31e47b639d0f | 7 | |
boddeke | 0:31e47b639d0f | 8 | #define NODE_ID 0x01 |
boddeke | 0:31e47b639d0f | 9 | |
boddeke | 0:31e47b639d0f | 10 | typedef struct payloadvalues{ |
boddeke | 0:31e47b639d0f | 11 | unsigned char node_id; |
boddeke | 0:31e47b639d0f | 12 | unsigned char reed_sensor_value: 1; |
boddeke | 0:31e47b639d0f | 13 | unsigned char change_in_last_ack_window: 1; |
boddeke | 0:31e47b639d0f | 14 | unsigned char low_battery: 1; |
boddeke | 0:31e47b639d0f | 15 | unsigned char battery_level; |
boddeke | 0:31e47b639d0f | 16 | } PayloadValues; |
boddeke | 0:31e47b639d0f | 17 | |
boddeke | 0:31e47b639d0f | 18 | typedef union payload { |
boddeke | 0:31e47b639d0f | 19 | PayloadValues values; |
boddeke | 0:31e47b639d0f | 20 | char b[sizeof(PayloadValues)]; |
boddeke | 0:31e47b639d0f | 21 | } Payload; |
boddeke | 0:31e47b639d0f | 22 | |
boddeke | 0:31e47b639d0f | 23 | Payload payload_new = {NODE_ID,0,0}; |
boddeke | 0:31e47b639d0f | 24 | Payload payload_last = {NODE_ID,0,0}; |
boddeke | 0:31e47b639d0f | 25 | #pragma pack(pop) |
boddeke | 0:31e47b639d0f | 26 | |
boddeke | 0:31e47b639d0f | 27 | Semaphore payload_protect(1); |
boddeke | 0:31e47b639d0f | 28 | |
boddeke | 0:31e47b639d0f | 29 | int setReedSensorValue(unsigned char value) { |
boddeke | 0:31e47b639d0f | 30 | if(value>1) { |
boddeke | 0:31e47b639d0f | 31 | return(0); |
boddeke | 0:31e47b639d0f | 32 | } |
boddeke | 0:31e47b639d0f | 33 | payload_protect.wait(); |
boddeke | 0:31e47b639d0f | 34 | payload_new.values.reed_sensor_value = value; |
boddeke | 0:31e47b639d0f | 35 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 36 | return(1); |
boddeke | 0:31e47b639d0f | 37 | } |
boddeke | 0:31e47b639d0f | 38 | |
boddeke | 0:31e47b639d0f | 39 | int setChangeInLastAckWindow(unsigned char value) { |
boddeke | 0:31e47b639d0f | 40 | if(value>1) { |
boddeke | 0:31e47b639d0f | 41 | return(0); |
boddeke | 0:31e47b639d0f | 42 | } |
boddeke | 0:31e47b639d0f | 43 | payload_protect.wait(); |
boddeke | 0:31e47b639d0f | 44 | payload_new.values.change_in_last_ack_window = value; |
boddeke | 0:31e47b639d0f | 45 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 46 | return(1); |
boddeke | 0:31e47b639d0f | 47 | } |
boddeke | 0:31e47b639d0f | 48 | |
boddeke | 0:31e47b639d0f | 49 | int setLowBattery(unsigned char value) { |
boddeke | 0:31e47b639d0f | 50 | if(value>1) { |
boddeke | 0:31e47b639d0f | 51 | return(0); |
boddeke | 0:31e47b639d0f | 52 | } |
boddeke | 0:31e47b639d0f | 53 | payload_protect.wait(); |
boddeke | 0:31e47b639d0f | 54 | payload_new.values.low_battery = value; |
boddeke | 0:31e47b639d0f | 55 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 56 | return(1); |
boddeke | 0:31e47b639d0f | 57 | } |
boddeke | 0:31e47b639d0f | 58 | |
boddeke | 0:31e47b639d0f | 59 | int setBatteryLevel(unsigned char value) { |
boddeke | 0:31e47b639d0f | 60 | payload_protect.wait(); |
boddeke | 0:31e47b639d0f | 61 | payload_new.values.battery_level = value; |
boddeke | 0:31e47b639d0f | 62 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 63 | return(1); |
boddeke | 0:31e47b639d0f | 64 | } |
boddeke | 0:31e47b639d0f | 65 | |
boddeke | 0:31e47b639d0f | 66 | int hasChanges() { |
boddeke | 0:31e47b639d0f | 67 | payload_protect.wait(); |
boddeke | 0:31e47b639d0f | 68 | for(int i=1;i<sizeof(Payload);i++) { |
boddeke | 0:31e47b639d0f | 69 | if(payload_new.b[i]!=payload_last.b[i]) { |
boddeke | 0:31e47b639d0f | 70 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 71 | return(1); |
boddeke | 0:31e47b639d0f | 72 | } |
boddeke | 0:31e47b639d0f | 73 | } |
boddeke | 0:31e47b639d0f | 74 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 75 | return(0); |
boddeke | 0:31e47b639d0f | 76 | } |
boddeke | 0:31e47b639d0f | 77 | |
boddeke | 0:31e47b639d0f | 78 | void getDataAndUpdate(std::vector<uint8_t> *b) { |
boddeke | 0:31e47b639d0f | 79 | payload_protect.wait(); |
boddeke | 0:31e47b639d0f | 80 | std::copy(payload_new.b, payload_new.b + sizeof(Payload), b->begin()); |
boddeke | 0:31e47b639d0f | 81 | std::copy(payload_new.b, payload_new.b + sizeof(Payload), payload_last.b); |
boddeke | 0:31e47b639d0f | 82 | payload_protect.release(); |
boddeke | 0:31e47b639d0f | 83 | } |
boddeke | 0:31e47b639d0f | 84 |