uint8_t ESP_GetFirmwareVersionString(uint8_t *fwBuf, size_t fwBufSize) { /* AT+GMR */ uint8_t rxBuf[32]; uint8_t res; const unsigned char *p; res = ESP_SendATCommand("AT+GMR\r\n", rxBuf, sizeof(rxBuf), "\r\n\r\nOK\r\n", ESP_DEFAULT_TIMEOUT_MS, NULL); if (res!=ERR_OK) { if (UTIL1_strtailcmp(rxBuf, "\r\n\r\nOK\r\n")) { res = ERR_OK; } } if (res==ERR_OK) { if (UTIL1_strncmp(rxBuf, "AT+GMR\r\r\n", sizeof("AT+GMR\r\r\n")-1)==0) { /* check for beginning of response */ UTIL1_strCutTail(rxBuf, "\r\n\r\nOK\r\n"); /* cut tailing response */ p = rxBuf+sizeof("AT+GMR\r\r\n")-1; /* skip beginning */ UTIL1_strcpy(fwBuf, fwBufSize, p); /* copy firmware information string */ } else { res = ERR_FAILED; } } if (res!=ERR_OK) { UTIL1_strcpy(fwBuf, fwBufSize, "ERROR"); /* default error */ } return res; }
uint8_t ESP_GetIPAddrString(uint8_t *ipBuf, size_t ipBufSize) { /* AT+CIFSR */ uint8_t rxBuf[32]; uint8_t res; const unsigned char *p; res = ESP_SendATCommand("AT+CIFSR\r\n", rxBuf, sizeof(rxBuf), NULL, ESP_DEFAULT_TIMEOUT_MS, NULL); if (res!=ERR_OK) { if (UTIL1_strtailcmp(rxBuf, "\r\n")) { res = ERR_OK; } } if (res==ERR_OK) { if (UTIL1_strncmp(rxBuf, "AT+CIFSR\r\r\n", sizeof("AT+CIFSR\r\r\n")-1)==0) { /* check for beginning of response */ UTIL1_strCutTail(rxBuf, "\r\n"); /* cut tailing response */ p = rxBuf+sizeof("AT+CIFSR\r\r\n")-1; /* skip beginning */ SkipNewLines(&p); UTIL1_strcpy(ipBuf, ipBufSize, p); /* copy IP information string */ } else { res = ERR_FAILED; } } if (res!=ERR_OK) { UTIL1_strcpy(ipBuf, ipBufSize, "ERROR"); } return res; }
uint8_t ESP_GetCIPMUXString(uint8_t *cipmuxBuf, size_t cipmuxBufSize) { /* AT+CIPMUX? */ uint8_t rxBuf[32]; uint8_t res; const unsigned char *p; res = ESP_SendATCommand("AT+CIPMUX?\r\n", rxBuf, sizeof(rxBuf), "\r\n\r\nOK\r\n", ESP_DEFAULT_TIMEOUT_MS, NULL); if (res==ERR_OK) { if (UTIL1_strncmp(rxBuf, "AT+CIPMUX?\r\r\n+CIPMUX:", sizeof("AT+CIPMUX?\r\r\n+CIPMUX:")-1)==0) { /* check for beginning of response */ UTIL1_strCutTail(rxBuf, "\r\n\r\nOK\r\n"); /* cut tailing response */ p = rxBuf+sizeof("AT+CIPMUX?\r\r\n+CIPMUX:")-1; /* skip beginning */ UTIL1_strcpy(cipmuxBuf, cipmuxBufSize, p); /* copy IP information string */ } else { res = ERR_FAILED; } } if (res!=ERR_OK) { UTIL1_strcpy(cipmuxBuf, cipmuxBufSize, "ERROR"); } return res; }
static void BleUartTask(void *pvParameters) { uint8_t buf[MAX_TX_MSG_SIZE]; uint8_t txBuf[MAX_TX_MSG_SIZE+sizeof("[Tx] ")+sizeof("AT+BLEUARTTX=\n")]; uint8_t res; CLS1_ConstStdIOType *io = CLS1_GetStdio(); int i; bool prevIsEnabled = FALSE; BLE_Init(); /* initialize BLE module, has to be done when interrupts are enabled */ FRTOS1_vTaskDelay(pdMS_TO_TICKS(2000)); /* wait so other tasks have time to write to the Shell */ if (res!=ERR_OK) { CLS1_SendStr("Failed changing LED activity\r\n", io->stdErr); } CLS1_SendStr("******************************************\r\n", io->stdOut); CLS1_SendStr("* Adafruit BLE UART CMD Mode Application *\r\n", io->stdOut); CLS1_SendStr("******************************************\r\n", io->stdOut); for(;;) { if (!prevIsEnabled && isEnabled) { /* enabled now */ prevIsEnabled = TRUE; BLE_Echo(FALSE); /* Disable command echo from Bluefruit */ CLS1_SendStr("Changing LED activity to MODE\r\n", io->stdOut); res = BLE_SendATCommandExpectedResponse("AT+HWMODELED=1\n", buf, sizeof(buf), "OK\r\n"); /* NOTE: "=MODE" failed! */ if (res!=ERR_OK) { CLS1_SendStr("Failed setting LED mode.\r\n", io->stdErr); } CLS1_SendStr("BLE UART enabled.\r\n", io->stdOut); } else if (prevIsEnabled && !isEnabled) { /* disabled now */ prevIsEnabled = FALSE; CLS1_SendStr("BLE UART disabled.\r\n", io->stdOut); } if (isEnabled) { while(isEnabled && !(isConnected=BLE_IsConnected())) { /* wait until connected */ CLS1_SendStr("Waiting for BLE UART connection...\r\n", io->stdOut); for(i=0;i<5 && isEnabled;i++) { FRTOS1_vTaskDelay(pdMS_TO_TICKS(1000)); LED1_Neg(); } } if (isConnected) { CLS1_SendStr("Connected!\r\n", io->stdOut); } while(isEnabled) { /* will break */ isConnected=BLE_IsConnected(); if (!isConnected) { CLS1_SendStr("Disconnected!\r\n", io->stdOut); break; /* get out of loop */ } if (txBuffer[0]!='\0') { /* have something to tx */ /* copy buffer */ taskENTER_CRITICAL(); UTIL1_strcpy(txBuf, sizeof(txBuf), "AT+BLEUARTTX="); UTIL1_strcat(txBuf, sizeof(txBuf), "[Tx] "); UTIL1_strcat(txBuf, sizeof(txBuf), txBuffer); txBuffer[0] = '\0'; taskEXIT_CRITICAL(); /* send tx string */ res = BLE_SendATCommandExpectedResponse(txBuf, buf, sizeof(buf), "OK\r\n"); if (res!=ERR_OK) { CLS1_SendStr("Failed to Tx string\r\n", io->stdErr); } } /* check Rx */ res = BLE_SendATCommandExpectedResponse("AT+BLEUARTRX\n", buf, sizeof(buf), "OK\r\n"); if (res==ERR_OK) { if (UTIL1_strncmp(buf, "OK\r\n", sizeof("OK\r\n")-1)==0) { /* only OK as response: no data */ } else { /* print response */ UTIL1_strCutTail(buf, "OK\r\n"); /* cut off the OK part */ CLS1_SendStr("[Rx] ", io->stdOut); CLS1_SendStr(buf, io->stdOut); } } FRTOS1_vTaskDelay(pdMS_TO_TICKS(50)); LED1_Neg(); } /* while */ } else { FRTOS1_vTaskDelay(pdMS_TO_TICKS(500)); LED1_Neg(); } //FRTOS1_vTaskDelay(pdMS_TO_TICKS(1000)); } }