]> granicus.if.org Git - esp-idf/commitdiff
example: fix CI error of coap client demo
authorWu Jian Gang <wujiangang@espressif.com>
Fri, 6 Jan 2017 10:36:11 +0000 (18:36 +0800)
committerWu Jian Gang <wujiangang@espressif.com>
Sat, 7 Jan 2017 07:39:12 +0000 (15:39 +0800)
examples/23_coap_client/main/Kconfig.projbuild
examples/23_coap_client/main/coap_client.c
examples/23_coap_client/main/coap_client.h [deleted file]

index ba3e0d458ba5d32b242e683c66d2f7e2a89738aa..045137a0e94420c365dd498c5e8540a8347ccedf 100644 (file)
@@ -1,24 +1,11 @@
 menu "Example Configuration"
 
-config TARGET_DOMAIN
-    string "Target Domain"
-    default "californium.eclipse.org"
-    help
-        Target domain for the example to connect to.
-
 config TARGET_DOMAIN_URI
     string "Target Uri"
     default "coap://californium.eclipse.org"
     help
         Target uri for the example to use.
 
-config TARGET_PORT_NUMBER
-    int "Target port number"
-    range 0 65535
-    default 5683
-    help
-        Target port number for the example to connect to.
-
 config WIFI_SSID
     string "WiFi SSID"
     default "myssid"
index cef24f4c6e25c512b57a345b081faeab1e8ef0fc..7c0df1afec8f66aeaaa31ad7c4ef588a6397c1f1 100644 (file)
@@ -6,9 +6,10 @@
    software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    CONDITIONS OF ANY KIND, either express or implied.
 */
-#include "coap_client.h"
 
 #include <string.h>
+#include <sys/socket.h>
+#include <netdb.h>
 
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
 #include "esp_event_loop.h"
 
 #include "nvs_flash.h"
-#include <sys/socket.h>
 
-#include "coap_config.h"
-#include "resource.h"
 #include "coap.h"
 
+/* The examples use simple WiFi configuration that you can set via
+   'make menuconfig'.
+
+   If you'd rather not, just change the below entries to strings with
+   the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
+*/
+#define EXAMPLE_WIFI_SSID CONFIG_WIFI_SSID
+#define EXAMPLE_WIFI_PASS CONFIG_WIFI_PASSWORD
+
+#define COAP_DEFAULT_TIME_SEC 5
+#define COAP_DEFAULT_TIME_USEC 0
+
+/* The examples use uri "coap://californium.eclipse.org" that
+   you can set via 'make menuconfig'.
+
+   If you'd rather not, just change the below entries to strings with
+   the config you want - ie #define COAP_DEFAULT_DEMO_URI "coap://californium.eclipse.org"
+*/
+#define COAP_DEFAULT_DEMO_URI CONFIG_TARGET_DOMAIN_URI
 
 static EventGroupHandle_t wifi_event_group;
 
@@ -33,98 +50,111 @@ static EventGroupHandle_t wifi_event_group;
    to the AP with an IP? */
 const static int CONNECTED_BIT = BIT0;
 
