updated

Dependencies:   MTS-Serial libmDot mbed-rtos mbed

Fork of mDot_LoRa_Street_light by HM_IOT_Demo

Committer:
venubk
Date:
Tue Oct 17 11:52:13 2017 +0000
Revision:
9:531bddbe36a9
Parent:
8:525a53f54326
energy meter integrated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hariom 2:20a5d4681abf 1 #include<stdio.h>
hariom 2:20a5d4681abf 2 #include "mbed.h"
hariom 2:20a5d4681abf 3 #include "mDot.h"
hariom 2:20a5d4681abf 4 #include "rtos.h"
hariom 2:20a5d4681abf 5 #include "wrapper.h"
hariom 2:20a5d4681abf 6 #include "MTSLog.h"
hariom 2:20a5d4681abf 7 #include"Thread.h"
hariom 2:20a5d4681abf 8 //#include"MTSLogs.h"
hariom 2:20a5d4681abf 9
hariom 2:20a5d4681abf 10 int spi_write(int *buf);
venubk 6:db60638d7f9a 11 int spi_read(int *buf);
hariom 2:20a5d4681abf 12 void zigbee_func(int deviceId,int state);
hariom 2:20a5d4681abf 13
hariom 2:20a5d4681abf 14 void ble_task(void const *args);
hariom 2:20a5d4681abf 15 void zigbee_task(void const *args);
hariom 2:20a5d4681abf 16
hariom 2:20a5d4681abf 17 Mutex my_mutex;
hariom 2:20a5d4681abf 18 //static int flag;
hariom 2:20a5d4681abf 19 extern int ble_flag;
hariom 2:20a5d4681abf 20 extern int zigbee_flag;
hariom 2:20a5d4681abf 21 char gateway_buffer[128];
hariom 2:20a5d4681abf 22 int device_buffer[8];
hariom 2:20a5d4681abf 23
hariom 2:20a5d4681abf 24 int process_gateway_data(const char *device_type, int *device_buffer, char *data_buffer)
hariom 2:20a5d4681abf 25 {
hariom 2:20a5d4681abf 26 const char *pBuf;
hariom 2:20a5d4681abf 27 int len;
hariom 2:20a5d4681abf 28 int i;
hariom 2:20a5d4681abf 29
hariom 2:20a5d4681abf 30 my_mutex.lock();
hariom 2:20a5d4681abf 31 for (i = 0; i < 8; i++)
hariom 2:20a5d4681abf 32 device_buffer[i] = 0;
hariom 2:20a5d4681abf 33 //memset(device_buffer, 0, 8);
hariom 2:20a5d4681abf 34 pBuf = strstr(data_buffer, "DeviceType");
hariom 2:20a5d4681abf 35 if (!pBuf) {
hariom 2:20a5d4681abf 36 printf("device type not found\r\n");
hariom 2:20a5d4681abf 37 my_mutex.unlock();
hariom 2:20a5d4681abf 38 return false;
hariom 2:20a5d4681abf 39 }
hariom 2:20a5d4681abf 40
hariom 2:20a5d4681abf 41 pBuf += 13;
hariom 2:20a5d4681abf 42
hariom 2:20a5d4681abf 43 len = strstr((const char *)pBuf, ",") - (char *)pBuf - 1; /* ends with / */
hariom 2:20a5d4681abf 44 if (len <= 0) {
hariom 2:20a5d4681abf 45 my_mutex.unlock();
hariom 2:20a5d4681abf 46 return false;
hariom 2:20a5d4681abf 47 }
hariom 2:20a5d4681abf 48 strncpy ((char *)device_type, (const char *)pBuf, len);
hariom 2:20a5d4681abf 49 printf("device type is %s\r\n", device_type);
hariom 2:20a5d4681abf 50 if (!strcmp(device_type, "ble_bulbs")) {
hariom 2:20a5d4681abf 51 device_buffer[0] = 0xB3;
hariom 2:20a5d4681abf 52 device_buffer[1] = 0x01;
hariom 2:20a5d4681abf 53
hariom 2:20a5d4681abf 54 pBuf = strstr((const char *)pBuf, "powered");
hariom 2:20a5d4681abf 55 if (!pBuf) {
hariom 2:20a5d4681abf 56 printf("device action not found\r\n");
hariom 2:20a5d4681abf 57 my_mutex.unlock();
hariom 2:20a5d4681abf 58 return false;
hariom 2:20a5d4681abf 59 }
hariom 2:20a5d4681abf 60
hariom 2:20a5d4681abf 61 pBuf += 9;
hariom 2:20a5d4681abf 62 len = strstr((const char *)pBuf, ",") - (char *)pBuf; /* ends with / */
hariom 2:20a5d4681abf 63 if (len <= 0) {
hariom 2:20a5d4681abf 64 my_mutex.unlock();
hariom 2:20a5d4681abf 65 return false;
hariom 2:20a5d4681abf 66 }
hariom 2:20a5d4681abf 67
hariom 2:20a5d4681abf 68 if (!strncmp ((char *)pBuf, "true", len)) {
hariom 2:20a5d4681abf 69 device_buffer[2] = 0x01;
hariom 2:20a5d4681abf 70 }
hariom 2:20a5d4681abf 71 else if (!strncmp ((char *)pBuf, "false", len)) {
hariom 2:20a5d4681abf 72 device_buffer[2] = 0x00;
hariom 2:20a5d4681abf 73 }
hariom 2:20a5d4681abf 74 else {
hariom 2:20a5d4681abf 75 device_buffer[2] = 0x02;
hariom 2:20a5d4681abf 76 }
hariom 2:20a5d4681abf 77
hariom 2:20a5d4681abf 78 pBuf = strstr((const char *)pBuf, "color");
hariom 2:20a5d4681abf 79 if (!pBuf) {
hariom 2:20a5d4681abf 80 printf("device color not found\r\n");
hariom 2:20a5d4681abf 81 my_mutex.unlock();
hariom 2:20a5d4681abf 82 return false;
hariom 2:20a5d4681abf 83 }
hariom 2:20a5d4681abf 84
hariom 2:20a5d4681abf 85 pBuf += 8;
hariom 2:20a5d4681abf 86 len = strstr((const char *)pBuf, ",") - (char *)pBuf - 1; /* ends with / */
hariom 2:20a5d4681abf 87 if (len <= 0) {
hariom 2:20a5d4681abf 88 my_mutex.unlock();
hariom 2:20a5d4681abf 89 return false;
hariom 2:20a5d4681abf 90 }
hariom 2:20a5d4681abf 91
hariom 2:20a5d4681abf 92 if (!strncmp ((char *)pBuf, "red", len)) {
hariom 2:20a5d4681abf 93 device_buffer[3] = 0x00;
hariom 2:20a5d4681abf 94 }
hariom 2:20a5d4681abf 95 else if (!strncmp ((char *)pBuf, "green", len)) {
hariom 2:20a5d4681abf 96 device_buffer[3] = 0x01;
hariom 2:20a5d4681abf 97 }
hariom 2:20a5d4681abf 98 else if (!strncmp ((char *)pBuf, "blue", len)){
hariom 2:20a5d4681abf 99 device_buffer[3] = 0x02;
hariom 2:20a5d4681abf 100 }
hariom 2:20a5d4681abf 101 else if (!strncmp ((char *)pBuf, "yellow", len)){
hariom 2:20a5d4681abf 102 device_buffer[3] = 0x03;
hariom 2:20a5d4681abf 103 }
hariom 2:20a5d4681abf 104 else if (!strncmp ((char *)pBuf, "cyan", len)){
hariom 2:20a5d4681abf 105 device_buffer[3] = 0x04;
hariom 2:20a5d4681abf 106 }
hariom 2:20a5d4681abf 107 else if (!strncmp ((char *)pBuf, "magenta", len)){
hariom 2:20a5d4681abf 108 device_buffer[3] = 0x05;
hariom 2:20a5d4681abf 109 }
hariom 2:20a5d4681abf 110 else {
hariom 2:20a5d4681abf 111 device_buffer[3] = 0x06;
hariom 2:20a5d4681abf 112 }
hariom 2:20a5d4681abf 113 pBuf = strstr((const char *)pBuf, "dim");
hariom 2:20a5d4681abf 114 if (!pBuf) {
hariom 2:20a5d4681abf 115 printf("device dim not found\r\n");
hariom 2:20a5d4681abf 116 my_mutex.unlock();
hariom 2:20a5d4681abf 117 return false;
hariom 2:20a5d4681abf 118 }
hariom 2:20a5d4681abf 119
hariom 2:20a5d4681abf 120 pBuf += 5;
hariom 2:20a5d4681abf 121 device_buffer[4] = atoi(pBuf);
hariom 2:20a5d4681abf 122 my_mutex.unlock();
hariom 2:20a5d4681abf 123 return true;
hariom 2:20a5d4681abf 124 }
hariom 2:20a5d4681abf 125 if (!strcmp(device_type, "zigbee")) {
hariom 2:20a5d4681abf 126 pBuf = strstr((const char *)pBuf, "DeviceName");
hariom 2:20a5d4681abf 127 if (!pBuf) {
hariom 2:20a5d4681abf 128 printf("device name not found\r\n");
hariom 2:20a5d4681abf 129 my_mutex.unlock();
hariom 2:20a5d4681abf 130 return false;
hariom 2:20a5d4681abf 131 }
hariom 2:20a5d4681abf 132
hariom 2:20a5d4681abf 133 pBuf += 13;
hariom 2:20a5d4681abf 134 len = strstr((const char *)pBuf, ",") - (char *)pBuf - 1;
hariom 2:20a5d4681abf 135 if (len <= 0) {
hariom 2:20a5d4681abf 136 my_mutex.unlock();
hariom 2:20a5d4681abf 137 return false;
hariom 2:20a5d4681abf 138 }
hariom 2:20a5d4681abf 139
hariom 2:20a5d4681abf 140 if (!strncmp ((char *)pBuf, "Light_bulb", len)) {
hariom 2:20a5d4681abf 141 device_buffer[0] = 1;
hariom 2:20a5d4681abf 142 }
hariom 2:20a5d4681abf 143 else if (!strncmp ((char *)pBuf, "Light_lamp", len)) {
hariom 2:20a5d4681abf 144 device_buffer[0] = 2;
hariom 2:20a5d4681abf 145 }
hariom 2:20a5d4681abf 146 else if (!strncmp ((char *)pBuf, "Tv", len)) {
hariom 2:20a5d4681abf 147 device_buffer[0] = 3;
hariom 2:20a5d4681abf 148 }
hariom 2:20a5d4681abf 149 else {
hariom 2:20a5d4681abf 150 device_buffer[0] = 4;
hariom 2:20a5d4681abf 151 }
hariom 2:20a5d4681abf 152
hariom 2:20a5d4681abf 153 pBuf = strstr((const char *)pBuf, "powered");
hariom 2:20a5d4681abf 154 if (!pBuf) {
hariom 2:20a5d4681abf 155 printf("device action not found\r\n");
hariom 2:20a5d4681abf 156 my_mutex.unlock();
hariom 2:20a5d4681abf 157 return false;
hariom 2:20a5d4681abf 158 }
hariom 2:20a5d4681abf 159
hariom 2:20a5d4681abf 160 pBuf += 9;
hariom 2:20a5d4681abf 161 len = strstr((const char *)pBuf, ",") - (char *)pBuf; /* ends with / */
hariom 2:20a5d4681abf 162 if (len <= 0) {
hariom 2:20a5d4681abf 163 my_mutex.unlock();
hariom 2:20a5d4681abf 164 return false;
hariom 2:20a5d4681abf 165 }
hariom 2:20a5d4681abf 166
hariom 2:20a5d4681abf 167 if (!strncmp ((char *)pBuf, "true", len)) {
hariom 2:20a5d4681abf 168 device_buffer[1] = 0x01;
hariom 2:20a5d4681abf 169 }
hariom 2:20a5d4681abf 170 else if (!strncmp ((char *)pBuf, "false", len)) {
hariom 2:20a5d4681abf 171 device_buffer[1] = 0x00;
hariom 2:20a5d4681abf 172 }
hariom 2:20a5d4681abf 173 else {
hariom 2:20a5d4681abf 174 device_buffer[1] = 0x02;
hariom 2:20a5d4681abf 175 }
hariom 2:20a5d4681abf 176 my_mutex.unlock();
hariom 2:20a5d4681abf 177 return true;
hariom 2:20a5d4681abf 178 }
hariom 2:20a5d4681abf 179 printf("wrong device type\r\n");
hariom 2:20a5d4681abf 180 my_mutex.unlock();
hariom 2:20a5d4681abf 181 return false;
hariom 2:20a5d4681abf 182 }
hariom 2:20a5d4681abf 183
venubk 6:db60638d7f9a 184 char data_to_gw[100];
venubk 6:db60638d7f9a 185 int data_from_ble[100];
venubk 6:db60638d7f9a 186 int bufferSize = 0;
venubk 6:db60638d7f9a 187
venubk 6:db60638d7f9a 188 void convertAsciiToChar(int *inBuff, char *outBuff)
venubk 6:db60638d7f9a 189 {
venubk 6:db60638d7f9a 190 for(int i = 0; i < bufferSize; i++)
venubk 6:db60638d7f9a 191 {
venubk 8:525a53f54326 192 if(inBuff[i] == 0x20)
venubk 8:525a53f54326 193 {
venubk 8:525a53f54326 194 outBuff[i] = ' ';
venubk 8:525a53f54326 195 }
venubk 8:525a53f54326 196 else if(inBuff[i] == 0x2E)
venubk 8:525a53f54326 197 {
venubk 8:525a53f54326 198 outBuff[i] = '.';
venubk 8:525a53f54326 199 }
venubk 8:525a53f54326 200 else if(inBuff[i] == 0xFE)
venubk 8:525a53f54326 201 {
venubk 8:525a53f54326 202 // printf("buffer size %d\n", bufferSize);
venubk 8:525a53f54326 203 outBuff[i] = '\0';
venubk 8:525a53f54326 204 printf("data received = %s\n",outBuff);
venubk 8:525a53f54326 205 }
venubk 8:525a53f54326 206 else
venubk 8:525a53f54326 207 {
venubk 8:525a53f54326 208 if(inBuff[i] >= 0x30)
venubk 8:525a53f54326 209 outBuff[i] = (char)inBuff[i];
venubk 8:525a53f54326 210 }
venubk 8:525a53f54326 211
venubk 8:525a53f54326 212
venubk 6:db60638d7f9a 213 }
venubk 6:db60638d7f9a 214 return;
venubk 6:db60638d7f9a 215 }
venubk 6:db60638d7f9a 216
hariom 2:20a5d4681abf 217 void send_data_to_gateway(void const *args)
hariom 2:20a5d4681abf 218 {
hariom 2:20a5d4681abf 219 //int light_status;
hariom 2:20a5d4681abf 220 //int light_color;
varshaberya123 5:f16b067257b6 221
varshaberya123 5:f16b067257b6 222 //Thread ble_thread(ble_etask);
varshaberya123 5:f16b067257b6 223 // LogInfo("created thead for ble_Energymeter\r\n");
varshaberya123 5:f16b067257b6 224 //need to form packet to send to gateway before that need to figure out ble reading data
venubk 6:db60638d7f9a 225
venubk 6:db60638d7f9a 226
hariom 2:20a5d4681abf 227 logInfo("sending data to gateway");
hariom 2:20a5d4681abf 228 while (true) {
venubk 6:db60638d7f9a 229 if(!ble_flag)
venubk 6:db60638d7f9a 230 {
venubk 6:db60638d7f9a 231 spi_read(data_from_ble);
venubk 6:db60638d7f9a 232 convertAsciiToChar(data_from_ble, data_to_gw);
venubk 8:525a53f54326 233 printf("********* data %s***********\n",data_to_gw);
venubk 6:db60638d7f9a 234 send(data_to_gw);
venubk 6:db60638d7f9a 235 }
hariom 2:20a5d4681abf 236 osDelay(1000);
hariom 2:20a5d4681abf 237 }
hariom 2:20a5d4681abf 238 }
hariom 2:20a5d4681abf 239
hariom 2:20a5d4681abf 240 void receive_data_from_gateway(void const *args)
hariom 2:20a5d4681abf 241 {
hariom 2:20a5d4681abf 242
hariom 2:20a5d4681abf 243 int res;
hariom 2:20a5d4681abf 244 char device_type[16];
hariom 2:20a5d4681abf 245
hariom 2:20a5d4681abf 246 logInfo("receiving data from gateway thread started\r\n");
hariom 2:20a5d4681abf 247
hariom 2:20a5d4681abf 248 Thread ble_thread(ble_task);
hariom 2:20a5d4681abf 249 Thread zigbee_thread(zigbee_task);
hariom 2:20a5d4681abf 250
hariom 2:20a5d4681abf 251 logInfo("created thread for ble and zigbee\r\n");
hariom 2:20a5d4681abf 252
hariom 2:20a5d4681abf 253 while(true) {
hariom 2:20a5d4681abf 254
hariom 2:20a5d4681abf 255 memset(gateway_buffer, 0, 128);
hariom 2:20a5d4681abf 256 send("dummy");
hariom 2:20a5d4681abf 257 res = receive_data(gateway_buffer);
hariom 2:20a5d4681abf 258 if (res == false) {
hariom 2:20a5d4681abf 259 printf("no data received form gateway\r\n");
hariom 2:20a5d4681abf 260 osDelay(1000);
hariom 4:dfe5d73d6726 261 //continue;
hariom 2:20a5d4681abf 262 }
hariom 4:dfe5d73d6726 263 //strcpy(gateway_buffer, "{\"DeviceType\":\"ble_bulbs\",\"DeviceName\":\"bulb1\",\"DeviceCommand\":\"desired_state\": {\"powered\":true,\"color\":\"red\",\"dim\":50}}");
hariom 2:20a5d4681abf 264 printf("data received in mdot from gateway: %s\r\n", gateway_buffer);
hariom 2:20a5d4681abf 265
hariom 2:20a5d4681abf 266 memset(device_type, 0, 16);
hariom 2:20a5d4681abf 267 res = process_gateway_data(device_type, device_buffer, gateway_buffer);
hariom 2:20a5d4681abf 268 if (res == true) {
hariom 2:20a5d4681abf 269 printf("device_buffer data is: %X, %X, %X, %X, %d\r\n", device_buffer[0], device_buffer[1], device_buffer[2], device_buffer[3], device_buffer[4]);
hariom 2:20a5d4681abf 270
hariom 2:20a5d4681abf 271 if (strcmp(device_type, "ble_bulbs") == 0) {
hariom 2:20a5d4681abf 272 printf("sending data to BLE\r\n");
hariom 2:20a5d4681abf 273 //spi_write(device_buffer);
hariom 2:20a5d4681abf 274 ble_flag = 1;
hariom 2:20a5d4681abf 275 }
hariom 2:20a5d4681abf 276 else if (strcmp(device_type, "zigbee") == 0) {
hariom 2:20a5d4681abf 277 printf("sending data to zigbee\r\n");
hariom 2:20a5d4681abf 278 zigbee_flag = 1;
hariom 2:20a5d4681abf 279 //zigbee_func(device_buffer[0], device_buffer[1]);
hariom 2:20a5d4681abf 280 }
hariom 2:20a5d4681abf 281 else {
hariom 2:20a5d4681abf 282 printf("wrong device type\r\n");
hariom 2:20a5d4681abf 283 }
hariom 2:20a5d4681abf 284 }
hariom 2:20a5d4681abf 285 /* else {
hariom 2:20a5d4681abf 286 printf("error in processing gateway data\r\n");
hariom 2:20a5d4681abf 287 }
hariom 2:20a5d4681abf 288 */
hariom 2:20a5d4681abf 289 osDelay(1000);
hariom 2:20a5d4681abf 290 }
hariom 2:20a5d4681abf 291 }