Browse Source

update

master
zhaohe 2 years ago
parent
commit
0246a0e2cf
  1. 31
      components/dwin/dwin_ram_manager.cpp
  2. 13
      components/dwin/dwin_ram_manager.hpp
  3. 51
      components/dwin/dwin_screen.cpp
  4. 54
      components/dwin/dwin_screen.hpp
  5. 6
      components/dwin/var_icon.cpp
  6. 2
      components/dwin/var_icon.hpp

31
components/dwin/dwin_ram_manager.cpp

@ -5,13 +5,34 @@
using namespace iflytop;
using namespace iflytop::dwin;
void DwinRamManager::init(uint32_t startadd, uint32_t endadd) {
void DwinRamManager::init(uint32_t startadd, uint32_t eachsize, uint32_t number) {
// this->startadd = startadd;
// this->endadd = endadd;
// this->curadd = startadd;
// this->eachsize = eachsize;
// if (this->eachsize <= 0) {
// this->eachsize = 1;
// }
ZASSERT(eachsize != 0);
this->startadd = startadd;
this->endadd = endadd;
this->eachsize = eachsize;
this->endadd = startadd + eachsize * number;
this->curadd = startadd;
}
uint16_t DwinRamManager::alloc(uint32_t eachsize) {
uint16_t DwinRamManager::alloc(int niterm) {
int allocsize = niterm * eachsize;
if (curadd + allocsize > endadd) {
ZASSERT(false);
return 0xffff;
}
uint16_t ret = curadd;
curadd += allocsize;
return ret;
}
uint16_t DwinRamManager::alloc() {
if (curadd + eachsize > endadd) {
ZASSERT(false);
return 0xffff;
@ -21,5 +42,5 @@ uint16_t DwinRamManager::alloc(uint32_t eachsize) {
return ret;
}
uint16_t DwinRamManager::remainsize(uint32_t eachsize) { return (endadd - curadd) / eachsize; }
uint16_t DwinRamManager::totalsize(uint32_t eachsize) { return (endadd - startadd) / eachsize; }
uint16_t DwinRamManager::remainsize() { return (endadd - curadd) / eachsize; }
uint16_t DwinRamManager::totalsize() { return (endadd - startadd) / eachsize; }

13
components/dwin/dwin_ram_manager.hpp

@ -9,13 +9,16 @@ class DwinRamManager {
uint32_t startadd = 0;
uint32_t endadd = 0;
uint32_t curadd = 0;
uint32_t eachsize = 0;
public:
void init(uint32_t startadd, uint32_t endadd);
uint16_t alloc(uint32_t eachsize);
uint16_t remainsize(uint32_t eachsize);
uint16_t totalsize(uint32_t eachsize);
DwinRamManager() {}
DwinRamManager(uint32_t startadd, uint32_t eachsize, uint32_t number) { init(startadd, eachsize, number); }
void init(uint32_t startadd, uint32_t eachsize, uint32_t number);
uint16_t alloc();
uint16_t alloc(int niterm);
uint16_t remainsize();
uint16_t totalsize();
};
} // namespace dwin

51
components/dwin/dwin_screen.cpp

@ -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;

54
components/dwin/dwin_screen.hpp

@ -1,6 +1,9 @@
#pragma once
#include "dwin_ram_manager.hpp"
//
#include <map>
#include <string>
#include "sdk/os/zos.hpp"
namespace iflytop {
@ -39,31 +42,41 @@ class TxContext {
uint8_t receiptlen;
bool receipt_ready_flag = false;
};
class DwinScreenCfg {
public:
uint16_t freeRawStartAddr = 0;
uint16_t freeRawEndAddr = 0;
uint16_t textDisplayerStartAddr = 0;
uint16_t textDisplayerEndAddr = 0;
uint16_t textDisplayerSize = 0;
uint16_t varIconStartAddr = 0;
uint16_t varIconEndAddr = 0;
uint16_t varIconSize = 0;
};
class Pos {
public:
uint16_t x;
uint16_t y;
};
// class DwinScreenCfg {
// public:
// uint16_t freeRawStartAddr = 0;
// uint16_t freeRawEndAddr = 0;
// uint16_t textDisplayerStartAddr = 0;
// uint16_t textDisplayerEndAddr = 0;
// uint16_t textDisplayerSize = 0;
// uint16_t varIconStartAddr = 0;
// uint16_t varIconEndAddr = 0;
// uint16_t varIconSize = 0;
// };
#define FREE_RAM_MAP "FreeRamRamMap"
#define TEXT_DISPLAYER_RAM_MAP "TextDisplayerRamMap"
#define VAR_ICON_RAM_MAP "VarIconRamMap"
// typedef enum {
// kdw_freeram = 1,
// kdw_textdisplayer = 2,
// kdw_varicon = 3,
// kdw_
// } dwin_ram_type_t;
class DwinScreen {
public:
private:
DwinScreenCfg m_dwcfg;
// DwinScreenCfg m_dwcfg;
UART_HandleTypeDef* m_huart;
ZUART m_uarthandler;
@ -76,6 +89,8 @@ class DwinScreen {
DwinRamManager m_textDisplayerManager; // 文本变量组件管理器
DwinRamManager m_varIconManager; // 图形变量组件管理器
map<string, DwinRamManager*> m_rammanager_map;
bool enablecrc = false;
public:
@ -86,7 +101,7 @@ class DwinScreen {
* @param baudrate
*/
static DwinScreen& ins();
void init(UART_HandleTypeDef* huart, DwinScreenCfg cfg);
void init(UART_HandleTypeDef* huart, map<string, DwinRamManager*>& rammanager);
public:
bool set_page(uint16_t pageid);
@ -100,10 +115,7 @@ class DwinScreen {
uint16_t alloc_free_ram(uint16_t size);
uint16_t alloc_one_text_displayer();
uint16_t alloc_one_var_icon();
uint16_t mem_free_ram_remain();
uint16_t mem_one_text_displayer_remain();
uint16_t mem_one_var_icon_remain();
uint16_t alloc_from(const char* whichrammanager, uint16_t size);
void dumpram();

6
components/dwin/var_icon.cpp

@ -62,6 +62,12 @@ void VarIcon::initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, u
setVal(initval);
}
void VarIcon::setpos(uint16_t posx, uint16_t posy) {
m_descript.m_PosX = posx;
m_descript.m_PosY = posy;
flushcfg();
}
void VarIcon::dumpinfo() {
readcfg();
printf("m_VP = %04x\n", m_descript.m_VP);

2
components/dwin/var_icon.hpp

@ -42,6 +42,8 @@ class VarIcon {
bool init(DwinScreen *dwin_screen);
void initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, uint16_t posy, uint16_t iconlib, uint16_t iconmin, uint16_t iconmax);
void setpos(uint16_t posx, uint16_t posy);
/**
* @brief
*

Loading…
Cancel
Save