MiLightRadioPL1167_LT8900.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * MiLightRadio.h
  3. *
  4. * Created on: 29 May 2015
  5. * Author: henryk
  6. */
  7. #ifdef ARDUINO
  8. #include "Arduino.h"
  9. #else
  10. #include <stdint.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #endif
  14. #include <MiLightRadioConfig.h>
  15. #include <MiLightButtons.h>
  16. #include <MiLightRadioInterface.h>
  17. /*
  18. #define MODE_RGB 0
  19. #define MODE_DUAL_WHITE 1
  20. #define MODE_DUAL_WHITE_RGB 2
  21. #define MILIGHT_SYNCWORD_RGB 0x258B00000000147A
  22. #define MILIGHT_SYNCWORD_DUAL_WHITE 0x55AA00000000050A
  23. #define MILIGHT_SYNCWORD_DUALWHITE_RGB 0x1809000000007236
  24. */
  25. // Register defines
  26. #define REGISTER_READ 0b10000000 //bin
  27. #define REGISTER_WRITE 0b00000000 //bin
  28. #define REGISTER_MASK 0b01111111 //bin
  29. #define R_CHANNEL 7
  30. #define CHANNEL_RX_BIT 7
  31. #define CHANNEL_TX_BIT 8
  32. #define CHANNEL_MASK 0b01111111 ///bin
  33. #define STATUS_PKT_BIT_MASK 0x40
  34. #define R_STATUS 48
  35. #define STATUS_CRC_BIT 15
  36. #define R_FIFO 50
  37. #define R_FIFO_CONTROL 52
  38. #define R_SYNCWORD1 36
  39. #define R_SYNCWORD2 37
  40. #define R_SYNCWORD3 38
  41. #define R_SYNCWORD4 39
  42. #define DEFAULT_TIME_BETWEEN_RETRANSMISSIONS_uS 350
  43. // #define DEBUG_PRINTF
  44. #ifndef MILIGHTRADIOPL1167_LT8900_H_
  45. #define MILIGHTRADIOPL1167_LT8900_H_
  46. class MiLightRadioPL1167_LT8900 : public MiLightRadioInterface{
  47. public:
  48. MiLightRadioPL1167_LT8900(byte byCSPin, byte byResetPin, byte byPktFlag, const MiLightRadioConfig& config);
  49. virtual int begin();
  50. virtual bool available();
  51. virtual int read(uint8_t frame[], size_t &frame_length);
  52. virtual int dupesReceived();
  53. virtual int write(uint8_t frame[], size_t frame_length);
  54. virtual int resend();
  55. virtual int configure();
  56. private:
  57. void vInitRadioModule(MiLightRadioType type);
  58. //void vSetSyncWord(uint64_t syncWord);
  59. void vSetSyncWord(uint16_t syncWord3, uint16_t syncWord2, uint16_t syncWord1, uint16_t syncWord0);
  60. uint16_t uiReadRegister(uint8_t reg);
  61. void regWrite16(byte ADDR, byte V1, byte V2, byte WAIT);
  62. uint8_t uiWriteRegister(uint8_t reg, uint16_t data);
  63. bool bAvailablePin(void);
  64. bool bAvailableRegister(void);
  65. void vStartListening(uint uiChannelToListenTo);
  66. void vResumeRX(void);
  67. int iReadRXBuffer(uint8_t *buffer, size_t maxBuffer);
  68. void vSetChannel(uint8_t channel);
  69. void vGenericSendPacket(int iMode, int iLength, byte *pbyFrame, byte byChannel );
  70. bool bCheckRadioConnection(void);
  71. bool sendPacket(uint8_t *data, size_t packetSize,byte byChannel);
  72. byte _pin_pktflag;
  73. byte _csPin;
  74. const MiLightRadioConfig& config;
  75. uint32_t _prev_packet_id;
  76. uint8_t _channel = 0;
  77. uint8_t _packet[10];
  78. uint8_t _out_packet[10];
  79. bool _waiting;
  80. int _dupes_received;
  81. };
  82. #endif /* MILIGHTRADIO_H_ */