|
|
@ -2,6 +2,7 @@ |
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
namespace iflytop { |
|
|
|
namespace dwin { |
|
|
|
DwinScreen g_dwinScreen; |
|
|
@ -10,14 +11,16 @@ DwinScreen g_dwinScreen; |
|
|
|
|
|
|
|
using namespace iflytop; |
|
|
|
using namespace iflytop::dwin; |
|
|
|
using namespace std; |
|
|
|
|
|
|
|
#define TAG "dwin"
|
|
|
|
|
|
|
|
DwinScreen& DwinScreen::ins() { return g_dwinScreen; } |
|
|
|
|
|
|
|
void DwinScreen::init(UART_HandleTypeDef* huart, DwinScreenCfg dwcfg) { |
|
|
|
void DwinScreen::init(UART_HandleTypeDef* huart, map<string, DwinRamManager*>& rammanager) { |
|
|
|
m_huart = huart; |
|
|
|
m_dwcfg = dwcfg; |
|
|
|
// m_dwcfg = dwcfg;
|
|
|
|
m_rammanager_map = rammanager; |
|
|
|
ZUART::cfg_t cfg; |
|
|
|
cfg.huart = m_huart; |
|
|
|
cfg.name = "DwinScreenUart"; |
|
|
@ -37,31 +40,41 @@ void DwinScreen::init(UART_HandleTypeDef* huart, DwinScreenCfg dwcfg) { |
|
|
|
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); |
|
|
|
// m_rammanager.init(dwcfg.freeRawStartAddr, dwcfg.freeRawEndAddr);
|
|
|
|
// m_textDisplayerManager.init(dwcfg.textDisplayerStartAddr, dwcfg.textDisplayerEndAddr);
|
|
|
|
// m_varIconManager.init(dwcfg.varIconStartAddr, dwcfg.varIconEndAddr);
|
|
|
|
dumpram(); |
|
|
|
} |
|
|
|
|
|
|
|
void DwinScreen::dumpram() { |
|
|
|
ZLOGI(TAG, "ram :(%d/%d)", m_rammanager.totalsize(1) - m_rammanager.remainsize(1), m_rammanager.totalsize(1)); |
|
|
|
ZLOGI(TAG, "textDisplayer :(%d/%d)", |
|
|
|
m_textDisplayerManager.totalsize(m_dwcfg.textDisplayerSize) - m_textDisplayerManager.remainsize(m_dwcfg.textDisplayerSize), |
|
|
|
m_textDisplayerManager.totalsize(m_dwcfg.textDisplayerSize)); |
|
|
|
ZLOGI(TAG, "varIcon :(%d/%d)", m_varIconManager.totalsize(m_dwcfg.varIconSize) - m_varIconManager.remainsize(m_dwcfg.varIconSize), |
|
|
|
m_varIconManager.totalsize(m_dwcfg.varIconSize)); |
|
|
|
for (auto& each : m_rammanager_map) { |
|
|
|
ZLOGI(TAG, "%-20s:(%d/%d)", each.first.c_str(), each.second->totalsize() - each.second->remainsize(), each.second->totalsize()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
uint16_t DwinScreen::alloc_free_ram(uint16_t size) { return m_rammanager.alloc(size); } |
|
|
|
uint16_t DwinScreen::alloc_one_text_displayer() { return m_textDisplayerManager.alloc(m_dwcfg.textDisplayerSize); } |
|
|
|
uint16_t DwinScreen::alloc_free_ram(uint16_t size) { |
|
|
|
auto item = m_rammanager_map.find(FREE_RAM_MAP); |
|
|
|
ZASSERT(item != m_rammanager_map.end()); |
|
|
|
return item->second->alloc(size); |
|
|
|
} |
|
|
|
uint16_t DwinScreen::alloc_one_text_displayer() { |
|
|
|
auto item = m_rammanager_map.find(TEXT_DISPLAYER_RAM_MAP); |
|
|
|
ZASSERT(item != m_rammanager_map.end()); |
|
|
|
return item->second->alloc(); |
|
|
|
} |
|
|
|
uint16_t DwinScreen::alloc_one_var_icon() { |
|
|
|
uint16_t addr = m_varIconManager.alloc(m_dwcfg.varIconSize); |
|
|
|
return addr; |
|
|
|
auto item = m_rammanager_map.find(VAR_ICON_RAM_MAP); |
|
|
|
ZASSERT(item != m_rammanager_map.end()); |
|
|
|
return item->second->alloc(); |
|
|
|
} |
|
|
|
uint16_t DwinScreen::alloc_from(const char* whichrammanager, uint16_t size) { |
|
|
|
auto item = m_rammanager_map.find(whichrammanager); |
|
|
|
if (item == m_rammanager_map.end()) { |
|
|
|
ZLOGE(TAG, "alloc_from %s failed, not found", whichrammanager); |
|
|
|
ZASSERT(false); |
|
|
|
} |
|
|
|
return item->second->alloc(size); |
|
|
|
} |
|
|
|
|
|
|
|
uint16_t DwinScreen::mem_free_ram_remain() { return m_rammanager.remainsize(1); } |
|
|
|
uint16_t DwinScreen::mem_one_text_displayer_remain() { return m_textDisplayerManager.remainsize(m_dwcfg.textDisplayerSize); } |
|
|
|
uint16_t DwinScreen::mem_one_var_icon_remain() { return m_varIconManager.remainsize(m_dwcfg.varIconSize); } |
|
|
|
|
|
|
|
void DwinScreen::clearrxcache() { |
|
|
|
CriticalContext cc; |
|
|
|