Javier Vargas
/
ControllerBLE
Test
Revision 81:dded8c042cca, committed 2019-02-04
- Comitter:
- HelGast95
- Date:
- Mon Feb 04 12:35:18 2019 +0000
- Parent:
- 80:5e52c5847273
- Commit message:
- Se mete thread para el calculo del tipo de evento y comunicacion con colas - WIP
Changed in this revision
mbed-os.lib | Show annotated file Show diff for this revision Revisions of this file |
source/main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 5e52c5847273 -r dded8c042cca mbed-os.lib --- a/mbed-os.lib Fri Feb 01 14:08:20 2019 +0000 +++ b/mbed-os.lib Mon Feb 04 12:35:18 2019 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-os/#a8d1d26fa76a27263cc9a69f65df45e3458517a5 +https://github.com/ARMmbed/mbed-os/#a8f0c33eaa2c52babff9655417c36f4b5edd54d7
diff -r 5e52c5847273 -r dded8c042cca source/main.cpp --- a/source/main.cpp Fri Feb 01 14:08:20 2019 +0000 +++ b/source/main.cpp Mon Feb 04 12:35:18 2019 +0000 @@ -24,6 +24,12 @@ double ToF; /* Tiempo de vuelo*/ } BLEdata_t; +typedef struct { + string hazardousDevice; /* MAC dispositvo peligroso */ + string affectedDevice; /* MAC dispositivo afectado */ + uint8_t type; /* Tipo de evento */ +} JSONdata_t; + DigitalOut led3Test(LED3); DigitalOut led4BLE(LED4); Serial pcSerial(USBTX, USBRX); // Abrimos conexión serial con el puerto USB @@ -31,13 +37,14 @@ TOFService* tofService; EventQueue eventQueue; -//Queue<EventData_t, 32> Eventqueue; WIP +Queue<JSONdata_t, 32> JSONqueue; Queue<BLEdata_t, 32> BLEqueue; -MemoryPool<BLEdata_t, 32> BLEmpool; +Mail<BLEdata_t, 16> BLEMail; Thread threadLED(osPriorityAboveNormal1, 400); Thread threadSerial(osPriorityAboveNormal2, 2500); Thread threadBLE(osPriorityRealtime3, 2500); +Thread threadCalculateEvent(osPriorityRealtime2, 1500); template<typename arg> void printLog(const char * log, arg data) { @@ -71,6 +78,38 @@ } /** + * Thread encargado de calcular el tipo de evento a enviar + */ +void calculateEvent() { + while(true) { + printLog("Leo evento de BLEMail\r\n"); + osEvent evt = BLEMail.get(); + printLog("Evento leido de BLEMail\r\n"); + if (evt.status == osEventMail) { + BLEdata_t *dataIn = (BLEdata_t*) evt.value.p; + printLog("ToF: %s\r\n", dataIn->ToF); + printLog("Se obtiene puntero de BLEdata\r\n"); + + JSONdata_t event; + printLog("Se declara objeto JSONdata_t\r\n"); + if(dataIn->ToF > 1.0) { + printLog("Evento de tipo 1\r\n"); + event.hazardousDevice = dataIn->MAC1; + event.affectedDevice = dataIn->MAC2; + event.type = 1; + } else { // Keep Alive + event.type = 0; + event.hazardousDevice = dataIn->MAC1; + } + BLEMail.free(dataIn); + printLog("Se va a escribir en la cola de JSON\r\n"); + JSONqueue.put(&event); + printLog("Evento enviado a JSON\r\n"); + } + } +} + +/** * Thread encargado de enviar JSONs por el puerto serie */ void sendJsonOverSerial() { @@ -82,20 +121,18 @@ picojson::object event; picojson::object extraInfo; - osEvent evt = BLEqueue.get(); + osEvent evt = JSONqueue.get(); if (evt.status == osEventMessage) { - BLEdata_t *BLEdata = (BLEdata_t*)evt.value.p; + JSONdata_t *data = (JSONdata_t*) evt.value.p; - BLEmpool.free(BLEdata); - - int type = rand() % 4; - event["idEvent"] = picojson::value(BLEdata->MAC1); - event["type"] = picojson::value((double) type); - str = "E9:ED:F4:AC:BF:8E"; - extraInfo["hazardousDevice"] = picojson::value(str); - str = "D5:62:12:BF:B8:45"; + int id = rand() % 1000; + event["idEvent"] = picojson::value((double) id); + event["type"] = picojson::value((double) data->type); + //str = "E9:ED:F4:AC:BF:8E"; + extraInfo["hazardousDevice"] = picojson::value(data->hazardousDevice); + //str = "D5:62:12:BF:B8:45"; - if(type != 0) extraInfo["affectedDevice"] = picojson::value(str); + if(data->type != 0) extraInfo["affectedDevice"] = picojson::value(data->affectedDevice); event["extraInfo"] = picojson::value(extraInfo); json["Event"] = picojson::value(event); @@ -122,27 +159,34 @@ void parseRawJSONToQueue(string JSONsource) { picojson::value v; - string err; - BLEdata_t* data = BLEmpool.alloc(); + string err, MAC1, MAC2; + BLEdata_t *data = BLEMail.alloc();; picojson::parse(v, JSONsource.c_str(), JSONsource.c_str() + strlen(JSONsource.c_str()), &err); printLog("res error? %s\r\n", err); + printLog("ToF %f\r\n", v.get("TOF").get<double>()); + + MAC1 = v.get("MAC1").get<string>(); + MAC2 = v.get("MAC2").get<string>(); + + printLog("MAC1 en string: %s", MAC1); + printLog("MAC2 en string: %s", MAC2); data->ToF = v.get("TOF").get<double>(); - data->MAC1 = v.get("MAC1").get<string>(); - data->MAC2 = v.get("MAC2").get<string>(); + + printLog("Se leen los datos del JSON\r\n"); printLog("ToF = %f", data->ToF); printLog(" MAC1 = %s", data->MAC1); printLog(" MAC2 = %s\r\n", data->MAC2); - //EventQueue.put(data); WIP + BLEMail.put(data); + + printLog("Se introduce dato en BLEqueue\r\n"); } void writeCharCallback(const GattWriteCallbackParams *params) { if(params->handle == tofService->getValueHandle()) { - //BLEdata_t* data = BLEmpool.alloc(); - //BLEdata_t data; char toChar [TOFService::TOF_CHAR_ARRAY_SIZE]; printLog("Data received: length = %d, data = 0x", params->len); for(int x=0; x < params->len; x++) { @@ -155,7 +199,6 @@ printLog("Cadena: %s\n\r", toChar); string str(toChar); eventQueue.call(parseRawJSONToQueue, str); - //BLEqueue.put(data); } } @@ -211,9 +254,11 @@ srand(time(NULL)); threadLED.start(callback(blinkLED3)); threadBLE.start(callback(BLEServiceManagment)); - //threadSerial.start(callback(sendJsonOverSerial)); WIP + threadSerial.start(callback(sendJsonOverSerial)); + threadCalculateEvent.start(callback(calculateEvent)); threadLED.join(); threadBLE.join(); - //threadSerial.join(); + threadSerial.join(); + threadCalculateEvent.join(); } \ No newline at end of file