Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
davidjhoward
Date:
Wed Oct 26 21:02:04 2016 +0000
Revision:
279:b60379a9eb1a
Parent:
277:86dbc2483b67
Child:
281:a362a9450b81
Updates for BLE and added mailbox for BLE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 0:65cfa4873284 1 /******************************************************************************
davidjhoward 249:68ed571e0002 2 *
jmarkel44 0:65cfa4873284 3 * File: BLEDataHandler.cpp
jmarkel44 0:65cfa4873284 4 * Desciption: source for the ICE Bluetooth Low Energy Data Handler
jmarkel44 0:65cfa4873284 5 *
jmarkel44 0:65cfa4873284 6 *****************************************************************************/
jmarkel44 0:65cfa4873284 7 #include "global.h"
jmarkel44 0:65cfa4873284 8 #include <stdio.h>
jmarkel44 0:65cfa4873284 9 #include "BLEDataHandler.h"
davidjhoward 267:fdb40bcd9c12 10 #include "CloudDataHandler.h"
davidjhoward 249:68ed571e0002 11 #include "LoggerApi.h"
davidjhoward 249:68ed571e0002 12 #include "ble_main.h"
davidjhoward 249:68ed571e0002 13 #include "ble_init.h"
davidjhoward 249:68ed571e0002 14 #include "ble_msg_handler.h"
davidjhoward 257:e22102d2e079 15 #include "ble_spi.h"
davidjhoward 267:fdb40bcd9c12 16 #include "cJSON.h"
jmarkel44 0:65cfa4873284 17
jmarkel44 0:65cfa4873284 18 /*****************************************************************************
jmarkel44 0:65cfa4873284 19 * Function: BLEDataHandler
davidjhoward 249:68ed571e0002 20 * Description: entry point for the Analytics Logger
jmarkel44 0:65cfa4873284 21 *
jmarkel44 0:65cfa4873284 22 * @param (IN) args (user-defined arguments)
jmarkel44 0:65cfa4873284 23 * @return none
jmarkel44 0:65cfa4873284 24 *****************************************************************************/
davidjhoward 249:68ed571e0002 25
davidjhoward 249:68ed571e0002 26 BLE_FILE BLE;
davidjhoward 249:68ed571e0002 27 BLE_INIT ble_init;
davidjhoward 249:68ed571e0002 28
davidjhoward 266:09ba8e22963d 29 #define BLE_DEVICE_NAME "Ecolab"
davidjhoward 266:09ba8e22963d 30
davidjhoward 266:09ba8e22963d 31 bool send_json = false;
davidjhoward 266:09ba8e22963d 32
davidjhoward 267:fdb40bcd9c12 33 /*****************************************************************************
davidjhoward 267:fdb40bcd9c12 34 * Function: BLE data receive callback
davidjhoward 267:fdb40bcd9c12 35 * Description: Process BLE data
davidjhoward 267:fdb40bcd9c12 36 *
davidjhoward 267:fdb40bcd9c12 37 * @param spi_rcv_array
davidjhoward 267:fdb40bcd9c12 38 * @param *rx_data
davidjhoward 267:fdb40bcd9c12 39 * @param length
davidjhoward 267:fdb40bcd9c12 40 * @return none
davidjhoward 267:fdb40bcd9c12 41 *****************************************************************************/
davidjhoward 266:09ba8e22963d 42 static void BleRxDataCallback(uint8_t *rx_data, uint8_t len)
davidjhoward 266:09ba8e22963d 43 {
davidjhoward 266:09ba8e22963d 44 printf("Data Received: ");
davidjhoward 267:fdb40bcd9c12 45 for(int i=0; i<len; i++) {
davidjhoward 266:09ba8e22963d 46 printf("%c",rx_data[i]);
davidjhoward 267:fdb40bcd9c12 47
davidjhoward 267:fdb40bcd9c12 48 if(rx_data[0] == 0x61) {
davidjhoward 266:09ba8e22963d 49 send_json =true;
davidjhoward 267:fdb40bcd9c12 50 }
davidjhoward 266:09ba8e22963d 51 }
davidjhoward 266:09ba8e22963d 52 printf("\n\r");
davidjhoward 266:09ba8e22963d 53
davidjhoward 266:09ba8e22963d 54 }
davidjhoward 266:09ba8e22963d 55
jmarkel44 0:65cfa4873284 56 void BLEDataHandler(void const *args)
jmarkel44 0:65cfa4873284 57 {
davidjhoward 266:09ba8e22963d 58 uint8_t tx_array[500];
davidjhoward 257:e22102d2e079 59 uint8_t event_status;
davidjhoward 267:fdb40bcd9c12 60 char * recv_str = "{ \"mtype\":1200, \"getreadings\":[ { \"tag\":\"i_tra01\" } ] }"; // use this to fake a message out requesting i_tra01 readings
davidjhoward 257:e22102d2e079 61
davidjhoward 249:68ed571e0002 62 /*TODO
davidjhoward 257:e22102d2e079 63 Getting the init status from Nano BLE register and
davidjhoward 257:e22102d2e079 64 Proceed based on the status.
davidjhoward 257:e22102d2e079 65 */
davidjhoward 266:09ba8e22963d 66 event_status = BLE.ConfigureBLEDevice(BLE_DEVICE_NAME);
davidjhoward 266:09ba8e22963d 67 BleDataRxCbRegister(BleRxDataCallback);
davidjhoward 257:e22102d2e079 68 while(1) {
davidjhoward 257:e22102d2e079 69
davidjhoward 266:09ba8e22963d 70 event_status = PollBLEEvents();
davidjhoward 279:b60379a9eb1a 71 if(event_status == true ) {
davidjhoward 279:b60379a9eb1a 72 printf("event_status=true\r\n");
davidjhoward 279:b60379a9eb1a 73 }
davidjhoward 279:b60379a9eb1a 74 if(event_status == true ) {
davidjhoward 279:b60379a9eb1a 75 printf("send_json=true\r\n");
davidjhoward 279:b60379a9eb1a 76 }
davidjhoward 266:09ba8e22963d 77 if(event_status == true && send_json == true) {
davidjhoward 267:fdb40bcd9c12 78
davidjhoward 277:86dbc2483b67 79 cJSON * root = cJSON_Parse( recv_str ); // recv_str is used to generate a fake message, Jinu can remove for testing.
davidjhoward 267:fdb40bcd9c12 80 int mType = cJSON_GetObjectItem(root,"mtype")->valueint;
davidjhoward 267:fdb40bcd9c12 81
davidjhoward 267:fdb40bcd9c12 82 printf("mType=%d, str=%s\r\n",mType, recv_str);
davidjhoward 267:fdb40bcd9c12 83 switch( mType ) {
davidjhoward 267:fdb40bcd9c12 84 case BT_GETLIVE_COMMAND_MTYPE: {
davidjhoward 267:fdb40bcd9c12 85
davidjhoward 267:fdb40bcd9c12 86 std::vector<std::string> RequestedTags;
davidjhoward 267:fdb40bcd9c12 87 cJSON *getreadings = cJSON_GetObjectItem(root, "getreadings");
davidjhoward 267:fdb40bcd9c12 88 for ( int i = 0; i < cJSON_GetArraySize(getreadings); ++i ) {
davidjhoward 267:fdb40bcd9c12 89 cJSON *item = cJSON_GetArrayItem(getreadings, i);
davidjhoward 267:fdb40bcd9c12 90 std::string tag = cJSON_GetObjectItem(item, "tag")->valuestring;
davidjhoward 267:fdb40bcd9c12 91 RequestedTags.push_back(tag);
davidjhoward 267:fdb40bcd9c12 92 }
davidjhoward 267:fdb40bcd9c12 93
davidjhoward 267:fdb40bcd9c12 94 GetTagReadings( RequestedTags, (char *)tx_array, sizeof(tx_array) );
davidjhoward 279:b60379a9eb1a 95
davidjhoward 279:b60379a9eb1a 96 printf("%s:%d: Sending Reply to APP: %s\r\n",__func__,__LINE__,tx_array);
davidjhoward 267:fdb40bcd9c12 97 BLE.SendFile(tx_array,strlen((char *)tx_array));
davidjhoward 267:fdb40bcd9c12 98 send_json = false;
davidjhoward 267:fdb40bcd9c12 99 break;
davidjhoward 267:fdb40bcd9c12 100 }
davidjhoward 267:fdb40bcd9c12 101 default:
davidjhoward 267:fdb40bcd9c12 102 printf("unknown mtype received\r\n");
davidjhoward 267:fdb40bcd9c12 103 break;
davidjhoward 267:fdb40bcd9c12 104 }
davidjhoward 277:86dbc2483b67 105 cJSON_Delete(root);
davidjhoward 249:68ed571e0002 106 }
davidjhoward 279:b60379a9eb1a 107
davidjhoward 279:b60379a9eb1a 108 // This will wait 100ms for a message
davidjhoward 279:b60379a9eb1a 109 osEvent evt = BLEHandlerMailBox.get(100);
davidjhoward 279:b60379a9eb1a 110 if (evt.status == osEventMail) {
davidjhoward 279:b60379a9eb1a 111 BLEHandlerReq_t *mail = (BLEHandlerReq_t*)evt.value.p;
davidjhoward 279:b60379a9eb1a 112 printf("%s:%d: Sending Reply to APP: %s\r\n",__func__,__LINE__,mail->reply);
davidjhoward 279:b60379a9eb1a 113 BLE.SendFile((uint8_t *)mail->reply,strlen((char *)mail->reply));
davidjhoward 279:b60379a9eb1a 114 BLEHandlerMailBox.free(mail);
davidjhoward 279:b60379a9eb1a 115 }
davidjhoward 257:e22102d2e079 116 }
jmarkel44 0:65cfa4873284 117 }