ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers factory_test.cpp Source File

factory_test.cpp

00001 #if defined(TARGET_UNO_91H)
00002 #include "mbed.h"
00003 #include "rtos.h"
00004 #include "console.h"
00005 #include "WiFiStackInterface.h"
00006 #include "rda_wdt_api.h"
00007 #include "rda_ccfg_api.h"
00008 #include "cmsis_os.h"
00009 #include "rda_wdt_api.h"
00010 #include "Rda58xx.h"
00011 
00012 static char* version = "**********RDA Software Version sta_V2.0_124**********";
00013 static int op_mode = 0;//initial ~ 0 factory test ~ 1 function ~ 2
00014 static char conn_flag = 0;
00015 static WiFiStackInterface wifi;
00016 extern unsigned char rda_mac_addr[6];
00017 extern rda58xx _rda58xx;
00018 
00019 int do_conn_state(cmd_tbl_t* cmd, int argc, char* argv[]) {
00020     if (op_mode != 1) {
00021         return 0;
00022     }
00023 
00024     if (argc < 1) {
00025         show_cmd_usage(cmd);
00026         return -1;
00027     }
00028 
00029 #if 1
00030     const char* ssid;
00031     ssid = wifi.get_ssid();
00032 
00033     if (ssid[0]) {
00034         printf("CONNECTED! ssid:%s RSSI:%d db ip:%s\r\n", wifi.get_ssid(), wifi.get_rssi(),
00035                wifi.get_ip_address());
00036     } else {
00037         printf("NOT CONNECTED!\r\n");
00038     }
00039 
00040 #else
00041 
00042     if (wifi.bss.SSID[0]) {
00043         printf("CONNECTED! ssid:%s RSSI:%d db\r\n", wifi.bss.SSID, wifi.bss.SSID);
00044     } else {
00045         printf("NOT CONNECTED!\r\n");
00046     }
00047 
00048 #endif
00049     return 0;
00050 }
00051 
00052 int do_get_mac(cmd_tbl_t* cmd, int argc, char* argv[]) {
00053     if (op_mode != 1) {
00054         return 0;
00055     }
00056 
00057     if (argc < 1) {
00058         show_cmd_usage(cmd);
00059         return -1;
00060     }
00061 
00062     char mac[6];
00063     mbed_mac_address(mac);
00064     printf("MAC address: %02x:%02x:%02x:%02x:%02x:%02x\r\n",
00065            mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
00066 
00067     return 0;
00068 }
00069 
00070 int do_set_mac(cmd_tbl_t* cmd, int argc, char* argv[]) {
00071     char* mdata, mac[6], i;
00072 
00073     if (op_mode != 1) {
00074         return 0;
00075     }
00076 
00077     if (argc < 2) {
00078         show_cmd_usage(cmd);
00079         return -1;
00080     }
00081 
00082     if (strlen(argv[1]) != 12) {
00083         printf("Error MAC address len\r\n");
00084         return -2;
00085     }
00086 
00087     mdata = argv[1];
00088 
00089     for (i = 0; i < 12; i++) {
00090         if (mdata[i] >= 0x41 && mdata[i] <= 0x46) { // switch 'A' to 'a'
00091             mdata[i] += 0x20;
00092         }
00093 
00094         if (mdata[i] >= 0x61 && mdata[i] <= 0x66) { //switch "ab" to 0xab
00095             mac[i] = mdata[i] - 0x57;
00096         }
00097 
00098         if (mdata[i] >= 0x30 && mdata[i] <= 0x39) {
00099             mac[i] = mdata[i] - 0x30;
00100         }
00101 
00102         if (i % 2 == 1) {
00103             mac[i / 2] = mac[i - 1] << 4 | mac[i];
00104         }
00105     }
00106 
00107     if (!mac_is_valid(mac)) {
00108         printf("MAC is ZERO\r\n");
00109         return 0;
00110     }
00111 
00112     memcpy(rda_mac_addr, mac, 6);
00113     rda5981_flash_write_mac_addr(rda_mac_addr);
00114     return 0;
00115 }
00116 
00117 int do_get_ver(cmd_tbl_t* cmd, int argc, char* argv[]) {
00118     if (op_mode != 1) {
00119         return 0;
00120     }
00121 
00122     if (argc < 1) {
00123         show_cmd_usage(cmd);
00124         return -1;
00125     }
00126 
00127     printf("Software Version: %s\r\n", version);
00128     return 0;
00129 }
00130 
00131 int do_get_ver_5856(cmd_tbl_t* cmd, int argc, char* argv[]) {
00132     char ver[32] = {0};
00133     rda58xx_at_status ret;
00134 
00135     if (op_mode != 1) {
00136         return 0;
00137     }
00138 
00139     if (argc < 1) {
00140         show_cmd_usage(cmd);
00141         return -1;
00142     }
00143 
00144     printf("do_get_ver_5856\r\n");
00145 
00146     while (!_rda58xx.isPowerOn()) {
00147         Thread::wait(100);
00148     }
00149 
00150     ret = _rda58xx.getChipVersion(ver);
00151 
00152     if (VACK == ret) {
00153         printf("5856 Software Version: %s\r\n", ver);
00154         return 0;
00155     } else {
00156         printf("5856 Software Version: Fail!\r\n");
00157         return -1;
00158     }
00159 }
00160 
00161 int do_factory_test_5856(cmd_tbl_t* cmd, int argc, char* argv[]) {
00162     rda58xx_at_status ret;
00163 
00164     if (op_mode != 1) {
00165         return 0;
00166     }
00167 
00168     if (argc < 1) {
00169         show_cmd_usage(cmd);
00170         return -1;
00171     }
00172 
00173     printf("do_factory_test_5856\r\n");
00174     ret = _rda58xx.factoryTest(FT_ENABLE);
00175 
00176     if (VACK == ret) {
00177         printf("5856 Factory Test: Succeed\r\n");
00178         return 0;
00179     } else {
00180         printf("5856 Factory Test: Fail\r\n");
00181         return -1;
00182     }
00183 }
00184 
00185 
00186 int do_write_usedata(cmd_tbl_t* cmd, int argc, char* argv[]) {
00187 
00188     int len, ret, tmp_len = 0;
00189     unsigned char* buf;
00190 
00191     if (op_mode != 1) {
00192         return 0;
00193     }
00194 
00195     if (argc < 2) {
00196         show_cmd_usage(cmd);
00197         return -1;
00198     }
00199 
00200     len = atoi(argv[1]);
00201     buf = (unsigned char*)malloc(len);
00202     memset(buf, 0, len);
00203 
00204     do {
00205         unsigned int size;
00206         size = console_fifo_get(buf + tmp_len, len - tmp_len);
00207         tmp_len += size;
00208     } while (tmp_len < len);
00209 
00210     ret = rda5981_flash_write_3rdparter_data(buf, len);
00211 
00212     if (ret < 0) {
00213         printf("write flash error, error %d\r\n", ret);
00214     } else {
00215         printf("Data write complete\r\n");
00216     }
00217 
00218     free(buf);
00219     return 0;
00220 }
00221 
00222 int do_read_usedata(cmd_tbl_t* cmd, int argc, char* argv[]) {
00223 
00224     int len = 0, ret = -1;
00225     unsigned char* buf;
00226 
00227     if (op_mode != 1) {
00228         return 0;
00229     }
00230 
00231     if (argc != 1) {
00232         show_cmd_usage(cmd);
00233         return -1;
00234     }
00235 
00236     len  = rda5981_flash_read_3rdparter_data_length();
00237 
00238     if (len < 0) {
00239         printf("No user data in flah\r\n");
00240         return -1;
00241     }
00242 
00243     buf = (unsigned char*)malloc(len + 1);
00244     memset(buf, 0, len + 1);
00245 
00246     ret = rda5981_flash_read_3rdparter_data(buf, len);
00247 
00248     if (ret < 0) {
00249         printf("read flash error, error %d\r\n", ret);
00250     } else {
00251         printf("Data read complete, len:%d\r\n", ret);
00252     }
00253 
00254     buf[len] = 0;
00255     console_puts((char*)buf);
00256     printf("\n");
00257     free(buf);
00258     return 0;
00259 }
00260 
00261 int do_reset(cmd_tbl_t* cmd, int argc, char* argv[]) {
00262     if (op_mode != 1) {
00263         return 0;
00264     }
00265 
00266     if (argc < 1) {
00267         show_cmd_usage(cmd);
00268         return -1;
00269     }
00270 
00271     printf("SOFTWARE RESET!!!!\r\n");
00272     rda_wdt_softreset();
00273     return 0;
00274 
00275 }
00276 
00277 int do_conn(cmd_tbl_t* cmd, int argc, char* argv[]) {
00278     char* ssid_t, *pw_t;
00279     const char* ip_addr;
00280     char ssid[20];
00281     char pw[20];
00282 
00283     if (op_mode != 1) {
00284         return 0;
00285     }
00286 
00287     if (conn_flag == 1) {
00288         printf("error! Has been connected!");
00289         return -1;
00290     }
00291 
00292     printf("OK, start connect\r\n");
00293 
00294     if (argc < 1) {
00295         show_cmd_usage(cmd);
00296         return -1;
00297     }
00298 
00299     memset(ssid, 0, sizeof(ssid));
00300     memset(pw, 0, sizeof(pw));
00301 
00302     if (argc > 1) {
00303         memcpy(ssid, argv[1], strlen(argv[1]));
00304     }
00305 
00306     if (argc > 2) {
00307         memcpy(pw, argv[2], strlen(argv[2]));
00308     }
00309 
00310     if (strlen(ssid) != 0) {
00311         ssid_t = ssid;
00312     } else {
00313         ssid_t = NULL;
00314     }
00315 
00316     if (strlen(pw) != 0) {
00317         pw_t = pw;
00318     } else {
00319         pw_t = NULL;
00320     }
00321 
00322     printf("ssid %s pw %s\r\n", ssid_t, pw_t);
00323 
00324     wifi.connect(ssid_t, pw_t, NSAPI_SECURITY_NONE);
00325 
00326     while (!wifi.get_ip_address());
00327 
00328     ip_addr = wifi.get_ip_address();
00329 
00330     if (ip_addr) {
00331         printf("Client IP Address is %s\r\n", ip_addr);
00332     } else {
00333         printf("No Client IP Address\r\n");
00334     }
00335 
00336     conn_flag = 1;
00337     //rda5981_flash_write_smartconfig_data();
00338     return 0;
00339 }
00340 
00341 int do_disconn(cmd_tbl_t* cmd, int argc, char* argv[]) {
00342     if (op_mode != 1) {
00343         return 0;
00344     }
00345 
00346     if (argc < 1) {
00347         show_cmd_usage(cmd);
00348         return -1;
00349     }
00350 
00351     if (conn_flag == 0) {
00352         printf("Not connectted!\r\n");
00353         return 0;
00354     }
00355 
00356     wifi.disconnect();
00357 
00358     while (wifi.get_ip_address() != NULL) {
00359         Thread::wait(20);
00360     }
00361 
00362     conn_flag = 0;
00363     //printf("OK, Disconnect successful\r\n");
00364     return 0;
00365 }
00366 
00367 int do_set_baud(cmd_tbl_t* cmd, int argc, char* argv[]) {
00368     unsigned int baudrate;
00369 
00370     if (op_mode != 1) {
00371         return 0;
00372     }
00373 
00374     if (argc < 2) {
00375         show_cmd_usage(cmd);
00376         return -1;
00377     }
00378 
00379     printf("OK, do set baud\r\n");
00380     baudrate = atoi(argv[1]);
00381     console_set_baudrate(baudrate);
00382 
00383     return 0;
00384 }
00385 
00386 void add_cmd() {
00387     int i;
00388     cmd_tbl_t cmd_list[] = {
00389         {
00390             "reset",      1,   do_reset,
00391             "reset        - Software Reset\n"
00392         },
00393         {
00394             "conn",       3,   do_conn,
00395             "conn         - start connect\n"
00396         },
00397         {
00398             "setbaud",    2,   do_set_baud,
00399             "setbaud      - set serial baudrate\n"
00400         },
00401         {
00402             "connstate",  1,   do_conn_state,
00403             "connstate    - get conn state\n"
00404         },
00405         {
00406             "setmac",     2,   do_set_mac,
00407             "setmac       - set mac address\n"
00408         },
00409         {
00410             "getmac",     1,   do_get_mac,
00411             "getmac       - get mac address\n"
00412         },
00413         {
00414             "getver",     1,   do_get_ver,
00415             "getver       - get version\n"
00416         },
00417         {
00418             "getver5856", 1,   do_get_ver_5856,
00419             "getver5856   - get 5856 version\n"
00420         },
00421         {
00422             "ftest5856",  1,   do_factory_test_5856,
00423             "ftest5856    - 5856 factory test\n"
00424         },
00425         {
00426             "disconn",    1,   do_disconn,
00427             "disconn      - start disconnect\n"
00428         },
00429         {
00430             "wuserdata",  2,   do_write_usedata,
00431             "wusedate     - write user data\n"
00432         },
00433         {
00434             "ruserdata",  1,   do_read_usedata,
00435             "ruserdate     - read user data\n"
00436         },
00437     };
00438     i = sizeof(cmd_list) / sizeof(cmd_tbl_t);
00439 
00440     while (i--) {
00441         if (0 != console_cmd_add(&cmd_list[i])) {
00442             printf("Add cmd failed\r\n");
00443         }
00444     }
00445 }
00446 
00447 int factory_test() {
00448     unsigned int flag = (*((volatile unsigned int*)(0x40001024UL)));
00449 
00450     //printf("flag = %x\r\n", flag);
00451     if ((flag & (0x01UL << 29)) == 0) {
00452         return 0;
00453     }
00454 
00455     op_mode = 1;
00456     console_init();
00457     add_cmd();
00458 
00459     while (1);
00460 
00461     //return 0;
00462 }
00463 #endif