Updated all other files to be inline with version 1.00.10 of the SDK

This commit is contained in:
Th3maz1ng 2023-02-19 16:34:26 +01:00
parent 1c6b25a74b
commit 2bda5c0102
70 changed files with 3422 additions and 1033 deletions

View File

@ -20,6 +20,7 @@
EXTERN FUNC EXTERN FUNC
*****************************************************************/ *****************************************************************/
extern int demo_connect_net(void *, ...); extern int demo_connect_net(void *, ...);
extern int demo_connect_net_with_specific_info(void *, ...);
extern int demo_socket_client(void *, ...); extern int demo_socket_client(void *, ...);
extern int demo_socket_server(void *, ...); extern int demo_socket_server(void *, ...);
extern int demo_oneshot(void *, ...); extern int demo_oneshot(void *, ...);
@ -64,6 +65,8 @@ extern int CreateMCastDemoTask(void *, ...);
extern int adc_input_voltage_demo(void *, ...); extern int adc_input_voltage_demo(void *, ...);
extern int adc_chip_temperature_demo(void*,...); extern int adc_chip_temperature_demo(void*,...);
extern int adc_power_voltage_demo(void *, ...); extern int adc_power_voltage_demo(void *, ...);
extern int adc_input_voltage_cal_demo(void *, ...);
extern int adc_input_voltage_multipoint_cal_demo(void *, ...);
extern int sd_card_test(void *, ...); extern int sd_card_test(void *, ...);
extern int demo_wps_pbc(void *, ...); extern int demo_wps_pbc(void *, ...);
@ -78,7 +81,8 @@ extern int tls_i2s_io_init(void *, ...);
extern int tls_i2s_demo(void *, ...); extern int tls_i2s_demo(void *, ...);
extern int i2c_demo(void *, ...); extern int i2c_demo(void *, ...);
extern int scan_demo(void *, ...); extern int scan_demo(void *, ...);
extern int scan_format2_demo(void *, ...);
extern int scan_specified_demo(void *, ...);
extern int https_demo(void *, ...); extern int https_demo(void *, ...);
extern int mqtt_demo(void *, ...); extern int mqtt_demo(void *, ...);
extern int fatfs_test(void *, ...); extern int fatfs_test(void *, ...);
@ -147,8 +151,8 @@ struct demo_console_info_t
char *info; char *info;
}; };
#define DEMO_CONSOLE_CMD 1 //被解析成cmd #define DEMO_CONSOLE_CMD 1 //被解析成cmd
#define DEMO_CONSOLE_SHORT_CMD 2 //CMD的一部分没有解析完 #define DEMO_CONSOLE_SHORT_CMD 2 //CMD的一部分没有解析完
#define DEMO_CONSOLE_WRONG_CMD 3 #define DEMO_CONSOLE_WRONG_CMD 3
#define DEMO_BUF_SIZE TLS_UART_RX_BUF_SIZE #define DEMO_BUF_SIZE TLS_UART_RX_BUF_SIZE
@ -162,6 +166,7 @@ struct demo_console_info_t console_tbl[] =
//To Do When Add New Demo //To Do When Add New Demo
#if DEMO_CONNECT_NET #if DEMO_CONNECT_NET
{"t-connect", demo_connect_net, 0, 2, "Test connecting ap;t-connect(\"ssid\",\"pwd\"); For open ap, pwd should be empty"}, {"t-connect", demo_connect_net, 0, 2, "Test connecting ap;t-connect(\"ssid\",\"pwd\"); For open ap, pwd should be empty"},
{"t-connect_ss", demo_connect_net_with_specific_info, 0x1C, 5, "Test connecting ap;t-connect_ss(\"ssid\",\"pwd\",timeout,pci_en,scan_mode); For open ap, pwd should be empty"},
{"t-oneshot", demo_oneshot, 0, 0, "Test Oneshot configuration"}, {"t-oneshot", demo_oneshot, 0, 0, "Test Oneshot configuration"},
// {"t-socketcfg", demo_socket_config, 0, 0, "Test socket configuration"}, // {"t-socketcfg", demo_socket_config, 0, 0, "Test socket configuration"},
{"t-webcfg", demo_webserver_config, 0, 0, "Test web server configuration"}, {"t-webcfg", demo_webserver_config, 0, 0, "Test web server configuration"},
@ -187,6 +192,8 @@ struct demo_console_info_t console_tbl[] =
#if DEMO_SCAN #if DEMO_SCAN
{"t-scan", scan_demo, 0x0, 0, "Test wifi scan"}, {"t-scan", scan_demo, 0x0, 0, "Test wifi scan"},
{"t-scanf2", scan_format2_demo, 0x0, 0, "Test wifi scan format2"},
{"t-ss", scan_specified_demo, 0x3c, 6, "Test specified scan t-ss(\"ssid\",\"mac\",chan,scan_type,min_interval,max_interval)"},
#endif #endif
/************************************************************************/ /************************************************************************/
@ -255,6 +262,8 @@ struct demo_console_info_t console_tbl[] =
{"t-adctemp", adc_chip_temperature_demo, 0x0, 0, "(ADC)Test chip temperature"}, {"t-adctemp", adc_chip_temperature_demo, 0x0, 0, "(ADC)Test chip temperature"},
{"t-adcvolt", adc_input_voltage_demo, 0x1, 1, "(ADC)Test input voltage,0-PA1(chan0), 1-PA4(chan1),8-different"}, {"t-adcvolt", adc_input_voltage_demo, 0x1, 1, "(ADC)Test input voltage,0-PA1(chan0), 1-PA4(chan1),8-different"},
{"t-adcpower", adc_power_voltage_demo, 0x0, 0, "(ADC)Sample power supply voltage"}, {"t-adcpower", adc_power_voltage_demo, 0x0, 0, "(ADC)Sample power supply voltage"},
{"t-adccal", adc_input_voltage_cal_demo, 0x3, 2, "(ADC)Calibrate input voltage"},
{"t-adccalmp", adc_input_voltage_multipoint_cal_demo, 0x1F, 5, "(ADC) mulitpoint Calibrate t-adccalmp(chanbitmap,chan1ref,chan2ref,chan3ref,chan4ref),unit:mV"},
#endif #endif
#if DEMO_7816 #if DEMO_7816
@ -317,7 +326,7 @@ struct demo_console_info_t console_tbl[] =
#endif #endif
#if DEMO_MQTT #if DEMO_MQTT
{"t-mqtt", mqtt_demo, 0x0, 0, "Test mqtt"}, {"t-mqtt", mqtt_demo, 0x1, 1, "Test mqtt: 0-TCP; 1-TLS; 2-WS; 3-WSS"},
#endif #endif
#if DEMO_FATFS #if DEMO_FATFS
@ -363,11 +372,11 @@ struct demo_console_info_t console_tbl[] =
{"t-avoidcopy", avoid_copy_entry, 0x0, 0, "Test Avoid Copy function"}, {"t-avoidcopy", avoid_copy_entry, 0x0, 0, "Test Avoid Copy function"},
#endif #endif
//控制台上显示的最后一个命令,如果要让命令显示在控制台上,需要放在该行的上面 //控制台上显示的最后一个命令,如果要让命令显示在控制台上,需要放在该行的上面
{"demohelp", demo_console_show_help, 0, 0, "Display Help information"}, {"demohelp", demo_console_show_help, 0, 0, "Display Help information"},
//下面的命令用于内部测试,不显示在控制台上 //下面的命令用于内部测试,不显示在控制台上
{"reset", demo_sys_reset, 0, 0, "Reset System"}, {"reset", demo_sys_reset, 0, 0, "Reset System"},
//最后一个命令,检索命令时判断结束标识 //最后一个命令,检索命令时判断结束标识
{"lastcmd", NULL, 0, 0, "Table Terminal Flag; MUST BE THE LAST ONE"} {"lastcmd", NULL, 0, 0, "Table Terminal Flag; MUST BE THE LAST ONE"}
}; };

View File

