658 lines
28 KiB
C
658 lines
28 KiB
C
|
|
/*==========================================================================================================
|
|
Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
|
|
Quectel Wireless Solutions Proprietary and Confidential.
|
|
===========================================================================================================*/
|
|
|
|
#include <stdio.h>
|
|
#include "ql_uart.h"
|
|
#include "ql_application.h"
|
|
#include "ql_log.h"
|
|
#include "ql_rtos.h"
|
|
|
|
#define WIFI_AT_PORT QL_MAIN_UART_PORT
|
|
#define DATA_QUEUE_SIZE 200
|
|
|
|
typedef enum
|
|
{
|
|
WLAN_DISCONNECTED,
|
|
WLAN_CONNECTED,
|
|
GOT_IP,
|
|
SCAN_NO_AP
|
|
}ql_wifi_sta_status_t;
|
|
|
|
typedef enum
|
|
{
|
|
SOCKET_DISCONNECTED,
|
|
SOCKET_CONNECTED
|
|
}ql_wifi_socket_status_t;
|
|
|
|
typedef enum
|
|
{
|
|
AT_CMD_MODE,
|
|
DATA_MODE
|
|
}ql_wifi_access_mode_t;
|
|
|
|
typedef struct
|
|
{
|
|
int len;
|
|
uint8_t data[DATA_QUEUE_SIZE];
|
|
}ql_wifi_data_queue_t;
|
|
|
|
ql_queue_t ql_wifi_at_queue = NULL;
|
|
ql_queue_t ql_wifi_tcp_queue = NULL;
|
|
ql_queue_t ql_wifi_mqtt_queue = NULL;
|
|
|
|
ql_sem_t ql_wifi_status_semaRef = NULL;
|
|
|
|
ql_wifi_sta_status_t g_ql_wifi_sta_status = WLAN_DISCONNECTED;
|
|
ql_wifi_access_mode_t g_ql_wifi_access_mode = AT_CMD_MODE;
|
|
ql_wifi_socket_status_t g_ql_wifi_tcp_status = SOCKET_DISCONNECTED;
|
|
|
|
static char *mqtt_ca =
|
|
"-----BEGIN CERTIFICATE-----\n\
|
|
MIIEhDCCAuwCCQDuE1BpeAeMwzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMC\n\
|
|
Q04xCzAJBgNVBAgMAkFIMQswCQYDVQQHDAJIRjEQMA4GA1UECgwHUVVFQ1RFTDEL\n\
|
|
MAkGA1UECwwCU1QxFjAUBgNVBAMMDTExMi4zMS44NC4xNjQxIjAgBgkqhkiG9w0B\n\
|
|
CQEWE2VkZGllLnpoYW5nQHF1ZWN0ZWwwIBcNMjIwMTI1MDcyMzI3WhgPMjEyMjAx\n\
|
|
MDEwNzIzMjdaMIGCMQswCQYDVQQGEwJDTjELMAkGA1UECAwCQUgxCzAJBgNVBAcM\n\
|
|
AkhGMRAwDgYDVQQKDAdRVUVDVEVMMQswCQYDVQQLDAJTVDEWMBQGA1UEAwwNMTEy\n\
|
|
LjMxLjg0LjE2NDEiMCAGCSqGSIb3DQEJARYTZWRkaWUuemhhbmdAcXVlY3RlbDCC\n\
|
|
AaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMt3cjY0eLEDqv8Y7FomA+7N\n\
|
|
G5ztAbR7+P/WxjPlodqRDZ5HQORkfAr44gAZcWsKoo4DHTInwr9JBbBnETBMnL8+\n\
|
|
13h1PRp5CfwXKFvjppWYvBZfeTwhWQYbSMKINoS+d1Zl11jg/+ZbSd7Fi0bYq8ip\n\
|
|
Hbt30H+NANQZP1XQdsCf5/kvn+vXiP4EgJc56JQ9L6ALIF2Q6F3G/PTaYItg463N\n\
|
|
lv/S+eRi1VMDSs8Qc+DTlVwlgZZJdSlC8Yjr5pVqoyXm8ENKfSTrdhrLiKSWJTz9\n\
|
|
JUr04E7SJ+CoBAnLYNPHR2y0CFS/15aCa1JbK27ZJ/0cvBvzpWdkcgrDtKIcxNYM\n\
|
|
9QFPpehb1N4pgqi0NPhCkc/BasfmXUaTwM4ghhi4tQRptKMdTN/kdyC+V5a8Hyhb\n\
|
|
Nvw5qeJlLJKpgZ9X3HQzuKstKMkxLNuDIzK9TvO7zLowr+0BetUdllq+fDjXQM0M\n\
|
|
+9P3Xv2VmDwGRkmZ0IjYpDjm+qqGTFVLzzVwEqVD6wIDAQABMA0GCSqGSIb3DQEB\n\
|
|
CwUAA4IBgQAuNVwkBhd5nyWMmV/ESNxy59Sz+5FcesGclKjs4YocgcKbLD2bS+LN\n\
|
|
lKk6zenES7Cq6+l3NMAxxh/QhgHUCThAfREzfPXbmiicrUfaudN4YFivpoFwKIAs\n\
|
|
NczsL9S3FPbzAB4nLDATacc2BK0//aKMOU2t3KLNNomKbzlR+EW3wd0F1GoZ9SY6\n\
|
|
sCQeLa8Wp1KarOmbvgoFL/DAiTSqjjsU/Lq24dOCCctmG+qXRZxQa4npHD4xJwQJ\n\
|
|
qzA0JLu4n+DgoJftm1KpvB0wuzTn6M9+wnk5rv/fGc2t4Zra8B4prEReZZVfy65d\n\
|
|
cb8pBdb20Yrmznj+6DR50X/o/8Qzoyj9XpxtjwF23ql0XPYCI7kB03Ms9euP0btc\n\
|
|
HFacHapm0qBKx+vWy0V2Qf482OWSbewqaRbud44sErNoKqpqm02yN8PpsCywpFUj\n\
|
|
UC5G5DzxzYspMzQv/yidti0scMSKFObseZmNGlRYymCWhXnxmoCFjLpw5RnJSB2+\n\
|
|
cZ/1KFFHHZI=\n\
|
|
-----END CERTIFICATE-----\n";
|
|
|
|
static char *mqtt_cc =
|
|
"-----BEGIN CERTIFICATE-----\n\
|
|
MIIEhDCCAuwCCQDuE1BpeAeMwzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMC\n\
|
|
Q04xCzAJBgNVBAgMAkFIMQswCQYDVQQHDAJIRjEQMA4GA1UECgwHUVVFQ1RFTDEL\n\
|
|
MAkGA1UECwwCU1QxFjAUBgNVBAMMDTExMi4zMS44NC4xNjQxIjAgBgkqhkiG9w0B\n\
|
|
CQEWE2VkZGllLnpoYW5nQHF1ZWN0ZWwwIBcNMjIwMTI1MDcyMzI3WhgPMjEyMjAx\n\
|
|
MDEwNzIzMjdaMIGCMQswCQYDVQQGEwJDTjELMAkGA1UECAwCQUgxCzAJBgNVBAcM\n\
|
|
AkhGMRAwDgYDVQQKDAdRVUVDVEVMMQswCQYDVQQLDAJTVDEWMBQGA1UEAwwNMTEy\n\
|
|
LjMxLjg0LjE2NDEiMCAGCSqGSIb3DQEJARYTZWRkaWUuemhhbmdAcXVlY3RlbDCC\n\
|
|
AaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMt3cjY0eLEDqv8Y7FomA+7N\n\
|
|
G5ztAbR7+P/WxjPlodqRDZ5HQORkfAr44gAZcWsKoo4DHTInwr9JBbBnETBMnL8+\n\
|
|
13h1PRp5CfwXKFvjppWYvBZfeTwhWQYbSMKINoS+d1Zl11jg/+ZbSd7Fi0bYq8ip\n\
|
|
Hbt30H+NANQZP1XQdsCf5/kvn+vXiP4EgJc56JQ9L6ALIF2Q6F3G/PTaYItg463N\n\
|
|
lv/S+eRi1VMDSs8Qc+DTlVwlgZZJdSlC8Yjr5pVqoyXm8ENKfSTrdhrLiKSWJTz9\n\
|
|
JUr04E7SJ+CoBAnLYNPHR2y0CFS/15aCa1JbK27ZJ/0cvBvzpWdkcgrDtKIcxNYM\n\
|
|
9QFPpehb1N4pgqi0NPhCkc/BasfmXUaTwM4ghhi4tQRptKMdTN/kdyC+V5a8Hyhb\n\
|
|
Nvw5qeJlLJKpgZ9X3HQzuKstKMkxLNuDIzK9TvO7zLowr+0BetUdllq+fDjXQM0M\n\
|
|
+9P3Xv2VmDwGRkmZ0IjYpDjm+qqGTFVLzzVwEqVD6wIDAQABMA0GCSqGSIb3DQEB\n\
|
|
CwUAA4IBgQAuNVwkBhd5nyWMmV/ESNxy59Sz+5FcesGclKjs4YocgcKbLD2bS+LN\n\
|
|
lKk6zenES7Cq6+l3NMAxxh/QhgHUCThAfREzfPXbmiicrUfaudN4YFivpoFwKIAs\n\
|
|
NczsL9S3FPbzAB4nLDATacc2BK0//aKMOU2t3KLNNomKbzlR+EW3wd0F1GoZ9SY6\n\
|
|
sCQeLa8Wp1KarOmbvgoFL/DAiTSqjjsU/Lq24dOCCctmG+qXRZxQa4npHD4xJwQJ\n\
|
|
qzA0JLu4n+DgoJftm1KpvB0wuzTn6M9+wnk5rv/fGc2t4Zra8B4prEReZZVfy65d\n\
|
|
cb8pBdb20Yrmznj+6DR50X/o/8Qzoyj9XpxtjwF23ql0XPYCI7kB03Ms9euP0btc\n\
|
|
HFacHapm0qBKx+vWy0V2Qf482OWSbewqaRbud44sErNoKqpqm02yN8PpsCywpFUj\n\
|
|
UC5G5DzxzYspMzQv/yidti0scMSKFObseZmNGlRYymCWhXnxmoCFjLpw5RnJSB2+\n\
|
|
cZ/1KFFHHZI=\n\
|
|
-----END CERTIFICATE-----\n";
|
|
|
|
static char *mqtt_ck =
|
|
"-----BEGIN RSA PRIVATE KEY-----\n\
|
|
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\n\
|
|
-----END RSA PRIVATE KEY-----\n";
|
|
|
|
|
|
static char *http_ca =
|
|
"-----BEGIN CERTIFICATE-----\n\
|
|
MIIE4zCCA0ugAwIBAgIJAIaV+KPqwKDTMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD\n\
|
|
VQQGEwJDTjELMAkGA1UECAwCQUgxCzAJBgNVBAcMAkhGMRAwDgYDVQQKDAdRVUVD\n\
|
|
VEVMMQswCQYDVQQLDAJTVDEWMBQGA1UEAwwNMTEyLjMxLjg0LjE2NDEmMCQGCSqG\n\
|
|
SIb3DQEJARYXZWRkaWUuemhhbmdAcXVlY3RlbC5jb20wIBcNMjIwMTI1MDYyMTA2\n\
|
|
WhgPMjEyMjAxMDEwNjIxMDZaMIGGMQswCQYDVQQGEwJDTjELMAkGA1UECAwCQUgx\n\
|
|
CzAJBgNVBAcMAkhGMRAwDgYDVQQKDAdRVUVDVEVMMQswCQYDVQQLDAJTVDEWMBQG\n\
|
|
A1UEAwwNMTEyLjMxLjg0LjE2NDEmMCQGCSqGSIb3DQEJARYXZWRkaWUuemhhbmdA\n\
|
|
cXVlY3RlbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDLd3I2\n\
|
|
NHixA6r/GOxaJgPuzRuc7QG0e/j/1sYz5aHakQ2eR0DkZHwK+OIAGXFrCqKOAx0y\n\
|
|
J8K/SQWwZxEwTJy/Ptd4dT0aeQn8Fyhb46aVmLwWX3k8IVkGG0jCiDaEvndWZddY\n\
|
|
4P/mW0nexYtG2KvIqR27d9B/jQDUGT9V0HbAn+f5L5/r14j+BICXOeiUPS+gCyBd\n\
|
|
kOhdxvz02mCLYOOtzZb/0vnkYtVTA0rPEHPg05VcJYGWSXUpQvGI6+aVaqMl5vBD\n\
|
|
Sn0k63Yay4ikliU8/SVK9OBO0ifgqAQJy2DTx0dstAhUv9eWgmtSWytu2Sf9HLwb\n\
|
|
86VnZHIKw7SiHMTWDPUBT6XoW9TeKYKotDT4QpHPwWrH5l1Gk8DOIIYYuLUEabSj\n\
|
|
HUzf5HcgvleWvB8oWzb8OaniZSySqYGfV9x0M7irLSjJMSzbgyMyvU7zu8y6MK/t\n\
|
|
AXrVHZZavnw410DNDPvT9179lZg8BkZJmdCI2KQ45vqqhkxVS881cBKlQ+sCAwEA\n\
|
|
AaNQME4wHQYDVR0OBBYEFNUvIPGNPgsC8f1SRtlwaRCLj1eYMB8GA1UdIwQYMBaA\n\
|
|
FNUvIPGNPgsC8f1SRtlwaRCLj1eYMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL\n\
|
|
BQADggGBAGEiAVP/Z2odReW2NmwvZ9vtccTe7eQX4XpQqrpgnnRu59bldPi9IXBc\n\
|
|
4VDtmJeVnGEYSIAgkG5u8kItKdeYqHpU4ujXGxbqV2fR8o8+7ywrDWVAn/01guUF\n\
|
|
eZ4CtHnXse1i1Jr73CRlskYYajJrE6wwe1GdcBolzXa/2I//C9hdonfiUNz/kJsL\n\
|
|
4Wn2/tacgXWbBlVqZvoKpqap2halu9zC/vZNTWj8/AV1pXBZGAcTeffdF35O/Aeo\n\
|
|
+5QIhUPJgezuNunyIHyk7wOyDVC6BmgcF+633zVJcz7WUPPXOZNOQg0zijCkwYOg\n\
|
|
uv9L7syz2k82TW0GaYz7YGAp4Ocfza9ltj73QDIQpa70HVFgLTr0VAvN5xLY0nDB\n\
|
|
Ff+2jSOx087lVK++QfgDuRtQ2iWljCSab5Tdfp7TPR4LrljaXE4C2IXDi9FJ+vuL\n\
|
|
P/+3qn1h1ZMzpLVTLPt8iqLJv0soAKeHXB96TETAZDa0pk+4VhadOo8WoKuAm3k9\n\
|
|
EdJNFsgC7A==\n\
|
|
-----END CERTIFICATE-----\n";
|
|
|
|
static char *http_cc =
|
|
"-----BEGIN CERTIFICATE-----\n\
|
|
MIIEjDCCAvQCCQDUEg/AtXowWjANBgkqhkiG9w0BAQsFADCBhjELMAkGA1UEBhMC\n\
|
|
Q04xCzAJBgNVBAgMAkFIMQswCQYDVQQHDAJIRjEQMA4GA1UECgwHUVVFQ1RFTDEL\n\
|
|
MAkGA1UECwwCU1QxFjAUBgNVBAMMDTExMi4zMS44NC4xNjQxJjAkBgkqhkiG9w0B\n\
|
|
CQEWF2VkZGllLnpoYW5nQHF1ZWN0ZWwuY29tMCAXDTIyMDEyNTA2MjI0MloYDzIx\n\
|
|
MjIwMTAxMDYyMjQyWjCBhjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkFIMQswCQYD\n\
|
|
VQQHDAJIRjEQMA4GA1UECgwHUVVFQ1RFSzELMAkGA1UECwwCU1QxFjAUBgNVBAMM\n\
|
|
DTExMi4zMS44NC4xNjQxJjAkBgkqhkiG9w0BCQEWF2VkZGllLnpoYW5nQHF1ZWN0\n\
|
|
ZWwuY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA46qNt9Xs+qis\n\
|
|
XaMaE3shUIYQQq1V0cbkwK3eMlK10B3hsx+/i8sH98T07b0tdDoBpzpwlBFx6LhO\n\
|
|
zypJRcPgIiDIEwfB+0oj8BG2/b3BDBDjbMNnFG/vcR7al8HFeqcThtXFTRlaIHay\n\
|
|
bRrxOQ/477VIBPpsw3G3YGpFFyKaIW2yw9GlGBAc0AETGKACkEXf8mgtLhTq0XGS\n\
|
|
9bNMT8H1o40cyP6AxXdzF/jCKOy1YxtJ1CLBHXfNObnMhV0LwGcf2xkv2i5XHlnL\n\
|
|
KHImNDeZmpFuYboHOg1EORRx0Vz27IzX/OC370j4y3FAhPBgx7NPV0/glNejM8VZ\n\
|
|
sxE62OezRenOGMxTvvG5uGNoiyRUWTQfzM2Jv+Ym5RCNhVnW5RLiwDi2OuCt1xU2\n\
|
|
x5d+ncETcltznhiUY7e01LP9nXQllFW/h6jSOcdxEvBRNdlpIbdY5ZBI4XuH1riN\n\
|
|
6Rq3VKSdDJhoXdmhA2471lF3mYyhdy/3Isjez0nElrHQFVRtTYatAgMBAAEwDQYJ\n\
|
|
KoZIhvcNAQELBQADggGBAEEKY4568flzjFCYjjD5CEzIuLpFUyAtmIx6J8dLaEY1\n\
|
|
vyl3+JcYZqERJTfJu4Au0CjeAN3oNis0uKnjONszLU8uBFybqvcG2C45RsmkymEM\n\
|
|
TwiElLLk7yiVhjscjK91AIxRMLgBd6WraNSM7l88LI8SAOjGx/p3GIhHZzSMF1TN\n\
|
|
TKGGNM2lBg/MKwulvvAuqRIHyuElwakcW7z3AF9cUtRe6yeyMp8keJgtCXb71VHz\n\
|
|
LoSRx7yBwxTpownquy2zWMf1LqKQk1fddth7+ZSj2ft4k7BferFEnBALV2ws3pBX\n\
|
|
g3THUydNZyOIoB/iCXza2+daroizGDBiRY4zoLE9azlzLttfPCpISRQEdaX87K2i\n\
|
|
J6OhjDsaobOPoYSu8d11fI7vOuoIjk5VS2UKBfnaGWlF3xHxXJYHyhE6/rijtvyi\n\
|
|
AhWLjWtIIftg0Njmt0YVTWen1Iczd4oanYwPzVFs9AmHhyBJDsFRm5STcDyDbjzy\n\
|
|
Q+Ep7YHxMYXseaUKVeZ8+Q==\n\
|
|
-----END CERTIFICATE-----\n";
|
|
|
|
static char *http_ck =
|
|
"-----BEGIN RSA PRIVATE KEY-----\n\
|
|
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\n\
|
|
-----END RSA PRIVATE KEY-----\n";
|
|
|
|
static char *http_test_data = "START123456789abcdefghijklmnopqrstuvwxyzEND";
|
|
|
|
/*
|
|
* This function does not take into account all urc, such as bluetooth-related urc, please add it yourself if necessary
|
|
*/
|
|
static int ql_wifi_urc_process(char *data)
|
|
{
|
|
if(strstr(data, "+QSTASTAT:") != NULL)
|
|
{
|
|
if(strstr(data, "GOT_IP"))
|
|
{
|
|
g_ql_wifi_sta_status = GOT_IP;
|
|
ql_rtos_semaphore_release(ql_wifi_status_semaRef);
|
|
}
|
|
else if(strstr(data, "WLAN_DISCONNECTED"))
|
|
{
|
|
g_ql_wifi_sta_status = WLAN_DISCONNECTED;
|
|
}
|
|
else if(strstr(data, "WLAN_CONNECTED")){
|
|
g_ql_wifi_sta_status = WLAN_CONNECTED;
|
|
}
|
|
else if(strstr(data, "SCAN_NO_AP"))
|
|
{
|
|
g_ql_wifi_sta_status = SCAN_NO_AP;
|
|
}
|
|
printf("g_ql_wifi_sta_status = %d \n", g_ql_wifi_sta_status);
|
|
}
|
|
else if(strstr(data, "+QAPSTAT:") != NULL)
|
|
{
|
|
|
|
}
|
|
else if(strstr(data, "+QOTASTAT:") != NULL)
|
|
{
|
|
|
|
}
|
|
else if(strstr(data, "+QIURC:") != NULL)
|
|
{
|
|
if(strstr(data, "recv"))
|
|
{
|
|
ql_wifi_data_queue_t tcp_data = {0};
|
|
char *token;
|
|
// 解析数据长度
|
|
token = strtok(data, ",");
|
|
token = strtok(NULL, ",");
|
|
token = strtok(NULL, "\r\n");
|
|
tcp_data.len = atoi(token);
|
|
|
|
// 解析数据内容
|
|
token = strtok(NULL, "\r\n");
|
|
memcpy(tcp_data.data, token, tcp_data.len);
|
|
|
|
printf("tcp_data.len = %d\n", tcp_data.len); // 输出: 0
|
|
printf("tcp_data.data = %s\n", tcp_data.data); // 输出: Hello World
|
|
ql_rtos_queue_release(ql_wifi_tcp_queue, sizeof(ql_wifi_data_queue_t), (u8*)(&tcp_data), 0);
|
|
}
|
|
}
|
|
else if(strstr(data, "+QSSLURC:") != NULL)
|
|
{
|
|
|
|
}
|
|
else if(strstr(data, "+QMTSTAT:") != NULL)
|
|
{
|
|
|
|
}
|
|
else if(strstr(data, "+QMTRECV:") != NULL)
|
|
{
|
|
ql_wifi_data_queue_t mqtt_data = {0};
|
|
mqtt_data.len = strlen(data);
|
|
strcpy(mqtt_data.data, data);
|
|
ql_rtos_queue_release(ql_wifi_mqtt_queue, sizeof(ql_wifi_data_queue_t), (u8*)(&mqtt_data), 0);
|
|
}
|
|
else if(strstr(data, "+QHTTPURC:") != NULL)
|
|
{
|
|
|
|
}
|
|
else if(strstr(data, "RDY") != NULL)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
printf("%s, %s\n", __FUNCTION__, data);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
static bool ql_wifi_send_at_sync(char *at_cmd, char *expected_resp, char *resp)
|
|
{
|
|
ql_wifi_data_queue_t msg = {0};
|
|
|
|
printf("%s, at cmd:%s\n", __FUNCTION__, at_cmd);
|
|
|
|
/*send at cmd*/
|
|
ql_uart_write(WIFI_AT_PORT, at_cmd, strlen(at_cmd));
|
|
|
|
if(expected_resp)
|
|
{
|
|
WAIT_RESP:
|
|
/*wait response*/
|
|
ql_rtos_queue_wait(ql_wifi_at_queue, (u8*)(&msg), sizeof(msg), 0xFFFFFFFF);
|
|
|
|
printf("%s,at resp:%s\n", __FUNCTION__, msg.data, msg.len);
|
|
|
|
/*Judge whether it is expected response*/
|
|
if(strstr(msg.data, expected_resp) == NULL)
|
|
{
|
|
goto WAIT_RESP;
|
|
}
|
|
}
|
|
|
|
if(resp)
|
|
{
|
|
strcpy(resp, msg.data);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
static void ql_wifi_uart_callback(QL_UART_PORT_NUMBER_E port, void *para)
|
|
{
|
|
ql_wifi_data_queue_t msg = {0};
|
|
msg.len = ql_uart_read(port, msg.data, sizeof(msg.data));
|
|
|
|
/*processing urc from wifi*/
|
|
if(ql_wifi_urc_process(msg.data) == FALSE)
|
|
{
|
|
/*if it is not urc, send queue to ql_wifi_send_at_sync_sync*/
|
|
ql_rtos_queue_release(ql_wifi_at_queue, sizeof(ql_wifi_data_queue_t), (u8*)(&msg), 0);
|
|
}
|
|
}
|
|
|
|
static int ql_wifi_init(void)
|
|
{
|
|
int ret = -1;
|
|
ql_uart_config_t dcb;
|
|
|
|
ql_rtos_queue_create(&ql_wifi_at_queue, sizeof(ql_wifi_data_queue_t), 10);
|
|
|
|
ql_rtos_semaphore_create(&ql_wifi_status_semaRef, 0);
|
|
|
|
/*Init uart port, the wifi uart baud rate is 115200*/
|
|
ret = ql_uart_open(WIFI_AT_PORT, QL_UART_BAUD_115200, QL_FC_NONE);
|
|
if (ret) {
|
|
printf("open uart[%d] failed! %d \n", WIFI_AT_PORT, ret);
|
|
return ret;
|
|
}
|
|
|
|
/*register callback to read uart data*/
|
|
ql_uart_register_cb(WIFI_AT_PORT, ql_wifi_uart_callback);
|
|
|
|
/*Set wifi uart baud rate to 1842000*/
|
|
ql_wifi_send_at_sync("AT+QSETBAND=1842000\r\n","OK", NULL);
|
|
|
|
/*Set 4G-module uart baud rate to 1842000*/
|
|
ql_uart_get_dcbconfig(WIFI_AT_PORT, &dcb);
|
|
dcb.baudrate = QL_UART_BAUD_1842000;
|
|
ql_uart_set_dcbconfig(WIFI_AT_PORT, &dcb);
|
|
|
|
ql_wifi_send_at_sync("ATE0\r\n", "OK", NULL);
|
|
|
|
/*set wifi to station mode and connect ap: AT+QSTAAPINFO=<SSID>[,<pwd>]*/
|
|
ql_wifi_send_at_sync("AT+QSTAAPINFO=\"Visitor-Quectel\",\"v@quectel\"\r\n","OK", NULL);
|
|
|
|
/*wait sta connected and got ip*/
|
|
ql_rtos_semaphore_wait(ql_wifi_status_semaRef, QL_WAIT_FOREVER);
|
|
|
|
printf("<--------------sta connected and got ip---------------->\r\n");
|
|
}
|
|
|
|
static void ql_wifi_tcp_test(void * argv)
|
|
{
|
|
int write_bytes = 0;
|
|
char *send_data = "Hello World";
|
|
char at_cmd_buf[128] = {0};
|
|
ql_wifi_data_queue_t tcp_data = {0};
|
|
|
|
printf("<-----------------ql_wifi_tcp_test start---------------------->\r\n");
|
|
|
|
ql_rtos_queue_create(&ql_wifi_tcp_queue, sizeof(ql_wifi_data_queue_t), 10);
|
|
|
|
ql_wifi_init();
|
|
|
|
/*connect to tcp server: AT+QIOPEN=<connectID>,<service_type>,<IP_address>/<domain_name>,<remote_port>[,<local_port>[,<access_mode>]]*/
|
|
ql_wifi_send_at_sync("AT+QIOPEN=0,\"TCP\",\"112.31.84.164\",8305,8000,1\r\n", "+QIOPEN: 0,0", NULL);
|
|
|
|
/*send data to tcp server: AT+QISEND=<connectID>,<send_length>*/
|
|
sprintf(at_cmd_buf, "AT+QISEND=0,%d\r\n", strlen(send_data));
|
|
ql_wifi_send_at_sync(at_cmd_buf, ">", NULL);
|
|
ql_wifi_send_at_sync(send_data, "SEND OK", NULL);
|
|
|
|
/*The tcp server we used will send the received data back to the tcp client.*/
|
|
ql_rtos_queue_wait(ql_wifi_tcp_queue, (u8*)(&tcp_data), sizeof(tcp_data), 0xFFFFFFFF);
|
|
if(strstr(send_data, tcp_data.data)){
|
|
printf("<-----------------ql_wifi_tcp_test success---------------------->\r\n");
|
|
}else{
|
|
printf("<-----------------ql_wifi_tcp_test fail---------------------->\r\n");
|
|
}
|
|
|
|
/*disconnect to tcp server: AT+QICLOSE=<connectID>[,<timeout>]*/
|
|
ql_wifi_send_at_sync("AT+QICLOSE=0\r\n","OK", NULL);
|
|
|
|
printf("<-----------------ql_wifi_tcp_test end---------------------->\r\n");
|
|
|
|
|
|
ql_rtos_queue_delete(ql_wifi_tcp_queue);
|
|
ql_rtos_task_delete(NULL);
|
|
}
|
|
|
|
static ql_wifi_file_create(char *file_name, char *file_data, int file_len)
|
|
{
|
|
char at_cmd_buf[64] = {0};
|
|
|
|
sprintf(at_cmd_buf, "AT+QFDEL=\"%s\"\r\n",file_name);
|
|
ql_wifi_send_at_sync(at_cmd_buf,NULL, NULL);
|
|
|
|
memset(at_cmd_buf, 0, sizeof(at_cmd_buf));
|
|
sprintf(at_cmd_buf, "AT+QFOPEN=\"%s\"\r\n",file_name);
|
|
ql_wifi_send_at_sync(at_cmd_buf, "OK", NULL);
|
|
|
|
memset(at_cmd_buf, 0, sizeof(at_cmd_buf));
|
|
sprintf(at_cmd_buf, "AT+QFWRITE=1,%d\r\n",file_len);
|
|
ql_wifi_send_at_sync(at_cmd_buf, "CONNECT", NULL);
|
|
|
|
ql_wifi_send_at_sync(file_data, "OK", NULL);
|
|
|
|
ql_wifi_send_at_sync("AT+QFCLOSE=1\r\n", "OK", NULL);
|
|
}
|
|
|
|
static void ql_wifi_mqtt_test(void * argv)
|
|
{
|
|
#define MQTT_SSL_LEVEL 2 //Can be set to 0 / 1 / 2
|
|
|
|
ql_wifi_data_queue_t mqtt_data = {0};
|
|
printf("<-----------------ql_wifi_mqtt_test start---------------------->\r\n");
|
|
|
|
ql_rtos_queue_create(&ql_wifi_mqtt_queue, sizeof(ql_wifi_data_queue_t), 10);
|
|
|
|
ql_wifi_init();
|
|
|
|
#if MQTT_SSL_LEVEL == 0
|
|
/*AT+QSSLCFG="seclevel",<SSL_ctxID>[,<seclevel>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"seclevel\",0,0\r\n","OK", NULL);
|
|
#elif MQTT_SSL_LEVEL == 1
|
|
/*Upload CA certificate*/
|
|
ql_wifi_file_create("mqtt_ca.pem", mqtt_ca, strlen(mqtt_ca));
|
|
|
|
/*Configure CA certificate.*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"cacert\",0,\"mqtt_ca.pem\"\r\n","OK", NULL);
|
|
|
|
/*AT+QSSLCFG="seclevel",<SSL_ctxID>[,<seclevel>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"seclevel\",0,1\r\n","OK", NULL);
|
|
|
|
#elif MQTT_SSL_LEVEL == 2
|
|
/*Upload CA / CC / CK certificate*/
|
|
ql_wifi_file_create("mqtt_ca", mqtt_ca, strlen(mqtt_ca));
|
|
ql_wifi_file_create("mqtt_cc", mqtt_cc, strlen(mqtt_cc));
|
|
ql_wifi_file_create("mqtt_ck", mqtt_ck, strlen(mqtt_ck));
|
|
|
|
/*Configure CA certificate.*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"cacert\",0,\"mqtt_ca\"\r\n","OK", NULL);
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"clientcert\",0,\"mqtt_cc\"\r\n","OK", NULL);
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"clientkey\",0,\"mqtt_ck\"\r\n","OK", NULL);
|
|
|
|
/*AT+QSSLCFG="seclevel",<SSL_ctxID>[,<seclevel>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"seclevel\",0,2\r\n","OK", NULL);
|
|
#endif
|
|
|
|
ql_wifi_send_at_sync("AT+QFLST\r\n","OK", NULL);
|
|
|
|
/*Configure ssl cipher suites. AT+QSSLCFG="ciphersuite",<SSL_ctxID>[,<cipher_suites>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"ciphersuite\",0,0xFFFF\r\n","OK", NULL);
|
|
|
|
/*AT+QSSLCFG="ignorelocaltime",<SSL_ctxID>[,<ignore_ltime>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"ignorelocaltime\",0,1\r\n","OK", NULL);
|
|
|
|
#if MQTT_SSL_LEVEL == 0
|
|
/*Disable the ssl function of the mqtt client with id 0. AT+QMTCFG="ssl",<client_idx>[,<SSL_enable>[,<SSL_ctxID>]]*/
|
|
ql_wifi_send_at_sync("AT+QMTCFG=\"ssl\",0,0,0\r\n","OK", NULL);
|
|
|
|
/*Create an MQTT client with id 0. AT+QMTOPEN=<client_idx>,<host_name>,<port> , +QMTOPEN: <client_idx>,<result>*/
|
|
ql_wifi_send_at_sync("AT+QMTOPEN=0,\"112.31.84.164\",8306\r\n","+QMTOPEN: 0,0", NULL);
|
|
#elif MQTT_SSL_LEVEL == 1
|
|
/*Enable the ssl function of the mqtt client with id 0. AT+QMTCFG="ssl",<client_idx>[,<SSL_enable>[,<SSL_ctxID>]]*/
|
|
ql_wifi_send_at_sync("AT+QMTCFG=\"ssl\",0,1,0\r\n","OK", NULL);
|
|
|
|
/*Create an MQTT client with id 0. AT+QMTOPEN=<client_idx>,<host_name>,<port> , +QMTOPEN: <client_idx>,<result>*/
|
|
ql_wifi_send_at_sync("AT+QMTOPEN=0,\"112.31.84.164\",8307\r\n","+QMTOPEN: 0,0", NULL);
|
|
#elif MQTT_SSL_LEVEL == 2
|
|
/*Enable the ssl function of the mqtt client with id 0. AT+QMTCFG="ssl",<client_idx>[,<SSL_enable>[,<SSL_ctxID>]]*/
|
|
ql_wifi_send_at_sync("AT+QMTCFG=\"ssl\",0,1,0\r\n","OK", NULL);
|
|
|
|
/*Create an MQTT client with id 0. AT+QMTOPEN=<client_idx>,<host_name>,<port> , +QMTOPEN: <client_idx>,<result>*/
|
|
ql_wifi_send_at_sync("AT+QMTOPEN=0,\"112.31.84.164\",8308\r\n","+QMTOPEN: 0,0", NULL);
|
|
#endif
|
|
|
|
/*
|
|
Establish an MQTT connection that identify is 100.
|
|
AT+QMTCONN=<client_idx>,<clientID>[,<username>,<password>]
|
|
+QMTCONN: <client_idx>,<result>[,<retcode>]
|
|
*/
|
|
ql_wifi_send_at_sync("AT+QMTCONN=0,\"100\"\r\n","+QMTCONN: 0,0,0", NULL);
|
|
|
|
/*Subscribe to Topic. AT+QMTSUB=<client_idx>,<msgID>,<topic1>,<qos1>[,<topic2>,<qos2>[,..]]*/
|
|
ql_wifi_send_at_sync("AT+QMTSUB=0,1,\"topic/test\",2\r\n","+QMTSUB:", NULL);
|
|
|
|
/*Publish Topic. AT+QMTPUB=<client_idx>,<msgID>,<qos>,<retain>,<topic>[,<length>]*/
|
|
ql_wifi_send_at_sync("AT+QMTPUB=0,1,2,0,\"topic/test\",4\r\n",">", NULL);
|
|
ql_wifi_send_at_sync("25.8", "+QMTPUB", NULL);
|
|
|
|
/*Wait +QMTRECV: 0,1,"topic/test","25.8" URC*/
|
|
ql_rtos_queue_wait(ql_wifi_mqtt_queue, (u8*)(&mqtt_data), sizeof(mqtt_data), 0xFFFFFFFF);
|
|
if(strstr(mqtt_data.data, "25.8")){
|
|
printf("<-----------------ql_wifi_mqtt_test success---------------------->\r\n");
|
|
}else{
|
|
printf("<-----------------ql_wifi_mqtt_test fail---------------------->\r\n");
|
|
}
|
|
|
|
/*Close the MQTT client. AT+QMTCLOSE=<client_idx>*/
|
|
ql_wifi_send_at_sync("AT+QMTCLOSE=0\r\n","OK", NULL);
|
|
|
|
printf("<-----------------ql_wifi_mqtt_test end---------------------->\r\n");
|
|
|
|
ql_rtos_queue_delete(ql_wifi_mqtt_queue);
|
|
ql_rtos_task_delete(NULL);
|
|
}
|
|
|
|
|
|
static void ql_wifi_http_test(void * argv)
|
|
{
|
|
#define HTTP_SSL_LEVEL 0 //Can be set to 0 / 1 / 2
|
|
|
|
ql_wifi_data_queue_t http_data = {0};
|
|
char at_cmd_buf[128] = {0};
|
|
|
|
printf("<-----------------ql_wifi_http_test start---------------------->\r\n");
|
|
|
|
ql_wifi_init();
|
|
|
|
#if HTTP_SSL_LEVEL == 0
|
|
/*AT+QSSLCFG="seclevel",<SSL_ctxID>[,<seclevel>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"seclevel\",1,0\r\n","OK", NULL);
|
|
#elif HTTP_SSL_LEVEL == 1
|
|
/*Upload CA certificate*/
|
|
ql_wifi_file_create("http_ca.pem", http_ca, strlen(http_ca));
|
|
|
|
/*Configure CA certificate.*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"cacert\",1,\"http_ca.pem\"\r\n","OK", NULL);
|
|
|
|
/*AT+QSSLCFG="seclevel",<SSL_ctxID>[,<seclevel>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"seclevel\",1,1\r\n","OK", NULL);
|
|
|
|
#elif HTTP_SSL_LEVEL == 2
|
|
/*Upload CA / CC / CK certificate*/
|
|
ql_wifi_file_create("http_ca", http_ca, strlen(http_ca));
|
|
ql_wifi_file_create("http_cc", http_cc, strlen(http_cc));
|
|
ql_wifi_file_create("http_ck", http_ck, strlen(http_ck));
|
|
|
|
/*Configure CA certificate.*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"cacert\",1,\"http_ca\"\r\n","OK", NULL);
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"clientcert\",1,\"http_cc\"\r\n","OK", NULL);
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"clientkey\",1,\"http_ck\"\r\n","OK", NULL);
|
|
|
|
/*AT+QSSLCFG="seclevel",<SSL_ctxID>[,<seclevel>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"seclevel\",1,2\r\n","OK", NULL);
|
|
#endif
|
|
|
|
ql_wifi_send_at_sync("AT+QFLST\r\n","OK", NULL);
|
|
|
|
/*Configure ssl cipher suites. AT+QSSLCFG="ciphersuite",<SSL_ctxID>[,<cipher_suites>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"ciphersuite\",1,0xFFFF\r\n","OK", NULL);
|
|
|
|
/*AT+QSSLCFG="ignorelocaltime",<SSL_ctxID>[,<ignore_ltime>]*/
|
|
ql_wifi_send_at_sync("AT+QSSLCFG=\"ignorelocaltime\",1,1\r\n","OK", NULL);
|
|
|
|
/*AT+QHTTPCFG="sslctxid"[,<sslctxID>]*/
|
|
ql_wifi_send_at_sync("AT+QHTTPCFG=\"sslctxid\",1\r\n","OK", NULL);
|
|
|
|
#if HTTP_SSL_LEVEL == 0
|
|
/*AT+QHTTPCFG="url"[,<URL_string>]*/
|
|
ql_wifi_send_at_sync("AT+QHTTPCFG=\"url\",\"http://112.31.84.164:8300/160B.txt\"\r\n","OK", NULL);
|
|
#elif HTTP_SSL_LEVEL == 1
|
|
/*AT+QHTTPCFG="url"[,<URL_string>]*/
|
|
ql_wifi_send_at_sync("AT+QHTTPCFG=\"url\",\"https://112.31.84.164:8301/160B.txt\"\r\n","OK", NULL);
|
|
#elif HTTP_SSL_LEVEL == 2
|
|
/*AT+QHTTPCFG="url"[,<URL_string>]*/
|
|
ql_wifi_send_at_sync("AT+QHTTPCFG=\"url\",\"https://112.31.84.164:8303/160B.txt\"\r\n","OK", NULL);
|
|
#endif
|
|
|
|
/*AT+QHTTPGET[=<rsptime>], +QHTTPGET: <err>[,<httprspcode>[,<content_length>]]*/
|
|
ql_wifi_send_at_sync("AT+QHTTPGET=60\r\n", "+QHTTPGET:", NULL);
|
|
|
|
/*AT+QHTTPREAD[=<wait_time>]*/
|
|
ql_wifi_send_at_sync("AT+QHTTPREAD=60\r\n", "+QHTTPREAD:", NULL);
|
|
|
|
printf("<-----------------ql_wifi_http_test end---------------------->\r\n");
|
|
exit:
|
|
ql_rtos_task_delete(NULL);
|
|
}
|
|
|
|
// application_init(ql_wifi_tcp_test, "tcp_test", 10, 0);
|
|
// application_init(ql_wifi_mqtt_test, "mqtt_test", 10, 0);
|
|
// application_init(ql_wifi_http_test, "http_test", 10, 0);
|