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.

91 lines
2.2 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #pragma once
  2. #include <functional>
  3. #include "../chip/iflytop_no_os.h"
  4. namespace iflytop {
  5. using namespace std;
  6. #define STM32_GPIO_LISTENER_NUM 10
  7. class ZGPIO {
  8. public:
  9. typedef enum {
  10. kRisingIrqEvent,
  11. kFallingIrqEvent,
  12. } IrqTypeEvent_t;
  13. typedef enum {
  14. kAIN,
  15. kInput_nopull, //
  16. kInput_pullup, //
  17. kInput_pulldown, //
  18. kInput_od, //
  19. kOutput_nopull, //
  20. kOutput_pullup, //
  21. kOutput_pulldown, //
  22. kOutput_od, //
  23. } GPIOMode_t;
  24. typedef enum { kAIN, kInput, kOutput } GPIOType_t;
  25. typedef enum {
  26. kIRQ_noIrq,
  27. kIRQ_risingIrq,
  28. kIRQ_fallingIrq,
  29. kIRQ_risingAndFallingIrq,
  30. } GPIOIrqType_t;
  31. typedef function<void(ZGPIO *GPIO_Pin, IrqTypeEvent_t irqevent)> onirq_t;
  32. private:
  33. GPIO_TypeDef *m_gpio;
  34. uint16_t m_pinoff;
  35. GPIOType_t m_gpiotype;
  36. GPIOMode_t m_mode;
  37. GPIOIrqType_t m_irqtype;
  38. bool m_mirror;
  39. bool lastLevel;
  40. onirq_t m_onirq;
  41. public:
  42. ZGPIO(){};
  43. void initAsInput(Pin_t pin, GPIOMode_t mode, GPIOIrqType_t irqtype, bool mirror);
  44. void initAsOutput(Pin_t pin, GPIOMode_t mode, bool mirror, bool initLevel);
  45. void regListener(onirq_t listener);
  46. bool isMirror();
  47. bool isItRisingEXITGPIO();
  48. bool isItFallingEXITGPIO();
  49. bool isItRisingAndItFallingEXITGPIO();
  50. /*******************************************************************************
  51. * *
  52. *******************************************************************************/
  53. bool getState();
  54. uint32_t getStateUint32();
  55. bool setState(bool state);
  56. void toggleState();
  57. /*******************************************************************************
  58. * *
  59. *******************************************************************************/
  60. IRQn_Type getEXTIIRQn();
  61. GPIO_TypeDef *getPort() { return m_gpio; }
  62. uint16_t getPin() { return m_pinoff; }
  63. bool tryTriggerIRQ(uint16_t GPIO_Pin);
  64. private:
  65. bool enableClock();
  66. };
  67. class STM32_GPIO_LISTENER {
  68. public:
  69. virtual void STM32_GPIO_onIRQ(ZGPIO *GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent) {}
  70. };
  71. } // namespace iflytop