ex
Fork of mbed-os-example-mbed5-blinky by
DuerOS-Light-SDK-v1.1.0/demo/factory_test.cpp
- Committer:
- TMBOY
- Date:
- 2017-07-18
- Revision:
- 47:9e361da97763
File content as of revision 47:9e361da97763:
#if defined(TARGET_UNO_91H)
#include "mbed.h"
#include "rtos.h"
#include "console.h"
#include "WiFiStackInterface.h"
#include "rda_wdt_api.h"
#include "rda_ccfg_api.h"
#include "cmsis_os.h"
#include "rda_wdt_api.h"
#include "Rda58xx.h"
static char* version = "**********RDA Software Version sta_V2.0_124**********";
static int op_mode = 0;//initial ~ 0 factory test ~ 1 function ~ 2
static char conn_flag = 0;
static WiFiStackInterface wifi;
extern unsigned char rda_mac_addr[6];
extern rda58xx _rda58xx;
int do_conn_state(cmd_tbl_t* cmd, int argc, char* argv[]) {
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
#if 1
const char* ssid;
ssid = wifi.get_ssid();
if (ssid[0]) {
printf("CONNECTED! ssid:%s RSSI:%d db ip:%s\r\n", wifi.get_ssid(), wifi.get_rssi(),
wifi.get_ip_address());
} else {
printf("NOT CONNECTED!\r\n");
}
#else
if (wifi.bss.SSID[0]) {
printf("CONNECTED! ssid:%s RSSI:%d db\r\n", wifi.bss.SSID, wifi.bss.SSID);
} else {
printf("NOT CONNECTED!\r\n");
}
#endif
return 0;
}
int do_get_mac(cmd_tbl_t* cmd, int argc, char* argv[]) {
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
char mac[6];
mbed_mac_address(mac);
printf("MAC address: %02x:%02x:%02x:%02x:%02x:%02x\r\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return 0;
}
int do_set_mac(cmd_tbl_t* cmd, int argc, char* argv[]) {
char* mdata, mac[6], i;
if (op_mode != 1) {
return 0;
}
if (argc < 2) {
show_cmd_usage(cmd);
return -1;
}
if (strlen(argv[1]) != 12) {
printf("Error MAC address len\r\n");
return -2;
}
mdata = argv[1];
for (i = 0; i < 12; i++) {
if (mdata[i] >= 0x41 && mdata[i] <= 0x46) { // switch 'A' to 'a'
mdata[i] += 0x20;
}
if (mdata[i] >= 0x61 && mdata[i] <= 0x66) { //switch "ab" to 0xab
mac[i] = mdata[i] - 0x57;
}
if (mdata[i] >= 0x30 && mdata[i] <= 0x39) {
mac[i] = mdata[i] - 0x30;
}
if (i % 2 == 1) {
mac[i / 2] = mac[i - 1] << 4 | mac[i];
}
}
if (!mac_is_valid(mac)) {
printf("MAC is ZERO\r\n");
return 0;
}
memcpy(rda_mac_addr, mac, 6);
rda5981_flash_write_mac_addr(rda_mac_addr);
return 0;
}
int do_get_ver(cmd_tbl_t* cmd, int argc, char* argv[]) {
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
printf("Software Version: %s\r\n", version);
return 0;
}
int do_get_ver_5856(cmd_tbl_t* cmd, int argc, char* argv[]) {
char ver[32] = {0};
rda58xx_at_status ret;
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
printf("do_get_ver_5856\r\n");
while (!_rda58xx.isPowerOn()) {
Thread::wait(100);
}
ret = _rda58xx.getChipVersion(ver);
if (VACK == ret) {
printf("5856 Software Version: %s\r\n", ver);
return 0;
} else {
printf("5856 Software Version: Fail!\r\n");
return -1;
}
}
int do_factory_test_5856(cmd_tbl_t* cmd, int argc, char* argv[]) {
rda58xx_at_status ret;
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
printf("do_factory_test_5856\r\n");
ret = _rda58xx.factoryTest(FT_ENABLE);
if (VACK == ret) {
printf("5856 Factory Test: Succeed\r\n");
return 0;
} else {
printf("5856 Factory Test: Fail\r\n");
return -1;
}
}
int do_write_usedata(cmd_tbl_t* cmd, int argc, char* argv[]) {
int len, ret, tmp_len = 0;
unsigned char* buf;
if (op_mode != 1) {
return 0;
}
if (argc < 2) {
show_cmd_usage(cmd);
return -1;
}
len = atoi(argv[1]);
buf = (unsigned char*)malloc(len);
memset(buf, 0, len);
do {
unsigned int size;
size = console_fifo_get(buf + tmp_len, len - tmp_len);
tmp_len += size;
} while (tmp_len < len);
ret = rda5981_flash_write_3rdparter_data(buf, len);
if (ret < 0) {
printf("write flash error, error %d\r\n", ret);
} else {
printf("Data write complete\r\n");
}
free(buf);
return 0;
}
int do_read_usedata(cmd_tbl_t* cmd, int argc, char* argv[]) {
int len = 0, ret = -1;
unsigned char* buf;
if (op_mode != 1) {
return 0;
}
if (argc != 1) {
show_cmd_usage(cmd);
return -1;
}
len = rda5981_flash_read_3rdparter_data_length();
if (len < 0) {
printf("No user data in flah\r\n");
return -1;
}
buf = (unsigned char*)malloc(len + 1);
memset(buf, 0, len + 1);
ret = rda5981_flash_read_3rdparter_data(buf, len);
if (ret < 0) {
printf("read flash error, error %d\r\n", ret);
} else {
printf("Data read complete, len:%d\r\n", ret);
}
buf[len] = 0;
console_puts((char*)buf);
printf("\n");
free(buf);
return 0;
}
int do_reset(cmd_tbl_t* cmd, int argc, char* argv[]) {
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
printf("SOFTWARE RESET!!!!\r\n");
rda_wdt_softreset();
return 0;
}
int do_conn(cmd_tbl_t* cmd, int argc, char* argv[]) {
char* ssid_t, *pw_t;
const char* ip_addr;
char ssid[20];
char pw[20];
if (op_mode != 1) {
return 0;
}
if (conn_flag == 1) {
printf("error! Has been connected!");
return -1;
}
printf("OK, start connect\r\n");
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
memset(ssid, 0, sizeof(ssid));
memset(pw, 0, sizeof(pw));
if (argc > 1) {
memcpy(ssid, argv[1], strlen(argv[1]));
}
if (argc > 2) {
memcpy(pw, argv[2], strlen(argv[2]));
}
if (strlen(ssid) != 0) {
ssid_t = ssid;
} else {
ssid_t = NULL;
}
if (strlen(pw) != 0) {
pw_t = pw;
} else {
pw_t = NULL;
}
printf("ssid %s pw %s\r\n", ssid_t, pw_t);
wifi.connect(ssid_t, pw_t, NSAPI_SECURITY_NONE);
while (!wifi.get_ip_address());
ip_addr = wifi.get_ip_address();
if (ip_addr) {
printf("Client IP Address is %s\r\n", ip_addr);
} else {
printf("No Client IP Address\r\n");
}
conn_flag = 1;
//rda5981_flash_write_smartconfig_data();
return 0;
}
int do_disconn(cmd_tbl_t* cmd, int argc, char* argv[]) {
if (op_mode != 1) {
return 0;
}
if (argc < 1) {
show_cmd_usage(cmd);
return -1;
}
if (conn_flag == 0) {
printf("Not connectted!\r\n");
return 0;
}
wifi.disconnect();
while (wifi.get_ip_address() != NULL) {
Thread::wait(20);
}
conn_flag = 0;
//printf("OK, Disconnect successful\r\n");
return 0;
}
int do_set_baud(cmd_tbl_t* cmd, int argc, char* argv[]) {
unsigned int baudrate;
if (op_mode != 1) {
return 0;
}
if (argc < 2) {
show_cmd_usage(cmd);
return -1;
}
printf("OK, do set baud\r\n");
baudrate = atoi(argv[1]);
console_set_baudrate(baudrate);
return 0;
}
void add_cmd() {
int i;
cmd_tbl_t cmd_list[] = {
{
"reset", 1, do_reset,
"reset - Software Reset\n"
},
{
"conn", 3, do_conn,
"conn - start connect\n"
},
{
"setbaud", 2, do_set_baud,
"setbaud - set serial baudrate\n"
},
{
"connstate", 1, do_conn_state,
"connstate - get conn state\n"
},
{
"setmac", 2, do_set_mac,
"setmac - set mac address\n"
},
{
"getmac", 1, do_get_mac,
"getmac - get mac address\n"
},
{
"getver", 1, do_get_ver,
"getver - get version\n"
},
{
"getver5856", 1, do_get_ver_5856,
"getver5856 - get 5856 version\n"
},
{
"ftest5856", 1, do_factory_test_5856,
"ftest5856 - 5856 factory test\n"
},
{
"disconn", 1, do_disconn,
"disconn - start disconnect\n"
},
{
"wuserdata", 2, do_write_usedata,
"wusedate - write user data\n"
},
{
"ruserdata", 1, do_read_usedata,
"ruserdate - read user data\n"
},
};
i = sizeof(cmd_list) / sizeof(cmd_tbl_t);
while (i--) {
if (0 != console_cmd_add(&cmd_list[i])) {
printf("Add cmd failed\r\n");
}
}
}
int factory_test() {
unsigned int flag = (*((volatile unsigned int*)(0x40001024UL)));
//printf("flag = %x\r\n", flag);
if ((flag & (0x01UL << 29)) == 0) {
return 0;
}
op_mode = 1;
console_init();
add_cmd();
while (1);
//return 0;
}
#endif
