|
|
#pragma once
#include "sdk/os/zos.hpp"
namespace iflytop { namespace dwin { using namespace std;
/**
* @brief * * 2byte 1byte cmd data crc * 5AA5 01 0x82/0x83 1->249 * * 2byte 1byte cmd data crc * 5AA5 01 0x81/0x80 1->249 */
#define TX_CACHE_SIZE 256
#define RX_CACHE_SIZE 256
class DwinScreen { 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; };
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; };
private: UART_HandleTypeDef* m_huart; ZUART m_uarthandler;
TxContext txcontext;
uint8_t m_tx_pre_processcache[TX_CACHE_SIZE]; uint8_t m_rd_pre_processcache[RX_CACHE_SIZE];
bool enablecrc = false;
public: /**
* @brief * * @param huart * @param baudrate */ void init(UART_HandleTypeDef* huart, int __ = 0);
public: bool set_page(uint16_t pageid); uint16_t get_page(); bool set_brightness(uint16_t brightness); bool set_rtc(uint16_t year, uint16_t month, uint16_t day, uint16_t hour, uint16_t minute, uint16_t second); bool get_rtc(Date* date);
bool ping();
public: bool write_reg16(uint16_t regaddr, uint16_t data, int overtime); bool read_reg16(uint16_t regaddr, uint16_t& data, int overtime);
bool write_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime); bool read_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime);
bool write_varspace16(uint16_t regaddr, uint16_t data, int overtime); bool read_varspace16(uint16_t regaddr, uint16_t& data, int overtime);
bool write_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime); bool read_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime);
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 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);
private: void clearrxcache(); void sendcmd(uint8_t* cmd, size_t len); bool sendcmdblock(int overtime); }; } // namespace dwin
} // namespace iflytop
|