📄 lcdlin.c
字号:
for using the routine.
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
none
----------------------------------------------------------------------
Open issues
----------------------------------------------------------------------
None
---------------------------END-OF-HEADER------------------------------
*/
#include <stddef.h> /* needed for definition of NULL */
#include "LCD_Private.h" /* private modul definitions & config */
#include "GUI_Private.h"
#include "GUIDebug.h"
#if (LCD_CONTROLLER / 100 == 13) \
&& (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
#if defined(WIN32) && (LCD_CONTROLLER == 1301)
#include "LCDSIM.h"
#endif
#if defined (__WATCOMC__) && (LCD_CONTROLLER == 1302)
#include <conio.h>
#include <i86.h>
#endif
/*
*********************************************************
* *
* Compiler specific settings *
* *
*********************************************************
*/
#ifdef WIN32 /* Avoid warnings in MS-compiler */
#pragma warning(disable : 4244) /* warning C4244: '=' : conversion from 'long ' to 'unsigned char ', possible loss of data */
#pragma warning(disable : 4761) /* warning C4761: integral size mismatch in argument; conversion supplied */
#endif
/*
*********************************************************
*
* Controller renumbering
*
*********************************************************
EPSON decided to rename all of their controllers. In order to
be able to work with old and new numbers, we simply map the old ones
to the new ones.
*/
#if LCD_CONTROLLER == 1386
#undef LCD_CONTROLLER
#define LCD_CONTROLLER 13806
#endif
/*
*********************************************************
* *
* Defaults for configuration *
* *
*********************************************************
*/
/* Switch for support of multiple pages.
Only available with certain LCD-controllers */
#ifndef LCD_SUPPORT_PAGING
#define LCD_SUPPORT_PAGING (0)
#endif
#ifndef LCD_NUM_CONTROLLERS
#define LCD_NUM_CONTROLLERS (1)
#endif
#ifndef LCD_BUSWIDTH
#define LCD_BUSWIDTH (16)
#endif
#ifndef LCD_OPTIMIZE
#define LCD_OPTIMIZE (1)
#endif
#if (LCD_CONTROLLER == 1356) || (LCD_CONTROLLER == 13806) || (LCD_CONTROLLER == 1304)
#ifndef LCD_USE_BITBLT
#if ((LCD_BITSPERPIXEL == 16) || (LCD_BITSPERPIXEL == 8 )) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
#define LCD_USE_BITBLT (1)
#else
#define LCD_USE_BITBLT (0)
#endif
#else
#if (LCD_MIRROR_Y)
#error BITBLT engine does not support LCD_MIRROR_Y = 1!
#endif
#if (LCD_SWAP_XY)
#error BITBLT engine does not support LCD_SWAP_XY = 1!
#endif
#endif
#else
#define LCD_USE_BITBLT (0)
#endif
#ifndef LCD_ENABLE_REG_ACCESS
#define LCD_ENABLE_REG_ACCESS()
#endif
#ifndef LCD_ENABLE_MEM_ACCESS
#define LCD_ENABLE_MEM_ACCESS()
#endif
#ifndef STATIC
#define STATIC static
#endif
#ifndef LCD_DISPLAY_INDEX
#define LCD_DISPLAY_INDEX 0
#endif
#ifndef LCD_COPY_MEM16_THRESHOLD
#define LCD_COPY_MEM16_THRESHOLD 50
#endif
#ifndef LCD_CNF4
#define LCD_CNF4 0
#endif
#ifndef LCD_SET_ORG
#define LCD_SET_ORG(x, y) GUI_USE_PARA(x); GUI_USE_PARA(y)
#endif
/*********************************************************************
*
* Rename SwapBytes
*
* SwapBytes has been changed from static to a non static function,
* because it can not be evaluated easily if the routine will be used
* or not. To avoid compiler warnings it has been changed to a
* non static function. (JE)
*/
#if (LCD_DISPLAY_INDEX == 0)
#define SwapBytes SwapBytes_0
#elif (LCD_DISPLAY_INDEX == 1)
#define SwapBytes SwapBytes_1
#elif (LCD_DISPLAY_INDEX == 2)
#define SwapBytes SwapBytes_2
#elif (LCD_DISPLAY_INDEX == 3)
#define SwapBytes SwapBytes_3
#elif (LCD_DISPLAY_INDEX == 4)
#define SwapBytes SwapBytes_4
#else
LCD_DISPLAY_INDEX > 4 not supported!
#endif
/*
*********************************************************
* *
* Defines for configuration simulation *
* *
*********************************************************
*/
#if defined(WIN32)
#if !defined(USE_PC_HARDWARE)
#if LCD_DISPLAY_INDEX == 1
#define SIM_WriteMem8 SIM_WriteMem8_1
#define SIM_WriteReg8 SIM_WriteReg8_1
#define SIM_ReadMem8 SIM_ReadMem8_1
#define SIM_ReadReg8 SIM_ReadReg8_1
#define SIM_WriteMem16 SIM_WriteMem16_1
#define SIM_WriteReg16 SIM_WriteReg16_1
#define SIM_ReadMem16 SIM_ReadMem16_1
#define SIM_ReadReg16 SIM_ReadReg16_1
#elif LCD_DISPLAY_INDEX == 2
#define SIM_WriteMem8 SIM_WriteMem8_2
#define SIM_WriteReg8 SIM_WriteReg8_2
#define SIM_ReadMem8 SIM_ReadMem8_2
#define SIM_ReadReg8 SIM_ReadReg8_2
#define SIM_WriteMem16 SIM_WriteMem16_2
#define SIM_WriteReg16 SIM_WriteReg16_2
#define SIM_ReadMem16 SIM_ReadMem16_2
#define SIM_ReadReg16 SIM_ReadReg16_2
#elif LCD_DISPLAY_INDEX == 3
#define SIM_WriteMem8 SIM_WriteMem8_3
#define SIM_WriteReg8 SIM_WriteReg8_3
#define SIM_ReadMem8 SIM_ReadMem8_3
#define SIM_ReadReg8 SIM_ReadReg8_3
#define SIM_WriteMem16 SIM_WriteMem16_3
#define SIM_WriteReg16 SIM_WriteReg16_3
#define SIM_ReadMem16 SIM_ReadMem16_3
#define SIM_ReadReg16 SIM_ReadReg16_3
#elif LCD_DISPLAY_INDEX == 4
#define SIM_WriteMem8 SIM_WriteMem8_4
#define SIM_WriteReg8 SIM_WriteReg8_4
#define SIM_ReadMem8 SIM_ReadMem8_4
#define SIM_ReadReg8 SIM_ReadReg8_4
#define SIM_WriteMem16 SIM_WriteMem16_4
#define SIM_WriteReg16 SIM_WriteReg16_4
#define SIM_ReadMem16 SIM_ReadMem16_4
#define SIM_ReadReg16 SIM_ReadReg16_4
#endif
void SIM_WriteMem8(unsigned int Off, int Data);
void SIM_WriteReg8(unsigned int Off, int Data);
int SIM_ReadMem8(unsigned int Off);
int SIM_ReadReg8(unsigned int Off);
void SIM_WriteMem16(unsigned int Off, int Data);
void SIM_WriteReg16(unsigned int Off, int Data);
int SIM_ReadMem16(unsigned int Off);
int SIM_ReadReg16(unsigned int Off);
#undef LCD_READ_MEM
#undef LCD_READ_REG
#undef LCD_WRITE_MEM
#undef LCD_WRITE_REG
#undef LCD_OFF
#undef LCD_ON
#undef LCD_ENABLE_REG_ACCESS
#undef LCD_ENABLE_MEM_ACCESS
#undef LCD_SET_ORG
#define LCD_ENABLE_REG_ACCESS()
#define LCD_ENABLE_MEM_ACCESS()
#define LCD_OFF()
#define LCD_ON()
#define LCD_SET_ORG(x, y) GUI_USE_PARA(x); GUI_USE_PARA(y)
#if LCD_BUSWIDTH==8
#define LCD_READ_MEM(Off) SIM_ReadMem8(Off)
#define LCD_WRITE_MEM(Off,Data) SIM_WriteMem8(Off, Data)
#define LCD_READ_REG(Off) SIM_ReadReg8(Off)
#define LCD_WRITE_REG(Off,Data) SIM_WriteReg8(Off, Data)
#elif LCD_BUSWIDTH==16
#define LCD_READ_MEM(Off) SIM_ReadMem16(Off)
#define LCD_WRITE_MEM(Off,Data) SIM_WriteMem16(Off, Data)
#define LCD_READ_REG(Off) SIM_ReadReg16(Off)
#define LCD_WRITE_REG(Off,Data) SIM_WriteReg16(Off, Data)
#endif
#elif defined(USE_PC_HARDWARE)
void PC_WriteMem8(unsigned int Off, int Data);
void PC_WriteReg8(unsigned int Off, int Data);
int PC_ReadMem8(unsigned int Off);
int PC_ReadReg8(unsigned int Off);
void PC_WriteMem16(unsigned int Off, int Data);
void PC_WriteReg16(unsigned int Off, int Data);
int PC_ReadMem16(unsigned int Off);
int PC_ReadReg16(unsigned int Off);
#undef LCD_READ_MEM
#undef LCD_READ_REG
#undef LCD_WRITE_MEM
#undef LCD_WRITE_REG
#if LCD_BUSWIDTH==8
#define LCD_READ_MEM(Off) PC_ReadMem8(Off)
#define LCD_WRITE_MEM(Off,Data) PC_WriteMem8(Off, Data)
#define LCD_READ_REG(Off) PC_ReadReg8(Off)
#define LCD_WRITE_REG(Off,Data) PC_WriteReg8(Off, Data)
#else
#define LCD_READ_MEM(Off) PC_ReadMem16(Off)
#define LCD_WRITE_MEM(Off,Data) PC_WriteMem16(Off, Data)
#define LCD_READ_REG(Off) PC_ReadReg16(Off)
#define LCD_WRITE_REG(Off,Data) PC_WriteReg16(Off, Data)
#endif
#else
#error Should not happen ...
#endif
#endif
/********************************************************
*
* Remap Hardware macros
*
*********************************************************
*/
#ifndef WIN32
#if GUI_NUM_LAYERS > 1 /* Use single display macros */
#if LCD_DISPLAY_INDEX == 0 /* 1. display in a multi-display configuration */
#define LCD_READ_MEM(Off) LCD_READ_MEM_0(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_0(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_0(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_0(Off,Data)
#elif LCD_DISPLAY_INDEX == 1 /* 2. display in a multi-display configuration */
#define LCD_READ_MEM(Off) LCD_READ_MEM_1(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_1(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_1(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_1(Off,Data)
#elif LCD_DISPLAY_INDEX == 2 /* 3. display in a multi-display configuration */
#define LCD_READ_MEM(Off) LCD_READ_MEM_2(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_2(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_2(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_2(Off,Data)
#elif LCD_DISPLAY_INDEX == 3 /* 4. display in a multi-display configuration */
#define LCD_READ_MEM(Off) LCD_READ_MEM_3(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_3(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_3(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_3(Off,Data)
#elif LCD_DISPLAY_INDEX == 4 /* 5. display in a multi-display configuration */
#define LCD_READ_MEM(Off) LCD_READ_MEM_4(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_4(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_4(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_4(Off,Data)
#else
#error Not supported yet!
#endif
#endif
#endif
/*
*********************************************************
* *
* Macro calculations *
* *
*********************************************************
*/
/* To make life easier, assign physical x/y size */
#if !LCD_SWAP_XY
#define LCD_XSIZE_P LCD_XSIZE
#define LCD_YSIZE_P LCD_YSIZE
#define LCD_VXSIZE_P LCD_VXSIZE
#define LCD_VYSIZE_P LCD_VYSIZE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -