domints

cpp_sucks

Mar 2nd, 2022 (edited)
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.04 KB | None | 0 0
  1. // display.hpp
  2.  
  3. #ifndef __DISPLAY_H__
  4. #define __DISPLAY_H__
  5.  
  6. #include "SPIbus.hpp"
  7. #include "abstract_io.hpp"
  8.  
  9. #define DISPLAY_CS 5
  10. #define DISPLAY_SPI_MODE 0
  11. #define DISPLAY_SPI_CLOCK 1000000
  12.  
  13. class EINK;
  14.  
  15. extern EINK display;
  16.  
  17. typedef class EINK
  18. {
  19. private:
  20.     spi_device_handle_t spi;
  21.  
  22. public:
  23.     explicit EINK();
  24.     ~EINK();
  25.     void write_command(unsigned char data);
  26.     void write_data(unsigned char data);
  27.     void init(void);
  28.     void lcd_reset();
  29.     void delay_ms(double millis);
  30.     void draw_bitmap(const unsigned char *buff, int x, int y, int width, int height);
  31.     void clear();
  32.     void refresh();
  33.     // void draw_pixel(char x, char y, unsigned int colour);
  34.     void fill_rectangle(char x1, char y1, char x2, char y2, unsigned int colour);
  35.     void draw_char(char x, char y, char c, unsigned int colour);
  36.     void draw_string(char x, char y, char *str, unsigned int colour);
  37.     void sleep();
  38. } EINK_t;
  39.  
  40. #endif
  41.  
  42. // display.cpp - jeszcze nie uzupełniony
  43.  
  44. #include "esp_err.h"
  45.  
  46. #include "display.hpp"
  47.  
  48. EINK_t display; // <- tu jest elegancko
  49.  
  50. EINK::EINK()
  51. {
  52.     ESP_ERROR_CHECK(vspi.begin(VSPI_MOSI, VSPI_MISO, VSPI_SCK));
  53.     ESP_ERROR_CHECK(vspi.addDevice(DISPLAY_SPI_MODE, DISPLAY_SPI_CLOCK, DISPLAY_CS, &spi));
  54. }
  55.  
  56. EINK::~EINK() {
  57.     vspi.close();
  58. }
  59.  
  60. void EINK::init() {
  61.  
  62. }
  63.  
  64. // abstract_io.hpp
  65.  
  66. #ifndef __GPIO_H__
  67. #define __GPIO_H__
  68.  
  69. #define HIGH pin_state_t::PIN_HIGH
  70. #define LOW pin_state_t::PIN_LOW
  71.  
  72. class AbstractIO;
  73.  
  74. extern AbstractIO aio;
  75.  
  76. enum class pin_mode_t {
  77.     OUTPUT = 0,
  78.     INPUT_HIZ = 1,
  79.     INPUT_PULL_UP = 2,
  80.     INPUT_PULL_DOWN = 3
  81. };
  82.  
  83. enum class pin_state_t {
  84.     PIN_LOW = 0,
  85.     PIN_HIGH = 1
  86. };
  87.  
  88. class AbstractIO
  89. {
  90. public:
  91.     void pinMode(unsigned int pin, pin_mode_t mode);
  92.     void digitalWrite(unsigned int pin, pin_state_t state);
  93.     pin_state_t digitalRead(unsigned int pin);
  94.     void setHigh(unsigned int pin);
  95.     void setLow(unsigned int pin);
  96. } AbstractIO_t;
  97.  
  98. #endif
  99.  
  100. // abstract_io.cpp
  101.  
  102. #include "esp_err.h"
  103. #include "driver/gpio.h"
  104. #include "abstract_io.hpp"
  105.  
  106. AbstractIO_t aio; // <- tu się kasztani
  107.  
  108. void AbstractIO::pinMode(unsigned int pin, pin_mode_t mode) {
  109.     ESP_ERROR_CHECK(gpio_set_direction((gpio_num_t)pin, mode == pin_mode_t::OUTPUT ? GPIO_MODE_OUTPUT : GPIO_MODE_INPUT));
  110.     gpio_pull_mode_t pullMode = GPIO_FLOATING;
  111.     if(mode == pin_mode_t::INPUT_PULL_UP)
  112.         pullMode = GPIO_PULLUP_ONLY;
  113.     else if(mode == pin_mode_t::INPUT_PULL_DOWN)
  114.         pullMode = GPIO_PULLDOWN_ONLY;
  115.     ESP_ERROR_CHECK(gpio_set_pull_mode((gpio_num_t)pin, pullMode));
  116. }
  117.  
  118. void AbstractIO::digitalWrite(unsigned int pin, pin_state_t state) {
  119.     ESP_ERROR_CHECK(gpio_set_level((gpio_num_t)pin, (uint32_t)state));
  120. }
  121.  
  122. pin_state_t AbstractIO::digitalRead(unsigned int pin) {
  123.     return (pin_state_t)gpio_get_level((gpio_num_t)pin);
  124. }
  125.  
  126. void AbstractIO::setHigh(unsigned int pin) {
  127.     digitalWrite(pin, pin_state_t::PIN_HIGH);
  128. }
  129.  
  130. void AbstractIO::setLow(unsigned int pin) {
  131.     digitalWrite(pin, pin_state_t::PIN_LOW);
  132. }
  133.  
Add Comment
Please, Sign In to add comment