Browse Source

update

master
zhaohe 2 years ago
parent
commit
649a64176c
  1. 21
      components/dwin/dwin_ram_manager.cpp
  2. 19
      components/dwin/dwin_ram_manager.hpp
  3. 22
      components/dwin/dwin_screen.cpp
  4. 78
      components/dwin/dwin_screen.hpp
  5. 31
      components/dwin/var_icon.cpp
  6. 30
      components/dwin/var_icon.hpp

21
components/dwin/dwin_ram_manager.cpp

@ -0,0 +1,21 @@
#include "dwin_ram_manager.hpp"
#include <string.h>
using namespace iflytop;
using namespace iflytop::dwin;
void DwinRamManager::init(uint32_t startadd, uint32_t endadd) {
this->startadd = startadd;
this->endadd = endadd;
this->curadd = startadd;
}
uint16_t DwinRamManager::alloc(uint32_t eachsize) {
if (curadd + eachsize > endadd) {
return 0xffff;
}
uint16_t ret = curadd;
curadd += eachsize;
return ret;
}

19
components/dwin/dwin_ram_manager.hpp

@ -0,0 +1,19 @@
#pragma once
#include "sdk/os/zos.hpp"
namespace iflytop {
namespace dwin {
using namespace std;
class DwinRamManager {
uint32_t startadd = 0;
uint32_t endadd = 0;
uint32_t curadd = 0;
public:
void init(uint32_t startadd, uint32_t endadd);
uint16_t alloc(uint32_t eachsize);
};
} // namespace dwin
} // namespace iflytop

22
components/dwin/dwin_screen.cpp

