diff --git a/components/dwin/dwin_screen.cpp b/components/dwin/dwin_screen.cpp index 1cc28c2..fa62166 100644 --- a/components/dwin/dwin_screen.cpp +++ b/components/dwin/dwin_screen.cpp @@ -17,6 +17,13 @@ using namespace std; DwinScreen& DwinScreen::ins() { return g_dwinScreen; } +static void dumphex(uint8_t* data, size_t len) { + printf("(%d)", len); + for (size_t i = 0; i < len; i++) { + printf("%02X ", data[i]); + } + printf("\n"); +} void DwinScreen::init(UART_HandleTypeDef* huart, map& rammanager) { m_huart = huart; // m_dwcfg = dwcfg; @@ -35,11 +42,11 @@ void DwinScreen::init(UART_HandleTypeDef* huart, map& r if (txcontext.receipt_ready_flag) { return; } + // dumphex(data, len); memcpy(txcontext.receiptcache, data, len); txcontext.receiptlen = len; txcontext.receipt_ready_flag = true; }); - // m_rammanager.init(dwcfg.freeRawStartAddr, dwcfg.freeRawEndAddr); // m_textDisplayerManager.init(dwcfg.textDisplayerStartAddr, dwcfg.textDisplayerEndAddr); // m_varIconManager.init(dwcfg.varIconStartAddr, dwcfg.varIconEndAddr); @@ -101,7 +108,6 @@ bool DwinScreen::sendcmdblock(int overtime) { // zos_delay(1); // HAL_Delay(1); osDelay(1); - } } return false; @@ -156,7 +162,10 @@ bool DwinScreen::read_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int ZLOGE(TAG, "read_varspace failed"); return false; } + + // ZLOGI(TAG, "read_varspace success %d", txcontext.receiptlen); memcpy(data, &txcontext.receiptcache[7], len); + return true; } @@ -205,6 +214,15 @@ bool DwinScreen::read_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n return true; } +bool DwinScreen::read_varspace8_muti(uint16_t regaddr, uint8_t* data, size_t n8, int overtime) { + // TODO: CHECK BUFSIZE + memset(m_rd_pre_processcache, 0, sizeof(m_rd_pre_processcache)); + bool suc = read_varspace(regaddr, m_rd_pre_processcache, n8, overtime); + memcpy(data, m_rd_pre_processcache, n8); + if (!suc) return false; + return true; +} + bool DwinScreen::read_varspace16(uint16_t regaddr, uint16_t& data, int overtime) { uint8_t data8[2]; bool suc = read_varspace(regaddr, data8, 2, overtime); @@ -332,25 +350,19 @@ bool DwinScreen::set_rtc(uint16_t year, uint16_t month, uint16_t day, uint16_t h } bool DwinScreen::get_rtc(Date* date) { - uint16_t data[4] = {0}; - bool suc = read_varspace16_muti(0x10, data, 4, 10); - // printf("data[0]:%04X data[1]:%04X data[2]:%04X data[3]:%04X\n", data[0], data[1], data[2], data[3]); - // date->year = (data[0] >> 8) + 2000; - // date->month = data[0] & 0xFF; - // date->day = data[1] >> 8; - // date->weekdaynum = data[1] & 0xFF; - // date->hour = data[2] >> 8; - // date->minute = data[2] & 0xFF; - // date->second = data[3] >> 8; + uint8_t data[8] = {0}; + bool suc = read_varspace8_muti(0x10, data, 8, 10); + // dumphex(data, 8); + if (!suc) return false; date->year = (data[0] & 0xff) + 2000; - date->month = data[1] >> 8; - date->day = data[1] & 0xFF; - date->weekdaynum = data[2] >> 8; - date->hour = data[2] & 0xFF; - date->minute = data[3] >> 8; - date->second = data[3] & 0xFF; - printf("year:%d month:%d day:%d weekdaynum:%d hour:%d minute:%d second:%d\n", // - date->year, date->month, date->day, date->weekdaynum, date->hour, date->minute, date->second); + date->month = data[1]; + date->day = data[2]; + date->weekdaynum = data[3]; + date->hour = data[4]; + date->minute = data[5]; + date->second = data[6]; + // printf("year:%d month:%d day:%d weekdaynum:%d hour:%d minute:%d second:%d\n", // + // date->year, date->month, date->day, date->weekdaynum, date->hour, date->minute, date->second); return suc; } diff --git a/components/dwin/dwin_screen.hpp b/components/dwin/dwin_screen.hpp index 7088fbc..badefe1 100644 --- a/components/dwin/dwin_screen.hpp +++ b/components/dwin/dwin_screen.hpp @@ -136,6 +136,7 @@ class DwinScreen { bool write_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t data, int overtime); bool read_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t& data, int overtime); + bool read_varspace8_muti(uint16_t regaddr, uint8_t* data, size_t n8, int overtime); bool write_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime); bool read_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime);