2019-11-07 21:34:13 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include "contiki.h"
|
|
|
|
#include "contiki-net.h"
|
|
|
|
#include "rest-engine.h"
|
|
|
|
#include "net/ip/uip-debug.h"
|
|
|
|
|
|
|
|
int precious_resource = 0;
|
2019-11-08 20:55:43 +00:00
|
|
|
char sensor_name[32]; /* for RFC8428 */
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
/* handlers for coap */
|
|
|
|
void res_get_handler(void* request, void* response, uint8_t* buffer, uint16_t preferred_size, int32_t* offset) {
|
2019-11-08 20:55:43 +00:00
|
|
|
static char payload[128];
|
|
|
|
sprintf(payload, "[{\"n\":\"urn:it.unipi.ing.ce.netpp:%s\",\"v\":%d}]", sensor_name, precious_resource);
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
REST.set_header_content_type(response, REST.type.TEXT_PLAIN);
|
|
|
|
REST.set_response_payload(response, payload, strlen(payload));
|
2019-11-08 20:55:43 +00:00
|
|
|
|
|
|
|
printf("[D] GET handled\n");
|
2019-11-07 21:34:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void res_periodic_handler();
|
|
|
|
|
|
|
|
/* declare resource and set handlers */
|
2019-12-14 08:38:27 +00:00
|
|
|
PERIODIC_RESOURCE(myresource, "title=\"An observable resource\";rt=\"some descriptive text\";obs", res_get_handler, NULL, NULL, NULL, 60 * CLOCK_SECOND, res_periodic_handler);
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
void res_periodic_handler() {
|
|
|
|
/* sample some sensor */
|
|
|
|
/* byte mysample = *(some_bar + some_offset); */
|
|
|
|
++precious_resource;
|
2019-11-08 20:55:43 +00:00
|
|
|
printf("sampled the precious resource: %d\n", precious_resource);
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
/* 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");
|
|
|
|
}
|
|
|
|
}
|
2019-11-08 20:55:43 +00:00
|
|
|
/* set sensor_name as mac address */
|
|
|
|
for (i = 0; i < sizeof(uip_lladdr.addr); ++i) {
|
|
|
|
sprintf(sensor_name + i, "%02x", (unsigned char)uip_lladdr.addr[i]);
|
|
|
|
}
|
|
|
|
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
/* enable CoAP engine */
|
|
|
|
rest_init_engine();
|
2019-11-08 20:55:43 +00:00
|
|
|
rest_activate_resource(&myresource, "PreciousResource");
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
while (1) {
|
|
|
|
PROCESS_WAIT_EVENT();
|
|
|
|
}
|
|
|
|
|
|
|
|
PROCESS_END();
|
|
|
|
|
|
|
|
}
|
|
|
|
|