You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.5 KiB

3 months ago
  1. #pragma once
  2. #include "apphardware/apphardware.hpp"
  3. #include "uappbase/base.hpp"
  4. #include "config/config.hpp"
  5. namespace iflytop {
  6. using namespace std;
  7. #define RCTRL RemoteControlerUpper::ins()
  8. typedef struct {
  9. uint8_t data[255];
  10. uint16_t datalen;
  11. } RemoteControlerReportPacket_t;
  12. class RemoteControlerUpper {
  13. public:
  14. typedef std::function<void(uint8_t* rx, int32_t len)> on_report_cb_t;
  15. private:
  16. on_report_cb_t m_cb[50];
  17. int32_t m_ncb = 0;
  18. zmutex m_cmdlock = {"RemoteControlerUpperLock"};
  19. uint8_t txbuf[255];
  20. RemoteControlerReportPacket_t ackcache;
  21. zble_proto_packet_t* txpacket = (zble_proto_packet_t*)txbuf;
  22. zble_proto_packet_t* rxpacket = (zble_proto_packet_t*)ackcache.data;
  23. uint8_t m_index = 0;
  24. public:
  25. RemoteControlerUpper() {};
  26. ~RemoteControlerUpper() {};
  27. static RemoteControlerUpper* ins() {
  28. static RemoteControlerUpper instance;
  29. return &instance;
  30. }
  31. void initialize();
  32. void regOnReport(on_report_cb_t on_report);
  33. void startSchedule();
  34. bool isConnected();
  35. private:
  36. bool txcmd(uint8_t* data, uint32_t len);
  37. void preProcessrxpacket(RemoteControlerReportPacket_t* packet);
  38. void processRxEventPacket(RemoteControlerReportPacket_t* packet);
  39. void callOnReport(uint8_t* rx, int32_t len);
  40. public:
  41. /***********************************************************************************************************************
  42. * COMMON_API *
  43. ***********************************************************************************************************************/
  44. bool resetMasterBoard();
  45. bool resetClientBoard();
  46. bool readMasterBoardVersion(zble_read_version_t* version);
  47. bool readClientBoardVersion(zble_read_version_t* version);
  48. bool clearMasterResetFlag();
  49. bool clearSlaveResetFlag();
  50. bool setMasterInDfuMode();
  51. bool setSlaveInDfuMode();
  52. bool startScan(const char* slaveName, bool autoConnect);
  53. bool stopScan();
  54. /***********************************************************************************************************************
  55. * app *
  56. ***********************************************************************************************************************/
  57. bool setRemoterState(hand_acid_mode_t mode, bool state);
  58. };
  59. } // namespace iflytop