123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- / _____) _ | |
- ( (____ _____ ____ _| |_ _____ ____| |__
- \____ \| ___ | (_ _) ___ |/ ___) _ \
- _____) ) ____| | | || |_| ____( (___| | | |
- (______/|_____)_|_|_| \__)_____)\____)_| |_|
- (C)2014 Semtech
- Description: sx1208 dirver
- License: Revised BSD License, see LICENSE.TXT file include in the project
- Maintainer: Leo Xie, Jiapeng Li
- */
- #ifndef __SX1208_H
- #define __SX1208_H
- #include "sx1208-reg.h"
- #include "stdint.h"
- #include "stdbool.h"
- #define SX1208_FXOSC (32000000ul)
- /** Fstep = FXOSC/(2^19) */
- #define SX1208_FREQ_STEP ((double)SX1208_FXOSC/((double)((uint32_t)1<<19)))
- typedef enum{
- SX1208_PROTOCOL_NONE = 0,
- SX1208_PROTOCOL_STATE_GRID,
- }sx1208_protocol_t;
- typedef enum{
- SX1208_TX_DONE,
- SX1208_RX_DONE,
- SX1208_TX_TIMEOUT,
- SX1208_RX_TIMEOUT,
- SX1208_RX_ERROR,
- }sx1208_event_t;
- typedef struct{
- uint8_t *buf;
- uint8_t len;
- uint8_t raw_rssi;
- }sx1208_rx_pkt_t;
- typedef void (*sx1208_callback_t)(sx1208_event_t, void *);
- typedef enum{
- SX1208_HEADER_ENABLE,
- SX1208_HEADER_DISABLE,
- }sx1208_header_mode_t;
- typedef enum{
- SX1208_CRC_ON,
- SX1208_CRC_OFF,
- }sx1208_crc_mode_t;
- typedef enum{
- SX1208_CRC_AUTO_CLEAR_ON,
- SX1208_CRC_AUTO_CLEAR_OFF,
- }sx1208_crc_auto_clear_t;
- typedef enum{
- SX1208_TX_PREAMBLE,
- SX1208_RX_PREAMBLE,
- }sx1208_preamble_t;
- typedef enum{
- SX1208_RXTX_TXHIGH,
- SX1208_RXTX_TXLOW, // same as SX1208_RXTX_RXHIGH
- SX1208_RXTX_RXHIGH,
- SX1208_RXTX_RXLOW, // same as SX1208_RXTX_TXHIGH
- }sx1208_txtx_polarity_t;
- typedef struct{
- sx1208_protocol_t protocol;
- uint32_t frf;
- uint32_t fdev;
- uint32_t bitrate;
- sx1208_crc_mode_t crc_mode;
- sx1208_header_mode_t header_mode;
- uint8_t payload_len; // Set value when header is disabled
- int8_t tx_power;
- /** preamble length */
- uint16_t tx_preamble_len;
- uint16_t rx_preamble_len;
- uint8_t sync_word_len;
- uint8_t sync_word[8];
- }sx1208_config_t;
- typedef struct{
- uint8_t addr;
- uint8_t value;
- }sx1208_params_unit_t;
- typedef enum{
- SX1208_MODE_SLEEP = 0x00,
- SX1208_MODE_STANDBY = 0x04,
- SX1208_MODE_FS = 0x08, // Frequency synthesizer
- SX1208_MODE_TX = 0x0C,
- SX1208_MODE_RX = 0x10,
- }sx1208_mode_t;
- typedef void (*hal_sx1208_irq_callback_t) (void);
- typedef enum{
- SX1208_DIO0 = 0,
- SX1208_DIO1,
- SX1208_DIO2,
- SX1208_DIO3,
- SX1208_DIO4,
- SX1208_DIO5,
- }sx1208_dio_t;
- typedef enum{
- SX1208_RF_SWITCH_IDLE, //LOW POWER MODE
- SX1208_RF_SWITCH_RX,
- SX1208_RF_SWITCH_TX,
- }sx1208_rf_switch_mode_t;
- typedef enum{
- /* SX1208 use RFIO as output. */
- SX1208_TX_PORT_RFIO,
- SX1208_TX_PORT_PA_BOOST,
- }sx1208_tx_port_t;
- void sx1208_init(sx1208_callback_t sx1208_cb);
- void sx1208_set_config(sx1208_config_t *config);
- int8_t sx1208_send(uint8_t *buf, uint8_t len, uint16_t timeout);
- void sx1208_receive(uint8_t *buf, uint8_t len, uint16_t timeout);
- void sx1208_onDioIrq( void );
- void sx1208_process(void);
- void sx1208_set_frf( uint32_t frf );
- void sx1208_set_fdev( uint32_t fdev );
- void sx1208_set_bitrate( uint32_t br );
- void sx1208_set_rxbw(uint32_t fdev, uint32_t br);
- void sx1208_set_tx_power( int8_t pow );
- void sx1208_set_sync_word(uint8_t *sync_word, uint8_t len);
- void sx1208_set_header_mode(sx1208_header_mode_t hdr_mode);
- void sx1208_set_crc_mode(sx1208_crc_mode_t crc_mode);
- void sx1208_set_preamble(sx1208_preamble_t preamble_type, uint16_t len);
- uint8_t sx1208_read_rssi(void);
- /** RX test mode */
- void sx1208_rx_test_mode(void);
- void sx1208_tx_test_mode(void);
- /** For test purpose */
- uint8_t sx1208_read(uint8_t addr);
- void sx1208_write(uint8_t addr, uint8_t data);
- void sx1208_rmw(uint8_t addr, uint8_t mask, uint8_t val);
- void sx1208_rmw_bit(uint8_t addr, uint8_t bit, uint8_t val);
- void sx1208_read_burst(uint8_t addr, uint8_t *buf, uint16_t len);
- void sx1208_write_burst(uint8_t addr, uint8_t *buf, uint16_t len);
- int sx1208_read_fifo(uint8_t *buf, uint16_t len);
- int sx1208_write_fifo(uint8_t *buf, uint16_t len);
- void sx1208_initParams(void);
- #endif
|