diff --git a/src/ZeDMD.cpp b/src/ZeDMD.cpp index c6d52f2..c83e2c5 100644 --- a/src/ZeDMD.cpp +++ b/src/ZeDMD.cpp @@ -639,6 +639,17 @@ void ZeDMD::RenderRgb565(uint16_t* pFrame) } bool ZeDMD::UpdateFrameBuffer888(uint8_t* pFrame) { + static auto lastExecutionTime = std::chrono::steady_clock::now(); + + auto currentTime = std::chrono::steady_clock::now(); + + // 8ms means 125Hz. Drop frames of that and higher frame rates because ZeDMD HD can't handle them. + if (std::chrono::duration_cast(currentTime - lastExecutionTime).count() < 8) { + return false; + } + + lastExecutionTime = currentTime; + if (0 == memcmp(m_pFrameBuffer, pFrame, m_romWidth * m_romHeight * 3)) { return false; diff --git a/src/ZeDMDComm.cpp b/src/ZeDMDComm.cpp index aea72d1..669b31b 100644 --- a/src/ZeDMDComm.cpp +++ b/src/ZeDMDComm.cpp @@ -914,10 +914,10 @@ bool ZeDMDComm::SendChunks(uint8_t* pData, uint16_t size) defined(__ANDROID__)) static uint8_t guru[4] = {'G', 'u', 'r', 'u'}; - uint8_t ack[CTRL_CHARS_HEADER_SIZE + 1] = {0}; + uint8_t ack[CTRL_CHARS_HEADER_SIZE + 2] = {0}; int status = 0; uint16_t sent = 0; - uint8_t message[64]; + uint8_t message[65] = {0}; while (sp_input_waiting(m_pSerialPort) > 0) { @@ -979,7 +979,7 @@ bool ZeDMDComm::SendChunks(uint8_t* pData, uint16_t size) } sent += status; - memset(ack, 0, CTRL_CHARS_HEADER_SIZE + 1); + memset(ack, 0, CTRL_CHARS_HEADER_SIZE + 2); status = sp_blocking_read(m_pSerialPort, ack, CTRL_CHARS_HEADER_SIZE + 1, ZEDMD_COMM_SERIAL_READ_TIMEOUT); if (status < (CTRL_CHARS_HEADER_SIZE + 1) || memcmp(ack, CTRL_CHARS_HEADER, CTRL_CHARS_HEADER_SIZE) != 0 || @@ -988,10 +988,9 @@ bool ZeDMDComm::SendChunks(uint8_t* pData, uint16_t size) if (memcmp(ack, guru, 4) == 0 || memcmp(&ack[1], guru, 4) == 0 || memcmp(&ack[2], guru, 4) == 0) { Log("ZeDMD %s", ack); - uint8_t message[64]; while (sp_input_waiting(m_pSerialPort) > 0) { - memset(message, ' ', 64); + memset(message, 0, 65); if (sp_nonblocking_read(m_pSerialPort, message, 64) > 0) { Log("%s", message); diff --git a/src/client.cpp b/src/client.cpp index dc281b5..ec2b4aa 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -545,6 +545,7 @@ int main(int argc, char* argv[]) if (save) { pZeDMD->SaveSettings(); + pZeDMD->Reset(); } if (opt_led_test)