this is using the mbed os version 5-13-1
Diff: source/ATCmdManager.cpp
- Branch:
- PassingRegression
- Revision:
- 120:779b74689747
- Parent:
- 119:8d939a902333
- Child:
- 121:ac4f59839e4f
--- a/source/ATCmdManager.cpp Mon May 27 12:34:58 2019 +0000
+++ b/source/ATCmdManager.cpp Mon May 27 17:00:43 2019 +0000
@@ -119,6 +119,7 @@
void ATCmdManager::processResponses(){
dequeueATresponse();
dequeueWiFidataResponse();
+ dequeueBleDataResponse();
updateWiFiMgrStatus();
char * respStr;
switch(at_resp){
@@ -289,6 +290,14 @@
at_resp = AT_RESP_NONE;
break;
}
+ case BLE_DISCONNECT_EVENT:
+ {
+ // AT Event state
+ dbg_printf(LOG, "\n [ATCMD MAN] BLE_DISCONNECT_EVENT RECEIVED!!\r\n");
+ sendBleDisconnectEvent();
+ at_resp = AT_RESP_NONE;
+ break;
+ }
default:
//UNKNOWN response state
dbg_printf(LOG, "\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
@@ -298,7 +307,7 @@
}
}
-
+//
void ATCmdManager::updateWiFiMgrStatus()
{
static int wifiBusyMonitor = 0;
@@ -1226,6 +1235,34 @@
return true;
}
+bool ATCmdManager::queueBleDataRequest(at_ble_msg_t data_req){
+ at_ble_msg_t *bleData = _aT2BleDatamPool->alloc();
+ if(bleData == NULL)
+ {
+#ifdef SEND_DEBUG_MESSAGES
+ sendAtConfirmation("\r\nBLE QUEUE MEMORY FULL\r\n");
+#endif
+ return false;
+ }
+ bleData->ble_cmd = data_req.ble_cmd;
+ bleData->dataLen = data_req.dataLen;
+ memcpy(bleData->buffer, data_req.buffer, data_req.dataLen);
+ _aT2BleDataQueue->put(bleData);
+ dbg_printf(LOG, "[ATCMD MAN] queued BLE data size = %d : wifi_cmd = %d\n", data_req.dataLen, data_req.ble_cmd);
+ return true;
+}
+
+bool ATCmdManager::dequeueBleDataResponse(){
+ if(at_resp != AT_RESP_NONE) return false; // busy
+ osEvent evt = _ble2ATDataQueue->get(0);
+ if(evt.status == osEventMessage){
+ ble_resp_data = (ble_at_msg_t*)evt.value.p;
+ setNextResponse(ble_resp_data->at_resp);
+ dbg_printf(LOG, "[ATCMD MAN] dequeued data size = %d : at_resp = %d\n", resp_data->dataLen, resp_data->at_resp);
+ }
+ return true;
+}
+
void ATCmdManager::sendAtConfirmation(const char *buf)
{
@@ -1349,6 +1386,15 @@
ble_resp_data = NULL;
}
+void ATCmdManager::sendBleDisconnectEvent()
+{
+ _smutex.lock();
+ outputEDMdata(NULL, 0, DISCONNECT_MSG_ID, EVENT_MSG_TYPE, BLE_CHANNEL);
+ _smutex.unlock();
+ _ble2ATDatamPool->free(ble_resp_data);
+ ble_resp_data = NULL;
+}
+
void ATCmdManager::sendConnectEvent(const uint8_t *buf, int len)
{
@@ -1389,7 +1435,10 @@
if(channel_id != NO_CHANNEL)
_parser.putc(channel_id);
// send the data
- _parser.write((const char *)buf, pLen);
+ if(pLen > 0)
+ {
+ _parser.write((const char *)buf, pLen);
+ }
// send EDM Message stop byte
_parser.putc(EDM_STOP_BYTE);
_smutex.unlock();