60 lines
1.2 KiB
C++
60 lines
1.2 KiB
C++
#include "uDisplay.h"
|
|
#include "uDisplay_config.h"
|
|
|
|
// ===== Timing and Delay Functions =====
|
|
|
|
void uDisplay::delay_arg(uint32_t args) {
|
|
uint32_t delay_ms = 0;
|
|
switch (args & 0xE0) {
|
|
case 0x80: delay_ms = 150; break;
|
|
case 0xA0: delay_ms = 10; break;
|
|
case 0xE0: delay_ms = 500; break;
|
|
}
|
|
if (delay_ms > 0) {
|
|
delay(delay_ms);
|
|
AddLog(LOG_LEVEL_DEBUG, PSTR("DSP: delay %d ms"), delay_ms);
|
|
}
|
|
}
|
|
|
|
void uDisplay::reset_pin(int32_t msl, int32_t msh) {
|
|
if (reset > 0) {
|
|
digitalWrite(reset, LOW);
|
|
delay(msl);
|
|
digitalWrite(reset, HIGH);
|
|
delay(msh);
|
|
}
|
|
}
|
|
#define UDSP_BUSY_TIMEOUT 3000
|
|
|
|
void uDisplay::delay_sync(int32_t ms) {
|
|
uint8_t busy_level = HIGH;
|
|
if (lvgl_param.busy_invert) {
|
|
busy_level = LOW;
|
|
}
|
|
uint32_t time = millis();
|
|
if (busy_pin > 0) {
|
|
while (digitalRead(busy_pin) == busy_level) {
|
|
delay(1);
|
|
if ((millis() - time) > UDSP_BUSY_TIMEOUT) {
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
delay(ms);
|
|
}
|
|
}
|
|
|
|
// ===== SPI Transaction Control =====
|
|
|
|
void uDisplay::beginTransaction(SPISettings s) {
|
|
#ifdef ESP32
|
|
if (lvgl_param.use_dma) {
|
|
dmaWait();
|
|
}
|
|
#endif
|
|
uspi->beginTransaction(s);
|
|
}
|
|
|
|
void uDisplay::endTransaction(void) {
|
|
uspi->endTransaction();
|
|
} |