Compare commits
No commits in common. "b0f7adb8b592094147606a22851b424b1ddbd4da" and "020f7e53b618e45920b3ff992c0eade80822c350" have entirely different histories.
b0f7adb8b5
...
020f7e53b6
@ -13,6 +13,7 @@ static uint8_t _vibration_motor_timer_id = WM_TIMER_ID_INVALID;
|
||||
static void vibration_motor_timer_irq_cb(void *p)
|
||||
{
|
||||
(void)p;
|
||||
//tls_gpio_write(VIBRATION_MOTOR_ENABLE, 0);
|
||||
tls_pwm_stop(VIBRATION_MOTOR_PWM_CHANNEL);
|
||||
tls_gpio_cfg(VIBRATION_MOTOR_ENABLE, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_FLOATING);
|
||||
tls_gpio_write(VIBRATION_MOTOR_ENABLE, 0);
|
||||
@ -156,6 +156,12 @@ void gfx_task(void *param)
|
||||
|
||||
lv_scr_load(watchFace.display);
|
||||
|
||||
/* Let's init the watch peripherals driver (vibration motor + battery voltage sense) */
|
||||
watch_peripherals_init(27);
|
||||
/* Make the first battery voltage reading here */
|
||||
uint16_t battery_voltage = watch_peripherals_get_battery_voltage(Battery_Unit_mV);
|
||||
battery_percentage = battery_voltage_to_percentage(battery_voltage);
|
||||
|
||||
/* Let's init the I2C interface */
|
||||
i2c_init(I2C_SDA, I2C_SCL, 100000);
|
||||
|
||||
@ -259,13 +265,6 @@ void gfx_task(void *param)
|
||||
else
|
||||
APP_LOG_INFO("BMA456 set pin conf failed");
|
||||
|
||||
/* Let's init the watch peripherals driver (vibration motor + battery voltage sense) */
|
||||
watch_peripherals_init(27);
|
||||
/* Make the first battery voltage reading here */
|
||||
uint16_t battery_voltage = watch_peripherals_get_battery_voltage(Battery_Unit_mV);
|
||||
battery_percentage = battery_voltage_to_percentage(battery_voltage);
|
||||
watch_face_set_battery_indicator(&watchFace, battery_percentage);
|
||||
|
||||
/* Once we are done with the initializing steps we
|
||||
don't forget to turn the backlight on ! */
|
||||
setBrightness(persistency_get_settings()->display.brightness);
|
||||
@ -20,7 +20,6 @@
|
||||
EXTERN FUNC
|
||||
*****************************************************************/
|
||||
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_server(void *, ...);
|
||||
extern int demo_oneshot(void *, ...);
|
||||
@ -65,8 +64,6 @@ extern int CreateMCastDemoTask(void *, ...);
|
||||
extern int adc_input_voltage_demo(void *, ...);
|
||||
extern int adc_chip_temperature_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 demo_wps_pbc(void *, ...);
|
||||
@ -81,8 +78,7 @@ extern int tls_i2s_io_init(void *, ...);
|
||||
extern int tls_i2s_demo(void *, ...);
|
||||
extern int i2c_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 mqtt_demo(void *, ...);
|
||||
extern int fatfs_test(void *, ...);
|
||||
@ -151,8 +147,8 @@ struct demo_console_info_t
|
||||
char *info;
|
||||
};
|
||||
|
||||
#define DEMO_CONSOLE_CMD 1 //被解析成cmd
|
||||
#define DEMO_CONSOLE_SHORT_CMD 2 //CMD的一部分,没有解析完
|
||||
#define DEMO_CONSOLE_CMD 1 //被解析成cmd
|
||||
#define DEMO_CONSOLE_SHORT_CMD 2 //CMD的一部分,没有解析完
|
||||
#define DEMO_CONSOLE_WRONG_CMD 3
|
||||
|
||||
#define DEMO_BUF_SIZE TLS_UART_RX_BUF_SIZE
|
||||
@ -166,7 +162,6 @@ struct demo_console_info_t console_tbl[] =
|
||||
//To Do When Add New Demo
|
||||
#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_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-socketcfg", demo_socket_config, 0, 0, "Test socket configuration"},
|
||||
{"t-webcfg", demo_webserver_config, 0, 0, "Test web server configuration"},
|
||||
@ -192,8 +187,6 @@ struct demo_console_info_t console_tbl[] =
|
||||
|
||||
#if DEMO_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
|
||||
|
||||
/************************************************************************/
|
||||
@ -262,8 +255,6 @@ struct demo_console_info_t console_tbl[] =
|
||||
{"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-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
|
||||
|
||||
#if DEMO_7816
|
||||
@ -326,7 +317,7 @@ struct demo_console_info_t console_tbl[] =
|
||||
#endif
|
||||
|
||||
#if DEMO_MQTT
|
||||
{"t-mqtt", mqtt_demo, 0x1, 1, "Test mqtt: 0-TCP; 1-TLS; 2-WS; 3-WSS"},
|
||||
{"t-mqtt", mqtt_demo, 0x0, 0, "Test mqtt"},
|
||||
#endif
|
||||
|
||||
#if DEMO_FATFS
|
||||
@ -372,11 +363,11 @@ struct demo_console_info_t console_tbl[] =
|
||||
{"t-avoidcopy", avoid_copy_entry, 0x0, 0, "Test Avoid Copy function"},
|
||||
#endif
|
||||
|
||||
//控制台上显示的最后一个命令,如果要让命令显示在控制台上,需要放在该行的上面
|
||||
//控制台上显示的最后一个命令,如果要让命令显示在控制台上,需要放在该行的上面
|
||||
{"demohelp", demo_console_show_help, 0, 0, "Display Help information"},
|
||||
//下面的命令用于内部测试,不显示在控制台上
|
||||
//下面的命令用于内部测试,不显示在控制台上
|
||||
{"reset", demo_sys_reset, 0, 0, "Reset System"},
|
||||
//最后一个命令,检索命令时判断结束标识
|
||||
//最后一个命令,检索命令时判断结束标识
|
||||
{"lastcmd", NULL, 0, 0, "Table Terminal Flag; MUST BE THE LAST ONE"}
|
||||
};
|
||||
|
||||
@ -223,14 +223,11 @@ int demo_cmd_execute(Demo_Console *sys)
|
||||
}
|
||||
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';
|
||||
}
|
||||
else if ((str_r < str_n) && (str_n > strfirst))
|
||||
{
|
||||
strfirst[str_r - strfirst] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*parser()*/
|
||||
@ -245,11 +242,6 @@ int demo_cmd_execute(Demo_Console *sys)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(!pparam_begin)
|
||||
{
|
||||
printf("\ndemo cmd short\n");
|
||||
return DEMO_CONSOLE_SHORT_CMD;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -269,7 +261,7 @@ int demo_cmd_execute(Demo_Console *sys)
|
||||
if (!pparam_begin && !pparam_end)
|
||||
{
|
||||
/*No Parameter,use default parameter to execute*/
|
||||
printf("\n[CMD]%s\n", console_tbl[i].cmd);
|
||||
printf("[CMD]%s", console_tbl[i].cmd);
|
||||
for (j = 0; j < console_tbl[i].param_cnt; j++)
|
||||
{
|
||||
if (!((console_tbl[i].type >> j) & 0x1))
|
||||
@ -371,8 +363,6 @@ 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);
|
||||
if(WM_FAILED == ret)
|
||||
{
|
||||
@ -385,7 +375,6 @@ int demo_cmd_execute(Demo_Console *sys)
|
||||
}
|
||||
else if (pparam_begin && !pparam_end)
|
||||
{
|
||||
printf("\ndemo cmd short\n");
|
||||
return DEMO_CONSOLE_SHORT_CMD;
|
||||
}
|
||||
else
|
||||
@ -401,7 +390,6 @@ int demo_cmd_execute(Demo_Console *sys)
|
||||
{
|
||||
/*wrong cmd parameter,discard this cmd*/
|
||||
//demo_console_show_help(NULL);
|
||||
printf("\nwrong cmd\n");
|
||||
return DEMO_CONSOLE_WRONG_CMD;
|
||||
}
|
||||
}
|
||||
@ -419,7 +407,6 @@ void demo_console_task(void *sdata)
|
||||
demo_console_show_help(NULL);
|
||||
demo_console_malloc();
|
||||
gstConsole.rptr = 0;
|
||||
gstConsole.rx_data_len = DEMO_CONSOLE_BUF_SIZE;
|
||||
tls_uart_set_baud_rate(TLS_UART_0, 115200);
|
||||
tls_uart_rx_callback_register(TLS_UART_0, demo_console_rx, NULL);
|
||||
|
||||
@ -429,36 +416,22 @@ void demo_console_task(void *sdata)
|
||||
switch((u32)msg)
|
||||
{
|
||||
case 1:
|
||||
while(1)
|
||||
{
|
||||
ret = tls_uart_read(TLS_UART_0, gstConsole.rx_buf + gstConsole.rptr, gstConsole.rx_data_len);
|
||||
if(ret <= 0)
|
||||
break;
|
||||
gstConsole.rx_data_len -= ret;
|
||||
gstConsole.rptr += ret;
|
||||
if(gstConsole.rx_data_len <= 0)
|
||||
break;
|
||||
tls_os_time_delay(20);
|
||||
}
|
||||
if(gstConsole.rptr == 0)
|
||||
ret = tls_uart_read(TLS_UART_0, gstConsole.rx_buf + gstConsole.rptr, gstConsole.rx_data_len);
|
||||
if(ret <= 0)
|
||||
break;
|
||||
gstConsole.rx_data_len -= ret;
|
||||
gstConsole.rptr += ret;
|
||||
ret = demo_cmd_execute(&gstConsole); //parse command and execute if needed
|
||||
if(DEMO_CONSOLE_CMD == ret)
|
||||
if((DEMO_CONSOLE_CMD == ret) || (DEMO_CONSOLE_WRONG_CMD == ret))
|
||||
{
|
||||
/*modify*/
|
||||
//printf("Demo cmd is finished\r\n");
|
||||
}
|
||||
else if(DEMO_CONSOLE_WRONG_CMD == ret)
|
||||
{
|
||||
//printf("Demo cmd is wrong\r\n");
|
||||
memset(gstConsole.rx_buf, 0, DEMO_CONSOLE_BUF_SIZE); /*After command finished transfering, clear buffer*/
|
||||
gstConsole.rptr = 0;
|
||||
}
|
||||
else if(DEMO_CONSOLE_SHORT_CMD == ret)
|
||||
{
|
||||
//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)
|
||||
gstConsole.MsgNum --;
|
||||
85
src/W800 SDK v1.00.08/demo/wm_adc_demo.c
Normal file
85
src/W800 SDK v1.00.08/demo/wm_adc_demo.c
Normal file
@ -0,0 +1,85 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name : wm_adc_demo.c
|
||||
*
|
||||
* Description: adc demo function
|
||||
*
|
||||
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author : dave
|
||||
*
|
||||
* Date : 2014-8-18
|
||||
*****************************************************************************/
|
||||
#include "wm_include.h"
|
||||
#include "wm_adc.h"
|
||||
#include "wm_gpio_afsel.h"
|
||||
|
||||
|
||||
#if DEMO_ADC
|
||||
|
||||
int adc_input_voltage_demo(u8 chan)
|
||||
{
|
||||
int voltage =0;
|
||||
|
||||
if (chan <= 1)
|
||||
{
|
||||
wm_adc_config(chan);
|
||||
}
|
||||
else if (chan == 8 )
|
||||
{
|
||||
wm_adc_config(0);
|
||||
wm_adc_config(1);
|
||||
}
|
||||
voltage = adc_get_inputVolt(chan);
|
||||
if (voltage < 0)
|
||||
{
|
||||
voltage = 0 - voltage;
|
||||
printf("chan:%d, -%d(mV) or -%d.%03d(V)\r\n", chan, voltage, voltage/1000, voltage%1000);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("chan:%d, %d(mV) or %d.%03d(V)\r\n", chan, voltage, voltage/1000, voltage%1000);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int adc_chip_temperature_demo(void)
|
||||
{
|
||||
char temperature[8] = {0};
|
||||
int temp;
|
||||
|
||||
temp = adc_temp();
|
||||
if (temp < 0)
|
||||
{
|
||||
temp = 0 - temp;
|
||||
sprintf(temperature, "-%d.%03d", temp/1000, temp%1000);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(temperature, "%d.%03d", temp/1000, temp%1000);
|
||||
}
|
||||
printf("tem: %s\r\n", temperature);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int adc_power_voltage_demo(void)
|
||||
{
|
||||
int voltage =0;
|
||||
|
||||
voltage = adc_get_interVolt();
|
||||
printf("Power voltage:%d(mV) or %d.%03d(V)\r\n",voltage, voltage/1000, voltage%1000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
#include "wm_include.h"
|
||||
#include "wm_demo.h"
|
||||
#include "wm_wifi_oneshot.h"
|
||||
#include "wm_param.h"
|
||||
|
||||
#if DEMO_CONNECT_NET
|
||||
static void con_net_status_changed_event(u8 status )
|
||||
@ -114,63 +113,5 @@ int demo_connect_net(char *ssid, char *pwd)
|
||||
|
||||
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
|
||||
|
||||
@ -32,12 +32,6 @@ u32 http_snd_req(HTTPParameters ClientParams, HTTP_VERB verb, char *pSndData, u8
|
||||
nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
if((nRetCode = HTTPClientAddRequestHeaders(pHTTP,"media type", "application/json", 1))!= HTTP_CLIENT_SUCCESS)
|
||||
{
|
||||
break;
|
||||
}
|
||||
*/
|
||||
// Set the Verb
|
||||
nRetCode = HTTPClientSetVerb(pHTTP, verb);
|
||||
if(nRetCode != HTTP_CLIENT_SUCCESS)
|
||||
@ -20,7 +20,7 @@
|
||||
#include "wm_sockets.h"
|
||||
#include "lwip/inet.h"
|
||||
|
||||
#include "wm_sockets.h"
|
||||
#include "wm_sockets2.0.3.h"
|
||||
#include "HTTPClientWrapper.h"
|
||||
|
||||
#if DEMO_HTTPS
|
||||
399
src/W800 SDK v1.00.08/demo/wm_mqtt_demo.c
Normal file
399
src/W800 SDK v1.00.08/demo/wm_mqtt_demo.c
Normal file
@ -0,0 +1,399 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name : wm_mqtt_demo.c
|
||||
*
|
||||
* Description: mqtt demo function
|
||||
*
|
||||
* Copyright (c) 2015 Winner Micro Electronic Design Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author : LiLimin
|
||||
*
|
||||
* Date : 2019-3-24
|
||||
*****************************************************************************/
|
||||
#include <string.h>
|
||||
#include "wm_include.h"
|
||||
#include "wm_netif.h"
|
||||
#include "wm_demo.h"
|
||||
#include "tls_common.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "wm_sockets.h"
|
||||
#include "lwip/inet.h"
|
||||
#include "wm_sockets2.0.3.h"
|
||||
#include "libemqtt.h"
|
||||
|
||||
#if DEMO_MQTT
|
||||
|
||||
#define MQTT_DEMO_TASK_PRIO 39
|
||||
#define MQTT_DEMO_TASK_SIZE 512
|
||||
#define MQTT_DEMO_QUEUE_SIZE 4
|
||||
|
||||
#define MQTT_DEMO_RECV_BUF_LEN_MAX 1024
|
||||
|
||||
#define MQTT_DEMO_CMD_START 0x1
|
||||
#define MQTT_DEMO_CMD_HEART 0x2
|
||||
#define MQTT_DEMO_CMD_LOOP 0x3
|
||||
|
||||
#define MQTT_DEMO_READ_TIMEOUT (-1000)
|
||||
|
||||
#define MQTT_DEMO_READ_TIME_SEC 1
|
||||
#define MQTT_DEMO_READ_TIME_US 0
|
||||
|
||||
#define MQTT_DEMO_CLIENT_ID "wm_mqtt_client"
|
||||
#define MQTT_DEMO_TX_PUB_TOPIC "winnermicro/mqtt_tx_demo"
|
||||
#define MQTT_DEMO_RX_PUB_TOPIC "winnermicro/mqtt_rx_demo"
|
||||
|
||||
#define MQTT_DEMO_SERVER_ADDR "mqtt.yichen.link"
|
||||
#define MQTT_DEMO_SERVER_PORT 3883
|
||||
|
||||
static bool mqtt_demo_inited = FALSE;
|
||||
static OS_STK mqtt_demo_task_stk[MQTT_DEMO_TASK_SIZE];
|
||||
static tls_os_queue_t *mqtt_demo_task_queue = NULL;
|
||||
static tls_os_timer_t *mqtt_demo_heartbeat_timer = NULL;
|
||||
|
||||
static int mqtt_demo_socket_id;
|
||||
static int mqtt_demo_mqtt_keepalive = 300;
|
||||
static mqtt_broker_handle_t mqtt_demo_mqtt_broker;
|
||||
|
||||
static uint8_t mqtt_demo_packet_buffer[MQTT_DEMO_RECV_BUF_LEN_MAX];
|
||||
|
||||
extern struct netif *tls_get_netif(void);
|
||||
extern int wm_printf(const char *fmt, ...);
|
||||
|
||||
static void mqtt_demo_net_status(u8 status)
|
||||
{
|
||||
struct netif *netif = tls_get_netif();
|
||||
|
||||
switch(status)
|
||||
{
|
||||
case NETIF_WIFI_JOIN_FAILED:
|
||||
wm_printf("sta join net failed\n");
|
||||
break;
|
||||
case NETIF_WIFI_DISCONNECTED:
|
||||
wm_printf("sta net disconnected\n");
|
||||
break;
|
||||
case NETIF_IP_NET_UP:
|
||||
wm_printf("sta ip: %v\n", netif->ip_addr.addr);
|
||||
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_START, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void mqtt_demo_heart_timer(void *ptmr, void *parg)
|
||||
{
|
||||
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_HEART, 0);
|
||||
}
|
||||
|
||||
static int mqtt_demo_close_socket(mqtt_broker_handle_t *broker)
|
||||
{
|
||||
int fd = broker->socketid;
|
||||
return closesocket(fd);
|
||||
}
|
||||
|
||||
static int mqtt_demo_send_packet(int socket_info, const void *buf, unsigned int count)
|
||||
{
|
||||
int fd = socket_info;
|
||||
return send(fd, buf, count, 0);
|
||||
}
|
||||
|
||||
static int mqtt_demo_read_packet(int sec, int us)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if ((sec >= 0) || (us >= 0))
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval tmv;
|
||||
|
||||
// Initialize the file descriptor set
|
||||
FD_ZERO (&readfds);
|
||||
FD_SET (mqtt_demo_socket_id, &readfds);
|
||||
|
||||
// Initialize the timeout data structure
|
||||
tmv.tv_sec = sec;
|
||||
tmv.tv_usec = us;
|
||||
|
||||
// select returns 0 if timeout, 1 if input available, -1 if error
|
||||
ret = select(mqtt_demo_socket_id + 1, &readfds, NULL, NULL, &tmv);
|
||||
if(ret < 0)
|
||||
return -2;
|
||||
else if(ret == 0)
|
||||
return MQTT_DEMO_READ_TIMEOUT;
|
||||
|
||||
}
|
||||
|
||||
int total_bytes = 0, bytes_rcvd, packet_length;
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
//printf("recv [len=%d] : %s\n", bytes_rcvd, mqtt_demo_packet_buffer);
|
||||
total_bytes += bytes_rcvd; // Keep tally of total bytes
|
||||
if (total_bytes < 2)
|
||||
return -1;
|
||||
|
||||
// now we have the full fixed header in mqtt_demo_packet_buffer
|
||||
// parse it for remaining length and number of bytes
|
||||
uint16_t rem_len = mqtt_parse_rem_len(mqtt_demo_packet_buffer);
|
||||
uint8_t rem_len_bytes = mqtt_num_rem_len_bytes(mqtt_demo_packet_buffer);
|
||||
|
||||
//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
|
||||
packet_length = rem_len + rem_len_bytes + 1;
|
||||
|
||||
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)
|
||||
return -1;
|
||||
total_bytes += bytes_rcvd; // Keep tally of total bytes
|
||||
}
|
||||
|
||||
return packet_length;
|
||||
}
|
||||
|
||||
static int mqtt_demo_init_socket(mqtt_broker_handle_t *broker, const char *hostname, short port, int keepalive)
|
||||
{
|
||||
int flag = 1;
|
||||
struct hostent *hp;
|
||||
|
||||
// Create the socket
|
||||
if((mqtt_demo_socket_id = socket(PF_INET, SOCK_STREAM, 0)) < 0)
|
||||
return -1;
|
||||
|
||||
// Disable Nagle Algorithm
|
||||
if (setsockopt(mqtt_demo_socket_id, IPPROTO_TCP, 0x01, (char *)&flag, sizeof(flag)) < 0)
|
||||
{
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -2;
|
||||
}
|
||||
|
||||
// query host ip start
|
||||
hp = gethostbyname(hostname);
|
||||
if (hp == NULL )
|
||||
{
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -2;
|
||||
}
|
||||
|
||||
struct sockaddr_in socket_address;
|
||||
memset(&socket_address, 0, sizeof(struct sockaddr_in));
|
||||
socket_address.sin_family = AF_INET;
|
||||
socket_address.sin_port = htons(port);
|
||||
memcpy(&(socket_address.sin_addr), hp->h_addr, hp->h_length);
|
||||
|
||||
// Connect the socket
|
||||
if((connect(mqtt_demo_socket_id, (struct sockaddr *)&socket_address, sizeof(socket_address))) < 0)
|
||||
{
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// MQTT stuffs
|
||||
mqtt_set_alive(broker, mqtt_demo_mqtt_keepalive);
|
||||
broker->socketid = mqtt_demo_socket_id;
|
||||
broker->mqttsend = mqtt_demo_send_packet;
|
||||
//wm_printf("socket id = %d\n", mqtt_demo_socket_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mqtt_demo_init(void)
|
||||
{
|
||||
int packet_length, ret = 0;
|
||||
uint16_t msg_id, msg_id_rcv;
|
||||
|
||||
wm_printf("step1: init mqtt lib.\r\n");
|
||||
mqtt_init(&mqtt_demo_mqtt_broker, MQTT_DEMO_CLIENT_ID);
|
||||
|
||||
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);
|
||||
if(ret)
|
||||
{
|
||||
wm_printf("init_socket ret=%d\n", ret);
|
||||
return -4;
|
||||
}
|
||||
|
||||
wm_printf("step3: establishing mqtt connection.\r\n");
|
||||
ret = mqtt_connect(&mqtt_demo_mqtt_broker);
|
||||
if(ret)
|
||||
{
|
||||
wm_printf("mqtt_connect ret=%d\n", ret);
|
||||
return -5;
|
||||
}
|
||||
|
||||
packet_length = mqtt_demo_read_packet(MQTT_DEMO_READ_TIME_SEC, MQTT_DEMO_READ_TIME_US);
|
||||
if(packet_length < 0)
|
||||
{
|
||||
wm_printf("Error(%d) on read packet!\n", packet_length);
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(MQTTParseMessageType(mqtt_demo_packet_buffer) != MQTT_MSG_CONNACK)
|
||||
{
|
||||
wm_printf("CONNACK expected!\n");
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -2;
|
||||
}
|
||||
|
||||
if(mqtt_demo_packet_buffer[3] != 0x00)
|
||||
{
|
||||
wm_printf("CONNACK failed!\n");
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -2;
|
||||
}
|
||||
|
||||
|
||||
wm_printf("step4: subscribe mqtt\r\n");
|
||||
mqtt_subscribe(&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);
|
||||
if(packet_length < 0)
|
||||
{
|
||||
wm_printf("Error(%d) on read packet!\n", packet_length);
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(MQTTParseMessageType(mqtt_demo_packet_buffer) != MQTT_MSG_SUBACK)
|
||||
{
|
||||
wm_printf("SUBACK expected!\n");
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -2;
|
||||
}
|
||||
|
||||
msg_id_rcv = mqtt_parse_msg_id(mqtt_demo_packet_buffer);
|
||||
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);
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
return -3;
|
||||
}
|
||||
|
||||
wm_printf("step5: start the Heart-beat preservation timer\r\n");
|
||||
ret = tls_os_timer_create(&mqtt_demo_heartbeat_timer,
|
||||
mqtt_demo_heart_timer,
|
||||
NULL, (10 * HZ), TRUE, NULL);
|
||||
if (TLS_OS_SUCCESS == ret)
|
||||
tls_os_timer_start(mqtt_demo_heartbeat_timer);
|
||||
|
||||
/* step6: push mqtt subscription (when a subscription message is received) */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mqtt_demo_loop(void)
|
||||
{
|
||||
int packet_length = 0;
|
||||
int counter = 0;
|
||||
|
||||
counter++;
|
||||
packet_length = mqtt_demo_read_packet(0, 1);
|
||||
if(packet_length > 0)
|
||||
{
|
||||
//wm_printf("recvd Packet Header: 0x%x...\n", mqtt_demo_packet_buffer[0]);
|
||||
|
||||
if (MQTTParseMessageType(mqtt_demo_packet_buffer) == MQTT_MSG_PUBLISH)
|
||||
{
|
||||
uint8_t topic[100], *msg;
|
||||
uint16_t len;
|
||||
len = mqtt_parse_pub_topic(mqtt_demo_packet_buffer, topic);
|
||||
topic[len] = '\0'; // for printf
|
||||
len = mqtt_parse_publish_msg(mqtt_demo_packet_buffer, &msg);
|
||||
msg[len] = '\0'; // for printf
|
||||
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);
|
||||
wm_printf("pushed: %s <<< %s\n", MQTT_DEMO_RX_PUB_TOPIC, msg);
|
||||
}
|
||||
|
||||
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0);
|
||||
}
|
||||
else if (packet_length == MQTT_DEMO_READ_TIMEOUT)
|
||||
{
|
||||
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0);
|
||||
}
|
||||
else if(packet_length == -1)
|
||||
{
|
||||
wm_printf("mqtt error:(%d), stop mqtt demo!\n", packet_length);
|
||||
tls_os_timer_stop(mqtt_demo_heartbeat_timer);
|
||||
mqtt_demo_close_socket(&mqtt_demo_mqtt_broker);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mqtt_demo_task(void *p)
|
||||
{
|
||||
int ret;
|
||||
void *msg;
|
||||
struct tls_ethif *ether_if = tls_netif_get_ethif();
|
||||
|
||||
if (ether_if->status)
|
||||
{
|
||||
wm_printf("sta ip: %v\n", ether_if->ip_addr.addr);
|
||||
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_START, 0);
|
||||
}
|
||||
|
||||
for ( ; ; )
|
||||
{
|
||||
ret = tls_os_queue_receive(mqtt_demo_task_queue, (void **)&msg, 0, 0);
|
||||
if (!ret)
|
||||
{
|
||||
switch((u32)msg)
|
||||
{
|
||||
case MQTT_DEMO_CMD_START:
|
||||
do
|
||||
{
|
||||
ret = mqtt_demo_init();
|
||||
if (ret)
|
||||
break;
|
||||
tls_os_queue_send(mqtt_demo_task_queue, (void *)MQTT_DEMO_CMD_LOOP, 0);
|
||||
}
|
||||
while (0);
|
||||
break;
|
||||
case MQTT_DEMO_CMD_HEART:
|
||||
wm_printf("send heart ping\r\n");
|
||||
mqtt_ping(&mqtt_demo_mqtt_broker);
|
||||
break;
|
||||
case MQTT_DEMO_CMD_LOOP:
|
||||
mqtt_demo_loop();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//mqtt demo
|
||||
//测试服务器:mqtt.yichen.link:3883
|
||||
//服务器端用于发送的订阅主题为:winnermicro/mqtt_tx_demo
|
||||
//服务器端用于接收的订阅主题为:winnermicro/mqtt_rx_demo
|
||||
//工作流程: 接收到winnermicro/mqtt_tx_demo推送的消息后打印在屏幕上,并再次推送到winnermicro/mqtt_rx_demo
|
||||
int mqtt_demo(void)
|
||||
{
|
||||
if (!mqtt_demo_inited)
|
||||
{
|
||||
tls_os_task_create(NULL, NULL, mqtt_demo_task,
|
||||
NULL, (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_PRIO, 0);
|
||||
|
||||
tls_os_queue_create(&mqtt_demo_task_queue, MQTT_DEMO_QUEUE_SIZE);
|
||||
|
||||
tls_netif_add_status_event(mqtt_demo_net_status);
|
||||
|
||||
mqtt_demo_inited = TRUE;
|
||||
}
|
||||
|
||||
return WM_SUCCESS;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
164
src/W800 SDK v1.00.08/demo/wm_scan_demo.c
Normal file
164
src/W800 SDK v1.00.08/demo/wm_scan_demo.c
Normal file
@ -0,0 +1,164 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name : wm_scan_demo.c
|
||||
*
|
||||
* Description: wifi scan demo function
|
||||
*
|
||||
* Copyright (c) 2018 Winner Micro Electronic Design Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author : muqing
|
||||
*
|
||||
* Date : 2018-12-03
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include "wm_include.h"
|
||||
#include "tls_wireless.h"
|
||||
|
||||
#if DEMO_SCAN
|
||||
|
||||
static char *scan_privacy_string(u8 privacy)
|
||||
{
|
||||
char *sec;
|
||||
|
||||
switch (privacy)
|
||||
{
|
||||
case WM_WIFI_AUTH_MODE_OPEN:
|
||||
sec = "NONE";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WEP_AUTO:
|
||||
sec = "WEP/AUTO";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA_PSK_TKIP:
|
||||
sec = "WPA_PSK/TKIP";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA_PSK_CCMP:
|
||||
sec = "WPA_PSK/CCMP";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA_PSK_AUTO:
|
||||
sec = "WPA_PSK/AUTO";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA2_PSK_TKIP:
|
||||
sec = "WPA2_PSK/TKIP";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA2_PSK_CCMP:
|
||||
sec = "WPA2_PSK/CCMP";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA2_PSK_AUTO:
|
||||
sec = "WPA2_PSK/AUTO";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA_WPA2_PSK_TKIP:
|
||||
sec = "WPA_PSK/WPA2_PSK/TKIP";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA_WPA2_PSK_CCMP:
|
||||
sec = "WPA_PSK/WPA2_PSK/CCMP";
|
||||
break;
|
||||
case WM_WIFI_AUTH_MODE_WPA_WPA2_PSK_AUTO:
|
||||
sec = "WPA_PSK/WPA2_PSK/AUTO";
|
||||
break;
|
||||
|
||||
default:
|
||||
sec = "Unknown";
|
||||
break;
|
||||
}
|
||||
return sec;
|
||||
}
|
||||
|
||||
static char *scan_mode_string(u8 mode)
|
||||
{
|
||||
char *ap_mode;
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case 1:
|
||||
ap_mode = "IBSS";
|
||||
break;
|
||||
case 2:
|
||||
ap_mode = "ESS";
|
||||
break;
|
||||
|
||||
default:
|
||||
ap_mode = "ESS";
|
||||
break;
|
||||
}
|
||||
return ap_mode;
|
||||
}
|
||||
|
||||
|
||||
static void wifi_scan_handler(void)
|
||||
{
|
||||
char *buf = NULL;
|
||||
char *buf1 = NULL;
|
||||
u32 buflen;
|
||||
int i, j;
|
||||
int err;
|
||||
u8 ssid[33];
|
||||
struct tls_scan_bss_t *wsr;
|
||||
struct tls_bss_info_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((u8 *)buf, buflen);
|
||||
if (err)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
|
||||
wsr = (struct tls_scan_bss_t *)buf;
|
||||
bss_info = (struct tls_bss_info_t *)(buf + 8);
|
||||
|
||||
printf("\n");
|
||||
|
||||
for(i = 0; i < wsr->count; i++)
|
||||
{
|
||||
j = sprintf(buf1, "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]);
|
||||
j += sprintf(buf1 + j, "ch:%d, ", bss_info->channel);
|
||||
j += sprintf(buf1 + j, "rssi:%d, ", (signed char)bss_info->rssi);
|
||||
j += sprintf(buf1 + j, "wps:%d, ", bss_info->wps_support);
|
||||
j += sprintf(buf1 + j, "max_rate:%dMbps, ", bss_info->max_data_rate);
|
||||
j += sprintf(buf1 + j, "%s, ", scan_mode_string(bss_info->mode));
|
||||
j += sprintf(buf1 + j, "%s, ", scan_privacy_string(bss_info->privacy));
|
||||
memcpy(ssid, bss_info->ssid, bss_info->ssid_len);
|
||||
ssid[bss_info->ssid_len] = '\0';
|
||||
j += sprintf(buf1 + j, "%s", ssid);
|
||||
|
||||
printf("%s\n", buf1);
|
||||
|
||||
bss_info ++;
|
||||
}
|
||||
|
||||
end:
|
||||
if(buf)
|
||||
{
|
||||
tls_mem_free(buf);
|
||||
}
|
||||
if(buf1)
|
||||
{
|
||||
tls_mem_free(buf1);
|
||||
}
|
||||
}
|
||||
/*Scan demo*/
|
||||
int scan_demo(void)
|
||||
{
|
||||
tls_wifi_scan_result_cb_register(wifi_scan_handler);
|
||||
tls_wifi_scan();
|
||||
return WM_SUCCESS;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
#include "wm_cpu.h"
|
||||
#include "random.h"
|
||||
#include "wm_gpio_afsel.h"
|
||||
#include "utils.h"
|
||||
|
||||
#if DEMO_SDIO_HOST
|
||||
extern int wm_sd_card_set_blocklen(uint32_t blocklen);
|
||||
@ -31,7 +30,6 @@ static int sdh_card_wr_sb(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
|
||||
int i = 0;
|
||||
char* buf = NULL;
|
||||
char* bufR = NULL;
|
||||
uint32_t sd_addr = 0;
|
||||
|
||||
buf = tls_mem_alloc(512);
|
||||
if(buf == NULL)
|
||||
@ -50,8 +48,7 @@ static int sdh_card_wr_sb(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
|
||||
|
||||
for(i=0; i<(tsize/512); i++)
|
||||
{
|
||||
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
|
||||
ret = wm_sd_card_block_write(rca, sd_addr, buf);
|
||||
ret = wm_sd_card_block_write(rca, i, buf);
|
||||
if(ret)
|
||||
goto end;
|
||||
}
|
||||
@ -60,15 +57,11 @@ static int sdh_card_wr_sb(uint32_t rca, uint8_t bus_width, const uint32_t tsize)
|
||||
goto end;
|
||||
for(i=0; i<(tsize/512); i++)
|
||||
{
|
||||
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
|
||||
ret = wm_sd_card_block_read(rca, sd_addr, bufR);
|
||||
ret = wm_sd_card_block_read(rca, i, bufR);
|
||||
if(ret)
|
||||
goto end;
|
||||
if(memcmp(buf, bufR, 512))
|
||||
{
|
||||
printf("i=%d\n", i);
|
||||
dumpBuffer("buf", buf, 512);
|
||||
dumpBuffer("bufR", bufR, 512);
|
||||
ret = -2;
|
||||
goto end;
|
||||
}
|
||||
@ -87,76 +80,6 @@ end:
|
||||
TEST_DEBUG("ret %d\n", 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
|
||||
* bus_width: 0:1bit; 2:4bits
|
||||
@ -169,7 +92,6 @@ static int sdh_card_wr_mbs_dma_4M_test(uint32_t rca, uint8_t bus_width, uint32_t
|
||||
char* bufR = NULL;
|
||||
const uint32_t tsize = 4*1024;//*1024;
|
||||
int buflen = 512*block_cnt;
|
||||
uint32_t sd_addr = 0;
|
||||
|
||||
buf = tls_mem_alloc(buflen);
|
||||
if(buf == NULL)
|
||||
@ -191,8 +113,7 @@ 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)
|
||||
for(i=0; i<(tsize/512); i+=block_cnt)
|
||||
{
|
||||
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
|
||||
ret = wm_sd_card_blocks_write(rca, sd_addr, buf, buflen);
|
||||
ret = wm_sd_card_blocks_write(rca, i, buf, buflen);
|
||||
if(ret)
|
||||
goto end;
|
||||
}
|
||||
@ -202,9 +123,8 @@ 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)
|
||||
{
|
||||
sd_addr = SDCardInfo.CSDVer == 1 ? (i * 512) : i;
|
||||
memset(bufR, 0, buflen);
|
||||
ret = wm_sd_card_blocks_read(rca, sd_addr, bufR, buflen);
|
||||
ret = wm_sd_card_blocks_read(rca, i, bufR, buflen);
|
||||
if(ret)
|
||||
goto end;
|
||||
if(memcmp(buf, bufR, buflen))
|
||||
@ -248,11 +168,6 @@ int sd_card_test(void)
|
||||
wm_sdio_host_config(0);
|
||||
ret += sdh_card_init(&rca);
|
||||
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);
|
||||
printf("\nW & R 1, ret = %d\n", ret);
|
||||
wr_delay(10000);
|
||||
@ -265,7 +180,7 @@ int sd_card_test(void)
|
||||
ret += sdh_card_wr_mbs_dma_4M_test(rca, 2, 6);
|
||||
printf("W & R 4, ret = %d\n", ret);
|
||||
wr_delay(10000);
|
||||
#endif
|
||||
|
||||
if( ret ==0 ) {
|
||||
printf("\nsd card write read OK, ret = %d\n", ret);
|
||||
}
|
||||
@ -103,19 +103,8 @@ static s16 HspiRxCmdCb(char *buf)
|
||||
static void HspiInit(int type)
|
||||
{
|
||||
|
||||
if(type == HSPI_INTERFACE_SPI)
|
||||
{
|
||||
wm_hspi_gpio_config(0);
|
||||
}
|
||||
else if (type == HSPI_INTERFACE_SDIO)
|
||||
{
|
||||
wm_sdio_slave_config(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("do not support interface\n");
|
||||
return;
|
||||
}
|
||||
|
||||
wm_hspi_gpio_config(0);
|
||||
|
||||
tls_slave_spi_init();
|
||||
tls_set_high_speed_interface_type(type);
|
||||
@ -130,17 +119,16 @@ int slave_spi_demo(int type)
|
||||
if(type == 0)
|
||||
{
|
||||
type = HSPI_INTERFACE_SPI;
|
||||
printf("\r\ntype:%s\r\n", "HSPI_SLAVE");
|
||||
HspiInit(type);
|
||||
}
|
||||
else
|
||||
{
|
||||
type = HSPI_INTERFACE_SDIO;
|
||||
printf("\r\ntype:%s\r\n", "SDIO_SLAVE");
|
||||
HspiInit(type);
|
||||
}
|
||||
printf("\r\ntype:%d\r\n", type);
|
||||
|
||||
return WM_SUCCESS;
|
||||
HspiInit(type);
|
||||
|
||||
return WM_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -20,20 +20,6 @@
|
||||
2)Add sta list monitor task*/
|
||||
static tls_os_timer_t *sta_monitor_tim = NULL;
|
||||
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)
|
||||
{
|
||||
u8 *stabuf = NULL;
|
||||
@ -42,55 +28,16 @@ static void demo_monitor_stalist_tim(void *ptmr, void *parg)
|
||||
stabuf = tls_mem_alloc(1024);
|
||||
if (stabuf)
|
||||
{
|
||||
stanum = 0;
|
||||
memset(stabuf, 0, 1024);
|
||||
tls_wifi_get_authed_sta_info(&stanum, stabuf, 1024);
|
||||
if (totalstanum != stanum)
|
||||
{
|
||||
wm_printf("white sta mac:\n");
|
||||
wm_printf("sta mac:\n");
|
||||
for (i = 0; i < stanum ; i++)
|
||||
{
|
||||
wm_printf("%M\n", &stabuf[i * 6]);
|
||||
}
|
||||
}
|
||||
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);
|
||||
stabuf = NULL;
|
||||
}
|
||||
@ -104,7 +51,6 @@ int demo_create_softap(u8 *ssid, u8 *key, int chan, int encrypt, int format)
|
||||
u8 ssid_set = 0;
|
||||
u8 wireless_protocol = 0;
|
||||
|
||||
|
||||
u8 ssid_len = 0;
|
||||
if (!ssid)
|
||||
{
|
||||
@ -163,9 +109,6 @@ int demo_create_softap(u8 *ssid, u8 *key, int chan, int encrypt, int format)
|
||||
ipinfo->netmask[3] = 0;
|
||||
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);
|
||||
wm_printf("\n ap create %s ! \n", (ret == WM_SUCCESS) ? "Successfully" : "Error");
|
||||
|
||||
@ -169,7 +169,7 @@ int uart_demo(int bandrate, int parity, int stopbits)
|
||||
demo_uart_task,
|
||||
(void *) demo_uart,
|
||||
(void *) demo_uart_task_stk, /** 任务栈的起始地址 */
|
||||
DEMO_UART_TAST_STK_SIZE*4, /** 任务栈的大小 */
|
||||
DEMO_UART_TAST_STK_SIZE, /** 任务栈的大小 */
|
||||
DEMO_UART_TASK_PRIO, 0);
|
||||
}
|
||||
if (-1 == bandrate)
|
||||
@ -1,48 +1,6 @@
|
||||
==========================================================
|
||||
| CHANGELOG: WinnerMicro Software Development Kit |
|
||||
==========================================================
|
||||
W800 SDK v1.00.10 | 2022/12/29
|
||||
==========================
|
||||
1. 驱动更新
|
||||
1)提供模组ADC校准功能接口
|
||||
2)修复PSRAM IO复用不完整问题
|
||||
3)Flash驱动修改不再每次都写状态寄存器
|
||||
4)增加RF参数备份机制
|
||||
5)修改对于SD 1.0卡的支持
|
||||
|
||||
2. 更新secboot,支持青藤Flash的QIO模式切换;优化每次启动过程都操作flash状态寄存器来切QIO模式的操作
|
||||
|
||||
3. 升级LWIP版本至V2.1.3版本
|
||||
4. 优化一键配网功能
|
||||
5. demo修改:
|
||||
1)HSPI和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和MQTT,CDK的编译工程变更,建议使用新的工程,把之前改动合过来;
|
||||
如果确实要使用之前的工程,需要把相关文件加入,编译前要清理一下编译工程下的过程中文件(.mk,.bat,.txt,LST和OBJ)
|
||||
4)如果用户打开较多demo、或者进行内存调试,或者打开wm_debug.h调试功能,而且要使用经典蓝牙的CDK工程编译
|
||||
或者使用make编译,需要对链接文件里的I-SRAM进行调整(位置、大小)由此带来一系列的调整(编译固件存放的位置也要调整)
|
||||
5)清理编译告警
|
||||
|
||||
W800 SDK v1.00.08 | 2022/07/26
|
||||
==========================
|
||||
*********
|
||||
BIN
src/W800 SDK v1.00.08/doc/w800_apis.chm
Normal file
BIN
src/W800 SDK v1.00.08/doc/w800_apis.chm
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user