-const static char *TAG = "CoAP_demo";
+const static char *TAG = "CoAP_client";
 
 static void message_handler(struct coap_context_t *ctx, const coap_endpoint_t *local_interface, const coap_address_t *remote,
               coap_pdu_t *sent, coap_pdu_t *received,
                 const coap_tid_t id)
 {
-       unsigned char* data = NULL;
-       size_t data_len;
-       if (COAP_RESPONSE_CLASS(received->hdr->code) == 2) {
-               if (coap_get_data(received, &data_len, &data)) {
-                       printf("Received: %s\n", data);
-               }
-       }
+    unsigned char* data = NULL;
+    size_t data_len;
+    if (COAP_RESPONSE_CLASS(received->hdr->code) == 2) {
+        if (coap_get_data(received, &data_len, &data)) {
+            printf("Received: %s\n", data);
+        }
+    }
 }
 
 static void coap_demo_thread(void *p)
 {
-       coap_context_t*   ctx = NULL;
-       coap_address_t    dst_addr, src_addr;
-       static coap_uri_t uri;
-       fd_set            readfds;
-       struct timeval    tv;
-       int flags, result;
-       coap_pdu_t*       request = NULL;
-       const char*       server_uri = COAP_DEFAULT_DEMO_URI;
-       uint8_t     get_method = 1;
-
-       coap_address_init(&src_addr);
-       src_addr.addr.sin.sin_family      = AF_INET;
-       src_addr.addr.sin.sin_port        = htons(0);
-       src_addr.addr.sin.sin_addr.s_addr = INADDR_ANY;
-
-       ctx = coap_new_context(&src_addr);
-       if (ctx) {
-               coap_address_init(&dst_addr);
-               dst_addr.addr.sin.sin_family      = AF_INET;
-               dst_addr.addr.sin.sin_port        = htons(COAP_DEFAULT_PORT);
-               dst_addr.addr.sin.sin_addr.s_addr = inet_addr(COAP_DEFAULT_DEMO_ADDR);
-
-               coap_split_uri((const uint8_t *)server_uri, strlen(server_uri), &uri);
-               request            = coap_new_pdu();
-               if (request){
-                       request->hdr->type = COAP_MESSAGE_CON;
-                       request->hdr->id   = coap_new_message_id(ctx);
-                       request->hdr->code = get_method;
-                       coap_add_option(request, COAP_OPTION_URI_PATH, uri.path.length, uri.path.s);
-
-                       coap_register_response_handler(ctx, message_handler);
-                       coap_send_confirmed(ctx, ctx->endpoint, &dst_addr, request);
-
-                       flags = fcntl(ctx->sockfd, F_GETFL, 0);
-                       fcntl(ctx->sockfd, F_SETFL, flags|O_NONBLOCK);
-
-                       tv.tv_usec = COAP_DEFAULT_TIME_USEC;
-                       tv.tv_sec = COAP_DEFAULT_TIME_SEC;
-
-                       for(;;) {
-                               FD_ZERO(&readfds);
-                               FD_CLR( ctx->sockfd, &readfds );
-                               FD_SET( ctx->sockfd, &readfds );
-                               result = select( FD_SETSIZE, &readfds, 0, 0, &tv );
-                               if (result > 0) {
-                                       if (FD_ISSET( ctx->sockfd, &readfds ))
-                                               coap_read(ctx);
-                               } else if (result < 0) {
-                                       break;
-                               } else {
-                                       printf("select timeout\n");
-                               }
-                       }
-               }
-               coap_free_context(ctx);
-       }
-
-       vTaskDelete(NULL);
-}
-
-static void coap_server_init(void)
-{
-    int ret = pdPASS;
-    xTaskHandle coap_handle = NULL;
-
-    ret = xTaskCreate(coap_demo_thread,
-                      COAP_DEMO_THREAD_NAME,
-                      COAP_DEMO_THREAD_STACK_WORDS,
-                      NULL,
-                      COAP_DEMO_THREAD_PRORIOTY,
-                      &coap_handle);
-
-    if (ret != pdPASS)  {
-        ESP_LOGI(TAG, "create thread %s failed", COAP_DEMO_THREAD_NAME);
+    struct hostent *hp;
+    struct ip4_addr *ip4_addr;
+
+    coap_context_t*   ctx = NULL;
+    coap_address_t    dst_addr, src_addr;
+    static coap_uri_t uri;
+    fd_set            readfds;
+    struct timeval    tv;
+    int flags, result;
+    coap_pdu_t*       request = NULL;
+    const char*       server_uri = COAP_DEFAULT_DEMO_URI;
+    uint8_t     get_method = 1;
+
+    while (1) {
+        /* Wait for the callback to set the CONNECTED_BIT in the
+           event group.
+        */
+        xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,
+                            false, true, portMAX_DELAY);
+        ESP_LOGI(TAG, "Connected to AP");
+
+        if (coap_split_uri((const uint8_t *)server_uri, strlen(server_uri), &uri) == -1) {
+            ESP_LOGE(TAG, "CoAP server uri error");
+            break;
+        }
+
+        hp = gethostbyname((const char *)uri.host.s);
+
+        if (hp == NULL) {
+            ESP_LOGE(TAG, "DNS lookup failed");
+            vTaskDelay(1000 / portTICK_PERIOD_MS);
+            continue;
+        }
+
+        /* Code to print the resolved IP.
+
+           Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */
+        ip4_addr = (struct ip4_addr *)hp->h_addr;
+        ESP_LOGI(TAG, "DNS lookup succeeded. IP=%s", inet_ntoa(*ip4_addr));
+
+        coap_address_init(&src_addr);
+        src_addr.addr.sin.sin_family      = AF_INET;
+        src_addr.addr.sin.sin_port        = htons(0);
+        src_addr.addr.sin.sin_addr.s_addr = INADDR_ANY;
+
+        ctx = coap_new_context(&src_addr);
+        if (ctx) {
+            coap_address_init(&dst_addr);
+            dst_addr.addr.sin.sin_family      = AF_INET;
+            dst_addr.addr.sin.sin_port        = htons(COAP_DEFAULT_PORT);
+            dst_addr.addr.sin.sin_addr.s_addr = ip4_addr->addr;
+
+            request            = coap_new_pdu();
+            if (request){
+                request->hdr->type = COAP_MESSAGE_CON;
+                request->hdr->id   = coap_new_message_id(ctx);
+                request->hdr->code = get_method;
+                coap_add_option(request, COAP_OPTION_URI_PATH, uri.path.length, uri.path.s);
+
+                coap_register_response_handler(ctx, message_handler);
+                coap_send_confirmed(ctx, ctx->endpoint, &dst_addr, request);
+
+                flags = fcntl(ctx->sockfd, F_GETFL, 0);
+                fcntl(ctx->sockfd, F_SETFL, flags|O_NONBLOCK);
+
+                tv.tv_usec = COAP_DEFAULT_TIME_USEC;
+                tv.tv_sec = COAP_DEFAULT_TIME_SEC;
+
+                for(;;) {
+                    FD_ZERO(&readfds);
+                    FD_CLR( ctx->sockfd, &readfds );
+                    FD_SET( ctx->sockfd, &readfds );
+                    result = select( FD_SETSIZE, &readfds, 0, 0, &tv );
+                    if (result > 0) {
+                        if (FD_ISSET( ctx->sockfd, &readfds ))
+                            coap_read(ctx);
+                    } else if (result < 0) {
+                        break;
+                    } else {
+                        ESP_LOGE(TAG, "select timeout");
+                    }
+                }
+            }
+            coap_free_context(ctx);
+        }
     }
+
+    vTaskDelete(NULL);
 }
 
 static esp_err_t wifi_event_handler(void *ctx, system_event_t *event)
