diff options
Diffstat (limited to 'nuttx/include/nuttx/wireless/cc1101.h')
-rw-r--r-- | nuttx/include/nuttx/wireless/cc1101.h | 464 |
1 files changed, 0 insertions, 464 deletions
diff --git a/nuttx/include/nuttx/wireless/cc1101.h b/nuttx/include/nuttx/wireless/cc1101.h deleted file mode 100644 index 9d6b2a673..000000000 --- a/nuttx/include/nuttx/wireless/cc1101.h +++ /dev/null @@ -1,464 +0,0 @@ -/**************************************************************************** - * include/nuttx/wireless/cc1101.h - * - * Copyright (C) 2011 Uros Platise. All rights reserved. - * - * Authors: Uros Platise <uros.platise@isotel.eu> - * - * 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 NuttX 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 OWNER 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. - * - ****************************************************************************/ - -/** \file - * \author Uros Platise - * \brief Chipcon CC1101 Device Driver - **/ - -#ifndef __INCLUDE_NUTTX_WIRELESS_CC1101_H -#define __INCLUDE_NUTTX_WIRELESS_CC1101_H - -#include <nuttx/config.h> -#include <nuttx/spi.h> - -#include <stdint.h> -#include <stdbool.h> - -/**************************************************************************** - * Pre-Processor Declarations - ****************************************************************************/ - -/* Present maximum packet length */ - -#define CC1101_PACKET_MAXTOTALLEN 63 -#define CC1101_PACKET_MAXDATALEN 61 - -/* - * General Purpose, Test Output Pin Options - */ - -/* CC1101 General Purpose Pins */ - -#define CC1101_PIN_GDO0 2 -#define CC1101_PIN_GDO1 1 -#define CC1101_PIN_GDO2 0 - -/* Associated to the RX FIFO: Asserts when RX FIFO is filled at or above - * the RX FIFO threshold. De-asserts when RX FIFO is drained below the - * same threshold. */ -#define CC1101_GDO_RXFIFO_THR 0x00 - -/* Associated to the RX FIFO: Asserts when RX FIFO is filled at or above - * the RX FIFO threshold or the end of packet is reached. De-asserts when - * the RX FIFO is empty. */ -#define CC1101_GDO_RXFIFO_THREND 0x01 - -/* Associated to the TX FIFO: Asserts when the TX FIFO is filled at or - * above the TX FIFO threshold. De-asserts when the TX FIFO is below the - * same threshold. */ -#define CC1101_GDO_TXFIFO_THR 0x02 - -/* Associated to the TX FIFO: Asserts when TX FIFO is full. De-asserts - * when the TX FIFO is drained below theTX FIFO threshold. */ -#define CC1101_GDO_TXFIFO_FULL 0x03 - -/* Asserts when the RX FIFO has overflowed. De-asserts when the FIFO has - * been flushed. */ -#define CC1101_GDO_RXFIFO_OVR 0x04 - -/* Asserts when the TX FIFO has underflowed. De-asserts when the FIFO is - * flushed. */ -#define CC1101_GDO_TXFIFO_UNR 0x05 - -/* Asserts when sync word has been sent / received, and de-asserts at the - * end of the packet. In RX, the pin will de-assert when the optional - * address check fails or the RX FIFO overflows. In TX the pin will - * de-assert if the TX FIFO underflows. */ -#define CC1101_GDO_SYNC 0x06 - -/* Asserts when a packet has been received with CRC OK. De-asserts when - * the first byte is read from the RX FIFO. */ -#define CC1101_GDO_PKTRCV_CRCOK 0x07 - -/* Preamble Quality Reached. Asserts when the PQI is above the programmed - * PQT value. */ -#define CC1101_GDO_PREAMBLE 0x08 - -/* Clear channel assessment. High when RSSI level is below threshold - * (dependent on the current CCA_MODE setting). */ -#define CC1101_GDO_CHCLEAR 0x09 - -/* Lock detector output. The PLL is in lock if the lock detector output - * has a positive transition or is constantly logic high. To check for - * PLL lock the lock detector output should be used as an interrupt for - * the MCU. */ -#define CC1101_GDO_LOCK 0x0A - -/* Serial Clock. Synchronous to the data in synchronous serial mode. - * In RX mode, data is set up on the falling edge by CC1101 when GDOx_INV=0. - * In TX mode, data is sampled by CC1101 on the rising edge of the serial - * clock when GDOx_INV=0. */ -#define CC1101_GDO_SSCLK 0x0B - -/* Serial Synchronous Data Output. Used for synchronous serial mode. */ -#define CC1101_GDO_SSDO 0x0C - -/* Serial Data Output. Used for asynchronous serial mode. */ -#define CC1101_GDO_ASDO 0x0D - -/* Carrier sense. High if RSSI level is above threshold. */ -#define CC1101_GDO_CARRIER 0x0E - -/* CRC_OK. The last CRC comparison matched. Cleared when entering or - * restarting RX mode. */ -#define CC1101_GDO_CRCOK 0x0F - -/* RX_HARD_DATA[1]. Can be used together with RX_SYMBOL_TICK for - * alternative serial RX output. */ -#define CC1101_GDO_RXOUT1 0x16 - -/* RX_HARD_DATA[0]. Can be used together with RX_SYMBOL_TICK for - * alternative serial RX output. */ -#define CC1101_GDO_RXOUT0 0x17 - -/* PA_PD. Note: PA_PD will have the same signal level in SLEEP and TX - * states. To control an external PA or RX/TX switch in applications - * where the SLEEP state is used it is recommended to use GDOx_CFGx=0x2F - * instead. */ -#define CC1101_GDO_PA_PD 0x1B - -/* LNA_PD. Note: LNA_PD will have the same signal level in SLEEP and RX - * states. To control an external LNA or RX/TX switch in applications - * where the SLEEP state is used it is recommended to use GDOx_CFGx=0x2F - * instead. */ -#define CC1101_GDO_LNA_PD 0x1C - -/* RX_SYMBOL_TICK. Can be used together with RX_HARD_DATA for alternative - * serial RX output. */ -#define CC1101_GDO_RXSYMTICK 0x1D - -#define CC1101_GDO_WOR_EVNT0 0x24 -#define CC1101_GDO_WOR_EVNT1 0x25 -#define CC1101_GDO_CLK32K 0x27 -#define CC1101_GDO_CHIP_RDYn 0x29 -#define CC1101_GDO_XOSC_STABLE 0x2B - -/* GDO0_Z_EN_N. When this output is 0, GDO0 is configured as input - * (for serial TX data). */ -#define CC1101_GDO_GDO0_Z_EN_N 0x2D - -/* High impedance (3-state). */ -#define CC1101_GDO_HIZ 0x2E - -/* HW to 0 (HW1 achieved by setting GDOx_INV=1). Can be used to control - * an external LNA/PA or RX/TX switch. */ -#define CC1101_GDO_HW 0x2F - -/* There are 3 GDO pins, but only one CLK_XOSC/n can be selected as an - * output at any time. If CLK_XOSC/n is to be monitored on one of the - * GDO pins, the other two GDO pins must be configured to values less - * than 0x30. The GDO0 default value is CLK_XOSC/192. To optimize RF - * performance, these signals should not be used while the radio is - * in RX or TX mode. */ -#define CC1101_GDO_CLK_XOSC1 0x30 -#define CC1101_GDO_CLK_XOSC1_5 0x31 -#define CC1101_GDO_CLK_XOSC2 0x32 -#define CC1101_GDO_CLK_XOSC3 0x33 -#define CC1101_GDO_CLK_XOSC4 0x34 -#define CC1101_GDO_CLK_XOSC6 0x35 -#define CC1101_GDO_CLK_XOSC8 0x36 -#define CC1101_GDO_CLK_XOSC12 0x37 -#define CC1101_GDO_CLK_XOSC16 0x38 -#define CC1101_GDO_CLK_XOSC24 0x39 -#define CC1101_GDO_CLK_XOSC32 0x3A -#define CC1101_GDO_CLK_XOSC48 0x3B -#define CC1101_GDO_CLK_XOSC64 0x3C -#define CC1101_GDO_CLK_XOSC96 0x3D -#define CC1101_GDO_CLK_XOSC128 0x3E -#define CC1101_GDO_CLK_XOSC192 0x3F - - -#ifndef __ASSEMBLY__ - -#undef EXTERN -#if defined(__cplusplus) -#define EXTERN extern "C" -extern "C" { -#else -#define EXTERN extern -#endif - -/**************************************************************************** - * Public Data Types - ****************************************************************************/ - -struct cc1101_dev_s; - -/** The RF Settings includes only those fields required to configure - * the RF radio. Other configuration fields depended on this driver - * are configured by the cc1101_init(). - */ -struct c1101_rfsettings_s { - uint8_t FSCTRL1; /* Frequency synthesizer control. */ - uint8_t FSCTRL0; /* Frequency synthesizer control. */ - - uint8_t FREQ2; /* Frequency control word, high byte. */ - uint8_t FREQ1; /* Frequency control word, middle byte. */ - uint8_t FREQ0; /* Frequency control word, low byte. */ - - uint8_t MDMCFG4; /* Modem configuration. */ - uint8_t MDMCFG3; /* Modem configuration. */ - uint8_t MDMCFG2; /* Modem configuration. */ - uint8_t MDMCFG1; /* Modem configuration. */ - uint8_t MDMCFG0; /* Modem configuration. */ - - uint8_t DEVIATN; /* Modem deviation setting (when FSK modulation is enabled). */ - - /* GAP */ - - uint8_t FOCCFG; /* Frequency Offset Compensation Configuration. */ - - uint8_t BSCFG; /* Bit synchronization Configuration. */ - - uint8_t AGCCTRL2; /* AGC control. */ - uint8_t AGCCTRL1; /* AGC control. */ - uint8_t AGCCTRL0; /* AGC control. */ - - /* GAP */ - - uint8_t FREND1; /* Front end RX configuration. */ - uint8_t FREND0; /* Front end RX configuration. */ - - uint8_t FSCAL3; /* Frequency synthesizer calibration. */ - uint8_t FSCAL2; /* Frequency synthesizer calibration. */ - uint8_t FSCAL1; /* Frequency synthesizer calibration. */ - uint8_t FSCAL0; /* Frequency synthesizer calibration. */ - - /* REGULATORY LIMITS */ - - uint8_t CHMIN; /* Channel Range defintion MIN .. */ - uint8_t CHMAX; /* .. and MAX */ - uint8_t PAMAX; /* at given maximum output power */ - - /* Power Table, for ramp-up/down and ASK modulation defined for - * output power values as: - * PA = {-30, -20, -15, -10, -5, 0, 5, 10} [dBm] - */ - uint8_t PA[8]; -}; - - -/**************************************************************************** - * RF Configuration Database - ****************************************************************************/ - -EXTERN const struct c1101_rfsettings_s - -// \todo Recalculate ERP in maximum power level - -/* 868 MHz, GFSK, 100 kbps, ISM Region 1 (Europe only) - * - * ISM Region 1 (Europe) only, Band 868–870 MHz - * - * Frequency bands for non-specific short range devices in Europe: - * - * Frequency ERP Duty Cycle Bandwidth Remarks - * 868 – 868.6 MHz +14 dBm < 1% No limits - * 868.7 – 869.2 MHz +14 dBm < 0.1% No limits - * 869.3 – 869.4 MHz +10 dBm No limits < 25 kHz Appropriate access protocol required - * 869.4 – 869.65 MHz +27 dBm < 10% < 25 kHz Channels may be combined to one high speed channel - * 869.7 -870 MHz +7 dBm No limits No limits - * - * Frequency Band For License-Free Specific Applications in Europe - * - * Frequency Application ERP Duty Cycle Bandwidth - * 868.6 – 868.7 MHz Alarms +10 dBm < 0.1% 25 kHz(1) - * 869.2 – 869.25 MHz Social Alarms +10 dBm < 0.1% 25 kHz - * 869.25 – 869.3 MHz Alarms +10 dBm < 0.1% 25 kHz - * 869.65 -869.7 MHz Alarms +14 dBm < 10% 25 kHz - * 863 – 865 MHz Radio Microphones +10 dBm No limits 200 kHz - * 863 -865 MHz Wireless Audio Applications +10 dBm No limits 300 kHz - * - * Duty Cycle Limit Total On Time Maximum On Time of Minimum Off Time of - * Within One Hour One Transmission Two Transmission - * < 0.1% 3.6 seconds 0.72 seconds 0.72 seconds - * < 1% 36 seconds 3.6 seconds 1.8 seconds - * < 10% 360 seconds 36 seconds 3.6 seconds - * - * Reference: TI Application Report: swra048.pdf, May 2005 - * ISM-Band and Short Range Device Regulatory Compliance Overview - */ - cc1101_rfsettings_ISM1_868MHzGFSK100kbps, - - -/* 905 MHz, GFSK, 250 kbps, ISM Region 2 (America only) - * - * ISM Region 2 (America) only, Band 902–928 MHz - * - * Cordless phones 1 W - * Microwave ovens 750 W - * Industrial heaters 100 kW - * Military radar 1000 kW - */ - cc1101_rfsettings_ISM2_905MHzGFSK250kbps; - - -/**************************************************************************** - * Public Function Prototypes - ****************************************************************************/ - -/** Initialize Chipcon CC1101 Chip. - * After initialization CC1101 is ready to listen, receive and transmit - * messages on the default channel 0 at given RF configuration. - * - * \param spi SPI Device Structure - * \param isrpin Select the CC1101_PIN_GDOx used to signal interrupts - * \param rfsettings Pointer to default RF Settings loaded at boot time. - * \return Pointer to newly allocated CC1101 structure or NULL on error with errno set. - * - * Possible errno as set by this function on error: - * - ENODEV: When device addressed is not compatible or it is not a CC1101 - * - EFAULT: When there is no device - * - ENOMEM: Out of kernel memory to allocate the device - * - EBUSY: When device is already addressed by other device driver (not yet supported by low-level driver) - **/ -EXTERN struct cc1101_dev_s * cc1101_init(struct spi_dev_s * spi, uint8_t isrpin, - uint32_t pinset, const struct c1101_rfsettings_s * rfsettings); - - -/** Deinitialize Chipcon CC1101 Chip - * - * \param dev Device to CC1101 device structure, as returned by the cc1101_init() - * \return OK On success - * - **/ -EXTERN int cc1101_deinit(struct cc1101_dev_s * dev); - - -/** Power up device, start conversion. \return Zero on success. */ -EXTERN int cc1101_powerup(struct cc1101_dev_s * dev); - -/** Power down device, stop conversion. \return Zero on success. */ -EXTERN int cc1101_powerdown(struct cc1101_dev_s * dev); - -/** Set Multi Purpose Output Function. \return Zero on success. */ -EXTERN int cc1101_setgdo(struct cc1101_dev_s * dev, uint8_t pin, uint8_t function); - -/** Set RF settings. Use one from the database above. */ -EXTERN int cc1101_setrf(struct cc1101_dev_s * dev, const struct c1101_rfsettings_s *settings); - -/** Set Channel. - * Note that regulatory check is made and sending may be prohibited. - * - * \retval 0 On success, sending and receiving is allowed. - * \retval 1 Only receive mode is allowed. - * \retval <0 On error. - */ -EXTERN int cc1101_setchannel(struct cc1101_dev_s * dev, uint8_t channel); - - -/** Set Output Power - * - * \param power Value from 0 - 8, where 0 means power off, and values - * from 1 .. 8 denote the following output power in dBm: - * {-30, -20, -15, -10, -5, 0, 5, 10} [dBm] - * - * If power is above the regulatory limit (defined by the RF settings) - * it is limited. - * - * \return Actual output power in range from 0..8. - */ -EXTERN uint8_t cc1101_setpower(struct cc1101_dev_s * dev, uint8_t power); - - -/** Convert RSSI as obtained from CC1101 to [dBm] */ -EXTERN int cc1101_calcRSSIdBm(int rssi); - - -/** Enter receive mode and wait for a packet. - * If transmission is in progress, receive mode is entered upon its - * completion. As long cc1101_idle() is not called, each transmission - * returns to receive mode. - * - * \param dev Device to CC1101 structure - * \return Zero on success. - */ -EXTERN int cc1101_receive(struct cc1101_dev_s * dev); - - -/** Read received packet - * - * If size of buffer is too small then the remaining part of data can - * be discarded by the driver. - * - * Packet contains raw data, including the two bytes: - * - RSSI and - * - LQI - * appended at the end of the message. - * - * To inquery about the data pending size you the following: - * - pass buf=NULL and size > 0, returns pending data packet size - * - pass buf=NULL and size = 0, returns maximum data packet size - * - * NOTE: messages length are typically defined by the MAC, transmit/ - * receive windows at some rate. - */ -EXTERN int cc1101_read(struct cc1101_dev_s * dev, uint8_t * buf, size_t size); - - -/** Write data to be send, using the cc1101_send() - * - * \param dev Device to CC1101 structure - * \param buf Pointer to data. - * \param size Size must be within limits, otherwise data is truncated. - * Present driver limitation supports a single cc1101_write() - * prioer cc1101_send() is called. - */ -EXTERN int cc1101_write(struct cc1101_dev_s * dev, const uint8_t * buf, size_t size); - - -/** Send data previously writtenusing cc1101_write() - * - * \param dev Device to CC1101 structure - * \return Zero on success. - */ -EXTERN int cc1101_send(struct cc1101_dev_s * dev); - - -/** Enter idle state (after reception and transmission completes). - * - * \return Zero on success. - */ -EXTERN int cc1101_idle(struct cc1101_dev_s * dev); - - -#undef EXTERN -#if defined(__cplusplus) -} -#endif -#endif /* __ASSEMBLY__ */ -#endif /* __INCLUDE_NUTTX_WIRELESS_CC1101_H */ |