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;
using namespace iflytop::dwin; 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->startadd = startadd;
this->endadd = endadd;
this->eachsize = eachsize;
this->endadd = startadd + eachsize * number;
this->curadd = startadd; 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) { if (curadd + eachsize > endadd) {
ZASSERT(false); ZASSERT(false);
return 0xffff; return 0xffff;
@ -21,5 +42,5 @@ uint16_t DwinRamManager::alloc(uint32_t eachsize) {
return ret; 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 startadd = 0;
uint32_t endadd = 0; uint32_t endadd = 0;
uint32_t curadd = 0; uint32_t curadd = 0;
uint32_t eachsize = 0;
public: 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 } // namespace dwin

51
components/dwin/dwin_screen.cpp

@ -2,6 +2,7 @@
#include <string.h> #include <string.h>
#include <map>
namespace iflytop { namespace iflytop {
namespace dwin { namespace dwin {
DwinScreen g_dwinScreen; DwinScreen g_dwinScreen;
@ -10,14 +11,16 @@ DwinScreen g_dwinScreen;
using namespace iflytop; using namespace iflytop;
using namespace iflytop::dwin; using namespace iflytop::dwin;
using namespace std;
#define TAG "dwin" #define TAG "dwin"
DwinScreen& DwinScreen::ins() { return g_dwinScreen; } 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_huart = huart;
m_dwcfg = dwcfg;
// m_dwcfg = dwcfg;
m_rammanager_map = rammanager;
ZUART::cfg_t cfg; ZUART::cfg_t cfg;
cfg.huart = m_huart; cfg.huart = m_huart;
cfg.name = "DwinScreenUart"; cfg.name = "DwinScreenUart";
@ -37,31 +40,41 @@ void DwinScreen::init(UART_HandleTypeDef* huart, DwinScreenCfg dwcfg) {
txcontext.receipt_ready_flag = true; 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(); dumpram();
} }
void DwinScreen::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 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() { void DwinScreen::clearrxcache() {
CriticalContext cc; CriticalContext cc;

54
components/dwin/dwin_screen.hpp

@ -1,6 +1,9 @@
#pragma once #pragma once
#include "dwin_ram_manager.hpp" #include "dwin_ram_manager.hpp"
// //
#include <map>
#include <string>
#include "sdk/os/zos.hpp" #include "sdk/os/zos.hpp"
namespace iflytop { namespace iflytop {
@ -39,31 +42,41 @@ class TxContext {
uint8_t receiptlen; uint8_t receiptlen;
bool receipt_ready_flag = false; 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 { class Pos {
public: public:
uint16_t x; uint16_t x;
uint16_t y; 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 { class DwinScreen {
public: public:
private: private:
DwinScreenCfg m_dwcfg;
// DwinScreenCfg m_dwcfg;
UART_HandleTypeDef* m_huart; UART_HandleTypeDef* m_huart;
ZUART m_uarthandler; ZUART m_uarthandler;
@ -76,6 +89,8 @@ class DwinScreen {
DwinRamManager m_textDisplayerManager; // 文本变量组件管理器 DwinRamManager m_textDisplayerManager; // 文本变量组件管理器
DwinRamManager m_varIconManager; // 图形变量组件管理器 DwinRamManager m_varIconManager; // 图形变量组件管理器
map<string, DwinRamManager*> m_rammanager_map;
bool enablecrc = false; bool enablecrc = false;
public: public:
@ -86,7 +101,7 @@ class DwinScreen {
* @param baudrate * @param baudrate
*/ */
static DwinScreen& ins(); static DwinScreen& ins();
void init(UART_HandleTypeDef* huart, DwinScreenCfg cfg);
void init(UART_HandleTypeDef* huart, map<string, DwinRamManager*>& rammanager);
public: public:
bool set_page(uint16_t pageid); bool set_page(uint16_t pageid);
@ -100,10 +115,7 @@ class DwinScreen {
uint16_t alloc_free_ram(uint16_t size); uint16_t alloc_free_ram(uint16_t size);
uint16_t alloc_one_text_displayer(); uint16_t alloc_one_text_displayer();
uint16_t alloc_one_var_icon(); 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(); 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); 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() { void VarIcon::dumpinfo() {
readcfg(); readcfg();
printf("m_VP = %04x\n", m_descript.m_VP); 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); 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 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 * @brief
* *

Loading…
Cancel
Save