diff --git a/RTL00_SDKV35a/component/common/api/wifi_api.c b/RTL00_SDKV35a/component/common/api/wifi_api.c index 082be19..dbcbba7 100644 --- a/RTL00_SDKV35a/component/common/api/wifi_api.c +++ b/RTL00_SDKV35a/component/common/api/wifi_api.c @@ -420,7 +420,7 @@ LOCAL rtw_result_t StartStDHCPClient(void) p->ip = pnetif->ip_addr.addr; p->gw = pnetif->gw.addr; p->mask = pnetif->netmask.addr; - if(p->mode > 2) { // 3+ Auto fix + if(mode > 2) { // 3+ Auto fix p->mode = 2; // fixed ip write_wifi_cfg(BID_ST_DHCP_CFG); } diff --git a/RTL00_SDKV35a/component/common/example/bcast/example_bcast.c b/RTL00_SDKV35a/component/common/example/bcast/example_bcast.c new file mode 100644 index 0000000..dfb1675 --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/bcast/example_bcast.c @@ -0,0 +1,81 @@ +#include "FreeRTOS.h" +#include "task.h" +#include + +#include +#include +#include + +static void example_bcast_thread(void *param) +{ + int socket = -1; + int broadcast = 1; + struct sockaddr_in bindAddr; + uint16_t port = 49152; + unsigned char packet[1024]; + + // Create socket + if((socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + printf("ERROR: socket failed\n"); + goto err; + } + + // Set broadcast socket option + if(setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) < 0){ + printf("ERROR: setsockopt failed\n"); + goto err; + } + + // Set the bind address + memset(&bindAddr, 0, sizeof(bindAddr)); + bindAddr.sin_family = AF_INET; + bindAddr.sin_port = htons(port); + bindAddr.sin_addr.s_addr = INADDR_ANY; + if(bind(socket, (struct sockaddr *) &bindAddr, sizeof(bindAddr)) < 0){ + printf("ERROR: bind failed\n"); + goto err; + } + + + while(1) { + // Receive broadcast + int packetLen; + struct sockaddr from; + struct sockaddr_in *from_sin = (struct sockaddr_in*) &from; + socklen_t fromLen = sizeof(from); + + if((packetLen = recvfrom(socket, &packet, sizeof(packet), 0, &from, &fromLen)) >= 0) { + uint8_t *ip = (uint8_t *) &from_sin->sin_addr.s_addr; + uint16_t from_port = ntohs(from_sin->sin_port); + printf("recvfrom - %d bytes from %d.%d.%d.%d:%d\n", packetLen, ip[0], ip[1], ip[2], ip[3], from_port); + } + + // Send broadcast + if(packetLen > 0) { + int sendLen; + struct sockaddr to; + struct sockaddr_in *to_sin = (struct sockaddr_in*) &to; + to_sin->sin_family = AF_INET; + to_sin->sin_port = htons(port); + to_sin->sin_addr.s_addr = INADDR_ANY; + + if((sendLen = sendto(socket, packet, packetLen, 0, &to, sizeof(struct sockaddr))) < 0) + printf("ERROR: sendto broadcast\n"); + else + printf("sendto - %d bytes to broadcast:%d\n", sendLen, port); + } + } + + +err: + printf("ERROR: broadcast example failed\n"); + close(socket); + vTaskDelete(NULL); + return; +} + +void example_bcast(void) +{ + if(xTaskCreate(example_bcast_thread, ((const char*)"example_bcast_thread"), 2048, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) + printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); +} diff --git a/RTL00_SDKV35a/component/common/example/bcast/example_bcast.h b/RTL00_SDKV35a/component/common/example/bcast/example_bcast.h new file mode 100644 index 0000000..56e557c --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/bcast/example_bcast.h @@ -0,0 +1,6 @@ +#ifndef EXAMPLE_BCAST_H +#define EXAMPLE_BCAST_H + +void example_bcast(void); + +#endif /* EXAMPLE_BCAST_H */ diff --git a/RTL00_SDKV35a/component/common/example/bcast/readme.txt b/RTL00_SDKV35a/component/common/example/bcast/readme.txt new file mode 100644 index 0000000..95e70a2 --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/bcast/readme.txt @@ -0,0 +1,28 @@ +LWIP BROADCAST EXAMPLE + +Description: +Listen broadcast message on port 49152. +Send packet with the content of received packet to broadcast address. + +Configuration: +[lwipopts.h] + #define LWIP_UDP 1 +[platform_opts.h] + #define CONFIG_EXAMPLE_BCAST 1 + +Execution: +Can make automatical Wi-Fi connection when booting by using wlan fast connect example. +A broadcast example thread will be started automatically when booting. + +Test: +1. Prepare a NB and connect to the same AP Ameba connected. +2. NB: iperf -c 192.168.1.255 -t 60 -i 1 -p 49152 -u +3. The recv/send messages should be printed out on Ameba console. +4. Use sniffer to make sure the packets send from Ameba are broadcast messages. + +Note: +If you encounter some message like: + ERROR: sendto broadcast + [Driver]: skb_unavailable=1 in last 2 seconds +It means that the skb buffer is not enough for the massive UDP packets to be sent. +If you want to prevent the error you can add some delay time between sending packets or enlarge the skb buffer configuration. \ No newline at end of file diff --git a/RTL00_SDKV35a/component/common/example/cJSON/cJSON_example.c b/RTL00_SDKV35a/component/common/example/cJSON/cJSON_example.c index 6f422be..f336a36 100644 --- a/RTL00_SDKV35a/component/common/example/cJSON/cJSON_example.c +++ b/RTL00_SDKV35a/component/common/example/cJSON/cJSON_example.c @@ -1,10 +1,7 @@ #include "cmsis_os.h" #include -#undef malloc #define malloc pvPortMalloc - -#undef free #define free vPortFree /* The data structure for this example diff --git a/RTL00_SDKV35a/component/common/example/dct/README.txt b/RTL00_SDKV35a/component/common/example/dct/README.txt new file mode 100644 index 0000000..f3441bd --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/dct/README.txt @@ -0,0 +1,16 @@ +DCT example + +Description: +This example shows device configuration table API usage, and user can use DCT api to replace file system. + +Configuration: +1. [platform_opts.h] + #define CONFIG_EXAMPLE_DCT 1 + +Execution: +it will show: + variable0: value0 + variable1: value1 + Delete variable0 success. + Remaining amount: 61 +if DCT is correctly used. \ No newline at end of file diff --git a/RTL00_SDKV35a/component/common/example/dct/example_dct.c b/RTL00_SDKV35a/component/common/example/dct/example_dct.c new file mode 100644 index 0000000..a55d58d --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/dct/example_dct.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include +#include +#include + +#if CONFIG_EXAMPLE_DCT + +#define DCT_BEGIN_ADDR 0x100000 /*!< DCT begin address of flash, ex: 0x100000 = 1M */ +#define MODULE_NUM 6 /*!< max number of module */ +#define VARIABLE_NAME_SIZE 32 /*!< max size of the variable name */ +#define VARIABLE_VALUE_SIZE 32 /*!< max size of the variable value */ + +static char example_dct_module[] = "dct_test_module"; +static char example_dct_variable0[] = "variable0"; +static char example_dct_variable1[] = "variable1"; +static char example_dct_value0[] = "value0"; +static char example_dct_value1[] = "value1"; + +void example_dct_thread(void* param){ + int32_t ret = -1; + dct_handle_t dct_handle; + char value[16]; + + // format DCT, use for the first time + ret = dct_format(DCT_BEGIN_ADDR, MODULE_NUM, VARIABLE_NAME_SIZE, VARIABLE_VALUE_SIZE, 1); + + // initial DCT + ret = dct_init(DCT_BEGIN_ADDR); + + // register module + ret = dct_register_module(example_dct_module); + + // open module + ret = dct_open_module(&dct_handle, example_dct_module); + + if(ret == DCT_SUCCESS){ + // set test variable 0 + ret = dct_set_variable(&dct_handle, example_dct_variable0, example_dct_value0); + + // set test variable 1 + ret = dct_set_variable(&dct_handle, example_dct_variable1, example_dct_value1); + + // get value of test variable 0 + memset(value, 0, sizeof(value)); + ret = dct_get_variable(&dct_handle, example_dct_variable0, value, sizeof(value)); + if(ret == DCT_SUCCESS) + printf("%s: %s\n", example_dct_variable0, value); + + // get value of test variable 1 + memset(value, 0, sizeof(value)); + ret = dct_get_variable(&dct_handle, example_dct_variable1, value, sizeof(value)); + if(ret == DCT_SUCCESS) + printf("%s: %s\n", example_dct_variable1, value); + + // delete test variable 0 + ret = dct_delete_variable(&dct_handle, example_dct_variable0); + + // get value of test variable 0 + memset(value, 0, sizeof(value)); + ret = dct_get_variable(&dct_handle, example_dct_variable0, value, sizeof(value)); + if(ret == DCT_ERR_NOT_FIND) + printf("Delete %s success.\n", example_dct_variable0); + + // get variable remaining amount + ret = dct_remain_variable(&dct_handle); + if(ret > 0) + printf("Remaining variable amount:%d\n", ret); + + // close module + ret = dct_close_module(&dct_handle); + } + + vTaskDelete(NULL); +} + + +void example_dct(void) +{ + if(xTaskCreate(example_dct_thread, ((const char*)"example_dct_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) + printf("\n\r%s xTaskCreate(example_dct_thread) failed", __FUNCTION__); +} + +#endif // #if CONFIG_DCT diff --git a/RTL00_SDKV35a/component/common/example/dct/example_dct.h b/RTL00_SDKV35a/component/common/example/dct/example_dct.h new file mode 100644 index 0000000..ea0b4f7 --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/dct/example_dct.h @@ -0,0 +1,7 @@ +#ifndef _EXAMPLE_DCT_H +#define _EXAMPLE_DCT_H + +void example_dct(void); + +#endif /* _EXAMPLE_DCT_H */ + diff --git a/RTL00_SDKV35a/component/common/example/eap/example_eap.c b/RTL00_SDKV35a/component/common/example/eap/example_eap.c new file mode 100644 index 0000000..05bbe63 --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/eap/example_eap.c @@ -0,0 +1,164 @@ +#include +#include +#include "FreeRTOS.h" +#include "task.h" +#include + +#if CONFIG_EXAMPLE_EAP + +// get config arguments from wifi_eap_config.c +extern char *eap_target_ssid; +extern char *eap_identity; +extern char *eap_password; +extern const unsigned char *eap_ca_cert; +extern const unsigned char *eap_client_cert; +extern const unsigned char *eap_client_key; +extern char *eap_client_key_pwd; + +void example_eap_config(void){ + eap_target_ssid = "Test_eap"; + eap_identity = "guest2"; + eap_password = "test2"; + +/* + Set client cert is only used for EAP-TLS connection. + If you are not using EAP-TLS method, no need to set eap_client_cert and eap_client_key value. (leave them to NULL value) +*/ +/* + eap_client_cert = \ +"-----BEGIN CERTIFICATE-----\r\n" \ +"MIIC9TCCAd0CAQIwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNVBAYTAkZSMQ8wDQYD\r\n" \ +"VQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBs\r\n" \ +"ZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UE\r\n" \ +"AxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTYwMzE0MTEzNjMy\r\n" \ +"WhcNMTcwMzE0MTEzNjMyWjBxMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVz\r\n" \ +"MRUwEwYDVQQKEwxFeGFtcGxlIEluYy4xGTAXBgNVBAMUEHVzZXJAZXhhbXBsZS5j\r\n" \ +"b20xHzAdBgkqhkiG9w0BCQEWEHVzZXJAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcN\r\n" \ +"AQEBBQADgY0AMIGJAoGBAODvCWRRjVQnUyQS/OqHS8MA94Dc5UOtLagKTOMJayB5\r\n" \ +"3MZyreWBkNg6sDfDG6OSD9tkVzwcp8CtZNflJc3i+d+nAnPM+kJedPJN5YVO+uwc\r\n" \ +"+K+QObH7fEOq8hnFIvOtYOfnMAxQKaVIKk0EOqqQv06BDvLyxoDCZNpAn4NQ8ZkR\r\n" \ +"AgMBAAEwDQYJKoZIhvcNAQEEBQADggEBAItqpmFftRu8ugTy4fRFwpjJNUuMRe83\r\n" \ +"Pm5Dv3V/byCHHdmIy0UI+6ZiMEtYrpvz4ZPgk0BDeytYooT7/kEUb8niQ64bDLYo\r\n" \ +"NcXctCmn5fjyX2M6Z3lQXCxX0XdFiukWlR21w4HO0nx7OJjrcjdpP9Tyk/kzCFl7\r\n" \ +"pblIavkfSmFtcxzcp0IoCupkUjFkA+MftZF82eQx4bE0jjiw2KgGwnzyYAdgtFXv\r\n" \ +"Ednj3ZyOuTlOQNGJgLQxyHooEJ/Tol/8p9EO5S6eQaHgZhbGP3AZ3SWV5oA0e6eT\r\n" \ +"D5JXti/LhyZhcbbJFawGXFI96ZOpHJ0EW12Osx/21oqmMp12AotS5Vw=\r\n" \ +"-----END CERTIFICATE-----\r\n"; + eap_client_key = \ +"-----BEGIN RSA PRIVATE KEY-----\r\n" \ +"Proc-Type: 4,ENCRYPTED\r\n" \ +"DEK-Info: DES-EDE3-CBC,79675299AD6E2237\r\n" \ +"\r\n" \ +"ZYY2hv1PYEsrhYbCip98XNpS6XxbntynEEp6aO9UgWeQ4I1pNOUptPUE+yNhbA7X\r\n" \ +"59ueT3yzx5L2ObImlJ3eIEvWq+iB8DdcPqFAo3c4dgfw/wPEhmxVPKvIyDQfaEuA\r\n" \ +"kWUno6b07n5uLTpQjIXQSdMTMYjYS+yPQy7ONC/vl/Ce+RMzrQAZkp5xcNNarUpl\r\n" \ +"2J1D2t+eRih/zRrgeVXztMiW2uyIT5a0IPoeBTPkPVb00kWYzn8eT9doN/ZCyr83\r\n" \ +"mv/uXF5ZOHnSNleOn1NiCZ8Uu3SHnmGhMBBMI75OghpEezQQCmtefYvtRxzGjMVB\r\n" \ +"UoRIlbATAleUjk3bmqRxfA2QZJj/GFWc9grxEerHWrdThSQ0w+fvwKBjTmEtUO2+\r\n" \ +"stKBJQi9RKFq4naM8UhtxojHIscXCx/wKrRZHS4QJYOQYelzfhTRUuTf3Czm/iTh\r\n" \ +"MQvX7dITNlLE3SW2MjzHb2ON9qUaKVnQPk53DO1zYgoxgDbQrw6FXDNMtYVv8SYf\r\n" \ +"JJZp66jGX6e1t4ziPHVqlDi5D2nWQ2DPNHO/rsoydA7icncKsC0iVzeUm7XgesxD\r\n" \ +"QEZoQIQDVS1aRE7qJCk9S2Hfe5Gfqnrp4110YuN/4khjMW2cOCKa/Yjgjyy2QQXT\r\n" \ +"nn6dBAeSWGzRM059VzhOyls5FIfnJIisZvF3JG518SzBU/YUGHEVN1XsfDS2M9/q\r\n" \ +"VkqhJ8/vbmIddKGeYULYW+xs3LvU1hnWiOodd9tuSeg5PxAbkJsV1nW06mVkgBqA\r\n" \ +"zqqEvwvY+6+9QW4PClKNKSocvM6yC+uhRi0sOZ+ckOv7f+uuMyw5FQ==\r\n" \ +"-----END RSA PRIVATE KEY-----\r\n"; + eap_client_key_pwd = "testca"; +*/ + eap_client_cert = \ +"-----BEGIN CERTIFICATE-----\r\n" \ +"MIIC9zCCAd8CAQMwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNVBAYTAkZSMQ8wDQYD\r\n" \ +"VQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBs\r\n" \ +"ZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UE\r\n" \ +"AxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTYwMzE1MDgwNzEx\r\n" \ +"WhcNMTcwMzE1MDgwNzExWjBzMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVz\r\n" \ +"MRUwEwYDVQQKEwxFeGFtcGxlIEluYy4xGjAYBgNVBAMUEXVzZXIyQGV4YW1wbGUu\r\n" \ +"Y29tMSAwHgYJKoZIhvcNAQkBFhF1c2VyMkBleGFtcGxlLmNvbTCBnzANBgkqhkiG\r\n" \ +"9w0BAQEFAAOBjQAwgYkCgYEAqESlV4OYfBcIgZ+Cs8mWpiBjhvKoa0/kIe7saqhC\r\n" \ +"e5q4snox0jdkUpLcc4vOs3vQ7ZGnimqTltA9oF6XNUzTWW4vlJTKEfrCWK085l7c\r\n" \ +"DHFvHavH3E6vuP71lI7jq4PLXbo2TvZK+uBul4ozjzVWihaZBtz8eLHq446h/D/p\r\n" \ +"kzkCAwEAATANBgkqhkiG9w0BAQQFAAOCAQEAAfhVAIkNdeeUNJud720uUHVnIcxz\r\n" \ +"GXWI+Svi1qchuTEnRNhLwXmnE+A0WWSHyfdR6FvzdT3xtz3K50iOif8jY2gCGkSK\r\n" \ +"8RjKr97228SwbrGO9y9+dYIjH1uz9cBpoVKcpzdsWpKObrDPDYyReHSWo99jM2+O\r\n" \ +"vfJxnBw4PLiBj7Q0/dpd6o4JXyp7Cxa0mB4/+cZqjCzzuKfuK3WP7j6laMCV6mg4\r\n" \ +"wRZ528IdwDqB7OOqsDm1PVQM8vzny9PM6ikWUCRTVNQJN8RDLkrHR3FRjy15YLdt\r\n" \ +"yOfDqVnT/z0wGBaxnNziSJjqPGHPpRi4bJFGXwXOhtknKmciKzfj9/npoQ==\r\n" \ +"-----END CERTIFICATE-----\r\n"; + eap_client_key = \ +"-----BEGIN RSA PRIVATE KEY-----\r\n" \ +"MIICXQIBAAKBgQCoRKVXg5h8FwiBn4KzyZamIGOG8qhrT+Qh7uxqqEJ7mriyejHS\r\n" \ +"N2RSktxzi86ze9DtkaeKapOW0D2gXpc1TNNZbi+UlMoR+sJYrTzmXtwMcW8dq8fc\r\n" \ +"Tq+4/vWUjuOrg8tdujZO9kr64G6XijOPNVaKFpkG3Px4serjjqH8P+mTOQIDAQAB\r\n" \ +"AoGARI+LyweshssfxSkIKVc3EcNaqi6PHwJzUrw2ChM624AkR1xwllXJg7ehKVdK\r\n" \ +"xmjprRLO8CASuL1qjsBb3fTKnBl+sIVxIFS0AI4Y3ri8VUKbangvSsI7pCzAFry7\r\n" \ +"p1gmy9WWRV2ZEa+dV8xcrjb3bloT7hcdeLehgBCvExJIQM0CQQDXlSAKdW3AhYyj\r\n" \ +"1A+pfyBSGxJbpSwNyyWgwHIHHjxendxmdUbrc8EbAu1eNKbP58TLgdCZsKcMonAv\r\n" \ +"MY1Y2/nnAkEAx9CrUaCU8pJqXTRypM5JtexLKnYMJhpnA9uUILBQOq4Oe0eruyF5\r\n" \ +"SaSxhyJYXY491ahWYPF0PTb3jkUhoN+l3wJBAJZthjgGDJlEFwjSFkOtYz4nib3N\r\n" \ +"GVpeoFj1MBvrazCScpJDz0LIOLzCZCNSFfwIu3dNk+NKMqZMSn+D0h9pD40CQQC5\r\n" \ +"K9n4NXaTLbjAU2CC9mE85JPr76XmkcUxwAWQHZTcLH1jJdIyAx1hb+zNLLjzSmRn\r\n" \ +"Yi9ae6ibKhtUjyBQ87HFAkA2Bb3z7NUx+AA2g2HZocFZFShBxylACyQkl8FAFZtf\r\n" \ +"osudmKdFQHyAWuBMex4tpz/OLTqJ1ecL1JQeC7OvlpEX\r\n" \ +"-----END RSA PRIVATE KEY-----\r\n"; + +/* + Verify server's certificate is an optional feature. + If you want to use it please make sure ENABLE_EAP_SSL_VERIFY_SERVER in platform_opts.h is set to 1, + and the eap_ca_cert is set correctly. +*/ + eap_ca_cert = \ +"-----BEGIN CERTIFICATE-----\r\n" \ +"MIIEpzCCA4+gAwIBAgIJAPvZaozpdfjkMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\r\n" \ +"VQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTAT\r\n" \ +"BgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBs\r\n" \ +"ZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X\r\n" \ +"DTE2MDMxNDExMjU0OVoXDTE2MDQxMzExMjU0OVowgZMxCzAJBgNVBAYTAkZSMQ8w\r\n" \ +"DQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhh\r\n" \ +"bXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQG\r\n" \ +"A1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3\r\n" \ +"DQEBAQUAA4IBDwAwggEKAoIBAQC9pireu0aCDLNfMaGv3vId7RXjUhQwSK0jV2Oc\r\n" \ +"SyvlKWH3P/N+5kLrP2iL6SCzyETVDXZ0vOsAMjcBF0zHp16prXV0d51cTUqeWBb0\r\n" \ +"I5UnGxleIuuOfSg8zLUJoBWZPqLv++eZ5WgOKHt7SXocjvg7TU5t/TMB0Y8OCz3H\r\n" \ +"CW2vJ/XKMgMA9HDUu4g57cJu88i1JPRpyFaz/HIQBc7+UNb9z+q09uTZKWTmEMqi\r\n" \ +"E2U0EEIs7EtbxnOze1/8C4XNlmztrEdwvu6UEBU/TFkUoh9M646NkkBK7wP9n9pv\r\n" \ +"T0nPQRJiiCrICzVqUtlEi9lIKpbBSMbQ0KzrGF7lGTgm4rz9AgMBAAGjgfswgfgw\r\n" \ +"HQYDVR0OBBYEFIVyecka74kvOKIW0BjlTc/B+a2NMIHIBgNVHSMEgcAwgb2AFIVy\r\n" \ +"ecka74kvOKIW0BjlTc/B+a2NoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UE\r\n" \ +"CBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUg\r\n" \ +"SW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMT\r\n" \ +"HUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkA+9lqjOl1+OQwDAYDVR0T\r\n" \ +"BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAZYHM26sxbKOckVqJJ1QY0U2QFlGP\r\n" \ +"1GYd8v27znxdnRmSonDvv3GjFfhwoyDk0JUuxkK/33ikCxihrgoO/EQTY9BV2OpW\r\n" \ +"qkB1PDtb3i5ZRNvfjmW0pVA4p+GmdTGaEE5pTlcVnorzVrUeFKaZakb+IDFYzmeF\r\n" \ +"xp8B3Bb5wvinDligLOaJnSlgS8QeeIab9HZfaVTTuPmVK6zE6D54Y0dJPnykvDdE\r\n" \ +"cGN0FC+migfilFjJgkDJ0r78nwes55L8zjoofiZuO03rrHww6ARc3v1jYzAufddk\r\n" \ +"QTiZHgjlMQb2XXMmXLn8kBgoDnqkXFNe8j0h8uxIJSrjOoIyn1h1wvX5/w==\r\n" \ +"-----END CERTIFICATE-----\r\n"; + +} + +static void example_eap_thread(void *method){ + example_eap_config(); + + if(strcmp(method, "tls") == 0){ + // tls must present client_cert, client_key + eap_start("tls"); + } + else if(strcmp(method, "peap") == 0){ + eap_start("peap"); + } + else if(strcmp(method, "ttls") == 0){ + eap_start("ttls"); + } + else + printf("Invalid method\n"); + + vTaskDelete(NULL); +} + +void example_eap(char *method){ + if(xTaskCreate(example_eap_thread, ((const char*)"example_eap_thread"), 1024, method, tskIDLE_PRIORITY + 1, NULL) != pdPASS) + printf("\n\r%s xTaskCreate failed\n", __FUNCTION__); +} + +#endif /* CONFIG_EXAMPLE_EAP */ \ No newline at end of file diff --git a/RTL00_SDKV35a/component/common/example/eap/example_eap.h b/RTL00_SDKV35a/component/common/example/eap/example_eap.h new file mode 100644 index 0000000..2eefcaf --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/eap/example_eap.h @@ -0,0 +1,9 @@ +#ifndef EXAMPLE_EAP_H +#define EXAMPLE_EAP_H + +#include +#include "platform_opts.h" + +void example_eap(char *method); + +#endif diff --git a/RTL00_SDKV35a/component/common/example/eap/readme.txt b/RTL00_SDKV35a/component/common/example/eap/readme.txt new file mode 100644 index 0000000..4ec0730 --- /dev/null +++ b/RTL00_SDKV35a/component/common/example/eap/readme.txt @@ -0,0 +1,34 @@ +802.1X EAP METHOD SUPPLICANT EXAMPLE + +Description: +Use 802.1X EAP methods to connect to AP and authenticate with backend radius server. +Current supported methods are EAP-TLS, PEAPv0/EAP-MSCHAPv2, and EAP-TTLS/MSCHAPv2. + +Configuration: +Modify the argument of example_eap() in example_entry.c to set which EAP methods you want to use. +Modify the connection config (ssid, identity, password, cert) in example_eap_config() of example_eap.c based on your server's setting. +[FreeRTOSConfig.h] + #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 70 * 1024 ) ) +[platform_opts.h] + # define CONFIG_EXAMPLE_EAP 1 + + // Turn on/off the specified method + # define CONFIG_ENABLE_PEAP 1 + # define CONFIG_ENABLE_TLS 1 + # define CONFIG_ENABLE_TTLS 1 + + // If you want to verify the certificate of radius server, turn this on + # define ENABLE_EAP_SSL_VERIFY_SERVER 1 + +Execution: +An EAP connection thread will be started automatically when booting. + +Note: +Please make sure the lib_wps, polarssl, ssl_ram_map are also builded. + +If the connection failed, you can try the following directions to make it work: +1. Make sure the config_rsa.h of PolarSSL include the SSL/TLS cipher suite supported by radius server. +2. Set a larger value to SSL_MAX_CONTENT_LEN in config_rsa.h +3. Increase the FreeRTOS heap in FreeRTOSConfig.h, for example you can increase the heap to 80kbytes: + #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 80 * 1024 ) ) +4. Try to change using SW crypto instead of HW crypto. diff --git a/RTL00_SDKV35a/component/common/example/example_entry.c b/RTL00_SDKV35a/component/common/example/example_entry.c index 3b628f7..f2fddb7 100644 --- a/RTL00_SDKV35a/component/common/example/example_entry.c +++ b/RTL00_SDKV35a/component/common/example/example_entry.c @@ -6,24 +6,222 @@ ******************************************************************************/ #include #include "main.h" -#if CONFIG_EXAMPLE_UART_ATCMD -#include "uart_atcmd/example_uart_atcmd.h" + +#if ATCMD_VER == ATVER_2 +#include "flash_api.h" +#include "device_lock.h" #endif -#ifdef CONFIG_EXAMPLE_MDNS + +#if CONFIG_EXAMPLE_MDNS #include #endif +#if CONFIG_EXAMPLE_MCAST +#include +#endif + +#if CONFIG_EXAMPLE_XML +#include +#endif + +#if CONFIG_EXAMPLE_SOCKET_SELECT +#include +#endif + +#if CONFIG_EXAMPLE_NONBLOCK_CONNECT +#include +#endif + +#if CONFIG_EXAMPLE_SOCKET_TCP_TRX +#include +#endif + +#if CONFIG_EXAMPLE_SSL_DOWNLOAD +#include +#endif + +#if CONFIG_EXAMPLE_HTTP_DOWNLOAD +#include +#endif + +#if CONFIG_EXAMPLE_HTTPC +#include +#endif + +#if CONFIG_EXAMPLE_HTTPD +#include +#endif + +#if CONFIG_EXAMPLE_TCP_KEEPALIVE +#include +#endif + +#if CONFIG_EXAMPLE_SNTP_SHOWTIME +#include +#endif + +#if CONFIG_EXAMPLE_PPPOE +#include +#endif + +#if CONFIG_EXAMPLE_MEDIA_SIGNLE_STREAM +#include +#endif + +#if CONFIG_EXAMPLE_MEDIA_MULTI_STREAM +#include +#endif + +#if CONFIG_EXAMPLE_MEDIA_AUDIO_FROM_RTP +#include +#endif + +#if CONFIG_EXAMPLE_AUDIO_MP3 +#include +#endif + +#if CONFIG_EXAMPLE_GOOGLE_NEST +#include +#define FromDevice 1 +#define ToDevice 2 +#define BOTH 3 +#define TYPE "ToDevice" +#endif + +#if CONFIG_EXAMPLE_MJPEG_CAPTURE +#include +#endif + +#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT +#include +#endif + +#if CONFIG_EXAMPLE_WIGADGET +#include +#endif + +#if CONFIG_EXAMPLE_MQTT +#include +#endif + +#if CONFIG_EXAMPLE_FATFS +#include +#endif + +#if CONFIG_EXAMPLE_DCT +#include +#endif + +#if CONFIG_EXAMPLE_INIC_GSPI_HOST +#include +#endif + +#if CONFIG_EXAMPLE_ARDUINO_WIFI +#include +#endif + +#if CONFIG_EXAMPLE_GET_BEACON_FRAME +#include +#endif + +#if CONFIG_EXAMPLE_USB_MASS_STORAGE +#include +#endif + +#if CONFIG_EXAMPLE_EAP +#include +#endif + +#if CONFIG_EXAMPLE_AJ_BASIC +#include +#endif + +#if CONFIG_EXAMPLE_AJ_AMEBA_LED +#include +#endif + +#if CONFIG_EXAMPLE_COAP +#include +#endif + +#if CONFIG_EXAMPLE_WEBSOCKET +#include +#endif + +#if CONFIG_EXAMPLE_WLAN_SCENARIO +#include +#endif + +#if CONFIG_EXAMPLE_BCAST +#include +#endif + +#if CONFIG_EXAMPLE_AUDIO +#include