@@ -135,7 +165,6 @@ static esp_err_t wifi_event_handler(void *ctx, system_event_t *event)
         break;
     case SYSTEM_EVENT_STA_GOT_IP:
         xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
-        coap_server_init();
         break;
     case SYSTEM_EVENT_STA_DISCONNECTED:
         /* This is a workaround as ESP32 WiFi libs don't currently
@@ -165,7 +194,6 @@ static void wifi_conn_init(void)
     };
     ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
     ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
-
     ESP_ERROR_CHECK( esp_wifi_start() );
 }
 
@@ -173,4 +201,5 @@ void app_main(void)
 {
     nvs_flash_init();
     wifi_conn_init();
+    xTaskCreate(coap_demo_thread, "coap", 2048, NULL, 5, NULL);
 }
diff --git a/examples/23_coap_client/main/coap_client.h b/examples/23_coap_client/main/coap_client.h
deleted file mode 100644 (file)
index 50f4ccd..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* CoAP client Example
-
-   This example code is in the Public Domain (or CC0 licensed, at your option.)
-
-   Unless required by applicable law or agreed to in writing, this
-   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-   CONDITIONS OF ANY KIND, either express or implied.
-*/
-
-#ifndef _COAP_CLIENT_H_
-#define _COAP_CLIENT_H_
-
-#include <sdkconfig.h>
-
-/* The examples use simple WiFi configuration that you can set via
-   'make menuconfig'.
-
-   If you'd rather not, just change the below entries to strings with
-   the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
-*/
-#define EXAMPLE_WIFI_SSID            CONFIG_WIFI_SSID
-#define EXAMPLE_WIFI_PASS            CONFIG_WIFI_PASSWORD
-
-#define COAP_DEMO_THREAD_NAME        "CoAP_demo"
-#define COAP_DEMO_THREAD_STACK_WORDS 10240
-#define COAP_DEMO_THREAD_PRORIOTY    8
-
-#define COAP_DEFAULT_TIME_SEC 5
-#define COAP_DEFAULT_TIME_USEC 0
-
-/* The examples use domain of "californium.eclipse.org",uri "coap://californium.eclipse.org" and port number of 5683 that
-   you can set via 'make menuconfig'.
-
-   If you'd rather not, just change the below entries to strings with
-   the config you want - ie #define COAP_DEFAULT_DEMO_ADDR "californium.eclipse.org"
-   , ie #define COAP_DEFAULT_DEMO_URI "coap://californium.eclipse.org" and ie #define COAP_DEFAULT_PORT 5683
-*/
-#define COAP_DEFAULT_PORT CONFIG_TARGET_PORT_NUMBER
-#define COAP_DEFAULT_DEMO_ADDR CONFIG_TARGET_DOMAIN
-#define COAP_DEFAULT_DEMO_URI CONFIG_TARGET_DOMAIN_URI
-
-#endif
-