code for gateway node connecting by wifi with backend and by radio with sensor nodes

Dependencies:   mbed coapRadio

Committer:
Ka_myk
Date:
Thu Jan 24 16:27:29 2019 +0000
Revision:
0:544925185af9
Child:
1:605fa4405e4f
Gateway code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ka_myk 0:544925185af9 1 #include "mbed.h"
Ka_myk 0:544925185af9 2 #include "coapServer.h"
Ka_myk 0:544925185af9 3 #include "radioWrapper.h"
Ka_myk 0:544925185af9 4 #include <string>
Ka_myk 0:544925185af9 5 #include "dbg.h"
Ka_myk 0:544925185af9 6 #include "msg.h"
Ka_myk 0:544925185af9 7 #include "itoa.h"
Ka_myk 0:544925185af9 8
Ka_myk 0:544925185af9 9 int channel = 4;
Ka_myk 0:544925185af9 10
Ka_myk 0:544925185af9 11 unsigned long long txAdress = 0xABCDEF08;
Ka_myk 0:544925185af9 12 unsigned long long rxAdress[] = {0xABCDEF11, 0xABCDEF12, 0xABCDEF13};
Ka_myk 0:544925185af9 13
Ka_myk 0:544925185af9 14
Ka_myk 0:544925185af9 15 Serial pc(USBTX, USBRX); // tx, rx
Ka_myk 0:544925185af9 16 InterruptIn button(USER_BUTTON);
Ka_myk 0:544925185af9 17 bool start = false;
Ka_myk 0:544925185af9 18
Ka_myk 0:544925185af9 19 void send_packet() {
Ka_myk 0:544925185af9 20 start = true;
Ka_myk 0:544925185af9 21 }
Ka_myk 0:544925185af9 22
Ka_myk 0:544925185af9 23 int main() {
Ka_myk 0:544925185af9 24 pc.baud(115200);
Ka_myk 0:544925185af9 25 std::string uris[] = {"/dist", "/temp", "/hum", "/conf/dist", "/conf/temp", "/conf/hum"};
Ka_myk 0:544925185af9 26 CoapServer coapServer = CoapServer(32, 1000, uris, 6, channel, txAdress, rxAdress);
Ka_myk 0:544925185af9 27 button.rise(&send_packet);
Ka_myk 0:544925185af9 28 uint8_t buffer[32];
Ka_myk 0:544925185af9 29 CoapServer::METHOD method;
Ka_myk 0:544925185af9 30 int uriNum = -1;
Ka_myk 0:544925185af9 31 pc.printf("Server initialized \r\n");
Ka_myk 0:544925185af9 32 int pipe = -1;
Ka_myk 0:544925185af9 33 while (1) {
Ka_myk 0:544925185af9 34 while (start) {
Ka_myk 0:544925185af9 35 int ret = coapServer.listen(buffer, 32, &method, &uriNum, &pipe);
Ka_myk 0:544925185af9 36 pc.printf("Code : %d \r\n", ret);
Ka_myk 0:544925185af9 37 if (ret >= 0) {
Ka_myk 0:544925185af9 38 pc.printf("Recieved: %s \r\n", buffer);
Ka_myk 0:544925185af9 39 int resLen = 0;
Ka_myk 0:544925185af9 40 if (method == CoapServer::POST) {
Ka_myk 0:544925185af9 41 resLen = coapServer.respond(uriNum, NULL, 0, CoapPDU::COAP_CREATED, pipe);
Ka_myk 0:544925185af9 42 int data = 0;
Ka_myk 0:544925185af9 43 uint8_t sensor = 1;
Ka_myk 0:544925185af9 44 Msg::deconstruct_data_msg(&sensor, &data, buffer, ret);
Ka_myk 0:544925185af9 45 switch (uriNum % 3) {
Ka_myk 0:544925185af9 46 case 0:
Ka_myk 0:544925185af9 47 DBG("dist %d", data);
Ka_myk 0:544925185af9 48 break;
Ka_myk 0:544925185af9 49 case 1:
Ka_myk 0:544925185af9 50 DBG("TEMP %d", data);
Ka_myk 0:544925185af9 51 break;
Ka_myk 0:544925185af9 52 case 2:
Ka_myk 0:544925185af9 53 DBG("HUM %d", data);
Ka_myk 0:544925185af9 54 break;
Ka_myk 0:544925185af9 55 }
Ka_myk 0:544925185af9 56 } else if (method == CoapServer::GET) {
Ka_myk 0:544925185af9 57 uint8_t response[32];
Ka_myk 0:544925185af9 58 switch (uriNum % 3) {
Ka_myk 0:544925185af9 59 case 0:
Ka_myk 0:544925185af9 60 itoa(10, (char*)response, 10);
Ka_myk 0:544925185af9 61 break;
Ka_myk 0:544925185af9 62 case 1:
Ka_myk 0:544925185af9 63 itoa(20, (char*)response, 10);
Ka_myk 0:544925185af9 64 break;
Ka_myk 0:544925185af9 65 case 2:
Ka_myk 0:544925185af9 66 itoa(30, (char*)response, 10);
Ka_myk 0:544925185af9 67 break;
Ka_myk 0:544925185af9 68 }
Ka_myk 0:544925185af9 69
Ka_myk 0:544925185af9 70 resLen = coapServer.respond(uriNum, response, std::strlen((char*)response), CoapPDU::COAP_CONTENT, pipe);
Ka_myk 0:544925185af9 71 }
Ka_myk 0:544925185af9 72 DBG("RESPONDED WITH %d", resLen);
Ka_myk 0:544925185af9 73 }
Ka_myk 0:544925185af9 74 }
Ka_myk 0:544925185af9 75 }
Ka_myk 0:544925185af9 76 }