@ -1,13 +1,23 @@
#include "dwin_screen.hpp"
#include <string.h>
namespace iflytop {
namespace dwin {
DwinScreen g_dwinScreen;
}
} // namespace iflytop
using namespace iflytop;
using namespace iflytop::dwin;
#define TAG "dwin"
void DwinScreen::init(UART_HandleTypeDef* huart, int __) {
DwinScreen& DwinScreen::ins() { return g_dwinScreen; }
void DwinScreen::init(UART_HandleTypeDef* huart, DwinScreenCfg dwcfg) {
m_huart = huart;
m_dwcfg = dwcfg;
ZUART::cfg_t cfg;
cfg.huart = m_huart;
cfg.name = "DwinScreenUart";
@ -26,8 +36,18 @@ void DwinScreen::init(UART_HandleTypeDef* huart, int __) {
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);
}
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_one_var_icon() {
uint16_t addr = m_varIconManager.alloc(m_dwcfg.varIconSize);
return addr;
}
void DwinScreen::clearrxcache() {
CriticalContext cc;
txcontext.receipt_ready_flag = false;

78
components/dwin/dwin_screen.hpp

@ -1,4 +1,6 @@
#pragma once
#include "dwin_ram_manager.hpp"
//
#include "sdk/os/zos.hpp"
namespace iflytop {
@ -18,30 +20,50 @@ using namespace std;
#define TX_CACHE_SIZE 256
#define RX_CACHE_SIZE 256
class DwinScreen {
class Date {
public:
class Date {
public:
uint16_t year;
uint16_t month;
uint16_t day;
uint16_t hour;
uint16_t minute;
uint16_t second;
uint16_t weekdaynum;
};
uint16_t year;
uint16_t month;
uint16_t day;
uint16_t hour;
uint16_t minute;
uint16_t second;
uint16_t weekdaynum;
};
private:
class TxContext {
public:
uint8_t txcache[TX_CACHE_SIZE];
uint8_t txlen;
uint8_t receiptcache[RX_CACHE_SIZE];
uint8_t receiptlen;
bool receipt_ready_flag = false;
};
class TxContext {
public:
uint8_t txcache[TX_CACHE_SIZE];
uint8_t txlen;
uint8_t receiptcache[RX_CACHE_SIZE];
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 DwinScreen {
public:
private:
DwinScreenCfg m_dwcfg;
UART_HandleTypeDef* m_huart;
ZUART m_uarthandler;
@ -50,16 +72,21 @@ class DwinScreen {
uint8_t m_tx_pre_processcache[TX_CACHE_SIZE];
uint8_t m_rd_pre_processcache[RX_CACHE_SIZE];
DwinRamManager m_rammanager; // 空闲ram管理器
DwinRamManager m_textDisplayerManager; // 文本变量组件管理器
DwinRamManager m_varIconManager; // 图形变量组件管理器
bool enablecrc = false;
public:
/**
* @brief
*
* @param huart
* @param baudrate
* @param huart
* @param baudrate
*/
void init(UART_HandleTypeDef* huart, int __ = 0);
static DwinScreen& ins();
void init(UART_HandleTypeDef* huart, DwinScreenCfg cfg);
public:
bool set_page(uint16_t pageid);
@ -70,6 +97,10 @@ class DwinScreen {
bool ping();
uint16_t alloc_free_ram(uint16_t size);
uint16_t alloc_one_text_displayer();
uint16_t alloc_one_var_icon();
public:
bool write_reg16(uint16_t regaddr, uint16_t data, int overtime);
bool read_reg16(uint16_t regaddr, uint16_t& data, int overtime);
@ -94,5 +125,6 @@ class DwinScreen {
void sendcmd(uint8_t* cmd, size_t len);
bool sendcmdblock(int overtime);
};
} // namespace dwin
} // namespace iflytop

31
components/dwin/var_icon.cpp

@ -20,6 +20,16 @@ bool VarIcon::init(DwinScreen *dwin_screen, uint16_t descript_add) {
readcfg();
return true;
}
void VarIcon::initcfg(uint16_t valpointerAdd, uint16_t posx, uint16_t posy, const char *iconpath, uint16_t initval) {
int iconlib = 0;
int iconmin = 0;
int iconmax = 0;
sscanf(iconpath, "%d/%d:%d", &iconlib, &iconmin, &iconmax);
initcfg(valpointerAdd, initval, posx, posy, iconlib, iconmin, iconmax);
}
void VarIcon::initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, uint16_t posy, uint16_t iconlib, uint16_t iconmin, uint16_t iconmax) {
m_descript.m_VP = valpointerAdd;
m_descript.m_PosX = posx;
@ -34,6 +44,7 @@ void VarIcon::initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, u
m_descript.m_ICONGamma = 0;
m_descript.m_PICGamma = 0;
m_descript.m_FilterSet = 0x3F;
flushcfg();
setVal(initval);
}
@ -54,3 +65,23 @@ void VarIcon::dumpinfo() {
printf("m_PICGamma = %d\n", m_descript.m_PICGamma);
printf("m_FilterSet = %04x\n", m_descript.m_FilterSet);
}
bool VarIcon::setVal(uint16_t val) {
m_val = val;
return _setVal(val);
}
uint16_t VarIcon::getVal() {
uint16_t val = 0xffff;
m_dwin_screen->read_varspace16(m_descript.m_VP, val, 100);
return val;
}
void VarIcon::hide() { _setVal(VARICON_VAL_HIDE); };
void VarIcon::show() { _setVal(m_val); }
VarIconDescript_t &VarIcon::getDescript() { return m_descript; }
bool VarIcon::_setVal(uint16_t val) {
m_val = val;
return m_dwin_screen->write_varspace16(m_descript.m_VP, val, 100);
}

30
components/dwin/var_icon.hpp

@ -27,32 +27,46 @@ typedef struct {
} VarIconDescript_t;
#pragma pack()
#define VARICON_VAL_HIDE 0xffff
class VarIcon {
DwinScreen *m_dwin_screen = nullptr;
uint16_t m_descript_add = 0;
VarIconDescript_t m_descript;
uint16_t m_val = 0xffff;
public:
bool init(DwinScreen *dwin_screen, uint16_t descript_add);
void initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, uint16_t posy, uint16_t iconlib, uint16_t iconmin, uint16_t iconmax);
/**
* @brief
*
* @param valpointerAdd
* @param posx x坐标
* @param posy y坐标
* @param iconpath 47/1:1 iconlib/iconmin:iconmax
*/
void initcfg(uint16_t valpointerAdd, uint16_t posx, uint16_t posy, const char *iconpath, uint16_t initval);
public:
bool flushcfg();
bool readcfg();
bool setVal(uint16_t val) { return m_dwin_screen->write_varspace16(m_descript.m_VP, val, 100); }
uint16_t getVal() {
uint16_t val = 0xffff;
m_dwin_screen->read_varspace16(m_descript.m_VP, val, 100);
return val;
}
bool setVal(uint16_t val);
uint16_t getVal();
VarIconDescript_t &getDescript() { return m_descript; }
void hide();
void show();
VarIconDescript_t &getDescript();
void dumpinfo();
public:
private:
bool _setVal(uint16_t val);
};
} // namespace dwin
} // namespace iflytop
Loading…
Cancel
Save