From 49259b08a323e9925e7509e0509b30178b52a874 Mon Sep 17 00:00:00 2001 From: xuyanghang Date: Tue, 9 Jan 2024 14:50:37 +0800 Subject: [PATCH] 4G module EC200A TCP connection --- .../Framework/connection/4g/adapter_4g.c | 4 +- .../Framework/connection/4g/ec200a/ec200a.c | 36 +++++++++------- .../connection/4g/ec200a/ec200a_mqtt.c | 42 +++++++++++++++++++ 3 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 APP_Framework/Framework/connection/4g/ec200a/ec200a_mqtt.c diff --git a/APP_Framework/Framework/connection/4g/adapter_4g.c b/APP_Framework/Framework/connection/4g/adapter_4g.c index 8a27a01f5..d3a6085d5 100644 --- a/APP_Framework/Framework/connection/4g/adapter_4g.c +++ b/APP_Framework/Framework/connection/4g/adapter_4g.c @@ -128,8 +128,8 @@ int Adapter4GTest(void) #ifdef ADAPTER_EC200A /* Using Public TCP server to test 4G Socket connection */ - uint8 server_addr[64] = "120.76.100.197"; - uint8 server_port[64] = "10002"; + uint8 server_addr[64] = "xyheqmx.e3.luyouxia.net"; + uint8 server_port[64] = "13333"; adapter->socket.socket_id = 0; diff --git a/APP_Framework/Framework/connection/4g/ec200a/ec200a.c b/APP_Framework/Framework/connection/4g/ec200a/ec200a.c index 05141bced..38def6ddf 100644 --- a/APP_Framework/Framework/connection/4g/ec200a/ec200a.c +++ b/APP_Framework/Framework/connection/4g/ec200a/ec200a.c @@ -24,12 +24,13 @@ #define EC200A_AT_MODE_CMD "+++" #define EC200A_GET_QCCID_CMD "AT+QCCID\r\n" #define EC200A_GET_CPIN_CMD "AT+CPIN?\r\n" -#define EC200A_GET_CEREG_CMD "AT+CEREG?\r\n" -#define EC200A_OPEN_SOCKET_CMD "AT+QIOPEN=1,%u" -#define EC200A_CLOSE_SOCKET_CMD "AT+QICLOSE=%u\r\n" +#define EC200A_GET_CREG_CMD "AT+CREG?\r\n" +#define EC200A_CFG_TCP_CMD "AT+QICSGP" #define EC200A_ACTIVE_PDP_CMD "AT+QIACT=1\r\n" #define EC200A_DEACTIVE_PDP_CMD "AT+QIDEACT=1\r\n" -#define EC200A_CFG_TCP_CMD "AT+QICSGP" +#define EC200A_OPEN_SOCKET_CMD "AT+QIOPEN=1,%u" +#define EC200A_CLOSE_SOCKET_CMD "AT+QICLOSE=%u\r\n" +#define EC200A_CLOSE "AT+QPOWD" #define EC200A_OK_REPLY "OK" #define EC200A_READY_REPLY "READY" @@ -60,12 +61,12 @@ static void Ec200aPowerSet(void) struct PinStat pin_stat; pin_stat.pin = ADAPTER_EC200A_PWRKEY; - pin_stat.val = GPIO_HIGH; + pin_stat.val = GPIO_LOW; //put power key at low-level state PrivWrite(pin_fd, &pin_stat, 1); - PrivTaskDelay(600); //at least 500ms + PrivTaskDelay(2500); //wait at least 2s - pin_stat.val = GPIO_LOW; + pin_stat.val = GPIO_HIGH; //put power key at high-level state PrivWrite(pin_fd, &pin_stat, 1); PrivClose(pin_fd); @@ -133,11 +134,12 @@ static int Ec200aClose(struct Adapter *adapter) } out: - /*step4: close ec200a serial port*/ - PrivClose(adapter->fd); + /*step4: power down ec200a*/ + ret = AtCmdConfigAndCheck(adapter->agent, EC200A_CLOSE, EC200A_OK_REPLY); + PrivTaskDelay(12500); //wait at least 12s - /*step5: power down ec200a*/ - Ec200aPowerSet(); + /*step5: close ec200a serial port*/ + PrivClose(adapter->fd); return ret; } @@ -196,7 +198,9 @@ static int Ec200aConnect(struct Adapter *adapter, enum NetRoleType net_role, con AtSetReplyEndChar(adapter->agent, 0x4F, 0x4B); /*step1: serial write "+++", quit transparent mode*/ + PrivTaskDelay(1500); //before +++ command, wait at least 1s ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "+++"); + PrivTaskDelay(1500); //after +++ command, wait at least 1s /*step2: serial write "AT+CCID", get SIM ID*/ for(try = 0; try < TRY_TIMES; try++){ @@ -221,8 +225,10 @@ static int Ec200aConnect(struct Adapter *adapter, enum NetRoleType net_role, con } /*step4: serial write "AT+CREG?", check whether registered to GSM net*/ + PrivTaskDelay(1000); //before CREG command, wait 1s + for(try = 0; try < TRY_TIMES; try++){ - ret = AtCmdConfigAndCheck(adapter->agent, EC200A_GET_CEREG_CMD, EC200A_CREG_REPLY); + ret = AtCmdConfigAndCheck(adapter->agent, EC200A_GET_CREG_CMD, EC200A_CREG_REPLY); if (ret == 0) { break; } @@ -312,7 +318,7 @@ static int Ec200aConnect(struct Adapter *adapter, enum NetRoleType net_role, con out: ADAPTER_DEBUG("Ec200a connect TCP failed. Power down\n"); - Ec200aPowerSet(); + ret = AtCmdConfigAndCheck(adapter->agent, EC200A_CLOSE, EC200A_OK_REPLY); return -1; } @@ -345,7 +351,9 @@ static int Ec200aDisconnect(struct Adapter *adapter) AtSetReplyEndChar(adapter->agent, 0x4F, 0x4B); /*step1: serial write "+++", quit transparent mode*/ + PrivTaskDelay(1500); //before +++ command, wait at least 1s ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "+++"); + PrivTaskDelay(1500); //after +++ command, wait at least 1s /*step2: serial write "AT+QICLOSE", close socket connect before open socket*/ memset(ec200a_cmd, 0, sizeof(ec200a_cmd)); @@ -361,7 +369,7 @@ static int Ec200aDisconnect(struct Adapter *adapter) out: ADAPTER_DEBUG("Ec200a disconnect TCP failed. Power down\n"); - Ec200aPowerSet(); + ret = AtCmdConfigAndCheck(adapter->agent, EC200A_CLOSE, EC200A_OK_REPLY); return -1; } diff --git a/APP_Framework/Framework/connection/4g/ec200a/ec200a_mqtt.c b/APP_Framework/Framework/connection/4g/ec200a/ec200a_mqtt.c new file mode 100644 index 000000000..5f5a42e8e --- /dev/null +++ b/APP_Framework/Framework/connection/4g/ec200a/ec200a_mqtt.c @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file ec200a.c + * @brief Implement the connection 4G adapter function, using EC200A device + * @version 3.0 + * @author AIIT XUOS Lab + * @date 2024.1.5 + */ + + +static int Ec200aMqttOpen() { + +} + + +static int Ec200aMqttClose() { + +} + +static int Ec200aMqttConnect() { + +} + +static int Ec200aMqttSend() { + +} + + +static int Ec200aMqttRecv() { + +} \ No newline at end of file