initial commit
This commit is contained in:
99
lib/amb1_sdk/common/example/coap/example_coap.c
Normal file
99
lib/amb1_sdk/common/example/coap/example_coap.c
Normal file
@@ -0,0 +1,99 @@
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "diag.h"
|
||||
#include "platform_stdlib.h"
|
||||
#include "wifi_constants.h"
|
||||
#include "wifi_conf.h"
|
||||
#include <lwip/sockets.h>
|
||||
#include <lwip/netdb.h>
|
||||
|
||||
#include "sn_coap_protocol.h"
|
||||
#include "sn_coap_ameba_port.h"
|
||||
|
||||
#define SERVER_HOST "coap.me"
|
||||
#define URI_PATH "/hello"
|
||||
#define SERVER_PORT 5683
|
||||
#define BUF_LEN 1280 // Suggested is to keep packet size under 1280 bytes
|
||||
|
||||
struct coap_s* coapHandle;
|
||||
coap_version_e coapVersion = COAP_VERSION_1;
|
||||
|
||||
uint8_t coap_tx_cb(uint8_t *a, uint16_t b, sn_nsdl_addr_s *c, void *d) {
|
||||
printf("coap tx cb\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int8_t coap_rx_cb(sn_coap_hdr_s *a, sn_nsdl_addr_s *b, void *c) {
|
||||
printf("coap rx cb\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void example_coap_thread(void *para){
|
||||
|
||||
printf("\nCoAP Client Example\n");
|
||||
|
||||
while(wifi_is_ready_to_transceive(RTW_STA_INTERFACE) != RTW_SUCCESS){
|
||||
printf("Wait for WIFI connection ...\n");
|
||||
vTaskDelay(1000);
|
||||
}
|
||||
|
||||
// Initialize the CoAP protocol handle, pointing to local implementations on malloc/free/tx/rx functions
|
||||
coapHandle = coap_protocol_init(&coap_tx_cb, &coap_rx_cb);
|
||||
|
||||
// See ns_coap_header.h
|
||||
sn_coap_hdr_s *coap_res_ptr = (sn_coap_hdr_s*)coap_calloc(1*sizeof(sn_coap_hdr_s));
|
||||
|
||||
coap_res_ptr->token_len = 0;
|
||||
coap_res_ptr->coap_status = COAP_STATUS_OK;
|
||||
coap_res_ptr->msg_code = COAP_MSG_CODE_REQUEST_GET;
|
||||
coap_res_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
|
||||
coap_res_ptr->content_format = COAP_CT_TEXT_PLAIN;
|
||||
coap_res_ptr->msg_id = 7;
|
||||
coap_res_ptr->uri_path_len = strlen(URI_PATH);
|
||||
coap_res_ptr->payload_len = 0;
|
||||
coap_res_ptr->token_ptr = NULL;
|
||||
coap_res_ptr->uri_path_ptr = (uint8_t*)URI_PATH;
|
||||
coap_res_ptr->payload_ptr = NULL;
|
||||
coap_res_ptr->options_list_ptr = NULL;
|
||||
|
||||
|
||||
int socket = coap_sock_open();
|
||||
|
||||
//send CoAP message
|
||||
coap_send(SERVER_HOST, SERVER_PORT, socket, coap_res_ptr);
|
||||
|
||||
coap_free(coap_res_ptr);
|
||||
|
||||
//receive CoAP message
|
||||
struct sockaddr_in from_address;
|
||||
uint8_t* recv_buffer = (uint8_t*)coap_calloc(BUF_LEN);
|
||||
int ret;
|
||||
|
||||
while((ret = coap_recv(socket, &from_address, recv_buffer, BUF_LEN)) >= 0)
|
||||
{
|
||||
uint32_t ip = from_address.sin_addr.s_addr;
|
||||
uint8_t bytes[4];
|
||||
bytes[0] = ip & 0xFF;
|
||||
bytes[1] = (ip >> 8) & 0xFF;
|
||||
bytes[2] = (ip >> 16) & 0xFF;
|
||||
bytes[3] = (ip >> 24) & 0xFF;
|
||||
|
||||
printf("\nReceived %d bytes from '%d.%d.%d.%d:%d'\n", ret, bytes[0], bytes[1], bytes[2], bytes[3], from_address.sin_port);
|
||||
|
||||
sn_coap_hdr_s* parsed = sn_coap_parser(coapHandle, ret, recv_buffer, &coapVersion);
|
||||
|
||||
coap_print_hdr(parsed);
|
||||
}
|
||||
|
||||
coap_free(recv_buffer);
|
||||
|
||||
coap_sock_close(socket);
|
||||
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void example_coap(void)
|
||||
{
|
||||
if(xTaskCreate(example_coap_thread, ((const char*)"example_coap_thread"), 2048, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS)
|
||||
printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__);
|
||||
}
|
||||
6
lib/amb1_sdk/common/example/coap/example_coap.h
Normal file
6
lib/amb1_sdk/common/example/coap/example_coap.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef EXAMPLE_COAP_H
|
||||
#define EXAMPLE_COAP_H
|
||||
|
||||
void example_coap(void);
|
||||
|
||||
#endif /* EXAMPLE_COAP_H */
|
||||
6
lib/amb1_sdk/common/example/coap/readme.txt
Normal file
6
lib/amb1_sdk/common/example/coap/readme.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
This example demonstrates how to use mbed-CoAP C library to build and parse a CoAP message.
|
||||
|
||||
In the example, a confirmable GET request is send to test server "coap.me" to retrieve the resource under path "/hello". The expected return is an ACK message with payload "world".
|
||||
|
||||
Note:
|
||||
Company Firewall may block CoAP message. You can use copper (https://addons.mozilla.org/en-US/firefox/addon/copper-270430/) to test the server's reachability.
|
||||
Reference in New Issue
Block a user