@ -223,11 +223,14 @@ int demo_cmd_execute(Demo_Console *sys)
} }
else if (str_r && str_n) else if (str_r && str_n)
{ {
if (((str_r > str_n) && (str_r > strfirst)) if (((str_r > str_n) && (str_r > strfirst)))
||((str_r < str_n) && (str_n > strfirst)))
{ {
strfirst[str_n - strfirst] = '\0'; strfirst[str_n - strfirst] = '\0';
} }
else if ((str_r < str_n) && (str_n > strfirst))
{
strfirst[str_r - strfirst] = '\0';
}
} }
/*parser()*/ /*parser()*/
@ -242,6 +245,11 @@ int demo_cmd_execute(Demo_Console *sys)
continue; continue;
} }
} }
if(!pparam_begin)
{
printf("\ndemo cmd short\n");
return DEMO_CONSOLE_SHORT_CMD;
}
} }
else else
{ {
@ -261,7 +269,7 @@ int demo_cmd_execute(Demo_Console *sys)
if (!pparam_begin && !pparam_end) if (!pparam_begin && !pparam_end)
{ {
/*No Parameter,use default parameter to execute*/ /*No Parameter,use default parameter to execute*/
printf("[CMD]%s", console_tbl[i].cmd); printf("\n[CMD]%s\n", console_tbl[i].cmd);
for (j = 0; j < console_tbl[i].param_cnt; j++) for (j = 0; j < console_tbl[i].param_cnt; j++)
{ {
if (!((console_tbl[i].type >> j) & 0x1)) if (!((console_tbl[i].type >> j) & 0x1))
@ -363,6 +371,8 @@ int demo_cmd_execute(Demo_Console *sys)
} }
} }
printf("\n[CMD]%s\n", console_tbl[i].cmd);
ret = demo_call_fn((int (*)())console_tbl[i].callfn, param, console_tbl[i].param_cnt); ret = demo_call_fn((int (*)())console_tbl[i].callfn, param, console_tbl[i].param_cnt);
if(WM_FAILED == ret) if(WM_FAILED == ret)
{ {
@ -375,6 +385,7 @@ int demo_cmd_execute(Demo_Console *sys)
} }
else if (pparam_begin && !pparam_end) else if (pparam_begin && !pparam_end)
{ {
printf("\ndemo cmd short\n");
return DEMO_CONSOLE_SHORT_CMD; return DEMO_CONSOLE_SHORT_CMD;
} }
else else
@ -390,6 +401,7 @@ int demo_cmd_execute(Demo_Console *sys)
{ {
/*wrong cmd parameter,discard this cmd*/ /*wrong cmd parameter,discard this cmd*/
//demo_console_show_help(NULL); //demo_console_show_help(NULL);
printf("\nwrong cmd\n");
return DEMO_CONSOLE_WRONG_CMD; return DEMO_CONSOLE_WRONG_CMD;
} }
} }
@ -407,6 +419,7 @@ void demo_console_task(void *sdata)
demo_console_show_help(NULL); demo_console_show_help(NULL);
demo_console_malloc(); demo_console_malloc();
gstConsole.rptr = 0; gstConsole.rptr = 0;
gstConsole.rx_data_len = DEMO_CONSOLE_BUF_SIZE;
tls_uart_set_baud_rate(TLS_UART_0, 115200); tls_uart_set_baud_rate(TLS_UART_0, 115200);
tls_uart_rx_callback_register(TLS_UART_0, demo_console_rx, NULL); tls_uart_rx_callback_register(TLS_UART_0, demo_console_rx, NULL);
@ -416,22 +429,36 @@ void demo_console_task(void *sdata)
switch((u32)msg) switch((u32)msg)
{ {
case 1: case 1:
while(1)
{
ret = tls_uart_read(TLS_UART_0, gstConsole.rx_buf + gstConsole.rptr, gstConsole.rx_data_len); ret = tls_uart_read(TLS_UART_0, gstConsole.rx_buf + gstConsole.rptr, gstConsole.rx_data_len);
if(ret <= 0) if(ret <= 0)
break; break;
gstConsole.rx_data_len -= ret; gstConsole.rx_data_len -= ret;
gstConsole.rptr += ret; gstConsole.rptr += ret;
if(gstConsole.rx_data_len <= 0)
break;
tls_os_time_delay(20);
}
if(gstConsole.rptr == 0)
break;
ret = demo_cmd_execute(&gstConsole); //parse command and execute if needed ret = demo_cmd_execute(&gstConsole); //parse command and execute if needed
if((DEMO_CONSOLE_CMD == ret) || (DEMO_CONSOLE_WRONG_CMD == ret)) if(DEMO_CONSOLE_CMD == ret)
{ {
/*modify*/ /*modify*/
memset(gstConsole.rx_buf, 0, DEMO_CONSOLE_BUF_SIZE); /*After command finished transfering, clear buffer*/ //printf("Demo cmd is finished\r\n");
gstConsole.rptr = 0; }
else if(DEMO_CONSOLE_WRONG_CMD == ret)
{
//printf("Demo cmd is wrong\r\n");
} }
else if(DEMO_CONSOLE_SHORT_CMD == ret) else if(DEMO_CONSOLE_SHORT_CMD == ret)
{ {
//param not passed all, do nothing. //param not passed all, do nothing.
//printf("Demo cmd is short\r\n");
} }
memset(gstConsole.rx_buf, 0, DEMO_CONSOLE_BUF_SIZE); /*After command finished transfering, clear buffer*/
gstConsole.rptr = 0;
if(gstConsole.MsgNum) if(gstConsole.MsgNum)
gstConsole.MsgNum --; gstConsole.MsgNum --;

View File

@ -17,12 +17,89 @@
#if DEMO_ADC #if DEMO_ADC
#define TMAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
#define TMACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
int adc_input_voltage_cal_demo(u8 chan, signed short refvoltage)
{
int ret =0;
u8 mac[6];
tls_get_mac_addr(mac);
printf("Mac["TMACSTR"],Cch[%d], Refvol[%d] ", TMAC2STR(mac), chan, refvoltage);
ret = adc_offset_calibration(chan, refvoltage);
if (ret == 0)
{
printf("Calok ");
}
else
{
printf("Calerr \r\n");
return 0;
}
int voltage =0;
int i =0 ;
for (i = 0; i < 4; i++)
{
if (i != chan)
{
wm_adc_config(i);
voltage = adc_get_inputVolt(i);
printf("Mch[%d]-%d(mV) ", i, voltage);
}
}
printf("\r\n");
return 0;
}
int adc_input_voltage_multipoint_cal_demo(int chanused,int chan0ref, int chan1ref, int chan2ref, int chan3ref)
{
int ret =0;
u8 mac[6];
int refvol[4] = {chan0ref, chan1ref, chan2ref, chan3ref};
tls_get_mac_addr(mac);
printf("Mac["TMACSTR"],", TMAC2STR(mac));
for (int i = 0; i < 4; i++)
{
if (chanused&(1<<i))
{
printf("ch[%d], refvol[%d] ", i, refvol[i]);
}
}
ret = adc_multipoint_calibration(chanused, refvol);
if (ret == 0)
{
printf("Calok \r\n");
}
else
{
printf("Calerr \r\n");
return 0;
}
int voltage =0;
int i =0 ;
for (i = 0; i < 2; i++)
{
wm_adc_config(i);
voltage = adc_get_inputVolt(i);
printf("Mch[%d]-%d(mV) \r\n", i, voltage);
}
return 0;
}
int adc_input_voltage_demo(u8 chan) int adc_input_voltage_demo(u8 chan)
{ {
int voltage =0; int voltage =0;
if (chan <= 1) if (chan < 4)
{ {
wm_adc_config(chan); wm_adc_config(chan);
} }
@ -31,6 +108,15 @@ int adc_input_voltage_demo(u8 chan)
wm_adc_config(0); wm_adc_config(0);
wm_adc_config(1); wm_adc_config(1);
} }
else if (chan == 9)
{
wm_adc_config(2);
wm_adc_config(3);
}
else
{
return -1;
}
voltage = adc_get_inputVolt(chan); voltage = adc_get_inputVolt(chan);
if (voltage < 0) if (voltage < 0)
{ {

View File

@ -2,6 +2,7 @@
#include "wm_include.h" #include "wm_include.h"
#include "wm_demo.h" #include "wm_demo.h"
#include "wm_wifi_oneshot.h" #include "wm_wifi_oneshot.h"
#include "wm_param.h"
#if DEMO_CONNECT_NET #if DEMO_CONNECT_NET
static void con_net_status_changed_event(u8 status ) static void con_net_status_changed_event(u8 status )
@ -113,5 +114,63 @@ int demo_connect_net(char *ssid, char *pwd)
return WM_SUCCESS; return WM_SUCCESS;
} }
//acitve connect to specified AP, use command as: t-connet_ss("ssid","pwd", 10, 0, 0);
int demo_connect_net_with_specific_info(char *ssid, char *pwd, u32 timeout, u32 pci_en, u32 scan_mode)
{
struct tls_param_ip *ip_param = NULL;
u8 wireless_protocol = 0;
if (!ssid)
{
return WM_FAILED;
}
printf("\nssid:%s\n", ssid);
printf("password=%s\n", pwd);
tls_wifi_disconnect();
/*clear quick connect information because of scan_mode */
{
struct tls_param_quick_connect quick_connect;
quick_connect.quick_connect_en = FALSE;
quick_connect.chanId = 255;
tls_param_set(TLS_PARAM_ID_QUICK_CONNECT, &quick_connect, TRUE);
}
tls_param_get(TLS_PARAM_ID_WPROTOCOL, (void *) &wireless_protocol, TRUE);
if (TLS_PARAM_IEEE80211_INFRA != wireless_protocol)
{
tls_wifi_softap_destroy();
wireless_protocol = TLS_PARAM_IEEE80211_INFRA;
tls_param_set(TLS_PARAM_ID_WPROTOCOL, (void *) &wireless_protocol, FALSE);
}
tls_wifi_set_oneshot_flag(0);
ip_param = tls_mem_alloc(sizeof(struct tls_param_ip));
if (ip_param)
{
tls_param_get(TLS_PARAM_ID_IP, ip_param, FALSE);
ip_param->dhcp_enable = TRUE;
tls_param_set(TLS_PARAM_ID_IP, ip_param, FALSE);
tls_mem_free(ip_param);
}
tls_netif_add_status_event(con_net_status_changed_event);
/*configure if sta can connect open/wep AP*/
tls_wifi_cfg_connect_pci(pci_en);
/*configure the timeout that module connect AP during scanning*/
tls_wifi_cfg_connect_timeout(timeout);
/*configure if the module immediately connect AP after scan specific AP*/
tls_wifi_cfg_connect_scan_mode(scan_mode);
tls_wifi_connect((u8 *)ssid, strlen(ssid), (u8 *)pwd, strlen(pwd));
printf("\nplease wait connect net......\n");
return WM_SUCCESS;
}
#endif #endif

View File

@ -32,6 +32,12 @@ u32 http_snd_req(HTTPParameters ClientParams, HTTP_VERB verb, char *pSndData, u8
nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE; nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
break; break;
} }
/*
if((nRetCode = HTTPClientAddRequestHeaders(pHTTP,"media type", "application/json", 1))!= HTTP_CLIENT_SUCCESS)
{
break;
}
*/
// Set the Verb // Set the Verb
nRetCode = HTTPClientSetVerb(pHTTP, verb); nRetCode = HTTPClientSetVerb(pHTTP, verb);
if(nRetCode != HTTP_CLIENT_SUCCESS) if(nRetCode != HTTP_CLIENT_SUCCESS)

View File

@ -20,7 +20,7 @@
#include "wm_sockets.h" #include "wm_sockets.h"
#include "lwip/inet.h" #include "lwip/inet.h"
#include "wm_sockets2.0.3.h" #include "wm_sockets.h"
#include "HTTPClientWrapper.h" #include "HTTPClientWrapper.h"
#if DEMO_HTTPS #if DEMO_HTTPS

View File

@ -12,6 +12,7 @@
* Date : 2019-3-24 * Date : 2019-3-24
*****************************************************************************/ *****************************************************************************/
#include <string.h> #include <string.h>
#include "list.h"
#include "wm_include.h" #include "wm_include.h"
#include "wm_netif.h" #include "wm_netif.h"
#include "wm_demo.h" #include "wm_demo.h"
@ -19,14 +20,17 @@
#include "lwip/netif.h" #include "lwip/netif.h"
#include "wm_sockets.h" #include "wm_sockets.h"
#include "lwip/inet.h" #include "lwip/inet.h"
#include "wm_sockets2.0.3.h" #include "wm_sockets.h"
#include "libemqtt.h" #include "libemqtt.h"
#include "private-libwebsockets.h"
#include "libwebsockets.h"
#include "HTTPClient.h"
#if DEMO_MQTT #if DEMO_MQTT
#define MQTT_DEMO_TASK_PRIO 39 #define MQTT_DEMO_TASK_PRIO 39
#define MQTT_DEMO_TASK_SIZE 512 #define MQTT_DEMO_TASK_SIZE 2048
#define MQTT_DEMO_QUEUE_SIZE 4 #define MQTT_DEMO_QUEUE_SIZE 16
#define MQTT_DEMO_RECV_BUF_LEN_MAX 1024 #define MQTT_DEMO_RECV_BUF_LEN_MAX 1024
@ -36,26 +40,56 @@
#define MQTT_DEMO_READ_TIMEOUT (-1000) #define MQTT_DEMO_READ_TIMEOUT (-1000)
#define MQTT_DEMO_READ_TIME_SEC 1 #define MQTT_DEMO_READ_TIME_SEC 5
#define MQTT_DEMO_READ_TIME_US 0 #define MQTT_DEMO_READ_TIME_US 0
#define MQTT_DEMO_CLIENT_ID "wm_mqtt_client" #define MQTT_DEMO_CLIENT_ID "wm_mqtt_client"
#define MQTT_DEMO_TX_PUB_TOPIC "winnermicro/mqtt_tx_demo" #define MQTT_DEMO_TX_PUB_TOPIC "topic_tx"
#define MQTT_DEMO_RX_PUB_TOPIC "winnermicro/mqtt_rx_demo" #define MQTT_DEMO_RX_PUB_TOPIC "topic_rx"
#define MQTT_DEMO_SERVER_ADDR "mqtt.yichen.link" #define MQTT_DEMO_SERVER_ADDR "192.168.1.101"
#define MQTT_DEMO_SERVER_PORT 3883 #define MQTT_DEMO_SERVER_PORT_TCP 1883
#define MQTT_DEMO_SERVER_PORT_TLS 8883
#define MQTT_DEMO_SERVER_PORT_WS 8080
#define MQTT_DEMO_SERVER_PORT_WSS 8081
typedef enum _conn_type
{
MQTT_CONN_TYPE_TCP = 0,
MQTT_CONN_TYPE_TLS,
MQTT_CONN_TYPE_WS,
MQTT_CONN_TYPE_WSS,
}mqtt_conn_type;
typedef struct _mqtt_demo_context
{
mqtt_conn_type conn_type;
int mqtt_demo_socket_id;
tls_ssl_t *ssl;
struct lws* ws_context;
struct dl_list ws_tx_list;
struct dl_list ws_rx_list;
uint16_t server_port;
int (*connect)(struct _mqtt_demo_context *ctx, const struct sockaddr *name, socklen_t namelen,char *hostname);
int (*close_mqtt)(struct _mqtt_demo_context *ctx);
int (*send_packet)(int socket_info, const void *buf, unsigned int count);
int (*read_packet)(struct _mqtt_demo_context *ctx, uint8_t *buf, int buf_len, int sec, int us);
int mqtt_demo_mqtt_keepalive;
tls_os_timer_t *mqtt_demo_heartbeat_timer;
mqtt_broker_handle_t mqtt_demo_mqtt_broker;
uint8_t mqtt_demo_packet_buffer[MQTT_DEMO_RECV_BUF_LEN_MAX];
}mqtt_demo_context_t;
static bool mqtt_demo_inited = FALSE; static bool mqtt_demo_inited = FALSE;
static OS_STK mqtt_demo_task_stk[MQTT_DEMO_TASK_SIZE]; static OS_STK mqtt_demo_task_stk[MQTT_DEMO_TASK_SIZE];
static tls_os_queue_t *mqtt_demo_task_queue = NULL; static tls_os_queue_t *mqtt_demo_task_queue = NULL;
static tls_os_timer_t *mqtt_demo_heartbeat_timer = NULL; /*static tls_os_timer_t *mqtt_demo_heartbeat_timer = NULL;
static int mqtt_demo_socket_id; static int mqtt_demo_socket_id;
static int mqtt_demo_mqtt_keepalive = 300; static int mqtt_demo_mqtt_keepalive = 300;
static mqtt_broker_handle_t mqtt_demo_mqtt_broker; static mqtt_broker_handle_t mqtt_demo_mqtt_broker;
static uint8_t mqtt_demo_packet_buffer[MQTT_DEMO_RECV_BUF_LEN_MAX]; static uint8_t mqtt_demo_packet_buffer[MQTT_DEMO_RECV_BUF_LEN_MAX];*/
extern struct netif *tls_get_netif(void); extern struct netif *tls_get_netif(void);
extern int wm_printf(const char *fmt, ...); extern int wm_printf(const char *fmt, ...);
@ -83,24 +117,283 @@ static void mqtt_demo_net_status(u8 status)
static void mqtt_demo_heart_timer(void *ptmr, void *parg) static void mqtt_demo_heart_timer(void *ptmr, void *parg)
{ {
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_HEART, 0); tls_os_status_t os_status = tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_HEART, 0);
wm_printf("==> heart timer %d\n", os_status);
} }
static int mqtt_demo_close_socket(mqtt_broker_handle_t *broker) typedef struct _ws_packet
{ {
int fd = broker->socketid; struct dl_list list;
char *buf;
int buf_len;
}ws_packet;
static int lwsCallbackNotify(struct lws *wsi,enum lws_callback_reasons reason,void *user, void *in, size_t len)
{
mqtt_demo_context_t *ctx = (mqtt_demo_context_t *)user;
u32 cpu_sr;
ws_packet *packet = NULL;
//wm_printf("%s: enter ctx 0x%x, reason %d\n", __func__, ctx, reason);
switch (reason)
{
case LWS_CALLBACK_CLIENT_ESTABLISHED:
wm_printf("CLIENT_ESTABLISHED\n");
//now_state = HANDLE_SESSION;
break;
case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
wm_printf("CLIENT_CONNECTION_ERROR\n");
//now_state = EXIT_SESSION;
break;
case LWS_CALLBACK_CLOSED:
wm_printf("CLOSED\n");
//now_state = EXIT_SESSION;
break;
case LWS_CALLBACK_CLIENT_RECEIVE:
//((char *)in)[len] = '\0';
wm_printf("lws receive len %d\n", len);
do
{
packet = (ws_packet *)tls_mem_alloc(sizeof(ws_packet));
if(packet == NULL)
{
wm_printf("%s: malloc packet error\n", __func__);
break;
}
dl_list_init(&packet->list);
packet->buf = tls_mem_alloc(len);
if(packet->buf == NULL)
{
tls_mem_free(packet);
wm_printf("%s: malloc packet buffer error\n", __func__);
break;
}
memset(packet->buf, 0, len);
memcpy(packet->buf, in, len);
packet->buf_len = len;
cpu_sr = tls_os_set_critical();
dl_list_add_tail(&ctx->ws_rx_list, &packet->list);
tls_os_release_critical(cpu_sr);
//wm_printf("recv packets count %d\n", dl_list_len(&ctx->ws_rx_list));
}while(0);
break;
case LWS_CALLBACK_CLIENT_WRITEABLE:
//wm_printf("lws writeable list count %d\n", dl_list_len(&ctx->ws_tx_list));
packet = dl_list_first(&ctx->ws_tx_list, ws_packet, list);
//wm_printf("dl_list_first packet 0x%x\n", packet);
if(packet != NULL)
{
wm_printf("lws_write ");
int n = lws_write( wsi, (unsigned char *)packet->buf + LWS_SEND_BUFFER_PRE_PADDING, packet->buf_len, LWS_WRITE_BINARY );
wm_printf("ret %d\n", n);
if( n <= 0 )
{
wm_printf("send error %d\r\n", n);
}
cpu_sr = tls_os_set_critical();
dl_list_del(&packet->list);
tls_os_release_critical(cpu_sr);
tls_mem_free(packet->buf);
tls_mem_free(packet);
}
break;
default:
break;
}
return 0;
}
static struct lws_protocols protocols[] = {
{
"mqtt",
lwsCallbackNotify,
0,
2048,
0,
NULL
},
{ NULL, NULL, 0, 0, 0, NULL } /* end */
};
#define LWS_SERVER_PATH "/"
static int mqtt_ws_connect(mqtt_demo_context_t *ctx, const struct sockaddr *name, socklen_t namelen,char *hostname)
{
struct lws_client_connect_info connInfo;
struct lws_context_creation_info info;
struct lws_context *lwscontext = NULL;
memset(&info, 0, sizeof(info) );
info.port = CONTEXT_PORT_NO_LISTEN;
if(ctx->server_port == MQTT_DEMO_SERVER_PORT_WSS)
{
info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
}
protocols[0].user = ctx;
protocols[0].per_session_data_size = sizeof(mqtt_demo_context_t *);
wm_printf("protocols[0].user 0x%x\n", protocols[0].user);
info.protocols = protocols;
info.max_http_header_data=512;
info.max_http_header_pool=4;
lwscontext = lws_create_context(&info);
memset(&connInfo, 0 , sizeof(connInfo) );
connInfo.context = lwscontext;
connInfo.address = MQTT_DEMO_SERVER_ADDR;
connInfo.port = ctx->server_port;
connInfo.ssl_connection = ctx->server_port == MQTT_DEMO_SERVER_PORT_WSS ? 1 : 0;
connInfo.path = LWS_SERVER_PATH;
connInfo.host = MQTT_DEMO_SERVER_ADDR;
connInfo.userdata = ctx;
connInfo.protocol = protocols[0].name;
connInfo.ietf_version_or_minus_one=13;
connInfo.origin = MQTT_DEMO_SERVER_ADDR;
ctx->ws_context = lws_client_connect_via_info( &connInfo );
if(ctx->ws_context == NULL )
{
lws_context_destroy(lwscontext);
ctx->ws_context->context = NULL;
return -1;
}
return 0;
}
static int mqtt_ws_close_socket(mqtt_demo_context_t *ctx)
{
wm_printf("EXIT_SESSION ctx 0x%x\n", ctx);
if(ctx->ws_context != NULL )
{
if( ctx->ws_context->context != NULL ) {
lws_context_destroy(ctx->ws_context->context);
ctx->ws_context->context = NULL;
}
lws_free(ctx->ws_context);
ctx->ws_context = NULL;
}
return 0;
}
static int mqtt_ws_send_packet(int socket_info, const void *buf, unsigned int count)
{
mqtt_demo_context_t *ctx = (mqtt_demo_context_t *)socket_info;
u32 cpu_sr;
ws_packet *packet = (ws_packet *)tls_mem_alloc(sizeof(ws_packet));
//wm_printf("%s: enter ctx 0x%x\n", __func__, ctx);
if(packet == NULL)
{
wm_printf("%s: malloc packet error\n", __func__);
return -1;
}
dl_list_init(&packet->list);
packet->buf = tls_mem_alloc(count + LWS_SEND_BUFFER_PRE_PADDING + 4);
if(packet->buf == NULL)
{
tls_mem_free(packet);
wm_printf("%s: malloc packet buffer error\n", __func__);
return -1;
}
memset(packet->buf, 0, count + LWS_SEND_BUFFER_PRE_PADDING + 4);
memcpy(packet->buf + LWS_SEND_BUFFER_PRE_PADDING, buf, count);
packet->buf_len = count;
cpu_sr = tls_os_set_critical();
dl_list_add_tail(&ctx->ws_tx_list, &packet->list);
tls_os_release_critical(cpu_sr);
//wm_printf("send packets count %d\n", dl_list_len(&ctx->ws_tx_list));
lws_callback_on_writable(ctx->ws_context);
return count;
}
static int mqtt_ws_read_packet(mqtt_demo_context_t *ctx, uint8_t *buf, int buf_len, int sec, int us)
{
u32 cpu_sr;
ws_packet *packet = NULL;
int start_tick = tls_os_get_time();
volatile int now_tick;
int timeout = (sec*1000 + us/1000) * HZ / 1000;
//wm_printf("%s: enter ctx 0x%x, timeout %d, start_tick %d\n", __func__, ctx, timeout, start_tick);
do
{
lws_service(ctx->ws_context->context, 250);
lws_callback_on_writable(ctx->ws_context);
packet = dl_list_first(&ctx->ws_rx_list, ws_packet, list);
//wm_printf("%s dl_list_first packet 0x%x\n", __func__, packet);
if(packet != NULL)
{
if(buf_len > packet->buf_len)
{
buf_len = packet->buf_len;
}
memcpy(buf, packet->buf, buf_len);
cpu_sr = tls_os_set_critical();
dl_list_del(&packet->list);
tls_os_release_critical(cpu_sr);
tls_mem_free(packet->buf);
tls_mem_free(packet);
return buf_len;
}
tls_os_time_delay(10);
now_tick = tls_os_get_time();
//wm_printf("%s tick now %d | %d < %d\n", __func__, now_tick, (now_tick - start_tick), timeout);
}while((now_tick - start_tick) < timeout);
//wm_printf("%s return timeout\n", __func__);
return MQTT_DEMO_READ_TIMEOUT;
}
static int mqtt_tls_connect(mqtt_demo_context_t *ctx, const struct sockaddr *name, socklen_t namelen,char *hostname)
{
return HTTPWrapperSSLConnect(&ctx->ssl, ctx->mqtt_demo_socket_id, name, namelen, hostname);
}
static int mqtt_tls_close_socket(mqtt_demo_context_t *ctx)
{
return HTTPWrapperSSLClose(ctx->ssl, ctx->mqtt_demo_socket_id);
}
static int mqtt_tls_send_packet(int socket_info, const void *buf, unsigned int count)
{
mqtt_demo_context_t *ctx = (mqtt_demo_context_t *)socket_info;
return HTTPWrapperSSLSend(ctx->ssl, ctx->mqtt_demo_socket_id, (char *)buf, count, 0);
}
static int mqtt_tls_read_packet(mqtt_demo_context_t *ctx, uint8_t *buf, int buf_len, int sec, int us)
{
int ret = HTTPWrapperSSLRecv(ctx->ssl, ctx->mqtt_demo_socket_id, (char *)buf, buf_len, 0);
if (ret <= 0)
{
if (SOCKET_SSL_MORE_DATA == ret)
{
ret = buf_len;
}
else if(MBEDTLS_ERR_SSL_TIMEOUT == ret)
{
ret = MQTT_DEMO_READ_TIMEOUT;
}
else
{
wm_printf("tls recv %d closed\r\n", ret);
}
}
return ret;
}
static int mqtt_tcp_connect(mqtt_demo_context_t *ctx, const struct sockaddr *name, socklen_t namelen,char *hostname)
{
return connect(ctx->mqtt_demo_socket_id, name, namelen);
}
static int mqtt_tcp_close_socket(mqtt_demo_context_t *ctx)
{
int fd = ctx->mqtt_demo_socket_id;
return closesocket(fd); return closesocket(fd);
} }
static int mqtt_tcp_send_packet(int socket_info, const void *buf, unsigned int count)
static int mqtt_demo_send_packet(int socket_info, const void *buf, unsigned int count)
{ {
int fd = socket_info; mqtt_demo_context_t *ctx = (mqtt_demo_context_t *)socket_info;
return send(fd, buf, count, 0); return send(ctx->mqtt_demo_socket_id, buf, count, 0);
} }
static int mqtt_tcp_read_packet(mqtt_demo_context_t *ctx, uint8_t *buf, int buf_len, int sec, int us)
static int mqtt_demo_read_packet(int sec, int us)
{ {
int ret = 0; int ret = 0;
int bytes_rcvd;
int fd = ctx->mqtt_demo_socket_id;
if ((sec >= 0) || (us >= 0)) if ((sec >= 0) || (us >= 0))
{ {
@ -109,14 +402,14 @@ static int mqtt_demo_read_packet(int sec, int us)
// Initialize the file descriptor set // Initialize the file descriptor set
FD_ZERO (&readfds); FD_ZERO (&readfds);
FD_SET (mqtt_demo_socket_id, &readfds); FD_SET (fd, &readfds);
// Initialize the timeout data structure // Initialize the timeout data structure
tmv.tv_sec = sec; tmv.tv_sec = sec;
tmv.tv_usec = us; tmv.tv_usec = us;
// select returns 0 if timeout, 1 if input available, -1 if error // select returns 0 if timeout, 1 if input available, -1 if error
ret = select(mqtt_demo_socket_id + 1, &readfds, NULL, NULL, &tmv); ret = select(fd + 1, &readfds, NULL, NULL, &tmv);
if(ret < 0) if(ret < 0)
return -2; return -2;
else if(ret == 0) else if(ret == 0)
@ -124,14 +417,24 @@ static int mqtt_demo_read_packet(int sec, int us)
} }
int total_bytes = 0, bytes_rcvd, packet_length; if((bytes_rcvd = recv(fd, buf, buf_len, 0)) <= 0)
memset(mqtt_demo_packet_buffer, 0, sizeof(mqtt_demo_packet_buffer));
if((bytes_rcvd = recv(mqtt_demo_socket_id, (mqtt_demo_packet_buffer + total_bytes), MQTT_DEMO_RECV_BUF_LEN_MAX, 0)) <= 0)
{ {
//printf("%d, %d\r\n", bytes_rcvd, mqtt_demo_socket_id); //printf("%d, %d\r\n", bytes_rcvd, mqtt_demo_socket_id);
return -1; return -1;
} }
return bytes_rcvd;
}
static int mqtt_demo_recv_parse(mqtt_demo_context_t *ctx, int sec, int us)
{
int total_bytes = 0, bytes_rcvd, packet_length;
memset(ctx->mqtt_demo_packet_buffer, 0, sizeof(ctx->mqtt_demo_packet_buffer));
bytes_rcvd = ctx->read_packet(ctx, (ctx->mqtt_demo_packet_buffer + total_bytes), MQTT_DEMO_RECV_BUF_LEN_MAX, sec, us);
if(bytes_rcvd <= 0)
{
return bytes_rcvd;
}
//printf("recv [len=%d] : %s\n", bytes_rcvd, mqtt_demo_packet_buffer); //printf("recv [len=%d] : %s\n", bytes_rcvd, mqtt_demo_packet_buffer);
total_bytes += bytes_rcvd; // Keep tally of total bytes total_bytes += bytes_rcvd; // Keep tally of total bytes
if (total_bytes < 2) if (total_bytes < 2)
@ -139,8 +442,8 @@ static int mqtt_demo_read_packet(int sec, int us)
// now we have the full fixed header in mqtt_demo_packet_buffer // now we have the full fixed header in mqtt_demo_packet_buffer
// parse it for remaining length and number of bytes // parse it for remaining length and number of bytes
uint16_t rem_len = mqtt_parse_rem_len(mqtt_demo_packet_buffer); uint16_t rem_len = mqtt_parse_rem_len(ctx->mqtt_demo_packet_buffer);
uint8_t rem_len_bytes = mqtt_num_rem_len_bytes(mqtt_demo_packet_buffer); uint8_t rem_len_bytes = mqtt_num_rem_len_bytes(ctx->mqtt_demo_packet_buffer);
//packet_length = mqtt_demo_packet_buffer[1] + 2; // Remaining length + fixed header length //packet_length = mqtt_demo_packet_buffer[1] + 2; // Remaining length + fixed header length
// total packet length = remaining length + byte 1 of fixed header + remaning length part of fixed header // total packet length = remaining length + byte 1 of fixed header + remaning length part of fixed header
@ -148,7 +451,7 @@ static int mqtt_demo_read_packet(int sec, int us)
while(total_bytes < packet_length) // Reading the packet while(total_bytes < packet_length) // Reading the packet
{ {
if((bytes_rcvd = recv(mqtt_demo_socket_id, (mqtt_demo_packet_buffer + total_bytes), MQTT_DEMO_RECV_BUF_LEN_MAX, 0)) <= 0) if((bytes_rcvd = ctx->read_packet(ctx, (ctx->mqtt_demo_packet_buffer + total_bytes), MQTT_DEMO_RECV_BUF_LEN_MAX, sec, us)) <= 0)
return -1; return -1;
total_bytes += bytes_rcvd; // Keep tally of total bytes total_bytes += bytes_rcvd; // Keep tally of total bytes
} }
@ -156,19 +459,19 @@ static int mqtt_demo_read_packet(int sec, int us)
return packet_length; return packet_length;
} }
static int mqtt_demo_init_socket(mqtt_broker_handle_t *broker, const char *hostname, short port, int keepalive) static int mqtt_demo_init_socket(mqtt_demo_context_t *ctx, const char *hostname, short port, int keepalive)
{ {
int flag = 1; int flag = 1;
struct hostent *hp; struct hostent *hp;
// Create the socket // Create the socket
if((mqtt_demo_socket_id = socket(PF_INET, SOCK_STREAM, 0)) < 0) if((ctx->mqtt_demo_socket_id = socket(PF_INET, SOCK_STREAM, 0)) < 0)
return -1; return -1;
// Disable Nagle Algorithm // Disable Nagle Algorithm
if (setsockopt(mqtt_demo_socket_id, IPPROTO_TCP, 0x01, (char *)&flag, sizeof(flag)) < 0) if (setsockopt(ctx->mqtt_demo_socket_id, IPPROTO_TCP, 0x01, (char *)&flag, sizeof(flag)) < 0)
{ {
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -2; return -2;
} }
@ -176,7 +479,7 @@ static int mqtt_demo_init_socket(mqtt_broker_handle_t *broker, const char *hostn
hp = gethostbyname(hostname); hp = gethostbyname(hostname);
if (hp == NULL ) if (hp == NULL )
{ {
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -2; return -2;
} }
@ -187,30 +490,31 @@ static int mqtt_demo_init_socket(mqtt_broker_handle_t *broker, const char *hostn
memcpy(&(socket_address.sin_addr), hp->h_addr, hp->h_length); memcpy(&(socket_address.sin_addr), hp->h_addr, hp->h_length);
// Connect the socket // Connect the socket
if((connect(mqtt_demo_socket_id, (struct sockaddr *)&socket_address, sizeof(socket_address))) < 0) if((ctx->connect(ctx, (struct sockaddr *)&socket_address, sizeof(socket_address), NULL)) < 0)
{ {
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -1; return -1;
} }
// MQTT stuffs // MQTT stuffs
mqtt_set_alive(broker, mqtt_demo_mqtt_keepalive); mqtt_set_alive(&ctx->mqtt_demo_mqtt_broker, ctx->mqtt_demo_mqtt_keepalive);
broker->socketid = mqtt_demo_socket_id; ctx->mqtt_demo_mqtt_broker.socketid = (int)ctx;
broker->mqttsend = mqtt_demo_send_packet; ctx->mqtt_demo_mqtt_broker.mqttsend = ctx->send_packet;
//wm_printf("socket id = %d\n", mqtt_demo_socket_id); //wm_printf("socket id = %d\n", mqtt_demo_socket_id);
return 0; return 0;
} }
static int mqtt_demo_init(void) static int mqtt_demo_init(mqtt_demo_context_t *ctx)
{ {
int packet_length, ret = 0; int packet_length, ret = 0;
uint16_t msg_id, msg_id_rcv; uint16_t msg_id, msg_id_rcv;
wm_printf("step1: init mqtt lib.\r\n"); wm_printf("step1: init mqtt lib.\r\n");
mqtt_init(&mqtt_demo_mqtt_broker, MQTT_DEMO_CLIENT_ID); mqtt_init(&ctx->mqtt_demo_mqtt_broker, MQTT_DEMO_CLIENT_ID);
mqtt_init_auth(&ctx->mqtt_demo_mqtt_broker, "admin", "password");
wm_printf("step2: establishing TCP connection.\r\n"); wm_printf("step2: establishing TCP connection.\r\n");
ret = mqtt_demo_init_socket(&mqtt_demo_mqtt_broker, MQTT_DEMO_SERVER_ADDR, MQTT_DEMO_SERVER_PORT, mqtt_demo_mqtt_keepalive); ret = mqtt_demo_init_socket(ctx, MQTT_DEMO_SERVER_ADDR, ctx->server_port, ctx->mqtt_demo_mqtt_keepalive);
if(ret) if(ret)
{ {
wm_printf("init_socket ret=%d\n", ret); wm_printf("init_socket ret=%d\n", ret);
@ -218,96 +522,117 @@ static int mqtt_demo_init(void)
} }
wm_printf("step3: establishing mqtt connection.\r\n"); wm_printf("step3: establishing mqtt connection.\r\n");
ret = mqtt_connect(&mqtt_demo_mqtt_broker); ret = mqtt_connect(&ctx->mqtt_demo_mqtt_broker);
if(ret) if(ret)
{ {
wm_printf("mqtt_connect ret=%d\n", ret); wm_printf("mqtt_connect ret=%d\n", ret);
return -5; return -5;
} }
packet_length = mqtt_demo_read_packet(MQTT_DEMO_READ_TIME_SEC, MQTT_DEMO_READ_TIME_US); packet_length = mqtt_demo_recv_parse(ctx, MQTT_DEMO_READ_TIME_SEC, MQTT_DEMO_READ_TIME_US);
if(packet_length < 0) if(packet_length < 0)
{ {
wm_printf("Error(%d) on read packet!\n", packet_length); wm_printf("Error(%d) on read packet!\n", packet_length);
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -1; return -1;
} }
if(MQTTParseMessageType(mqtt_demo_packet_buffer) != MQTT_MSG_CONNACK) if(MQTTParseMessageType(ctx->mqtt_demo_packet_buffer) != MQTT_MSG_CONNACK)
{ {
wm_printf("CONNACK expected!\n"); wm_printf("CONNACK expected!\n");
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -2; return -2;
} }
if(mqtt_demo_packet_buffer[3] != 0x00) if(ctx->mqtt_demo_packet_buffer[3] != 0x00)
{ {
wm_printf("CONNACK failed!\n"); wm_printf("CONNACK failed!\n");
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -2; return -2;
} }
wm_printf("step4: subscribe mqtt\r\n"); wm_printf("step4: subscribe mqtt\r\n");
mqtt_subscribe(&mqtt_demo_mqtt_broker, MQTT_DEMO_TX_PUB_TOPIC, &msg_id); mqtt_subscribe(&ctx->mqtt_demo_mqtt_broker, MQTT_DEMO_TX_PUB_TOPIC, &msg_id);
packet_length = mqtt_demo_read_packet(MQTT_DEMO_READ_TIME_SEC, MQTT_DEMO_READ_TIME_US); packet_length = mqtt_demo_recv_parse(ctx, MQTT_DEMO_READ_TIME_SEC, MQTT_DEMO_READ_TIME_US);
if(packet_length < 0) if(packet_length < 0)
{ {
wm_printf("Error(%d) on read packet!\n", packet_length); wm_printf("Error(%d) on read packet!\n", packet_length);
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -1; return -1;
} }
if(MQTTParseMessageType(mqtt_demo_packet_buffer) != MQTT_MSG_SUBACK) if(MQTTParseMessageType(ctx->mqtt_demo_packet_buffer) != MQTT_MSG_SUBACK)
{ {
wm_printf("SUBACK expected!\n"); wm_printf("SUBACK expected!\n");
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -2; return -2;
} }
msg_id_rcv = mqtt_parse_msg_id(mqtt_demo_packet_buffer); msg_id_rcv = mqtt_parse_msg_id(ctx->mqtt_demo_packet_buffer);
if(msg_id != msg_id_rcv) if(msg_id != msg_id_rcv)
{ {
wm_printf("%d message id was expected, but %d message id was found!\n", msg_id, msg_id_rcv); wm_printf("%d message id was expected, but %d message id was found!\n", msg_id, msg_id_rcv);
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
return -3; return -3;
} }
#if 0
wm_printf("step4+: unsubscribe mqtt\r\n");
mqtt_unsubscribe(&ctx->mqtt_demo_mqtt_broker, MQTT_DEMO_TX_PUB_TOPIC, &msg_id);
wm_printf("step5: start the Heart-beat preservation timer\r\n"); packet_length = mqtt_demo_recv_parse(ctx, MQTT_DEMO_READ_TIME_SEC, MQTT_DEMO_READ_TIME_US);
ret = tls_os_timer_create(&mqtt_demo_heartbeat_timer, if(packet_length < 0)
{
wm_printf("Error(%d) on read packet!\n", packet_length);
ctx->close_mqtt(ctx);
return -1;
}
if(MQTTParseMessageType(ctx->mqtt_demo_packet_buffer) != MQTT_MSG_UNSUBACK)
{
wm_printf("UNSUBACK expected!\n");
ctx->close_mqtt(ctx);
return -2;
}
#endif
wm_printf("step5: start the Heart-beat preservation timer ");
ret = tls_os_timer_create(&ctx->mqtt_demo_heartbeat_timer,
mqtt_demo_heart_timer, mqtt_demo_heart_timer,
NULL, (10 * HZ), TRUE, NULL); NULL, (10 * HZ), TRUE, NULL);
if (TLS_OS_SUCCESS == ret) if (TLS_OS_SUCCESS == ret)
tls_os_timer_start(mqtt_demo_heartbeat_timer); {
tls_os_timer_start(ctx->mqtt_demo_heartbeat_timer);
}
wm_printf("%s\r\n" , TLS_OS_SUCCESS == ret ? "ok" : "error");
/* step6: push mqtt subscription (when a subscription message is received) */ /* step6: push mqtt subscription (when a subscription message is received) */
return 0; return 0;
} }
static int mqtt_demo_loop(void) static int mqtt_demo_loop(mqtt_demo_context_t *ctx)
{ {
int packet_length = 0; int packet_length = 0;
int counter = 0; int counter = 0;
counter++; counter++;
packet_length = mqtt_demo_read_packet(0, 1); packet_length = mqtt_demo_recv_parse(ctx, 1, 1);
if(packet_length > 0) if(packet_length > 0)
{ {
//wm_printf("recvd Packet Header: 0x%x...\n", mqtt_demo_packet_buffer[0]); //wm_printf("recvd Packet Header: 0x%x...\n", mqtt_demo_packet_buffer[0]);
if (MQTTParseMessageType(mqtt_demo_packet_buffer) == MQTT_MSG_PUBLISH) if (MQTTParseMessageType(ctx->mqtt_demo_packet_buffer) == MQTT_MSG_PUBLISH)
{ {
uint8_t topic[100], *msg; uint8_t topic[100], *msg;
uint16_t len; uint16_t len;
len = mqtt_parse_pub_topic(mqtt_demo_packet_buffer, topic); len = mqtt_parse_pub_topic(ctx->mqtt_demo_packet_buffer, topic);
topic[len] = '\0'; // for printf topic[len] = '\0'; // for printf
len = mqtt_parse_publish_msg(mqtt_demo_packet_buffer, &msg); len = mqtt_parse_publish_msg(ctx->mqtt_demo_packet_buffer, &msg);
msg[len] = '\0'; // for printf msg[len] = '\0'; // for printf
wm_printf("recvd: %s >>> %s\n", topic, msg); wm_printf("recvd: %s >>> %s\n", topic, msg);
mqtt_publish(&mqtt_demo_mqtt_broker, (const char *)MQTT_DEMO_RX_PUB_TOPIC, (const char *)msg, len, 0); mqtt_publish(&ctx->mqtt_demo_mqtt_broker, (const char *)MQTT_DEMO_RX_PUB_TOPIC, (const char *)msg, len, 0);
wm_printf("pushed: %s <<< %s\n", MQTT_DEMO_RX_PUB_TOPIC, msg); wm_printf("pushed: %s <<< %s\n", MQTT_DEMO_RX_PUB_TOPIC, msg);
} }
@ -320,8 +645,8 @@ static int mqtt_demo_loop(void)
else if(packet_length == -1) else if(packet_length == -1)
{ {
wm_printf("mqtt error:(%d), stop mqtt demo!\n", packet_length); wm_printf("mqtt error:(%d), stop mqtt demo!\n", packet_length);
tls_os_timer_stop(mqtt_demo_heartbeat_timer); tls_os_timer_stop(ctx->mqtt_demo_heartbeat_timer);
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker); ctx->close_mqtt(ctx);
} }
return 0; return 0;
@ -332,7 +657,48 @@ static void mqtt_demo_task(void *p)
int ret; int ret;
void *msg; void *msg;
struct tls_ethif *ether_if = tls_netif_get_ethif(); struct tls_ethif *ether_if = tls_netif_get_ethif();
mqtt_demo_context_t *ctx = tls_mem_alloc(sizeof(mqtt_demo_context_t));
if(ctx == NULL)
{
wm_printf("MQTT Demo context malloc Error!\n");
return;
}
memset(ctx, 0, sizeof(mqtt_demo_context_t));
ctx->conn_type = (mqtt_conn_type)p;
wm_printf("conn_type %u ctx 0x%x mqtt_demo_socket_id 0x%x\n", ctx->conn_type, ctx, (int)&ctx->mqtt_demo_socket_id);
switch(ctx->conn_type)
{
case MQTT_CONN_TYPE_TCP:
ctx->connect = mqtt_tcp_connect;
ctx->close_mqtt = mqtt_tcp_close_socket;
ctx->send_packet = mqtt_tcp_send_packet;
ctx->read_packet = mqtt_tcp_read_packet;
ctx->server_port = MQTT_DEMO_SERVER_PORT_TCP;
break;
case MQTT_CONN_TYPE_TLS:
ctx->connect = mqtt_tls_connect;
ctx->close_mqtt = mqtt_tls_close_socket;
ctx->send_packet = mqtt_tls_send_packet;
ctx->read_packet = mqtt_tls_read_packet;
ctx->server_port = MQTT_DEMO_SERVER_PORT_TLS;
break;
case MQTT_CONN_TYPE_WS:
case MQTT_CONN_TYPE_WSS:
ctx->connect = mqtt_ws_connect;
ctx->close_mqtt = mqtt_ws_close_socket;
ctx->send_packet = mqtt_ws_send_packet;
ctx->read_packet = mqtt_ws_read_packet;
ctx->server_port = MQTT_CONN_TYPE_WS == ctx->conn_type ? MQTT_DEMO_SERVER_PORT_WS : MQTT_DEMO_SERVER_PORT_WSS;
break;
default:
wm_printf("conn_type %u is not supported error!\n");
return;
}
ctx->mqtt_demo_socket_id = -1;
ctx->mqtt_demo_mqtt_keepalive = 300;
dl_list_init(&ctx->ws_tx_list);
dl_list_init(&ctx->ws_rx_list);
if (ether_if->status) if (ether_if->status)
{ {
wm_printf("sta ip: %v\n", ether_if->ip_addr.addr); wm_printf("sta ip: %v\n", ether_if->ip_addr.addr);
@ -349,7 +715,7 @@ static void mqtt_demo_task(void *p)
case MQTT_DEMO_CMD_START: case MQTT_DEMO_CMD_START:
do do
{ {
ret = mqtt_demo_init(); ret = mqtt_demo_init(ctx);
if (ret) if (ret)
break; break;
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0); tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0);
@ -358,10 +724,10 @@ static void mqtt_demo_task(void *p)
break; break;
case MQTT_DEMO_CMD_HEART: case MQTT_DEMO_CMD_HEART:
wm_printf("send heart ping\r\n"); wm_printf("send heart ping\r\n");
mqtt_ping(&mqtt_demo_mqtt_broker); mqtt_ping(&ctx->mqtt_demo_mqtt_broker);
break; break;
case MQTT_DEMO_CMD_LOOP: case MQTT_DEMO_CMD_LOOP:
mqtt_demo_loop(); mqtt_demo_loop(ctx);
break; break;
default: default:
break; break;
@ -372,16 +738,16 @@ static void mqtt_demo_task(void *p)
//mqtt demo //mqtt demo
//测试服务器:mqtt.yichen.link:3883 //测试服务器:mqtt.yichen.link:3883
//服务器端用于发送的订阅主题为:winnermicro/mqtt_tx_demo //服务器端用于发送的订阅主题为:winnermicro/mqtt_tx_demo
//服务器端用于接收的订阅主题为:winnermicro/mqtt_rx_demo //服务器端用于接收的订阅主题为:winnermicro/mqtt_rx_demo
//工作流程: 接收到winnermicro/mqtt_tx_demo推送的消息后打印在屏幕上并再次推送到winnermicro/mqtt_rx_demo //工作流程: 接收到winnermicro/mqtt_tx_demo推送的消息后打印在屏幕上并再次推送到winnermicro/mqtt_rx_demo
int mqtt_demo(void) int mqtt_demo(int type)
{ {
if (!mqtt_demo_inited) if (!mqtt_demo_inited)
{ {
tls_os_task_create(NULL, NULL, mqtt_demo_task, tls_os_task_create(NULL, NULL, mqtt_demo_task,
NULL, (void *)mqtt_demo_task_stk, /* task's stack start address */ (void *)type, (void *)mqtt_demo_task_stk, /* task's stack start address */
MQTT_DEMO_TASK_SIZE * sizeof(u32), /* task's stack size, unit:byte */ MQTT_DEMO_TASK_SIZE * sizeof(u32), /* task's stack size, unit:byte */
MQTT_DEMO_TASK_PRIO, 0); MQTT_DEMO_TASK_PRIO, 0);

View File

@ -152,6 +152,286 @@ end:
tls_mem_free(buf1); tls_mem_free(buf1);
} }
} }
static void wifi_scan_format2_handler(void)
{
char *buf = NULL;
char *buf1 = NULL;
u32 buflen;
int i, j;
int err;
u8 ssid[33];
struct tls_scan_bss_format2_t *wsr;
struct tls_bss_info_format2_t *bss_info;
buflen = 2000;
buf = tls_mem_alloc(buflen);
if (!buf)
{
goto end;
}
buf1 = tls_mem_alloc(300);
if(!buf1)
{
goto end;
}
memset(buf1, 0, 300);
err = tls_wifi_get_scan_rslt_format2((u8 *)buf, buflen);
if (err)
{
goto end;
}
wsr = (struct tls_scan_bss_format2_t *)buf;
bss_info = (struct tls_bss_info_format2_t *)(buf + 8);
printf("\n");
for(i = 0; i < wsr->count; i++)
{
j = sprintf(buf1, "(%d,", bss_info->ecn);
memcpy(ssid, bss_info->ssid, bss_info->ssid_len);
ssid[bss_info->ssid_len] = '\0';
j += sprintf(buf1 + j, "%s", ssid);
j += sprintf(buf1 + j, ",%d, ", (signed char)bss_info->rssi);
j += sprintf(buf1 + j, "\"%02x:%02x:%02x:%02x:%02x:%02x\", ", bss_info->bssid[0], bss_info->bssid[1],
bss_info->bssid[2], bss_info->bssid[3], bss_info->bssid[4], bss_info->bssid[5]);
j += sprintf(buf1 + j, "%d, ", bss_info->channel);
j += sprintf(buf1 + j, "%d, ", bss_info->group_cipher);
j += sprintf(buf1 + j, "%d, ", bss_info->pairwise_cipher);
j += sprintf(buf1 + j, "%d, ", bss_info->bgn);
j += sprintf(buf1 + j, "%d,", bss_info->wps_support);
j += sprintf(buf1 + j, "%d,", bss_info->freq_offset);
j += sprintf(buf1 + j, "%d)", bss_info->freqcal_val);
printf("%s\n", buf1);
bss_info ++;
}
end:
if(buf)
{
tls_mem_free(buf);
}
if(buf1)
{
tls_mem_free(buf1);
}
}
struct specified_scan_info
{
u8 specified_ssid[33];
u16 specified_ssid_len;
u8 specified_bssid[18];
u8 specified_chan;
u8 specified_mask;
};
struct specified_scan_info specifiedinfo;
static void wifi_scan_format2_filter_handler(void)
{
char *buf = NULL;
char *buf1 = NULL;
u32 buflen;
int i, j;
int err;
u8 ssid[33];
u8 bssid[18];
struct tls_scan_bss_format2_t *wsr;
struct tls_bss_info_format2_t *bss_info;
u8 bitmask = 0;
buflen = 2000;
buf = tls_mem_alloc(buflen);
if (!buf)
{
goto end;
}
buf1 = tls_mem_alloc(300);
if(!buf1)
{
goto end;
}
memset(buf1, 0, 300);
err = tls_wifi_get_scan_rslt_format2((u8 *)buf, buflen);
if (err)
{
goto end;
}
wsr = (struct tls_scan_bss_format2_t *)buf;
bss_info = (struct tls_bss_info_format2_t *)(buf + 8);
printf("\n");
bitmask = specifiedinfo.specified_mask;
for(i = 0; i < wsr->count; i++)
{
j = sprintf(buf1, "(%d,", bss_info->ecn);
if (bitmask&0x1)
{
if((specifiedinfo.specified_ssid_len != bss_info->ssid_len)
|| memcmp(bss_info->ssid,specifiedinfo.specified_ssid,bss_info->ssid_len))
{
bss_info++;
continue;
}
}
memcpy(ssid, bss_info->ssid, bss_info->ssid_len);
ssid[bss_info->ssid_len] = '\0';
j += sprintf(buf1 + j, "%s", ssid);
j += sprintf(buf1 + j, ",%d,", (signed char)bss_info->rssi);
if (bitmask&0x2)
{
sprintf((char *)bssid, "%02x:%02x:%02x:%02x:%02x:%02x", bss_info->bssid[0], bss_info->bssid[1],
bss_info->bssid[2], bss_info->bssid[3], bss_info->bssid[4], bss_info->bssid[5]);
if (strcmp((const char *)bssid, (const char *)specifiedinfo.specified_bssid))
{
bss_info++;
continue;
}
}
j += sprintf(buf1 + j, "\"%02x:%02x:%02x:%02x:%02x:%02x\",", bss_info->bssid[0], bss_info->bssid[1],
bss_info->bssid[2], bss_info->bssid[3], bss_info->bssid[4], bss_info->bssid[5]);
if (bitmask&0x4)
{
if (bss_info->channel != specifiedinfo.specified_chan)
{
bss_info++;
continue;
}
}
j += sprintf(buf1 + j, "%d,", bss_info->channel);
j += sprintf(buf1 + j, "%d,", bss_info->freq_offset);
j += sprintf(buf1 + j, "%d,", bss_info->freqcal_val);
j += sprintf(buf1 + j, "%d,", bss_info->pairwise_cipher);
j += sprintf(buf1 + j, "%d,", bss_info->group_cipher);
j += sprintf(buf1 + j, "%d,", bss_info->bgn);
j += sprintf(buf1 + j, "%d)", bss_info->wps_support);
printf("%s\n", buf1);
bss_info ++;
}
end:
if(buf)
{
tls_mem_free(buf);
}
if(buf1)
{
tls_mem_free(buf1);
}
}
int user_scan_specified(u8 *ssid, u8 *mac, u8 chan, u8 scan_type, u32 min_interval, u32 max_interval)
{
struct tls_wifi_scan_param_t wscan_param;
memset(&specifiedinfo, 0, sizeof(specifiedinfo));
specifiedinfo.specified_mask = 0;
if (strlen((const char *)ssid) && (strlen((const char *)ssid) < 33))
{
memset(specifiedinfo.specified_ssid, 0, 33);
strcpy((char *)specifiedinfo.specified_ssid, (char *)ssid);
specifiedinfo.specified_ssid_len = strlen((const char *)ssid);
specifiedinfo.specified_mask = 1;
}
else
{
specifiedinfo.specified_ssid[0] = '\0';
specifiedinfo.specified_ssid_len = 0;
specifiedinfo.specified_mask &= ~1;
}
if (strlen((const char *)mac) == 17)
{
memset(specifiedinfo.specified_bssid, 0, 17);
strcpy((char *)specifiedinfo.specified_bssid, (char *)mac);
specifiedinfo.specified_mask |= 2;
}
else
{
specifiedinfo.specified_bssid[0] = '\0';
specifiedinfo.specified_mask &= ~2;
}
if (scan_type)
{
wscan_param.scan_type = 1;
}
else
{
wscan_param.scan_type = 0;
}
if (chan == 0)
{
specifiedinfo.specified_chan = 0;
wscan_param.scan_chanlist = 0x1FFF;
specifiedinfo.specified_mask &= ~4;
}
else
{
specifiedinfo.specified_chan = chan;
specifiedinfo.specified_mask |=4;
wscan_param.scan_chanlist = 1<<(chan-1);
}
if (min_interval == 0)
{
wscan_param.scan_chinterval = 120;
wscan_param.scan_times = 1;
}
else
{
wscan_param.scan_chinterval = min_interval;
if (max_interval >= min_interval)
{
wscan_param.scan_times = (max_interval + min_interval/2)/min_interval;
}
else
{
wscan_param.scan_times = 1;
}
}
tls_wifi_scan_by_param(&wscan_param);
return 0;
}
/*Scan demo*/ /*Scan demo*/
int scan_demo(void) int scan_demo(void)
{ {
@ -160,5 +440,22 @@ int scan_demo(void)
return WM_SUCCESS; return WM_SUCCESS;
} }
int scan_format2_demo(void)
{
tls_wifi_scan_result_cb_register(wifi_scan_format2_handler);
tls_wifi_scan();
return WM_SUCCESS;
}
/*specified Scan demo*/
int scan_specified_demo(u8 *ssid, u8 *mac, u32 chan, u32 scan_type, u32 min_interval, u32 max_interval)
{
tls_wifi_scan_result_cb_register(wifi_scan_format2_filter_handler);
user_scan_specified(ssid, mac, chan, scan_type, min_interval, max_interval);
return WM_SUCCESS;
}
#endif #endif

View File

@ -10,6 +10,7 @@
#include "wm_cpu.h" #include "wm_cpu.h"
#include "random.h" #include "random.h"
#include "wm_gpio_afsel.h" #include "wm_gpio_afsel.h"
#include "utils.h"
#if DEMO_SDIO_HOST #if DEMO_SDIO_HOST
extern int wm_sd_card_set_blocklen(uint32_t blocklen); extern int wm_sd_card_set_blocklen(uint32_t blocklen);
@ -30,6 +31,7 @@ static int sdh_card_wr_sb(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
int i = 0; int i = 0;
char* buf = NULL; char* buf = NULL;
char* bufR = NULL; char* bufR = NULL;
uint32_t sd_addr = 0;
buf = tls_mem_alloc(512); buf = tls_mem_alloc(512);
if(buf == NULL) if(buf == NULL)
@ -48,7 +50,8 @@ static int sdh_card_wr_sb(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
for(i=0; i<(tsize/512); i++) for(i=0; i<(tsize/512); i++)
{ {
ret = wm_sd_card_block_write(rca, i, buf); sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
ret = wm_sd_card_block_write(rca, sd_addr, buf);
if(ret) if(ret)
goto end; goto end;
} }
@ -57,11 +60,15 @@ static int sdh_card_wr_sb(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
goto end; goto end;
for(i=0; i<(tsize/512); i++) for(i=0; i<(tsize/512); i++)
{ {
ret = wm_sd_card_block_read(rca, i, bufR); sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
ret = wm_sd_card_block_read(rca, sd_addr, bufR);
if(ret) if(ret)
goto end; goto end;
if(memcmp(buf, bufR, 512)) if(memcmp(buf, bufR, 512))
{ {
printf("i=%d\n", i);
dumpBuffer("buf", buf, 512);
dumpBuffer("bufR", bufR, 512);
ret = -2; ret = -2;
goto end; goto end;
} }
@ -80,6 +87,76 @@ end:
TEST_DEBUG("ret %d\n", ret); TEST_DEBUG("ret %d\n", ret);
return ret; return ret;
} }
#if 0
static int sdh_card_wr_sb_fullchip(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
{
int ret = -1;
int i = 0;
char* buf = NULL;
char* bufR = NULL;
uint32_t sd_addr = 0;
buf = tls_mem_alloc(768);
if(buf == NULL)
goto end;
bufR = tls_mem_alloc(512);
if(bufR == NULL)
goto end;
for(i = 0; i < 768; i++)
{
buf[i] = i & 0xFF;
}
TEST_DEBUG("bus width %s\n", bus_width == 0 ? "1bit" : "4bits");
ret = wm_sd_card_set_bus_width(rca, bus_width);
if(ret)
goto end;
ret = wm_sd_card_set_blocklen(0x200); //512
if(ret)
goto end;
#if 1
for(i=(SDCardInfo.CardCapacity-tsize)/512; i<(SDCardInfo.CardCapacity/512); i++)
{
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
ret = wm_sd_card_block_write(rca, sd_addr, &buf[(i%256)/4*4]);
if(ret)
goto end;
}
#endif
ret = wm_sd_card_query_status(rca, NULL);
if(ret)
goto end;
for(i=(SDCardInfo.CardCapacity-tsize)/512; i<(SDCardInfo.CardCapacity/512); i++)
{
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
ret = wm_sd_card_block_read(rca, sd_addr, bufR);
if(ret)
{
goto end;
}
printf("i=%d\n", i);
if(memcmp(&buf[(i%256)/4*4], bufR, 512))
{
dumpBuffer("buf", &buf[(i%256)/4*4], 512);
dumpBuffer("bufR", bufR, 512);
ret = -2;
goto end;
}
}
ret = 0;
end:
if(buf)
{
tls_mem_free(buf);
}
if(bufR)
{
tls_mem_free(bufR);
}
TEST_DEBUG("ret %d\n", ret);
return ret;
}
#endif
/* multi blocks write & read by dma /* multi blocks write & read by dma
* bus_width: 0:1bit; 2:4bits * bus_width: 0:1bit; 2:4bits
@ -92,6 +169,7 @@ static int sdh_card_wr_mbs_dma_4M_test(uint32_t rca, uint8_t bus_width, uint32_t
char* bufR = NULL; char* bufR = NULL;
const uint32_t tsize = 4*1024;//*1024; const uint32_t tsize = 4*1024;//*1024;
int buflen = 512*block_cnt; int buflen = 512*block_cnt;
uint32_t sd_addr = 0;
buf = tls_mem_alloc(buflen); buf = tls_mem_alloc(buflen);
if(buf == NULL) if(buf == NULL)
@ -113,7 +191,8 @@ static int sdh_card_wr_mbs_dma_4M_test(uint32_t rca, uint8_t bus_width, uint32_t
//(sd_addr)---->start from address 0(block 0 too) //(sd_addr)---->start from address 0(block 0 too)
for(i=0; i<(tsize/512); i+=block_cnt) for(i=0; i<(tsize/512); i+=block_cnt)
{ {
ret = wm_sd_card_blocks_write(rca, i, buf, buflen); sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
ret = wm_sd_card_blocks_write(rca, sd_addr, buf, buflen);
if(ret) if(ret)
goto end; goto end;
} }
@ -123,8 +202,9 @@ static int sdh_card_wr_mbs_dma_4M_test(uint32_t rca, uint8_t bus_width, uint32_t
for(i=0; i<(tsize/512); i+=block_cnt) for(i=0; i<(tsize/512); i+=block_cnt)
{ {
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
memset(bufR, 0, buflen); memset(bufR, 0, buflen);
ret = wm_sd_card_blocks_read(rca, i, bufR, buflen); ret = wm_sd_card_blocks_read(rca, sd_addr, bufR, buflen);
if(ret) if(ret)
goto end; goto end;
if(memcmp(buf, bufR, buflen)) if(memcmp(buf, bufR, buflen))
@ -168,6 +248,11 @@ int sd_card_test(void)
wm_sdio_host_config(0); wm_sdio_host_config(0);
ret += sdh_card_init(&rca); ret += sdh_card_init(&rca);
printf("\nsdh_card_init, ret = %d\n", ret); printf("\nsdh_card_init, ret = %d\n", ret);
#if 0
ret += sdh_card_wr_sb_fullchip(rca, 0, 1024*1024);
printf("\nW & R 0, ret = %d\n", ret);
wr_delay(10000);
#else
ret += sdh_card_wr_sb(rca, 0, 1024); ret += sdh_card_wr_sb(rca, 0, 1024);
printf("\nW & R 1, ret = %d\n", ret); printf("\nW & R 1, ret = %d\n", ret);
wr_delay(10000); wr_delay(10000);
@ -180,7 +265,7 @@ int sd_card_test(void)
ret += sdh_card_wr_mbs_dma_4M_test(rca, 2, 6); ret += sdh_card_wr_mbs_dma_4M_test(rca, 2, 6);
printf("W & R 4, ret = %d\n", ret); printf("W & R 4, ret = %d\n", ret);
wr_delay(10000); wr_delay(10000);
#endif
if( ret ==0 ) { if( ret ==0 ) {
printf("\nsd card write read OK, ret = %d\n", ret); printf("\nsd card write read OK, ret = %d\n", ret);
} }

View File

@ -103,8 +103,19 @@ static s16 HspiRxCmdCb(char *buf)
static void HspiInit(int type) static void HspiInit(int type)
{ {
if(type == HSPI_INTERFACE_SPI)
{
wm_hspi_gpio_config(0); wm_hspi_gpio_config(0);
}
else if (type == HSPI_INTERFACE_SDIO)
{
wm_sdio_slave_config(0);
}
else
{
printf("do not support interface\n");
return;
}
tls_slave_spi_init(); tls_slave_spi_init();
tls_set_high_speed_interface_type(type); tls_set_high_speed_interface_type(type);
@ -119,14 +130,15 @@ int slave_spi_demo(int type)
if(type == 0) if(type == 0)
{ {
type = HSPI_INTERFACE_SPI; type = HSPI_INTERFACE_SPI;
printf("\r\ntype:%s\r\n", "HSPI_SLAVE");
HspiInit(type);
} }
else else
{ {
type = HSPI_INTERFACE_SDIO; type = HSPI_INTERFACE_SDIO;
} printf("\r\ntype:%s\r\n", "SDIO_SLAVE");
printf("\r\ntype:%d\r\n", type);
HspiInit(type); HspiInit(type);
}
return WM_SUCCESS; return WM_SUCCESS;
} }

View File

@ -20,6 +20,20 @@
2)Add sta list monitor task*/ 2)Add sta list monitor task*/
static tls_os_timer_t *sta_monitor_tim = NULL; static tls_os_timer_t *sta_monitor_tim = NULL;
static u32 totalstanum = 0; static u32 totalstanum = 0;
/*mac that not allowed to join soft ap, you can change it.*/
unsigned char blackmac[6] = {0x44,0xc3,0x46,0x41,0x71,0x1f};
static u32 delblackstatimeout = 60;
static u32 delcnt = 0;
static u32 addrefusecnt = 0;
static u32 addrefusecnttimeout = 60;
#define ADD_BLACK_STATE 0
#define DEL_BLACK_STATE 1
static u32 blackstate = DEL_BLACK_STATE;
static void demo_monitor_stalist_tim(void *ptmr, void *parg) static void demo_monitor_stalist_tim(void *ptmr, void *parg)
{ {
u8 *stabuf = NULL; u8 *stabuf = NULL;
@ -28,16 +42,55 @@ static void demo_monitor_stalist_tim(void *ptmr, void *parg)
stabuf = tls_mem_alloc(1024); stabuf = tls_mem_alloc(1024);
if (stabuf) if (stabuf)
{ {
stanum = 0;
memset(stabuf, 0, 1024);
tls_wifi_get_authed_sta_info(&stanum, stabuf, 1024); tls_wifi_get_authed_sta_info(&stanum, stabuf, 1024);
if (totalstanum != stanum) if (totalstanum != stanum)
{ {
wm_printf("sta mac:\n"); wm_printf("white sta mac:\n");
for (i = 0; i < stanum ; i++) for (i = 0; i < stanum ; i++)
{ {
wm_printf("%M\n", &stabuf[i * 6]); wm_printf("%M\n", &stabuf[i * 6]);
} }
} }
totalstanum = stanum; totalstanum = stanum;
stanum = 0;
memset(stabuf, 0, 1024);
tls_wifi_softap_get_blackinfo(&stanum, stabuf, 1024);
wm_printf("black sta mac:\n");
for (i = 0; i < stanum ; i++)
{
wm_printf("%M\n", &stabuf[i * 6]);
}
switch (blackstate)
{
case DEL_BLACK_STATE: /*delete sta's for black list*/
delcnt++;
if (delcnt > delblackstatimeout)
{
for (i = 0; i < stanum ; i++)
{
tls_wifi_softap_del_blacksta(&stabuf[i*6]);
}
delcnt = 0;
blackstate = ADD_BLACK_STATE;
}
break;
case ADD_BLACK_STATE: /*add station into black list*/
addrefusecnt ++;
if (addrefusecnt > addrefusecnttimeout)
{
tls_wifi_softap_add_blacksta(blackmac);
tls_wifi_softap_del_station(blackmac);
addrefusecnt = 0;
blackstate = DEL_BLACK_STATE;
}
break;
default:
break;
}
tls_mem_free(stabuf); tls_mem_free(stabuf);
stabuf = NULL; stabuf = NULL;
} }
@ -51,6 +104,7 @@ int demo_create_softap(u8 *ssid, u8 *key, int chan, int encrypt, int format)
u8 ssid_set = 0; u8 ssid_set = 0;
u8 wireless_protocol = 0; u8 wireless_protocol = 0;
u8 ssid_len = 0; u8 ssid_len = 0;
if (!ssid) if (!ssid)
{ {
@ -109,6 +163,9 @@ int demo_create_softap(u8 *ssid, u8 *key, int chan, int encrypt, int format)
ipinfo->netmask[3] = 0; ipinfo->netmask[3] = 0;
MEMCPY(ipinfo->dnsname, "local.wm", sizeof("local.wm")); MEMCPY(ipinfo->dnsname, "local.wm", sizeof("local.wm"));
blackstate = DEL_BLACK_STATE;
tls_wifi_softap_add_blacksta(blackmac);
ret = tls_wifi_softap_create(apinfo, ipinfo); ret = tls_wifi_softap_create(apinfo, ipinfo);
wm_printf("\n ap create %s ! \n", (ret == WM_SUCCESS) ? "Successfully" : "Error"); wm_printf("\n ap create %s ! \n", (ret == WM_SUCCESS) ? "Successfully" : "Error");

View File

@ -169,7 +169,7 @@ int uart_demo(int bandrate, int parity, int stopbits)
demo_uart_task, demo_uart_task,
(void *) demo_uart, (void *) demo_uart,
(void *) demo_uart_task_stk, /** 任务栈的起始地址 */ (void *) demo_uart_task_stk, /** 任务栈的起始地址 */
DEMO_UART_TAST_STK_SIZE, /** 任务栈的大小 */ DEMO_UART_TAST_STK_SIZE*4, /** 任务栈的大小 */
DEMO_UART_TASK_PRIO, 0); DEMO_UART_TASK_PRIO, 0);
} }
if (-1 == bandrate) if (-1 == bandrate)

View File

@ -1,6 +1,48 @@
========================================================== ==========================================================
| CHANGELOG: WinnerMicro Software Development Kit | | CHANGELOG: WinnerMicro Software Development Kit |
========================================================== ==========================================================
W800 SDK v1.00.10 | 2022/12/29
==========================
1. 驱动更新
1提供模组ADC校准功能接口
2修复PSRAM IO复用不完整问题
3Flash驱动修改不再每次都写状态寄存器
4增加RF参数备份机制
5修改对于SD 1.0卡的支持
2. 更新secboot支持青藤Flash的QIO模式切换优化每次启动过程都操作flash状态寄存器来切QIO模式的操作
3. 升级LWIP版本至V2.1.3版本
4. 优化一键配网功能
5. demo修改
1HSPI和SDIO的从设备的DEMO更新通过参数区分HSPI和SDIO的初始化
2修改demo的控制台的接收处理解决接收命令字不足后无法使用控制台的问题
3增加新的联网demo
4增加新的扫描demo
5增加softap的黑名单功能demo
6. 修复芯片Sleep模式功耗波动问题修改GPIO默认配置为输入上拉客户使用时按照IO复用配置使用指定的上下拉功能
7. RTOS问题修复
1修复rtos适配函数没有判断指针是否为空的操作
2修复RTOS任务创建时句柄赋值处理
8. 修复因调整tick值并进行时间计算而导致的可能除0操作
9. Wi-Fi库更新内容
1增加WLAN数字增益可调接口
2增加连接扫描不到热点的时间可控的API
3增加可配置是否可连接open/wep网络的API
4增加是否扫描到立即连接AP的API
5支持AP的黑名单功能
6修复APSTA模式下某些手机连接不上的问题因信道变更时信标帧内部分信道相关信息未更新
10. 编译相关
1修复某些场景下的编译报错问题例如内存调试打开mbedtls模块编译报错的问题
2修改编译工具链支持CPP代码的编译
3因为升级了LWIP和MQTTCDK的编译工程变更建议使用新的工程把之前改动合过来
如果确实要使用之前的工程,需要把相关文件加入,编译前要清理一下编译工程下的过程中文件(.mk,.bat,.txtLST和OBJ
4如果用户打开较多demo、或者进行内存调试或者打开wm_debug.h调试功能而且要使用经典蓝牙的CDK工程编译
或者使用make编译需要对链接文件里的I-SRAM进行调整位置、大小由此带来一系列的调整编译固件存放的位置也要调整
5清理编译告警
W800 SDK v1.00.08 | 2022/07/26 W800 SDK v1.00.08 | 2022/07/26
========================== ==========================
********* *********

View File

@ -0,0 +1,437 @@
/**
* @file wm_netif2.1.3.h
*
* @brief netif213 module
*
* @author WinnerMicro
*
* Copyright (c) 2014 Winner Microelectronics Co., Ltd.
*/
#ifndef WM_NETIF2_0_3_H
#define WM_NETIF2_0_3_H
#include "wm_config.h"
#include "wm_type_def.h"
#include "wm_sockets.h"
#include "wm_wifi.h"
#include "wm_params.h"
/** MACRO for callback EVENT to join AP or create soft-AP successfully */
#define NETIF_WIFI_JOIN_SUCCESS 0x1
/** MACRO for callback EVENT to fail to join AP */
#define NETIF_WIFI_JOIN_FAILED 0x2
/** MACRO for callback EVENT to disconnect from AP or destroy soft-AP */
#define NETIF_WIFI_DISCONNECTED 0x3
/** MACRO for callbck EVENT to get IP address */
#define NETIF_IP_NET_UP 0x4
/** MACRO for callback EVNET to create AP successfully */
#define NETIF_WIFI_SOFTAP_SUCCESS 0x5
/** MACRO for callback EVNET to create soft-AP failed */
#define NETIF_WIFI_SOFTAP_FAILED 0x6
/** MACRO for callback EVNET to close soft-AP */
#define NETIF_WIFI_SOFTAP_CLOSED 0x7
/** MACRO for callback EVNET to inform soft ap's net */
#define NETIF_IP_NET2_UP 0x8
#define NETIF_IPV6_NET_UP 0x9
/** These are the values for ip_addr_t.type */
#define IPADDR_TYPE_V4 0U
#define IPADDR_TYPE_V6 6U
#define IPADDR_TYPE_ANY 46U
#define IPV6_ADDR_MAX_NUM 3
#if 0
struct ip_addr {
u32_t addr;
};
typedef struct ip_addr ip_addr_t;
#endif
#if 0
struct ip4_addr {
u32_t addr;
};
typedef struct ip4_addr ip4_addr_t;
struct ip6_addr {
u32_t addr[4];
};
typedef struct ip6_addr ip6_addr_t;
#if (TLS_CONFIG_IPV4 && TLS_CONFIG_IPV6)
typedef struct _ip_addr {
union {
ip6_addr_t ip6;
ip4_addr_t ip4;
} u_addr;
u8_t type;
} ip_addr_t;
#else
#if TLS_CONFIG_IPV4
typedef ip4_addr_t ip_addr_t;
#else
typedef ip6_addr_t ip_addr_t;
#endif
#endif
#endif
struct tls_ethif {
ip_addr_t ip_addr;
ip_addr_t netmask;
ip_addr_t gw;
#if TLS_CONFIG_IPV6
ip_addr_t ip6_addr[IPV6_ADDR_MAX_NUM];
#endif
ip_addr_t dns1;
ip_addr_t dns2;
u8 status; //0:net down; 1:net up
#if TLS_CONFIG_IPV6
u8 ipv6_status[IPV6_ADDR_MAX_NUM]; //0:net down; 1:net up
#endif
};
//type defination of netif status changed callback.
typedef void (*tls_netif_status_event_fn)(u8 status);
/**
* @defgroup APP_APIs APP APIs
* @brief APP APIs
*/
/**
* @addtogroup APP_APIs
* @{
*/
/**
* @defgroup NETIF_APIs NETIF APIs
* @brief network interface APIs
*/
/**
* @addtogroup NETIF_APIs
* @{
*/
/**
* @brief This function is used to initialize TCP/IP Stack
*
* @param[in] None
*
* @retval 0 success
* @retval other failed
*
* @note None
*/
int tls_ethernet_init(void);
/**
* @brief This function is used to get IP information stored in
tls_ethif struct
*
* @param[in] None
*
* @retval tls_ethif * Pointer to struct tls_ethif
*
* @note None
*/
struct tls_ethif * tls_netif_get_ethif(void);
/**
* @brief This function is used to set tls_ethif status
*
* @param[in] status net status, 0-up, 1-down
*
* @return None
*
* @note None
*/
void tls_netif_set_status(u8 status);
/**
* @brief This function is used to start DHCP Client
*
* @param[in] None
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_dhcp_start(void);
/**
* @brief This function is used to stop DHCP client
*
* @param[in] None
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_dhcp_stop(void);
/**
* @brief This function is used to change IP information
*
* @param[in] *ipaddr IP address
* @param[in] *netmask netmask
* @param[in] *gw default gateway
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_netif_set_addr(ip_addr_t *ipaddr,
ip_addr_t *netmask,
ip_addr_t *gw);
/**
* @brief This function is used to set dns servers
*
* @param[in] numdns index of the DNS server to set
must be < DNS_MAX_SERVERS
* @param[in] *dnsserver IP address of the DNS server to set
*
* @return None
*
* @note None
*/
void tls_netif_dns_setserver(u8 numdns, ip_addr_t *dnsserver);
/**
* @brief This function is used to bring up an interface,available
for processing traffic
*
* @param[in] None
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_netif_set_up(void);
/**
* @brief This function is used to bring down an interface,disabling
any traffic processing
*
* @param[in] None
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_netif_set_down(void);
/**
* @brief This function is used to add netif status changed callback
to event list,if exists, do nothing
*
* @param[in] event_fn pointer to tls_netif_status_event_fn
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_netif_add_status_event(tls_netif_status_event_fn event_fn);
/**
* @brief This function is used to remove netif status changed
callback function from event list,if not exists, do nothing
*
* @param[in] event_fn pointer to tls_netif_status_event_fn
*
* @retval 0 success
* @retval Minus failed
*
* @note None
*/
err_t tls_netif_remove_status_event(tls_netif_status_event_fn event_fn);
/**
* @brief This function is used to get pointer of netif
*
* @param[in] None
*
* @retval pointer of netif
*
* @note None
*/
struct netif *tls_get_netif(void);
#if TLS_CONFIG_AP
/**
* @brief Start DHCP Server for a network interface
* *
* @retval DHCPS_ERR_SUCCESS - No error
* @retval DHCPS_ERR_MEM - Out of memory
* @retval DHCPS_ERR_LINKDOWN - The NI is inactive
*
* @note None
*/
INT8S tls_dhcps_start(void);
/**
* @brief This function is used to stop DHCP Server
*
* @param[in] None
*
* @retval None
*
* @note None
*/
void tls_dhcps_stop(void);
/**
* @brief Start the dns server's service
* *
* @retval DHCPS_ERR_SUCCESS - No error
* @retval DHCPS_ERR_MEM - Out of memory
* @retval DHCPS_ERR_LINKDOWN - The NI is inactive
* @retval DNSS_ERR_PARAM - Input parameter error
*
* @note None
*/
INT8S tls_dnss_start(INT8U * DnsName);
/**
* @brief Stop the dns server's service
*
* @param[in] None
*
* @retval None
*
* @note None
*/
void tls_dnss_stop(void);
/**
* @brief Get station's ip address by mac address
*
* @param[in] mac station's mac address
*
* @retval ip_addr station's ip address
*
* @note None
*/
ip_addr_t *tls_dhcps_getip(const u8_t *mac);
/**
* @brief Get station's mac address by ip address
*
* @param[in] ip station's ip address
*
* @retval u8* station's mac address
*
* @note None
*/
u8 *tls_dhcps_getmac(const ip_addr_t *ip);
#endif //TLS_CONFIG_AP
#if TLS_CONFIG_RMMS
/**
* @brief Start remote manager server.
* *
* @retval DHCPS_ERR_SUCCESS - No error
* @retval DHCPS_ERR_MEM - Out of memory
* @retval DHCPS_ERR_LINKDOWN - The NIF is inactive
*
* @note None
*/
INT8S tls_rmms_start(void);
/**
* @brief Disable remote manager server
*
* @param[in] None
*
* @retval None
*
* @note None
*/
void tls_rmms_stop(void);
#endif
#if TLS_CONFIG_AP
/**
* @brief This is used to bring up an interface for APSTA,available
for processing traffic
*
* @param[in] None
*
* @retval 0 success
* @retval Minus failed
*
* @note Can only be used at APSTA mode
*/
err_t tls_netif2_set_up(void);
/**
* @brief This function is used to bring down an interface for APSTA, disabling
any traffic processing
*
* @param[in] None
*
* @retval 0 success
* @retval Minus failed
*
* @note Can only be used at APSTA mode
*/
err_t tls_netif2_set_down(void);
/**
* @brief This function is used to change IP information for
a network interface for APSTA
*
* @param[in] *ipaddr IP address
* @param[in] *netmask netmask
* @param[in] *gw default gateway
*
* @retval 0 success
* @retval Minus failed
*
* @note Can only be used at APSTA mode
*/
err_t tls_netif2_set_addr(ip_addr_t *ipaddr,
ip_addr_t *netmask,
ip_addr_t *gw);
/***************************************************************************
* Function: tls_dhcps_setdns
* Description: Set dhcp server's dns address.
*
* Input: numdns: the index of the DNS server to set must be less than DNS_MAX_SERVERS
*
* Output: None
*
* Return: None
*
* Date : 2015-3-10
****************************************************************************/
/**
* @brief Set dhcp server's dns address
*
* @param[in] numdns the index of the DNS server to set must be less than DNS_MAX_SERVERS
*
* @retval None
*
* @note Can only be used at APSTA mode
*/
void tls_dhcps_setdns(u8_t numdns);
#endif
/**
* @}
*/
/**
* @}
*/
#endif //WM_NETIF_H

View File

@ -17,7 +17,7 @@
#include "wm_type_def.h" #include "wm_type_def.h"
#define ADC_DEST_BUFFER_SIZE 16383//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>λ #define ADC_DEST_BUFFER_SIZE 16383//ÒÔ×ÖΪµ¥Î»
/*ADC Result*/ /*ADC Result*/
@ -111,15 +111,15 @@
#define ADC_INT_TYPE_DMA 1 #define ADC_INT_TYPE_DMA 1
#define ADC_INT_TYPE_ADC_COMP 2 #define ADC_INT_TYPE_ADC_COMP 2
#define ADC_REFERENCE_EXTERNAL 0 //<EFBFBD>ⲿ<EFBFBD>ο<EFBFBD> #define ADC_REFERENCE_EXTERNAL 0 //Íⲿ²Î¿¼
#define ADC_REFERENCE_INTERNAL 1 //<EFBFBD>ڲ<EFBFBD><EFBFBD>ο<EFBFBD> #define ADC_REFERENCE_INTERNAL 1 //ÄÚ²¿²Î¿¼
typedef struct adc_st{ typedef struct adc_st{
u8 dmachannel; u8 dmachannel;
void (*adc_cb)(int *buf, u16 len); void (*adc_cb)(int *buf, u16 len);
void (*adc_bigger_cb)(int *buf, u16 len); void (*adc_bigger_cb)(int *buf, u16 len);
void (*adc_dma_cb)(int *buf,u16 len); void (*adc_dma_cb)(int *buf,u16 len);
u16 valuelen; /*dma <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>*/ u16 valuelen; /*dma ²ÉÑùÊý¾Ý³¤¶È*/
u16 offset; u16 offset;
}ST_ADC; }ST_ADC;
@ -294,6 +294,41 @@ u32 adc_get_interVolt(void);
*/ */
int adc_temp(void); int adc_temp(void);
/**
* @brief This function is used to calibrate adc single-end voltage. offset after FT or multipoint calibration.
*
* @param[in] chan: adc calibration channel to be used, ADC channel 0,1,2,3
* @param[in] refvoltage: calibration reference voltage to be used, unit:mV
* input range[100,2300)mV, suggest reference voltage[500,2000]mV
*
* @return 0: success, < 0: failure
*
* @note After FT calibration or mulitpoint calibration, adc curve is y=ax+b,
* y is real voltage(unit:mV), x is adc sample data
* a and b is the coefficient. This fuction only used to revise b value.
*/
int adc_offset_calibration(int chan, int refvoltage);
/**
* @brief This function can used to calibrate adc coefficient if not calibrated,
* or adc offset after FT or multipoint calibration.
*
* @param[in] chanused: bitmap, specified calibration channel,only bit0-3 can be used
* @param[in] refvoltage[]: array, calibration reference voltage to be used, unit:mV
* refvoltage keep the same position with chan bitmap
* input range[100,2300)mV, suggest reference voltage[500,2000]mV
*
* @return 0: success, < 0: failure
*
* @note 1)Adc curve is y=ax+b,y is real voltage(unit:mV), x is adc sample data.
* After calibration, we can get a and b, or only update b.
* 2) Only used single-end adc
* 3) For example, use chan 0,1,3, and refvoltage 500,1000,2000,
* then chanused is 0xB, refvoltage[] value is {500,1000,0, 2000};
*/
int adc_multipoint_calibration(int chanused, int refvoltage[]);
/** /**
* @} * @}
*/ */
@ -311,6 +346,9 @@ void signedToUnsignedData(int *adcValue);
void tls_adc_buffer_bypass_set(u8 isset); void tls_adc_buffer_bypass_set(u8 isset);
void tls_adc_cmp_start(int Channel, int cmp_data, int cmp_pol); void tls_adc_cmp_start(int Channel, int cmp_data, int cmp_pol);
u32 adc_get_offset(void); u32 adc_get_offset(void);
void tls_adc_set_pga(int gain1, int gain2);
int cal_voltage(double vol);
#endif #endif

View File

@ -25,6 +25,8 @@ enum {
CMD_RX_IQ_PHASE, CMD_RX_IQ_PHASE,
CMD_TX_GAIN, CMD_TX_GAIN,
CMD_TX_ADC_CAL, CMD_TX_ADC_CAL,
CMD_FREQ_ERR,
CMD_RF_CAL_FLAG,
CMD_ALL, CMD_ALL,
}; };
@ -45,7 +47,9 @@ typedef struct FT_ADC_CAL_UNIT
typedef struct FT_ADC_CAL typedef struct FT_ADC_CAL
{ {
unsigned int valid_cnt; unsigned int valid_cnt;
FT_ADC_CAL_UINT_ST units[8]; FT_ADC_CAL_UINT_ST units[6];
float a;
float b;
}FT_ADC_CAL_ST; }FT_ADC_CAL_ST;
typedef struct FT_TEMP_CAL typedef struct FT_TEMP_CAL
@ -303,6 +307,18 @@ int tls_rf_cal_finish_op(u8 *calflag, u8 flag);
*/ */
int tls_get_adc_cal_param(FT_ADC_CAL_ST *adc_cal); int tls_get_adc_cal_param(FT_ADC_CAL_ST *adc_cal);
/**
* @brief This function is used to set adc cal param
*
* @param[out] adc_cal adc cal param
*
* @retval TLS_EFUSE_STATUS_OK get success
* @retval TLS_EFUSE_STATUS_EIO get failed
*/
int tls_set_adc_cal_param(FT_ADC_CAL_ST *adc_cal);
/** /**
* @} * @}
*/ */

View File

@ -42,7 +42,7 @@ enum TYPE_FLASH_ID{
SPIFLASH_MID_XMC = 0x20, SPIFLASH_MID_XMC = 0x20,
SPIFLASH_MID_XTX = 0x0B, SPIFLASH_MID_XTX = 0x0B,
SPIFLASH_MID_TSINGTENG = 0xEB, /*UNIGROUP TSINGTENG*/ SPIFLASH_MID_TSINGTENG = 0xEB, /*UNIGROUP TSINGTENG*/
SPIFLASH_MID_TSINGTENG_1MB = 0xCD, /*UNIGROUP TSINGTENG*/ SPIFLASH_MID_TSINGTENG_1MB_4MB = 0xCD, /*UNIGROUP TSINGTENG*/
}; };
typedef union { typedef union {

View File

@ -34,7 +34,7 @@ typedef struct
long long CardCapacity; long long CardCapacity;
u32 CardBlockSize; u32 CardBlockSize;
u16 RCA; u16 RCA;
u8 CardType; u8 CSDVer;
} SD_CardInfo_t; } SD_CardInfo_t;
extern SD_CardInfo_t SDCardInfo; extern SD_CardInfo_t SDCardInfo;
/** /**

View File

@ -24,7 +24,7 @@
//#define WM_MEM_DEBUG 1 //#define WM_MEM_DEBUG 1
#if WM_MEM_DEBUG #if WM_MEM_DEBUG
#include "list.h" #include "../list.h"
#define MEM_HEADER_PATTERN 0x76028412 #define MEM_HEADER_PATTERN 0x76028412
#define MEM_TAILER_PATTERN 0x83395627 #define MEM_TAILER_PATTERN 0x83395627

View File

@ -113,6 +113,28 @@ enum tls_wifi_auth_mode {
WM_WIFI_AUTH_MODE_UNKNOWN = 128 WM_WIFI_AUTH_MODE_UNKNOWN = 128
}; };
/** Wi-Fi encryption enum */
enum tls_wifi_encrypt_mode {
WM_WIFI_ECN_MODE_OPEN = 0, /**< encrypt mode : open */
WM_WIFI_ECN_MODE_WEP = 1, /**< encrypt mode : wep*/
WM_WIFI_ECN_MODE_WPA_PSK = 2, /**< encrypt mode : wpa psk*/
WM_WIFI_ECN_MODE_WPA2_PSK = 3, /**< encrypt mode : wpa2 psk*/
WM_WIFI_ECN_MODE_WPA_WPA2_PSK = 4, /**< encrypt mode : wpa and wpa2 psk*/
WM_WIFI_ECN_MODE_UNKNOWN = 5, /**< encrypt mode : unknown*/
};
/** Wi-Fi group/pairwise cipher enumu*/
enum tls_wifi_cipher_mode{
WM_WIFI_CIPHER_NONE = 0,
WM_WIFI_CIPHER_WEP40 = 1,
WM_WIFI_CIPHER_WEP104 = 2,
WM_WIFI_CIPHER_TKIP = 3,
WM_WIFI_CIPHER_CCMP = 4,
WM_WIFI_CIPHER_TKIP_AND_CCMP = 5,
WM_WIFI_CIPHER_AES_CMAC_128 = 6,
};
/** Wi-Fi states */ /** Wi-Fi states */
enum tls_wifi_states { enum tls_wifi_states {
WM_WIFI_DISCONNECTED, /**< Disconnected state */ WM_WIFI_DISCONNECTED, /**< Disconnected state */
@ -270,6 +292,29 @@ struct tls_scan_bss_t {
struct tls_bss_info_t bss[1]; /**< list of bss found*/ struct tls_bss_info_t bss[1]; /**< list of bss found*/
}; };
/** format2 bss information */
struct tls_bss_info_format2_t {
u8 ecn; /**< encryption type, @ref enum tls_wifi_encrypt_mode */
u8 rssi; /**< signal strength of AP, real rssi = (signed char)rssi */
u8 ssid[32]; /**< SSID of AP */
u8 ssid_len; /**< SSID length */
u8 bssid[ETH_ALEN]; /**< MAC address of AP */
u8 channel; /**< channel of AP */
s16 freq_offset; /**< reserved do not support*/
s16 freqcal_val; /**< reserved do not support*/
s8 pairwise_cipher; /**< pairwise cipher. @ref enum tls_wifi_cipher_mode */
s8 group_cipher; /**< group cipher. @ref enum tls_wifi_cipher_mode */
u8 bgn; /**< bgnmode, bit0:b mode, bit1:g mode, bit2:n mode */
bool wps_support; /**< is support WPS function */
};
/** format2 scan result */
struct tls_scan_bss_format2_t {
u32 count; /**< total count */
u32 length; /**< bss info total length */
struct tls_bss_info_format2_t bss[1]; /**< list of bss found*/
};
/** station information */ /** station information */
struct tls_sta_info_t { struct tls_sta_info_t {
u8 mac_addr[ETH_ALEN]; /**< MAC address of station */ u8 mac_addr[ETH_ALEN]; /**< MAC address of station */
@ -299,7 +344,8 @@ struct tls_wifi_tx_rate_t {
/** scan param */ /** scan param */
struct tls_wifi_scan_param_t{ struct tls_wifi_scan_param_t{
u32 scan_times; /**< Scan times, >=0, if zero, only 1 times */ u16 scan_type;
u16 scan_times; /**< Scan times, >=0, if zero, only 1 times */
u16 scan_chanlist; /**< Scan channel list ,[0,3FFF],per bit is one channel,if zero or above 0x3FFF, scan all channel*/ u16 scan_chanlist; /**< Scan channel list ,[0,3FFF],per bit is one channel,if zero or above 0x3FFF, scan all channel*/
u16 scan_chinterval; /**< Scan channel switch time,>=0, if zero, use default value, unit:ms */ u16 scan_chinterval; /**< Scan channel switch time,>=0, if zero, use default value, unit:ms */
}; };
@ -632,6 +678,24 @@ void tls_wifi_scan_result_cb_register(void (*callback)(void));
int tls_wifi_get_scan_rslt(u8* buf, u32 buffer_size); int tls_wifi_get_scan_rslt(u8* buf, u32 buffer_size);
/***************************************************************************
* Function: tls_wifi_get_scan_rslt_format2
*
* Description: get result of last scan for format2 result
*
* Input: buffer: address to store returned BSS info
* buffer_size: the length of the buffer
* Output: BSS info got by last scan
*
* Return: WM_SUCCESS: return ok;
* WM_FAILED: failed to get result;
* Note: user need to memalloc a buffer in advance. size for one item of scan result is @ref struct tls_bss_info_format2_t
* the buffer size depends how many items user wants.
* Date : 2022-6-07
****************************************************************************/
int tls_wifi_get_scan_rslt_format2(u8* buf, u32 buffer_size);
/** /**
* @brief This function is used to create soft ap * @brief This function is used to create soft ap
* *
@ -1014,20 +1078,6 @@ int tls_wifi_send_mgmt(enum tls_wifi_mgmt_type type, struct tls_wifi_hdr_mac_t *
*/ */
int tls_wifi_send_data(struct tls_wifi_hdr_mac_t *mac, u8 *data, u16 data_len, struct tls_wifi_tx_rate_t *tx); int tls_wifi_send_data(struct tls_wifi_hdr_mac_t *mac, u8 *data, u16 data_len, struct tls_wifi_tx_rate_t *tx);
#if TLS_CONFIG_AP
/**
* @brief This function is used to get authed sta list
*
* @param[out] *sta_num authed's station number
* @param[out] *buf address to store returned station list info, tls_sta_info_t
* @param[in] buf_size buffer size
*
* @return None
*
* @note None
*/
void tls_wifi_get_authed_sta_info(u32 *sta_num, u8 *buf, u32 buf_size);
#endif
/** /**
* @brief This function is used to get current Wi-Fi State * @brief This function is used to get current Wi-Fi State
* *
@ -1114,6 +1164,43 @@ int tls_wifi_softap_set_sta_num(unsigned char ap_sta_num);
*/ */
int tls_wifi_softap_del_station(unsigned char* hwaddr); int tls_wifi_softap_del_station(unsigned char* hwaddr);
/**
* @brief This function used to add sta to black list for softap
*
* @param[out] hwaddr: sta's mac address to forbid
*
* @return None
*
* @note None
*/
int tls_wifi_softap_add_blacksta(unsigned char *hwaddr);
/**
* @brief This function used to accept sta joining softap that sta in balck list
*
* @param[out] hwaddr: mac address to delete from black list
*
* @return None
*
* @note None
*/
int tls_wifi_softap_del_blacksta(unsigned char *hwaddr);
/**
* @brief This function used to get stations from blacklist
*
* @param[out] sta_num: station's number in blacklist
* @param[out] buf: store stations to get from blacklist
* @param[in] buf_size: memory size to store stations in blacklist
*
* @return None
*
* @note None
*/
int tls_wifi_softap_get_blackinfo(u32 *sta_num, u8 *buf, u32 buf_size);
/** /**
* @brief This function is used to set some information display in the process of wifi networking * @brief This function is used to set some information display in the process of wifi networking
* *
@ -1147,6 +1234,109 @@ void tls_wifi_set_tempcomp_flag(int flag);
*/ */
u8 tls_wifi_get_tempcomp_flag(void); u8 tls_wifi_get_tempcomp_flag(void);
/**
* @brief This function is used to get temperature compensation flag
*
* @param[in] fixrateindex: 11b:0-3, 11g:4-11, 11n-ht20:12-19, 11n-ht40:20-27
* @param[in] retrycnt: retry count, range[1,15]
*
* @return None
*
* @note When use this function, data to be transfered will use fix rate.
*/
void tls_wifi_set_fixed_rate(u32 fixrateindex, u32 retrycnt);
/**
* @brief This function is used to set listen_interval (dummy interface)
*
* @param[in] listen_interval: >=1
*
* @return None
*
* @note this is dummy interface. this value can used only in sta mode.
*/
int tls_wifi_cfg_listen_interval(u16 listen_interval);
/**
* @brief This function is used to set connect timeout
*
* @param[in] timeout: to connect ap's time, >=5s
*
* @return None
*
* @note valid only when scan AP failed.
*/
int tls_wifi_cfg_connect_timeout(u16 timeout);
/**
* @brief This function is used to configure scan mode
*
* @param[in] mode:0-find max RSSI AP, 1-find AP and immediately stop scan to start join
*
* @return None
*
* @note only used in STA mode.
*/
int tls_wifi_cfg_connect_scan_mode(u32 mode);
/**
* @brief This function is used to set pci flag
*
* @param[in] pci flag:0-can join any supported AP(open,wep,wpa,wpa2)
* 1-only join AP(WPA/WPA2 that supported)
*
* @return None
*
* @note none.
*/
int tls_wifi_cfg_connect_pci(u32 pci_en);
/**
* @brief This function is used to set 11b's digital gain
*
* @param[in] value:gain value, <0x40
*
* @return 0:if value is valid,-1:if value is invalid
*
* @note none.
*/
int tls_wifi_set_11b_digital_gain(u8 value);
/**
* @brief This function is used to get 11b's gain value
*
* @param[in] None
*
* @return gain value
*
* @note none.
*/
u8 tls_wifi_get_11b_digital_gain(void);
/**
* @brief This function is used to set 11n's digital gain
*
* @param[in] value:gain value, <0x40
*
* @return 0:if value is valid,-1:if value is invalid
*
* @note none.
*/
int tls_wifi_set_11n_digital_gain(u8 value);
/**
* @brief This function is used to get 11n's gain value
*
* @param[in] None
*
* @return gain value
*
* @note none.
*/
u8 tls_wifi_get_11n_digital_gain(void);
/** /**
* @} * @}

View File

@ -9,10 +9,8 @@
*/ */
#ifndef __WM_TYPE_DEF_H__ #ifndef __WM_TYPE_DEF_H__
#define __WM_TYPE_DEF_H__ #define __WM_TYPE_DEF_H__
#include <stdbool.h>
#ifdef bool
#undef bool
#endif
#ifdef u8 #ifdef u8
#undef u8 #undef u8
#endif #endif
@ -53,7 +51,6 @@ typedef unsigned char INT8U;
#endif #endif
typedef signed char INT8S; typedef signed char INT8S;
typedef unsigned char bool;
typedef unsigned char u8; typedef unsigned char u8;
typedef signed char s8; typedef signed char s8;
typedef unsigned short u16; typedef unsigned short u16;

View File

@ -22,7 +22,7 @@
******************************************************************************/ ******************************************************************************/
MEMORY MEMORY
{ {
I-SRAM : ORIGIN = 0x080d0400 , LENGTH = 0x138000 /* I-SRAM 1M+128KB */ I-SRAM : ORIGIN = 0x080d0400 , LENGTH = 0x128000 /* I-SRAM 1M+160KB */
D-SRAM : ORIGIN = 0x20000100 , LENGTH = 0x47EFC /* D-SRAM 288KB */ D-SRAM : ORIGIN = 0x20000100 , LENGTH = 0x47EFC /* D-SRAM 288KB */
V-SRAM : ORIGIN = 0x20000000 , LENGTH = 0x100 /* off-chip SRAM 8MB */ V-SRAM : ORIGIN = 0x20000000 , LENGTH = 0x100 /* off-chip SRAM 8MB */
} }

View File

@ -443,7 +443,7 @@ void tls_mem_alloc_info(void)
i = 1; i = 1;
dl_list_for_each(pos, &memory_used_list, MEMORY_BLOCK, list){ dl_list_for_each(pos, &memory_used_list, MEMORY_BLOCK, list){
printf("Block(%2d): addr<%p>, file<%s>, line<%d>, length<%d>\r\n", printf("Block(%2d): addr<%p>, file<%s>, line<%d>, length<%d>\r\n",
i, pos->header_pattern, pos->file, pos->line, pos->length); i, (void *)pos->header_pattern, pos->file, pos->line, pos->length);
i++; i++;
} }
tls_os_release_critical(cpu_sr); tls_os_release_critical(cpu_sr);
@ -470,7 +470,7 @@ int is_safe_addr_debug(void* p, u32 len, char* file, int line)
if(((u32)p) + len > ((u32)(pos->header_pattern + sizeof(MEMORY_PATTERN) + PRE_OVERSIZE + pos->length))) if(((u32)p) + len > ((u32)(pos->header_pattern + sizeof(MEMORY_PATTERN) + PRE_OVERSIZE + pos->length)))
{ {
printf("==>Memory oversize. Block(%2d): addr<%p>, file<%s>, line<%d>, length<%d>\r\n", printf("==>Memory oversize. Block(%2d): addr<%p>, file<%s>, line<%d>, length<%d>\r\n",
i, pos->header_pattern, pos->file, pos->line, pos->length); i, (void *)pos->header_pattern, pos->file, pos->line, pos->length);
break; break;
} }
else else
@ -508,7 +508,7 @@ u32 alloc_heap_mem_max_size = 0;
extern u32 total_mem_size; extern u32 total_mem_size;
void * mem_alloc_debug(u32 size) void * mem_alloc_debug(u32 size)
{ {
// u32 cpu_sr = 0; u32 cpu_sr = 0;
u32 *buffer = NULL; u32 *buffer = NULL;
u32 length = size; u32 length = size;
@ -516,6 +516,8 @@ void * mem_alloc_debug(u32 size)
//printf("size:%d\n", size); //printf("size:%d\n", size);
if (!memory_manager_initialized) { if (!memory_manager_initialized) {
tls_os_status_t os_status; tls_os_status_t os_status;
cpu_sr = tls_os_set_critical();
memory_manager_initialized = true; memory_manager_initialized = true;
// //
// NOTE: If two thread allocate the very first allocation simultaneously // NOTE: If two thread allocate the very first allocation simultaneously
@ -525,6 +527,7 @@ void * mem_alloc_debug(u32 size)
os_status = tls_os_sem_create(&mem_sem, 1); os_status = tls_os_sem_create(&mem_sem, 1);
if(os_status != TLS_OS_SUCCESS) if(os_status != TLS_OS_SUCCESS)
printf("mem_alloc_debug: tls_os_sem_create mem_sem error\r\n"); printf("mem_alloc_debug: tls_os_sem_create mem_sem error\r\n");
tls_os_release_critical(cpu_sr);
} }
#if USING_ADD_HEADER #if USING_ADD_HEADER
@ -545,7 +548,7 @@ void * mem_alloc_debug(u32 size)
else else
{ {
tls_os_sem_acquire(mem_sem, 0); tls_os_sem_acquire(mem_sem, 0);
//cpu_sr = tls_os_set_critical(); cpu_sr = tls_os_set_critical();
buffer = (u32*)malloc(length); buffer = (u32*)malloc(length);
if(buffer) if(buffer)
{ {
@ -555,11 +558,8 @@ void * mem_alloc_debug(u32 size)
buffer++; buffer++;
total_mem_size -= length; total_mem_size -= length;
} }
//if(tls_get_isr_count() == 0) tls_os_release_critical(cpu_sr);
// {
// tls_os_release_critical(cpu_sr);
tls_os_sem_release(mem_sem); tls_os_sem_release(mem_sem);
// }
} }
#else #else
tls_os_sem_acquire(mem_sem, 0); tls_os_sem_acquire(mem_sem, 0);
@ -574,7 +574,7 @@ void * mem_alloc_debug(u32 size)
void mem_free_debug(void *p) void mem_free_debug(void *p)
{ {
// u32 cpu_sr = 0; u32 cpu_sr = 0;
// u32 len = 0; // u32 len = 0;
#if USING_ADD_HEADER #if USING_ADD_HEADER
u32* intMemPtr = NULL; u32* intMemPtr = NULL;
@ -584,7 +584,7 @@ void mem_free_debug(void *p)
if(isrstatus == 0) if(isrstatus == 0)
{ {
tls_os_sem_acquire(mem_sem, 0); tls_os_sem_acquire(mem_sem, 0);
// cpu_sr = tls_os_set_critical(); cpu_sr = tls_os_set_critical();
} }
intMemPtr = (u32*)p; intMemPtr = (u32*)p;
@ -611,7 +611,7 @@ void mem_free_debug(void *p)
if(isrstatus == 0) if(isrstatus == 0)
{ {
// tls_os_release_critical(cpu_sr); tls_os_release_critical(cpu_sr);
tls_os_sem_release(mem_sem); tls_os_sem_release(mem_sem);
} }
#else //UCOSII #else //UCOSII
@ -627,7 +627,7 @@ void mem_free_debug(void *p)
void * mem_realloc_debug(void *mem_address, u32 size) void * mem_realloc_debug(void *mem_address, u32 size)
{ {
u32 * mem_re_addr = NULL; u32 * mem_re_addr = NULL;
// u32 cpu_sr = 0; u32 cpu_sr = 0;
u32 length = size; u32 length = size;
#if USING_ADD_HEADER #if USING_ADD_HEADER
@ -665,7 +665,7 @@ void * mem_realloc_debug(void *mem_address, u32 size)
else else
{ {
tls_os_sem_acquire(mem_sem, 0); tls_os_sem_acquire(mem_sem, 0);
// cpu_sr = tls_os_set_critical(); cpu_sr = tls_os_set_critical();
mem_re_addr = (u32*)malloc(length); mem_re_addr = (u32*)malloc(length);
if(mem_re_addr && mem_address) if(mem_re_addr && mem_address)
{ {
@ -683,7 +683,7 @@ void * mem_realloc_debug(void *mem_address, u32 size)
mem_re_addr ++; mem_re_addr ++;
total_mem_size -= length; total_mem_size -= length;
} }
// tls_os_release_critical(cpu_sr); tls_os_release_critical(cpu_sr);
tls_os_sem_release(mem_sem); tls_os_sem_release(mem_sem);
mem_free_debug(mem_address); mem_free_debug(mem_address);
@ -704,7 +704,7 @@ void * mem_realloc_debug(void *mem_address, u32 size)
void *mem_calloc_debug(u32 n, u32 size) void *mem_calloc_debug(u32 n, u32 size)
{ {
// u32 cpu_sr = 0; u32 cpu_sr = 0;
u32 *buffer = NULL; u32 *buffer = NULL;
u32 length = 0; u32 length = 0;
@ -728,7 +728,7 @@ void *mem_calloc_debug(u32 n, u32 size)
else else
{ {
tls_os_sem_acquire(mem_sem, 0); tls_os_sem_acquire(mem_sem, 0);
// cpu_sr = tls_os_set_critical(); cpu_sr = tls_os_set_critical();
buffer = (u32*)malloc(length); buffer = (u32*)malloc(length);
if(buffer) if(buffer)
{ {
@ -740,7 +740,7 @@ void *mem_calloc_debug(u32 n, u32 size)
total_mem_size -= length; total_mem_size -= length;
} }
// tls_os_release_critical(cpu_sr); tls_os_release_critical(cpu_sr);
tls_os_sem_release(mem_sem); tls_os_sem_release(mem_sem);
} }
#else //UCOSII #else //UCOSII
@ -765,15 +765,15 @@ u32 tls_mem_get_avail_heapsize(void)
{ {
#if USING_ADD_HEADER #if USING_ADD_HEADER
u32 availablemem = 0; u32 availablemem = 0;
// u32 cpu_sr; u32 cpu_sr;
tls_os_sem_acquire(mem_sem, 0); tls_os_sem_acquire(mem_sem, 0);
//cpu_sr = tls_os_set_critical(); cpu_sr = tls_os_set_critical();
availablemem = total_mem_size; availablemem = total_mem_size;
// tls_os_release_critical(cpu_sr); tls_os_release_critical(cpu_sr);
tls_os_sem_release(mem_sem); tls_os_sem_release(mem_sem);
return availablemem/*&0xFFFFF000*/; return availablemem;
#else #else
u8 *p = NULL; u8 *p = NULL;
u32 startpos = 0; u32 startpos = 0;

View File

@ -17,7 +17,7 @@
#include "wm_mem.h" #include "wm_mem.h"
#include "tls_common.h" #include "tls_common.h"
#include "wm_debug.h" #include "wm_debug.h"
//#include "wm_sockets.h" #include "wm_sockets.h"
#include "utils.h" #include "utils.h"
@ -454,8 +454,8 @@ char * strndup(const char *s, size_t len)
memcpy(ret, s, len); memcpy(ret, s, len);
return ret; return ret;
} }
#if 0 #if 1
int gettimeofday(struct timeval *tv, void *tz) int gettimeofday(struct timeval *tv, struct timezone *tz)
{ {
int ret = 0; int ret = 0;
u32 current_tick; u32 current_tick;

View File

@ -31,10 +31,14 @@ typedef struct
double a[3]; double a[3];
}ST_ADC_POLYFIT_PARAM; }ST_ADC_POLYFIT_PARAM;
/*f(x) = kx + b*/
//#define ADC_CAL_K_POS (6)
//#define ADC_CAL_B_POS (7)
ST_ADC_POLYFIT_PARAM _polyfit_param = {0}; ST_ADC_POLYFIT_PARAM _polyfit_param = {0};
extern void polyfit(int n,double x[],double y[],int poly_n,double a[]); extern void polyfit(int n,double x[],double y[],int poly_n,double a[]);
//TODO
#define HR_SD_ADC_CONFIG_REG 0
static int adc_offset = 0; static int adc_offset = 0;
static int *adc_dma_buffer = NULL; static int *adc_dma_buffer = NULL;
volatile ST_ADC gst_adc; volatile ST_ADC gst_adc;
@ -79,28 +83,45 @@ static void adc_dma_isr_callbk(void)
} }
int adc_polyfit_init(ST_ADC_POLYFIT_PARAM *polyfit_param) int adc_polyfit_init(ST_ADC_POLYFIT_PARAM *polyfit_param)
{ {
FT_ADC_CAL_ST adc_st; FT_ADC_CAL_ST adc_cal;
double x[16] = {0}; /*function f(x) = ax + b*/
double y[16] = {0}; float a = 0.0;
int n = 4, poly_n = 1; // or = 2 float b = 0.0;
int i; int i;
double x[8] = {0.0};
double y[8] = {0.0};
polyfit_param->poly_n = 0; polyfit_param->poly_n = 0;
memset(&adc_st, 0, sizeof(adc_st)); memset(&adc_cal, 0, sizeof(adc_cal));
tls_get_adc_cal_param(&adc_st); tls_get_adc_cal_param(&adc_cal);
//dumpBuffer("adc_st",(char *)&adc_st, sizeof(adc_st)); if ((adc_cal.valid_cnt == 4)
n = adc_st.valid_cnt; ||(adc_cal.valid_cnt == 2)
if(n >= 4 && n <= 8) || (adc_cal.valid_cnt == 3))
{ {
for(i = 0; i < n; i++) //memcpy((char *)&a, (char *)&adc_cal.units[ADC_CAL_K_POS], 4);
//memcpy((char *)&b, (char *)&adc_cal.units[ADC_CAL_B_POS], 4);
a = adc_cal.a;
b = adc_cal.b;
if ((a > 1.0) && (a < 1.3) && (b < -1000.0)) /*new calibration*/
{ {
x[i] = (double)adc_st.units[i].real_val; polyfit_param->poly_n = 1;
y[i] = (double)adc_st.units[i].ref_val; polyfit_param->a[1] = a;
polyfit_param->a[0] = b;
}
else /*old calibration*/
{
for(i = 0; i < adc_cal.valid_cnt; i++)
{
x[i] = (double)adc_cal.units[i].real_val;
y[i] = (double)adc_cal.units[i].ref_val;
}
polyfit_param->poly_n = 1;
polyfit(adc_cal.valid_cnt,x,y,1, polyfit_param->a);
if (b < -1000.0)
{
polyfit_param->a[0] = b;
}
} }
polyfit_param->poly_n = poly_n;
polyfit(n,x,y,poly_n,polyfit_param->a);
} }
return 0; return 0;
@ -472,26 +493,11 @@ static void waitForAdcDone(void)
int cal_voltage(double vol) int cal_voltage(double vol)
{ {
double y1, voltage; double y1, voltage;
double vol_30mV;
int average = ((int)vol >> 2) & 0xFFFF; int average = ((int)vol >> 2) & 0xFFFF;
if(_polyfit_param.poly_n == 2) if(_polyfit_param.poly_n == 1)
{
y1 = _polyfit_param.a[2]*average*average + _polyfit_param.a[1]*average + _polyfit_param.a[0];
}
else if(_polyfit_param.poly_n == 1)
{ {
y1 = _polyfit_param.a[1]*average + _polyfit_param.a[0]; y1 = _polyfit_param.a[1]*average + _polyfit_param.a[0];
vol_30mV = ((double)300.0L - _polyfit_param.a[0]) / _polyfit_param.a[1];
if(average + 170 < vol_30mV)
{
return 0;
}
else if(average < vol_30mV)
{
y1 = 300.0L - 200.0L*(vol_30mV - average) / 170.0L;
}
} }
else else
{ {

View File

@ -0,0 +1,187 @@
/*****************************************************************************
*
* File Name : wm_adc_cal.c
*
* Description: adc calibration
*
* Copyright (c) 2014 Winner Microelectronics Co., Ltd.
* All rights reserved.
*
* Author :
*
* Date : 2022-10-10
*****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "wm_include.h"
#include "wm_regs.h"
#include "wm_adc.h"
#include "wm_io.h"
#include "wm_gpio_afsel.h"
#include "wm_efuse.h"
#define ZERO_CAL_MAX_NUM (10)
/*f(x) = kx + b*/
//#define ADC_CAL_B_POS (7)
//#define ADC_CAL_K_POS (6)
#define ADC_CAL_REF_VOLTAGE_POS (5)
extern void polyfit(int n,double x[],double y[],int poly_n,double a[]);
/**
* @brief This function can used to calibrate adc coefficient if not calibrated,
* or adc offset after FT or multipoint calibration.
*
* @param[in] chanused: bitmap, specified calibration channel,only bit0-3 can be used
* @param[in] refvoltage[]: array, calibration reference voltage to be used, unit:mV
* refvoltage keep the same position with chan bitmap
* real range[100,2300)mV, suggest reference voltage[500,2000]mV
*
* @return 0: success, < 0: failure
*
* @note 1)Adc curve is y=ax+b,y is real voltage(unit:mV), x is adc sample data.
* After calibration, we can get a and b, or only update b.
* 2) Only used single-end adc
* 3) For example, use chan 0,1,3, and refvoltage 500,1000,2000,
* then chanused is 0xB, refvoltage[] value is {500,1000,0, 2000};
*/
int adc_multipoint_calibration(int chanused, int refvoltage[])
{
#define MAX_ADC_CAL_CHAN (4)
#define MAX_ADC_REF_VOLTAGE (2300)
#define MIN_ADC_REF_VOLTAGE (100)
if (((chanused &((1<<MAX_ADC_CAL_CHAN)-1)) == 0) || (refvoltage == NULL))
{
return -1;
}
FT_ADC_CAL_ST adc_cal;
int average = 0;
int chancnt = 0;
u32 sum_value = 0;
float b = 0.0;
int *prefvoltage = refvoltage;
/*update calibration parameter*/
memset(&adc_cal, 0xFF, sizeof(FT_ADC_CAL_ST));
for (int j = 0; j < MAX_ADC_CAL_CHAN; j++)
{
if ((chanused&(1<<j)) == 0)
{
continue;
}
if ((prefvoltage[j] < MIN_ADC_REF_VOLTAGE) || (prefvoltage[j] >= MAX_ADC_REF_VOLTAGE))
{
return -1;
}
/*config adc chan for calibration*/
wm_adc_config(j);
/*config adc and start capture data*/
tls_adc_init(0, 0);
tls_adc_reference_sel(ADC_REFERENCE_INTERNAL);
tls_adc_set_pga(1,1);
tls_adc_set_clk(40);
tls_adc_start_with_cpu(j);
tls_os_time_delay(1);
sum_value = 0;
for (int i = 1; i <= ZERO_CAL_MAX_NUM; i++)
{
tls_os_time_delay(1);
average = *(TLS_REG *)(HR_SD_ADC_RESULT_REG);
average = ADC_RESULT_VAL(average);
signedToUnsignedData(&average);
sum_value += average;
}
adc_cal.units[chancnt].ref_val = prefvoltage[j]*10;
adc_cal.units[chancnt].real_val = sum_value/ZERO_CAL_MAX_NUM/4;
chancnt++;
tls_adc_stop(0);
}
if (chancnt >= 2)
{
float k = 0.0;
double a[4] = {0.0};
double x[8] = {0.0};
double y[8] = {0.0};
for(int i = 0; i < chancnt; i++)
{
x[i] = (double)adc_cal.units[i].real_val;
y[i] = (double)adc_cal.units[i].ref_val;
}
polyfit(chancnt, x, y, 1, a);
k = (float)a[1];
b = (float)a[0];
//memcpy((char *)&adc_cal.units[ADC_CAL_K_POS], (char *)&k, 4);
//memcpy((char *)&adc_cal.units[ADC_CAL_B_POS], (char *)&b, 4);
adc_cal.a = k;
adc_cal.b = b;
adc_cal.valid_cnt = chancnt;
return tls_set_adc_cal_param(&adc_cal);
}
else /*only one reference voltage*/
{
/*update calibration parameter*/
int currentvalue = cal_voltage((double)adc_cal.units[0].real_val*4);
int ret = tls_get_adc_cal_param(&adc_cal);
if ((ret == 0) && (adc_cal.valid_cnt >= 2) && (adc_cal.valid_cnt <= 4))
{
/*reference voltage by user settings*/
for (int i = 0; i < MAX_ADC_CAL_CHAN; i++)
{
if (chanused&(1<<i))
{
adc_cal.units[ADC_CAL_REF_VOLTAGE_POS].ref_val = prefvoltage[i];
average = prefvoltage[i];
break;
}
}
/*update parameter b that used by the function f(x)=ax+b */
//memcpy((char *)&b, (char *)&adc_cal.units[ADC_CAL_B_POS], 4);
b = adc_cal.b;
b = b + (average - currentvalue)*10; /*0.1mV*/
//memcpy((char *)&adc_cal.units[ADC_CAL_B_POS], (char *)&b, 4);
adc_cal.b = b;
return tls_set_adc_cal_param(&adc_cal);
}
else
{
return -1;
}
}
}
/**
* @brief This function is used to calibrate adc offset after FT or multipoint calibration.
*
* @param[in] chan: adc calibration channel to be used
* @param[in] refvoltage: calibration reference voltage to be used, unit:mV
*
* @return 0: success, < 0: failure
*
* @note After FT calibration or mulitpoint calibration, adc curve is y=ax+b,
* y is real voltage(unit:mV), x is adc sample data
* a and b is the coefficient. This fuction only used to revise b value.
*/
int adc_offset_calibration(int chan, int refvoltage)
{
if (chan >= 0 && chan < 4)
{
int refvol[4] = {0, 0, 0, 0};
refvol[chan] = refvoltage;
return adc_multipoint_calibration((1<<chan), refvol);
}
return -1;
}

View File

@ -8,7 +8,7 @@
void polyfit_verify(double x, double* a) void polyfit_verify(double x, double* a)
{ {
double y1 = a[2]*x*x + a[1]*x + a[0]; double y1 = a[1]*x + a[0];
printf("x=%d, y1=%d\n", (int)x, (int)(y1+0.5)); printf("x=%d, y1=%d\n", (int)x, (int)(y1+0.5));
} }
@ -95,9 +95,9 @@ x[i]-=A[i*n+j]*x[j];
void polyfit_test(void) void polyfit_test(void)
{ {
int i,n=4,poly_n=2; int i,n=2,poly_n=1;
double x[4]={4823, 9816, 14851, 19837},y[4]={5000, 9986, 15001, 19959}; double x[2]={15174, 19196},y[2]={5000, 9986};
double a[3]; double a[2];
void polyfit(int n,double *x,double *y,int poly_n,double a[]); void polyfit(int n,double *x,double *y,int poly_n,double a[]);

View File

@ -26,6 +26,7 @@
#define FT_MAGICNUM_ADDR (FLASH_BASE_ADDR) #define FT_MAGICNUM_ADDR (FLASH_BASE_ADDR)
#define FT_PARAM_RUNTIME_ADDR (FT_MAGICNUM_ADDR + 0x1000)
#define MAGICNUM_LEN (4) #define MAGICNUM_LEN (4)
#define MAC_ADDR_LEN (6) #define MAC_ADDR_LEN (6)
#define FT_GAIN_LEN (84) #define FT_GAIN_LEN (84)
@ -70,28 +71,23 @@ static u8 default_mac[6] = {0x00,0x25,0x08,0x09,0x01,0x0F};
FT_PARAM_ST_VER1 gftParamVer1; FT_PARAM_ST_VER1 gftParamVer1;
FT_PARAM_ST *gftParam = (FT_PARAM_ST *)&gftParamVer1; FT_PARAM_ST *gftParam = (FT_PARAM_ST *)&gftParamVer1;
int tls_ft_param_init(void) static int _ft_ext1_valid(FT_PARAM_ST *pft)
{
//printf("version_no %d, ext_param_len %x\n", pft->version_no, pft->ext_param_len);
if (pft->version_no > 0 && pft->version_no < 0xFFFF && pft->ext_param_len >= sizeof(FT_PARAM_ST_EXT_1) &&
pft->ext_param_len <= (sizeof(FT_PARAM_ST_EXT_1) + FT_PARAM_EXT_REVERSED_LEN))
{
return TRUE;
}
return FALSE;
}
static int _ft_param_init(u32 ft_addr, FT_PARAM_ST *pft)
{ {
u32 crcvalue = 0; u32 crcvalue = 0;
psCrcContext_t ctx; psCrcContext_t ctx;
FT_PARAM_ST_VER1 *pft_ver1 = NULL; FT_PARAM_ST_VER1 *pft_ver1 = NULL;
FT_PARAM_ST *pft = NULL;
if (gftParam->magic_no == SIGNATURE_WORD) tls_fls_read(ft_addr, (unsigned char *)pft, sizeof(FT_PARAM_ST_VER1));
{
return TRUE;
}
pft = tls_mem_alloc(sizeof(FT_PARAM_ST_VER1));
if (pft == NULL)
{
return FALSE;
}
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
memset(gftParam, 0xFF, sizeof(FT_PARAM_ST_VER1));
tls_fls_read(FT_MAGICNUM_ADDR, (unsigned char *)pft, sizeof(FT_PARAM_ST_VER1));
if (pft->magic_no == SIGNATURE_WORD) if (pft->magic_no == SIGNATURE_WORD)
{ {
tls_crypto_init(); tls_crypto_init();
@ -100,14 +96,13 @@ int tls_ft_param_init(void)
tls_crypto_crc_final(&ctx, &crcvalue); tls_crypto_crc_final(&ctx, &crcvalue);
if (pft->checksum != crcvalue) if (pft->checksum != crcvalue)
{ {
tls_mem_free(pft); //tls_mem_free(pft);
return FALSE; return FALSE;
} }
do do
{ {
if (pft->version_no > 0 && pft->version_no < 0xFFFF && pft->ext_param_len >= sizeof(FT_PARAM_ST_EXT_1) && if (_ft_ext1_valid(pft))
pft->ext_param_len <= (sizeof(FT_PARAM_ST_EXT_1) + FT_PARAM_EXT_REVERSED_LEN))
{ {
pft_ver1 = (FT_PARAM_ST_VER1 *)pft; pft_ver1 = (FT_PARAM_ST_VER1 *)pft;
tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT); tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT);
@ -115,31 +110,100 @@ int tls_ft_param_init(void)
tls_crypto_crc_final(&ctx, &crcvalue); tls_crypto_crc_final(&ctx, &crcvalue);
if(pft_ver1->ext_checksum == crcvalue) if(pft_ver1->ext_checksum == crcvalue)
{ {
memcpy((unsigned char *)gftParam, (unsigned char *)pft, sizeof(FT_PARAM_ST_VER1)); return 1;
break; }
else
{
return FALSE;
} }
} }
pft->version_no = 0xFFFF; pft->version_no = 0xFFFF;
pft->ext_param_len = 0xFFFF; pft->ext_param_len = 0xFFFF;
memcpy((unsigned char *)gftParam, (unsigned char *)pft, sizeof(FT_PARAM_ST));
}while(0); }while(0);
return 2;
}
return FALSE;
}
int tls_ft_param_init(void)
{
int ret = 0;
FT_PARAM_ST *pft = NULL;
if (gftParam->magic_no == SIGNATURE_WORD)
{
return TRUE;
}
memset(gftParam, 0xFF, sizeof(FT_PARAM_ST_VER1));
pft = tls_mem_alloc(sizeof(FT_PARAM_ST_VER1));
if (pft == NULL)
{
return FALSE;
}
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_PARAM_RUNTIME_ADDR, pft);
if(FALSE == ret)
{
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_MAGICNUM_ADDR, pft);
}
if(1 == ret)
{
memcpy((unsigned char *)gftParam, (unsigned char *)pft, sizeof(FT_PARAM_ST_VER1));
}
else if(2 == ret)
{
memcpy((unsigned char *)gftParam, (unsigned char *)pft, sizeof(FT_PARAM_ST));
} }
tls_mem_free(pft); tls_mem_free(pft);
/*lock parameter*/ /*lock parameter*/
tls_flash_unlock(); tls_flash_unlock();
return TRUE; return ret;
} }
int tls_ft_param_get(unsigned int opnum, void *data, unsigned int rdlen) int tls_ft_param_get(unsigned int opnum, void *data, unsigned int rdlen)
{ {
int ret = 0;
switch (opnum) switch (opnum)
{ {
case CMD_FREQ_ERR:
if(_ft_ext1_valid(gftParam))
{
memcpy(data, (char *)&gftParamVer1.ft_ext1.rf_freq_err, FREQERR_LEN);
}
else
{
ret = tls_fls_read(FREQERR_ADDR, data, FREQERR_LEN);
if(ret)
{
return -1;
}
}
break;
case CMD_RF_CAL_FLAG:
if(_ft_ext1_valid(gftParam))
{
memcpy(data, (char *)&gftParamVer1.ft_ext1.rf_cal_flag, CAL_FLAG_LEN);
}
else
{
ret = tls_fls_read(CAL_FLAG_ADDR, data, CAL_FLAG_LEN);
if(ret)
{
return -1;
}
}
break;
case CMD_TX_ADC_CAL: case CMD_TX_ADC_CAL:
if(gftParam->version_no > 0 && gftParam->version_no < 0xFFFF) if(_ft_ext1_valid(gftParam))
{ {
memcpy(data, (unsigned char *)&gftParamVer1.ft_ext1.adc_cal_param, rdlen); memcpy(data, (unsigned char *)&gftParamVer1.ft_ext1.adc_cal_param, rdlen);
} }
else
{
return -1;
}
break; break;
case CMD_WIFI_MAC: /*MAC*/ case CMD_WIFI_MAC: /*MAC*/
if ((gftParam->wifi_mac_addr[0]&0x1) if ((gftParam->wifi_mac_addr[0]&0x1)
@ -217,13 +281,57 @@ int tls_ft_param_set(unsigned int opnum, void *data, unsigned int len)
{ {
psCrcContext_t ctx; psCrcContext_t ctx;
unsigned int writelen = 0; unsigned int writelen = 0;
FT_PARAM_ST *pft = NULL;
int ret = 0;
if (!data || !len) if (!data || !len)
{ {
return -1; return -1;
} }
pft = tls_mem_alloc(sizeof(FT_PARAM_ST_VER1));
if (pft == NULL)
{
return -1;
}
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_PARAM_RUNTIME_ADDR, pft);
if(ret)
{
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_MAGICNUM_ADDR, pft);
if(!ret || memcmp(pft, gftParam, sizeof(FT_PARAM_ST_VER1)))
{
tls_flash_unlock();
tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, sizeof(FT_PARAM_ST_VER1));
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_MAGICNUM_ADDR, pft);
if(!ret || memcmp(pft, gftParam, sizeof(FT_PARAM_ST_VER1)))
{
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
tls_mem_free(pft);
return -1;
}
}
}
if(!_ft_ext1_valid(gftParam))
{
gftParam->version_no = 1;
gftParam->ext_param_len = sizeof(FT_PARAM_ST_EXT_1);
memset((char *)&gftParamVer1.ft_ext1, 0xFF, gftParam->ext_param_len);
}
switch (opnum) switch (opnum)
{ {
case CMD_FREQ_ERR:
memcpy((char *)&gftParamVer1.ft_ext1.rf_freq_err, (char *)data, FREQERR_LEN);
break;
case CMD_RF_CAL_FLAG:
memcpy((char *)&gftParamVer1.ft_ext1.rf_cal_flag, (char *)data, CAL_FLAG_LEN);
break;
case CMD_TX_ADC_CAL:
memcpy((unsigned char *)&gftParamVer1.ft_ext1.adc_cal_param, data, len);
break;
case CMD_WIFI_MAC: /*MAC*/ case CMD_WIFI_MAC: /*MAC*/
memcpy(gftParam->wifi_mac_addr, (unsigned char *)data, len); memcpy(gftParam->wifi_mac_addr, (unsigned char *)data, len);
break; break;
@ -269,25 +377,44 @@ int tls_ft_param_set(unsigned int opnum, void *data, unsigned int len)
break; break;
default: default:
tls_mem_free(pft);
return -1; return -1;
} }
tls_crypto_init(); tls_crypto_init();
tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT); /*len to write to flash*/
gftParam->magic_no = SIGNATURE_WORD;
tls_crypto_crc_update(&ctx, (unsigned char *)gftParam + 8, sizeof(FT_PARAM_ST) -8);
tls_crypto_crc_final(&ctx, &gftParam->checksum);
writelen = sizeof(FT_PARAM_ST);
if(gftParam->version_no > 0 && gftParam->version_no < 0xFFFF)
{
writelen = sizeof(FT_PARAM_ST_VER1); writelen = sizeof(FT_PARAM_ST_VER1);
tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT); tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT);
tls_crypto_crc_update(&ctx, (unsigned char *)&gftParamVer1.ft_ext1, gftParam->ext_param_len); tls_crypto_crc_update(&ctx, (unsigned char *)&gftParamVer1.ft_ext1, gftParam->ext_param_len);
tls_crypto_crc_final(&ctx, &gftParamVer1.ext_checksum); tls_crypto_crc_final(&ctx, &gftParamVer1.ext_checksum);
}
gftParam->magic_no = SIGNATURE_WORD;
tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT);
tls_crypto_crc_update(&ctx, (unsigned char *)gftParam + 8, sizeof(FT_PARAM_ST) -8);
tls_crypto_crc_final(&ctx, &gftParam->checksum);
tls_flash_unlock(); tls_flash_unlock();
tls_fls_write(FT_PARAM_RUNTIME_ADDR, (unsigned char *)gftParam, writelen);
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_PARAM_RUNTIME_ADDR, pft);
if(!ret || memcmp(pft, gftParam, sizeof(FT_PARAM_ST_VER1)))
{
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
tls_mem_free(pft);
return -1;
}
tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, writelen); tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, writelen);
tls_flash_lock(); memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
ret = _ft_param_init(FT_MAGICNUM_ADDR, pft);
if(!ret || memcmp(pft, gftParam, sizeof(FT_PARAM_ST_VER1)))
{
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
tls_mem_free(pft);
return -1;
}
memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
tls_mem_free(pft);
//tls_flash_lock();
return 0; return 0;
} }
@ -479,35 +606,15 @@ int tls_set_rx_iq_phase(u8 *rxPhase)
int tls_freq_err_op(u8 *freqerr, u8 flag) int tls_freq_err_op(u8 *freqerr, u8 flag)
{ {
int ret = 0; int ret = 0;
psCrcContext_t ctx;
int value = 0; int value = 0;
if (flag){ if (flag){
tls_flash_unlock(); ret = tls_ft_param_set(CMD_FREQ_ERR, freqerr, FREQERR_LEN);
if(gftParam->version_no > 0 && gftParam->version_no < 0xFFFF)
{
memcpy((char *)&gftParamVer1.ft_ext1.rf_freq_err, (char *)freqerr, FREQERR_LEN);
tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT);
tls_crypto_crc_update(&ctx, (unsigned char *)&gftParamVer1.ft_ext1, gftParam->ext_param_len);
tls_crypto_crc_final(&ctx, &gftParamVer1.ext_checksum);
ret = tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, sizeof(FT_PARAM_ST_VER1));
} }
else else
{ {
ret = tls_fls_write(FREQERR_ADDR, freqerr, FREQERR_LEN); ret = tls_ft_param_get(CMD_FREQ_ERR, freqerr, FREQERR_LEN);
} if(!ret)
tls_flash_lock();
}
else
{ {
if(gftParam->version_no > 0 && gftParam->version_no < 0xFFFF)
{
memcpy((char *)freqerr, (char *)&gftParamVer1.ft_ext1.rf_freq_err, FREQERR_LEN);
}
else
{
ret = tls_fls_read(FREQERR_ADDR, freqerr, FREQERR_LEN);
}
memcpy(&value, freqerr, FREQERR_LEN); memcpy(&value, freqerr, FREQERR_LEN);
if (value > 200000) /*when freq offset is out of range (-200KHz, 200KHz),do not use it*/ if (value > 200000) /*when freq offset is out of range (-200KHz, 200KHz),do not use it*/
{ {
@ -520,6 +627,7 @@ int tls_freq_err_op(u8 *freqerr, u8 flag)
memcpy((char *)freqerr, (char *)&value, FREQERR_LEN); memcpy((char *)freqerr, (char *)&value, FREQERR_LEN);
} }
} }
}
if (ret == 0) if (ret == 0)
{ {
return TLS_EFUSE_STATUS_OK; return TLS_EFUSE_STATUS_OK;
@ -533,33 +641,12 @@ int tls_freq_err_op(u8 *freqerr, u8 flag)
int tls_rf_cal_finish_op(u8 *calflag, u8 flag) int tls_rf_cal_finish_op(u8 *calflag, u8 flag)
{ {
int ret = 0; int ret = 0;
psCrcContext_t ctx;
if (flag){ if (flag){
tls_flash_unlock(); ret = tls_ft_param_set(CMD_RF_CAL_FLAG, calflag, CAL_FLAG_LEN);
if(gftParam->version_no > 0 && gftParam->version_no < 0xFFFF)
{
memcpy((char *)&gftParamVer1.ft_ext1.rf_cal_flag, (char *)calflag, CAL_FLAG_LEN);
tls_crypto_crc_init(&ctx, 0xFFFFFFFF, CRYPTO_CRC_TYPE_32, INPUT_REFLECT | OUTPUT_REFLECT);
tls_crypto_crc_update(&ctx, (unsigned char *)&gftParamVer1.ft_ext1, gftParam->ext_param_len);
tls_crypto_crc_final(&ctx, &gftParamVer1.ext_checksum);
ret = tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, sizeof(FT_PARAM_ST_VER1));
} }
else else
{ {
ret = tls_fls_write(CAL_FLAG_ADDR, calflag, CAL_FLAG_LEN); ret = tls_ft_param_get(CMD_RF_CAL_FLAG, calflag, CAL_FLAG_LEN);
}
tls_flash_lock();
}
else
{
if(gftParam->version_no > 0 && gftParam->version_no < 0xFFFF)
{
memcpy((char *)calflag, (char *)&gftParamVer1.ft_ext1.rf_cal_flag, CAL_FLAG_LEN);
}
else
{
ret = tls_fls_read(CAL_FLAG_ADDR, calflag, CAL_FLAG_LEN);
}
} }
if (ret == 0) if (ret == 0)
@ -600,11 +687,31 @@ int tls_set_tx_gain(u8 *txgain)
} }
/**
* @brief This function is used to get adc cal param
*
* @param[out] adc_cal adc cal param
*
* @retval TLS_EFUSE_STATUS_OK get success
* @retval TLS_EFUSE_STATUS_EIO get failed
*/
int tls_get_adc_cal_param(FT_ADC_CAL_ST *adc_cal) int tls_get_adc_cal_param(FT_ADC_CAL_ST *adc_cal)
{ {
return tls_ft_param_get(CMD_TX_ADC_CAL, adc_cal, sizeof(FT_ADC_CAL_ST)); return tls_ft_param_get(CMD_TX_ADC_CAL, adc_cal, sizeof(FT_ADC_CAL_ST));
} }
/**
* @brief This function is used to set adc cal param
*
* @param[out] adc_cal adc cal param
*
* @retval TLS_EFUSE_STATUS_OK get success
* @retval TLS_EFUSE_STATUS_EIO get failed
*/
int tls_set_adc_cal_param(FT_ADC_CAL_ST *adc_cal)
{
return tls_ft_param_set(CMD_TX_ADC_CAL, adc_cal, sizeof(FT_ADC_CAL_ST));
}

View File

@ -206,7 +206,7 @@ void wm_psram_config(uint8_t numsel)
{ {
switch(numsel) switch(numsel)
{ {
case 0: case 0://W800 or w801
tls_io_cfg_set(WM_IO_PB_00, WM_IO_OPTION4);/*CK*/ tls_io_cfg_set(WM_IO_PB_00, WM_IO_OPTION4);/*CK*/
tls_io_cfg_set(WM_IO_PB_01, WM_IO_OPTION4);/*CS*/ tls_io_cfg_set(WM_IO_PB_01, WM_IO_OPTION4);/*CS*/
tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/ tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/
@ -217,6 +217,16 @@ void wm_psram_config(uint8_t numsel)
break; break;
case 1://w801 case 1://w801
tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION1);/*CK*/
tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION1);/*CS*/
tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/
tls_io_cfg_set(WM_IO_PB_03, WM_IO_OPTION4);/*D1*/
tls_io_cfg_set(WM_IO_PB_04, WM_IO_OPTION4);/*D2*/
tls_io_cfg_set(WM_IO_PB_05, WM_IO_OPTION4);/*D3*/
tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM);
break;
case 2://w861
tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION1);/*CK*/ tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION1);/*CK*/
tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION1);/*CS*/ tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION1);/*CS*/
tls_io_cfg_set(WM_IO_PB_28, WM_IO_OPTION1);/*D0*/ tls_io_cfg_set(WM_IO_PB_28, WM_IO_OPTION1);/*D0*/
@ -1089,7 +1099,7 @@ void wm_gpio_af_disable(void)
#endif #endif
tls_reg_write32(HR_GPIOB_AFSEL, 0x0); tls_reg_write32(HR_GPIOB_AFSEL, 0x0);
tls_reg_write32(HR_GPIOA_DATA_PULLEN, 0xffff); tls_reg_write32(HR_GPIOA_DATA_PULLEN, 0x0);
tls_reg_write32(HR_GPIOB_DATA_PULLEN, 0xffffffff); tls_reg_write32(HR_GPIOB_DATA_PULLEN, 0x0);
} }

View File

@ -59,17 +59,18 @@ static void writeBpBit_for_1wreg(char cmp, char bp4, char bp3, char bp2, char bp
M32(HR_FLASH_CMD_ADDR) = 0x0C035; M32(HR_FLASH_CMD_ADDR) = 0x0C035;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
status |= (read_first_value() & 0xFF) << 8; status |= (read_first_value() & 0xFF) << 8;
bpstatus = (bp4 << 6) | (bp3 << 5) | (bp2 << 4) | (bp1 << 3) | (bp0 << 2);
if ((status & 0x407C) != (bpstatus|(cmp<<14)))
{
status = (status & 0xBF83) | bpstatus | (cmp << 14);
/*Write Enable*/ /*Write Enable*/
M32(HR_FLASH_CMD_ADDR) = 0x6; M32(HR_FLASH_CMD_ADDR) = 0x6;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
bpstatus = (bp4 << 6) | (bp3 << 5) | (bp2 << 4) | (bp1 << 3) | (bp0 << 2);
status = (status & 0xBF83) | bpstatus | (cmp << 14);
M32(RSA_BASE_ADDRESS) = status; M32(RSA_BASE_ADDRESS) = status;
M32(HR_FLASH_CMD_ADDR) = 0x1A001; M32(HR_FLASH_CMD_ADDR) = 0x1A001;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
}
} }
static void writeBpBit_for_2wreg(char cmp, char bp4, char bp3, char bp2, char bp1, char bp0) static void writeBpBit_for_2wreg(char cmp, char bp4, char bp3, char bp2, char bp1, char bp0)
@ -86,17 +87,21 @@ static void writeBpBit_for_2wreg(char cmp, char bp4, char bp3, char bp2, char bp
status |= (read_first_value() & 0xFF) << 8; status |= (read_first_value() & 0xFF) << 8;
/*Write Enable*/ /*Write Enable*/
bpstatus = (bp4 << 6) | (bp3 << 5) | (bp2 << 4) | (bp1 << 3) | (bp0 << 2);
if ((bpstatus != (status & 0x7C)))
{
bpstatus = (status & 0x83) | bpstatus;
M32(HR_FLASH_CMD_ADDR) = 0x6; M32(HR_FLASH_CMD_ADDR) = 0x6;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
bpstatus = (bp4 << 6) | (bp3 << 5) | (bp2 << 4) | (bp1 << 3) | (bp0 << 2);
bpstatus = (status & 0x83) | bpstatus;
M32(RSA_BASE_ADDRESS) = bpstatus; M32(RSA_BASE_ADDRESS) = bpstatus;
M32(HR_FLASH_CMD_ADDR) = 0xA001; M32(HR_FLASH_CMD_ADDR) = 0xA001;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
}
if (((status & 0x4000)>>8) != (cmp << 6))
{
M32(HR_FLASH_CMD_ADDR) = 0x6; M32(HR_FLASH_CMD_ADDR) = 0x6;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
@ -104,6 +109,7 @@ static void writeBpBit_for_2wreg(char cmp, char bp4, char bp3, char bp2, char bp
M32(RSA_BASE_ADDRESS) = status; M32(RSA_BASE_ADDRESS) = status;
M32(HR_FLASH_CMD_ADDR) = 0xA031; M32(HR_FLASH_CMD_ADDR) = 0xA031;
M32(HR_FLASH_CMD_START) = CMD_START_Msk; M32(HR_FLASH_CMD_START) = CMD_START_Msk;
}
} }
@ -150,10 +156,10 @@ static int flashunlock(void)
{ {
case SPIFLASH_MID_GD: case SPIFLASH_MID_GD:
case SPIFLASH_MID_TSINGTENG: case SPIFLASH_MID_TSINGTENG:
case SPIFLASH_MID_TSINGTENG_1MB:
writeBpBit_for_1wreg(0, 0, 0, 0, 0, 0); writeBpBit_for_1wreg(0, 0, 0, 0, 0, 0);
break; break;
case SPIFLASH_MID_PUYA: case SPIFLASH_MID_PUYA:
case SPIFLASH_MID_TSINGTENG_1MB_4MB:
if (inside_fls->density == 0x100000)/*PUYA 1M Flash use 1 register to set lock/unlock*/ if (inside_fls->density == 0x100000)/*PUYA 1M Flash use 1 register to set lock/unlock*/
{ {
writeBpBit_for_1wreg(0, 0, 0, 0, 0, 0); writeBpBit_for_1wreg(0, 0, 0, 0, 0, 0);
@ -184,10 +190,10 @@ static int flashlock(void)
{ {
case SPIFLASH_MID_GD: case SPIFLASH_MID_GD:
case SPIFLASH_MID_TSINGTENG: case SPIFLASH_MID_TSINGTENG:
case SPIFLASH_MID_TSINGTENG_1MB:
writeBpBit_for_1wreg(0, 1, 1, 0, 1, 0); writeBpBit_for_1wreg(0, 1, 1, 0, 1, 0);
break; break;
case SPIFLASH_MID_PUYA: case SPIFLASH_MID_PUYA:
case SPIFLASH_MID_TSINGTENG_1MB_4MB:
if (inside_fls->density == 0x100000) /*PUYA 1M Flash use 1 register to set lock/unlock*/ if (inside_fls->density == 0x100000) /*PUYA 1M Flash use 1 register to set lock/unlock*/
{ {
writeBpBit_for_1wreg(0, 1, 1, 0, 1, 0); writeBpBit_for_1wreg(0, 1, 1, 0, 1, 0);
@ -655,7 +661,7 @@ int tls_fls_read_unique_id(unsigned char *uuid)
case SPIFLASH_MID_GD: case SPIFLASH_MID_GD:
case SPIFLASH_MID_PUYA: case SPIFLASH_MID_PUYA:
case SPIFLASH_MID_TSINGTENG: case SPIFLASH_MID_TSINGTENG:
case SPIFLASH_MID_TSINGTENG_1MB: case SPIFLASH_MID_TSINGTENG_1MB_4MB:
dumy_bytes = 4; dumy_bytes = 4;
uni_bytes = 16; uni_bytes = 16;
break; break;
@ -870,7 +876,7 @@ int tls_fls_otp_lock(void)
case SPIFLASH_MID_TSINGTENG: case SPIFLASH_MID_TSINGTENG:
writeLbBit_for_1wreg((1<<10)); writeLbBit_for_1wreg((1<<10));
break; break;
case SPIFLASH_MID_TSINGTENG_1MB: case SPIFLASH_MID_TSINGTENG_1MB_4MB:
writeLbBit_for_1wreg((7<<11)); writeLbBit_for_1wreg((7<<11));
break; break;
case SPIFLASH_MID_FUDANMICRO: case SPIFLASH_MID_FUDANMICRO:
@ -1460,8 +1466,21 @@ int tls_fls_init(void)
fls->OTPWRParam.pageSize = 256; fls->OTPWRParam.pageSize = 256;
switch(fls->flashid) switch(fls->flashid)
{ {
case SPIFLASH_MID_TSINGTENG_1MB_4MB:
if (fls->density == 0x100000)
{
fls->OTPWRParam.eraseSize = 1024;
}
else if (fls->density == 0x400000)
{
fls->OTPWRParam.eraseSize = 2048;
}
else
{
fls->OTPWRParam.eraseSize = 256;
}
break;
case SPIFLASH_MID_GD: case SPIFLASH_MID_GD:
case SPIFLASH_MID_TSINGTENG_1MB:
fls->OTPWRParam.eraseSize = 1024; fls->OTPWRParam.eraseSize = 1024;
break; break;
case SPIFLASH_MID_FUDANMICRO: case SPIFLASH_MID_FUDANMICRO:

View File

@ -33,6 +33,8 @@ static void io_cfg_option1(enum tls_io_name name)
tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */ tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */
tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) & (~BIT(pin))); tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) & (~BIT(pin)));
tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) & (~BIT(pin))); tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) & (~BIT(pin)));
tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); /*disable pullup*/
tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); /*disable pulldown*/
} }
static void io_cfg_option2(enum tls_io_name name) static void io_cfg_option2(enum tls_io_name name)
@ -54,6 +56,8 @@ static void io_cfg_option2(enum tls_io_name name)
tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */ tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */
tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) & (~BIT(pin))); tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) & (~BIT(pin)));
tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) | BIT(pin)); tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) | BIT(pin));
tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); /*disable pullup*/
tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); /*disable pulldown*/
} }
static void io_cfg_option3(enum tls_io_name name) static void io_cfg_option3(enum tls_io_name name)
@ -75,6 +79,8 @@ static void io_cfg_option3(enum tls_io_name name)
tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */ tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */
tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) | BIT(pin)); tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) | BIT(pin));
tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) & (~BIT(pin))); tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) & (~BIT(pin)));
tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); /*disable pullup*/
tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); /*disable pulldown*/
} }
static void io_cfg_option4(enum tls_io_name name) static void io_cfg_option4(enum tls_io_name name)
@ -96,6 +102,8 @@ static void io_cfg_option4(enum tls_io_name name)
tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */ tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) | BIT(pin)); /* gpio function */
tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) | BIT(pin)); tls_reg_write32(HR_GPIO_AF_S1 + offset, tls_reg_read32(HR_GPIO_AF_S1 + offset) | BIT(pin));
tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) | BIT(pin)); tls_reg_write32(HR_GPIO_AF_S0 + offset, tls_reg_read32(HR_GPIO_AF_S0 + offset) | BIT(pin));
tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); /*disable pullup*/
tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); /*disable pulldown*/
} }
static void io_cfg_option5(enum tls_io_name name) static void io_cfg_option5(enum tls_io_name name)
@ -115,6 +123,8 @@ static void io_cfg_option5(enum tls_io_name name)
} }
tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) & (~BIT(pin))); /* disable gpio function */ tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) & (~BIT(pin))); /* disable gpio function */
tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); /*disable pullup*/
tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); /*disable pulldown*/
} }
static u32 io_pa_option67 = 0; static u32 io_pa_option67 = 0;
@ -139,8 +149,8 @@ static void io_cfg_option6(enum tls_io_name name)
tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) & (~BIT(pin))); /* disable gpio function */ tls_reg_write32(HR_GPIO_AF_SEL + offset, tls_reg_read32(HR_GPIO_AF_SEL + offset) & (~BIT(pin))); /* disable gpio function */
tls_reg_write32(HR_GPIO_DIR + offset, tls_reg_read32(HR_GPIO_DIR + offset) & (~BIT(pin))); tls_reg_write32(HR_GPIO_DIR + offset, tls_reg_read32(HR_GPIO_DIR + offset) & (~BIT(pin)));
tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); tls_reg_write32(HR_GPIO_PULLUP_EN + offset, tls_reg_read32(HR_GPIO_PULLUP_EN + offset) | (BIT(pin))); /*disable pullup*/
tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); tls_reg_write32(HR_GPIO_PULLDOWN_EN + offset, tls_reg_read32(HR_GPIO_PULLDOWN_EN + offset) & (~BIT(pin))); /*disable pulldown*/
} }
static void io_cfg_option7(enum tls_io_name name) static void io_cfg_option7(enum tls_io_name name)

