Files
TAIXIN/sdk/lib/common/atcmd.c

719 lines
23 KiB
C
Raw Normal View History

#include "sys_config.h"
#include "basic_include.h"
#include "hal/netdev.h"
#include "hal/gpio.h"
#include "lib/atcmd/libatcmd.h"
#include "lib/bus/xmodem/xmodem.h"
#include "lib/lmac/lmac_def.h"
#include "lib/umac/ieee80211.h"
#include "lib/bluetooth/uble/ble_demo.h"
#if SYS_NETWORK_SUPPORT
#include "lwip/netif.h"
#include "lwip/ip_addr.h"
#include "lwip/icmp.h"
#include "lwip/apps/lwiperf.h"
#endif
#include "syscfg.h"
int32 sys_atcmd_errlog(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 0) {
sys_errlog_dump();
} else {
sys_errlog_init(os_atoi(argv[0]), 0);
}
return 0;
}
int32 sys_atcmd_goto_boot(const char *cmd, char *argv[], uint32 argc)
{
os_printf("system goto boot\r\n");
system_goto_boot();
return 0;
}
int32 sys_atcmd_reset(const char *cmd, char *argv[], uint32 argc)
{
atcmd_ok;
if (argc >= 1) {
uint32 run_addr = 0, reset_usb = 0, param = 0;
sys_errlog_flush(0xffffffff, 0, 0);
disable_irq();
mcu_watchdog_feed();
if (argc >= 1) { run_addr = os_atoh(argv[0]); }
if (argc >= 2) { reset_usb = os_atoh(argv[1]); }
if (argc >= 3) { param = os_atoh(argv[2]); }
mcu_watchdog_feed();
// os_printf("reset addr=%08x, rst_usb=%d, param=%d\r\n", run_addr, reset_usb, param);
if (reset_usb) {
pmu_clr_direct_run_pengding2();
} else {
pmu_set_direct_run_pengding2();
}
((void (*)(uint32))run_addr)(param);
} else {
mcu_reset();
}
return 0;
}
int32 sys_atcmd_reboot_test_mode(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '1') {
system_reboot_test_mode();
atcmd_ok;
mcu_reset();
} else {
system_reboot_normal_mode();
atcmd_ok;
mcu_reset();
}
return 0;
}
int32 sys_atcmd_jtag(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1) {
jtag_map_set(os_atoi(argv[0]) ? 1 : 0);
}
return 0;
}
int32 sys_atcmd_sysdbg(const char *cmd, char *argv[], uint32 argc)
{
char *arg = argv[0];
if (argc == 2) {
if (os_strcasecmp(arg, "heap") == 0) {
sys_status.dbg_heap = (os_atoi(argv[1]) == 1);
}
if (os_strcasecmp(arg, "top") == 0) {
sys_status.dbg_top = os_atoi(argv[1]);
}
if (os_strcasecmp(arg, "umac") == 0) {
sys_status.dbg_umac = (os_atoi(argv[1]) == 1);
}
if (os_strcasecmp(arg, "irq") == 0) {
sys_status.dbg_irq = (os_atoi(argv[1]) == 1);
}
if (os_strcasecmp(arg, "cache") == 0) {
sys_status.dbg_cache = (os_atoi(argv[1]) == 1);
}
if (os_strcasecmp(arg, "net") == 0) {
sys_status.dbg_net = (os_atoi(argv[1]) == 1);
}
return ATCMD_RESULT_OK;
} else {
return ATCMD_RESULT_ERR;
}
return 0;
}
int32 sys_heap_dump_hdl(const char *cmd, char *argv[], uint32 argc)
{
if(argc == 0){
sysheap_dump(&sram_heap);
}else{
if(os_strcmp(argv[1], "psram") == 0){
#ifdef PSRAM_HEAP
sysheap_dump(&psram_heap);
#endif
}else if(os_strcmp(argv[1], "avheap") == 0){
}else{
sysheap_dump(&sram_heap);
}
}
return ATCMD_RESULT_OK;
}
int32 sys_get_gpio_imap(const char *cmd, char *argv[], uint32 argc)
{
char *ptr = NULL;
unsigned int io;
if (argc >= 1) {
ptr = strstr(argv[0], "P");
} else {
_os_printf("ex: at+inmap=PA1\r\n at+inmap=PB\r\n");
}
if (ptr) {
io = 16*(ptr[1] - 'A');
if (ptr[2] >= '0' && ptr[2] <= '9') {
io += os_atoi(&ptr[2]);
_os_printf("INMAP_%s: %x\r\n",
ptr,
gpio_ioctl(io, GPIO_GET_INMAP, 0, 0));
} else if (ptr[1] >= 'A' && ptr[1] <= 'E') {
for(int i = 0;i<(ptr[1]=='E' ? 4:16);i++)
{
_os_printf("INMAP_P%c%d: %x\r\n",
ptr[1], i,
gpio_ioctl(i+io, GPIO_GET_INMAP, 0, 0));
}
}
}
return ATCMD_RESULT_OK;
}
int32 sys_get_gpio_omap(const char *cmd, char *argv[], uint32 argc)
{
char *ptr = NULL;
unsigned int io = PA_0;
if (argc >= 1) {
ptr = strstr(argv[0], "P");
} else {
_os_printf("ex: at+outmap=PA1\r\n at+outmap=PB\r\n");
}
if (ptr) {
io = 16*(ptr[1] - 'A');
if (ptr[2] >= '0' && ptr[2] <= '9') {
io += os_atoi(&ptr[2]);
_os_printf("OUTMAP_%s: %x\r\n",
ptr,
gpio_ioctl(io, GPIO_GET_OUTMAP, 0, 0));
} else if (ptr[1] >= 'A' && ptr[1] <= 'E') {
for(int i = 0;i<(ptr[1]=='E' ? 4:16);i++)
{
_os_printf("OUTMAP_P%c%d: %x\r\n",
ptr[1],i,
gpio_ioctl(i+io, GPIO_GET_OUTMAP, 0, 0));
}
}
}
return ATCMD_RESULT_OK;
}
int32 sys_atcmd_watchdog(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1) {
uint8 tmo = os_atoi(argv[0]);
mcu_watchdog_timeout(tmo);
}
return 0;
}
#ifdef SYSCFG_ENABLE
int32 sys_syscfg_dump_hdl(const char *cmd, char *argv[], uint32 argc)
{
void syscfg_dump(void);
syscfg_dump();
return ATCMD_RESULT_DONE;
}
int32 sys_atcmd_loaddef(const char *cmd, char *argv[], uint32 argc)
{
syscfg_loaddef("syscfg");
atcmd_ok;
mcu_reset();
return 0;
}
int32 sys_wifi_atcmd_set_channel(const char *cmd, char *argv[], uint32 argc)
{
int32 chan = 0, chan_max;
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%d", ieee80211_conf_get_channel(sys_cfgs.wifi_mode));
} else if (argc == 1) {
chan = os_atoi(argv[0]);
#ifdef TXW4002ACK803
chan_max = 16;
#else
chan_max = 13;
#endif
if ((chan < 1) || (chan > chan_max)) {
atcmd_printf("+CHANNEL: ERROR, INVALID CHANNEL %d\r\n", chan);
return ATCMD_RESULT_DONE;
}
if (sys_cfgs.wifi_mode == WIFI_MODE_AP) {
ieee80211_conf_set_channel(WIFI_MODE_AP, chan);
sys_cfgs.channel = ieee80211_conf_get_channel(WIFI_MODE_AP);
} else if (sys_cfgs.wifi_mode == WIFI_MODE_STA || sys_cfgs.wifi_mode == WIFI_MODE_APSTA) {
ieee80211_conf_set_channel(WIFI_MODE_STA, chan);
sys_cfgs.channel = ieee80211_conf_get_channel(WIFI_MODE_STA);
}
syscfg_save();
}
return ATCMD_RESULT_OK;
}
int32 sys_wifi_atcmd_set_bssid(const char *cmd, char *argv[], uint32 argc)
{
int32 i = 0;
uint8 mac[6];
uint8 ifidx = (sys_cfgs.wifi_mode == WIFI_MODE_APSTA ? WIFI_MODE_STA : sys_cfgs.wifi_mode);
if (argc == 1 && argv[0][0] == '?') {
for (i = 0; i < 6; i++) {
atcmd_printf("%02x", sys_cfgs.bssid[i]);
}
} else if (argc == 1) {
if (ifidx == WIFI_MODE_STA) {
STR2MAC(argv[0], mac);
os_printf("set bssid:"MACSTR"\r\n", MAC2STR(mac));
if (IS_ZERO_ADDR(mac)) {
os_memset(sys_cfgs.bssid, 0, 6);
ieee80211_conf_set_bssid(WIFI_MODE_STA, NULL);
syscfg_save();
} else if (os_memcmp(sys_cfgs.bssid, mac, 6)) {
os_memcpy(sys_cfgs.bssid, mac, 6);
ieee80211_conf_set_bssid(WIFI_MODE_STA, sys_cfgs.bssid);
syscfg_save();
} else {
return ATCMD_RESULT_ERR;
}
}
}
return 0;
}
int32 sys_wifi_atcmd_set_encrypt(const char *cmd, char *argv[], uint32 argc)
{
int32 ret = -1;
if (argc == 1 && argv[0][0] == '?') {
if (sys_cfgs.key_mgmt == WPA_KEY_MGMT_NONE) {
ret = 0;
} else if (sys_cfgs.key_mgmt == WPA_KEY_MGMT_PSK) {
ret = 1;
} else if (sys_cfgs.key_mgmt == WPA_KEY_MGMT_SAE) {
ret = 2;
} else if (sys_cfgs.key_mgmt == WPA_KEY_MGMT_OWE) {
ret = 3;
}
atcmd_resp("%d", ret);
} else if (argc == 1) {
if ('1' == argv[0][0]) {
sys_cfgs.key_mgmt = WPA_KEY_MGMT_PSK;
ieee80211_conf_set_keymgmt(sys_cfgs.wifi_mode, sys_cfgs.key_mgmt);
syscfg_save();
} else if ('2' == argv[0][0]) {
sys_cfgs.key_mgmt = WPA_KEY_MGMT_SAE;
ieee80211_conf_set_keymgmt(sys_cfgs.wifi_mode, sys_cfgs.key_mgmt);
syscfg_save();
} else if ('3' == argv[0][0]) {
sys_cfgs.key_mgmt = WPA_KEY_MGMT_OWE;
ieee80211_conf_set_keymgmt(sys_cfgs.wifi_mode, sys_cfgs.key_mgmt);
syscfg_save();
} else if ('0' == argv[0][0]) {
sys_cfgs.key_mgmt = WPA_KEY_MGMT_NONE;
ieee80211_conf_set_keymgmt(sys_cfgs.wifi_mode, sys_cfgs.key_mgmt);
syscfg_save();
} else {
os_printf("encrypt atcmd err\r\n");
return ATCMD_RESULT_ERR;
}
}
return 0;
}
int32 sys_wifi_atcmd_set_ssid(const char *cmd, char *argv[], uint32 argc)
{
uint8 ifidx = (sys_cfgs.wifi_mode == WIFI_MODE_APSTA ? WIFI_MODE_STA : sys_cfgs.wifi_mode);
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%s", sys_cfgs.ssid);
} else if (argc == 1) {
os_memset(sys_cfgs.bssid, 0, 6);
os_strncpy(sys_cfgs.ssid, argv[0], SSID_MAX_LEN);
ieee80211_conf_set_bssid(ifidx, NULL);
if (os_strlen(sys_cfgs.passwd) > 0) {
wpa_passphrase(sys_cfgs.ssid, (char*)sys_cfgs.passwd, sys_cfgs.psk);
}
ieee80211_conf_set_ssid(ifidx, sys_cfgs.ssid);
ieee80211_conf_set_psk(ifidx, sys_cfgs.psk);
os_printf("set new ssid:%s\r\n", sys_cfgs.ssid);
syscfg_save();
}
return 0;
}
int32 sys_wifi_atcmd_set_key(const char *cmd, char *argv[], uint32 argc)
{
uint8 ifidx = (sys_cfgs.wifi_mode == WIFI_MODE_APSTA ? WIFI_MODE_STA : sys_cfgs.wifi_mode);
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%s", sys_cfgs.passwd);
} else if (argc == 1) {
// psk need 8 bytes at less
if (os_strlen(argv[0]) < 8) {
os_printf("psk need 8 bytes at less\r\n");
return ATCMD_RESULT_ERR;
} else {
os_strncpy(sys_cfgs.passwd, argv[0], PASSWD_MAX_LEN);
wpa_passphrase(sys_cfgs.ssid, (char*)sys_cfgs.passwd, sys_cfgs.psk);
ieee80211_conf_set_psk(ifidx, sys_cfgs.psk);
ieee80211_conf_set_passwd(ifidx, (char*)sys_cfgs.passwd);
os_printf("set new key:%s\r\n", sys_cfgs.passwd);
syscfg_save();
}
}
return 0;
}
int32 sys_wifi_atcmd_set_wifimode(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%s", sys_cfgs.wifi_mode == WIFI_MODE_AP ? "ap" : (sys_cfgs.wifi_mode == WIFI_MODE_APSTA ? "apsta" : "sta"));
} else if (argc == 1) {
if (os_strcasecmp(argv[0], "ap") == 0 && sys_cfgs.wifi_mode != WIFI_MODE_AP) {
sys_cfgs.wifi_mode = WIFI_MODE_AP;
ieee80211_iface_stop(WIFI_MODE_AP);
ieee80211_iface_stop(WIFI_MODE_STA);
wificfg_flush(WIFI_MODE_AP);
netdev_set_wifi_mode((struct netdev *)dev_get(HG_WIFI0_DEVID), WIFI_MODE_AP);
ieee80211_iface_start(WIFI_MODE_AP);
} else if (os_strcasecmp(argv[0], "sta") == 0 && sys_cfgs.wifi_mode != WIFI_MODE_STA) {
sys_cfgs.wifi_mode = WIFI_MODE_STA;
ieee80211_iface_stop(WIFI_MODE_AP);
ieee80211_iface_stop(WIFI_MODE_STA);
wificfg_flush(WIFI_MODE_STA);
netdev_set_wifi_mode((struct netdev *)dev_get(HG_WIFI0_DEVID), WIFI_MODE_STA);
ieee80211_iface_start(WIFI_MODE_STA);
} else if (os_strcasecmp(argv[0], "apsta") == 0 && sys_cfgs.wifi_mode != WIFI_MODE_APSTA) {
sys_cfgs.wifi_mode = WIFI_MODE_APSTA;
ieee80211_iface_stop(WIFI_MODE_AP);
ieee80211_iface_stop(WIFI_MODE_STA);
wificfg_flush(WIFI_MODE_AP);
ieee80211_iface_start(WIFI_MODE_AP);
wificfg_flush(WIFI_MODE_STA);
netdev_set_wifi_mode((struct netdev *)dev_get(HG_WIFI0_DEVID), WIFI_MODE_APSTA);
ieee80211_iface_start(WIFI_MODE_STA);
}
os_printf("set wifi mode:%s\r\n", argv[0]);
syscfg_save();
}
return 0;
}
int32 sys_wifi_atcmd_loaddef(const char *cmd, char *argv[], uint32 argc)
{
syscfg_loaddef("syscfg");
mcu_reset();
return 0;
}
int32 sys_wifi_atcmd_scan(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 2) {
struct ieee80211_scandata scan;
os_memset(&scan, 0, sizeof(scan));
scan.chan_bitmap = 0xffff;
scan.scan_cnt = os_atoi(argv[0]);
scan.scan_time = os_atoi(argv[1]);
ieee80211_scan(sys_cfgs.wifi_mode, 1, &scan);
} else {
ieee80211_scan(sys_cfgs.wifi_mode, 1, NULL);
}
return 0;
}
int32 sys_wifi_atcmd_pair(const char *cmd, char *argv[], uint32 argc)
{
uint32 magic = os_atoi(argv[0]);
ieee80211_pairing(sys_cfgs.wifi_mode, magic);
return 0;
}
int32 sys_wifi_atcmd_aphide(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%d", sys_cfgs.ap_hide);
} else if (argc == 1) {
sys_cfgs.ap_hide = os_atoi(argv[0]);
ieee80211_conf_set_aphide(sys_cfgs.wifi_mode, sys_cfgs.ap_hide);
syscfg_save();
}
return 0;
}
int32 sys_wifi_atcmd_hwmode(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%d", sys_cfgs.wifi_hwmode);
} else if (argc == 1) {
sys_cfgs.wifi_hwmode = os_atoi(argv[0]);
ieee80211_conf_set_hwmode(sys_cfgs.wifi_mode, sys_cfgs.wifi_hwmode);
syscfg_save();
}
return 0;
}
int32 sys_wifi_atcmd_ft(const char *cmd, char *argv[], uint32 argc)
{
#ifdef CONFIG_IEEE80211R
struct ieee80211_ft_param ft;
uint8 ifidx = (sys_cfgs.wifi_mode == WIFI_MODE_APSTA ? WIFI_MODE_STA : sys_cfgs.wifi_mode);
os_memset(&ft, 0, sizeof(ft));
str2mac(argv[0], ft.bssid_new);
os_printf("FT_start: target_bssid= "MACSTR" argc= %d\r\n", MAC2STR(ft.bssid_new), argc);
ieee80211_conf_set_ft(ifidx, &ft);
#endif
return 0;
}
#endif
#if WIFI_REPEATER_SUPPORT
int32 sys_wifi_atcmd_set_rssid(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%s", sys_cfgs.r_ssid);
} else if (argc == 1) {
if (sys_cfgs.wifi_mode == WIFI_MODE_APSTA) {
sys_cfgs.cfg_init = 1;
sys_cfgs.r_key_mgmt = sys_cfgs.key_mgmt;
os_strncpy(sys_cfgs.r_ssid, argv[0], SSID_MAX_LEN);
if (os_strlen(sys_cfgs.r_passwd) > 0) {
wpa_passphrase(sys_cfgs.r_ssid, sys_cfgs.r_passwd, sys_cfgs.r_psk);
}
ieee80211_conf_set_ssid(WIFI_MODE_AP, sys_cfgs.r_ssid);
ieee80211_conf_set_psk(WIFI_MODE_AP, sys_cfgs.r_psk);
atcmd_ok;
syscfg_save();
} else {
atcmd_error;
}
}
return 0;
}
int32 sys_wifi_atcmd_set_rkey(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%s", sys_cfgs.r_passwd);
} else if (argc == 1) {
if (os_strlen(argv[0]) < 8) {
atcmd_error;
atcmd_printf("rkey needs 8 bytes at least\r\n");
} else {
if (sys_cfgs.wifi_mode == WIFI_MODE_APSTA) {
sys_cfgs.cfg_init = 1;
sys_cfgs.r_key_mgmt = sys_cfgs.key_mgmt;
os_strncpy(sys_cfgs.r_passwd, argv[0], PASSWD_MAX_LEN);
wpa_passphrase(sys_cfgs.r_ssid, sys_cfgs.r_passwd, sys_cfgs.r_psk);
ieee80211_conf_set_psk(WIFI_MODE_AP, sys_cfgs.r_psk);
atcmd_ok;
syscfg_save();
} else {
atcmd_error;
}
}
}
return 0;
}
int32 sys_wifi_atcmd_set_rmode(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
if (sys_cfgs.wifi_mode == WIFI_MODE_APSTA) {
atcmd_resp("EN:%d LEVEL:%d MCAST:%d", sys_cfgs.relay_en, ieee80211_conf_get_relay_level(WIFI_MODE_AP), sys_cfgs.relay_mcast);
}
} else if (argc == 3) {
if (sys_cfgs.wifi_mode == WIFI_MODE_APSTA) {
if (sys_cfgs.relay_en != os_atoi(argv[0]) || sys_cfgs.relay_level != os_atoi(argv[1])) {
ieee80211_iface_stop(WIFI_MODE_AP);
ieee80211_iface_start(WIFI_MODE_AP);
ieee80211_iface_stop(WIFI_MODE_STA);
ieee80211_iface_start(WIFI_MODE_STA);
}
sys_cfgs.relay_en = os_atoi(argv[0]);
sys_cfgs.relay_level = os_atoi(argv[1]);
sys_cfgs.relay_mcast = os_atoi(argv[2]);
ieee80211_conf_set_relay_mode(WIFI_MODE_AP, sys_cfgs.relay_en, sys_cfgs.relay_level, sys_cfgs.relay_mcast);
ieee80211_conf_set_relay_mode(WIFI_MODE_STA, sys_cfgs.relay_en, sys_cfgs.relay_level, sys_cfgs.relay_mcast);
atcmd_ok;
syscfg_save();
} else {
atcmd_error;
}
}
return 0;
}
#endif
#if BLE_SUPPORT
int32 sys_ble_atcmd_blenc(const char *cmd, char *argv[], uint32 argc)
{
uint8 mode = 0;
if (argc == 1) {
mode = os_atoi(argv[0]);
if (ble_set_mode(mode, 38)) {
return ATCMD_RESULT_ERR;
} else {
if (mode == 0) {
os_printf("\n\nble close \r\n\n");
} else {
os_printf("\n\nset ble mode = %d \r\n\n", mode);
}
}
}
return 0;
}
int32 sys_ble_atcmd_set_coexist_en(const char *cmd, char *argv[], uint32 argc)
{
uint8 coexist, dec_duty;
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("coexist,dec_duty");
} else if (argc == 2) {
coexist = os_atoi(argv[0]);
dec_duty = os_atoi(argv[1]);
if (ble_set_coexist_en(coexist, dec_duty)) {
return ATCMD_RESULT_ERR;
}
}
return 0;
}
#endif
#if SYS_NETWORK_SUPPORT
int32 sys_wifi_atcmd_wificsa(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 4) {
struct ieee80211_csa_param csa;
csa.mode = os_atoi(argv[1]);
csa.chan = os_atoi(argv[2]);
csa.count = os_atoi(argv[3]);
return ieee80211_conf_set_csa(os_atoi(argv[0]), &csa);
}else{
return -1;
}
}
int32 sys_atcmd_ping(const char *cmd, char *argv[], uint32 argc) //need: #define LWIP_RAW 1
{
int32 loop_cnt = 10;
int32 pkt_size = 32;
if (argc > 0) {
if (argc > 1) { loop_cnt = os_atoi(argv[1]); }
if (argc > 2) { pkt_size = os_atoi(argv[2]); }
lwip_ping(argv[0], pkt_size, loop_cnt);
}
return 0;
}
int32 sys_atcmd_icmp_mntr(const char *cmd, char *argv[], uint32 argc)
{
struct netdev *ndev;
if (argc == 2) {
ndev = (struct netdev *)dev_get(HG_WIFI0_DEVID + os_atoi(argv[0]));
if (ndev) {
netdev_ioctl(ndev, NETDEV_IOCTL_ENABLE_ICMPMNTR, os_atoi(argv[1]), 0);
return ATCMD_RESULT_OK;
}
}
return ATCMD_RESULT_ERR;
}
int32 sys_atcmd_iperf2(const char *cmd, char *argv[], uint32 argc)
{
int32 ret = 0;
if (argc == 1 && argv[0][0] == '?') {
os_printf(" *********iperf usage*********\n");
os_printf(" TCP client:at+iperf2=c,ip,port,time\n");
os_printf(" TCP server:at+iperf2=s,port\n");
os_printf(" UDP client:at+iperf2=u,c,ip,port,time,bandwidth,packet_len\n");
os_printf(" UDP server:at+iperf2=u,s,port\n");
os_printf(" *******************************\n");
} else {
if (argc > 0) {
if(os_strlen(argv[0]) != 1) {
os_printf("%s,%d:Invaild param1,must be c or s or u\n");
return -EINVAL;
}
if (argv[0][0] == 'c' || argv[0][0] == 'C') {
if (argc < 4) {
os_printf("TCP client mode requires 4 parameters: mode,ip,port,time\n");
return -EINVAL;
}
os_printf("%s:iperf2 TCP CLIENT mode,remote IP:%s,port:%d,time:%d\n",
__FUNCTION__, argv[1], os_atoi(argv[2]), os_atoi(argv[3]));
ret = sys_lwiperf_tcp_client_start(argv[1], os_atoi(argv[2]), os_atoi(argv[3]));
} else if (argv[0][0] == 's' || argv[0][0] == 'S') {
if (argc < 2) {
os_printf("TCP server mode requires 2 parameters: mode port\n");
return -EINVAL;
}
os_printf("%s:iperf2 TCP Server mode,port:%d\n", __FUNCTION__, os_atoi(argv[1]));
ret = sys_lwiperf_tcp_server_start(os_atoi(argv[1]));
} else if (argv[0][0] == 'u' || argv[0][0] == 'U') {//UDP
if (argc < 2) {
os_printf("UDP mode requires at least 2 arguments.\n");
return -EINVAL;
}
if(os_strlen(argv[1]) != 1) {
os_printf("%s,%d:Invaild param2,must be c or s\n");
return -EINVAL;
}
if (argv[1][0] == 'c' || argv[1][0] == 'C') {
if (argc < 7) {
os_printf("UDP client mode requires 7 parameters: u c ip port time bandwidth packet_len\n");
return -EINVAL;
}
os_printf("%s:iperf2 UDP CLIENT mode,remote IP:%s,port:%d,time:%d,bandwidth:%u,len:%d\n",
__FUNCTION__,
argv[2],//ip
os_atoi(argv[3]), //port
os_atoi(argv[4]), //time
os_atoi(argv[5]),//bandwidth
os_atoi(argv[6]));//packet_len
ret = sys_lwiperf_udp_client_start(argv[2], os_atoi(argv[3]), os_atoi(argv[4]),
os_atoi(argv[5]), os_atoi(argv[6]));//UDP CLIENT
} else if (argv[1][0] == 's' || argv[1][0] == 'S') {
if (argc < 3) {
os_printf("UDP server mode requires 4 parameters: u s port\n");
return -EINVAL;
}
os_printf("%s:iperf2 UDP SERVER mode,port:%d\n",
__FUNCTION__, os_atoi(argv[2])); //port
ret = sys_lwiperf_udp_server_start(os_atoi(argv[2]));//UDP SERVER
} else {
os_printf("Unknow iperf udp mode:%s\n", argv[1]);
return -ENOENT;
}
} else {
os_printf("Unknow iperf mode:%s\n", argv[0]);
return -ENOENT;
}
}
}
return ret;
}
int32 sys_wifi_atcmd_pcap(const char *cmd, char *argv[], uint32 argc)
{
char *file = NULL;
if (argc == 2) {
file = pcap_start(netif_find(argv[0]), argv[1]);
return file ? ATCMD_RESULT_OK : -1;
}else{
pcap_stop(netif_find(argv[0]));
return ATCMD_RESULT_OK;
}
}
int32 sys_wifi_atcmd_dhcpd_lease_time(const char *cmd, char *argv[], uint32 argc)
{
if (argc == 1 && argv[0][0] == '?') {
atcmd_resp("%d", sys_cfgs.dhcpd_lease_time);
} else if (argc == 1) {
sys_cfgs.dhcpd_lease_time = os_atoi(argv[0]);
os_printf("DHCP lease time set to %d\r\n", sys_cfgs.dhcpd_lease_time);
syscfg_save();
}
return 0;
}
#endif