mirror of
https://github.com/apache/nuttx.git
synced 2026-06-09 02:44:53 +08:00
Add initial CC1101 wireless logic from Uros
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3617 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
+30
-9
@@ -125,7 +125,7 @@ typedef struct event_s event_t;
|
||||
*
|
||||
* \return Valid structure or NULL on error with errno set.
|
||||
*/
|
||||
event_t * event_create( void * base );
|
||||
event_t * event_create(void * base);
|
||||
|
||||
/** Delete unused instance of Events. A call to this function also destroys
|
||||
* all bindings.
|
||||
@@ -133,16 +133,20 @@ event_t * event_create( void * base );
|
||||
* \param events Pointer to a structure as returned by event_create()
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_delete( event_t *events );
|
||||
int event_delete(event_t *events);
|
||||
|
||||
/** Post an event, equal to period = 0
|
||||
*
|
||||
* In case of connected events, those are called prior calling
|
||||
* the given event. Since the event is called last on the list
|
||||
* it may serve as an acknowledgement mechanism.
|
||||
*
|
||||
* \param events Pointer to a structure as returned by event_create()
|
||||
* \param event Callback to be called
|
||||
* \param arg Optional argument to be passed to the event.
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_post( event_t *events, event_callback_t event, void *arg );
|
||||
int event_post(event_t *events, event_callback_t event, void *arg);
|
||||
|
||||
/** Trigger an event without calling it but may trigger connected events
|
||||
*
|
||||
@@ -151,7 +155,23 @@ int event_post( event_t *events, event_callback_t event, void *arg );
|
||||
* \param arg Optional argument to be passed to the event.
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_signal( event_t *events, event_callback_t event, void *arg );
|
||||
int event_signal(event_t *events, event_callback_t event, void *arg);
|
||||
|
||||
/** Calls all connected events only immediately.
|
||||
*
|
||||
* \param events Pointer to a structure as returned by event_create()
|
||||
* \param event Callback to be called
|
||||
* \param arg Optional argument to be passed to the event.
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_call(event_t *events, event_callback_t event, void *arg);
|
||||
|
||||
/** Are there any connections to given event
|
||||
* \param events Pointer to a structure as returned by event_create()
|
||||
* \param event Callback to be called
|
||||
* \return 1 When empty otherwise 0
|
||||
*/
|
||||
int event_isempty(event_t *events, event_callback_t event);
|
||||
|
||||
/** Start timer with given period
|
||||
*
|
||||
@@ -161,7 +181,7 @@ int event_signal( event_t *events, event_callback_t event, void *arg );
|
||||
* \param period Time to first occurence.
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_start( event_t *events, event_callback_t event, void *arg, clock_t period );
|
||||
int event_start(event_t *events, event_callback_t event, void *arg, clock_t period);
|
||||
|
||||
/** Stop timer, matches only those with equal event and arg.
|
||||
*
|
||||
@@ -170,7 +190,7 @@ int event_start( event_t *events, event_callback_t event, void *arg, clock_t per
|
||||
* \param arg Optional argument to be passed to the event.
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_stop( event_t *events, event_callback_t event, void *arg );
|
||||
int event_stop(event_t *events, event_callback_t event, void *arg);
|
||||
|
||||
/** Stop all timers related to the same event callback
|
||||
*
|
||||
@@ -178,7 +198,7 @@ int event_stop( event_t *events, event_callback_t event, void *arg );
|
||||
* \param event Callback to be called
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
int event_stopall( event_t *events, event_callback_t event );
|
||||
int event_stopall(event_t *events, event_callback_t event);
|
||||
|
||||
/** Get present time of given timer
|
||||
*
|
||||
@@ -187,7 +207,7 @@ int event_stopall( event_t *events, event_callback_t event );
|
||||
* \param arg Optional argument to be passed to the event.
|
||||
* \return 0 On success or -1 on error.
|
||||
*/
|
||||
clock_t event_gettime( event_t *events, event_callback_t event, void *arg );
|
||||
clock_t event_gettime(event_t *events, event_callback_t event, void *arg);
|
||||
|
||||
/** Bind two events
|
||||
*
|
||||
@@ -225,7 +245,8 @@ int event_disconnectall(event_t *dest_events, event_callback_t dest_event);
|
||||
* \param timeout Time to wait for a callback to be served.
|
||||
* \return Remaining time.
|
||||
* */
|
||||
clock_t event_handle( event_t *events, clock_t timeout );
|
||||
clock_t event_handle(event_t *events, clock_t timeout);
|
||||
|
||||
|
||||
#undef EXTERN
|
||||
#if defined(__cplusplus)
|
||||
|
||||
+5
-2
@@ -152,7 +152,9 @@
|
||||
*
|
||||
* Input Parameters:
|
||||
* dev - Device-specific state data
|
||||
* nbits - The number of bits requests
|
||||
* nbits - The number of bits requests.
|
||||
* If value is greater > 0 then it implies MSB first
|
||||
* If value is below < 0, then it implies LSB first with -nbits
|
||||
*
|
||||
* Returned Value:
|
||||
* none
|
||||
@@ -349,7 +351,8 @@ enum spi_dev_e
|
||||
SPIDEV_MMCSD, /* Select SPI MMC/SD device */
|
||||
SPIDEV_FLASH, /* Select SPI FLASH device */
|
||||
SPIDEV_ETHERNET, /* Select SPI ethernet device */
|
||||
SPIDEV_DISPLAY /* Select SPI LCD/OLED display device */
|
||||
SPIDEV_DISPLAY, /* Select SPI LCD/OLED display device */
|
||||
SPIDEV_WIRELESS /* Select SPI Wireless device */
|
||||
};
|
||||
|
||||
/* Certain SPI devices may required differnt clocking modes */
|
||||
|
||||
+364
-12
@@ -48,9 +48,159 @@
|
||||
#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__
|
||||
|
||||
@@ -62,29 +212,143 @@ extern "C" {
|
||||
#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
|
||||
/** 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);
|
||||
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
|
||||
*
|
||||
@@ -94,15 +358,103 @@ EXTERN struct cc1101_dev_s * cc1101_init(struct spi_dev_s * spi);
|
||||
**/
|
||||
EXTERN int cc1101_deinit(struct cc1101_dev_s * dev);
|
||||
|
||||
/** Power up device, start conversion */
|
||||
|
||||
/** Power up device, start conversion. \return Zero on success. */
|
||||
EXTERN int cc1101_powerup(struct cc1101_dev_s * dev);
|
||||
|
||||
/** Power down device, stop conversion */
|
||||
/** Power down device, stop conversion. \return Zero on success. */
|
||||
EXTERN int cc1101_powerdown(struct cc1101_dev_s * dev);
|
||||
|
||||
/** Set Multi Purpose Output Function */
|
||||
/** 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)
|
||||
|
||||
Reference in New Issue
Block a user