kopia lustrzana https://github.com/pimoroni/pimoroni-pico
				
				
				
			
		
			
				
	
	
		
			81 wiersze
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			81 wiersze
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
| #pragma once
 | |
| 
 | |
| #include <initializer_list>
 | |
| 
 | |
| #include "pico/stdlib.h"
 | |
| #include "hardware/spi.h"
 | |
| #include "hardware/gpio.h"
 | |
| #include "common/pimoroni_common.hpp"
 | |
| #include "common/pimoroni_bus.hpp"
 | |
| #include "libraries/pico_graphics/pico_graphics.hpp"
 | |
| 
 | |
| namespace pimoroni {
 | |
| 
 | |
|   class UC8159 : public DisplayDriver {
 | |
|     //--------------------------------------------------
 | |
|     // Variables
 | |
|     //--------------------------------------------------
 | |
|   private:
 | |
|     spi_inst_t *spi = PIMORONI_SPI_DEFAULT_INSTANCE;
 | |
| 
 | |
|     // interface pins with our standard defaults where appropriate
 | |
|     uint CS     = SPI_BG_FRONT_CS;
 | |
|     uint DC     = 28; // 27;
 | |
|     uint SCK    = SPI_DEFAULT_SCK;
 | |
|     uint MOSI   = SPI_DEFAULT_MOSI;
 | |
|     uint BUSY   = PIN_UNUSED;
 | |
|     uint RESET  = 27; //25;
 | |
| 
 | |
|     absolute_time_t timeout;
 | |
| 
 | |
|     bool blocking = false;
 | |
| 
 | |
|   public:
 | |
|     enum colour : uint8_t {
 | |
|       BLACK = 0,
 | |
|       WHITE = 1,
 | |
|       GREEN = 2,
 | |
|       BLUE = 3,
 | |
|       RED = 4,
 | |
|       YELLOW = 5,
 | |
|       ORANGE = 6,
 | |
|       CLEAN = 7
 | |
|     };
 | |
| 
 | |
|     UC8159(uint16_t width, uint16_t height) : UC8159(width, height, ROTATE_0, {PIMORONI_SPI_DEFAULT_INSTANCE, SPI_BG_FRONT_CS, SPI_DEFAULT_SCK, SPI_DEFAULT_MOSI, PIN_UNUSED, 28, PIN_UNUSED}) {};
 | |
| 
 | |
|     UC8159(uint16_t width, uint16_t height, SPIPins pins, uint busy=PIN_UNUSED, uint reset=27) : UC8159(width, height, ROTATE_0, pins, busy, reset) {};
 | |
| 
 | |
|     UC8159(uint16_t width, uint16_t height, Rotation rotation, SPIPins pins, uint busy=PIN_UNUSED, uint reset=27) :
 | |
|       DisplayDriver(width, height, rotation),
 | |
|       spi(pins.spi),
 | |
|       CS(pins.cs), DC(pins.dc), SCK(pins.sck), MOSI(pins.mosi), BUSY(busy), RESET(reset) {
 | |
|         init();
 | |
|       }
 | |
| 
 | |
| 
 | |
|     //--------------------------------------------------
 | |
|     // Methods
 | |
|     //--------------------------------------------------
 | |
|   public:
 | |
|     void busy_wait(uint minimum_wait_ms=0);
 | |
|     void reset();
 | |
|     void power_off();
 | |
|   
 | |
|     bool is_busy() override;
 | |
|     void update(PicoGraphics *graphics) override;
 | |
| 
 | |
|     void set_blocking(bool blocking);
 | |
| 
 | |
|   private:
 | |
|     void init();
 | |
|     void setup();
 | |
|     void command(uint8_t reg, size_t len, const uint8_t *data);
 | |
|     void command(uint8_t reg, std::initializer_list<uint8_t> values);
 | |
|     void command(uint8_t reg, const uint8_t data) {command(reg, 0, &data);};
 | |
|     void command(uint8_t reg) {command(reg, 0, nullptr);};
 | |
|     void data(size_t len, const uint8_t *data);
 | |
|   };
 | |
| 
 | |
| }
 |