Merge pull request #929 from lab11/delete-old-coap
Delete old CoAP implementation
This commit is contained in:
commit
402eabecca
31 changed files with 11 additions and 3713 deletions
|
@ -1,31 +0,0 @@
|
|||
all: rest-server-example coap-client-example
|
||||
|
||||
ifndef TARGET
|
||||
TARGET=sky
|
||||
endif
|
||||
|
||||
CONTIKI=../..
|
||||
|
||||
WITH_COAP = 1
|
||||
|
||||
CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"
|
||||
|
||||
ifeq ($(WITH_COAP), 1)
|
||||
CFLAGS += -DWITH_COAP
|
||||
APPS += rest-coap
|
||||
else
|
||||
CFLAGS += -DWITH_HTTP
|
||||
APPS += rest-http
|
||||
endif
|
||||
|
||||
CONTIKI_WITH_IPV6 = 1
|
||||
include $(CONTIKI)/Makefile.include
|
||||
|
||||
$(CONTIKI)/tools/tunslip6: $(CONTIKI)/tools/tunslip6.c
|
||||
(cd $(CONTIKI)/tools && $(MAKE) tunslip6)
|
||||
|
||||
connect-router: $(CONTIKI)/tools/tunslip6
|
||||
sudo $(CONTIKI)/tools/tunslip6 aaaa::1/64
|
||||
|
||||
connect-router-cooja: $(CONTIKI)/tools/tunslip6
|
||||
sudo $(CONTIKI)/tools/tunslip6 -a 127.0.0.1 aaaa::1/64
|
|
@ -1,137 +0,0 @@
|
|||
REST example
|
||||
============
|
||||
|
||||
Open a terminal and go to "<CONTIKI_HOME>/examples/rest-example/" directory.
|
||||
|
||||
MAIN EXAMPLE: rest-server-example.c : A RESTful server example showing how to
|
||||
use the REST layer to develop server-side applications (possible to run it over
|
||||
either COAP or HTTP) To use COAP as the underlying application protocol, one
|
||||
should define WITH_COAP = 1 in rest-example/Makefile. Otherwise, HTTP is used.
|
||||
Look at the source code to see which resources are available. (check the
|
||||
RESOURCE macros in the code). Each resource has a handler function which is
|
||||
called by the REST layer to serve the request. (i.e. "helloworld" resource has
|
||||
a handler function named "helloworld_handler" which is called when a web
|
||||
service request is received for "helloworld" resource.)
|
||||
|
||||
|
||||
To run REST examples in COOJA on Linux
|
||||
--------------------------------------------
|
||||
|
||||
Accessing the server from outside:
|
||||
|
||||
1. Start COOJA and load the simulation "rest-server-example.csc" by the following command.
|
||||
|
||||
make TARGET=cooja rest-server-example.csc
|
||||
|
||||
2. After loading the COOJA file, open another another terminal pointing to the
|
||||
same directory and connect to the COOJA simulation using tunslip6:
|
||||
|
||||
make connect-router-cooja
|
||||
|
||||
3. You need to use a COAP or HTTP client to interact with the COOJA nodes
|
||||
running REST code. In this setting, two servers are available: IP addresses
|
||||
are aaaa::0212:7402:0002:0202 and aaaa::0212:7403:0003:0303. COAP uses
|
||||
61616, whereas HTTP uses 8080 port in default configuration. First, ping
|
||||
the COOJA nodes to test the connectivity.
|
||||
|
||||
ping6 aaaa::0212:7402:0002:0202
|
||||
ping6 aaaa::0212:7403:0003:0303
|
||||
|
||||
HTTP Examples
|
||||
-------------
|
||||
|
||||
You can use curl as an http client to interact with the COOJA motes running
|
||||
REST code.
|
||||
|
||||
curl -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/helloworld #get helloworld plain text
|
||||
curl -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/led?color=green -d mode=off -i #turn off the green led
|
||||
curl -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/.well-known/core -i
|
||||
curl -X POST -H "User-Agent: curl" aaaa::0212:7402:0002:0202:8080/helloworld #method not allowed
|
||||
|
||||
COAP Examples
|
||||
-------------
|
||||
|
||||
You should run a COAP client on your computer. You can use the URLs and methods
|
||||
provided above in HTTP examples to test the COAP Server. For example, Matthias
|
||||
Kovatsch has developed a CoAP Firefox plug-in which is accessible via
|
||||
[http://people.inf.ethz.ch/mkovatsc/#pro](http://people.inf.ethz.ch/mkovatsc/#pro)
|
||||
|
||||
Accessing the server inside the sensor network: (Note: Provided only for COAP
|
||||
implementation) Start COOJA and load the simulation
|
||||
"coap-client-server-example.csc" by the following command.
|
||||
|
||||
make TARGET=cooja coap-client-server-example.csc
|
||||
|
||||
coap-client-server-example.csc : Runs rest-server-example.c as the server (over
|
||||
COAP) (IP:aaaa::0212:7401:0001:0101) in one node and coap-client-example.c as
|
||||
the client (IP: aaaa::0212:7402:0002:0202) in another node. Client
|
||||
periodically accesses resources of server and prints the payload.
|
||||
|
||||
Note: If the generated binary is bigger than the MOTE code size, then you will
|
||||
get a "region text is full" error. Right now, REST+HTTP example uses (Contiki
|
||||
& ContikiMAC & uIPv6 & RPL & HTTP Server & REST Layer) which does not fit in
|
||||
Tmote Sky memory. To save same code space and make the example fit, you can
|
||||
define static routes rather than using RPL or use nullrdc rather than
|
||||
ContikiMAC. If border router does not fit, then first try to update the
|
||||
Makefile of border router in <CONTIKI_HOME>/examples/ipv6/rpl-border-router by
|
||||
setting WITH_WEBSERVER=0.
|
||||
|
||||
To run REST server on real nodes (i.e. tmote sky)
|
||||
--------------------------------------------
|
||||
|
||||
1. Program the nodes with the rest-server-example
|
||||
|
||||
make TARGET=sky rest-server-example.upload
|
||||
|
||||
2. Disconnect the nodes and program one node with the RPL border router
|
||||
|
||||
cd ../ipv6/rpl-border-router && make TARGET=sky border-router.upload
|
||||
|
||||
3. Connect to the border router using tunslip6:
|
||||
|
||||
make connect-router
|
||||
|
||||
4. Reconnect the motes, open new terminal for each mote and run the following
|
||||
command to note their IP addresses (after running the command reset the
|
||||
corresponding mote to get IP address printed)
|
||||
|
||||
make login TARGET=sky MOTE=2 #Shows the prints for first mote
|
||||
make login TARGET=sky MOTE=3 #For second mote and so on.
|
||||
|
||||
5. Test the connectivity by pinging them.
|
||||
|
||||
ping6 <IPv6 Address of the MOTE>
|
||||
|
||||
6. Remaining parts are the same with the COOJA example. (i.e. if it is a COAP
|
||||
Server, it's available at <NODE_IP_ADDR>:61616)
|
||||
|
||||
|
||||
To run REST server with minimal-net on Linux
|
||||
--------------------------------------------
|
||||
1. Compile with minimal-net setting.
|
||||
|
||||
make rest-server-example TARGET=minimal-net
|
||||
|
||||
2. Run the generated executable with sudo and note the IP address of the server
|
||||
which will be printed right after.
|
||||
|
||||
sudo ./rest-server-example.minimal-net
|
||||
|
||||
3. How to access and test the server is same with the other settings. (i.e. if
|
||||
it is a COAP Server, it's available at <IP_ADDRESS_FROM_STEP_2>:61616 and if
|
||||
it's a HTTP Server it is available at <IP_ADDRESS_FROM_STEP_2>:8080)
|
||||
|
||||
TODO
|
||||
----
|
||||
|
||||
- Better option handling needed - ex: critical options are not differentiated
|
||||
for now. Need to add support for some such as Tokens. Also, C/E difference
|
||||
should be added.
|
||||
- Reilable message sending is missing. i.e. client example should resend
|
||||
request in case ACK does not arrive. Same for server pushing (in case of
|
||||
subscriptions)
|
||||
- Add Block transfer example
|
||||
- Add Subscription example
|
||||
- Add an Android/Java COAP Client to Contikiprojects to be able to interact
|
||||
with Contiki.
|
||||
- COAP-specific Method Codes
|
|
@ -1,123 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "contiki.h"
|
||||
#include "contiki-net.h"
|
||||
#include "rest.h"
|
||||
#include "buffer.h"
|
||||
|
||||
#define DEBUG 1
|
||||
#if DEBUG
|
||||
#include <stdio.h>
|
||||
#define PRINTF(...) printf(__VA_ARGS__)
|
||||
#define PRINT6ADDR(addr) PRINTF("%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15])
|
||||
#define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5])
|
||||
#else
|
||||
#define PRINTF(...)
|
||||
#define PRINT6ADDR(addr)
|
||||
#define PRINTLLADDR(addr)
|
||||
#endif
|
||||
|
||||
#define SERVER_NODE(ipaddr) uip_ip6addr(ipaddr, 0xfe80, 0, 0, 0, 0x0212, 0x7401, 0x0001, 0x0101)
|
||||
#define LOCAL_PORT 61617
|
||||
#define REMOTE_PORT 61616
|
||||
|
||||
char temp[100];
|
||||
int xact_id;
|
||||
static uip_ipaddr_t server_ipaddr;
|
||||
static struct uip_udp_conn *client_conn;
|
||||
static struct etimer et;
|
||||
#define MAX_PAYLOAD_LEN 100
|
||||
|
||||
#define NUMBER_OF_URLS 3
|
||||
char* service_urls[NUMBER_OF_URLS] = {"light", ".well-known/core", "helloworld"};
|
||||
|
||||
static void
|
||||
response_handler(coap_packet_t* response)
|
||||
{
|
||||
uint16_t payload_len = 0;
|
||||
uint8_t* payload = NULL;
|
||||
payload_len = coap_get_payload(response, &payload);
|
||||
|
||||
PRINTF("Response transaction id: %u", response->tid);
|
||||
if (payload) {
|
||||
memcpy(temp, payload, payload_len);
|
||||
temp[payload_len] = 0;
|
||||
PRINTF(" payload: %s\n", temp);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
send_data(void)
|
||||
{
|
||||
char buf[MAX_PAYLOAD_LEN];
|
||||
|
||||
if (init_buffer(COAP_DATA_BUFF_SIZE)) {
|
||||
int data_size = 0;
|
||||
int service_id = random_rand() % NUMBER_OF_URLS;
|
||||
coap_packet_t* request = (coap_packet_t*)allocate_buffer(sizeof(coap_packet_t));
|
||||
init_packet(request);
|
||||
|
||||
coap_set_method(request, COAP_GET);
|
||||
request->tid = xact_id++;
|
||||
request->type = MESSAGE_TYPE_CON;
|
||||
coap_set_header_uri(request, service_urls[service_id]);
|
||||
|
||||
data_size = serialize_packet(request, buf);
|
||||
|
||||
PRINTF("Client sending request to:[");
|
||||
PRINT6ADDR(&client_conn->ripaddr);
|
||||
PRINTF("]:%u/%s\n", (uint16_t)REMOTE_PORT, service_urls[service_id]);
|
||||
uip_udp_packet_send(client_conn, buf, data_size);
|
||||
|
||||
delete_buffer();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_incoming_data()
|
||||
{
|
||||
PRINTF("Incoming packet size: %u \n", (uint16_t)uip_datalen());
|
||||
if (init_buffer(COAP_DATA_BUFF_SIZE)) {
|
||||
if (uip_newdata()) {
|
||||
coap_packet_t* response = (coap_packet_t*)allocate_buffer(sizeof(coap_packet_t));
|
||||
if (response) {
|
||||
parse_message(response, uip_appdata, uip_datalen());
|
||||
response_handler(response);
|
||||
}
|
||||
}
|
||||
delete_buffer();
|
||||
}
|
||||
}
|
||||
|
||||
PROCESS(coap_client_example, "COAP Client Example");
|
||||
AUTOSTART_PROCESSES(&coap_client_example);
|
||||
|
||||
PROCESS_THREAD(coap_client_example, ev, data)
|
||||
{
|
||||
PROCESS_BEGIN();
|
||||
|
||||
SERVER_NODE(&server_ipaddr);
|
||||
|
||||
/* new connection with server */
|
||||
client_conn = udp_new(&server_ipaddr, UIP_HTONS(REMOTE_PORT), NULL);
|
||||
udp_bind(client_conn, UIP_HTONS(LOCAL_PORT));
|
||||
|
||||
PRINTF("Created a connection with the server ");
|
||||
PRINT6ADDR(&client_conn->ripaddr);
|
||||
PRINTF(" local/remote port %u/%u\n",
|
||||
UIP_HTONS(client_conn->lport), UIP_HTONS(client_conn->rport));
|
||||
|
||||
etimer_set(&et, 5 * CLOCK_SECOND);
|
||||
while(1) {
|
||||
PROCESS_YIELD();
|
||||
if (etimer_expired(&et)) {
|
||||
send_data();
|
||||
etimer_reset(&et);
|
||||
} else if (ev == tcpip_event) {
|
||||
handle_incoming_data();
|
||||
}
|
||||
}
|
||||
|
||||
PROCESS_END();
|
||||
}
|
|
@ -1,147 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<simconf>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/mrm</project>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/mspsim</project>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/avrora</project>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/serial_socket</project>
|
||||
<simulation>
|
||||
<title>coap-client-server-example</title>
|
||||
<delaytime>-2147483648</delaytime>
|
||||
<randomseed>123456</randomseed>
|
||||
<motedelay_us>1000000</motedelay_us>
|
||||
<radiomedium>
|
||||
org.contikios.cooja.radiomediums.UDGM
|
||||
<transmitting_range>50.0</transmitting_range>
|
||||
<interference_range>100.0</interference_range>
|
||||
<success_ratio_tx>1.0</success_ratio_tx>
|
||||
<success_ratio_rx>1.0</success_ratio_rx>
|
||||
</radiomedium>
|
||||
<events>
|
||||
<logoutput>40000</logoutput>
|
||||
</events>
|
||||
<motetype>
|
||||
org.contikios.cooja.mspmote.SkyMoteType
|
||||
<identifier>sky1</identifier>
|
||||
<description>CoapServer</description>
|
||||
<source EXPORT="discard">[CONTIKI_DIR]/examples/rest-example/rest-server-example.c</source>
|
||||
<commands EXPORT="discard">make rest-server-example.sky TARGET=sky</commands>
|
||||
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/rest-example/rest-server-example.sky</firmware>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.IPAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspClock</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspMoteID</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.Msp802154Radio</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspDebugOutput</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyTemperature</moteinterface>
|
||||
</motetype>
|
||||
<motetype>
|
||||
org.contikios.cooja.mspmote.SkyMoteType
|
||||
<identifier>sky2</identifier>
|
||||
<description>CoapClient</description>
|
||||
<source EXPORT="discard">[CONTIKI_DIR]/examples/rest-example/coap-client-example.c</source>
|
||||
<commands EXPORT="discard">make coap-client-example.sky TARGET=sky</commands>
|
||||
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/rest-example/coap-client-example.sky</firmware>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.IPAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspClock</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspMoteID</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.Msp802154Radio</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspDebugOutput</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyTemperature</moteinterface>
|
||||
</motetype>
|
||||
<mote>
|
||||
<breakpoints />
|
||||
<interface_config>
|
||||
org.contikios.cooja.interfaces.Position
|
||||
<x>54.5338749671737</x>
|
||||
<y>36.41934631024719</y>
|
||||
<z>0.0</z>
|
||||
</interface_config>
|
||||
<interface_config>
|
||||
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||
<id>1</id>
|
||||
</interface_config>
|
||||
<motetype_identifier>sky1</motetype_identifier>
|
||||
</mote>
|
||||
<mote>
|
||||
<breakpoints />
|
||||
<interface_config>
|
||||
org.contikios.cooja.interfaces.Position
|
||||
<x>49.41583327244326</x>
|
||||
<y>52.00647916206431</y>
|
||||
<z>0.0</z>
|
||||
</interface_config>
|
||||
<interface_config>
|
||||
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||
<id>2</id>
|
||||
</interface_config>
|
||||
<motetype_identifier>sky2</motetype_identifier>
|
||||
</mote>
|
||||
</simulation>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.SimControl
|
||||
<width>318</width>
|
||||
<z>2</z>
|
||||
<height>172</height>
|
||||
<location_x>0</location_x>
|
||||
<location_y>0</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.Visualizer
|
||||
<plugin_config>
|
||||
<skin>org.contikios.cooja.plugins.skins.IDVisualizerSkin</skin>
|
||||
<skin>org.contikios.cooja.plugins.skins.AddressVisualizerSkin</skin>
|
||||
<viewport>3.686023978928717 0.0 0.0 3.686023978928717 -20.14794638096936 -127.69712925102564</viewport>
|
||||
</plugin_config>
|
||||
<width>271</width>
|
||||
<z>0</z>
|
||||
<height>211</height>
|
||||
<location_x>666</location_x>
|
||||
<location_y>41</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.LogListener
|
||||
<plugin_config>
|
||||
<filter />
|
||||
</plugin_config>
|
||||
<width>1263</width>
|
||||
<z>1</z>
|
||||
<height>199</height>
|
||||
<location_x>0</location_x>
|
||||
<location_y>339</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.TimeLine
|
||||
<plugin_config>
|
||||
<mote>0</mote>
|
||||
<mote>1</mote>
|
||||
<showRadioRXTX />
|
||||
<showRadioHW />
|
||||
<showLEDs />
|
||||
<split>125</split>
|
||||
<zoomfactor>500.0</zoomfactor>
|
||||
</plugin_config>
|
||||
<width>1263</width>
|
||||
<z>3</z>
|
||||
<height>150</height>
|
||||
<location_x>0</location_x>
|
||||
<location_y>538</location_y>
|
||||
</plugin>
|
||||
</simconf>
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2010, Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef PROJECT_RPL_WEB_CONF_H_
|
||||
#define PROJECT_RPL_WEB_CONF_H_
|
||||
|
||||
/* Disabling RDC and CSMA for demo purposes. Core updates often
|
||||
require more memory. */
|
||||
/* For projects, optimize memory and enable RDC and CSMA again. */
|
||||
#undef NETSTACK_CONF_RDC
|
||||
#define NETSTACK_CONF_RDC nullrdc_driver
|
||||
|
||||
#undef NETSTACK_CONF_MAC
|
||||
#define NETSTACK_CONF_MAC nullmac_driver
|
||||
|
||||
#ifndef QUEUEBUF_CONF_NUM
|
||||
#define QUEUEBUF_CONF_NUM 6
|
||||
#endif
|
||||
|
||||
#ifndef UIP_CONF_BUFFER_SIZE
|
||||
#define UIP_CONF_BUFFER_SIZE 140
|
||||
#endif
|
||||
|
||||
#ifndef UIP_CONF_RECEIVE_WINDOW
|
||||
#define UIP_CONF_RECEIVE_WINDOW 60
|
||||
#endif
|
||||
|
||||
#ifndef WEBSERVER_CONF_CFS_CONNS
|
||||
#define WEBSERVER_CONF_CFS_CONNS 2
|
||||
#endif
|
||||
|
||||
#endif /* PROJECT_RPL_WEB_CONF_H_ */
|
|
@ -1,180 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "contiki.h"
|
||||
#include "contiki-net.h"
|
||||
#include "rest.h"
|
||||
|
||||
#if defined (PLATFORM_HAS_LIGHT)
|
||||
#include "dev/light-sensor.h"
|
||||
#endif
|
||||
#if defined (PLATFORM_HAS_BATT)
|
||||
#include "dev/battery-sensor.h"
|
||||
#endif
|
||||
#if defined (PLATFORM_HAS_SHT11)
|
||||
#include "dev/sht11/sht11-sensor.h"
|
||||
#endif
|
||||
#if defined (PLATFORM_HAS_LEDS)
|
||||
#include "dev/leds.h"
|
||||
#endif
|
||||
|
||||
#define DEBUG 1
|
||||
#if DEBUG
|
||||
#include <stdio.h>
|
||||
#define PRINTF(...) printf(__VA_ARGS__)
|
||||
#define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15])
|
||||
#define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5])
|
||||
#else
|
||||
#define PRINTF(...)
|
||||
#define PRINT6ADDR(addr)
|
||||
#define PRINTLLADDR(addr)
|
||||
#endif
|
||||
|
||||
char temp[100];
|
||||
|
||||
/* Resources are defined by RESOURCE macro, signature: resource name, the http methods it handles and its url*/
|
||||
RESOURCE(helloworld, METHOD_GET, "helloworld");
|
||||
|
||||
/* For each resource defined, there corresponds an handler method which should be defined too.
|
||||
* Name of the handler method should be [resource name]_handler
|
||||
* */
|
||||
void
|
||||
helloworld_handler(REQUEST* request, RESPONSE* response)
|
||||
{
|
||||
sprintf(temp,"Hello World!\n");
|
||||
|
||||
rest_set_header_content_type(response, TEXT_PLAIN);
|
||||
rest_set_response_payload(response, (uint8_t*)temp, strlen(temp));
|
||||
}
|
||||
|
||||
RESOURCE(discover, METHOD_GET, ".well-known/core");
|
||||
void
|
||||
discover_handler(REQUEST* request, RESPONSE* response)
|
||||
{
|
||||
char temp[100];
|
||||
int index = 0;
|
||||
index += sprintf(temp + index, "%s,", "</helloworld>;n=\"HelloWorld\"");
|
||||
#if defined (PLATFORM_HAS_LEDS)
|
||||
index += sprintf(temp + index, "%s,", "</led>;n=\"LedControl\"");
|
||||
#endif
|
||||
#if defined (PLATFORM_HAS_LIGHT)
|
||||
index += sprintf(temp + index, "%s", "</light>;n=\"Light\"");
|
||||
#endif
|
||||
|
||||
rest_set_response_payload(response, (uint8_t*)temp, strlen(temp));
|
||||
rest_set_header_content_type(response, APPLICATION_LINK_FORMAT);
|
||||
}
|
||||
|
||||
#if defined (PLATFORM_HAS_LIGHT)
|
||||
uint16_t light_photosynthetic;
|
||||
uint16_t light_solar;
|
||||
|
||||
void
|
||||
read_light_sensor(uint16_t* light_1, uint16_t* light_2)
|
||||
{
|
||||
*light_1 = light_sensor.value(LIGHT_SENSOR_PHOTOSYNTHETIC);
|
||||
*light_2 = light_sensor.value(LIGHT_SENSOR_TOTAL_SOLAR);
|
||||
}
|
||||
|
||||
/*A simple getter example. Returns the reading from light sensor with a simple etag*/
|
||||
RESOURCE(light, METHOD_GET, "light");
|
||||
void
|
||||
light_handler(REQUEST* request, RESPONSE* response)
|
||||
{
|
||||
read_light_sensor(&light_photosynthetic, &light_solar);
|
||||
sprintf(temp,"%u;%u", light_photosynthetic, light_solar);
|
||||
|
||||
char etag[4] = "ABCD";
|
||||
rest_set_header_content_type(response, TEXT_PLAIN);
|
||||
rest_set_header_etag(response, etag, sizeof(etag));
|
||||
rest_set_response_payload(response, temp, strlen(temp));
|
||||
}
|
||||
#endif /*PLATFORM_HAS_LIGHT*/
|
||||
|
||||
#if defined (PLATFORM_HAS_LEDS)
|
||||
/*A simple actuator example, depending on the color query parameter and post variable mode, corresponding led is activated or deactivated*/
|
||||
RESOURCE(led, METHOD_POST | METHOD_PUT , "led");
|
||||
|
||||
void
|
||||
led_handler(REQUEST* request, RESPONSE* response)
|
||||
{
|
||||
char color[10];
|
||||
char mode[10];
|
||||
uint8_t led = 0;
|
||||
int success = 1;
|
||||
|
||||
if (rest_get_query_variable(request, "color", color, 10)) {
|
||||
PRINTF("color %s\n", color);
|
||||
|
||||
if (!strcmp(color,"red")) {
|
||||
led = LEDS_RED;
|
||||
} else if(!strcmp(color,"green")) {
|
||||
led = LEDS_GREEN;
|
||||
} else if ( !strcmp(color,"blue") ) {
|
||||
led = LEDS_BLUE;
|
||||
} else {
|
||||
success = 0;
|
||||
}
|
||||
} else {
|
||||
success = 0;
|
||||
}
|
||||
|
||||
if (success && rest_get_post_variable(request, "mode", mode, 10)) {
|
||||
PRINTF("mode %s\n", mode);
|
||||
|
||||
if (!strcmp(mode, "on")) {
|
||||
leds_on(led);
|
||||
} else if (!strcmp(mode, "off")) {
|
||||
leds_off(led);
|
||||
} else {
|
||||
success = 0;
|
||||
}
|
||||
} else {
|
||||
success = 0;
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
rest_set_response_status(response, BAD_REQUEST_400);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*A simple actuator example. Toggles the red led*/
|
||||
RESOURCE(toggle, METHOD_GET | METHOD_PUT | METHOD_POST, "toggle");
|
||||
void
|
||||
toggle_handler(REQUEST* request, RESPONSE* response)
|
||||
{
|
||||
leds_toggle(LEDS_RED);
|
||||
}
|
||||
#endif /*defined (CONTIKI_HAS_LEDS)*/
|
||||
|
||||
|
||||
PROCESS(rest_server_example, "Rest Server Example");
|
||||
AUTOSTART_PROCESSES(&rest_server_example);
|
||||
|
||||
PROCESS_THREAD(rest_server_example, ev, data)
|
||||
{
|
||||
PROCESS_BEGIN();
|
||||
|
||||
#ifdef WITH_COAP
|
||||
PRINTF("COAP Server\n");
|
||||
#else
|
||||
PRINTF("HTTP Server\n");
|
||||
#endif
|
||||
|
||||
rest_init();
|
||||
|
||||
#if defined (PLATFORM_HAS_LIGHT)
|
||||
SENSORS_ACTIVATE(light_sensor);
|
||||
rest_activate_resource(&resource_light);
|
||||
#endif
|
||||
#if defined (PLATFORM_HAS_LEDS)
|
||||
rest_activate_resource(&resource_led);
|
||||
rest_activate_resource(&resource_toggle);
|
||||
#endif /*defined (PLATFORM_HAS_LEDS)*/
|
||||
|
||||
rest_activate_resource(&resource_helloworld);
|
||||
rest_activate_resource(&resource_discover);
|
||||
|
||||
PROCESS_END();
|
||||
}
|
|
@ -1,185 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<simconf>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/mrm</project>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/mspsim</project>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/avrora</project>
|
||||
<project EXPORT="discard">[CONTIKI_DIR]/tools/cooja/apps/serial_socket</project>
|
||||
<simulation>
|
||||
<title>REST with RPL router</title>
|
||||
<delaytime>-2147483648</delaytime>
|
||||
<randomseed>123456</randomseed>
|
||||
<motedelay_us>1000000</motedelay_us>
|
||||
<radiomedium>
|
||||
org.contikios.cooja.radiomediums.UDGM
|
||||
<transmitting_range>50.0</transmitting_range>
|
||||
<interference_range>50.0</interference_range>
|
||||
<success_ratio_tx>1.0</success_ratio_tx>
|
||||
<success_ratio_rx>1.0</success_ratio_rx>
|
||||
</radiomedium>
|
||||
<events>
|
||||
<logoutput>40000</logoutput>
|
||||
</events>
|
||||
<motetype>
|
||||
org.contikios.cooja.mspmote.SkyMoteType
|
||||
<identifier>rplroot</identifier>
|
||||
<description>Sky RPL Root</description>
|
||||
<source EXPORT="discard">[CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c</source>
|
||||
<commands EXPORT="discard">make border-router.sky TARGET=sky</commands>
|
||||
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky</firmware>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.IPAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspClock</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspMoteID</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.Msp802154Radio</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspDebugOutput</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyTemperature</moteinterface>
|
||||
</motetype>
|
||||
<motetype>
|
||||
org.contikios.cooja.mspmote.SkyMoteType
|
||||
<identifier>skyweb</identifier>
|
||||
<description>Rest</description>
|
||||
<source EXPORT="discard">[CONTIKI_DIR]/examples/rest-example/rest-server-example.c</source>
|
||||
<commands EXPORT="discard">make rest-server-example.sky TARGET=sky</commands>
|
||||
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/rest-example/rest-server-example.sky</firmware>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.IPAddress</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspClock</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspMoteID</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.Msp802154Radio</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspDebugOutput</moteinterface>
|
||||
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyTemperature</moteinterface>
|
||||
</motetype>
|
||||
<mote>
|
||||
<breakpoints />
|
||||
<interface_config>
|
||||
org.contikios.cooja.interfaces.Position
|
||||
<x>33.260163187353555</x>
|
||||
<y>30.643217359962595</y>
|
||||
<z>0.0</z>
|
||||
</interface_config>
|
||||
<interface_config>
|
||||
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||
<id>1</id>
|
||||
</interface_config>
|
||||
<motetype_identifier>rplroot</motetype_identifier>
|
||||
</mote>
|
||||
<mote>
|
||||
<breakpoints />
|
||||
<interface_config>
|
||||
org.contikios.cooja.interfaces.Position
|
||||
<x>62.239287566073514</x>
|
||||
<y>34.43810269527116</y>
|
||||
<z>0.0</z>
|
||||
</interface_config>
|
||||
<interface_config>
|
||||
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||
<id>2</id>
|
||||
</interface_config>
|
||||
<motetype_identifier>skyweb</motetype_identifier>
|
||||
</mote>
|
||||
<mote>
|
||||
<breakpoints />
|
||||
<interface_config>
|
||||
org.contikios.cooja.interfaces.Position
|
||||
<x>47.68359039801751</x>
|
||||
<y>47.26544238238854</y>
|
||||
<z>0.0</z>
|
||||
</interface_config>
|
||||
<interface_config>
|
||||
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||
<id>3</id>
|
||||
</interface_config>
|
||||
<motetype_identifier>skyweb</motetype_identifier>
|
||||
</mote>
|
||||
</simulation>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.SimControl
|
||||
<width>259</width>
|
||||
<z>1</z>
|
||||
<height>179</height>
|
||||
<location_x>0</location_x>
|
||||
<location_y>0</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.Visualizer
|
||||
<plugin_config>
|
||||
<skin>org.contikios.cooja.plugins.skins.IDVisualizerSkin</skin>
|
||||
<skin>org.contikios.cooja.plugins.skins.UDGMVisualizerSkin</skin>
|
||||
<skin>org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin</skin>
|
||||
<skin>org.contikios.cooja.plugins.skins.AttributeVisualizerSkin</skin>
|
||||
<viewport>10.505309204322225 0.0 0.0 10.505309204322225 -249.89475921566975 -141.01191150973983</viewport>
|
||||
</plugin_config>
|
||||
<width>819</width>
|
||||
<z>5</z>
|
||||
<height>563</height>
|
||||
<location_x>35</location_x>
|
||||
<location_y>306</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.LogListener
|
||||
<plugin_config>
|
||||
<filter />
|
||||
</plugin_config>
|
||||
<width>762</width>
|
||||
<z>0</z>
|
||||
<height>326</height>
|
||||
<location_x>36</location_x>
|
||||
<location_y>296</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.RadioLogger
|
||||
<plugin_config>
|
||||
<split>150</split>
|
||||
<analyzers name="6lowpan" />
|
||||
</plugin_config>
|
||||
<width>815</width>
|
||||
<z>4</z>
|
||||
<height>385</height>
|
||||
<location_x>255</location_x>
|
||||
<location_y>8</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
SerialSocketServer
|
||||
<mote_arg>0</mote_arg>
|
||||
<width>422</width>
|
||||
<z>3</z>
|
||||
<height>74</height>
|
||||
<location_x>1234</location_x>
|
||||
<location_y>93</location_y>
|
||||
</plugin>
|
||||
<plugin>
|
||||
org.contikios.cooja.plugins.TimeLine
|
||||
<plugin_config>
|
||||
<mote>0</mote>
|
||||
<mote>1</mote>
|
||||
<showRadioRXTX />
|
||||
<showRadioHW />
|
||||
<showLEDs />
|
||||
<showWatchpoints />
|
||||
<split>125</split>
|
||||
<zoomfactor>25.49079397896416</zoomfactor>
|
||||
</plugin_config>
|
||||
<width>1624</width>
|
||||
<z>2</z>
|
||||
<height>252</height>
|
||||
<location_x>166</location_x>
|
||||
<location_y>699</location_y>
|
||||
</plugin>
|
||||
</simconf>
|
||||
|
|
@ -7,42 +7,8 @@ all: remotepowerswitch
|
|||
CONTIKI=../../../
|
||||
CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"
|
||||
|
||||
WITH_COAP=13
|
||||
|
||||
# REST framework, requires WITH_COAP
|
||||
ifeq ($(WITH_COAP), 13)
|
||||
${info INFO: compiling with CoAP-13}
|
||||
CFLAGS += -DWITH_COAP=13
|
||||
CFLAGS += -DREST=coap_rest_implementation
|
||||
CFLAGS += -DUIP_CONF_TCP=0
|
||||
APPS += er-coap-13
|
||||
else ifeq ($(WITH_COAP), 12)
|
||||
${info INFO: compiling with CoAP-12}
|
||||
CFLAGS += -DWITH_COAP=12
|
||||
CFLAGS += -DREST=coap_rest_implementation
|
||||
CFLAGS += -DUIP_CONF_TCP=0
|
||||
APPS += er-coap-12
|
||||
else ifeq ($(WITH_COAP), 7)
|
||||
${info INFO: compiling with CoAP-08}
|
||||
CFLAGS += -DWITH_COAP=7
|
||||
CFLAGS += -DREST=coap_rest_implementation
|
||||
CFLAGS += -DUIP_CONF_TCP=0
|
||||
APPS += er-coap-07
|
||||
else ifeq ($(WITH_COAP), 3)
|
||||
${info INFO: compiling with CoAP-03}
|
||||
CFLAGS += -DWITH_COAP=3
|
||||
CFLAGS += -DREST=coap_rest_implementation
|
||||
CFLAGS += -DUIP_CONF_TCP=0
|
||||
APPS += er-coap-03
|
||||
else
|
||||
${info INFO: compiling with HTTP}
|
||||
CFLAGS += -DWITH_HTTP
|
||||
CFLAGS += -DREST=http_rest_implementation
|
||||
CFLAGS += -DUIP_CONF_TCP=1
|
||||
APPS += er-http-engine
|
||||
endif
|
||||
|
||||
APPS += erbium
|
||||
APPS += er-coap
|
||||
APPS += rest-engine
|
||||
|
||||
CONTIKI_WITH_IPV6 = 1
|
||||
include $(CONTIKI)/Makefile.include
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
/*
|
||||
* Remote Power Switch Example for the Seed-Eye Board
|
||||
* Copyright (c) 2013, Giovanni Pellerano
|
||||
*
|
||||
*
|
||||
* Ownership: Scuola Superiore Sant'Anna (http://www.sssup.it) and
|
||||
* Consorzio Nazionale Interuniversitario per le Telecomunicazioni
|
||||
* (http://www.cnit.it).
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
|
@ -33,7 +33,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* \addtogroup Remote Power Switch Example for the Seed-Eye Board
|
||||
*
|
||||
|
@ -55,20 +55,21 @@
|
|||
#include "contiki.h"
|
||||
#include "contiki-net.h"
|
||||
|
||||
#include "erbium.h"
|
||||
#include "rest-engine.h"
|
||||
|
||||
#include "dev/leds.h"
|
||||
|
||||
#include <p32xxxx.h>
|
||||
|
||||
RESOURCE(toggle, METHOD_GET | METHOD_PUT | METHOD_POST, "actuators/powerswitch", "title=\"Red LED\";rt=\"Control\"");
|
||||
void
|
||||
toggle_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset)
|
||||
{
|
||||
leds_toggle(LEDS_RED);
|
||||
|
||||
|
||||
PORTEbits.RE0 = !PORTEbits.RE0;
|
||||
}
|
||||
RESOURCE(resource_toggle, "title=\"Red LED\";rt=\"Control\"", toggle_handler, toggle_handler, toggle_handler, NULL);
|
||||
|
||||
|
||||
PROCESS(remote_power_switch, "Remote Power Switch");
|
||||
|
||||
|
@ -79,11 +80,11 @@ PROCESS_THREAD(remote_power_switch, ev, data)
|
|||
PROCESS_BEGIN();
|
||||
|
||||
rest_init_engine();
|
||||
|
||||
|
||||
TRISEbits.TRISE0 = 0;
|
||||
PORTEbits.RE0 = 0;
|
||||
|
||||
rest_activate_resource(&resource_toggle);
|
||||
rest_activate_resource(&resource_toggle, "actuators/powerswitch");
|
||||
|
||||
while(1) {
|
||||
PROCESS_WAIT_EVENT();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue