this is using the mbed os version 5-13-1
Revision 112:a0999ea4ece0, committed 2019-05-11
- Comitter:
- ocomeni
- Date:
- Sat May 11 11:55:29 2019 +0000
- Branch:
- PassingRegression
- Parent:
- 111:3ab1d9644835
- Child:
- 113:888e262ff0a9
- Commit message:
- first pass code cleanup
Changed in this revision
--- a/source/ATCmdManager.cpp Fri May 10 13:45:50 2019 +0000
+++ b/source/ATCmdManager.cpp Sat May 11 11:55:29 2019 +0000
@@ -117,9 +117,6 @@
case AT_SCAN_RESP:
// AT_SCAN_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI SCAN RESPONSE RECEIVED!!\r\n");
- //_smutex.lock();
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
respStr = (char *) resp_data->buffer;
sendAtConfirmationFreeMpool(respStr);
at_resp = AT_RESP_NONE;
@@ -135,7 +132,6 @@
{
// AT_CONNECT_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI CONNECT RESPONSE RECEIVED!!\r\n");
- //_smutex.lock();
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
respStr = (char *) resp_data->buffer;
sendAtConfirmationFreeMpool(respStr);
@@ -143,33 +139,24 @@
sprintf(urc, "\r\n%s:%d\r\n", NETWORK_UP_URC, WIFI_INTERFACE_ID);
sendAtEvent(urc);
delete urc;
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
}
case AT_DISCONNECT_RESP:
// AT_DISCONNECT_RESP response state
- //////_smutex.lock();
dbg_printf(LOG, "\n [ATCMD MAN] WIFI DISCONNECT RESPONSE RECEIVED!!\r\n");
- //_smutex.lock();
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
respStr = (char *) resp_data->buffer;
sendAtConfirmationFreeMpool(respStr);
at_resp = AT_RESP_NONE;
break;
case AT_CONFIG_RESP:
// AT_CONFIG_RESP response state
- //////_smutex.lock();
dbg_printf(LOG, "\n [ATCMD MAN] WIFI CONFIG RESPONSE RECEIVED!!\r\n");
- //_smutex.lock();
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
case AT_NETWORK_STATUS_RESP:
// AT_CONFIG_RESP response state
- //////_smutex.lock();
dbg_printf(LOG, "\n [ATCMD MAN] NETWORK STATUS RESPONSE RECEIVED!!\r\n");
respStr = (char *) resp_data->buffer;
sendAtConfirmationFreeMpool(respStr);
@@ -177,7 +164,6 @@
break;
case AT_WIFI_STATUS_RESP:
// AT_CONFIG_RESP response state
- //////_smutex.lock();
dbg_printf(LOG, "\n [ATCMD MAN] WIFI RESPONSE RECEIVED!!\r\n");
respStr = (char *) resp_data->buffer;
sendAtConfirmationFreeMpool(respStr);
@@ -186,47 +172,32 @@
case AT_INTERNET_CONFIG_RESP:
// AT_CONFIG_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI INTERNET_CONFIG RESPONSE RECEIVED!!\r\n");
- //_smutex.lock();
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
- //respStr = (char *) resp_data->buffer;
- //sendAtConfirmationFreeMpool(respStr);
at_resp = AT_RESP_NONE;
break;
case AT_HTTPS_RESP:
// AT_HTTP_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTPS RESPONSE RECEIVED!!\r\n");
return_response();
- //_smutex.lock();
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
case AT_HTTPS_RESP_DOWNLOAD:
// AT_HTTPS_RESP_DOWNLOAD response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTPS DOWNLOAD RESPONSE RECEIVED!!\r\n");
return_response(true); // set download paramter to true
- //_smutex.lock();
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
case AT_HTTP_RESP:
// AT_HTTP_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTP RESPONSE RECEIVED!!\r\n");
return_response();
- //_smutex.lock();
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
case AT_HTTP_RESP_DOWNLOAD:
// AT_HTTP_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTP RESPONSE RECEIVED!!\r\n");
return_response(true); // set download paramter to true
- //_smutex.lock();
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
case CONNECT_EVENT:
@@ -250,9 +221,6 @@
{
// AT_HTTP_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI Watchdog message!!\r\n");
- //_smutex.lock();
- //_parser.send("\r\nNACK\r\n");
- //_smutex.unlock();
respStr = (char *) resp_data->buffer;
sendConnectIndicationFreeMpool(respStr);
at_resp = AT_RESP_NONE;
@@ -262,9 +230,6 @@
{
// AT_HTTP_RESP response state
dbg_printf(LOG, "\n [ATCMD MAN] WIFI COMMAND FAILED!!\r\n");
- //_smutex.lock();
- //_parser.send("\r\nNACK\r\n");
- //_smutex.unlock();
respStr = (char *) resp_data->buffer;
sendAtConfirmationFreeMpool(respStr);
at_resp = AT_RESP_NONE;
@@ -272,10 +237,8 @@
}
default:
//UNKNOWN response state
- //_smutex.lock();
dbg_printf(LOG, "\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
sendAtConfirmationFreeMpool(ERROR_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
}
@@ -410,7 +373,6 @@
outPtr = http_req->http_version + len; // point output buffer ptr to after 2nd string
}
else{ // scan header pairs
- //n = sscanf(nxtPtr,"%s %s", &s1[0], &s2[0]);
n = sscanf(nxtPtr,"%s %s", s1, s2);
if(n!=2) return false; // error in input abort
p = strstr(s1,":");
@@ -456,7 +418,6 @@
outPtr += len; // point output buffer ptr to after current string
}
else if(strstr(s1, "Content-Length")!= NULL){
- //http_req.contentLen.assign(s2);
http_req->contentLen = outPtr;
len = strlen(s2)+1;
strncpy(outPtr, s2, len);
@@ -506,13 +467,10 @@
// OOB processing
void ATCmdManager::_process_oob(uint32_t timeout, bool all){
set_timeout(timeout);
- //int cnt = 0;
int start;
- //channel_id_t chan_id;
if(dataMode == AT_EXT_DATA_MODE)
{
int n;
- //if(cnt++ % 10 == 0)dbg_printf(LOG, "In EDM mode\n");
uint8_t edm[EDM_HDR_LEN];
char cmdType[16];
// Poll for edm packets
@@ -537,7 +495,6 @@
pT = 1;
strcpy(cmdType, "AT REQUEST");
}
- //dbg_printf(LOG, "%d bytes read! : type = %s\n", n, cmdType2str(edm_hdr.payloadID));
dbg_printf(LOG, "%d bytes read! : CMD type = %s\n", n, cmdType);
if(n==(EDM_HDR_LEN-pT))
dbg_printf(LOG, "Start = %d, payloadID = %d len = %d chan_id = %d\n", edm_hdr.startByte,
@@ -548,7 +505,6 @@
{
if(edm_hdr.payloadID == AT_REQUEST_ID)
{
- //_parser.process_oob();
while (_parser.process_oob() && all) {
}
break;
@@ -585,7 +541,6 @@
case DATA_COMMAND_ID:
{
dbg_printf(LOG, "DATA_COMMAND received!\n");
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
if(createHttpRequest() == false)
{
#ifdef SEND_DEBUG_MESSAGES
@@ -612,7 +567,6 @@
break;
}
}
- //_parser.process_oob();
}
else // incorrect # of bytes received abort!!
{
@@ -623,10 +577,9 @@
else
{
// Poll for inbound packets
- static int msgCnt = 0;
+#ifdef BOX_UBLOX_DEMO_TESTING
static char * ATCMD = new char[32];
int n = 0;
-#ifdef BOX_UBLOX_DEMO_TESTING
if(check_for_at_cmd)
{
while (n>=0 && all) {
@@ -683,9 +636,7 @@
}
void ATCmdManager::_oob_ok_hdlr(){
- //_smutex.lock();
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
}
@@ -718,18 +669,14 @@
#define TTP_DEBUGGING_UART_NOCHANGE
void ATCmdManager::_oob_uart_setup(){
int uOpts[NUM_UART_OPTIONS];
- //if(_parser.recv("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5])) {
if(_parser.scanf("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5]) >0) {
dbg_printf(LOG, "\nATCmdParser: Uart Options=%d,%d,%d,%d,%d,%d\n", uOpts[0], uOpts[1], uOpts[2], uOpts[3], uOpts[4], uOpts[5]);
- //printf("\nATCmdParser: Uart Options=%d,%d,%d,%d,%d,%d\n", uOpts[0], uOpts[1], uOpts[2], uOpts[3], uOpts[4], uOpts[5]);
- //AT+UMRS=230400,2,8,1,1,1
dbg_printf(LOG, "\n Changing Baud Rate to %d\n", uOpts[0]);
#ifdef TTP_DEBUGGING_UART_NOCHANGE
sendAtConfirmation(OK_RESP);
#else
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //wait(0.1);
_serial.set_baud(uOpts[0]);
wait(0.1);
dbg_printf(LOG, "\n Baud Rate now %d\n", uOpts[0]);
@@ -751,29 +698,23 @@
void ATCmdManager::_oob_echo_off()
{
- //_smutex.lock();
dbg_printf(LOG, "\n Received ATEO OOB command!!\n");
dbg_printf(LOG, "\n turning echo OFF!!\n");
- //printf("\n turning echo OFF!!\n");
_parser.debug_on(false);
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
}
void ATCmdManager::_oob_echo_on()
{
- //_smutex.lock();
dbg_printf(LOG, "\n Received ATE1 OOB command!!\n");
dbg_printf(LOG, "\n turning echo ON!!\n");
_parser.debug_on(true);
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
}
void ATCmdManager::_oob_data_mode(){
- //_smutex.lock();
dbg_printf(LOG, "\n Received EDM mode command!!\n");
int dmode;
if(_parser.scanf("%d", &dmode) >0) {
@@ -802,12 +743,10 @@
} else {
dbg_printf(LOG, "\nATCmdParser: Retrieving Uart Options failed\n");
}
- //_smutex.unlock();
}
void ATCmdManager::_oob_get_mac_addr(){
int bleOrWifi;
- //_smutex.lock();
if(_parser.scanf("=%d", &bleOrWifi) >0) {
switch(bleOrWifi)
{
@@ -825,31 +764,22 @@
dbg_printf(LOG, "\nATCmdParser: Retrieving Uart Options failed");
}
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
}
void ATCmdManager::_oob_get_ble_role(){
- //_smutex.lock();
dbg_printf(LOG, "\n Received get BLE role command!!\n");
- //printf("\n Received get BLE role command!!\n");
sendAtConfirmation("+UBTLE:2\r\nOK\r\n"); //_parser.send(OK_RESP);
- //_smutex.unlock();
}
void ATCmdManager::_oob_ena_ble_peri(){
- //_smutex.lock();
dbg_printf(LOG, "\n Received enable BLE Peripheral command!!\n");
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
}
void ATCmdManager::_oob_reboot(){
- //_smutex.lock();
dbg_printf(LOG, "\n Received reboot command!!\n");
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_parser.send("System Resetting....\n");
system_reset();
- //_smutex.unlock();
}
const char * ATCmdManager::sec2str(nsapi_security_t sec)
@@ -882,10 +812,8 @@
void ATCmdManager::_oob_scanWiFiNetworks(){
- //_smutex.lock();
dbg_printf(LOG, "\n Received scanWiFiNetworks command!!\n");
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- //_smutex.unlock();
wifi_cmd_t cmd = WIFI_CMD_SCAN;
// queue next command
queueWiFiCommand(cmd);
@@ -899,9 +827,7 @@
int if_id; // interface id for request
int aId; // interface id for request
_parser.recv("%d,%d", &if_id, &aId);
- //_smutex.lock();
dbg_printf(LOG, "\n Received WiFi Configuration Action command %d %d!!\r\n", if_id, aId);
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
if(if_id == WIFI_CONFIG_ID && aId <5){
wifi_cmd_t cmd;
action_id_t action_id = (action_id_t) aId;
@@ -915,36 +841,26 @@
case WIFI_CONFIG_ACTIVATE:
cmd = WIFI_CMD_CONNECT;
dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
- //_smutex.unlock();
- // queue next command
queueWiFiCommand(cmd);
break;
case WIFI_CONFIG_DEACTIVATE:
cmd = WIFI_CMD_DISCONNECT;
dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
- //_smutex.unlock();
- // queue next command
queueWiFiCommand(cmd);
break;
default:
break;
}
}
- if(debug_flag>0){
- dbg_printf(LOG, "finished queuing WIFI CONNECT CMD \r\n");
- }
return;
}
void ATCmdManager::_oob_disconnectWiFiNetwork()
{
- //_smutex.lock();
dbg_printf(LOG, "\n Received WiFi Disconnect command!!\n");
sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
wifi_cmd_t cmd = WIFI_CMD_DISCONNECT;
- //_smutex.unlock();
- // queue next command
queueWiFiCommand(cmd);
return;
}
@@ -955,15 +871,17 @@
char url[MAX_URL_LEN];
int n;
internet_config_t internet_config;
- //_smutex.lock();
dbg_printf(LOG, "sizeof internet_config_t = %d\n", sizeof(internet_config_t));
n = ReadBytes((uint8_t *)str, MAX_URL_LEN);
str[n]=NULL;
+ int id;
+ int scheme;
dbg_printf(LOG, "\n read string = %s , n = %d\n", str, n);
- //n = sscanf(str, "=%1d,%199[^,],%1d", &(uint8_t)internet_config.peer_id,
- n = sscanf(str, "=%1d,%99[^,],%1d", &internet_config.peer_id,
+ n = sscanf(str, "=%1d,%99[^,],%1d", &id,
url, //internet_config.url,
- &internet_config.connectionScheme);
+ &scheme);
+ internet_config.peer_id = (uint8_t) id;
+ internet_config.connectionScheme = (conn_scheme_t) scheme;
#ifdef BOX_UBLOX_DEMO_TESTING
char *p = strstr(url,"/https:");
#else
@@ -991,7 +909,6 @@
data_msg.dataLen = sizeof(internet_config_t); // + strlen(internet_config.url);
dbg_printf(LOG, "\n url size = %d url str = %s\n",strlen(internet_config.url), internet_config.url );
memcpy(data_msg.buffer,&internet_config, data_msg.dataLen);
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
// queue next data request
queueWiFiDataRequest(data_msg);
print_memory_info();
@@ -999,7 +916,6 @@
dbg_printf(LOG, "\n[ATCMD MAN]: internet configuration failed %d fields parsed \r\n", n);
_parser.send("NAK\n");
}
- //_smutex.unlock();
}
wifi_config_t ATCmdManager::init_wifi_config()
@@ -1010,6 +926,7 @@
wifi_cfg.security = NSAPI_SECURITY_UNKNOWN;
return wifi_cfg;
}
+
/* read ASCII characters into buffer and null terminate */
int ATCmdManager::readStringBytes(uint8_t *buf, int maxBytes)
{
@@ -1048,7 +965,6 @@
{
int n;
wifi_config_t wifi_cfg = init_wifi_config();
- //_smutex.lock();
n = readStringBytes((uint8_t *)wifi_cfg.ssid, 32);
dbg_printf(LOG, "[ATCMD MAN]: number of bytes read = %d\n", n);
if(n>0)
@@ -1059,21 +975,17 @@
data_msg.wifi_cmd = WIFI_CMD_CONFIG;
data_msg.dataLen = sizeof(wifi_config_t);
memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
queueWiFiDataRequest(data_msg);
} else {
dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
_parser.send("NAK\n");
}
- //_smutex.unlock();
}
void ATCmdManager::_oob_setWiFiPWD()
{
int n;
wifi_config_t wifi_cfg = init_wifi_config();
- //_smutex.lock();
- //n = _parser.scanf("%31[^\r\n]", wifi_cfg.pass);
n = readStringBytes((uint8_t *)wifi_cfg.pass, 32);
if(n>0)
{
@@ -1083,31 +995,28 @@
data_msg.wifi_cmd = WIFI_CMD_CONFIG;
data_msg.dataLen = sizeof(wifi_config_t);
memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
queueWiFiDataRequest(data_msg);
} else {
dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
_parser.send("NAK\n");
}
- //_smutex.unlock();
}
void ATCmdManager::_oob_setWiFiSecurity()
{
int n;
wifi_config_t wifi_cfg = init_wifi_config();
- _smutex.lock();
- n = _parser.scanf(",%d", &wifi_cfg.security);
- _smutex.unlock();
+ int security;
+ n = _parser.scanf(",%d", &security);
if(n>0)
{
+ wifi_cfg.security = (nsapi_security_t) security;
dbg_printf(LOG, "ATCMD MAN]: wifi_cfg.security = %s\n", sec2str(wifi_cfg.security));
// package and send on wifi data queue
wifi_data_msg_t data_msg;
data_msg.wifi_cmd = WIFI_CMD_CONFIG;
data_msg.dataLen = sizeof(wifi_config_t);
memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
queueWiFiDataRequest(data_msg);
} else {
dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
@@ -1115,23 +1024,18 @@
_parser.send("NAK\n");
_smutex.unlock();
}
- //_smutex.unlock();
}
void ATCmdManager::_oob_getNetworkStatus()
{
- uint8_t if_id; // interface id for request
+ int if_id; // interface id for request
_parser.scanf(",%d", &if_id);
- //_smutex.lock();
dbg_printf(LOG, "\n Received Get Network Status command!!\n");
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
if(if_id == WIFI_INTERFACE_ID){
wifi_cmd_t cmd = WIFI_CMD_NETWORK_STATUS;
dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
- //_smutex.unlock();
- // queue next command
queueWiFiCommand(cmd);
}
return;
@@ -1140,12 +1044,9 @@
void ATCmdManager::_oob_WiFiNetworkStatus()
{
- //_smutex.lock();
dbg_printf(LOG, "\n Received Get WiFi Network Status command!!\n");
- //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
wifi_cmd_t cmd = WIFI_CMD_WIFI_STATUS;
dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
- //_smutex.unlock();
// queue next command
queueWiFiCommand(cmd);
return;
@@ -1153,28 +1054,6 @@
void ATCmdManager::_oob_sendHttpMessage()
{
- int n;
- http_request_t http_post_request;
- //_smutex.lock();
- /*
- n = _parser.scanf(",%d", &wifi_cfg.security);
- if(n>0)
- {
- dbg_printf(LOG, "ATCMD MAN]: wifi_cfg.security = %s\n", sec2str(wifi_cfg.security));
- // package and send on wifi data queue
- wifi_data_msg_t data_msg;
- data_msg.wifi_cmd = WIFI_CMD_CONFIG;
- data_msg.dataLen = sizeof(wifi_config_t);
- memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
- queueWiFiDataRequest(data_msg);
- sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
- } else {
- dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
- _parser.send("NAK\n");
- }
- */
- //_smutex.unlock();
-
}
bool ATCmdManager::queueWiFiCommand(wifi_cmd_t cmd){
@@ -1189,10 +1068,6 @@
wifi_cmd_message_t *wifiCmd = (wifi_cmd_message_t *) malloc(sizeof(wifi_cmd_message_t));
if(wifiCmd == NULL){
dbg_printf(LOG, "[ATCMD MAN] try malloc() : queued memory allocation failed\n");
- //_event_queue.call_in(10, &print_memory_info);
- //_event_queue.call_in(10, &print_heap_and_isr_stack_info);
- //print_memory_info();
- //print_heap_and_isr_stack_info();
return false;
}
#endif
@@ -1224,13 +1099,9 @@
bool ATCmdManager::queueWiFiDataRequest(wifi_data_msg_t data_req){
static bool memFull = false;
- //print_memory_info();
- //_event_queue.call_in(10, &print_heap_and_isr_stack_info);
- //print_heap_and_isr_stack_info();
wifi_data_msg_t *wifiData = _aT2WiFiDatamPool->alloc();
if(wifiData == NULL)
{
- //_parser.send("\r\nQUEUE MEMORY FULL\r\n");
#ifdef SEND_DEBUG_MESSAGES
sendAtConfirmation("\r\nQUEUE MEMORY FULL\r\n");
#endif
@@ -1249,7 +1120,6 @@
memcpy(wifiData->buffer, data_req.buffer, data_req.dataLen);
_aT2WiFiDataQueue->put(wifiData);
dbg_printf(LOG, "[ATCMD MAN] queued data size = %d : wifi_cmd = %d\n", data_req.dataLen, data_req.wifi_cmd);
- //free(&data_req);
return true;
}
@@ -1260,8 +1130,6 @@
resp_data = (at_data_msg_t*)evt.value.p;
setNextResponse(resp_data->at_resp);
dbg_printf(LOG, "[ATCMD MAN] dequeued data size = %d : at_resp = %d\n", resp_data->dataLen, resp_data->at_resp);
- //_event_queue.call_in(10, &print_heap_and_isr_stack_info);
- //print_heap_and_isr_stack_info();
}
return true;
}
@@ -1287,7 +1155,6 @@
_parser.send("%s", buf);
break;
}
- //wait_ms(1);
_smutex.unlock();
}
void ATCmdManager::sendAtEvent(const char *buf)
@@ -1318,7 +1185,6 @@
void ATCmdManager::sendConnectEvent(const uint8_t *buf, int len)
{
- //_smutex.lock();
switch(dataMode){
case AT_CMD_DATA_MODE:
_parser.send((const char*) buf);
@@ -1366,7 +1232,6 @@
void ATCmdManager::return_response(bool download) {
char * resp = (char *) resp_data->buffer;
- //_smutex.lock();
dbg_printf(LOG, "\n[ATCMD MAN] received response:\n");
if(download == false) // not download must be ascii header
{
@@ -1376,13 +1241,8 @@
{
printBufferInHex((uint8_t *)resp, resp_data->dataLen);
}
- //_parser.write(resp, resp_data->dataLen);
outputEDMdata((const uint8_t *)resp, resp_data->dataLen, DATA_MSG_ID,
EVENT_MSG_TYPE, WIFI_CHANNEL);
- //_smutex.unlock();
_wiFi2ATDatamPool->free(resp_data);
resp_data = NULL;
- //print_memory_info();
- //_event_queue.call_in(10, &print_heap_and_isr_stack_info);
- //print_heap_and_isr_stack_info();
}
--- a/source/WiFiManager.cpp Fri May 10 13:45:50 2019 +0000
+++ b/source/WiFiManager.cpp Sat May 11 11:55:29 2019 +0000
@@ -43,7 +43,8 @@
wifiWatchdogTimer.start();
watchdogCnt = 0;
//_event_queue.call_every(10000, this, &WiFiManager::callWifiWatchDog);
- watchDogTick.attach(this, &WiFiManager::callWifiWatchDogIsr, 10000.0); // call flip function every 2 seconds
+ watchDogTick.attach(callback(this, &WiFiManager::callWifiWatchDogIsr), 10000.0); // call flip function every 10 seconds
+
}
WiFiManager::~WiFiManager()
@@ -70,7 +71,7 @@
sendATresponseString(WIFI_WATCH_DOG);
watchdogCnt = 0;
}
- else if(wifiWatchdogTimer.read() > 30.0 && responseString==NULL)
+ else if(wifiWatchdogTimer.read() > 30 && responseString==NULL)
{
if(wifiCmd == WIFI_CMD_NONE)
inactivity_monitor++;
@@ -430,11 +431,8 @@
WiFiAccessPoint *ap;
nsapi_size_or_error_t count;
count = ncount;
- //count = wiFiManager->scanNetworks();
if (count <= 0) {
- //_smutex.lock();
dbg_printf(LOG, "[WIFI-MAN] scan() failed with return value: %d\n", count);
- //_smutex.unlock();
return 0;
}
/* Limit number of network arbitrary to 15 */
@@ -692,12 +690,9 @@
{
dbg_printf(LOG, "[WIFI-MAN] about to call status_callback_event... \r\n");
_event_queue.call_in(50, this, &WiFiManager::status_callback_event, status, param);
- //status_callback_event(status, param);
}
void WiFiManager::status_callback_event(nsapi_event_t status, intptr_t param)
{
- //if (status == NSAPI_EVENT_CONNECTION_STATUS_CHANGE) {
- //}
switch(param) {
case NSAPI_STATUS_LOCAL_UP:
dbg_printf(LOG, "[WIFI-MAN] Local IP address set!\r\n");
@@ -720,7 +715,6 @@
dbg_printf(LOG, "No connection to network!\r\n");
dbg_printf(LOG, "\n [WIFI-MAN] No connection to network!\n");
is_connected = false;
- //queueATresponse(AT_DISCONNECT_RESP);
// attempt reconnection if always connected scheme is set
if(internet_config.connectionScheme == ALWAYS_CONNECTED)
{
@@ -741,11 +735,6 @@
- // NSAPI_STATUS_LOCAL_UP = 0, /*!< local IP address set */
- // NSAPI_STATUS_GLOBAL_UP = 1, /*!< global IP address set */
- // NSAPI_STATUS_DISCONNECTED = 2, /*!< no connection to network */
- // NSAPI_STATUS_CONNECTING = 3, /*!< connecting to network */
- // NSAPI_STATUS_ERROR_UNSUPPORTED = NSAPI_ERROR_UNSUPPORTED
nsapi_error_t WiFiManager::connect()
{
@@ -817,9 +806,9 @@
dbg_printf(LOG, "\r\nHOSTNAME TRANSLATION FAILURE : error code = %d \r\n", result);
if(responseString == NULL)
{
- //responseString = (char *) malloc(100);
- //sprintf(responseString, "\r\nHOSTNAME TRANSLATION FAILURE : error code = %d \r\n", result);
- //sendATresponseString(AT_EVENT);
+ responseString = (char *) malloc(100);
+ sprintf(responseString, "\r\nHOSTNAME TRANSLATION FAILURE : error code = %d \r\n", result);
+ sendATresponseString(AT_EVENT);
}
}
wifiBusy = 0;
@@ -854,11 +843,7 @@
void WiFiManager::sendResponseDownloadData(at_cmd_resp_t at_cmd, const uint8_t * buf, int bufLen)
{
- //dbg_printf(LOG, "before call to new at_data_msg_t \n");
- //print_memory_info();
at_data_resp = new at_data_msg_t;
- //dbg_printf(LOG, "after call to new at_data_msg_t \n");
- //print_memory_info();
at_data_resp->at_resp = at_cmd;
size_t bufSize = sizeof(at_data_resp->buffer);
int pos = 0;
@@ -982,11 +967,6 @@
void WiFiManager::printBufferInHex(const uint8_t *buf, int pLen)
{
- //for(int i =0;i<pLen;i++){
- // if(i%8==0) dbg_printf(LOG, "\n[%3d]",i);
- // dbg_printf(LOG, "%02x ", buf[i]);
- //}
- //dbg_printf(LOG, "\n");
print_debug_hex(buf, pLen);
}
@@ -1044,7 +1024,6 @@
char errstr[100];
mbedtls_strerror(r, errstr, 100);
dbg_printf(LOG, "TLS connect failed (err = %d) for hostname '%s' -- ERROR = %s !!\n", r, hostName, errstr);
- //printf("TLS connect failed for hostname %s -- ERROR = %s !!\n", hostName, errstr);
socket->close();
return false;
}
@@ -1129,11 +1108,8 @@
callback(this, &WiFiManager::body_callback));
setHttpHeader("Host", http_req_cfg->hostName);
setHttpHeader("Accept", http_req_cfg->AcceptVal);
- //dbg_printf(LOG, "http_req_cfg->method = %d\n", http_req_cfg->method);
if(http_req_cfg->method == HTTP_GET){
dbg_printf(LOG, "HTTP_GET -- ignoring body\n");
- //setHttpHeader("Content-Type", http_req_cfg->contentType);
- //setHttpHeader("Content-Length", http_req_cfg->contentLen);
http_response = http_request->send(NULL, 0);
}
else{
@@ -1146,7 +1122,6 @@
char buf[100];
mbedtls_strerror(http_request->get_error(), buf, 100);
dbg_printf(LOG, "HttpRequest failed (error code %s)\n", buf);
- //dbg_printf(LOG, "HttpsRequest failed (error code %d)\n", https_request->get_error());
delete http_request; // free the memory
return false;
}
@@ -1180,17 +1155,9 @@
updateRemotePeerDetails();
// send socket connection event before proceeding to send https request
// give about 2 ms
- //_event_queue.call(this, &WiFiManager::sendSocketConnectionEvent);
sendSocketConnectionEvent();
- //https_connection_active = true; // set true whenever connection succeeds
- //return true;
- //dbg_printf(LOG, "[create https] TLS connection successful for https site : %s\n", host);
- //dbg_printf(LOG, "after call to createTLSconnection \n");
- //print_memory_info();
}
// Pass in `socket`, instead of `network` as first argument, and omit the `SSL_CA_PEM` argument
- //HttpsRequest* get_req = new HttpsRequest(socket, HTTP_GET, "https://httpbin.org/status/418");
- //_wmutex.lock();
stoptime = Kernel::get_ms_count();
dbg_printf(LOG, "\r\nTLS connection time : %d ms\r\n", (stoptime - starttime));
starttime = Kernel::get_ms_count();
@@ -1216,33 +1183,17 @@
dbg_printf(LOG, "HTTP_GET -- ignoring body\n");
setHttpsHeader("Host", http_req_cfg->hostName);
setHttpsHeader("Accept", http_req_cfg->AcceptVal);
- //setHttpHeader("Content-Type", http_req_cfg->contentType);
- //setHttpHeader("Content-Length", http_req_cfg->contentLen);
http_response = https_request->send(NULL, 0);
}
else{
- //dbg_printf(LOG, "about to setup https headers\r\n");
setHttpsHeader("Host", http_req_cfg->hostName);
setHttpsHeader("Accept", http_req_cfg->AcceptVal);
setHttpsHeader("Content-Type", http_req_cfg->contentType);
setHttpsHeader("Content-Length", http_req_cfg->contentLen);
dbg_printf(LOG, "https headers setup - about to send request\r\n");
// Grab the heap statistics
- //mbed_stats_heap_t heap_stats;
- //mbed_stats_heap_get(&heap_stats);
dbg_printf(LOG, "Heap size: %lu / %lu bytes\r\n", heap_stats.current_size, heap_stats.reserved_size);
-#ifdef SEND_DEBUG_MESSAGES
- responseString = (char *) malloc(200);
- sprintf(responseString, "\r\nABOUT TO SEND HTTP REQUEST\r\n");
- sendDebugMessage();
- responseString = (char *) malloc(200);
- sprintf(responseString, "Heap size= %lu / %lu bytes\r\n", heap_stats.current_size, heap_stats.reserved_size);
- sendDebugMessage();
http_response = https_request->send(http_req_cfg->body, bodyLen);
- responseString = (char *) malloc(100);
- sprintf(responseString, "\r\nRETURNED FROM SENDING HTTP REQUEST\r\n");
- sendDebugMessage();
-#endif
}
#else
setHttpsHeader("Host", http_req_cfg->hostName);
--- a/source/main-http-ipv6.cpp Fri May 10 13:45:50 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTP_IPV6
-
-#include "mbed.h"
-#include "network-helper.h"
-#include "http_request.h"
-
-void dump_response(HttpResponse* res) {
- printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
- printf("Headers:\n");
- for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
- printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
- }
- printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
- NetworkInterface* network = connect_to_default_network_interface();
- if (!network) {
- printf("Cannot connect to the network, see serial output\n");
- return 1;
- }
-
- // Do a GET request to icanhazip.com which returns the public IPv6 address for the device
- // This page is only accessible over IPv6
- {
- // By default the body is automatically parsed and stored in a buffer, this is memory heavy.
- // To receive chunked response, pass in a callback as last parameter to the constructor.
- HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://ipv6.icanhazip.com");
-
- HttpResponse* get_res = get_req->send();
- if (!get_res) {
- printf("HttpRequest failed (error code %d)\n", get_req->get_error());
- return 1;
- }
-
- printf("\n----- HTTP GET response -----\n");
- dump_response(get_res);
-
- delete get_req;
- }
-
- wait(osWaitForever);
-}
-
-#endif
--- a/source/main-http-socket-reuse.cpp Fri May 10 13:45:50 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTP_SOCKET_REUSE
-
-#include "mbed.h"
-#include "network-helper.h"
-#include "http_request.h"
-
-void dump_response(HttpResponse* res) {
- printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
- printf("Headers:\n");
- for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
- printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
- }
- printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
- NetworkInterface* network = connect_to_default_network_interface();
- if (!network) {
- printf("Cannot connect to the network, see serial output\n");
- return 1;
- }
-
- // Create a TCP socket
- printf("\n----- Setting up TCP connection -----\n");
-
- TCPSocket* socket = new TCPSocket();
- nsapi_error_t open_result = socket->open(network);
- if (open_result != 0) {
- printf("Opening TCPSocket failed... %d\n", open_result);
- return 1;
- }
-
- nsapi_error_t connect_result = socket->connect("httpbin.org", 80);
- if (connect_result != 0) {
- printf("Connecting over TCPSocket failed... %d\n", connect_result);
- return 1;
- }
-
- printf("Connected over TCP to httpbin.org:80\n");
-
- // Do a GET request to httpbin.org
- {
- HttpRequest* get_req = new HttpRequest(socket, HTTP_GET, "http://httpbin.org/status/418");
-
- // By default the body is automatically parsed and stored in a string, this is memory heavy.
- // To receive chunked response, pass in a callback as third parameter to 'send'.
- HttpResponse* get_res = get_req->send();
- if (!get_res) {
- printf("HttpRequest failed (error code %d)\n", get_req->get_error());
- return 1;
- }
-
- printf("\n----- HTTP GET response -----\n");
- dump_response(get_res);
-
- delete get_req;
- }
-
- // POST request to httpbin.org
- {
- HttpRequest* post_req = new HttpRequest(socket, HTTP_POST, "http://httpbin.org/post");
- post_req->set_header("Content-Type", "application/json");
-
- const char body[] = "{\"hello\":\"world\"}";
-
- HttpResponse* post_res = post_req->send(body, strlen(body));
- if (!post_res) {
- printf("HttpRequest failed (error code %d)\n", post_req->get_error());
- return 1;
- }
-
- printf("\n----- HTTP POST response -----\n");
- dump_response(post_res);
-
- delete post_req;
- }
-
- socket->close();
- delete socket;
-
- wait(osWaitForever);
-}
-
-#endif
--- a/source/main-http.cpp Fri May 10 13:45:50 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTP
-
-#include "mbed.h"
-#include "http_request.h"
-#include "network-helper.h"
-#include "mbed_mem_trace.h"
-
-void dump_response(HttpResponse* res) {
- printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
- printf("Headers:\n");
- for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
- printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
- }
- printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
- // Connect to the network with the default networking interface
- // if you use WiFi: see mbed_app.json for the credentials
- NetworkInterface* network = connect_to_default_network_interface();
- if (!network) {
- printf("Cannot connect to the network, see serial output\n");
- return 1;
- }
-
- // Do a GET request to httpbin.org
- {
- // By default the body is automatically parsed and stored in a buffer, this is memory heavy.
- // To receive chunked response, pass in a callback as last parameter to the constructor.
- HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://httpbin.org/status/418");
-
- HttpResponse* get_res = get_req->send();
- if (!get_res) {
- printf("HttpRequest failed (error code %d)\n", get_req->get_error());
- return 1;
- }
-
- printf("\n----- HTTP GET response -----\n");
- dump_response(get_res);
-
- delete get_req;
- }
-
- // POST request to httpbin.org
- {
- HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://httpbin.org/post");
- post_req->set_header("Content-Type", "application/json");
-
- const char body[] = "{\"hello\":\"world\"}";
-
- HttpResponse* post_res = post_req->send(body, strlen(body));
- if (!post_res) {
- printf("HttpRequest failed (error code %d)\n", post_req->get_error());
- return 1;
- }
-
- printf("\n----- HTTP POST response -----\n");
- dump_response(post_res);
-
- delete post_req;
- }
-
- wait(osWaitForever);
-}
-
-#endif
--- a/source/main-https-chunked-request.cpp Fri May 10 13:45:50 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/**
- * This is an example of doing chunked requests, where you do not need to load the full request body
- * into memory. You do this by adding a callback to the `send` function of the HTTP/HTTPS request.
- */
-
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTPS_CHUNKED_REQUEST
-
-#include "mbed.h"
-#include "mbed_trace.h"
-#include "https_request.h"
-#include "network-helper.h"
-
-/* List of trusted root CA certificates
- * currently one: Comodo, the CA for reqres.in
- *
- * To add more root certificates, just concatenate them.
- */
-const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n"
- "MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL\n"
- "MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\n"
- "BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT\n"
- "IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw\n"
- "MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy\n"
- "ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N\n"
- "T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv\n"
- "biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR\n"
- "FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J\n"
- "cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW\n"
- "BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/\n"
- "BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm\n"
- "fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv\n"
- "GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=\n"
- "-----END CERTIFICATE-----\n";
-
-void dump_response(HttpResponse* res) {
- printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
- printf("Headers:\n");
- for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
- printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
- }
- printf("\nBody (%lu bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-// Spread the message out over 3 different chunks
-const char * chunks[] = {
- "{\"message\":",
- "\"this is an example",
- " of chunked encoding\"}"
-};
-
-int chunk_ix = 0;
-
-// Callback function, grab the next chunk and return it
-const void * get_chunk(uint32_t* out_size) {
- // If you don't have any data left, set out_size to 0 and return a null pointer
- if (chunk_ix == (sizeof(chunks) / sizeof(chunks[0]))) {
- *out_size = 0;
- return NULL;
- }
- const char *chunk = chunks[chunk_ix];
- *out_size = strlen(chunk);
- chunk_ix++;
-
- return chunk;
-}
-
-int main() {
- NetworkInterface* network = connect_to_default_network_interface();
- if (!network) {
- printf("Cannot connect to the network, see serial output\n");
- return 1;
- }
-
- mbed_trace_init();
-
- // This example also logs the raw request, you can do this by calling 'set_request_log_buffer' on the request
- uint8_t *request_buffer = (uint8_t*)calloc(2048, 1);
-
- // POST request to reqres.in
- {
- HttpsRequest* post_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_POST, "https://reqres.in/api/users");
- post_req->set_header("Content-Type", "application/json");
- post_req->set_request_log_buffer(request_buffer, 2048);
-
- // If you pass a callback here, the Transfer-Encoding header is automatically set to chunked
- HttpResponse* post_res = post_req->send(&get_chunk);
- if (!post_res) {
- printf("HttpsRequest failed (error code %d)\n", post_req->get_error());
- return 1;
- }
-
- // Log the raw request that went over the line (if you decode the hex you can see the chunked parts)
- // e.g. in Node.js (take the output from below):
- // '50 4f 53 54 20'.split(' ').map(c=>parseInt(c,16)).map(c=>String.fromCharCode(c)).join('')
- printf("\n----- Request buffer -----\n");
- for (size_t ix = 0; ix < post_req->get_request_log_buffer_length(); ix++) {
- printf("%02x ", request_buffer[ix]);
- }
- printf("\n");
-
- printf("\n----- HTTPS POST response -----\n");
- dump_response(post_res);
-
- delete post_req;
- }
-
- wait(osWaitForever);
-}
-
-#endif
--- a/source/main-https-socket-reuse.cpp Fri May 10 13:45:50 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-#include "select-demo.h"
-
-/**
- * This demo shows how to re-use sockets, so the TLS handshake only has to happen once
- */
-
-#if DEMO == DEMO_HTTPS_SOCKET_REUSE
-
-#include "mbed.h"
-#include "mbed_trace.h"
-#include "https_request.h"
-#include "network-helper.h"
-
-/* List of trusted root CA certificates
- * currently one: Let's Encrypt, the CA for httpbin.org
- *
- * To add more root certificates, just concatenate them.
- */
-const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n"
- "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
- "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
- "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
- "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
- "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
- "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
- "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
- "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
- "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
- "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
- "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
- "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
- "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
- "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
- "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
- "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
- "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
- "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
- "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
- "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
- "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
- "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
- "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
- "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
- "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
- "-----END CERTIFICATE-----\n";
-
-void dump_response(HttpResponse* res) {
- printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
- printf("Headers:\n");
- for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
- printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
- }
- printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
- NetworkInterface* network = connect_to_default_network_interface();
- if (!network) {
- printf("Cannot connect to the network, see serial output\n");
- return 1;
- }
-
- mbed_trace_init();
-
- // Create a TLS socket (which holds a TCPSocket)
- printf("\n----- Setting up TLS connection -----\n");
-
- nsapi_error_t r;
-
- TLSSocket* socket = new TLSSocket();
- if ((r = socket->open(network)) != NSAPI_ERROR_OK) {
- printf("TLS socket open failed (%d)\n", r);
- return 1;
- }
- if ((r = socket->set_root_ca_cert(SSL_CA_PEM)) != NSAPI_ERROR_OK) {
- printf("TLS socket set_root_ca_cert failed (%d)\n", r);
- return 1;
- }
- if ((r = socket->connect("httpbin.org", 443)) != NSAPI_ERROR_OK) {
- printf("TLS socket connect failed (%d)\n", r);
- return 1;
- }
-
- // GET request to httpbin.org
- {
- HttpsRequest* get_req = new HttpsRequest(socket, HTTP_GET, "https://httpbin.org/status/418");
-
- HttpResponse* get_res = get_req->send();
- if (!get_res) {
- printf("HttpRequest failed (error code %d)\n", get_req->get_error());
- return 1;
- }
- printf("\n----- HTTPS GET response -----\n");
- dump_response(get_res);
-
- delete get_req;
- }
-
- // POST request to httpbin.org
- {
- HttpsRequest* post_req = new HttpsRequest(socket, HTTP_POST, "https://httpbin.org/post");
- post_req->set_header("Content-Type", "application/json");
-
- const char body[] = "{\"hello\":\"world\"}";
-
- HttpResponse* post_res = post_req->send(body, strlen(body));
- if (!post_res) {
- printf("HttpRequest failed (error code %d)\n", post_req->get_error());
- return 1;
- }
-
- printf("\n----- HTTPS POST response -----\n");
- dump_response(post_res);
-
- delete post_req;
- }
-
- socket->close();
- delete socket;
-
- wait(osWaitForever);
-}
-
-#endif
--- a/source/main-https.cpp Fri May 10 13:45:50 2019 +0000
+++ b/source/main-https.cpp Sat May 11 11:55:29 2019 +0000
@@ -5,15 +5,12 @@
#if DEMO == DEMO_HTTPS
-//#include "mbed.h"
#include <events/mbed_events.h>
#include <mbed.h>
#include "ble/BLE.h"
#include "fault_handlers.h"
-//#include "BLE.h"
#include "ATCmdParser.h"
-//#include "BLEDevice.h"
#include "LEDService.h"
#include "ble/services/UARTService.h"
@@ -25,8 +22,6 @@
#include "mbed_memory_status.h"
UARTService *uart;
-//DigitalOut alivenessLED(LED1, 0);
-//DigitalOut actuatedLED(LED2, 0);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
@@ -45,23 +40,14 @@
// BLE configuration
static ble_config_t ble_config;
const uint8_t pairingPassword[6] = "1101";
-// BLE interface pointer
-//BLE &_ble;
// BLE peripheral pointer
static SMDevicePeripheral *peripheral;
const static char DEVICE_NAME_MAIN[] = "UBLOX-BLE";
-static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID};
char buffer[BUFFER_LEN];
-#ifdef ENABLE_UART_BACKGRND_DEMO
-uint8_t TxBuffer[TX_BUFFER_LEN];
-uint8_t RxBuffer[RX_BUFFER_LEN];
-#endif
static EventQueue eventQueue_atcmd(/* event count */ 32 * EVENTS_EVENT_SIZE);
static EventQueue eventQueue_wifi(/* event count */ 32 * EVENTS_EVENT_SIZE);
-LEDService *ledServicePtr;
-
/* Queue and memory pool for AT to Wifi commands */
static MemoryPool<wifi_cmd_message_t, 16> aT2WiFimPool;
static Queue<wifi_cmd_message_t, 16> aT2WiFiCmdQueue;
@@ -82,11 +68,6 @@
-/* allocate statically stacks for the three threads */
-//unsigned char rt_stk[1024];
-//unsigned char hp_stk[1024];
-//unsigned char lp_stk[1024];
-
/* creates three tread objects with different priorities */
//Thread real_time_thread(osPriorityRealtime, 1024, &rt_stk[0]);
//Thread high_prio_thread(osPriorityHigh, 1024, &hp_stk[0]);
@@ -125,156 +106,10 @@
#include "wifi_demo.h"
Mutex _smutex; // Protect memory access
-// check free memory
-
-void performFreeMemoryCheck()
-{
- _smutex.lock();
- // perform free memory check
- int blockSize = 16;
- int i = 1;
- dbg_printf(LOG, "Checking memory with blocksize %d char ...\n", blockSize);
- while (true) {
- char *p = (char *) malloc(i * blockSize);
- if (p == NULL)
- break;
- free(p);
- ++i;
- }
- dbg_printf(LOG, "Ok for %d char\n", (i - 1) * blockSize);
- _smutex.unlock();
-
-}
-#ifdef ENABLE_UART_BACKGRND_DEMO
-static int uartExpectedRcvCount = 0;
-static int uartCharRcvCount = 0;
-static bool UartBusy = false;
-int WriteUartBytes(const uint8_t * txBuffer, size_t bufSize, int txLen)
-{
- if(txLen > bufSize)
- {
- txLen = bufSize;
- }
- //int goodTxLen;
- //goodTxLen = _parser.write((const char *) txBuffer, txLen);
- for(int i=0;i<txLen;i++)
- {
- device->putc(txBuffer[i]);
- }
- // return number of bytes written to UART
- return (int) txLen;
-}
-
-void printUartRxResult()
-{
-
- if(uartCharRcvCount == 0)
- {
- dbg_printf(LOG, "\nFirst Call to UART attach callback!!\n");
- }
- else if(uartCharRcvCount >= uartExpectedRcvCount)
- {
- dbg_printf(LOG, "\nNumber of Received Bytes = %d\n\n", uartCharRcvCount);
- dbg_printf(LOG, "--- Writing back received bytes --- \n");
- int n;
- n = WriteUartBytes(RxBuffer, TX_BUFFER_LEN, uartCharRcvCount);
- UartBusy = false;
- }
-}
-
-
-void UartRxcallback_ex() {
- if(uartCharRcvCount >= uartExpectedRcvCount)
- {
- int x = device->getc();
- return;
- }
- if(uartCharRcvCount == 0)
- {
- eventQueue.call(printUartRxResult);
- }
- // Note: you need to actually read from the serial to clear the RX interrupt
- RxBuffer[uartCharRcvCount] = (uint8_t) device->getc();
- uartCharRcvCount++;
- if(uartCharRcvCount >= uartExpectedRcvCount)
- {
- //alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */
- eventQueue.call(printUartRxResult);
- }
-}
-void BackGndUartRead(uint8_t * rxBuffer, size_t bufSize, int rxLen)
-{
- UartBusy = true;
- dbg_printf(LOG, "Setting up background UART read - rxLen = %d\n", rxLen);
- uartCharRcvCount = 0;
- if(rxLen > bufSize)
- {
- rxLen = bufSize;
- }
- uartExpectedRcvCount = rxLen;
- dbg_printf(LOG, "\nattaching to device UART\n\n");
- device->attach(&UartRxcallback_ex);
- dbg_printf(LOG, "\nBackground UART read setup completed\n\n");
-}
-
-int ReadUartBytes(uint8_t * rxBuffer, size_t bufSize, int rxLen, bool echo)
-{
- UartBusy = true;
- if(rxLen > bufSize)
- {
- rxLen = bufSize;
- }
- for(int i=0;i<rxLen;i++)
- {
- rxBuffer[i] = (uint8_t) device->getc();
- if(echo)device->putc(rxBuffer[i]);
- }
- UartBusy = false;
- //return number of bytes written to UART
- return rxLen;
-}
-
-
-void checkUartReceive()
-{
- //dbg_printf(LOG, "Hello World!\n\r");
- char cbuf[100];
- int rxCnt=0;
- while(device->readable()) {
- //dbg_printf(LOG, "uartCharRcvCount = %d\n\r", uartCharRcvCount++);
- cbuf[rxCnt++] = device->getc();
- //putc(getc() + 1); // echo input back to terminal
- }
- cbuf[rxCnt] = NULL;
- if(rxCnt > 0)
- {
- dbg_printf(LOG, "received %d chars\n", rxCnt);
- dbg_printf(LOG, "%s\n", cbuf);
- }
-
-}
-#endif
uint64_t lastTime = 0;
uint64_t now = 0;
uint32_t callCount = 0;
-void HelloUart()
-{
- //if(UartBusy)return;
- // 64-bit time doesn't wrap for half a billion years, at least
- lastTime = now;
- now = Kernel::get_ms_count();
- callCount++;
- dbg_printf(LOG, "\nHello : %d secs elapsed : CallCount = %d \n", uint32_t(now - lastTime), callCount);
-}
-
-
-
-
-//Serial device(USBTX, USBRX); // tx, rx
-//RawSerial device(MBED_CONF_APP_UART1_TX, MBED_CONF_APP_UART1_RX); // tx, rx
-
-
// Wifi-demo
@@ -296,16 +131,6 @@
}
}
-void printWait(int numSecs)
-{
- dbg_printf(LOG, "Waiting for %d seconds...\n", numSecs);
- for(int i=0;i<numSecs;i++){
- dbg_printf(LOG, "%d", i);
- dbg_printf(LOG, "\n");
- wait(0.5);
- eventQueue_atcmd.dispatch(500); // Dispatch time - 500msec
- }
-}
void printWaitAbortKeyPress(int numSecs)
{
@@ -388,11 +213,6 @@
led3 = !led3;
}
-//#define DISABLE_WIFI
-#define DISABLE_WIFI_DEMO
-#define SKIP_WIFI_SCAN_DEMO
-#define BLE_STOP_START_ADV_SCAN_DEMO
-#define SKIP_WIFI_CONNECT_DEMO
#define PAUSE_SECONDS 0
#define PAUSE_SECONDS_BLE 0
int main() {
@@ -403,11 +223,7 @@
#endif
reset_counter++;
- print_memory_info();
dbg_printf(LOG, "\r\n ++++++ PROGRAM STARTING -- reset count = %d ++++++ \r\n", reset_counter);
- //device = new RawSerial(PA_9, PA_10, DEFAULT_BAUD_RATE);
-
- dbg_printf(LOG, "*** HELLO MESSAGE *** \n %s", (char *)&hello_msg[6]);
setupDefaultWiFiConfig();
setupDefaultBleConfig();
BLE& _ble = BLE::Instance();
@@ -419,20 +235,13 @@
dbg_printf(LOG, "Filesystem creation failed, will use memory storage\r\n");
}
#endif
- print_memory_info();
dbg_printf(LOG, "\r\n PERIPHERAL \r\n\r\n");
peripheral = new SMDevicePeripheral(_ble, queue, peer_address, ble_config);
- print_memory_info();
peripheral->run();
btle_thread.start(callback(&queue, &EventQueue::dispatch_forever));
- print_memory_info();
- printWaitAbortKeyPress(PAUSE_SECONDS_BLE); // give BLE time to settle
- //peripheral->stopAdvertising();
-#ifndef DISABLE_WIFI // comment out wifi part
int start = Kernel::get_ms_count();
-#ifdef DISABLE_WIFI_DEMO
network = WiFiInterface::get_default_instance();
if (!network) {
dbg_printf(LOG, "ERROR: No WiFiInterface found.\n");
@@ -444,96 +253,14 @@
&aT2WiFiDatamPool, &aT2WiFiDataQueue,
&wiFi2ATDatamPool, &wiFi2ATDataQueue
);
-#else
- NetworkInterface* network = connect_to_default_network_interface();
- int stop = Kernel::get_ms_count();
- dbg_printf(LOG, "\n The Wifi Network scan took %d ms or %4.1f seconds\n", (stop - start), (float)((stop - start)/1000.0));
- // run on separate thread;
- wifi_evt_thread.start(callback(wifi_demo, network));
- wifi_evt_thread.join();
- network->disconnect();
- delete network;
- dbg_printf(LOG, "\n Wifi-Demo completed - restarting BLE \n\n");
-#endif /// endif DISABLE_WIFI_DEMO
-
-#else
- dbg_printf(LOG, "\n Wifi Demo disabled so just waiting it out... \n\n");
- printWait(2); // lets wait for a minute before turning BLE back on
- dbg_printf(LOG, "\n ++++++ restarting BLE ++++++ \n\n");
-#endif /// endif DISABLE_WIFI
- printWaitAbortKeyPress(PAUSE_SECONDS);
- //peripheral->startAdvertising();
-#ifdef ENABLE_UART_BACKGRND_DEMO
- for(int i=0;i<255;i++)
- {
- device->putc(i);
- }
- reportGapState();
- dbg_printf(LOG, "\n\n\nEnter # of expected bytes: ");
- ReadUartBytes(RxBuffer, RX_BUFFER_LEN, 4, true);
- uint8_t rxLen = (uint8_t) (100*(RxBuffer[0]-'0') + 10*(RxBuffer[1]-'0') + (RxBuffer[2]-'0')) %256;
- dbg_printf(LOG, "\n\nExpected # of Received Bytes = %d\n", rxLen);
- BackGndUartRead(RxBuffer, RX_BUFFER_LEN, (int) rxLen);
-
- dbg_printf(LOG, "\n Waiting for 5 seconds ");
- printWait(5);
- dbg_printf(LOG, "\n Waiting finished!!!\n Now waiting for expected bytes to be received \n\n");
- while(UartBusy){
- wait(0.1);
- }
-#endif
-
- dbg_printf(LOG, "\r\n++++++ Press key for Wifi demo test ++++++ \r\n");
- printWaitAbortKeyPress(PAUSE_SECONDS);
-#ifndef SKIP_WIFI_SCAN_DEMO
- dbg_printf(LOG, "\r\n++++++ Test WiFi Manager Network Scan ++++++ \r\n");
- int count;
- count = wiFiManager->scanNetworks();
- if (count <= 0) {
- dbg_printf(LOG, "scan() failed with return value: %d\n", count);
- }
- else {
- dbg_printf(LOG, "\r\n++++++ Test WiFi Scan found %d networks ++++++ \r\n ++++ SUCCESS ++++\r\n", count);
- }
-#endif
-
-#ifndef SKIP_WIFI_CONNECT_DEMO
- dbg_printf(LOG, "\r\n++++++ Test WiFi Manager Network connect ++++++ \r\n");
- nsapi_error_t werror;
- werror = wiFiManager->connect();
- if (werror < 0) {
- dbg_printf(LOG, "connect() failed with return value: %d\n", werror);
- }
- else {
- dbg_printf(LOG, "\r\n++++++ Test WiFi connect SUCCESSFUL ++++++ \r\n");
- }
- if(!werror) // connect successful - test dicsonnection
- {
- dbg_printf(LOG, "\r\n++++++ Test WiFi Manager Network disconnect ++++++ \r\n");
- werror = wiFiManager->disconnect();
- if (werror) {
- dbg_printf(LOG, "disconnect() failed with return value: %d\n", werror);
- }
- else {
- dbg_printf(LOG, "\r\n++++++ Test WiFi disconnect SUCCESSFUL ++++++ \r\n");
- }
- }
-#endif
- //wiFiManager->runMain();
- dbg_printf(LOG, "\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
- dbg_printf(LOG, "\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
dbg_printf(LOG, "\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
dbg_printf(LOG, "\r\n++++++ Test WiFi Manager Network scan from thread ++++++ \r\n");
dbg_printf(LOG, "\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
- dbg_printf(LOG, "\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
- dbg_printf(LOG, "\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
wifi_thread.start(callback(wiFiManager, &WiFiManager::runMain));
dbg_printf(LOG, "\r\n after starting wifi thread \r\n");
- print_memory_info();
- // dispatch event queue on event thread
- dbg_printf(LOG, "\r\n [MAIN THREAD] Thread Id = %X\r\n", (uint32_t)ThisThread::get_id());
- dbg_printf(LOG, "\r\n [EVENT THREAD] Thread Id = %X\r\n", (uint32_t)wifi_evt_thread.get_id());
+ // dispatch wifi event queue on event thread
wifi_evt_thread.start(callback(&eventQueue_wifi, &EventQueue::dispatch_forever));
+ // dispatch atcmd event queue on event thread
atcmd_evt_thread.start(callback(&eventQueue_atcmd, &EventQueue::dispatch_forever));
dbg_printf(LOG, "\r\n++++++ Starting ATCmdmanager ++++++ \r\n");
ATCmdManager *aTCmdManager = new ATCmdManager(USBTX, USBRX, peripheral,
@@ -543,23 +270,13 @@
&aT2WiFiDatamPool, &aT2WiFiDataQueue,
&wiFi2ATDatamPool, &wiFi2ATDataQueue,
false);
- //aTCmdManager->runMain();
atcmd_thread.start(callback(aTCmdManager, &ATCmdManager::runMain));
dbg_printf(LOG, "\r\n after starting atcmd thread \r\n");
print_memory_info();
- //SCB->SHCSR |= 0x00070000;//Enable fault handler.
- //wiFiManager->runMain();
while(1)
{
wait(0.1);
}
- //performFreeMemoryCheck();
-
- //eventQueue.dispatch_forever();
- //t.start(callback(&eventQueue, &EventQueue::dispatch_forever));
- //eventQueue2.dispatch_forever();
-
- return 0;
}
#endif
--- a/source/main.cpp Fri May 10 13:45:50 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifdef OBSOLETE_MAIN
-#include <events/mbed_events.h>
-#include <mbed.h>
-#include "ble/BLE.h"
-#include "LEDService.h"
-#include "ble/services/UARTService.h"
-
-UARTService *uart;
-
-DigitalOut alivenessLED(LED1, 0);
-DigitalOut actuatedLED(LED2, 0);
-RawSerial pc(USBTX, USBRX); // tx, rx
-const static char DEVICE_NAME[] = "BLE-UART";
-static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID};
-#define BUFFER_LEN 256
-#define TX_BUFFER_LEN 4*256
-#define RX_BUFFER_LEN 4*256
-char buffer[BUFFER_LEN];
-uint8_t TxBuffer[TX_BUFFER_LEN];
-uint8_t RxBuffer[RX_BUFFER_LEN];
-static EventQueue eventQueue(/* event count */ 10 * EVENTS_EVENT_SIZE);
-
-LEDService *ledServicePtr;
-
-void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
-{
- (void) params;
- BLE::Instance().gap().startAdvertising();
-}
-
-void blinkCallback(void)
-{
- alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */
-}
-
-void EchoBleUartReceived()
-{
- uart->writeString(buffer);
- uart->writeString("\n"); //flushes uart output buffer and sends data
-}
-
-
-/**
- * This callback allows the LEDService to receive updates to the ledState Characteristic.
- *
- * @param[in] params
- * Information about the characterisitc being updated.
- */
-void onDataWrittenCallback(const GattWriteCallbackParams *params) {
- if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1)) {
- actuatedLED = *(params->data);
- }
- else if ((uart != NULL) && (params->handle == uart->getTXCharacteristicHandle())) {
- uint16_t bytesRead = params->len;
-
- pc.printf("received %u bytes\n\r ", bytesRead);
-
- if(bytesRead >= 255){
- pc.printf("Overflow command %u n\r ", bytesRead);
- bytesRead = 255;
- }
-
- unsigned index = 0;
- for (; index < bytesRead; index++) {
- buffer[index] = params->data[index];
- }
-
- buffer[index++] = 0;
-
- pc.printf("Data : %s ",buffer);
- pc.printf("\r\n");
- eventQueue.call(EchoBleUartReceived);
-
- }
-}
-
-
-/**
- * This function is called when the ble initialization process has failled
- */
-void onBleInitError(BLE &ble, ble_error_t error)
-{
- /* Initialization error handling should go here */
-}
-
-void printMacAddress()
-{
- /* Print out device MAC address to the console*/
- Gap::AddressType_t addr_type;
- Gap::Address_t address;
- BLE::Instance().gap().getAddress(&addr_type, address);
- pc.printf("DEVICE MAC ADDRESS: ");
- for (int i = 5; i >= 1; i--){
- pc.printf("%02x:", address[i]);
- }
- pc.printf("%02x\r\n", address[0]);
-}
-
-/**
- * Callback triggered when the ble initialization process has finished
- */
-void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
-{
- BLE& ble = params->ble;
- ble_error_t error = params->error;
- if (error != BLE_ERROR_NONE) {
- /* In case of error, forward the error handling to onBleInitError */
- onBleInitError(ble, error);
- return;
- }
-
- /* Ensure that it is the default instance of BLE */
- if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
- return;
- }
-
- ble.gap().onDisconnection(disconnectionCallback);
- ble.gattServer().onDataWritten(onDataWrittenCallback);
-
- bool initialValueForLEDCharacteristic = false;
- ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic);
- /* Setup primary service */
- uart = new UARTService(ble);
-
- /* setup security */
- error = ble.securityManager().init();
- if(error != BLE_ERROR_NONE)
- {
- pc.printf("\nBLE Security manager initialization failed!!\n");
- }
- /* setup advertising */
- ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
- //ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
- ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
- /* set up the services that can be discovered */
- ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,(const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
- ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
- ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
- ble.gap().startAdvertising();
-
- printMacAddress();
-}
-
-void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
- BLE &ble = BLE::Instance();
- eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
-}
-
-static int uartExpectedRcvCount = 0;
-static int uartCharRcvCount = 0;
-static bool UartBusy = false;
-int WriteUartBytes(const uint8_t * txBuffer, size_t bufSize, int txLen)
-{
- if(txLen > bufSize)
- {
- txLen = bufSize;
- }
- for(int i=0;i<txLen;i++)
- {
- pc.putc(txBuffer[i]);
- }
- // return number of bytes written to UART
- return txLen;
-}
-
-void UartRxcallback_ex() {
- if(uartCharRcvCount >= uartExpectedRcvCount)
- {
- int x = pc.getc();
- return;
- }
- if(uartCharRcvCount == 0)
- {
- pc.printf("\nFirst Call to UART attach callback!!\n");
- }
- // Note: you need to actually read from the serial to clear the RX interrupt
- RxBuffer[uartCharRcvCount] = (uint8_t) pc.getc();
- uartCharRcvCount++;
- if(uartCharRcvCount >= uartExpectedRcvCount)
- {
- alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */
- pc.printf("\nNumber of Received Bytes = %d\n\n", uartCharRcvCount);
- pc.printf("--- Writing back received bytes --- \n");
- int n;
- n = WriteUartBytes(RxBuffer, TX_BUFFER_LEN, uartCharRcvCount);
- UartBusy = false;
- }
-}
-
-void BackGndUartRead(uint8_t * rxBuffer, size_t bufSize, int rxLen)
-{
- UartBusy = true;
- pc.printf("Setting up background UART read - rxLen = %d\n", rxLen);
- uartCharRcvCount = 0;
- if(rxLen > bufSize)
- {
- rxLen = bufSize;
- }
- uartExpectedRcvCount = rxLen;
- pc.attach(&UartRxcallback_ex);
- pc.printf("\nBackground UART read setup completed\n\n");
- //for(int i=0;i<rxLen;i++)
- //{
- // rxBuffer[i] = (uint8_t) pc.getc();
- //}
- // return number of bytes written to UART
- //return rxLen;
-}
-
-int ReadUartBytes(uint8_t * rxBuffer, size_t bufSize, int rxLen, bool echo)
-{
- UartBusy = true;
- if(rxLen > bufSize)
- {
- rxLen = bufSize;
- }
- for(int i=0;i<rxLen;i++)
- {
- rxBuffer[i] = (uint8_t) pc.getc();
- if(echo)pc.putc(rxBuffer[i]);
- }
- UartBusy = false;
- //return number of bytes written to UART
- return rxLen;
-}
-
-
-void checkUartReceive()
-{
- //pc.printf("Hello World!\n\r");
- char cbuf[100];
- int rxCnt=0;
- while(pc.readable()) {
- //pc.printf("uartCharRcvCount = %d\n\r", uartCharRcvCount++);
- cbuf[rxCnt++] = pc.getc();
- //pc.putc(pc.getc() + 1); // echo input back to terminal
- }
- cbuf[rxCnt] = NULL;
- if(rxCnt > 0)
- {
- pc.printf("received %d chars\n", rxCnt);
- pc.printf("%s\n", cbuf);
- }
-
-}
-uint64_t lastTime = 0;
-uint64_t now = 0;
-uint32_t callCount = 0;
-void HelloUart()
-{
- //if(UartBusy)return;
- // 64-bit time doesn't wrap for half a billion years, at least
- lastTime = now;
- now = Kernel::get_ms_count();
- callCount++;
- pc.printf("\nHello : %d secs elapsed : CallCount = %d \n", uint32_t(now - lastTime), callCount);
-}
-
-Thread t;
-int main()
-{
- pc.baud(115200);
- eventQueue.call_every(500, blinkCallback);
- eventQueue.call_every(60000, HelloUart);
- //eventQueue.call_every(1000, checkUartReceive);
-
- BLE &ble = BLE::Instance();
- ble.onEventsToProcess(scheduleBleEventsProcessing);
- ble.init(bleInitComplete);
- for(int i=0;i<255;i++)
- {
- pc.putc(i);
- }
- int n;
- //ReadUartBytes(RxBuffer, RX_BUFFER_LEN, 4);
- pc.printf("\n\n\nEnter # of expected bytes: ");
- n = ReadUartBytes(RxBuffer, RX_BUFFER_LEN, 4, true);
- int rxLen = (int) 100*(RxBuffer[0]-'0') + 10*(RxBuffer[1]-'0') + (RxBuffer[0]-'0');
- pc.printf("\n\nExpected # of Received Bytes = %d\n", rxLen);
- BackGndUartRead(RxBuffer, RX_BUFFER_LEN, rxLen);
- //pc.printf("--- Writing back received data --- \n\n");
- //n = WriteUartBytes(RxBuffer, TX_BUFFER_LEN, rxLen);
- //pc.write("\n\ntesting Serial Write\n", 40); //, checkUartReceive, SERIAL_EVENT_TX_COMPLETE);
- //eventQueue.dispatch_forever();
- t.start(callback(&eventQueue, &EventQueue::dispatch_forever));
- return 0;
-}
-#endif
\ No newline at end of file