Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 |
--- 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
--- 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