|
@@ -29,7 +29,6 @@
|
|
|
#include "Common_Util.h"
|
|
#include "Common_Util.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
-static char hexData[800] = {0};//数据发送的中间数据
|
|
|
|
|
// 方法声明
|
|
// 方法声明
|
|
|
|
|
|
|
|
void bc260y_reset(void); // 重置状态。该文件中的方法共用状态,在使用下面的方法前需要重置一下状态。
|
|
void bc260y_reset(void); // 重置状态。该文件中的方法共用状态,在使用下面的方法前需要重置一下状态。
|
|
@@ -61,6 +60,8 @@ enum Result bc260y_set_sleep_sync(uint8_t n); //
|
|
|
* 输出>>
|
|
* 输出>>
|
|
|
*
|
|
*
|
|
|
**/
|
|
**/
|
|
|
|
|
+enum Result bc260y_query_cfun(uint8_t * n); // 查询功能模式。
|
|
|
|
|
+enum Result bc260y_query_cfun_sync(uint8_t * n); // 查询功能模式。
|
|
|
enum Result bc260y_set_cfun(uint8_t fun);
|
|
enum Result bc260y_set_cfun(uint8_t fun);
|
|
|
enum Result bc260y_set_cfun_sync(uint8_t fun); // 同步
|
|
enum Result bc260y_set_cfun_sync(uint8_t fun); // 同步
|
|
|
/**
|
|
/**
|
|
@@ -70,8 +71,8 @@ enum Result bc260y_set_cfun_sync(uint8_t fun); // 同
|
|
|
* 输出>>
|
|
* 输出>>
|
|
|
*
|
|
*
|
|
|
**/
|
|
**/
|
|
|
-enum Result bc260y_set_cgreg(uint8_t n);
|
|
|
|
|
-enum Result bc260y_set_cgreg_sync(uint8_t n); // 同步
|
|
|
|
|
|
|
+enum Result bc260y_set_cereg(uint8_t n);
|
|
|
|
|
+enum Result bc260y_set_cereg_sync(uint8_t n); // 同步
|
|
|
/**
|
|
/**
|
|
|
* 查询ps域网络注册状态
|
|
* 查询ps域网络注册状态
|
|
|
* 输入<<
|
|
* 输入<<
|
|
@@ -83,8 +84,8 @@ enum Result bc260y_set_cgreg_sync(uint8_t n); // 同
|
|
|
* ci 基站小区ID。用于基站定位,4个字节。
|
|
* ci 基站小区ID。用于基站定位,4个字节。
|
|
|
*
|
|
*
|
|
|
**/
|
|
**/
|
|
|
-enum Result bc260y_query_cgreg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci);
|
|
|
|
|
-enum Result bc260y_query_cgreg_sync(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci); // 同步
|
|
|
|
|
|
|
+enum Result bc260y_query_cereg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci);
|
|
|
|
|
+enum Result bc260y_query_cereg_sync(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci); // 同步
|
|
|
/**
|
|
/**
|
|
|
* 查询socket服务状态
|
|
* 查询socket服务状态
|
|
|
* 输入<<
|
|
* 输入<<
|
|
@@ -227,6 +228,10 @@ static char AT_CMD[256];
|
|
|
// EC800M提供的一些方法
|
|
// EC800M提供的一些方法
|
|
|
struct BC260Y_Struct bc260y =
|
|
struct BC260Y_Struct bc260y =
|
|
|
{
|
|
{
|
|
|
|
|
+ .timer = {
|
|
|
|
|
+ .time = 0,
|
|
|
|
|
+ .flag = 0
|
|
|
|
|
+ },
|
|
|
.reset = bc260y_reset,
|
|
.reset = bc260y_reset,
|
|
|
.exit_sleep = bc260y_exit_sleep,
|
|
.exit_sleep = bc260y_exit_sleep,
|
|
|
.exit_sleep_sync = bc260y_exit_sleep_sync,
|
|
.exit_sleep_sync = bc260y_exit_sleep_sync,
|
|
@@ -235,12 +240,14 @@ struct BC260Y_Struct bc260y =
|
|
|
.query_sleep_sync = bc260y_query_sleep_sync,
|
|
.query_sleep_sync = bc260y_query_sleep_sync,
|
|
|
.set_sleep = bc260y_set_sleep,
|
|
.set_sleep = bc260y_set_sleep,
|
|
|
.set_sleep_sync = bc260y_set_sleep_sync,
|
|
.set_sleep_sync = bc260y_set_sleep_sync,
|
|
|
|
|
+ .query_cfun = bc260y_query_cfun,
|
|
|
|
|
+ .query_cfun_sync = bc260y_query_cfun_sync,
|
|
|
.set_cfun = bc260y_set_cfun,
|
|
.set_cfun = bc260y_set_cfun,
|
|
|
.set_cfun_sync = bc260y_set_cfun_sync,
|
|
.set_cfun_sync = bc260y_set_cfun_sync,
|
|
|
- .set_cgreg = bc260y_set_cgreg,
|
|
|
|
|
- .set_cgreg_sync = bc260y_set_cgreg_sync,
|
|
|
|
|
- .query_cgreg = bc260y_query_cgreg,
|
|
|
|
|
- .query_cgreg_sync = bc260y_query_cgreg_sync,
|
|
|
|
|
|
|
+ .set_cereg = bc260y_set_cereg,
|
|
|
|
|
+ .set_cereg_sync = bc260y_set_cereg_sync,
|
|
|
|
|
+ .query_cereg = bc260y_query_cereg,
|
|
|
|
|
+ .query_cereg_sync = bc260y_query_cereg_sync,
|
|
|
.query_socket_state = bc260y_query_socket_state,
|
|
.query_socket_state = bc260y_query_socket_state,
|
|
|
.query_socket_state_sync = bc260y_query_socket_state_sync,
|
|
.query_socket_state_sync = bc260y_query_socket_state_sync,
|
|
|
.open_socket = bc260y_open_socket,
|
|
.open_socket = bc260y_open_socket,
|
|
@@ -301,13 +308,18 @@ static void setStatus(enum STATUS status)
|
|
|
// 获取定时
|
|
// 获取定时
|
|
|
static uint32_t getTimerMs(void)
|
|
static uint32_t getTimerMs(void)
|
|
|
{
|
|
{
|
|
|
- return bc260y.timer_ms;
|
|
|
|
|
|
|
+ return time_get_delay(&bc260y.timer);
|
|
|
}
|
|
}
|
|
|
-// 设置定时
|
|
|
|
|
-static void setTimerMs(uint32_t time)
|
|
|
|
|
|
|
+// 清除定时
|
|
|
|
|
+static void clearTimer(void)
|
|
|
{
|
|
{
|
|
|
- bc260y.timer_ms = time;
|
|
|
|
|
|
|
+ time_clear(&bc260y.timer);
|
|
|
}
|
|
}
|
|
|
|
|
+// 设置定时
|
|
|
|
|
+//static void setTimerMs(uint32_t time)
|
|
|
|
|
+//{
|
|
|
|
|
+// bc260y.timer_ms = time;
|
|
|
|
|
+//}
|
|
|
// 获取ID
|
|
// 获取ID
|
|
|
static uint8_t getActiveID(void)
|
|
static uint8_t getActiveID(void)
|
|
|
{
|
|
{
|
|
@@ -358,7 +370,7 @@ void bc260y_reset(void)
|
|
|
{
|
|
{
|
|
|
setStatus(Status_None); // 重置状态
|
|
setStatus(Status_None); // 重置状态
|
|
|
setActiveID(0); // 重置ID
|
|
setActiveID(0); // 重置ID
|
|
|
- setTimerMs(0); // 重置计时
|
|
|
|
|
|
|
+ clearTimer(); // 重置计时
|
|
|
AT_Clear(); // 清除AT指令
|
|
AT_Clear(); // 清除AT指令
|
|
|
}
|
|
}
|
|
|
// 发送指令并改变状态
|
|
// 发送指令并改变状态
|
|
@@ -369,7 +381,7 @@ enum Result send_at(char * cmd, uint8_t activeID)
|
|
|
{
|
|
{
|
|
|
setActiveID(activeID); // 活动ID
|
|
setActiveID(activeID); // 活动ID
|
|
|
setStatus(Status_Sending); // 设置已发送
|
|
setStatus(Status_Sending); // 设置已发送
|
|
|
- setTimerMs(0); // 重置计时
|
|
|
|
|
|
|
+ clearTimer(); // 重置计时
|
|
|
return Result_None; // 未知结果
|
|
return Result_None; // 未知结果
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
@@ -389,7 +401,7 @@ enum Result bc260y_exit_sleep(void)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT\r\r\n"); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT\r\n"); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -448,7 +460,7 @@ enum Result bc260y_exit_sleep_sync()
|
|
|
// 进入休眠
|
|
// 进入休眠
|
|
|
void bc260y_enter_sleep(void)
|
|
void bc260y_enter_sleep(void)
|
|
|
{
|
|
{
|
|
|
- GPIO_ResetBits(WAKE_GPIO, WAKE_GPIO_Pin); // nb拉低io口,进入睡眠
|
|
|
|
|
|
|
+// GPIO_ResetBits(WAKE_GPIO, WAKE_GPIO_Pin); // nb拉低io口,进入睡眠
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -470,7 +482,7 @@ enum Result bc260y_query_sleep(uint8_t * n)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QSCLK?\r\r\n"); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QSCLK?\r\n"); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -558,7 +570,7 @@ enum Result bc260y_set_sleep(uint8_t n)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QSCLK=%d\r\r\n", n); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QSCLK=%d\r\n", n); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -611,6 +623,91 @@ enum Result bc260y_set_sleep_sync(uint8_t n)
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+* 查询功能模式
|
|
|
|
|
+* 输入<<
|
|
|
|
|
+*
|
|
|
|
|
+* 输出>>
|
|
|
|
|
+* n 功能模式。0 最小功能模式,默认;1 全功能模式。
|
|
|
|
|
+*
|
|
|
|
|
+**/
|
|
|
|
|
+enum Result bc260y_query_cfun(uint8_t * n)
|
|
|
|
|
+{
|
|
|
|
|
+ enum Result result = Result_None;
|
|
|
|
|
+ int activeID = 100, time = 500; // 活动ID, 超时时间
|
|
|
|
|
+ if(!verifyActiveID(activeID)){ return Result_Failed; } // 校验ID
|
|
|
|
|
+ // 判断状态
|
|
|
|
|
+ if(getStatus() == Status_None) // 空闲状态
|
|
|
|
|
+ {
|
|
|
|
|
+ sprintf(AT_CMD, "AT+CFUN?\r\n"); // 拼接AT指令
|
|
|
|
|
+ result = send_at(AT_CMD, activeID);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
|
|
|
+ {
|
|
|
|
|
+ Log_Printf_Debug("返回结果过期1,请重置状态\r\n"); // 打印日志
|
|
|
|
|
+
|
|
|
|
|
+ result = failed(); // 失败
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(getTimerMs() > time) // 正在发送状态。判断超时
|
|
|
|
|
+ {
|
|
|
|
|
+ Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
|
|
|
|
|
+ result = overtime(); // 超时
|
|
|
|
|
+ Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
|
|
|
+ }
|
|
|
|
|
+ if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
|
|
|
|
|
+ {
|
|
|
|
|
+ // 发送日志
|
|
|
|
|
+ Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
|
|
|
|
|
+ Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
|
|
|
+
|
|
|
|
|
+ // 处理返回结果
|
|
|
|
|
+ char * saveptr = NULL;
|
|
|
|
|
+ char * split = "\r\n";
|
|
|
|
|
+ // 第一行
|
|
|
|
|
+ strtok_r((char * )AT_result(), split, &saveptr);
|
|
|
|
|
+ // 第二行
|
|
|
|
|
+ char * Line2 = strtok_r(NULL, split, &saveptr);
|
|
|
|
|
+ // 拆解第二行
|
|
|
|
|
+ char * saveptr_inner = NULL;
|
|
|
|
|
+ char * split_inner = ": ";
|
|
|
|
|
+ strtok_r(Line2, split_inner, &saveptr_inner);
|
|
|
|
|
+ // 获取mode
|
|
|
|
|
+ * n = atoi(strtok_r(NULL, split_inner, &saveptr_inner));
|
|
|
|
|
+
|
|
|
|
|
+ result = success(); // 成功
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
|
|
|
|
|
+ {
|
|
|
|
|
+ // 发送日志
|
|
|
|
|
+ Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
|
|
|
|
|
+ Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
|
|
|
+
|
|
|
|
|
+ result = failed(); // 失败
|
|
|
|
|
+ }
|
|
|
|
|
+ return result;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+enum Result bc260y_query_cfun_sync(uint8_t * n)
|
|
|
|
|
+{
|
|
|
|
|
+ enum Result result = Result_None;
|
|
|
|
|
+ while(1)
|
|
|
|
|
+ {
|
|
|
|
|
+ result = bc260y_query_cfun(n);
|
|
|
|
|
+ if(result != Result_None)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 重置
|
|
|
|
|
+ bc260y.reset();
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return result;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 设置功能模式
|
|
* 设置功能模式
|
|
|
* fun 0 最小功能模式;1 全功能模式。
|
|
* fun 0 最小功能模式;1 全功能模式。
|
|
@@ -621,7 +718,7 @@ enum Result bc260y_set_cfun(uint8_t fun)
|
|
|
int activeID = 4, time; // 活动ID, 超时时间
|
|
int activeID = 4, time; // 活动ID, 超时时间
|
|
|
// 校验参数
|
|
// 校验参数
|
|
|
if(fun == 0){ time = 3000; }
|
|
if(fun == 0){ time = 3000; }
|
|
|
- else if(fun == 1){ time = 8000; }
|
|
|
|
|
|
|
+ else if(fun == 1){ time = 7000; }
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
Log_Printf_Debug("set_cfun params error!\r\n");
|
|
Log_Printf_Debug("set_cfun params error!\r\n");
|
|
@@ -632,7 +729,7 @@ enum Result bc260y_set_cfun(uint8_t fun)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+CFUN=%d\r\r\n", fun); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+CFUN=%d\r\n", fun); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -647,7 +744,19 @@ enum Result bc260y_set_cfun(uint8_t fun)
|
|
|
Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
|
result = overtime(); // 超时
|
|
result = overtime(); // 超时
|
|
|
}
|
|
}
|
|
|
- else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
|
|
|
|
|
|
|
+ else if(fun == 1 && strstr((char * )AT_result(), "+IP:") != NULL) // 查询是否返回
|
|
|
|
|
+ {
|
|
|
|
|
+ // 防止接收不完整
|
|
|
|
|
+ if(AT_wait_time() > 10) // 过10ms之后再取数据,避免数据截断。
|
|
|
|
|
+ {
|
|
|
|
|
+ // 发送日志
|
|
|
|
|
+ Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
|
|
|
|
|
+ Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
|
|
|
+
|
|
|
|
|
+ result = success(); // 成功
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(fun == 0 && strstr((char * )AT_result(), "+CPIN: NOT READY") != NULL) // 查询是否返回
|
|
|
{
|
|
{
|
|
|
// 防止接收不完整
|
|
// 防止接收不完整
|
|
|
if(AT_wait_time() > 10) // 过10ms之后再取数据,避免数据截断。
|
|
if(AT_wait_time() > 10) // 过10ms之后再取数据,避免数据截断。
|
|
@@ -697,7 +806,7 @@ enum Result bc260y_set_cfun_sync(uint8_t fun)
|
|
|
* 设置ps域网络注册状态
|
|
* 设置ps域网络注册状态
|
|
|
* n 0 禁止上报网络注册;1 允许上报网络注册;2 允许上报网络注册和位置信息
|
|
* n 0 禁止上报网络注册;1 允许上报网络注册;2 允许上报网络注册和位置信息
|
|
|
**/
|
|
**/
|
|
|
-enum Result bc260y_set_cgreg(uint8_t n)
|
|
|
|
|
|
|
+enum Result bc260y_set_cereg(uint8_t n)
|
|
|
{
|
|
{
|
|
|
enum Result result = Result_None;
|
|
enum Result result = Result_None;
|
|
|
int activeID = 6, time = 500; // 活动ID, 超时时间
|
|
int activeID = 6, time = 500; // 活动ID, 超时时间
|
|
@@ -712,7 +821,7 @@ enum Result bc260y_set_cgreg(uint8_t n)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+CEREG=%d\r\r\n", n); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+CEREG=%d\r\n", n); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -752,12 +861,12 @@ enum Result bc260y_set_cgreg(uint8_t n)
|
|
|
* 输出>>
|
|
* 输出>>
|
|
|
*
|
|
*
|
|
|
**/
|
|
**/
|
|
|
-enum Result bc260y_set_cgreg_sync(uint8_t n)
|
|
|
|
|
|
|
+enum Result bc260y_set_cereg_sync(uint8_t n)
|
|
|
{
|
|
{
|
|
|
enum Result result = Result_None;
|
|
enum Result result = Result_None;
|
|
|
while(1)
|
|
while(1)
|
|
|
{
|
|
{
|
|
|
- result = bc260y_set_cgreg(n);
|
|
|
|
|
|
|
+ result = bc260y_set_cereg(n);
|
|
|
if(result != Result_None)
|
|
if(result != Result_None)
|
|
|
{
|
|
{
|
|
|
// 重置
|
|
// 重置
|
|
@@ -780,7 +889,7 @@ enum Result bc260y_set_cgreg_sync(uint8_t n)
|
|
|
* ci 基站小区ID。用于基站定位,4个字节。
|
|
* ci 基站小区ID。用于基站定位,4个字节。
|
|
|
*
|
|
*
|
|
|
**/
|
|
**/
|
|
|
-enum Result bc260y_query_cgreg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci)
|
|
|
|
|
|
|
+enum Result bc260y_query_cereg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci)
|
|
|
{
|
|
{
|
|
|
enum Result result = Result_None;
|
|
enum Result result = Result_None;
|
|
|
int activeID = 9, time = 500; // 活动ID, 超时时间
|
|
int activeID = 9, time = 500; // 活动ID, 超时时间
|
|
@@ -789,7 +898,7 @@ enum Result bc260y_query_cgreg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+CEREG?\r\r\n"); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+CEREG?\r\n"); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -814,10 +923,12 @@ enum Result bc260y_query_cgreg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint
|
|
|
char * saveptr = NULL;
|
|
char * saveptr = NULL;
|
|
|
char * split = "\r\n";
|
|
char * split = "\r\n";
|
|
|
// 第一行
|
|
// 第一行
|
|
|
- char * Line1 = strtok_r((char * )AT_result(), split, &saveptr);
|
|
|
|
|
|
|
+ strtok_r((char * )AT_result(), split, &saveptr);
|
|
|
|
|
+ // 第二行
|
|
|
|
|
+ char * Line2 = strtok_r(NULL, split, &saveptr);
|
|
|
char * saveptr_inner = NULL;
|
|
char * saveptr_inner = NULL;
|
|
|
char * split_inner = ": ,\"";
|
|
char * split_inner = ": ,\"";
|
|
|
- strtok_r(Line1, split_inner, &saveptr_inner);
|
|
|
|
|
|
|
+ strtok_r(Line2, split_inner, &saveptr_inner);
|
|
|
* n = atoi(strtok_r(NULL, split_inner, &saveptr_inner));
|
|
* n = atoi(strtok_r(NULL, split_inner, &saveptr_inner));
|
|
|
* stat = atoi(strtok_r(NULL, split_inner, &saveptr_inner));
|
|
* stat = atoi(strtok_r(NULL, split_inner, &saveptr_inner));
|
|
|
|
|
|
|
@@ -851,12 +962,12 @@ enum Result bc260y_query_cgreg(uint8_t * n, uint8_t * stat, uint16_t * lac, uint
|
|
|
* ci 基站小区ID。用于基站定位,4个字节。
|
|
* ci 基站小区ID。用于基站定位,4个字节。
|
|
|
*
|
|
*
|
|
|
**/
|
|
**/
|
|
|
-enum Result bc260y_query_cgreg_sync(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci)
|
|
|
|
|
|
|
+enum Result bc260y_query_cereg_sync(uint8_t * n, uint8_t * stat, uint16_t * lac, uint32_t * ci)
|
|
|
{
|
|
{
|
|
|
enum Result result = Result_None;
|
|
enum Result result = Result_None;
|
|
|
while(1)
|
|
while(1)
|
|
|
{
|
|
{
|
|
|
- result = bc260y_query_cgreg(n, stat, lac, ci);
|
|
|
|
|
|
|
+ result = bc260y_query_cereg(n, stat, lac, ci);
|
|
|
if(result != Result_None)
|
|
if(result != Result_None)
|
|
|
{
|
|
{
|
|
|
// 重置
|
|
// 重置
|
|
@@ -884,7 +995,7 @@ enum Result bc260y_query_socket_state(uint8_t connectID, uint8_t * state)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QISTATE=1,%d\r\r\n", connectID); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QISTATE=1,%d\r\n", connectID); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -988,7 +1099,7 @@ enum Result bc260y_open_socket(uint8_t connectID, char * service_type, char * IP
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QIOPEN=0,%d,\"%s\",\"%s\",%d,%d,%d\r\r\n", connectID, service_type, IP_address, remote_port, 0, access_mode); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QIOPEN=0,%d,\"%s\",\"%s\",%d,%d,%d\r\n", connectID, service_type, IP_address, remote_port, 0, access_mode); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -1093,7 +1204,7 @@ enum Result bc260y_close_socket(uint8_t connectID)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QICLOSE=%d\r\r\n", connectID); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QICLOSE=%d\r\n", connectID); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -1165,7 +1276,7 @@ enum Result bc260y_set_qisde(uint8_t echo)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "ATE%d\r\r\n", echo); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "ATE%d\r\n", echo); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -1233,8 +1344,6 @@ enum Result bc260y_set_qisde_sync(uint8_t echo)
|
|
|
enum Result bc260y_send(uint8_t connectID, uint8_t * data, uint16_t data_length)
|
|
enum Result bc260y_send(uint8_t connectID, uint8_t * data, uint16_t data_length)
|
|
|
{
|
|
{
|
|
|
enum Result result = Result_None;
|
|
enum Result result = Result_None;
|
|
|
-// char hexData[1024] = {0};
|
|
|
|
|
-
|
|
|
|
|
int activeID = 49, time = 10000; // 活动ID, 超时时间
|
|
int activeID = 49, time = 10000; // 活动ID, 超时时间
|
|
|
// 校验ID
|
|
// 校验ID
|
|
|
if(!verifyActiveID(activeID)){ return Result_Failed; }
|
|
if(!verifyActiveID(activeID)){ return Result_Failed; }
|
|
@@ -1242,11 +1351,8 @@ enum Result bc260y_send(uint8_t connectID, uint8_t * data, uint16_t data_length)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- memset(hexData,0, sizeof(hexData));
|
|
|
|
|
- byteToHexStr(data,hexData, data_length);//nb需要转16进制
|
|
|
|
|
- sprintf(AT_CMD, "AT+QISEND=%d,%d,%s\r\r\n", connectID, data_length,hexData); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QISEND=%d,%d\r\n", connectID, data_length); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
|
{
|
|
{
|
|
@@ -1257,7 +1363,20 @@ enum Result bc260y_send(uint8_t connectID, uint8_t * data, uint16_t data_length)
|
|
|
{
|
|
{
|
|
|
Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
|
|
Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
|
|
|
result = overtime(); // 超时
|
|
result = overtime(); // 超时
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(strstr((char * )AT_result(), ">") != NULL) // 有响应
|
|
|
|
|
+ {
|
|
|
|
|
+ // 发送日志
|
|
|
|
|
+ Log_Printf_Debug("AT6返回: %d\r\n", AT_result_length());
|
|
|
|
|
+ Log_SendArray_Debug(AT_result(), AT_result_length());
|
|
|
|
|
|
|
|
|
|
+// Log_Printf_Debug("coap:\r\n");
|
|
|
|
|
+// Log_SendHex(data, data_length);
|
|
|
|
|
+// Log_Printf_Debug("\r\n");
|
|
|
|
|
+ // 发送数据
|
|
|
|
|
+ send_data(data, data_length);
|
|
|
|
|
+ // 清理一下AT返回结果缓存
|
|
|
|
|
+ AT_Clear_Result();
|
|
|
}
|
|
}
|
|
|
else if(strstr((char * )AT_result(), "SEND OK\r\n") != NULL) // 查询是否返回
|
|
else if(strstr((char * )AT_result(), "SEND OK\r\n") != NULL) // 查询是否返回
|
|
|
{
|
|
{
|
|
@@ -1292,23 +1411,23 @@ enum Result bc260y_send(uint8_t connectID, uint8_t * data, uint16_t data_length)
|
|
|
* connectID Socket ID。范围1-11。
|
|
* connectID Socket ID。范围1-11。
|
|
|
* send_length 发送长度。
|
|
* send_length 发送长度。
|
|
|
* data 待发送的数据。
|
|
* data 待发送的数据。
|
|
|
-*rai 发送模式,0发送不释放RRC,1发送立即释放RRC,发送返回释放RRC
|
|
|
|
|
|
|
+*rai 发送模式,0发送不释放RRC,1发送立即释放RRC,2发送返回释放RRC
|
|
|
* activeID 49
|
|
* activeID 49
|
|
|
**/
|
|
**/
|
|
|
enum Result bc260y_send_rai(uint8_t connectID, uint8_t * data, uint16_t data_length,uint8_t rai)
|
|
enum Result bc260y_send_rai(uint8_t connectID, uint8_t * data, uint16_t data_length,uint8_t rai)
|
|
|
{
|
|
{
|
|
|
enum Result result = Result_None;
|
|
enum Result result = Result_None;
|
|
|
|
|
|
|
|
- int activeID = 49, time = 10000; // 活动ID, 超时时间
|
|
|
|
|
|
|
+ int activeID = 50, time = 10000; // 活动ID, 超时时间
|
|
|
// 校验ID
|
|
// 校验ID
|
|
|
if(!verifyActiveID(activeID)){ return Result_Failed; }
|
|
if(!verifyActiveID(activeID)){ return Result_Failed; }
|
|
|
|
|
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- memset(hexData,0, sizeof(hexData));
|
|
|
|
|
- byteToHexStr(data,hexData, data_length);//nb需要转16进制
|
|
|
|
|
- sprintf(AT_CMD, "AT+QISEND=%d,%d,%s,%d\r\r\n", connectID, data_length,hexData,rai); // 拼接AT指令
|
|
|
|
|
|
|
+// memset(hexData,0, sizeof(hexData));
|
|
|
|
|
+// byteToHexStr(data,hexData, data_length);//nb需要转16进制
|
|
|
|
|
+// sprintf(AT_CMD, "AT+QISEND=%d,%d,%s,%d\r\n", connectID, data_length,hexData,rai); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -1413,7 +1532,7 @@ enum Result bc260y_recv(uint8_t connectID, uint8_t * data, uint16_t * data_lengt
|
|
|
char * split = "\r";//删除\n,这个会改变解析的值
|
|
char * split = "\r";//删除\n,这个会改变解析的值
|
|
|
char * Line1 = strtok_r((char * )AT_result(), split, &saveptr);
|
|
char * Line1 = strtok_r((char * )AT_result(), split, &saveptr);
|
|
|
uint8_t Line1_Len = strlen(Line1);
|
|
uint8_t Line1_Len = strlen(Line1);
|
|
|
- Log_Printf_Debug("Line1(%d): %s\r\n",Line1_Len ,Line1);
|
|
|
|
|
|
|
+// Log_Printf_Debug("Line1(%d): %s\r\n",Line1_Len ,Line1);
|
|
|
|
|
|
|
|
// 分割Line1,获取报文长度
|
|
// 分割Line1,获取报文长度
|
|
|
char * saveptr_inner = NULL;
|
|
char * saveptr_inner = NULL;
|
|
@@ -1533,7 +1652,7 @@ enum Result bc260y_power_down(uint8_t n)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QPOWD=%d\r\r\n", n); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QPOWD=%d\r\n", n); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -1630,8 +1749,8 @@ enum Result bc260y_qeng_servingcell(int * RSRP, int * RSRQ, int * RSSI, int * SI
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- //sprintf(AT_CMD, "AT+QENG=\"servingcell\"\r\r\n"); // 拼接AT指令
|
|
|
|
|
- sprintf(AT_CMD, "AT+QENG=0\r\r\n"); // 拼接AT指令
|
|
|
|
|
|
|
+ //sprintf(AT_CMD, "AT+QENG=\"servingcell\"\r\n"); // 拼接AT指令
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QENG=0\r\n"); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
@@ -1716,7 +1835,7 @@ enum Result bc260y_query_qccid(char * iccid)
|
|
|
// 判断状态
|
|
// 判断状态
|
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
if(getStatus() == Status_None) // 空闲状态
|
|
|
{
|
|
{
|
|
|
- sprintf(AT_CMD, "AT+QCCID\r\r\n"); // 拼接AT指令
|
|
|
|
|
|
|
+ sprintf(AT_CMD, "AT+QCCID\r\n"); // 拼接AT指令
|
|
|
result = send_at(AT_CMD, activeID);
|
|
result = send_at(AT_CMD, activeID);
|
|
|
}
|
|
}
|
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|
|
else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
|