|
|
@@ -32,9 +32,8 @@
|
|
|
|
|
|
|
|
|
//#define USE_CELL
|
|
|
+//#define GNSS_ENABLE //EC200N-CN, 不支持gnss
|
|
|
|
|
|
-
|
|
|
-//EC200N-A cellular module
|
|
|
#define RETRY_TIMES 3
|
|
|
#define BUF_LEN 2000
|
|
|
#define AT_PORT "/dev/ttyUSB1"
|
|
|
@@ -58,6 +57,7 @@
|
|
|
#define MQTT_CHUNCK_SIZE 1500
|
|
|
|
|
|
|
|
|
+
|
|
|
enum {
|
|
|
AT_OK=0,
|
|
|
AT_ERR,
|
|
|
@@ -318,7 +318,7 @@ static at_cmd_t all_cmd[AT_CMD_MAX]={
|
|
|
{"AT+QISENDEX", "OK", "ERROR", 300}, //发送16进制字符串数据
|
|
|
{"AT+QISWTMD", "OK", "ERROR", 300}, //切换数据访问模式
|
|
|
{"AT+QNTP", "OK", "ERROR", 300}, //进行远程服务器Ping操作
|
|
|
- {"AT+QPING", "OK", "ERROR", 300}, //使用NTP服务器同步本地时间
|
|
|
+ {"AT+QPING", "+QPING", "ERROR", 3000}, //使用NTP服务器同步本地时间
|
|
|
{"AT+QIDNSCFG", "OK", "ERROR", 300}, //配置DNS服务器地址
|
|
|
{"AT+QIDNSGIP", "OK", "ERROR", 300}, //用域名获取IP地址
|
|
|
{"AT+QISDE", "OK", "ERROR", 300}, //控制是否回显AT+QISEND要发送的
|
|
|
@@ -360,6 +360,25 @@ static at_cmd_t all_cmd[AT_CMD_MAX]={
|
|
|
{"AT+CCLK", "OK", "ERROR", 300}, //实时时钟
|
|
|
{"AT+QSCLK", "OK", "ERROR", 300}, //禁用/启用睡眠模式
|
|
|
};
|
|
|
+at_para_t init_para[]={
|
|
|
+ {AT_CMD_AT, ""},
|
|
|
+ {AT_CMD_ATE, "0"},
|
|
|
+ {AT_CMD_CPIN, "?"},
|
|
|
+ {AT_CMD_CREG, "?"},
|
|
|
+ //{AT_CMD_QIDEACT, "="CONTEXT_ID},
|
|
|
+ {AT_CMD_QIACT, "="CONTEXT_ID},
|
|
|
+ {AT_CMD_CGDCONT, "="CONTEXT_ID",\"IPV4V6\",\"cmnet\""},
|
|
|
+ {AT_CMD_QCFG, "=\"usbnet\",3"}, //set module to rndis mode
|
|
|
+ {AT_CMD_CMGF, "=1"},
|
|
|
+ {AT_CMD_CSCS, "=GSM"},
|
|
|
+
|
|
|
+#ifdef GNSS_ENABLE
|
|
|
+ {AT_CMD_QGPS, "=1"},
|
|
|
+ {AT_CMD_QGPSCFG, "=\"gnssconfig\",5"},
|
|
|
+ {AT_CMD_QGPSCFG, "=\"gpsnmeatype\",1"},
|
|
|
+#endif
|
|
|
+ {-1, ""},
|
|
|
+ };
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
static at_cmd_t* data_of(int cmd)
|
|
|
@@ -624,32 +643,25 @@ static int cell_reset(cell_handle_t *h)
|
|
|
static int cell_init(cell_handle_t *h)
|
|
|
{
|
|
|
int i,r;
|
|
|
- at_para_t paras[]={
|
|
|
- {AT_CMD_AT, ""},
|
|
|
- {AT_CMD_ATE, "0"},
|
|
|
- {AT_CMD_CPIN, "?"},
|
|
|
- {AT_CMD_CREG, "?"},
|
|
|
- {AT_CMD_CGACT, "?"},
|
|
|
- {AT_CMD_CGDCONT, "=1,\"IPV4V6\",\"cmnet\""},
|
|
|
- {AT_CMD_QCFG, "=\"usbnet\",1"}, //set module to ecm mode
|
|
|
- {AT_CMD_CMGF, "=1"},
|
|
|
- {AT_CMD_CSCS, "=GSM"},
|
|
|
- //{AT_CMD_QGPS, "=1"},
|
|
|
- //{AT_CMD_QGPSCFG, "=\"gnssconfig\",5"},
|
|
|
- //{AT_CMD_QGPSCFG, "=\"gpsnmeatype\",1"},
|
|
|
- {-1, ""},
|
|
|
- };
|
|
|
+ at_para_t *p=init_para;
|
|
|
|
|
|
if(h->stat==AT_STAT_INITED) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
for(i=0;; i++) {
|
|
|
- if(paras[i].cmd==-1) {
|
|
|
+ if(p[i].cmd==-1) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- r = send_cmd(h, paras[i].cmd, paras[i].para, NULL, 0);
|
|
|
+ if(p[i].cmd==AT_CMD_CGDCONT) {
|
|
|
+ sprintf(p[i].para, "=%s,\"IPV4V6\",\"%s\"", CONTEXT_ID, h->pcell->apn);
|
|
|
+ }
|
|
|
+ else if(p[i].cmd==AT_CMD_QICSGP) {
|
|
|
+ sprintf(p[i].para, "=%s,3,\"%s\"", CONTEXT_ID, h->pcell->apn);
|
|
|
+ }
|
|
|
+
|
|
|
+ r = send_cmd(h, p[i].cmd, p[i].para, NULL, 0);
|
|
|
if(r!=AT_OK) {
|
|
|
break;
|
|
|
}
|
|
|
@@ -657,8 +669,6 @@ static int cell_init(cell_handle_t *h)
|
|
|
|
|
|
if(r==0) {
|
|
|
h->stat = AT_STAT_INITED;
|
|
|
-
|
|
|
- cell_sock_init(h);
|
|
|
cell_get_info(h, &h->all.info);
|
|
|
}
|
|
|
|
|
|
@@ -743,6 +753,7 @@ static int cell_get_gnss(cell_handle_t *h, cell_stat_t *stat)
|
|
|
int r;
|
|
|
char buf[200],utc[32],date[32];
|
|
|
|
|
|
+#ifdef GNSS_ENABLE
|
|
|
if(h->stat==AT_STAT_UNINIT) {
|
|
|
return -1;
|
|
|
}
|
|
|
@@ -757,6 +768,7 @@ static int cell_get_gnss(cell_handle_t *h, cell_stat_t *stat)
|
|
|
return -1;
|
|
|
}
|
|
|
//
|
|
|
+#endif
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -823,41 +835,6 @@ static int cell_get_stat(cell_handle_t *h, cell_stat_t *stat)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static int cell_sock_init(cell_handle_t *h)
|
|
|
-{
|
|
|
- int i,r;
|
|
|
- at_para_t paras[]={
|
|
|
- {AT_CMD_QICSGP, "="CONTEXT_ID},
|
|
|
- {AT_CMD_QIDEACT, "="CONTEXT_ID},
|
|
|
- {AT_CMD_QIACT, "="CONTEXT_ID},
|
|
|
- {-1, ""},
|
|
|
- };
|
|
|
-
|
|
|
- if(h->stat==AT_STAT_UNINIT) {
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- for(i=0;; i++) {
|
|
|
- if(paras[i].cmd==-1) {
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- r = send_cmd(h, paras[i].cmd, paras[i].para, NULL, 0);
|
|
|
- if(r!=AT_OK) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return r?-1:0;
|
|
|
-}
|
|
|
-static int cell_sock_deinit(cell_handle_t *h)
|
|
|
-{
|
|
|
- if(h->stat==AT_STAT_UNINIT) {
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
static int cell_sock_conn(cell_handle_t *h, int sock, char *host, uint16_t port, sock_conn_t *conn)
|
|
|
{
|
|
|
int r;
|
|
|
@@ -1177,9 +1154,6 @@ static void* cellular_thread(void *arg)
|
|
|
if(cnt%5==0) {
|
|
|
cell_get_stat(h, &h->all.stat);
|
|
|
}
|
|
|
-
|
|
|
- //sprintf(rxbuf, "hello %d", cnt);
|
|
|
- //cell_send_sms(h, "15228908007", rxbuf);
|
|
|
}
|
|
|
sleep(1);
|
|
|
}
|
|
|
@@ -1218,6 +1192,7 @@ int cellular_init(void)
|
|
|
h->lck = lock_d_init();
|
|
|
|
|
|
thread_start(THREAD_ID_CELLULAR, cellular_thread, h);
|
|
|
+ while(1) sleep(10);
|
|
|
#endif
|
|
|
|
|
|
return 0;
|
|
|
@@ -1258,7 +1233,7 @@ int cellular_is_connected(void)
|
|
|
cell_handle_t *h=&ceHandle;
|
|
|
|
|
|
#ifdef USE_CELL
|
|
|
- r = cell_sock_connected(h);
|
|
|
+ r = h->all.stat.linked;
|
|
|
#endif
|
|
|
|
|
|
return r;
|