radio.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /*
  2. * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND
  3. * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
  4. * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
  5. * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
  6. * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
  7. * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  8. *
  9. * Copyright (C) SEMTECH S.A.
  10. */
  11. /*!
  12. * \file radio.h
  13. * \brief Generic radio driver ( radio abstraction )
  14. *
  15. * \version 2.0.B2
  16. * \date Nov 21 2012
  17. * \author Miguel Luis
  18. *
  19. * Last modified by Gregory Cristian on Apr 25 2013
  20. */
  21. #ifndef __RADIO_H__
  22. #define __RADIO_H__
  23. //#include "stm32f0xx.h"
  24. #include "stm32f10x.h"
  25. #include <stdbool.h>
  26. #include "sx1276-LoRa.h"
  27. #include <math.h>
  28. /*!
  29. * SX1272 and SX1276 General parameters definition
  30. */
  31. #define LORA 1 // [0: OFF, 1: ON]
  32. //#define USE_SX1276_RADIO
  33. /*!
  34. * RF process function return codes
  35. */
  36. typedef enum
  37. {
  38. RF_IDLE,
  39. RF_BUSY,
  40. RF_CHANNEL_BUSY,
  41. RF_RX_DONE,
  42. RF_RX_TIMEOUT,
  43. RF_RX_ID_ERROR,
  44. RF_TX_DONE,
  45. RF_TX_TIMEOUT,
  46. RF_LEN_ERROR,
  47. RF_CHANNEL_EMPTY,
  48. RF_CHANNEL_ACTIVITY_DETECTED
  49. } tRFProcessReturnCodes;
  50. /*!
  51. * Radio driver structure defining the different function pointers
  52. */
  53. typedef struct sRadioDriver
  54. {
  55. uint8_t ( *Init )( void );
  56. void ( *Reset )( void );
  57. void ( *StartCad )( void );
  58. void ( *StartRx )( void );
  59. void ( *GetRxPacket )( void *buffer, uint16_t *size );
  60. void ( *SetTxPacket )( const void *buffer, uint16_t size );
  61. uint32_t ( *Process )( void );
  62. void ( *LoRaSetRFFrequency )( uint32_t freq );
  63. uint32_t ( *LoRaGetRFFrequency )( void );
  64. void ( *LoRaSetRFPower )( int8_t power );
  65. int8_t ( *LoRaGetRFPower )( void );
  66. void ( *LoRaSetSignalBandwidth )( uint8_t bw );
  67. uint8_t ( *LoRaGetSignalBandwidth )( void );
  68. void ( *LoRaSetSpreadingFactor )( uint8_t factor );
  69. uint8_t ( *LoRaGetSpreadingFactor )( void );
  70. void ( *LoRaSetErrorCoding )( uint8_t value );
  71. uint8_t ( *LoRaGetErrorCoding )( void );
  72. void ( *LoRaSetPacketCrcOn )( bool enable );
  73. bool ( *LoRaGetPacketCrcOn )( void );
  74. void ( *LoRaSetImplicitHeaderOn )( bool enable );
  75. bool ( *LoRaGetImplicitHeaderOn )( void );
  76. void ( *LoRaSetRxSingleOn )( bool enable );
  77. bool ( *LoRaGetRxSingleOn )( void );
  78. void ( *LoRaSetFreqHopOn )( bool enable );
  79. bool ( *LoRaGetFreqHopOn )( void );
  80. void ( *LoRaSetHopPeriod )( uint8_t value );
  81. uint8_t ( *LoRaGetHopPeriod )( void );
  82. void ( *LoRaSetTxPacketTimeout )( uint32_t value );
  83. uint32_t ( *LoRaGetTxPacketTimeout )( void );
  84. void ( *LoRaSetRxPacketTimeout )( uint32_t value );
  85. uint32_t ( *LoRaGetRxPacketTimeout )( void );
  86. void ( *LoRaSetPayloadLength )( uint8_t value );
  87. uint8_t ( *LoRaGetPayloadLength )( void );
  88. void ( *LoRaSetPa20dBm )( bool enale );
  89. bool ( *LoRaGetPa20dBm )( void );
  90. void ( *LoRaSetPaRamp )( uint8_t value );
  91. uint8_t ( *LoRaGetPaRamp )( void );
  92. void ( *LoRaSetSymbTimeout )( uint16_t value );
  93. uint16_t ( *LoRaGetSymbTimeout )( void );
  94. void ( *LoRaSetLowDatarateOptimize )( bool enable );
  95. bool ( *LoRaGetLowDatarateOptimize )( void );
  96. uint16_t ( *LoRaGetPreambleLength )( void );
  97. void ( *LoRaSetPreambleLength )( uint16_t value );
  98. void ( *LoRaSetNbTrigPeaks )( uint8_t value );
  99. void ( *LoRaSetOpMode )( uint8_t opMode );
  100. uint8_t ( *LoRaGetOpMode )( void );
  101. void ( *Read )( uint8_t addr, uint8_t *data );
  102. void ( *Write )( uint8_t addr, uint8_t data );
  103. } tRadioDriver;
  104. extern tRadioDriver *Radio;
  105. /*!
  106. * \brief Initializes the RadioDriver structure with specific radio
  107. * functions.
  108. *
  109. * \retval radioDriver Pointer to the radio driver variable
  110. */
  111. tRadioDriver* RadioDriverInit( void );
  112. #endif // __RADIO_H__