osd-contiki/dev/cc1200/cc1200-conf.h
2016-08-12 01:23:49 +01:00

226 lines
8.6 KiB
C

/*
* Copyright (c) 2015, Weptech elektronik GmbH Germany
* http://www.weptech.de
*
* 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 copyright holder 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 COPYRIGHT HOLDERS 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
* COPYRIGHT HOLDER 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.
*
* This file is part of the Contiki operating system.
*/
#ifndef CC1200_H_
#define CC1200_H_
#include "contiki.h"
/*---------------------------------------------------------------------------*/
/*
* Can we use GPIO2 (in addition to GPIO0)?
*
* If this is the case, we can easily handle payloads > 125 bytes
* (and even > 127 bytes). If GPIO2 is available, we use it as an indicator
* pin for RX / TX FIFO threshold.
*/
#ifdef CC1200_CONF_USE_GPIO2
#define CC1200_USE_GPIO2 CC1200_CONF_USE_GPIO2
#else
#define CC1200_USE_GPIO2 1
#endif
/*---------------------------------------------------------------------------*/
/*
* The maximum payload length the driver can handle.
*
* - If CC1200_MAX_PAYLOAD_LEN <= 125 and CC1200_USE_GPIO2 == 0, we read
* out the RX FIFO at the end of the packet. RXOFF_MODE is set to RX in this
* case.
* - If 125 < CC1200_MAX_PAYLOAD_LEN <= 127 and CC1200_USE_GPIO2 == 0, we
* also read out the RX FIFO at the end of the packet, but read out
* RSSI + LQI "by hand". In this case, we also have to restart RX
* manually because RSSI + LQI are overwritten as soon as RX re-starts.
* This will lead to an increased RX/RX turnaround time.
* - If CC1200_USE_GPIO2 is set, we can use an arbitrary payload length
* (only limited by the payload length defined in the phy header).
*
* See below for 802.15.4g support.
*/
#ifdef CC1200_CONF_MAX_PAYLOAD_LEN
#define CC1200_MAX_PAYLOAD_LEN CC1200_CONF_MAX_PAYLOAD_LEN
#else
#define CC1200_MAX_PAYLOAD_LEN 127
#endif
/*---------------------------------------------------------------------------*/
/*
* The RX watchdog is used to check whether the radio is in RX mode at regular
* intervals (once per second). Can be used to improve reliability especially
* if NullRDC is used. Turned of by default.
*/
#ifdef CC1200_CONF_USE_RX_WATCHDOG
#define CC1200_USE_RX_WATCHDOG CC1200_CONF_USE_RX_WATCHDOG
#else
#define CC1200_USE_RX_WATCHDOG 0
#endif
/*---------------------------------------------------------------------------*/
/*
* Use 802.15.4g frame format? Supports frame lenghts up to 2047 bytes!
*/
#ifdef CC1200_CONF_802154G
#define CC1200_802154G CC1200_CONF_802154G
#else
#define CC1200_802154G 0
#endif
/*---------------------------------------------------------------------------*/
/*
* Do we use withening in 802.15.4g mode? Set to 1 if enabled, 0 otherwise.
*/
#ifdef CC1200_CONF_802154G_WHITENING
#define CC1200_802154G_WHITENING CC1200_CONF_802154G_WHITENING
#else
#define CC1200_802154G_WHITENING 0
#endif
/*---------------------------------------------------------------------------*/
/*
* Do we use CRC16 in 802.15.4g mode? Set to 1 if enabled, 0 otherwise.
*
* It set to 0, we use FCS type 0: CRC32.
*/
#ifdef CC1200_CONF_802154G_CRC16
#define CC1200_802154G_CRC16 CC1200_CONF_802154G_CRC16
#else
/* Use FCS type 0: CRC32 */
#define CC1200_802154G_CRC16 0
#endif
/*---------------------------------------------------------------------------*/
/* The RF configuration to be used. */
#ifdef CC1200_CONF_RF_CFG
#define CC1200_RF_CFG CC1200_CONF_RF_CFG
#else
#define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps
#endif
/*---------------------------------------------------------------------------*/
/*
* The RSSI offset in dBm (int8_t)
*
* Might be hardware dependent, so we make it a configuration parameter.
* This parameter is written to AGC_GAIN_ADJUST.GAIN_ADJUSTMENT
*/
#ifdef CC1200_CONF_RSSI_OFFSET
#define CC1200_RSSI_OFFSET CC1200_CONF_RSSI_OFFSET
#else
#define CC1200_RSSI_OFFSET (-81)
#endif
/*---------------------------------------------------------------------------*/
/*
* The frequency offset
*
* Might be hardware dependent (e.g. depending on crystal load capacitances),
* so we make it a configuration parameter. Written to FREQOFF1 / FREQOFF2.
* Signed 16 bit number, see cc1200 user's guide.
*
* TODO: Make it a parameter for set_value() / get_value()
*/
#ifdef CC1200_CONF_FREQ_OFFSET
#define CC1200_FREQ_OFFSET CC1200_CONF_FREQ_OFFSET
#else
#define CC1200_FREQ_OFFSET (0)
#endif
/*---------------------------------------------------------------------------*/
/*
* The default channel to use.
*
* Permitted values depending on the data rate + band used are defined
* in the appropriate rf configuration file. Make sure the default value
* is within these limits!
*/
#ifdef CC1200_CONF_DEFAULT_CHANNEL
#define CC1200_DEFAULT_CHANNEL CC1200_CONF_DEFAULT_CHANNEL
#else
/* 868.325 MHz */
#define CC1200_DEFAULT_CHANNEL 26
#endif
/*---------------------------------------------------------------------------*/
/*
* Wether to use auto calibration or not.
*
* If set to 0, calibration is performed manually when turning the radio
* on (on()), when transmitting (transmit()) or when changing the channel.
* Enabling auto calibration will increase turn around times +
* energy consumption. If enabled, we calibrate every time we go from
* IDLE to RX or TX.
* When RDC or channel hopping is used, there is no need to turn calibration
* on because either on() is called frequently or the channel is updated.
*/
#ifdef CC1200_CONF_AUTOCAL
#define CC1200_AUTOCAL CC1200_CONF_AUTOCAL
#else
#define CC1200_AUTOCAL 0
#endif
/*---------------------------------------------------------------------------*/
/*
* If CC1200_AUTOCAL is not set, we use this parameter to defer
* calibration until a certain amount of time has expired.
*
* This is what happens in detail:
*
* - We (manually) calibrate once after initialization
* - We (manually) calibrate every time we change the channel
* - We (manually) calibrate when the radio is turned on() only if
* the timeout has expired
* - We (manually) calibrate when transmitting only of the timeout has expired
*
* Set this parameter to 0 when this feature is not used. In this case we
* (manually) calibrate in all situations mentioned above.
*/
#ifdef CC1200_CONF_CAL_TIMEOUT_SECONDS
#define CC1200_CAL_TIMEOUT_SECONDS CC1200_CONF_CAL_TIMEOUT_SECONDS
#else
/* Calibrate at the latest every 15 minutes */
#define CC1200_CAL_TIMEOUT_SECONDS 900
#endif
/*---------------------------------------------------------------------------*/
/*
* If defined, use these LEDS to indicate TX activity
*
* The LEDs are turned on once the radio enters TX mode
* (together with ENERGEST_ON(ENERGEST_TYPE_TRANSMIT),
* and turned of as soon as TX has completed.
*/
#ifdef CC1200_CONF_TX_LEDS
#define CC1200_TX_LEDS CC1200_CONF_TX_LEDS
#endif
/*---------------------------------------------------------------------------*/
/*
* If defined, use these LEDS to indicate RX activity
*
* The LEDs are turned on as soon as the first byte is read out from
* the RX FIFO
*/
#ifdef CC1200_CONF_RX_LED
#define CC1200_RX_LEDS CC1200_CONF_RX_LEDS
#endif
/*---------------------------------------------------------------------------*/
#endif /* CC1200_H_ */