Compare commits

..

No commits in common. "b0f7adb8b592094147606a22851b424b1ddbd4da" and "020f7e53b618e45920b3ff992c0eade80822c350" have entirely different histories.

3502 changed files with 52700 additions and 42585 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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"}
};

View File

@ -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 --;

View 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

View File

@ -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

View File

@ -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)

View File

@ -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

View 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

View 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

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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");

View File

@ -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)

View File

@ -1,48 +1,6 @@
==========================================================
| 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
==========================
*********

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More