You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
353 lines
8.3 KiB
353 lines
8.3 KiB
/*
|
|
* L505.c
|
|
*
|
|
* Created on: Apr 1, 2021
|
|
* Author: wushufeng
|
|
*/
|
|
|
|
#include "drv_ec800k.h"
|
|
#include <stdint.h>
|
|
#include "VK_Com.h"
|
|
#include "VK_Log.h"
|
|
#include "rtdef.h"
|
|
#include "rtthread.h"
|
|
#include "rttypes.h"
|
|
|
|
#define DBG_TAG "DTU_LOG"
|
|
#define DBG_LVL DBG_INFO
|
|
#include "rtdbg.h"
|
|
|
|
|
|
Cclient_t client1 = {
|
|
.valid = true,
|
|
.mode = "TCP",
|
|
/*教培IP和PORT*/
|
|
.ip = "uavedu.jiagutech.com",
|
|
.port = "19763",
|
|
|
|
// /*中国透传域名*/
|
|
// .ip = "gitlab.jiagutech.com",
|
|
// /*韩国透传域名*/
|
|
// .ip = "8.220.247.132",
|
|
// /*泰国透传域名*/
|
|
// .ip = "ag-th.jiagutech.com",
|
|
|
|
// .port = "8027",
|
|
|
|
.connect_ID = 0,
|
|
.connect_sta = false,
|
|
.error_cnt = 0,
|
|
};
|
|
|
|
CLte_dev_t lte_dev = {
|
|
.contextID = 1,
|
|
.deviceEnable = true,
|
|
.client1 = (Cclient_t *)&client1,
|
|
.config_sta = false,
|
|
.reset_flag = DTU_CF_NEED_RESET,
|
|
};
|
|
|
|
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) {
|
|
LOG_I("%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));
|
|
|
|
LOG_I("%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) {
|
|
char *start, *end = NULL;
|
|
while (0 != BSP_LTE_SendCmd(AT_ICCID, DEFAULT_EXPECT, DEFAULT_ERROR,
|
|
LTE_CMD_WAIT_LONG));
|
|
//sscanf((const char *)lte_dev.at_buf, "+ICCID:%s\n", pICCID);
|
|
start =
|
|
rt_strstr((const char *)lte_dev.at_buf, "+ICCID:") + rt_strlen("+ICCID:") + 1;
|
|
end = start;
|
|
while (*end != '\0' && *end != '\r' && *end != '\n') end++;
|
|
rt_size_t len = end - start;
|
|
rt_memcpy(pICCID, start, len);
|
|
pICCID[len] = '\0';
|
|
|
|
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) {
|
|
// int ret = -1;
|
|
|
|
|
|
// if (0 == BSP_LTE_SendCmd(AT_CSQ, DEFAULT_EXPECT, DEFAULT_ERROR,
|
|
// LTE_CMD_WAIT_LONG)) {
|
|
|
|
// char *start, *end , *temp= NULL;
|
|
// start = rt_strstr((const char *)lte_dev.at_buf, CSQ_CMD_RESP) +
|
|
// rt_strlen(CSQ_CMD_RESP);
|
|
// end = start;
|
|
// while (*end != ',')
|
|
// end++;
|
|
// rt_size_t len = end - start;
|
|
// rt_memcpy(temp,start,len);
|
|
// temp[len] = '\0';
|
|
// ret = atoi(temp);
|
|
// }
|
|
// return ret;
|
|
// }
|
|
|
|
int8_t BSP_LTE_GetCSQ(void) {
|
|
int8_t ret = 0;
|
|
char *start;
|
|
|
|
if (0 != BSP_LTE_SendCmd(AT_CSQ, DEFAULT_EXPECT, DEFAULT_ERROR,
|
|
LTE_CMD_WAIT_LONG)) {
|
|
return -1;
|
|
}
|
|
|
|
start = rt_strstr((const char *)lte_dev.at_buf, CSQ_CMD_RESP);
|
|
if (start == RT_NULL) {
|
|
return -1;
|
|
}
|
|
|
|
start += rt_strlen(CSQ_CMD_RESP) + 1;
|
|
|
|
while (*start >= '0' && *start <= '9') {
|
|
ret = ret * 10 + (*start - '0');
|
|
start++;
|
|
}
|
|
|
|
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);
|
|
LOG_I("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);
|
|
hw_printf("%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;
|
|
}
|
|
|
|
void hw_printf(const char *fmt, ...) {
|
|
char buff[128];
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
|
|
rt_vsnprintf(buff, sizeof(buff), fmt, args);
|
|
va_end(args);
|
|
|
|
rt_device_t com_dev = fmu_com_get();
|
|
if (com_dev != RT_NULL) {
|
|
rt_device_write(com_dev, 0, buff, rt_strlen(buff));
|
|
}
|
|
}
|
|
//------------------End of File----------------------------
|
|
|