/* * L505.c * * Created on: Apr 1, 2021 * Author: wushufeng */ #include "drv_ec800k.h" #include "rtdef.h" #include "rtthread.h" #include "rttypes.h" #include Cclient_t client1 = { .valid = true, .mode = "TCP", // .ip = "119.3.111.201", .ip = "uavedu.jiagutech.com", .port = "19763", .connect_ID = 0, .connect_sta = false, .error_cnt = 0, }; Cclient_t client2 = { .valid = true, .mode = "TCP", .ip = "119.3.48.216", .port = "8027", .connect_ID = 1, .connect_sta = false, .error_cnt = 0, }; connect_state_t conn_sta2 = { .connected = false, .error_cnt = 0, }; CLte_dev_t lte_dev = { .contextID = 1, .deviceEnable = true, .client1 = (Cclient_t *)&client1, .client2 = (Cclient_t *)&client2, }; void BSP_LTE_SendData(uint8_t *pdata, uint32_t length) { if (lte_dev.com_dev != RT_NULL) { rt_device_write(lte_dev.com_dev, 0, pdata, length); } } int16_t BSP_LTE_CipSend(uint8_t *pdata, uint32_t length, uint32_t waittime) { BSP_LTE_SendData(pdata, length); rt_err_t ret = rt_sem_take(lte_dev.com_dev_rx_sem, waittime); if (ret == RT_EOK) { rt_thread_mdelay(500); rt_memset(lte_dev.at_buf, 0, sizeof(lte_dev.at_buf)); rt_device_read(lte_dev.com_dev, 0, lte_dev.at_buf, sizeof(lte_dev.at_buf)); /* 清空缓存 */ uint8_t c; while (rt_device_read(lte_dev.com_dev, 0, &c, 1) == 1) { } if (NULL != rt_strstr((char *)lte_dev.at_buf, CIPSEND_SUCCESS)) return 0; else return 1; } else { return 0; } } int16_t BSP_LTE_SendCmd(const char *cmd, const char *expect, const char *error, uint32_t waittime) { rt_kprintf("%s\n", cmd); BSP_LTE_SendData((uint8_t *)cmd, rt_strlen(cmd)); rt_err_t ret = rt_sem_take(lte_dev.com_dev_rx_sem, waittime); if (ret == RT_EOK) { rt_thread_mdelay(500); rt_memset(lte_dev.at_buf, 0, sizeof(lte_dev.at_buf)); rt_device_read(lte_dev.com_dev, 0, lte_dev.at_buf, sizeof(lte_dev.at_buf)); rt_kprintf("%s\n", lte_dev.at_buf); /* 清空缓存 */ uint8_t c; while (rt_device_read(lte_dev.com_dev, 0, &c, 1) == 1) { } if (NULL != rt_strstr((char *)lte_dev.at_buf, expect) && expect != NULL) { return 0; } else if (NULL != rt_strstr((char *)lte_dev.at_buf, error) && error != NULL) { return 1; } else { return 2; } } else { return -1; } } int16_t BSP_LTE_SendDataAT(uint8_t *pdata, uint32_t length) { int16_t res = 0; char cmd_str[128] = {0}; rt_sprintf(cmd_str, AT_CIPSEND, 0, length); if (0 == BSP_LTE_SendCmd(cmd_str, TPOK, DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL)) { res = BSP_LTE_CipSend(pdata, length, LTE_CMD_WAIT_LONG); } else res = -1; return res; } int16_t BSP_LTE_SendATE(int16_t retry) { do { if (0 == BSP_LTE_SendCmd(AT_ATE0, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL)) { return 0; } retry--; } while (retry); return -1; } // char tmp_imei[16] = "001068000000006"; // char tmp_imei_2[16] = "869455062043381"; void extract_number(const char *src, char *dest) { char *start = strchr(src, '\n') + 1; char *end = strchr(start, '\r'); if (start != NULL && end != NULL) { int length = end - start; strncpy(dest, start, length); dest[length] = '\0'; } } void BSP_LTE_GetIMEI(char *pIMEI) { while (0 != BSP_LTE_SendCmd(AT_IMEI, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL)) ; extract_number((const char *)lte_dev.at_buf, pIMEI); if (strlen(pIMEI) < 10) { BSP_LTE_GetIMEI(pIMEI); } if (pIMEI[15] == '\"') pIMEI[15] = 0; } void BSP_LTE_GetICCID(char *pICCID) { while (0 != BSP_LTE_SendCmd(AT_ICCID, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_LONG)) ; sscanf((const char *)lte_dev.at_buf, "\n+ICCID:%s\n", pICCID); if (strlen(pICCID) < 10) { BSP_LTE_GetICCID(pICCID); } } int16_t BSP_LTE_GetCGATT(int16_t retry) { do { if (0 == BSP_LTE_SendCmd(AT_CGATT, CGATT_OK, DEFAULT_ERROR, LTE_CMD_WAIT_LONG)) { return 0; } retry--; } while (retry); rt_kprintf("PS detached:[%s]", lte_dev.at_buf); return -1; } #define CSQ_CMD_RESP "+CSQ:" int BSP_LTE_GetCSQ(void) { int8_t ret = -1; char *pstr = NULL; if (0 == BSP_LTE_SendCmd(AT_CSQ, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_LONG)) { pstr = (char *)lte_dev.at_buf; if (NULL != (pstr = strstr(pstr, CSQ_CMD_RESP))) { pstr += strlen(CSQ_CMD_RESP); pstr += strspn(pstr, " \t"); sscanf((const char *)pstr, "%d,", (int *)&ret); } } return ret; } int16_t BSP_LTE_SendATCPIN(int16_t retry) { do { if (0 == BSP_LTE_SendCmd(AT_CPIN, "READY", DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL)) { return 0; } else if (NULL != strstr((char *)lte_dev.at_buf, "ERROR: 10")) { // No SimCard return 1; } retry--; } while (retry); return -1; } int16_t BSP_LTE_GetCEREG(int16_t retry) { do { if (0 == BSP_LTE_SendCmd(AT_CEREG, CEREG_OK, DEFAULT_ERROR, LTE_CMD_WAIT_LONG)) { return 0; } else if (0 == BSP_LTE_SendCmd(AT_CEREG, "+CEREG: 0,5\r\n\r\nOK", DEFAULT_ERROR, LTE_CMD_WAIT_LONG)) { return 0; } retry--; } while (retry); return -1; } static rt_err_t lte_com_rx_cb(rt_device_t dev, rt_size_t size) { if (lte_dev.com_dev_rx_sem != RT_NULL) { rt_sem_release(lte_dev.com_dev_rx_sem); } return RT_EOK; } void BSP_LET_Register_Com(rt_device_t com_dev) { if (lte_dev.com_dev_rx_sem == RT_NULL) { lte_dev.com_dev_rx_sem = rt_sem_create("lteRx", 0, RT_IPC_FLAG_PRIO); } lte_dev.com_dev = com_dev; } /* 函数功能:配置EC800K */ void BSP_LTE_Config(void) { int res = 0; rt_device_set_rx_indicate(lte_dev.com_dev, lte_com_rx_cb); uint8_t c = 0; rt_thread_mdelay(3000); BSP_LTE_SendData((uint8_t *)"+++", 3); rt_thread_mdelay(2000); BSP_LTE_SendData((uint8_t *)"+++", 3); rt_thread_mdelay(2000); while (rt_device_read(lte_dev.com_dev, 0, &c, 1) == 1) ; while (0 != BSP_LTE_SendATE(3)) { rt_thread_mdelay(500); rt_kprintf("BSP_LTE_SendATE error\n"); } /*查询模块信息*/ BSP_LTE_SendCmd(AT_ATI, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL); rt_kprintf("%s", lte_dev.at_buf); /*查询SIM卡是否存在*/ res = BSP_LTE_SendATCPIN(3); if (res == 0) lte_dev.sim_inserted = true; else if (res == 1) { lte_dev.sim_inserted = false; return; } /*请求移动设备的识别码*/ BSP_LTE_GetIMEI(lte_dev.imei); /*请求sim卡号码*/ BSP_LTE_GetICCID(lte_dev.iccid); /*查询信号强度*/ res = BSP_LTE_GetCSQ(); if (res != -1) lte_dev.csq = res; /*查询网络注册状态*/ BSP_LTE_GetCEREG(3); /*配置应用场景*/ BSP_LTE_SendCmd(AT_QICSGP, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_LONG); /*定义 PDP 上下文*/ BSP_LTE_SendCmd("AT+CGDCONT?\r\n", DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL); //+CGDCONT: 1,"IP","cmiot","0.0.0.0",0,0,0,0,0,0....OK lte_dev.config_sta = true; } //------------------End of File----------------------------