64 lines
1.6 KiB
C
64 lines
1.6 KiB
C
#include <stdio.h>
|
|
|
|
#include "contiki.h"
|
|
#include "contiki-net.h"
|
|
#include "rest-engine.h"
|
|
#include "net/ip/uip-debug.h"
|
|
|
|
int precious_resource = 0;
|
|
|
|
/* handlers for coap */
|
|
void res_get_handler(void* request, void* response, uint8_t* buffer, uint16_t preferred_size, int32_t* offset) {
|
|
static char payload[16];
|
|
sprintf(payload, "pr = %d", precious_resource);
|
|
|
|
REST.set_header_content_type(response, REST.type.TEXT_PLAIN);
|
|
REST.set_response_payload(response, payload, strlen(payload));
|
|
}
|
|
|
|
void res_periodic_handler();
|
|
|
|
/* declare resource and set handlers */
|
|
PERIODIC_RESOURCE(myresource, "title=\"An observable resource\";rt=\"some descriptive text\";obs", res_get_handler, NULL, NULL, NULL, 10 * CLOCK_SECOND, res_periodic_handler);
|
|
|
|
void res_periodic_handler() {
|
|
/* sample some sensor */
|
|
/* byte mysample = *(some_bar + some_offset); */
|
|
++precious_resource;
|
|
|
|
/* Notify subscribers of the new sample */
|
|
REST.notify_subscribers(&myresource);
|
|
}
|
|
|
|
/* contiki protothread, as usual... */
|
|
PROCESS(main_process_name, "Simple-CoAP-Server");
|
|
|
|
AUTOSTART_PROCESSES(&main_process_name);
|
|
|
|
PROCESS_THREAD(main_process_name, ev, data) {
|
|
PROCESS_BEGIN();
|
|
|
|
printf("Started....\n");
|
|
/* print enabled addresses */
|
|
printf("My addresses:\n");
|
|
int i;
|
|
for (i = 0; i < UIP_DS6_ADDR_NB; ++i) {
|
|
if (uip_ds6_if.addr_list[i].isused) {
|
|
uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr);
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
/* enable CoAP engine */
|
|
rest_init_engine();
|
|
rest_activate_resource(&myresource, "test/myresource");
|
|
|
|
while (1) {
|
|
PROCESS_WAIT_EVENT();
|
|
}
|
|
|
|
PROCESS_END();
|
|
|
|
}
|
|
|