sx1208.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. / _____) _ | |
  3. ( (____ _____ ____ _| |_ _____ ____| |__
  4. \____ \| ___ | (_ _) ___ |/ ___) _ \
  5. _____) ) ____| | | || |_| ____( (___| | | |
  6. (______/|_____)_|_|_| \__)_____)\____)_| |_|
  7. (C)2014 Semtech
  8. Description: sx1208 dirver
  9. License: Revised BSD License, see LICENSE.TXT file include in the project
  10. Maintainer: Leo Xie, Jiapeng Li
  11. */
  12. #ifndef __SX1208_H
  13. #define __SX1208_H
  14. #include "sx1208-reg.h"
  15. #include "stdint.h"
  16. #include "stdbool.h"
  17. #define SX1208_FXOSC (32000000ul)
  18. /** Fstep = FXOSC/(2^19) */
  19. #define SX1208_FREQ_STEP ((double)SX1208_FXOSC/((double)((uint32_t)1<<19)))
  20. typedef enum{
  21. SX1208_PROTOCOL_NONE = 0,
  22. SX1208_PROTOCOL_STATE_GRID,
  23. }sx1208_protocol_t;
  24. typedef enum{
  25. SX1208_TX_DONE,
  26. SX1208_RX_DONE,
  27. SX1208_TX_TIMEOUT,
  28. SX1208_RX_TIMEOUT,
  29. SX1208_RX_ERROR,
  30. }sx1208_event_t;
  31. typedef struct{
  32. uint8_t *buf;
  33. uint8_t len;
  34. uint8_t raw_rssi;
  35. }sx1208_rx_pkt_t;
  36. typedef void (*sx1208_callback_t)(sx1208_event_t, void *);
  37. typedef enum{
  38. SX1208_HEADER_ENABLE,
  39. SX1208_HEADER_DISABLE,
  40. }sx1208_header_mode_t;
  41. typedef enum{
  42. SX1208_CRC_ON,
  43. SX1208_CRC_OFF,
  44. }sx1208_crc_mode_t;
  45. typedef enum{
  46. SX1208_CRC_AUTO_CLEAR_ON,
  47. SX1208_CRC_AUTO_CLEAR_OFF,
  48. }sx1208_crc_auto_clear_t;
  49. typedef enum{
  50. SX1208_TX_PREAMBLE,
  51. SX1208_RX_PREAMBLE,
  52. }sx1208_preamble_t;
  53. typedef enum{
  54. SX1208_RXTX_TXHIGH,
  55. SX1208_RXTX_TXLOW, // same as SX1208_RXTX_RXHIGH
  56. SX1208_RXTX_RXHIGH,
  57. SX1208_RXTX_RXLOW, // same as SX1208_RXTX_TXHIGH
  58. }sx1208_txtx_polarity_t;
  59. typedef struct{
  60. sx1208_protocol_t protocol;
  61. uint32_t frf;
  62. uint32_t fdev;
  63. uint32_t bitrate;
  64. sx1208_crc_mode_t crc_mode;
  65. sx1208_header_mode_t header_mode;
  66. uint8_t payload_len; // Set value when header is disabled
  67. int8_t tx_power;
  68. /** preamble length */
  69. uint16_t tx_preamble_len;
  70. uint16_t rx_preamble_len;
  71. uint8_t sync_word_len;
  72. uint8_t sync_word[8];
  73. }sx1208_config_t;
  74. typedef struct{
  75. uint8_t addr;
  76. uint8_t value;
  77. }sx1208_params_unit_t;
  78. typedef enum{
  79. SX1208_MODE_SLEEP = 0x00,
  80. SX1208_MODE_STANDBY = 0x04,
  81. SX1208_MODE_FS = 0x08, // Frequency synthesizer
  82. SX1208_MODE_TX = 0x0C,
  83. SX1208_MODE_RX = 0x10,
  84. }sx1208_mode_t;
  85. typedef void (*hal_sx1208_irq_callback_t) (void);
  86. typedef enum{
  87. SX1208_DIO0 = 0,
  88. SX1208_DIO1,
  89. SX1208_DIO2,
  90. SX1208_DIO3,
  91. SX1208_DIO4,
  92. SX1208_DIO5,
  93. }sx1208_dio_t;
  94. typedef enum{
  95. SX1208_RF_SWITCH_IDLE, //LOW POWER MODE
  96. SX1208_RF_SWITCH_RX,
  97. SX1208_RF_SWITCH_TX,
  98. }sx1208_rf_switch_mode_t;
  99. typedef enum{
  100. /* SX1208 use RFIO as output. */
  101. SX1208_TX_PORT_RFIO,
  102. SX1208_TX_PORT_PA_BOOST,
  103. }sx1208_tx_port_t;
  104. void sx1208_init(sx1208_callback_t sx1208_cb);
  105. void sx1208_set_config(sx1208_config_t *config);
  106. int8_t sx1208_send(uint8_t *buf, uint8_t len, uint16_t timeout);
  107. void sx1208_receive(uint8_t *buf, uint8_t len, uint16_t timeout);
  108. void sx1208_onDioIrq( void );
  109. void sx1208_process(void);
  110. void sx1208_set_frf( uint32_t frf );
  111. void sx1208_set_fdev( uint32_t fdev );
  112. void sx1208_set_bitrate( uint32_t br );
  113. void sx1208_set_rxbw(uint32_t fdev, uint32_t br);
  114. void sx1208_set_tx_power( int8_t pow );
  115. void sx1208_set_sync_word(uint8_t *sync_word, uint8_t len);
  116. void sx1208_set_header_mode(sx1208_header_mode_t hdr_mode);
  117. void sx1208_set_crc_mode(sx1208_crc_mode_t crc_mode);
  118. void sx1208_set_preamble(sx1208_preamble_t preamble_type, uint16_t len);
  119. uint8_t sx1208_read_rssi(void);
  120. /** RX test mode */
  121. void sx1208_rx_test_mode(void);
  122. void sx1208_tx_test_mode(void);
  123. /** For test purpose */
  124. uint8_t sx1208_read(uint8_t addr);
  125. void sx1208_write(uint8_t addr, uint8_t data);
  126. void sx1208_rmw(uint8_t addr, uint8_t mask, uint8_t val);
  127. void sx1208_rmw_bit(uint8_t addr, uint8_t bit, uint8_t val);
  128. void sx1208_read_burst(uint8_t addr, uint8_t *buf, uint16_t len);
  129. void sx1208_write_burst(uint8_t addr, uint8_t *buf, uint16_t len);
  130. int sx1208_read_fifo(uint8_t *buf, uint16_t len);
  131. int sx1208_write_fifo(uint8_t *buf, uint16_t len);
  132. void sx1208_initParams(void);
  133. #endif