You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.9 KiB
C++

//enhanced version of:
//credits: https://github.com/arildlangseid/vw_t4_tcu_temp_to_fis
#ifndef VAGFISWriter_h
#define VAGFISWriter_h
#include <inttypes.h>
#include <Arduino.h>
// based on FIS_emulator
#define FIS_WRITE_PULSEW 4
#define PORT_3LB PORTB
#define DATA PB3 //MOSI (Arduino Uno 11)
#define CLK PB5 //SCK (Arduino 13)
// Positions in Message-Array
#define FIS_MSG_COMMAND 0
#define FIS_MSG_LENGTH 1
#define JUMBO_PACKET_SIZE 32
static uint8_t _FIS_WRITE_ENA;
static uint8_t _FIS_WRITE_CLK;
static uint8_t _FIS_WRITE_DATA;
static char _radioData[16];
static uint8_t _radioDataOK=0;
class VAGFISWriter
{
public:
VAGFISWriter(uint8_t clkPin, uint8_t dataPin, uint8_t enaPin,uint8_t single_pulse_on_enable_line=0);
~VAGFISWriter();
void begin();
uint8_t sendMsg(char * msg);
void sendOneByte(uint8_t X,uint8_t Y,uint8_t font, uint8_t byte);
uint8_t sendMsg(const char * msg);
void sendRadioMsg(char msg[16]);
//bool sendRadioMsg(String msg);
void sendString(String line1="", String line2="", bool center=true);
void sendStringFS(int x, int y, uint8_t font, String line);
void sendMsgFS(uint8_t X,uint8_t Y,uint8_t font,uint8_t size,char * msg);
void sendMsgFS(uint8_t X,uint8_t Y,uint8_t font,uint8_t size,const char * msg);
void initScreen(uint8_t X,uint8_t Y,uint8_t X1,uint8_t Y1,uint8_t mode);
void reset(uint8_t mode = 0x82);
void initMiddleScreen(uint8_t mode = 0x82);
void initFullScreen(uint8_t mode = 0x82);
void initFullScreenFilled();
//void sendRawMsg(char in_msg[]);
uint8_t sendRawData(char data[]);
uint8_t sendRawData(uint8_t data[]);
void sendKeepAliveMsg();
void radioDisplayOff();
void radioDisplayBlank();
void GraphicFromArray(uint8_t x,uint8_t y, uint8_t sizex,uint8_t sizey,char data[],uint8_t mode);
void GraphicFromArray(uint8_t x,uint8_t y, uint8_t sizex,uint8_t sizey,const char * const data,uint8_t mode);
void GraphicFromArray(uint8_t x,uint8_t y, uint8_t sizex,uint8_t sizey,const uint8_t * const data,uint8_t mode);
void GraphicOut(uint8_t x,uint8_t y, uint16_t size, char data[],uint8_t mode);
void GraphicOut(uint8_t x,uint8_t y, uint16_t size, const char * const data,uint8_t mode);
void GraphicOut(uint8_t x,uint8_t y, uint16_t size, const uint8_t* const data,uint8_t mode);
void sendRadioData(void);
static void enableGoesHigh(void);
static void enableGoesLow(void);
private:
uint8_t sendSingleByteCommand(uint8_t txByte);
void sendEnablePulse();
void sendByte(uint8_t in_byte);
void startENA();
void stopENA();
void setClockHigh();
void setClockLow();
void setDataHigh();
void setDataLow();
uint8_t waitEnaHigh( uint16_t timeout_us = 1500);
uint8_t waitEnaLow( uint16_t timeout_us = 1500);
uint8_t checkSum( volatile uint8_t in_msg[]);
uint8_t __singleENA=0;
};
#endif