/* / _____) _ | | ( (____ _____ ____ _| |_ _____ ____| |__ \____ \| ___ | (_ _) ___ |/ ___) _ \ _____) ) ____| | | || |_| ____( (___| | | | (______/|_____)_|_|_| \__)_____)\____)_| |_| (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