View File

@ -88,10 +88,11 @@ int wm_sdh_config(void)
tls_sys_clk_get(&sysclk); tls_sys_clk_get(&sysclk);
SDIO_HOST->MMC_CARDSEL = 0xC0 | (sysclk.cpuclk / 2 - 1);//0xd3; //enable module, enable mmcclk SDIO_HOST->MMC_CARDSEL = 0xC0 | (sysclk.cpuclk / 2 - 1);//0xd3; //enable module, enable mmcclk
SDIO_HOST->MMC_CTL = 0xD3;//0xC3; //4bits, low speed, 1/4 divider, auto transfer, mmc mode. SDIO_HOST->MMC_CTL = 0x13;//0xC3; //4bits, low speed, 1/4 divider, auto transfer, mmc mode.
SDIO_HOST->MMC_INT_MASK = 0x100; //unmask sdio data interrupt. SDIO_HOST->MMC_INT_MASK = 0x100; //unmask sdio data interrupt.
SDIO_HOST->MMC_CRCCTL = 0xC0; // SDIO_HOST->MMC_CRCCTL = 0xC0; //
SDIO_HOST->MMC_TIMEOUTCNT = 0xff; SDIO_HOST->MMC_TIMEOUTCNT = 0xff;
SDIO_HOST->MMC_IO_MBCTL |= 0xf0;
return 0; return 0;
} }
@ -113,10 +114,14 @@ int wm_sd_card_initialize(uint32_t *rca)
// CMD 3 Get RCA. // CMD 3 Get RCA.
//====================================================== //======================================================
begin: begin:
wm_sdh_send_cmd(0, 0, 0x04); //Send CMD0 //Send CMD0 + 8 null clock to reset and stablize
for (int i = 0; i < 7 - recnt; i++)
{
wm_sdh_send_cmd(0, 0, 0x84);
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
}
delay_cnt(1000); delay_cnt(1000);
wm_sdh_send_cmd(8, 0x1AA, 0x44); //Send CMD8 wm_sdh_send_cmd(8, 0x1AA, 0xC4); //Send CMD8
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD8 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD8 respCmd", (char *)respCmd, 5);
@ -129,14 +134,14 @@ begin:
} }
while(1) while(1)
{ {
wm_sdh_send_cmd(55, 0, 0x44); //Send CMD55 wm_sdh_send_cmd(55, 0, 0xC4); //Send CMD55
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD55 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD55 respCmd", (char *)respCmd, 5);
if((respCmd[1] & 0xFF) != 55) if((respCmd[1] & 0xFF) != 55)
goto end; goto end;
wm_sdh_send_cmd(41, 0xC0100000, 0x44); //Send ACMD41 wm_sdh_send_cmd(41, 0xC0100000, 0xC4); //Send ACMD41
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
sm_sdh_wait_interrupt(3, 1000); //由于sd规范中Acmd41返回的crc永远是11111也就是应该忽略crc;这里的crc错误应该忽略。 sm_sdh_wait_interrupt(3, 1000); //由于sd规范中Acmd41返回的crc永远是11111也就是应该忽略crc;这里的crc错误应该忽略。
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
@ -150,14 +155,14 @@ begin:
} }
} }
wm_sdh_send_cmd(2, 0, 0x54); //Send CMD2 wm_sdh_send_cmd(2, 0, 0xD4); //Send CMD2
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
sm_sdh_wait_interrupt(3, 1000); sm_sdh_wait_interrupt(3, 1000);
wm_sdh_get_response(respCmd, 4); wm_sdh_get_response(respCmd, 4);
sh_dumpBuffer("CMD2 respCmd", (char *)respCmd, 16); sh_dumpBuffer("CMD2 respCmd", (char *)respCmd, 16);
if((respCmd[3] >> 24 & 0xFF) != 0x3F) //sd规范定义固定为0x3F,所以导致crc错误 if((respCmd[3] >> 24 & 0xFF) != 0x3F) //sd规范定义固定为0x3F,所以导致crc错误
goto end; goto end;
wm_sdh_send_cmd(3, 0, 0x44); //Send CMD3 wm_sdh_send_cmd(3, 0, 0xC4); //Send CMD3
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD3 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD3 respCmd", (char *)respCmd, 5);
@ -179,6 +184,7 @@ static uint32_t SD_GetCapacity(uint8_t *csd, SD_CardInfo_t *SDCardInfo)
if((csd[0]&0xC0)==0x40)//判断bit126是否为1 if((csd[0]&0xC0)==0x40)//判断bit126是否为1
{ {
SDCardInfo->CSDVer = 2;
csize = csd[9] + ((uint32_t)csd[8] << 8) + ((uint32_t)(csd[7] & 63) << 16) + 1; csize = csd[9] + ((uint32_t)csd[8] << 8) + ((uint32_t)(csd[7] & 63) << 16) + 1;
Capacity = csize << 9; Capacity = csize << 9;
SDCardInfo->CardCapacity = (long long)Capacity*1024; SDCardInfo->CardCapacity = (long long)Capacity*1024;
@ -186,6 +192,7 @@ static uint32_t SD_GetCapacity(uint8_t *csd, SD_CardInfo_t *SDCardInfo)
} }
else else
{ {
SDCardInfo->CSDVer = 1;
n = (csd[5] & 0x0F) + ((csd[10] & 0x80) >> 7) + ((csd[9] & 0x03) << 1) + 2; n = (csd[5] & 0x0F) + ((csd[10] & 0x80) >> 7) + ((csd[9] & 0x03) << 1) + 2;
csize = (csd[8] >> 6) + ((uint16_t)csd[7] << 2) + ((uint16_t)(csd[6] & 0x03) << 10) + 1; csize = (csd[8] >> 6) + ((uint16_t)csd[7] << 2) + ((uint16_t)(csd[6] & 0x03) << 10) + 1;
Capacity = (uint32_t)csize << (n - 10); Capacity = (uint32_t)csize << (n - 10);
@ -219,7 +226,7 @@ int wm_sd_card_set_blocklen(uint32_t blocklen)
{ {
int ret = -1; int ret = -1;
uint32_t respCmd[2]; uint32_t respCmd[2];
wm_sdh_send_cmd(16, blocklen, 0x44); //Send CMD16 wm_sdh_send_cmd(16, blocklen, 0xC4); //Send CMD16
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD16 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD16 respCmd", (char *)respCmd, 5);
@ -234,7 +241,7 @@ int wm_sd_card_select(uint32_t rca)
{ {
int ret = -1; int ret = -1;
uint32_t respCmd[2]; uint32_t respCmd[2];
wm_sdh_send_cmd(7, rca<<16, 0x44); //Send CMD7 wm_sdh_send_cmd(7, rca<<16, 0xC4); //Send CMD7
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD7 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD7 respCmd", (char *)respCmd, 5);
@ -247,7 +254,7 @@ end:
void wm_sd_card_deselect() void wm_sd_card_deselect()
{ {
wm_sdh_send_cmd(7, 0, 0x04); //Send CMD7 wm_sdh_send_cmd(7, 0, 0x84); //Send CMD7
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
} }
@ -259,7 +266,7 @@ int wm_sd_card_query_status(uint32_t rca, uint32_t *respCmd0)
uint8_t error_state = 0; uint8_t error_state = 0;
#endif #endif
uint32_t respCmd[2]; uint32_t respCmd[2];
wm_sdh_send_cmd(13, rca<<16, 0x44); //Send CMD13 wm_sdh_send_cmd(13, rca<<16, 0xC4); //Send CMD13
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD13 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD13 respCmd", (char *)respCmd, 5);
@ -288,7 +295,7 @@ int wm_sd_card_switch_func(uint8_t speed_mode)
int i; int i;
uint32_t respCmd[2]; uint32_t respCmd[2];
wm_sdh_send_cmd(6, 0x00fffff1, 0x44); //Send CMD6 wm_sdh_send_cmd(6, 0x00fffff1, 0xC4); //Send CMD6
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD6 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD6 respCmd", (char *)respCmd, 5);
@ -296,7 +303,7 @@ int wm_sd_card_switch_func(uint8_t speed_mode)
goto end; goto end;
SDIO_HOST->BUF_CTL = 0x4020; //disable dma, read sd card SDIO_HOST->BUF_CTL = 0x4020; //disable dma, read sd card
SDIO_HOST->MMC_INT_SRC |= 0x7ff; // clear all firstly SDIO_HOST->MMC_INT_SRC |= 0x7ff; // clear all firstly
SDIO_HOST->MMC_IO = 0x3; //!!!read data, auto transfer SDIO_HOST->MMC_IO = 0x83; //!!!read data, auto transfer
sm_sdh_wait_interrupt(1, -1); sm_sdh_wait_interrupt(1, -1);
TEST_DEBUG("read complete\n"); TEST_DEBUG("read complete\n");
for(i = 0; i < 128; i++) for(i = 0; i < 128; i++)
@ -315,7 +322,7 @@ int wm_sd_card_switch_func(uint8_t speed_mode)
TEST_DEBUG("the value of byte 17~20 is 0x%x\n", respCmd[1]); TEST_DEBUG("the value of byte 17~20 is 0x%x\n", respCmd[1]);
if(respCmd[1] & 0xF) //support high speed if(respCmd[1] & 0xF) //support high speed
{ {
wm_sdh_send_cmd(6, 0x80fffff0 | speed_mode, 0x44); //Send CMD6 wm_sdh_send_cmd(6, 0x80fffff0 | speed_mode, 0xC4); //Send CMD6
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD6 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD6 respCmd", (char *)respCmd, 5);
@ -323,7 +330,7 @@ int wm_sd_card_switch_func(uint8_t speed_mode)
goto end; goto end;
SDIO_HOST->BUF_CTL = 0x4020; //disable dma, read sd card SDIO_HOST->BUF_CTL = 0x4020; //disable dma, read sd card
SDIO_HOST->MMC_INT_SRC |= 0x7ff; // clear all firstly SDIO_HOST->MMC_INT_SRC |= 0x7ff; // clear all firstly
SDIO_HOST->MMC_IO = 0x3; //!!!read data, auto transfer SDIO_HOST->MMC_IO = 0x83; //!!!read data, auto transfer
sm_sdh_wait_interrupt(1, -1); sm_sdh_wait_interrupt(1, -1);
TEST_DEBUG("read complete\n"); TEST_DEBUG("read complete\n");
for(i = 0; i < 128; i++) for(i = 0; i < 128; i++)
@ -378,13 +385,13 @@ int wm_sd_card_set_bus_width(uint32_t rca, uint8_t bus_width)
{ {
SDIO_HOST->MMC_CTL &= ~(1 << 7); SDIO_HOST->MMC_CTL &= ~(1 << 7);
} }
wm_sdh_send_cmd(55, rca<<16, 0x44); //Send CMD55 wm_sdh_send_cmd(55, rca<<16, 0xC4); //Send CMD55
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("CMD55 respCmd", (char *)respCmd, 5); sh_dumpBuffer("CMD55 respCmd", (char *)respCmd, 5);
if((respCmd[1] & 0xFF) != 55) if((respCmd[1] & 0xFF) != 55)
goto end; goto end;
wm_sdh_send_cmd(6, bus_width, 0x44); //Send ACMD6 wm_sdh_send_cmd(6, bus_width, 0xC4); //Send ACMD6
sm_sdh_wait_interrupt(0, -1); sm_sdh_wait_interrupt(0, -1);
wm_sdh_get_response(respCmd, 2); wm_sdh_get_response(respCmd, 2);
sh_dumpBuffer("ACMD6 respCmd", (char *)respCmd, 5); sh_dumpBuffer("ACMD6 respCmd", (char *)respCmd, 5);
@ -399,7 +406,7 @@ int wm_sd_card_stop_trans(void)
{ {
int ret = -1; int ret = -1;
uint32_t respCmd[2]; uint32_t respCmd[2];
wm_sdh_send_cmd(12, 0, 0x44); //Send CMD12 wm_sdh_send_cmd(12, 0, 0xC4); //Send CMD12
ret = sm_sdh_wait_interrupt(0, -1); ret = sm_sdh_wait_interrupt(0, -1);
if(ret) if(ret)
goto end; goto end;
@ -415,7 +422,7 @@ end:
static void sdio_host_reset(void) static void sdio_host_reset(void)
{ {
tls_bitband_write(HR_CLK_RST_CTL, 27, 0); tls_bitband_write(HR_CLK_RST_CTL, 27, 0);
delay_cnt(1000);
tls_bitband_write(HR_CLK_RST_CTL, 27, 1); tls_bitband_write(HR_CLK_RST_CTL, 27, 1);
while(tls_bitband_read(HR_CLK_RST_CTL, 27) == 0); while(tls_bitband_read(HR_CLK_RST_CTL, 27) == 0);
} }
@ -431,6 +438,7 @@ int sdh_card_init(uint32_t *rca_ref)
ret = wm_sd_card_initialize(&rca); ret = wm_sd_card_initialize(&rca);
if(ret) if(ret)
goto end; goto end;
SDCardInfo.RCA = (u16)(rca & 0xFFFF);
ret = wm_sd_card_query_csd(rca); ret = wm_sd_card_query_csd(rca);
if(ret) if(ret)
goto end; goto end;
@ -444,6 +452,8 @@ int sdh_card_init(uint32_t *rca_ref)
if(ret) if(ret)
goto end; goto end;
*rca_ref = rca; *rca_ref = rca;
SDIO_HOST->MMC_CTL = 0xD3;
ret = 0; ret = 0;
end: end:
TEST_DEBUG("ret %d\n", ret); TEST_DEBUG("ret %d\n", ret);

View File

@ -606,7 +606,7 @@ ATTRIBUTE_ISR void UART0_IRQHandler(void)
port->rx_callback(1, port->priv_data); port->rx_callback(1, port->priv_data);
} }
} }
if (port->rx_callback != NULL && !rx_byte_cb_flag) if (rxlen && port->rx_callback != NULL && !rx_byte_cb_flag)
{ {
port->rx_callback(rxlen, port->priv_data); port->rx_callback(rxlen, port->priv_data);
} }
@ -693,6 +693,10 @@ ATTRIBUTE_ISR void UART1_IRQHandler(void)
ch = (u8) port->regs->UR_RXW; ch = (u8) port->regs->UR_RXW;
recv->buf[recv->head] = ch; recv->buf[recv->head] = ch;
recv->head = (recv->head + 1) & (TLS_UART_RX_BUF_SIZE - 1); recv->head = (recv->head + 1) & (TLS_UART_RX_BUF_SIZE - 1);
if(port->rx_callback != NULL && rx_byte_cb_flag)
{
port->rx_callback(1, port->priv_data);
}
} }
} }
@ -713,10 +717,6 @@ ATTRIBUTE_ISR void UART1_IRQHandler(void)
port->plus_char_cnt = 3; port->plus_char_cnt = 3;
break; break;
} }
if(rxlen && port->rx_callback != NULL && rx_byte_cb_flag)
{
port->rx_callback(1, port->priv_data);
}
} }
if (rxlen && port->rx_callback!=NULL && !rx_byte_cb_flag) if (rxlen && port->rx_callback!=NULL && !rx_byte_cb_flag)
{ {
@ -798,6 +798,10 @@ ATTRIBUTE_ISR void UART2_4_IRQHandler(void)
} }
recv->buf[recv->head] = ch; recv->buf[recv->head] = ch;
recv->head = (recv->head + 1) & (TLS_UART_RX_BUF_SIZE - 1); recv->head = (recv->head + 1) & (TLS_UART_RX_BUF_SIZE - 1);
if(port->rx_callback != NULL && rx_byte_cb_flag)
{
port->rx_callback(1, port->priv_data);
}
} }
if( escapefifocnt==3 && ch=='+') if( escapefifocnt==3 && ch=='+')
@ -817,12 +821,8 @@ ATTRIBUTE_ISR void UART2_4_IRQHandler(void)
port->plus_char_cnt = 3; port->plus_char_cnt = 3;
break; break;
} }
if(port->rx_callback != NULL && rx_byte_cb_flag)
{
port->rx_callback(1, port->priv_data);
} }
} if (rxlen && port->rx_callback!=NULL && !rx_byte_cb_flag)
if (port->rx_callback!=NULL && !rx_byte_cb_flag)
{ {
port->rx_callback(rxlen, port->priv_data); port->rx_callback(rxlen, port->priv_data);
} }

