From 5112082a4828d472c48653859bc61e8d0ba74ca7 Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 28 Mar 2014 19:51:32 +0100 Subject: [PATCH] Extended radio API definitions with support for setting channel, pan id, etc. --- core/dev/radio.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/core/dev/radio.h b/core/dev/radio.h index 69eee756e..eed4f0929 100644 --- a/core/dev/radio.h +++ b/core/dev/radio.h @@ -54,13 +54,58 @@ #ifndef RADIO_H_ #define RADIO_H_ +#include + +typedef int radio_value_t; +typedef unsigned radio_param_t; + +enum { + RADIO_PARAM_POWER_MODE, + RADIO_PARAM_CHANNEL, + RADIO_PARAM_PAN_ID, + RADIO_PARAM_16BIT_ADDR, + /** Address handler take care of address filtering and sending autoack */ + RADIO_PARAM_ADDRESS_HANDLER, + /** Transmission power in dBm */ + RADIO_PARAM_TXPOWER, + /** Received signal strength in dBm */ + RADIO_PARAM_RSSI, + + /** 64 bit addresses need to be used with radio.get_object()/set_object() */ + RADIO_PARAM_64BIT_ADDR, + + /** Constants (read only) */ + RADIO_CONST_CHANNEL_MIN, + RADIO_CONST_CHANNEL_MAX, + RADIO_CONST_TXPOWER_MIN, + RADIO_CONST_TXPOWER_MAX +}; + +/* Radio power modes */ +enum { + RADIO_POWER_MODE_OFF, + RADIO_POWER_MODE_ON +}; + +/* Bit flags for the address handler */ +#define RADIO_ADDRESS_HANDLER_FILTER 1 +#define RADIO_ADDRESS_HANDLER_AUTOACK 2 + +/* Radio return values when setting or getting radio parameters. */ +typedef enum { + RADIO_RESULT_OK, + RADIO_RESULT_NOT_SUPPORTED, + RADIO_RESULT_INVALID_VALUE, + RADIO_RESULT_ERROR +} radio_result_t; + /** * The structure of a device driver for a radio in Contiki. */ struct radio_driver { int (* init)(void); - + /** Prepare the radio with a packet to be sent. */ int (* prepare)(const void *payload, unsigned short payload_len); @@ -88,6 +133,22 @@ struct radio_driver { /** Turn the radio off. */ int (* off)(void); + + /** Get a radio parameter */ + radio_result_t (* get_value)(radio_param_t param, radio_value_t *value); + + /** Set a radio parameter */ + radio_result_t (* set_value)(radio_param_t param, radio_value_t value); + + /** Get a radio object (for example a 64 bit address) */ + radio_result_t (* get_object)(radio_param_t param, void *dest, size_t size); + + /** Set a radio object (for example a 64 bit address). The data + is copied and the object memory will not be accessed after the call. + */ + radio_result_t (* set_object)(radio_param_t param, const void *src, + size_t size); + }; /* Generic radio return values. */