View File

@ -419,6 +419,7 @@ int tls_wl_if_sta_add(struct tls_wif *wif,
int tls_wl_if_sta_remove(struct tls_wif *wif, u8 *addr); int tls_wl_if_sta_remove(struct tls_wif *wif, u8 *addr);
int tls_wl_if_get_inact_sec(struct tls_wif *wif, const u8 *addr); int tls_wl_if_get_inact_sec(struct tls_wif *wif, const u8 *addr);
int tls_wl_if_get_scan_res(struct tls_wif *wif, u8 *buf, u32 buf_size); int tls_wl_if_get_scan_res(struct tls_wif *wif, u8 *buf, u32 buf_size);
int tls_wl_if_get_scan_res_format2(struct tls_wif *wif, u8 *buf, u32 buf_size);
int tls_wl_if_disconnect(struct tls_wif *wif); int tls_wl_if_disconnect(struct tls_wif *wif);
int tls_wl_if_tx(struct tls_wif *wif, int tls_wl_if_tx(struct tls_wif *wif,
u8 *buf, u32 buflen, bool last_packet, bool is_apsta, bool not_delay); u8 *buf, u32 buflen, bool last_packet, bool is_apsta, bool not_delay);

View File

@ -35,6 +35,8 @@ char * strdup(const char *s);
char * strndup(const char *s, size_t len); char * strndup(const char *s, size_t len);
int sendchar(int ch); int sendchar(int ch);
void dumpBuffer(char *name, char* buffer, int len);
void dumpUint32(char *name, u32* buffer, int len);
int sendchar_debug_uart(int ch); int sendchar_debug_uart(int ch);
#endif /* UTILS_H */ #endif /* UTILS_H */

View File

@ -47,7 +47,7 @@
#include "wm_watchdog.h" #include "wm_watchdog.h"
#include "wm_wifi.h" #include "wm_wifi.h"
#if TLS_CONFIG_ONLY_FACTORY_ATCMD #if TLS_CONFIG_ONLY_FACTORY_ATCMD
#include "factory_atcmd.h" #include "../../src/app/factorycmd/factory_atcmd.h"
#endif #endif
/* c librayr mutex */ /* c librayr mutex */
@ -101,7 +101,7 @@ tls_os_task_t tstusermainhdl = NULL;
#define FW_MAJOR_VER 0x1 #define FW_MAJOR_VER 0x1
#define FW_MINOR_VER 0x0 #define FW_MINOR_VER 0x0
#define FW_PATCH_VER 0x8 #define FW_PATCH_VER 0x10
const char FirmWareVer[4] = const char FirmWareVer[4] =
{ {

View File

@ -168,7 +168,7 @@ static int bt_aes_decrypt(uint8_t *key, uint8_t *src_ptr, int length, uint8_t *d
psCipherContext_t ctx; psCipherContext_t ctx;
uint8_t *buf = NULL; uint8_t *buf = NULL;
TLS_DBGPRT_INFO("original data:"); TLS_DBGPRT_INFO("original data:");
TLS_DBGPRT_DUMP(src_ptr, length); TLS_DBGPRT_DUMP((char *)src_ptr, length);
if(key == NULL || src_ptr == NULL || length % 16 != 0) { if(key == NULL || src_ptr == NULL || length % 16 != 0) {
goto out; goto out;
@ -182,7 +182,7 @@ static int bt_aes_decrypt(uint8_t *key, uint8_t *src_ptr, int length, uint8_t *d
MEMCPY(buf, src_ptr, length); MEMCPY(buf, src_ptr, length);
TLS_DBGPRT_INFO("aes key:"); TLS_DBGPRT_INFO("aes key:");
TLS_DBGPRT_DUMP(key, 16); TLS_DBGPRT_DUMP((char *)key, 16);
if(tls_crypto_aes_init(&ctx, key, key, 16, CRYPTO_MODE_ECB) != 0) { if(tls_crypto_aes_init(&ctx, key, key, 16, CRYPTO_MODE_ECB) != 0) {
goto out; goto out;
@ -194,7 +194,7 @@ static int bt_aes_decrypt(uint8_t *key, uint8_t *src_ptr, int length, uint8_t *d
MEMCPY(dest_ptr, buf, length); MEMCPY(dest_ptr, buf, length);
TLS_DBGPRT_INFO("decrypt data:"); TLS_DBGPRT_INFO("decrypt data:");
TLS_DBGPRT_DUMP(dest_ptr, length); TLS_DBGPRT_DUMP((char *)dest_ptr, length);
ret = DePKCS7Padding(dest_ptr, length); ret = DePKCS7Padding(dest_ptr, length);
out: out:
@ -244,7 +244,7 @@ static int bt_aes_encrypt(uint8_t *key, uint8_t *src_ptr, int length, uint8_t *d
psCipherContext_t ctx; psCipherContext_t ctx;
unsigned char *aes_encode_temp = NULL; unsigned char *aes_encode_temp = NULL;
TLS_DBGPRT_INFO("original data:"); TLS_DBGPRT_INFO("original data:");
TLS_DBGPRT_DUMP(src_ptr, length); TLS_DBGPRT_DUMP((char *)src_ptr, length);
aes_encode_temp = tls_mem_alloc(length + 16); aes_encode_temp = tls_mem_alloc(length + 16);
if(aes_encode_temp == NULL) { if(aes_encode_temp == NULL) {
@ -264,7 +264,7 @@ static int bt_aes_encrypt(uint8_t *key, uint8_t *src_ptr, int length, uint8_t *d
} }
//TLS_DBGPRT_INFO("encrypt data:"); //TLS_DBGPRT_INFO("encrypt data:");
TLS_DBGPRT_DUMP(dest_ptr, len); TLS_DBGPRT_DUMP((char *)dest_ptr, len);
ret = len; ret = len;
out: out:

View File

@ -327,7 +327,7 @@ static int ble_uart_init(int8_t uart_idx, int bandrate, int parity, int stopbits
wm_uart_task, wm_uart_task,
(void *) wm_uart, (void *) wm_uart,
(void *) wm_uart_task_stk, /** 任务栈的起始地址 */ (void *) wm_uart_task_stk, /** 任务栈的起始地址 */
WM_UART_TAST_STK_SIZE, /** 任务栈的大小 */ WM_UART_TAST_STK_SIZE*4, /** 任务栈的大小 */
WM_UART_TASK_PRIO, 0); WM_UART_TASK_PRIO, 0);
assert(status == 0); assert(status == 0);
status = tls_os_queue_create(&(wm_uart->wm_queue_msg_available), 6); status = tls_os_queue_create(&(wm_uart->wm_queue_msg_available), 6);
@ -336,7 +336,7 @@ static int ble_uart_init(int8_t uart_idx, int bandrate, int parity, int stopbits
wm_dispatch_task, wm_dispatch_task,
(void *) wm_uart, (void *) wm_uart,
(void *) wm_disp_task_stk, /** 任务栈的起始地址 */ (void *) wm_disp_task_stk, /** 任务栈的起始地址 */
WM_DISP_TAST_STK_SIZE, /** 任务栈的大小 */ WM_DISP_TAST_STK_SIZE*4, /** 任务栈的大小 */
WM_UART_TASK_PRIO+1, 0); WM_UART_TASK_PRIO+1, 0);
assert(status == 0); assert(status == 0);
} }

View File

@ -14,7 +14,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "tls_common.h"
#include "wm_mem.h" #include "wm_mem.h"
#include "wm_debug.h" #include "wm_debug.h"
#include "lwip/stats.h" #include "lwip/stats.h"
@ -25,6 +24,8 @@
#include "lwip/prot/dhcp.h" #include "lwip/prot/dhcp.h"
#include "netif/ethernetif.h" #include "netif/ethernetif.h"
#include "dhcp_server.h" #include "dhcp_server.h"
#include "tls_common.h"
#include "wm_wifi.h"
#if TLS_CONFIG_AP #if TLS_CONFIG_AP
@ -36,7 +37,7 @@
extern u8 *wpa_supplicant_get_mac(void); extern u8 *wpa_supplicant_get_mac(void);
/* 是否根据客户端dhcp报文中的broadcast标志来回应不使用则统一使用广播回复 */ /* 是否根据客户端dhcp报文中的broadcast标志来回应不使用则统一使用广播回复 */
#define DHCPS_CHECK_BROADCAST_FLAG #define DHCPS_CHECK_BROADCAST_FLAG
#ifdef DHCPS_CHECK_BROADCAST_FLAG #ifdef DHCPS_CHECK_BROADCAST_FLAG
#define IS_BROADCAST_SEND(x) (((x) >> 15) == 1 ? TRUE : FALSE) #define IS_BROADCAST_SEND(x) (((x) >> 15) == 1 ? TRUE : FALSE)
@ -158,7 +159,7 @@ static bool _CheckMacIsValid(u8 *mac)
sta_buf = tls_mem_alloc(STA_MAC_BUF_LEN); sta_buf = tls_mem_alloc(STA_MAC_BUF_LEN);
if (!sta_buf) if (!sta_buf)
return FALSE;/* 系统资源不足无需再让client接入 */ return FALSE;/* 系统资源不足无需再让client接入 */
memset(sta_buf, 0, STA_MAC_BUF_LEN); memset(sta_buf, 0, STA_MAC_BUF_LEN);
tls_wifi_get_authed_sta_info(&sta_num, sta_buf, STA_MAC_BUF_LEN); tls_wifi_get_authed_sta_info(&sta_num, sta_buf, STA_MAC_BUF_LEN);
@ -167,7 +168,7 @@ static bool _CheckMacIsValid(u8 *mac)
{ {
if (!compare_ether_addr(mac, sta->mac_addr)) if (!compare_ether_addr(mac, sta->mac_addr))
{ {
ret = TRUE;/* 本SOFTAP下的client才予以分配IP */ ret = TRUE;/* 本SOFTAP下的client才予以分配IP */
break; break;
} }
sta++; sta++;
@ -1134,7 +1135,8 @@ INT8S DHCPS_Start(struct netif *Netif)
udp_bind(DhcpServer->Socket, IP_ADDR_ANY, DHCP_SERVER_UDP_PORT); udp_bind(DhcpServer->Socket, IP_ADDR_ANY, DHCP_SERVER_UDP_PORT);
/* bind multicast&broadcast netif */ /* bind multicast&broadcast netif */
udp_bind_multicast_netif(DhcpServer->Socket, &Netif->ip_addr); //udp_bind_multicast_netif(DhcpServer->Socket, &Netif->ip_addr);
udp_set_multicast_netif_addr(DhcpServer->Socket, &Netif->ip_addr);
/* Set up the recv callback and argument. */ /* Set up the recv callback and argument. */
udp_recv(DhcpServer->Socket, (udp_recv_fn)DHCPS_RecvCb, Netif); udp_recv(DhcpServer->Socket, (udp_recv_fn)DHCPS_RecvCb, Netif);

View File

@ -11,6 +11,8 @@
#include "wm_internal_flash.h" #include "wm_internal_flash.h"
#include "litepoint.h" #include "litepoint.h"
#include "wm_ram_config.h" #include "wm_ram_config.h"
#include "wm_adc.h"
#include "wm_gpio_afsel.h"
#define FACTORY_ATCMD_MAX_ARG 10 #define FACTORY_ATCMD_MAX_ARG 10
#define FACTORY_ATCMD_NAME_MAX_LEN 10 #define FACTORY_ATCMD_NAME_MAX_LEN 10
@ -523,7 +525,7 @@ static int factory_atcmd_txgi_proc( struct factory_atcmd_token_t *tok, char *res
} }
} }
else{ else{
/*如实反映flash参数区的实际存储情况*/ /*如实反映flash参数区的实际存储情况*/
ret = tls_get_tx_gain(tx_gain); ret = tls_get_tx_gain(tx_gain);
if (ret == 0) if (ret == 0)
{ {
@ -842,6 +844,102 @@ static int factory_atcmd_qver_proc( struct factory_atcmd_token_t *tok, char *res
__DATE__, __TIME__); __DATE__, __TIME__);
return 0; return 0;
} }
static int factory_atcmd_test_mode_proc( struct factory_atcmd_token_t *tok, char *res_resp, u32 *res_len)
{
wm_adc_config(0);
wm_adc_config(1);
wm_adc_config(2);
wm_adc_config(3);
*res_len = factory_atcmd_ok_resp(res_resp);
return 0;
}
static int factory_atcmd_adc_cal_proc( struct factory_atcmd_token_t *tok, char *res_resp, u32 *res_len)
{
int ret = 0;
int val = 0;
int i = 0;
int refvoltage[4] = {0};
FT_ADC_CAL_ST adc_cal;
if (tok->arg_found)
{
if (tok->arg_found < 5)
{
*res_len = factory_atcmd_err_resp(res_resp, FACTORY_ATCMD_ERR_INV_PARAMS);
return 0;
}
ret = strtodec(&val, tok->arg[0]);
if (ret < 0 || val > 15 || val < 1)
{
*res_len = factory_atcmd_err_resp(res_resp, FACTORY_ATCMD_ERR_INV_PARAMS);
return 0;
}
for(i = 0; i < 4; i++)
{
ret = strtodec(&refvoltage[i], tok->arg[i + 1]);
if (ret < 0 )
{
*res_len = factory_atcmd_err_resp(res_resp, FACTORY_ATCMD_ERR_INV_PARAMS);
return 0;
}
}
ret = adc_multipoint_calibration(val, refvoltage);
if (ret == 0)
{
*res_len = factory_atcmd_ok_resp(res_resp);
}
else
{
*res_len = factory_atcmd_err_resp(res_resp, FACTORY_ATCMD_ERR_FLASH);
}
return 0;
}
else
{
ret = tls_get_adc_cal_param(&adc_cal);
//dumpBuffer("&adc_cal", &adc_cal, sizeof(adc_cal));
if (ret == 0)
{
*res_len = sprintf(res_resp, "+OK=%lf,%lf\r\n", adc_cal.a, adc_cal.b);
}
else
{
*res_len = factory_atcmd_err_resp(res_resp,FACTORY_ATCMD_ERR_FLASH);
}
return 0;
}
}
static int factory_atcmd_adc_vol_proc( struct factory_atcmd_token_t *tok, char *res_resp, u32 *res_len)
{
int ret = 0;
int val = 0xF;
int i = 0;
int voltage[4] = {0};
if (tok->arg_found)
{
ret = strtodec(&val, tok->arg[0]);
if (ret < 0 || val > 15 || val < 1)
{
*res_len = factory_atcmd_err_resp(res_resp, FACTORY_ATCMD_ERR_INV_PARAMS);
return 0;
}
}
for(i = 0; i < 4; i++)
{
if (val & (1 << i))
{
wm_adc_config(i);
voltage[i] = adc_get_inputVolt(i, 1, 1);
}
}
*res_len = sprintf(res_resp, "+OK=%d,%d,%d,%d\r\n", voltage[0], voltage[1], voltage[2], voltage[3]);
return 0;
}
static struct factory_atcmd_t factory_atcmd_tbl[] = static struct factory_atcmd_t factory_atcmd_tbl[] =
@ -869,6 +967,9 @@ static struct factory_atcmd_t factory_atcmd_tbl[] =
{ "&LPRSTT", factory_atcmd_lprstt_proc}, { "&LPRSTT", factory_atcmd_lprstt_proc},
{ "&CALFIN", factory_atcmd_calfinish_proc}, { "&CALFIN", factory_atcmd_calfinish_proc},
{ "FREQ", factory_atcmd_freq_err_proc}, { "FREQ", factory_atcmd_freq_err_proc},
{ "&TESTM", factory_atcmd_test_mode_proc},
{ "&ADCCAL", factory_atcmd_adc_cal_proc},
{ "&ADCVOL", factory_atcmd_adc_vol_proc},
{ NULL, NULL }, { NULL, NULL },
}; };

View File

@ -1859,8 +1859,11 @@ static UINT32 HTTPIntrnConnectionOpen (P_HTTP_SESSION pHTTPSession)
(HTTP_SOCKADDR*)&ServerAddress, // Server address (HTTP_SOCKADDR*)&ServerAddress, // Server address
sizeof(HTTP_SOCKADDR)); // Length of server address structure sizeof(HTTP_SOCKADDR)); // Length of server address structure
// The socket was set to be asyn so we should check the error being returned from connect() // The socket was set to be asyn so we should check the error being returned from connect()
if(nRetCode)
{
nRetCode = SocketGetErr(pHTTPSession->HttpConnection.HttpSocket); nRetCode = SocketGetErr(pHTTPSession->HttpConnection.HttpSocket);
} }
}
if(nRetCode == 0 || nRetCode == HTTP_EWOULDBLOCK || nRetCode == HTTP_EINPROGRESS) if(nRetCode == 0 || nRetCode == HTTP_EWOULDBLOCK || nRetCode == HTTP_EINPROGRESS)
{ {
@ -1876,6 +1879,7 @@ static UINT32 HTTPIntrnConnectionOpen (P_HTTP_SESSION pHTTPSession)
} }
else else
{ {
//printf("%s: nRetCode %d\n", __func__, nRetCode);
// Socket connection problem // Socket connection problem
nRetCode = HTTP_CLIENT_ERROR_SOCKET_CONNECT; nRetCode = HTTP_CLIENT_ERROR_SOCKET_CONNECT;
break; break;

View File

@ -1,5 +1,4 @@
#include "lwip/arch.h"
#include "HTTPClientWrapper.h" #include "HTTPClientWrapper.h"
#include "random.h" #include "random.h"
#include "wm_osal.h" #include "wm_osal.h"
@ -908,6 +907,7 @@ int HTTPWrapperSSLConnect(tls_ssl_t **ssl_p,int fd,const struct sockaddr *name,i
/* OPTIONAL is not optimal for security, /* OPTIONAL is not optimal for security,
* but makes interop easier in this simplified example */ * but makes interop easier in this simplified example */
mbedtls_ssl_conf_authmode( &ssl->conf, MBEDTLS_SSL_VERIFY_NONE ); mbedtls_ssl_conf_authmode( &ssl->conf, MBEDTLS_SSL_VERIFY_NONE );
//mbedtls_ssl_conf_authmode( &ssl->conf, MBEDTLS_SSL_VERIFY_REQUIRED);
#if MBEDTLS_DEMO_USE_CERT #if MBEDTLS_DEMO_USE_CERT
mbedtls_ssl_conf_ca_chain( &ssl->conf, &ssl->cacert, NULL ); mbedtls_ssl_conf_ca_chain( &ssl->conf, &ssl->cacert, NULL );
#endif #endif
@ -917,6 +917,8 @@ int HTTPWrapperSSLConnect(tls_ssl_t **ssl_p,int fd,const struct sockaddr *name,i
mbedtls_ssl_conf_dbg( &ssl->conf, ssl_client_debug, stdout ); mbedtls_ssl_conf_dbg( &ssl->conf, ssl_client_debug, stdout );
#endif #endif
mbedtls_ssl_conf_read_timeout( &ssl->conf, 5000 );
if( ( ret = mbedtls_ssl_setup( &ssl->ssl, &ssl->conf ) ) != 0 ) if( ( ret = mbedtls_ssl_setup( &ssl->ssl, &ssl->conf ) ) != 0 )
{ {
mbedtls_printf( " failed\n ! mbedtls_ssl_setup returned %d\n\n", ret ); mbedtls_printf( " failed\n ! mbedtls_ssl_setup returned %d\n\n", ret );
@ -929,7 +931,8 @@ int HTTPWrapperSSLConnect(tls_ssl_t **ssl_p,int fd,const struct sockaddr *name,i
goto exit; goto exit;
} }
mbedtls_ssl_set_bio( &ssl->ssl, &ssl->server_fd, mbedtls_net_send, mbedtls_net_recv, NULL ); //mbedtls_ssl_set_bio( &ssl->ssl, &ssl->server_fd, mbedtls_net_send, mbedtls_net_recv, NULL );
mbedtls_ssl_set_bio( &ssl->ssl, &ssl->server_fd, mbedtls_net_send, mbedtls_net_recv, mbedtls_net_recv_timeout);
/* /*
* 4. Handshake * 4. Handshake

View File

@ -3,6 +3,7 @@
#define HTTP_CLIENT_WRAPPER #define HTTP_CLIENT_WRAPPER
#include "wm_config.h" #include "wm_config.h"
#include "lwip/opt.h"
#include "lwip/arch.h" #include "lwip/arch.h"
#if TLS_CONFIG_HTTP_CLIENT_SECURE #if TLS_CONFIG_HTTP_CLIENT_SECURE

View File

@ -2210,17 +2210,15 @@ iperf_init_stream(struct iperf_stream *sp, struct iperf_test *test)
} }
/* Set IP TOS */ /* Set IP TOS */
if ((opt = test->settings->tos)!=0) { if ((opt = test->settings->tos)!=0) {
if (test->settings->domain == AF_INET6) {
#ifdef IPV6_TCLASS #ifdef IPV6_TCLASS
if (test->settings->domain == AF_INET6) {
if (setsockopt(sp->socket, IPPROTO_IPV6, IPV6_TCLASS, &opt, sizeof(opt)) < 0) { if (setsockopt(sp->socket, IPPROTO_IPV6, IPV6_TCLASS, &opt, sizeof(opt)) < 0) {
i_errno = IESETCOS; i_errno = IESETCOS;
return (-1); return (-1);
} }
#else } else
i_errno = IESETCOS;
return (-1);
#endif #endif
} else { {
if (setsockopt(sp->socket, IPPROTO_IP, IP_TOS, &opt, sizeof(opt)) < 0) { if (setsockopt(sp->socket, IPPROTO_IP, IP_TOS, &opt, sizeof(opt)) < 0) {
i_errno = IESETTOS; i_errno = IESETTOS;
return (-1); return (-1);

View File

@ -4,7 +4,7 @@
#include <wm_sockets.h> #include <wm_sockets.h>
#include "random.h" #include "random.h"
static int poll ( struct lws_pollfd * fds, unsigned int nfds, int timeout) static int _poll ( struct lws_pollfd * fds, unsigned int nfds, int timeout)
{ {
int ret, i, max_fd=0; int ret, i, max_fd=0;
fd_set readset, writeset; fd_set readset, writeset;
@ -70,7 +70,7 @@ LWS_VISIBLE int lws_send_pipe_choked(struct lws *wsi)
fds.events = POLLOUT; fds.events = POLLOUT;
fds.revents = 0; fds.revents = 0;
if (poll(&fds, 1, 0) != 1) if (_poll(&fds, 1, 0) != 1)
return 1; return 1;
if ((fds.revents & POLLOUT) == 0) if ((fds.revents & POLLOUT) == 0)
@ -84,7 +84,7 @@ LWS_VISIBLE int lws_send_pipe_choked(struct lws *wsi)
LWS_VISIBLE int LWS_VISIBLE int
lws_poll_listen_fd(struct lws_pollfd *fd) lws_poll_listen_fd(struct lws_pollfd *fd)
{ {
return poll(fd, 1, 0); return _poll(fd, 1, 0);
} }
int int
@ -129,7 +129,7 @@ lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
timeout_ms = 0; timeout_ms = 0;
} }
n = poll(pt->fds, pt->fds_count, timeout_ms); n = _poll(pt->fds, pt->fds_count, timeout_ms);
#if 0//def LWS_OPENSSL_SUPPORT #if 0//def LWS_OPENSSL_SUPPORT
if (!pt->rx_draining_ext_list && if (!pt->rx_draining_ext_list &&

View File

@ -35,6 +35,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include "lwip/opt.h"
#include "lwip/arch.h" #include "lwip/arch.h"
#include "wm_osal.h" #include "wm_osal.h"
//#include <ctype.h> //#include <ctype.h>

View File

@ -149,6 +149,7 @@
#include "APSCommonServices.h" #include "APSCommonServices.h"
#include "lwip/sockets.h" #include "lwip/sockets.h"
#include "wm_sockets.h" #include "wm_sockets.h"
#include "wm_netif.h"
#include "lwip/inet.h" #include "lwip/inet.h"
#include "lwip/igmp.h" #include "lwip/igmp.h"
#include <time.h> // platform support for UTC time #include <time.h> // platform support for UTC time

View File

@ -2733,6 +2733,10 @@
/* Platform options */ /* Platform options */
//#define MBEDTLS_PLATFORM_STD_MEM_HDR <stdlib.h> /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ //#define MBEDTLS_PLATFORM_STD_MEM_HDR <stdlib.h> /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */
#if WM_MEM_DEBUG
#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */
#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */
#else
#ifdef tls_mem_calloc #ifdef tls_mem_calloc
#define MBEDTLS_PLATFORM_STD_CALLOC tls_mem_calloc /**< Default allocator to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_CALLOC tls_mem_calloc /**< Default allocator to use, can be undefined */
#define MBEDTLS_PLATFORM_STD_FREE tls_mem_free /**< Default free to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_FREE tls_mem_free /**< Default free to use, can be undefined */
@ -2740,6 +2744,7 @@
#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */
#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */
#endif #endif
#endif
//#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */
//#define MBEDTLS_PLATFORM_STD_TIME tls_os_get_time /**< Default time to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ //#define MBEDTLS_PLATFORM_STD_TIME tls_os_get_time /**< Default time to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */
//#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */

View File

@ -292,7 +292,7 @@ int mqtt_connect(mqtt_broker_handle_t* broker)
memcpy(packet+offset, broker->password, passwordlen); memcpy(packet+offset, broker->password, passwordlen);
offset += passwordlen; offset += passwordlen;
} }
//dumpBuffer("conn packet", packet, packetLen);
ret = broker->mqttsend(broker->socketid, packet, packetLen); ret = broker->mqttsend(broker->socketid, packet, packetLen);
if(ret < packetLen) { if(ret < packetLen) {
tls_mem_free(fixed_header); tls_mem_free(fixed_header);
@ -475,6 +475,24 @@ int mqtt_pubrel(mqtt_broker_handle_t* broker, uint16_t message_id) {
return 1; return 1;
} }
int encode_length(int length, uint8_t *buf)
{
int ret = 0;
do
{
buf[ret] = (uint8_t)(length % 0x80);
length /= 0x80;
if(length > 0)
{
buf[ret] |= 0x80;
}
ret++;
}while(length > 0);
//dumpBuffer("encode_length", buf, ret);
return ret;
}
int mqtt_subscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* message_id) { int mqtt_subscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* message_id) {
uint16_t topiclen = strlen(topic); uint16_t topiclen = strlen(topic);
@ -483,7 +501,8 @@ int mqtt_subscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* me
uint8_t *packet=NULL; uint8_t *packet=NULL;
int utf_topicLen; int utf_topicLen;
int packetLen; int packetLen;
uint8_t fixed_header[2]; uint8_t fixed_header[6];
int fixed_header_len;
/*************************************************/ /*************************************************/
@ -514,11 +533,13 @@ int mqtt_subscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* me
/********************add by alex***********************/ /********************add by alex***********************/
// Fixed header // Fixed header
fixed_header[0] = MQTT_MSG_SUBSCRIBE | MQTT_QOS1_FLAG; fixed_header[0] = MQTT_MSG_SUBSCRIBE | MQTT_QOS1_FLAG;
fixed_header[1] = sizeof(var_header)+utf_topicLen; //fixed_header[1] = sizeof(var_header)+utf_topicLen;
fixed_header_len = encode_length(sizeof(var_header)+utf_topicLen, &fixed_header[1]);
fixed_header_len += 1;
/******************************************************/ /******************************************************/
/***********************add by alex********************/ /***********************add by alex********************/
packetLen = sizeof(var_header)+sizeof(fixed_header)+utf_topicLen; packetLen = sizeof(var_header)+fixed_header_len+utf_topicLen;
packet = (uint8_t*)tls_mem_alloc( packetLen ); packet = (uint8_t*)tls_mem_alloc( packetLen );
if( packet==NULL ) if( packet==NULL )
{ {
@ -526,9 +547,11 @@ int mqtt_subscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* me
return -1; return -1;
} }
memset(packet, 0, packetLen); memset(packet, 0, packetLen);
memcpy(packet, fixed_header, sizeof(fixed_header)); memcpy(packet, fixed_header, fixed_header_len);
memcpy(packet+sizeof(fixed_header), var_header, sizeof(var_header)); memcpy(packet+fixed_header_len, var_header, sizeof(var_header));
memcpy(packet+sizeof(fixed_header)+sizeof(var_header), utf_topic, utf_topicLen); memcpy(packet+fixed_header_len+sizeof(var_header), utf_topic, utf_topicLen);
//dumpBuffer("subscribe packet", packet, packetLen);
// Send the packet // Send the packet
if(broker->mqttsend(broker->socketid, packet, packetLen) < packetLen) { if(broker->mqttsend(broker->socketid, packet, packetLen) < packetLen) {
@ -549,7 +572,8 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t*
/******************add by alex*******************/ /******************add by alex*******************/
uint8_t *utf_topic=NULL; uint8_t *utf_topic=NULL;
int utf_topicLen; int utf_topicLen;
uint8_t fixed_header[2]; uint8_t fixed_header[6];
int fixed_header_len;
uint8_t *packet = NULL; uint8_t *packet = NULL;
int packetLen; int packetLen;
@ -579,9 +603,11 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t*
/*************************add by alex*******************************/ /*************************add by alex*******************************/
// Fixed header // Fixed header
fixed_header[0] = MQTT_MSG_UNSUBSCRIBE | MQTT_QOS1_FLAG; fixed_header[0] = MQTT_MSG_UNSUBSCRIBE | MQTT_QOS1_FLAG;
fixed_header[1] = sizeof(var_header)+utf_topicLen; //fixed_header[1] = sizeof(var_header)+utf_topicLen;
fixed_header_len = encode_length(sizeof(var_header)+utf_topicLen, &fixed_header[1]);
fixed_header_len += 1;
packetLen = sizeof(var_header)+sizeof(fixed_header)+utf_topicLen; packetLen = sizeof(var_header)+fixed_header_len+utf_topicLen;
packet = (uint8_t*)tls_mem_alloc( packetLen ); packet = (uint8_t*)tls_mem_alloc( packetLen );
if( packet==NULL ) if( packet==NULL )
{ {
@ -589,9 +615,9 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t*
return -1; return -1;
} }
memset(packet, 0, packetLen); memset(packet, 0, packetLen);
memcpy(packet, fixed_header, sizeof(fixed_header)); memcpy(packet, fixed_header, fixed_header_len);
memcpy(packet+sizeof(fixed_header), var_header, sizeof(var_header)); memcpy(packet+fixed_header_len, var_header, sizeof(var_header));
memcpy(packet+sizeof(fixed_header)+sizeof(var_header), utf_topic, utf_topicLen); memcpy(packet+fixed_header_len+sizeof(var_header), utf_topic, utf_topicLen);
// Send the packet // Send the packet
if(broker->mqttsend(broker->socketid, packet, packetLen) < packetLen) { if(broker->mqttsend(broker->socketid, packet, packetLen) < packetLen) {

View File

@ -38,20 +38,24 @@ lsd_printf_fn lsd_printf = NULL;
static u8 *lsd_scan_bss; static u8 *lsd_scan_bss;
#define LSD_SRC_CNT (3)
const u8 lsd_dst_addr[3] = {0x01,0x00,0x5e}; const u8 lsd_dst_addr[3] = {0x01,0x00,0x5e};
u8 lsd_last_num[2] = {0,0}; u8 lsd_last_num[LSD_SRC_CNT] = {0, 0, 0};
u16 lsd_head[2][4] = {{0,0,0,0},{0,0,0,0}}; u16 lsd_head[LSD_SRC_CNT][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0}};
u16 lsd_byte[2][4] = {{0,0,0,0},{0,0,0,0}}; u16 lsd_byte[LSD_SRC_CNT][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0}};
u8 lsd_state = 0; u8 lsd_state[LSD_SRC_CNT] = {0, 0, 0};
u16 lsd_data_datum = 0; u16 lsd_data_datum[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_head_cnt[2] = {0,0}; u8 lsd_head_cnt[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_byte_cnt[2] = {0,0}; u8 lsd_head_bw20[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_sync_cnt = 0; u8 lsd_byte_cnt[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_src_mac[6] = {0}; u8 lsd_sync_cnt[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_data_cnt = 0; u8 lsd_src_mac[LSD_SRC_CNT][6] = {{0}, {0}, {0}};
u16 lsd_last_seq[2] = {0,0}; u8 lsd_data_cnt[LSD_SRC_CNT] = {0, 0, 0};
u16 lsd_last_len = 0; u16 lsd_last_seq[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_temp_lock = 0; u16 lsd_last_len[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_temp_lock[LSD_SRC_CNT] = {0, 0, 0};
u8 lsd_lock_chan_cnt = 0;
struct lsd_data_t *lsd_data = NULL; struct lsd_data_t *lsd_data = NULL;
@ -196,12 +200,24 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
{ {
return -1; return -1;
} }
if(hdr->duration_id == 0) //normal mode stbc 不处理
{
tods = 2;
}
else
{
if(1 == ieee80211_has_tods(hdr->frame_control))
{
tods = 1;
}
else
{
tods = 0;
}
}
multicast = ieee80211_get_DA(hdr); multicast = ieee80211_get_DA(hdr);
if(0 == ieee80211_has_tods(hdr->frame_control))
{
return LSD_ONESHOT_CONTINUE;
}
//for LSD only tods //for LSD only tods
if (ieee80211_is_data_qos(hdr->frame_control)) if (ieee80211_is_data_qos(hdr->frame_control))
{ {
@ -212,15 +228,15 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
frm_len = data_len; frm_len = data_len;
} }
tods = ieee80211_has_tods(hdr->frame_control); //tods = ieee80211_has_tods(hdr->frame_control);
SrcMac = ieee80211_get_SA(hdr); SrcMac = ieee80211_get_SA(hdr);
if(memcmp(multicast, lsd_dst_addr, 3)) if(memcmp(multicast, lsd_dst_addr, 3) && hdr->duration_id)
{ {
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
switch(lsd_state) switch(lsd_state[tods])
{ {
case 0: case 0:
if ((frm_len < 60) || (frm_len > 86)) if ((frm_len < 60) || (frm_len > 86))
@ -228,24 +244,26 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
if(is_zero_ether_addr(lsd_src_mac)) if(is_zero_ether_addr(lsd_src_mac[tods]))
{ {
memcpy(lsd_src_mac, SrcMac, 6); memcpy(lsd_src_mac[tods], SrcMac, 6);
lsd_head_cnt[0] = lsd_head_cnt[1] = 0; lsd_head_cnt[tods] = 0;
lsd_sync_cnt = 0; lsd_head_bw20[tods] = 0;
lsd_last_seq[0] = lsd_last_seq[1] = 0; lsd_sync_cnt[tods] = 0;
lsd_temp_lock = 0; lsd_last_seq[tods] = 0;
memset(lsd_head, 0, sizeof(lsd_head)); lsd_temp_lock[tods] = 0;
memset(lsd_head[tods], 0, sizeof(lsd_head)/LSD_SRC_CNT);
} }
else else
{ {
if(memcmp(lsd_src_mac, SrcMac, 6)) if(memcmp(lsd_src_mac[tods], SrcMac, 6))
{ {
memcpy(lsd_src_mac, SrcMac, 6); memcpy(lsd_src_mac[tods], SrcMac, 6);
lsd_head_cnt[0] = lsd_head_cnt[1] = 0; lsd_head_cnt[tods] = 0;
lsd_sync_cnt = 0; lsd_head_bw20[tods] = 0;
lsd_last_seq[0] = lsd_last_seq[1] = 0; lsd_sync_cnt[tods] = 0;
memset(lsd_head, 0, sizeof(lsd_head)); lsd_last_seq[tods] = 0;
memset(lsd_head[tods], 0, sizeof(lsd_head)/LSD_SRC_CNT);
}else{ }else{
if(lsd_printf) if(lsd_printf)
lsd_printf("tods:%d,%d,"MACSTR"\n", tods, frm_len, MAC2STR(SrcMac)); lsd_printf("tods:%d,%d,"MACSTR"\n", tods, frm_len, MAC2STR(SrcMac));
@ -265,22 +283,27 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(((lsd_head[tods][lsd_head_cnt[tods]]+1) != lsd_head[tods][lsd_head_cnt[tods]-1]) if(((lsd_head[tods][lsd_head_cnt[tods]]+1) != lsd_head[tods][lsd_head_cnt[tods]-1])
&& ((lsd_head[tods][lsd_head_cnt[tods]]-3) != lsd_head[tods][lsd_head_cnt[tods]-1])) && ((lsd_head[tods][lsd_head_cnt[tods]]-3) != lsd_head[tods][lsd_head_cnt[tods]-1]))
{ {
lsd_temp_lock = 0; lsd_temp_lock[tods] = 0;
lsd_head_cnt[tods] = 0; lsd_head_cnt[tods] = 0;
lsd_head_bw20[tods] = 0;
lsd_head[tods][0] = frm_len; lsd_head[tods][0] = frm_len;
}else{ }else{
lsd_temp_lock = 1; lsd_temp_lock[tods] = 1;
} }
} }
lsd_head_cnt[tods] ++; lsd_head_cnt[tods] ++;
if(0 == (hdr->duration_id&0x01))
{
lsd_head_bw20[tods] ++;
}
if(lsd_head_cnt[tods] >= 4) if(lsd_head_cnt[tods] >= 4)
{ {
lsd_sync_cnt ++; lsd_sync_cnt[tods] ++;
lsd_head_cnt[tods] = 0; lsd_head_cnt[tods] = 0;
} }
if(lsd_sync_cnt >= 1) if(lsd_sync_cnt[tods] >= 1)
{ {
guide_len = lsd_head[tods][0]; guide_len = lsd_head[tods][0];
for(i=1; i<=3; i++) for(i=1; i<=3; i++)
@ -288,28 +311,48 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(guide_len > lsd_head[tods][i]) if(guide_len > lsd_head[tods][i])
guide_len = lsd_head[tods][i]; //È¡³öͬ²½Í·ÖÐ×îСֵ guide_len = lsd_head[tods][i]; //È¡³öͬ²½Í·ÖÐ×îСֵ
} }
lsd_state = 1; //同步完成, 锁定源MAC和信道 lsd_state[tods] = 1; //同步完成, 锁定源MAC和信道
lsd_data_datum = guide_len - LSD_GUIDE_DATUM + LSD_DATA_OFFSET; //获取到基准长度 lsd_data_datum[tods] = guide_len - LSD_GUIDE_DATUM + LSD_DATA_OFFSET; //获取到基准长度
if(lsd_printf) if(lsd_printf)
lsd_printf("lsd lock:%d\n", lsd_data_datum); lsd_printf("lsd lock:%d\n", lsd_data_datum);
if (lsd_printf)
printf("SRC MAC:%02X:%02X:%02X:%02X:%02X:%02X\n", lsd_printf("SRC MAC:%02X:%02X:%02X:%02X:%02X:%02X\n",
lsd_src_mac[0],lsd_src_mac[1],lsd_src_mac[2],lsd_src_mac[3],lsd_src_mac[4],lsd_src_mac[5]); lsd_src_mac[tods][0],lsd_src_mac[tods][1],lsd_src_mac[tods][2],lsd_src_mac[tods][3],lsd_src_mac[tods][4],lsd_src_mac[tods][5]);
return LSD_ONESHOT_CHAN_LOCKED; if(lsd_head_bw20[tods] >= 4)
}
if(lsd_temp_lock == 1)
{ {
lsd_head_bw20[tods] = 0;
if (lsd_lock_chan_cnt == 1)
{
lsd_lock_chan_cnt = 2;
return LSD_ONESHOT_CHAN_LOCKED_BW20;
}
}
else
{
if (lsd_lock_chan_cnt == 1)
{
lsd_lock_chan_cnt = 2;
return LSD_ONESHOT_CHAN_LOCKED_BW40;
}
}
}
if(lsd_temp_lock[tods] == 1)
{
if (lsd_lock_chan_cnt == 0)
{
lsd_lock_chan_cnt = 1;
return LSD_ONESHOT_CHAN_TEMP_LOCKED; return LSD_ONESHOT_CHAN_TEMP_LOCKED;
} }
}
break; break;
case 1: case 1:
if((frm_len >= 1024) || (frm_len < lsd_data_datum)) if((frm_len >= 1024) || (frm_len < lsd_data_datum[tods]))
{ {
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
if(memcmp(lsd_src_mac, SrcMac, 6)) if(memcmp(lsd_src_mac[tods], SrcMac, 6))
{ {
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -327,7 +370,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
lsd_last_num[tods] = multicast[5]; lsd_last_num[tods] = multicast[5];
} }
lsd_byte[tods][lsd_byte_cnt[tods]] = frm_len - lsd_data_datum; lsd_byte[tods][lsd_byte_cnt[tods]] = frm_len - lsd_data_datum[tods];
if((lsd_byte_cnt[tods]==0) && (lsd_byte[tods][0]>=256)) if((lsd_byte_cnt[tods]==0) && (lsd_byte[tods][0]>=256))
{ {
lsd_byte_cnt[tods] = 0; lsd_byte_cnt[tods] = 0;
@ -361,16 +404,16 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(data_coding.crc == (u8)crcValue) if(data_coding.crc == (u8)crcValue)
{ {
if(lsd_printf) if(lsd_printf)
lsd_printf("%d\n", data_coding.seq); lsd_printf("[%d]%d\n", tods, data_coding.seq);
lsd_data->data[data_coding.seq<<1] = data_coding.data1; lsd_data->data[data_coding.seq<<1] = data_coding.data1;
lsd_data->used[data_coding.seq<<1] = 1; lsd_data->used[data_coding.seq<<1] = 1;
lsd_data_cnt ++; lsd_data_cnt[tods] ++;
lsd_data->data[(data_coding.seq<<1)+1] = data_coding.data2; lsd_data->data[(data_coding.seq<<1)+1] = data_coding.data2;
lsd_data->used[(data_coding.seq<<1)+1] = 1; lsd_data->used[(data_coding.seq<<1)+1] = 1;
lsd_data_cnt ++; lsd_data_cnt[tods] ++;
if(lsd_data_cnt >= LSD_DATA_MAX) if(lsd_data_cnt[tods] >= LSD_DATA_MAX)
{ {
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_ERR; return LSD_ONESHOT_ERR;
} }
@ -386,7 +429,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
ssidLen = lsd_data->data[2]; ssidLen = lsd_data->data[2];
if((ssidLen > 32) || (pwdLen > 64)) if((ssidLen > 32) || (pwdLen > 64))
{ {
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_ERR; return LSD_ONESHOT_ERR;
} }
@ -395,7 +438,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(lsd_printf) if(lsd_printf)
lsd_printf("totalLen:%d, ssidLen:%d, pwdLen:%d, err\n", totalLen, ssidLen, pwdLen); lsd_printf("totalLen:%d, ssidLen:%d, pwdLen:%d, err\n", totalLen, ssidLen, pwdLen);
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -406,7 +449,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(lsd_printf) if(lsd_printf)
lsd_printf("totalLen:%d, ssidLen:%d, pwdLen:%d, err\n", totalLen, ssidLen, pwdLen); lsd_printf("totalLen:%d, ssidLen:%d, pwdLen:%d, err\n", totalLen, ssidLen, pwdLen);
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -418,7 +461,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(lsd_printf) if(lsd_printf)
lsd_printf("totalLen:%d, ssidLen:%d, pwdLen:%d, err\n", totalLen, ssidLen, pwdLen); lsd_printf("totalLen:%d, ssidLen:%d, pwdLen:%d, err\n", totalLen, ssidLen, pwdLen);
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -428,7 +471,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(lsd_printf) if(lsd_printf)
lsd_printf("ssidLen:%d, pwdLen:%d, err\n", ssidLen, pwdLen); lsd_printf("ssidLen:%d, pwdLen:%d, err\n", ssidLen, pwdLen);
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -437,12 +480,12 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(lsd_printf) if(lsd_printf)
lsd_printf("ssidLen:%d, pwdLen:%d, err\n", ssidLen, pwdLen); lsd_printf("ssidLen:%d, pwdLen:%d, err\n", ssidLen, pwdLen);
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
if(lsd_data_cnt >= totalLen + 2) if(lsd_data_cnt[tods] >= totalLen + 2)
{ {
if(lsd_printf) if(lsd_printf)
lsd_printf("get all\n"); lsd_printf("get all\n");
@ -452,7 +495,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
if(lsd_printf) if(lsd_printf)
lsd_printf("totalCrc err\n"); lsd_printf("totalCrc err\n");
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -464,7 +507,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
lsd_param->user_len = totalLen - 2; lsd_param->user_len = totalLen - 2;
if(lsd_param->user_len > 128) if(lsd_param->user_len > 128)
{ {
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_ERR; return LSD_ONESHOT_ERR;
} }
@ -477,17 +520,17 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
bssidCrc = lsd_data->data[3]; bssidCrc = lsd_data->data[3];
if(pwdLen > 0) if(pwdLen > 0)
{ {
memcpy(lsd_param->pwd, &lsd_data->data[4], pwdLen); memcpy(&lsd_param->pwd, &lsd_data->data[4], pwdLen);
memcpy(lsd_param->ssid, &lsd_data->data[5+pwdLen], ssidLen); memcpy(&lsd_param->ssid, &lsd_data->data[5+pwdLen], ssidLen);
ssidCrc = lsd_data->data[5+ssidLen+pwdLen]; ssidCrc = lsd_data->data[5+ssidLen+pwdLen];
lsd_param->user_len = totalLen - pwdLen - ssidLen - 5; lsd_param->user_len = totalLen - pwdLen - ssidLen - 5;
if(lsd_param->user_len > 128) if(lsd_param->user_len > 128)
{ {
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_ERR; return LSD_ONESHOT_ERR;
} }
memcpy(lsd_param->user_data, &lsd_data->data[6+ssidLen+pwdLen], lsd_param->user_len); memcpy(&lsd_param->user_data, &lsd_data->data[6+ssidLen+pwdLen], lsd_param->user_len);
} }
else else
{ {
@ -496,7 +539,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
lsd_param->user_len = totalLen - ssidLen - 4; lsd_param->user_len = totalLen - ssidLen - 4;
if(lsd_param->user_len > 128) if(lsd_param->user_len > 128)
{ {
lsd_data_cnt = 0; lsd_data_cnt[tods] = 0;
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t));
return LSD_ONESHOT_ERR; return LSD_ONESHOT_ERR;
} }
@ -569,8 +612,11 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
{ {
if(lsd_printf) if(lsd_printf)
lsd_printf("pwdCrc err\n"); lsd_printf("pwdCrc err\n");
lsd_data_cnt = 0; memset((u8 *)&lsd_data->data[4], 0, pwdLen);
memset((u8 *)lsd_data, 0, sizeof(struct lsd_data_t)); memset((u8 *)&lsd_data->used[4], 0, pwdLen);
lsd_data->used[1] = 0;
lsd_data->data[1] = 0;
lsd_data_cnt[tods] = lsd_data_cnt[tods] - pwdLen;
memset(lsd_param->pwd, 0, 65); memset(lsd_param->pwd, 0, 65);
return LSD_ONESHOT_CONTINUE; return LSD_ONESHOT_CONTINUE;
} }
@ -634,18 +680,20 @@ void tls_lsd_init(u8 *scanBss)
memset(lsd_head, 0, sizeof(lsd_head)); memset(lsd_head, 0, sizeof(lsd_head));
memset(lsd_byte, 0, sizeof(lsd_byte)); memset(lsd_byte, 0, sizeof(lsd_byte));
memset(lsd_src_mac, 0, 6); memset(lsd_src_mac, 0, sizeof(lsd_src_mac));
memset(lsd_last_num, 0, sizeof(lsd_last_num)); memset(lsd_last_num, 0, sizeof(lsd_last_num));
lsd_temp_lock = 0; memset(lsd_temp_lock, 0, sizeof(lsd_temp_lock));
lsd_state = 0; memset(lsd_state, 0, sizeof(lsd_state));
lsd_data_datum = 0; memset(lsd_data_datum, 0, sizeof(lsd_data_datum));
memset(lsd_head_bw20, 0, sizeof(lsd_head_bw20));
memset(lsd_head_cnt, 0, sizeof(lsd_head_cnt)); memset(lsd_head_cnt, 0, sizeof(lsd_head_cnt));
memset(lsd_byte_cnt, 0, sizeof(lsd_byte_cnt)); memset(lsd_byte_cnt, 0, sizeof(lsd_byte_cnt));
lsd_sync_cnt = 0; memset(lsd_sync_cnt, 0, sizeof(lsd_sync_cnt));
lsd_data_cnt = 0; memset(lsd_data_cnt, 0, sizeof(lsd_data_cnt));
memset(lsd_last_seq, 0, sizeof(lsd_last_seq)); memset(lsd_last_seq, 0, sizeof(lsd_last_seq));
lsd_scan_bss = scanBss; lsd_scan_bss = scanBss;
lsd_lock_chan_cnt = 0;
if(lsd_printf) if(lsd_printf)
lsd_printf("tls_lsd_init\n"); lsd_printf("tls_lsd_init\n");

View File

@ -24,11 +24,14 @@ typedef enum
LSD_ONESHOT_CHAN_TEMP_LOCKED = 1, LSD_ONESHOT_CHAN_TEMP_LOCKED = 1,
LSD_ONESHOT_CHAN_LOCKED = 2, LSD_ONESHOT_CHAN_LOCKED_BW20 = 2,
LSD_ONESHOT_COMPLETE = 3, LSD_ONESHOT_CHAN_LOCKED_BW40 = 3,
LSD_ONESHOT_COMPLETE = 4,
LSD_ONESHOT_ERR = 5
LSD_ONESHOT_ERR = 4
} lsd_oneshot_status_t; } lsd_oneshot_status_t;

View File

@ -107,6 +107,11 @@ static u8 scanChanErr = 0;
static tls_os_sem_t *gWifiRecvSem = NULL; static tls_os_sem_t *gWifiRecvSem = NULL;
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
#define ONESHOT_SPECIAL_DELAY_TIME (8 * HZ)
static u32 g_oneshot_dur_time = 0;
#endif
#endif #endif
#if TLS_CONFIG_AP_MODE_ONESHOT #if TLS_CONFIG_AP_MODE_ONESHOT
@ -451,7 +456,7 @@ int tls_filter_module_srcmac(u8 *mac){
static void wifi_change_chanel(u32 chanid, u8 bandwidth) static void wifi_change_chanel(u32 chanid, u8 bandwidth)
{ {
tls_wl_change_channel_info(chanid, 0);//bandwidth); tls_wl_change_channel_info(chanid, bandwidth);
} }
#if TLS_CONFIG_UDP_LSD_SPECIAL #if TLS_CONFIG_UDP_LSD_SPECIAL
@ -489,6 +494,7 @@ static void oneshot_lsd_finish(void)
int tls_wifi_lsd_oneshot_special(u8 *data, u16 data_len) int tls_wifi_lsd_oneshot_special(u8 *data, u16 data_len)
{ {
int ret; int ret;
struct ieee80211_hdr *hdr = (struct ieee80211_hdr*)data;
ret = tls_lsd_recv(data, data_len); ret = tls_lsd_recv(data, data_len);
if(ret == LSD_ONESHOT_ERR) if(ret == LSD_ONESHOT_ERR)
@ -501,9 +507,14 @@ int tls_wifi_lsd_oneshot_special(u8 *data, u16 data_len)
ONESHOT_DBG("LSD_ONESHOT_CHAN_TEMP_LOCKED:%d\r\n", tls_os_get_time()); ONESHOT_DBG("LSD_ONESHOT_CHAN_TEMP_LOCKED:%d\r\n", tls_os_get_time());
tls_oneshot_switch_channel_tim_temp_stop(); tls_oneshot_switch_channel_tim_temp_stop();
} }
else if(ret == LSD_ONESHOT_CHAN_LOCKED) else if(ret == LSD_ONESHOT_CHAN_LOCKED_BW20)
{ {
ONESHOT_DBG("LSD_ONESHOT_CHAN_LOCKED:%d\r\n", tls_os_get_time()); ONESHOT_DBG("LSD_ONESHOT_CHAN_LOCKED_BW20:%d,%x\r\n", tls_os_get_time(), hdr->duration_id);
tls_oneshot_switch_channel_tim_stop((struct ieee80211_hdr *)data);
}
else if(ret == LSD_ONESHOT_CHAN_LOCKED_BW40)
{
hdr->duration_id |= 0x0001; ////force change to bw40
tls_oneshot_switch_channel_tim_stop((struct ieee80211_hdr *)data); tls_oneshot_switch_channel_tim_stop((struct ieee80211_hdr *)data);
} }
else if(ret == LSD_ONESHOT_COMPLETE) else if(ret == LSD_ONESHOT_COMPLETE)
@ -554,7 +565,7 @@ int soft_ap_create(void)
apinfo.encrypt = 0; /*0:open, 1:wep64, 2:wep128*/ apinfo.encrypt = 0; /*0:open, 1:wep64, 2:wep128*/
apinfo.channel = 5; /*channel random*/ apinfo.channel = 5; /*channel random*/
/*ip information: ip address?ê?netmask?ê?dns*/ /*ip information: ip address?ê?netmask?ê?dns*/
ipinfo.ip_addr[0] = 192; ipinfo.ip_addr[0] = 192;
ipinfo.ip_addr[1] = 168; ipinfo.ip_addr[1] = 168;
ipinfo.ip_addr[2] = 1; ipinfo.ip_addr[2] = 1;
@ -696,6 +707,10 @@ void tls_oneshot_callback_start(void)
#endif #endif
#if TLS_CONFIG_UDP_LSD_SPECIAL #if TLS_CONFIG_UDP_LSD_SPECIAL
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
tls_wl_plcp_stop();
#endif
#if LSD_ONESHOT_DEBUG #if LSD_ONESHOT_DEBUG
lsd_printf = printf; lsd_printf = printf;
#endif #endif
@ -1099,6 +1114,10 @@ void tls_oneshot_switch_channel_tim_stop(struct ieee80211_hdr *hdr)
ONESHOT_DBG("change to BW20 ch:%d\n", ch); ONESHOT_DBG("change to BW20 ch:%d\n", ch);
tls_wifi_change_chanel(ch); tls_wifi_change_chanel(ch);
} }
else if(hdr->duration_id == 0)
{
ONESHOT_DBG("special frame!!!!!!!!!!!!!!\n");
}
} }
void tls_oneshot_switch_channel_tim_temp_stop(void) void tls_oneshot_switch_channel_tim_temp_stop(void)
@ -1249,6 +1268,9 @@ void tls_oneshot_task_handle(void *arg)
void *msg; void *msg;
#if TLS_CONFIG_UDP_ONE_SHOT #if TLS_CONFIG_UDP_ONE_SHOT
static int chanCnt = 0; static int chanCnt = 0;
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
static int chanRepeat = 0;
#endif
#endif #endif
for(;;) for(;;)
{ {
@ -1274,6 +1296,10 @@ void tls_oneshot_task_handle(void *arg)
tls_oneshot_scan_result_deal(); tls_oneshot_scan_result_deal();
chanCnt = 0; chanCnt = 0;
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
chanRepeat = 0;
g_oneshot_dur_time = tls_os_get_time();
#endif
wifi_change_chanel(airwifichan[chanCnt], airchantype[chanCnt]); wifi_change_chanel(airwifichan[chanCnt], airchantype[chanCnt]);
tls_oneshot_callback_start(); tls_oneshot_callback_start();
@ -1305,9 +1331,33 @@ void tls_oneshot_task_handle(void *arg)
{ {
chanCnt = 0; chanCnt = 0;
} }
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
if (chanRepeat)
{ {
if((tls_os_get_time() - g_oneshot_dur_time) >= ONESHOT_SPECIAL_DELAY_TIME)
{
ONESHOT_DBG("plcp stop\r\n");
tls_wl_plcp_stop();
chanRepeat = 0;
g_oneshot_dur_time = tls_os_get_time();
}
wifi_change_chanel(airwifichan[chanCnt], 0);
ONESHOT_DBG("@chan:%d,bandwidth:%d,%d\n", airwifichan[chanCnt], 0, tls_os_get_time());
}
else
#endif
{
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
if((tls_os_get_time() - g_oneshot_dur_time) >= ONESHOT_SPECIAL_DELAY_TIME)
{
ONESHOT_DBG("plcp start\r\n");
tls_wl_plcp_start();
chanRepeat = 1;
g_oneshot_dur_time = tls_os_get_time();
}
#endif
wifi_change_chanel(airwifichan[chanCnt], airchantype[chanCnt]); wifi_change_chanel(airwifichan[chanCnt], airchantype[chanCnt]);
ONESHOT_DBG("chan:%d,bandwidth:%d\n", airwifichan[chanCnt], airchantype[chanCnt]); ONESHOT_DBG("chan:%d,bandwidth:%d,%d\n", airwifichan[chanCnt], airchantype[chanCnt], tls_os_get_time());
} }
#if TLS_CONFIG_AIRKISS_MODE_ONESHOT #if TLS_CONFIG_AIRKISS_MODE_ONESHOT
@ -1342,6 +1392,9 @@ void tls_oneshot_task_handle(void *arg)
case ONESHOT_STOP_CHAN_SWITCH: case ONESHOT_STOP_CHAN_SWITCH:
gchanLock = 1; gchanLock = 1;
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
tls_wl_plcp_start();
#endif
ONESHOT_DBG("stop channel ch:%d time:%d\n",airwifichan[chanCnt], (tls_os_get_time()-oneshottime)*1000/HZ); ONESHOT_DBG("stop channel ch:%d time:%d\n",airwifichan[chanCnt], (tls_os_get_time()-oneshottime)*1000/HZ);
if (gWifiSwitchChanTim) if (gWifiSwitchChanTim)
{ {
@ -1358,8 +1411,6 @@ void tls_oneshot_task_handle(void *arg)
tls_os_timer_stop(gWifiRecvTimOut); tls_os_timer_stop(gWifiRecvTimOut);
tls_os_timer_change(gWifiRecvTimOut, TLS_ONESHOT_RECV_TIME); tls_os_timer_change(gWifiRecvTimOut, TLS_ONESHOT_RECV_TIME);
} }
break; break;
case ONESHOT_HANDSHAKE_TIMEOUT: case ONESHOT_HANDSHAKE_TIMEOUT:
@ -1520,8 +1571,8 @@ void tls_oneshot_task_create(void)
err = tls_os_task_create(NULL, NULL, err = tls_os_task_create(NULL, NULL,
tls_oneshot_task_handle, tls_oneshot_task_handle,
NULL, NULL,
(void *)OneshotTaskStk, /* 任务栈的起始地址 */ (void *)OneshotTaskStk, /* 任务栈的起始地址 */
ONESHOT_TASK_SIZE * sizeof(u32), /* 任务栈的大小 */ ONESHOT_TASK_SIZE * sizeof(u32), /* 任务栈的大小 */
TLS_ONESHOT_TASK_PRIO, TLS_ONESHOT_TASK_PRIO,
0); 0);
if (err != TLS_OS_SUCCESS) if (err != TLS_OS_SUCCESS)
@ -1661,7 +1712,11 @@ int tls_wifi_set_oneshot_flag(u8 flag)
else /*udp mode*/ else /*udp mode*/
{ {
tls_wifi_set_listen_mode(1); tls_wifi_set_listen_mode(1);
#if TLS_CONFIG_ONESHOT_DELAY_SPECIAL
#else
tls_wl_plcp_start(); tls_wl_plcp_start();
#endif
} }
tls_wifi_start_oneshot(); tls_wifi_start_oneshot();
} }

View File

@ -542,7 +542,7 @@ int ping_test_sync(struct ping_param *para)
if (ret > 0) if (ret > 0)
{ {
//memset(icmppacket, 0, PACKET_SIZE); //memset(icmppacket, 0, PACKET_SIZE);
ret = recvfrom(socketid, icmppacket, sizeof(icmppacket), 0, NULL, NULL); ret = recvfrom(socketid, icmppacket, PACKET_SIZE, 0, NULL, NULL);
if (ret > 0) if (ret > 0)
{ {
ret = ping_test_unpack(icmppacket, ret, tls_os_get_time(), NULL); ret = ping_test_unpack(icmppacket, ret, tls_os_get_time(), NULL);

View File

@ -84,6 +84,7 @@
#include "lwip/tcp.h" #include "lwip/tcp.h"
#include "lwip/memp.h" #include "lwip/memp.h"
#include "httpd.h" #include "httpd.h"
#include "wm_wifi.h"
#include "wm_fwup.h" #include "wm_fwup.h"
#include "wm_watchdog.h" #include "wm_watchdog.h"
#include "wm_params.h" #include "wm_params.h"

View File

@ -347,7 +347,7 @@ int tls_cmd_scan( enum tls_cmd_mode mode)
return CMD_ERR_OK; return CMD_ERR_OK;
} }
int tls_cmd_scan_by_param( enum tls_cmd_mode mode, u16 channellist, u32 times, u16 switchinterval) int tls_cmd_scan_by_param( enum tls_cmd_mode mode, u16 channellist, u32 times, u16 switchinterval, u16 scantype)
{ {
int ret=0; int ret=0;
@ -365,6 +365,7 @@ int tls_cmd_scan_by_param( enum tls_cmd_mode mode, u16 channellist, u32 times, u
tls_wifi_scan_result_cb_register(hostif_wscan_cmplt); tls_wifi_scan_result_cb_register(hostif_wscan_cmplt);
/* trigger the scan */ /* trigger the scan */
scan_param.scan_type = scantype;
scan_param.scan_chanlist = channellist; scan_param.scan_chanlist = channellist;
scan_param.scan_chinterval = switchinterval; scan_param.scan_chinterval = switchinterval;
scan_param.scan_times = times; scan_param.scan_times = times;

View File

@ -188,7 +188,7 @@ int tls_cmd_pmtf(void);
void tls_cmd_reset_sys(void); void tls_cmd_reset_sys(void);
int tls_cmd_get_ver( struct tls_cmd_ver_t *ver); int tls_cmd_get_ver( struct tls_cmd_ver_t *ver);
int tls_cmd_scan( enum tls_cmd_mode mode); int tls_cmd_scan( enum tls_cmd_mode mode);
int tls_cmd_scan_by_param( enum tls_cmd_mode mode, u16 channellist, u32 times, u16 switchinterval); int tls_cmd_scan_by_param( enum tls_cmd_mode mode, u16 channellist, u32 times, u16 switchinterval, u16 scantype);
int tls_cmd_join( enum tls_cmd_mode mode,struct tls_cmd_connect_t *conn); int tls_cmd_join( enum tls_cmd_mode mode,struct tls_cmd_connect_t *conn);
int tls_cmd_disconnect_network(u8 mode); int tls_cmd_disconnect_network(u8 mode);
int tls_cmd_get_link_status(struct tls_cmd_link_status_t *lks); int tls_cmd_get_link_status(struct tls_cmd_link_status_t *lks);

View File

@ -2433,7 +2433,7 @@ int wscan_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
struct tls_hostif *hif = tls_get_hostif(); struct tls_hostif *hif = tls_get_hostif();
hif->uart_atcmd_bits &= ~(1 << UART_ATCMD_BIT_WSCAN); hif->uart_atcmd_bits &= ~(1 << UART_ATCMD_BIT_WSCAN);
ret = tls_cmd_scan_by_param(cmd->scanparam.mode, cmd->scanparam.chlist, cmd->scanparam.scantimes, cmd->scanparam.switchinterval); ret = tls_cmd_scan_by_param(cmd->scanparam.mode, cmd->scanparam.chlist, cmd->scanparam.scantimes, cmd->scanparam.switchinterval, cmd->scanparam.scantype);
if(ret){ if(ret){
return -ret; return -ret;
} }
@ -3800,7 +3800,7 @@ int txg_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd, un
if(set_opt){ if(set_opt){
memcpy(tx_gain, cmd->txg.tx_gain, TX_GAIN_LEN); memcpy(tx_gain, cmd->txg.tx_gain, TX_GAIN_LEN);
TLS_DBGPRT_INFO("save tx gain!\r\n"); TLS_DBGPRT_INFO("save tx gain!\r\n");
tls_set_tx_gain(tx_gain); return tls_set_tx_gain(tx_gain);
}else{ }else{
MEMCPY(cmdrsp->txg.tx_gain, tx_gain, TX_GAIN_LEN); MEMCPY(cmdrsp->txg.tx_gain, tx_gain, TX_GAIN_LEN);
} }
@ -3867,7 +3867,7 @@ int txg_rate_set_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION
tx_gain[cmd->txgr.tx_rate] = cmd->txgr.txr_gain[0]; tx_gain[cmd->txgr.tx_rate] = cmd->txgr.txr_gain[0];
tx_gain[cmd->txgr.tx_rate+TX_GAIN_LEN/3] = cmd->txgr.txr_gain[1]; tx_gain[cmd->txgr.tx_rate+TX_GAIN_LEN/3] = cmd->txgr.txr_gain[1];
tx_gain[cmd->txgr.tx_rate+TX_GAIN_LEN*2/3] = cmd->txgr.txr_gain[2]; tx_gain[cmd->txgr.tx_rate+TX_GAIN_LEN*2/3] = cmd->txgr.txr_gain[2];
tls_set_tx_gain(tx_gain); return tls_set_tx_gain(tx_gain);
} }
return 0; return 0;
} }
@ -3890,7 +3890,7 @@ int mac_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd, un
return -CMD_ERR_INV_PARAMS; return -CMD_ERR_INV_PARAMS;
} }
wpa_supplicant_set_mac(cmd->mac.macaddr); wpa_supplicant_set_mac(cmd->mac.macaddr);
tls_set_mac_addr(cmd->mac.macaddr); return tls_set_mac_addr(cmd->mac.macaddr);
}else{ }else{
u8 *mac = NULL; u8 *mac = NULL;
mac = wpa_supplicant_get_mac(); mac = wpa_supplicant_get_mac();
@ -7889,9 +7889,16 @@ int at_parse_func(char *at_name, struct tls_atcmd_token_t *tok, union HOSTIF_CMD
cmd->scanparam.switchinterval = 0; cmd->scanparam.switchinterval = 0;
cmd->scanparam.scantimes = 0; cmd->scanparam.scantimes = 0;
cmd->scanparam.chlist = 0; cmd->scanparam.chlist = 0;
cmd->scanparam.scantype = 0;
switch(tok->arg_found) switch(tok->arg_found)
{ {
case 4:
ret = string_to_uint(tok->arg[3], &value);
if(ret)
return -CMD_ERR_INV_PARAMS;
cmd->scanparam.scantype = value;
case 3: case 3:
ret = string_to_uint(tok->arg[2], &value); ret = string_to_uint(tok->arg[2], &value);
if(ret) if(ret)
@ -7912,6 +7919,7 @@ int at_parse_func(char *at_name, struct tls_atcmd_token_t *tok, union HOSTIF_CMD
cmd->scanparam.switchinterval = 0; cmd->scanparam.switchinterval = 0;
cmd->scanparam.scantimes = 0; cmd->scanparam.scantimes = 0;
cmd->scanparam.chlist = 0; cmd->scanparam.chlist = 0;
cmd->scanparam.scantype = 0;
break; break;
} }
} }

View File

@ -856,9 +856,10 @@ typedef struct HOSTIF_CMD_PARAMS_TXGR{
typedef struct _HOSTIF_CMD_PARAMS_SCANPARAM{ typedef struct _HOSTIF_CMD_PARAMS_SCANPARAM{
enum tls_cmd_mode mode; enum tls_cmd_mode mode;
u32 scantimes; u16 scantimes;
u16 chlist; u16 chlist;
u16 switchinterval; u16 switchinterval;
u16 scantype;
}__attribute__((packed))HOSTIF_CMD_PARAMS_SCANPARAM; }__attribute__((packed))HOSTIF_CMD_PARAMS_SCANPARAM;

View File

@ -3,8 +3,8 @@ sinclude $(TOP_DIR)/tools/w800/conf.mk
ifndef PDIR ifndef PDIR
GEN_LIBS = libnetwork$(LIB_EXT) GEN_LIBS = libnetwork$(LIB_EXT)
COMPONENTS_libnetwork = api2.0.3/liblwipapi$(LIB_EXT) \ COMPONENTS_libnetwork = api_wm/liblwipapi$(LIB_EXT) \
lwip2.0.3/liblwip$(LIB_EXT) lwip2.1.3/liblwip$(LIB_EXT)
endif endif
#DEFINES += #DEFINES +=

View File

@ -407,7 +407,7 @@
#endif #endif
#ifndef configCHECK_FOR_STACK_OVERFLOW #ifndef configCHECK_FOR_STACK_OVERFLOW
#define configCHECK_FOR_STACK_OVERFLOW 0 #define configCHECK_FOR_STACK_OVERFLOW 1
#endif #endif
#ifndef configRECORD_STACK_HIGH_ADDRESS #ifndef configRECORD_STACK_HIGH_ADDRESS

View File

@ -112,6 +112,9 @@ to exclude the API function. */
#define configUSE_STATS_FORMATTING_FUNCTIONS (1) #define configUSE_STATS_FORMATTING_FUNCTIONS (1)
#define INCLUDE_xTaskGetCurrentTaskHandle (1) #define INCLUDE_xTaskGetCurrentTaskHandle (1)
#define configUSE_APPLICATION_TASK_TAG 1
#define INCLUDE_xQueueGetMutexHolder 1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
#define configUSE_RECURSIVE_MUTEXES 1 #define configUSE_RECURSIVE_MUTEXES 1

View File

@ -260,11 +260,6 @@ void cpu_intrpt_restore( void )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName, signed char prio )
{
printf("\ntask[%s] priority[%d] stack over flow\n",pcTaskName, prio);
for(;;);
}
/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an /* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is implementation of vApplicationGetIdleTaskMemory() to provide the memory that is

View File

@ -5597,3 +5597,11 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
#endif #endif
#endif /* if ( configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H == 1 ) */ #endif /* if ( configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H == 1 ) */
#if ( configCHECK_FOR_STACK_OVERFLOW == 1 )
void vApplicationStackOverflowHook( TaskHandle_t xTask, char * pcTaskName )
{
printf("\ntask[%s] priority[%d] stack over flow\n",pcTaskName, configMAX_PRIORITIES - (int)(xTask->uxPriority));
for(;;);
}
#endif /* if ( configCHECK_FOR_STACK_OVERFLOW == 1 )*/

View File

@ -93,15 +93,18 @@ tls_os_status_t tls_os_task_create(tls_os_task_t *task,
xTaskHandle xHandle; xTaskHandle xHandle;
BaseType_t xreturn; BaseType_t xreturn;
stk_size /= sizeof(StackType_t);
if (stk_start)
{
pTask = tls_mem_alloc(sizeof(StaticTask_t)); pTask = tls_mem_alloc(sizeof(StaticTask_t));
if(pTask == NULL) if(pTask == NULL)
{ {
return TLS_OS_ERROR; return TLS_OS_ERROR;
} }
if (task)
stk_size /= sizeof(StackType_t);
if (stk_start)
{ {
*task = pTask;
}
xHandle = xTaskCreateStatic(entry, name, stk_size, param, xHandle = xTaskCreateStatic(entry, name, stk_size, param,
configMAX_PRIORITIES - prio, (StackType_t *)stk_start, pTask); configMAX_PRIORITIES - prio, (StackType_t *)stk_start, pTask);
xreturn = (xHandle==NULL) ? pdFALSE:pdTRUE; xreturn = (xHandle==NULL) ? pdFALSE:pdTRUE;
@ -109,19 +112,25 @@ tls_os_status_t tls_os_task_create(tls_os_task_t *task,
else else
{ {
xreturn = xTaskCreate( entry, name, stk_size, param, xreturn = xTaskCreate( entry, name, stk_size, param,
configMAX_PRIORITIES - prio, (TaskHandle_t * const)pTask); configMAX_PRIORITIES - prio, (TaskHandle_t * const)task);
} }
//printf("configMAX_PRIORITIES - prio:%d\n", configMAX_PRIORITIES - prio); //printf("configMAX_PRIORITIES - prio:%d\n", configMAX_PRIORITIES - prio);
if (xreturn == pdTRUE) if (xreturn == pdTRUE)
{ {
*task = pTask;
os_status = TLS_OS_SUCCESS; os_status = TLS_OS_SUCCESS;
} }
else else
{
if (pTask)
{ {
tls_mem_free(pTask); tls_mem_free(pTask);
pTask = NULL; pTask = NULL;
}
if (task)
{
*task = NULL;
}
os_status = TLS_OS_ERROR; os_status = TLS_OS_ERROR;
} }

View File

@ -111,12 +111,27 @@ LIB_EXT = .a
CCFLAGS := -Wall \ CCFLAGS := -Wall \
-DTLS_CONFIG_CPU_XT804=1 \ -DTLS_CONFIG_CPU_XT804=1 \
-DGCC_COMPILE=1 \ -DGCC_COMPILE=1 \
-DNO_PERSISTENCE=1 \
-DUSE_SELECT=1 \
-DHIGH_PERFORMANCE=1 \
-DUSE_MBEDTLS=1 \
-mcpu=ck804ef \ -mcpu=ck804ef \
$(optimization) \ $(optimization) \
-std=gnu99 \ -std=gnu99 \
-c \ -c \
-mhard-float \ -mhard-float \
-Wall \ -fdata-sections \
-ffunction-sections
CXXFLAGS := -Wall \
-DTLS_CONFIG_CPU_XT804=1 \
-DGCC_COMPILE=1 \
-mcpu=ck804ef \
$(optimization) \
-c \
-MMD \
-MP \
-mhard-float \
-fdata-sections \ -fdata-sections \
-ffunction-sections -ffunction-sections

View File

@ -37,8 +37,8 @@ INCLUDES += -I $(TOP_DIR)/src/app/libwebsockets-2.1-stable
INCLUDES += -I $(TOP_DIR)/src/app/fatfs INCLUDES += -I $(TOP_DIR)/src/app/fatfs
INCLUDES += -I $(TOP_DIR)/src/app/mbedtls/include INCLUDES += -I $(TOP_DIR)/src/app/mbedtls/include
INCLUDES += -I $(TOP_DIR)/src/app/mbedtls/ports INCLUDES += -I $(TOP_DIR)/src/app/mbedtls/ports
INCLUDES += -I $(TOP_DIR)/src/network/api2.0.3 INCLUDES += -I $(TOP_DIR)/src/network/api_wm
INCLUDES += -I $(TOP_DIR)/src/network/lwip2.0.3/include INCLUDES += -I $(TOP_DIR)/src/network/lwip2.1.3/include
INCLUDES += -I $(TOP_DIR)/src/os/rtos/include INCLUDES += -I $(TOP_DIR)/src/os/rtos/include
INCLUDES += -I $(TOP_DIR)/src/app/factorycmd INCLUDES += -I $(TOP_DIR)/src/app/factorycmd

View File

@ -1185,612 +1185,588 @@
</VirtualDirectory> </VirtualDirectory>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="network"> <VirtualDirectory Name="network">
<VirtualDirectory Name="api2.0"> <VirtualDirectory Name="lwip2.1.3">
<File Name="../../../../../../../src/network/api2.0.3/tls_netconn.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/api2.0.3/tls_netconn.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/api2.0.3/tls_sockets.c">
<FileOption/>
</File>
</VirtualDirectory>
<VirtualDirectory Name="lwip2.0">
<VirtualDirectory Name="api"> <VirtualDirectory Name="api">
<File Name="../../../../../../../src/network/lwip2.0.3/api/api_lib.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/api_lib.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/api_msg.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/api_msg.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/err.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/err.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/netbuf.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/netbuf.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/netdb.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/netdb.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/netifapi.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/netifapi.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/pppapi.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/if_api.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/sockets.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/sockets.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/api/tcpip.c"> <File Name="../../../../../../../src/network/lwip2.1.3/api/tcpip.c">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="core"> <VirtualDirectory Name="core">
<File Name="../../../../../../../src/network/lwip2.0.3/core/alg.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/alg.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/def.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/altcp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/dns.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/altcp_alloc.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/inet_chksum.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/altcp_tcp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/init.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/def.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ip.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/dns.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.1.3/core/inet_chksum.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.1.3/core/init.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.1.3/core/ip.c">
<FileOption/> <FileOption/>
</File> </File>
<VirtualDirectory Name="ipv4"> <VirtualDirectory Name="ipv4">
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/autoip.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/autoip.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/dhcp.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/dhcp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/etharp.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/etharp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/icmp.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/icmp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/igmp.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/igmp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/ip4.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/ip4.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/ip4_addr.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/ip4_addr.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/ip4_frag.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv4/ip4_frag.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv4/ip_frag.c" ExcludeProjConfig="BuildSet">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="ipv6"> <VirtualDirectory Name="ipv6">
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/dhcp6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/dhcp6.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/ethip6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/ethip6.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/icmp6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/icmp6.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/inet6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/inet6.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/ip6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/ip6.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/ip6_addr.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/ip6_addr.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/ip6_frag.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/ip6_frag.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/mld6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/mld6.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/ipv6/nd6.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/ipv6/nd6.c">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<File Name="../../../../../../../src/network/lwip2.0.3/core/mem.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/mem.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/memp.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/memp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/netif.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/netif.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/pbuf.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/pbuf.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/raw.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/raw.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/stats.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/stats.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/sys.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/sys.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/tcp.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/tcp.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/tcp_in.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/tcp_in.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/tcp_out.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/tcp_out.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/timeouts.c"> <File Name="../../../../../../../src/network/lwip2.1.3/core/timeouts.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/timers.c" ExcludeProjConfig="BuildSet"> <File Name="../../../../../../../src/network/lwip2.1.3/core/udp.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/core/udp.c">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="include"> <VirtualDirectory Name="include">
<VirtualDirectory Name="arch">
<File Name="../../../../../../../src/network/lwip2.0.3/include/arch/cc.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/arch/perf.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/arch/sys_arch.h">
<FileOption/>
</File>
</VirtualDirectory>
<VirtualDirectory Name="lwip"> <VirtualDirectory Name="lwip">
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/alg.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/alg.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/api.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/altcp.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/altcp_tls.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/altcp_tcp.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/api.h">
<FileOption/> <FileOption/>
</File> </File>
<VirtualDirectory Name="apps"> <VirtualDirectory Name="apps">
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/fs.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/fs.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/httpd.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/httpd.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/httpd_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/httpd_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/lwiperf.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/lwiperf.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/mdns.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/mdns.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/mdns_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/mdns_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/mdns_priv.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/mdns_priv.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/mqtt.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/mqtt.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/mqtt_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/mqtt_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/netbiosns.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/netbiosns.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/netbiosns_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/netbiosns_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmpv3.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmpv3.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp_core.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp_core.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp_mib2.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp_mib2.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp_scalar.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp_scalar.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp_table.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp_table.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/snmp_threadsync.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/snmp_threadsync.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/sntp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/sntp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/sntp_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/sntp_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/tftp_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/tftp_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/apps/tftp_server.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/apps/tftp_server.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/arch.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/arch.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/autoip.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/autoip.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/debug.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/debug.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/def.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/def.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/dhcp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/dhcp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/dhcp6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/dhcp6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/dns.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/dns.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/err.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/err.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/errno.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/errno.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/etharp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/etharp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ethip6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ethip6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/icmp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/icmp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/icmp6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/icmp6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/igmp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/igmp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/inet.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/inet.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/inet_chksum.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/inet_chksum.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/init.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/init.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip4.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip4.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip4_addr.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip4_addr.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip4_frag.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip4_frag.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip6_addr.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip6_addr.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip6_frag.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip6_frag.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip_addr.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/ip_addr.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/ip_frag.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/tcpbase.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/lwipopts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/mem.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/mem.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/memp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/memp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/mld6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/mld6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/nd6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/nd6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/netbuf.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/netbuf.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/netdb.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/netdb.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/netif.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/netif.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/netifapi.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/netifapi.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/opt.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/opt.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/pbuf.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/pbuf.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/if_api.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/pppapi.h">
<FileOption/> <FileOption/>
</File> </File>
<VirtualDirectory Name="priv"> <VirtualDirectory Name="priv">
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/priv/api_msg.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/priv/api_msg.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/priv/memp_priv.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/priv/memp_priv.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/priv/memp_std.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/priv/memp_std.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/priv/nd6_priv.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/priv/nd6_priv.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/priv/tcpip_priv.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/priv/tcpip_priv.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/priv/tcp_priv.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/priv/tcp_priv.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="prot"> <VirtualDirectory Name="prot">
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/autoip.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/autoip.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/dhcp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/dhcp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/dns.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/dns.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/etharp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/etharp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/ethernet.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/ethernet.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/icmp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/icmp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/icmp6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/icmp6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/igmp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/igmp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/ip.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/ip.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/ip4.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/ip4.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/ip6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/ip6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/mld6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/mld6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/nd6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/nd6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/tcp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/tcp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/prot/udp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/prot/udp.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/raw.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/raw.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/sio.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/sio.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/snmp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/snmp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/sockets.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/sockets.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/stats.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/stats.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/sys.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/sys.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/tcp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/tcp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/tcpip.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/tcpip.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/timeouts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/timeouts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/timers.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/timers.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/lwip/udp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/lwip/udp.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="netif"> <VirtualDirectory Name="netif">
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/etharp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/etharp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ethernet.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ethernet.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ethernetif.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ethernetif.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/lowpan6.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/lowpan6.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/lowpan6_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/lowpan6_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<VirtualDirectory Name="ppp"> <VirtualDirectory Name="ppp">
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ccp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ccp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/chap-md5.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/chap-md5.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/chap-new.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/chap-new.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/chap_ms.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/chap_ms.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/eap.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/eap.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ecp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ecp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/eui64.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/eui64.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/fsm.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/fsm.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ipcp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ipcp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ipv6cp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ipv6cp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/lcp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/lcp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/magic.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/magic.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/mppe.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/mppe.h">
<FileOption/> <FileOption/>
</File> </File>
<VirtualDirectory Name="polarssl"> <VirtualDirectory Name="polarssl">
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/polarssl/arc4.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/polarssl/arc4.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/polarssl/des.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/polarssl/des.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/polarssl/md4.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/polarssl/md4.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/polarssl/md5.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/polarssl/md5.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/polarssl/sha1.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/polarssl/sha1.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ppp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ppp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/pppapi.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/pppapi.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/pppcrypt.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/pppcrypt.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/pppdebug.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/pppdebug.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/pppoe.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/pppoe.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/pppol2tp.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/pppol2tp.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/pppos.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/pppos.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ppp_impl.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ppp_impl.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/ppp_opts.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/ppp_opts.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/upap.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/upap.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/ppp/vj.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/ppp/vj.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<File Name="../../../../../../../src/network/lwip2.0.3/include/netif/slipif.h"> <File Name="../../../../../../../src/network/lwip2.1.3/include/netif/slipif.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="posix">
<File Name="../../../../../../../src/network/lwip2.0.3/include/posix/errno.h">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/include/posix/netdb.h">
<FileOption/>
</File>
<VirtualDirectory Name="sys">
<File Name="../../../../../../../src/network/lwip2.0.3/include/posix/sys/socket.h">
<FileOption/>
</File>
</VirtualDirectory>
</VirtualDirectory>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="netif"> <VirtualDirectory Name="netif">
<File Name="../../../../../../../src/network/lwip2.0.3/netif/ethernet.c"> <File Name="../../../../../../../src/network/lwip2.1.3/netif/ethernet.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/netif/ethernetif.c"> <File Name="../../../../../../../src/network/lwip2.1.3/netif/ethernetif.c" ExcludeProjConfig="">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../src/network/lwip2.0.3/netif/lowpan6.c" ExcludeProjConfig="BuildSet"> <File Name="../../../../../../../src/network/lwip2.1.3/netif/wm_ethernet.c" ExcludeProjConfig="">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/netif/slipif.c" ExcludeProjConfig="BuildSet">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/lwip2.0.3/netif/wm_ethernet.c">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
<File Name="../../../../../../../src/network/lwip2.0.3/sys_arch.c"> <File Name="../../../../../../../src/network/lwip2.1.3/sys_arch.c" ExcludeProjConfig="">
<FileOption/>
</File>
</VirtualDirectory>
<VirtualDirectory Name="api_wm">
<File Name="../../../../../../../src/network/api_wm/tls_netconn.c">
<FileOption/>
</File>
<File Name="../../../../../../../src/network/api_wm/tls_netconn.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
@ -3616,6 +3592,9 @@
<File Name="../../../../../../../platform/drivers/adc/wm_polyfit.c"> <File Name="../../../../../../../platform/drivers/adc/wm_polyfit.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../platform/drivers/adc/wm_adc_cal.c">
<FileOption/>
</File>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="cpu"> <VirtualDirectory Name="cpu">
<File Name="../../../../../../../platform/drivers/cpu/wm_cpu.c"> <File Name="../../../../../../../platform/drivers/cpu/wm_cpu.c">
@ -3953,13 +3932,13 @@
<File Name="../../../../../../../include/net/wm_socket.h"> <File Name="../../../../../../../include/net/wm_socket.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../include/net/wm_socket2.0.3.h"> <File Name="../../../../../../../include/net/wm_socket2.1.3.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../include/net/wm_sockets.h"> <File Name="../../../../../../../include/net/wm_sockets.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../include/net/wm_sockets2.0.3.h"> <File Name="../../../../../../../include/net/wm_sockets2.1.3.h">
<FileOption/> <FileOption/>
</File> </File>
</VirtualDirectory> </VirtualDirectory>
@ -3982,7 +3961,7 @@
<File Name="../../../../../../../include/app/wm_netif.h"> <File Name="../../../../../../../include/app/wm_netif.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../include/app/wm_netif2.0.3.h"> <File Name="../../../../../../../include/app/wm_netif2.1.3.h">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../include/app/wm_ntp.h"> <File Name="../../../../../../../include/app/wm_ntp.h">
@ -4151,15 +4130,15 @@
<File Name="../../../../../../../demo/wm_slave_spi_demo.c"> <File Name="../../../../../../../demo/wm_slave_spi_demo.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../demo/wm_touchsensor_demo.c">
<FileOption/>
</File>
<File Name="../../../../../../../demo/wm_avoid_copy_demo.c"> <File Name="../../../../../../../demo/wm_avoid_copy_demo.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../demo/wm_lcd_demo.c"> <File Name="../../../../../../../demo/wm_lcd_demo.c">
<FileOption/> <FileOption/>
</File> </File>
<File Name="../../../../../../../demo/wm_touchsensor_demo.c">
<FileOption/>
</File>
</VirtualDirectory> </VirtualDirectory>
<DebugSessions> <DebugSessions>
<watchExpressions/> <watchExpressions/>
@ -4269,11 +4248,11 @@
</AfterMake> </AfterMake>
</User> </User>
<Compiler> <Compiler>
<Define>GCC_COMPILE=1;TLS_CONFIG_CPU_XT804=1</Define> <Define>GCC_COMPILE=1;TLS_CONFIG_CPU_XT804=1;NO_PERSISTENCE=1;USE_SELECT=1;HIGH_PERFORMANCE=1;USE_MBEDTLS=1</Define>
<Undefine/> <Undefine/>
<Optim>Optimize more (-O2)</Optim> <Optim>Optimize more (-O2)</Optim>
<DebugLevel>Maximum (-g3)</DebugLevel> <DebugLevel>Maximum (-g3)</DebugLevel>
<IncludePath>$(CDKPath)/CSKY/MinGW/csky-abiv2-elf-toolchain/csky-elfabiv2/include;$(ProjectPath);$(ProjectPath)/../../../../../../../demo;$(ProjectPath)/../../../../../../../include;$(ProjectPath)/../../../../../../../include/app;$(ProjectPath)/../../../../../../../include/arch/xt804;$(ProjectPath)/../../../../../../../include/arch/xt804/csi_core;$(ProjectPath)/../../../../../../../include/arch/xt804/csi_dsp;$(ProjectPath)/../../../../../../../include/bt;$(ProjectPath)/../../../../../../../include/driver;$(ProjectPath)/../../../../../../../include/net;$(ProjectPath)/../../../../../../../include/os;$(ProjectPath)/../../../../../../../include/platform;$(ProjectPath)/../../../../../../../include/wifi;$(ProjectPath)/../../../../../../../platform/common/params;$(ProjectPath)/../../../../../../../platform/drivers/spi;$(ProjectPath)/../../../../../../../platform/inc;$(ProjectPath)/../../../../../../../platform/sys;$(ProjectPath)/../../../../../../../src/app;$(ProjectPath)/../../../../../../../src/app/btapp;$(ProjectPath)/../../../../../../../src/app/cJSON;$(ProjectPath)/../../../../../../../src/app/dhcpserver;$(ProjectPath)/../../../../../../../src/app/dnsserver;$(ProjectPath)/../../../../../../../src/app/fatfs;$(ProjectPath)/../../../../../../../src/app/httpclient;$(ProjectPath)/../../../../../../../src/app/iperf;$(ProjectPath)/../../../../../../../src/app/libcoap/include;$(ProjectPath)/../../../../../../../src/app/libwebsockets-2.1-stable;$(ProjectPath)/../../../../../../../src/app/mDNS/mDNSCore;$(ProjectPath)/../../../../../../../src/app/mDNS/mDNSPosix;$(ProjectPath)/../../../../../../../src/app/mbedtls/include;$(ProjectPath)/../../../../../../../src/app/mbedtls/include/mbedtls;$(ProjectPath)/../../../../../../../src/app/mbedtls/ports;$(ProjectPath)/../../../../../../../src/app/mqtt;$(ProjectPath)/../../../../../../../src/app/oneshotconfig;$(ProjectPath)/../../../../../../../src/app/ota;$(ProjectPath)/../../../../../../../src/app/ping;$(ProjectPath)/../../../../../../../src/app/polarssl/include;$(ProjectPath)/../../../../../../../src/app/web;$(ProjectPath)/../../../../../../../src/app/wm_atcmd;$(ProjectPath)/../../../../../../../src/bt/host/;$(ProjectPath)/../../../../../../../src/bt/host/bta/include;$(ProjectPath)/../../../../../../../src/bt/host/btcore/include;$(ProjectPath)/../../../../../../../src/bt/host/btif/include;$(ProjectPath)/../../../../../../../src/bt/host/embdrv/sbc/decoder/include;$(ProjectPath)/../../../../../../../src/bt/host/embdrv/sbc/encoder/include;$(ProjectPath)/../../../../../../../src/bt/host/gki/common;$(ProjectPath)/../../../../../../../src/bt/host/gki/wm;$(ProjectPath)/../../../../../../../src/bt/host/hci/include;$(ProjectPath)/../../../../../../../src/bt/host/include;$(ProjectPath)/../../../../../../../src/bt/host/main;$(ProjectPath)/../../../../../../../src/bt/host/osi/include;$(ProjectPath)/../../../../../../../src/bt/host/osi/include/socket_utils;$(ProjectPath)/../../../../../../../src/bt/host/stack/;$(ProjectPath)/../../../../../../../src/bt/host/stack/bnep;$(ProjectPath)/../../../../../../../src/bt/host/stack/include;$(ProjectPath)/../../../../../../../src/bt/host/stack/smp;$(ProjectPath)/../../../../../../../src/bt/host/udrv/include;$(ProjectPath)/../../../../../../../src/bt/host/udrv/ulinux;$(ProjectPath)/../../../../../../../src/bt/host/vnd/ble;$(ProjectPath)/../../../../../../../src/bt/host/vnd/include;$(ProjectPath)/../../../../../../../src/network/api2.0.3;$(ProjectPath)/../../../../../../../src/network/lwip2.0.3/apps/httpd;$(ProjectPath)/../../../../../../../src/network/lwip2.0.3/apps/snmp;$(ProjectPath)/../../../../../../../src/network/lwip2.0.3/include;$(ProjectPath)/../../../../../../../src/network/lwip2.0.3/include/arch;$(ProjectPath)/../../../../../../../src/network/lwip2.0.3/include/lwip;$(ProjectPath)/../../../../../../../src/os/rtos/include</IncludePath> <IncludePath>$(CDKPath)/CSKY/MinGW/csky-abiv2-elf-toolchain/csky-elfabiv2/include;$(ProjectPath);$(ProjectPath)/../../../../../../../demo;$(ProjectPath)/../../../../../../../include;$(ProjectPath)/../../../../../../../include/app;$(ProjectPath)/../../../../../../../include/arch/xt804;$(ProjectPath)/../../../../../../../include/arch/xt804/csi_core;$(ProjectPath)/../../../../../../../include/arch/xt804/csi_dsp;$(ProjectPath)/../../../../../../../include/bt;$(ProjectPath)/../../../../../../../include/driver;$(ProjectPath)/../../../../../../../include/net;$(ProjectPath)/../../../../../../../include/os;$(ProjectPath)/../../../../../../../include/platform;$(ProjectPath)/../../../../../../../include/wifi;$(ProjectPath)/../../../../../../../platform/common/params;$(ProjectPath)/../../../../../../../platform/drivers/spi;$(ProjectPath)/../../../../../../../platform/inc;$(ProjectPath)/../../../../../../../platform/sys;$(ProjectPath)/../../../../../../../src/app;$(ProjectPath)/../../../../../../../src/app/btapp;$(ProjectPath)/../../../../../../../src/app/cJSON;$(ProjectPath)/../../../../../../../src/app/dhcpserver;$(ProjectPath)/../../../../../../../src/app/dnsserver;$(ProjectPath)/../../../../../../../src/app/fatfs;$(ProjectPath)/../../../../../../../src/app/httpclient;$(ProjectPath)/../../../../../../../src/app/iperf;$(ProjectPath)/../../../../../../../src/app/libcoap/include;$(ProjectPath)/../../../../../../../src/app/libwebsockets-2.1-stable;$(ProjectPath)/../../../../../../../src/app/mDNS/mDNSCore;$(ProjectPath)/../../../../../../../src/app/mDNS/mDNSPosix;$(ProjectPath)/../../../../../../../src/app/mbedtls/include;$(ProjectPath)/../../../../../../../src/app/mbedtls/include/mbedtls;$(ProjectPath)/../../../../../../../src/app/mbedtls/ports;$(ProjectPath)/../../../../../../../src/app/mqtt;$(ProjectPath)/../../../../../../../src/app/oneshotconfig;$(ProjectPath)/../../../../../../../src/app/ota;$(ProjectPath)/../../../../../../../src/app/ping;$(ProjectPath)/../../../../../../../src/app/polarssl/include;$(ProjectPath)/../../../../../../../src/app/web;$(ProjectPath)/../../../../../../../src/app/wm_atcmd;$(ProjectPath)/../../../../../../../src/bt/host/;$(ProjectPath)/../../../../../../../src/bt/host/bta/include;$(ProjectPath)/../../../../../../../src/bt/host/btcore/include;$(ProjectPath)/../../../../../../../src/bt/host/btif/include;$(ProjectPath)/../../../../../../../src/bt/host/embdrv/sbc/decoder/include;$(ProjectPath)/../../../../../../../src/bt/host/embdrv/sbc/encoder/include;$(ProjectPath)/../../../../../../../src/bt/host/gki/common;$(ProjectPath)/../../../../../../../src/bt/host/gki/wm;$(ProjectPath)/../../../../../../../src/bt/host/hci/include;$(ProjectPath)/../../../../../../../src/bt/host/include;$(ProjectPath)/../../../../../../../src/bt/host/main;$(ProjectPath)/../../../../../../../src/bt/host/osi/include;$(ProjectPath)/../../../../../../../src/bt/host/osi/include/socket_utils;$(ProjectPath)/../../../../../../../src/bt/host/stack/;$(ProjectPath)/../../../../../../../src/bt/host/stack/bnep;$(ProjectPath)/../../../../../../../src/bt/host/stack/include;$(ProjectPath)/../../../../../../../src/bt/host/stack/smp;$(ProjectPath)/../../../../../../../src/bt/host/udrv/include;$(ProjectPath)/../../../../../../../src/bt/host/udrv/ulinux;$(ProjectPath)/../../../../../../../src/bt/host/vnd/ble;$(ProjectPath)/../../../../../../../src/bt/host/vnd/include;$(ProjectPath)/../../../../../../../src/network/api_wm;$(ProjectPath)/../../../../../../../src/network/lwip2.1.3/apps/httpd;$(ProjectPath)/../../../../../../../src/network/lwip2.1.3/apps/snmp;$(ProjectPath)/../../../../../../../src/network/lwip2.1.3/include;$(ProjectPath)/../../../../../../../src/os/rtos/include;$(ProjectPath)/../../../../../../../src/app/POSIX/include;$(ProjectPath)/../../../../../../../src/app/POSIX/FreeRTOS-Plus-POSIX/include;$(ProjectPath)/../../../../../../../src/app/POSIX/FreeRTOS-Plus-POSIX/include/portable</IncludePath>
<OtherFlags>-fdata-sections -c</OtherFlags> <OtherFlags>-fdata-sections -c</OtherFlags>
<Verbose>no</Verbose> <Verbose>no</Verbose>
<Ansi>no</Ansi> <Ansi>no</Ansi>

View File

@ -18,14 +18,16 @@ ASRCS ?= $(wildcard *.S)
subdir_path := $(subst $(abspath $(TOP_DIR))/,,$(shell pwd)) subdir_path := $(subst $(abspath $(TOP_DIR))/,,$(shell pwd))
CURRENT_DIR := $(notdir $(shell pwd))
SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile))) SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile)))
OBJS := $(CSRCS:%.c=$(OBJODIR)/$(subdir_path)/%.o) \ OBJS := $(CSRCS:%.c=$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o) \
$(ASRCS:%.S=$(OBJODIR)/$(subdir_path)/%.o) \ $(ASRCS:%.S=$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o) \
$(CPPSRCS:%.cpp=$(OBJODIR)/$(subdir_path)/%.o) $(CPPSRCS:%.cpp=$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o)
OBJS-DEPS := $(patsubst %.c, $(OBJODIR)/$(subdir_path)/%.o.d, $(CSRCS)) OBJS-DEPS := $(patsubst %.c, $(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o.d, $(CSRCS))
OBJS-CPPDEPS := $(patsubst %.cpp, $(OBJODIR)/$(subdir_path)/%.o.d, $(CPPSRCS)) OBJS-CPPDEPS := $(patsubst %.cpp, $(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o.d, $(CPPSRCS))
OLIBS := $(GEN_LIBS:%=$(LIBODIR)/%) OLIBS := $(GEN_LIBS:%=$(LIBODIR)/%)
@ -197,15 +199,15 @@ endif
endif endif
endif endif
$(OBJODIR)/$(subdir_path)/%.o: %.c $(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o: %.c
@mkdir -p $(OBJODIR)/$(subdir_path) @mkdir -p $(OBJODIR)/$(subdir_path)
$(CC) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) $(INCLUDES) $(CMACRO) -c "$<" -o "$@" -MMD -MD -MF "$(@:$(OBJODIR)/$(subdir_path)/%.o=$(OBJODIR)/$(subdir_path)/%.o.d)" -MT "$(@)" $(CC) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) $(INCLUDES) $(CMACRO) -c "$<" -o "$@" -MMD -MD -MF "$(@:$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o=$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o.d)" -MT "$(@)"
$(OBJODIR)/$(subdir_path)/%.o: %.cpp $(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o: %.cpp
@mkdir -p $(OBJODIR)/$(subdir_path) @mkdir -p $(OBJODIR)/$(subdir_path)
$(CPP) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) $(INCLUDES) $(CMACRO) -c "$<" -o "$@" -MMD -MD -MF "$(@:$(OBJODIR)/$(subdir_path)/%.o=$(OBJODIR)/$(subdir_path)/%.o.d)" -MT "$(@)" $(CPP) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CXXFLAGS)) $(COPTS_$(*F)) $(INCLUDES) $(CMACRO) -c "$<" -o "$@" -MMD -MD -MF "$(@:$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o=$(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o.d)" -MT "$(@)"
$(OBJODIR)/$(subdir_path)/%.o: %.S $(OBJODIR)/$(subdir_path)/$(CURRENT_DIR)_%.o: %.S
@mkdir -p $(OBJODIR)/$(subdir_path) @mkdir -p $(OBJODIR)/$(subdir_path)
$(ASM) $(ASMFLAGS) $(INCLUDES) $(CMACRO) -c "$<" -o "$@" $(ASM) $(ASMFLAGS) $(INCLUDES) $(CMACRO) -c "$<" -o "$@"