C-Berry_Display/SW/tft_test/RAIO8870.h

402 lines
9.7 KiB
C

/*##############################################################*/
/* */
/* File : RAIO8870.h */
/* */
/* Project : TFT for Raspberry Pi Revision 2 */
/* */
/* Date : 2014-08-14 last update: 2014-08-14 */
/* */
/* Author : Hagen Ploog */
/* Kai Gillmann */
/* Timo Pfander */
/* */
/* IDE : Geany 1.22 */
/* Compiler : gcc (Debian 4.6.3-14+rpi1) 4.6.3 */
/* */
/* Copyright (C) 2013 admatec GmbH */
/* */
/* */
/* Description : */
/* */
/* This file contains the defines of the RAIO register. */
/* Furthermore declared the file several functions to control */
/* the graphic controller RAIO8870. */
/* */
/* There can two different color depths to be set for the BMP */
/* output. It can be changed behind the line color modes. */
/* */
/* */
/* License: */
/* */
/* This program is free software; you can redistribute it */
/* and/or modify it under the terms of the GNU General */
/* Public License as published by the Free Software */
/* Foundation; either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will */
/* be useful, but WITHOUT ANY WARRANTY; without even the */
/* implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General */
/* Public License for more details. */
/* */
/* You should have received a copy of the GNU General */
/* Public License along with this program; if not, */
/* see <http://www.gnu.org/licenses/>. */
/* */
/* */
/* Revision History: */
/* */
/* Version 1.0 - Initial release */
/* */
/* */
/* */
/*##############################################################*/
#ifndef RAIO8870_H
#define RAIO8870_H
#include <stdint.h>
//touch
#define touch_available
//color modes (color depths) { CM_4K=0, CM_65K };
#define CM_65K
// TFT dimensions
#define DISPLAY_WIDTH 320
#define DISPLAY_HEIGHT 240
#define PICTURE_PIXELS ( DISPLAY_WIDTH*DISPLAY_HEIGHT )
// RAIO register -> see datasheet RAIO8870
#define PCOD 0x00
#define PWRR 0x01
#define MRWC 0x02
#define PCLK 0x04
#define SYSR 0x10
#define DRGB 0x11
#define IOCR 0x12
#define IODR 0x13
#define HDWR 0x14
#define HNDFTR 0x15
#define HNDR 0x16
#define HSTR 0x17
#define HPWR 0x18
#define VDHR0 0x19
#define VDHR1 0x1a
#define VNDR0 0x1b
#define VNDR1 0x1c
#define VSTR0 0x1d
#define VSTR1 0x1e
#define VPWR 0x1f
#define DPCR 0x20
#define FNCR0 0x21
#define FNCR1 0x22
#define CGSR 0x23
#define HOFS0 0x24
#define HOFS1 0x25
#define VOFS0 0x26
#define VOFS1 0x27
#define ROMS 0x28
#define FLDR 0x29
#define HSAW0 0x30
#define HSAW1 0x31
#define VSAW0 0x32
#define VSAW1 0x33
#define HEAW0 0x34
#define HEAW1 0x35
#define VEAW0 0x36
#define VEAW1 0x37
#define HSSW0 0x38
#define HSSW1 0x39
#define VSSW0 0x3a
#define VSSW1 0x3b
#define HESW0 0x3c
#define HESW1 0x3d
#define VESW0 0x3e
#define VESW1 0x3f
#define MWCR0 0x40
#define MWCR1 0x41
#define TFCR 0x42
#define TBCR 0x43
#define BTCR 0x44
#define CURS 0x45
#define CURH0 0x46
#define CURH1 0x47
#define CURV0 0x48
#define CURV1 0x49
#define RCURH0 0x4a
#define RCURH01 0x4b
#define RCURV0 0x4c
#define RCURV1 0x4d
#define MRCD 0x4e
#define BECR0 0x50
#define BECR1 0x51
#define LTPR0 0x52
#define LTPR1 0x53
#define HSBE0 0x54
#define HSBE1 0x55
#define VSBE0 0x56
#define VSBE1 0x57
#define HDBE0 0x58
#define HDBE1 0x59
#define VDBE0 0x5a
#define VDBE1 0x5b
#define BEWR0 0x5c
#define BEWR1 0x5d
#define BEHR0 0x5e
#define BEHR1 0x5f
#define BGCR0 0x60
#define BGCR1 0x61
#define BGCR2 0x62
#define FGCR0 0x63
#define FGCR1 0x64
#define FGCR2 0x65
#define PTNO 0x66
#define BGTR 0x67
#define TPCR0 0x70
#define TPCR1 0x71
#define TPXH 0x72
#define TPYH 0x73
#define TPXYL 0x74
#define GCHP0 0x80
#define GCHP1 0x81
#define GCVP0 0x82
#define GCVP1 0x83
#define GCC0 0x84
#define GCC1 0x85
#define PLLC1 0x88
#define PLLC2 0x89
#define P1CR 0x8a
#define P1DCR 0x8b
#define P2CR 0x8c
#define P2DCR 0x8d
#define MCLR 0x8e
#define INTC 0x8f
#define DCR 0x90
#define DLHSR0 0x91
#define DLHSR1 0x92
#define DLVSR0 0x93
#define DLVSR1 0x94
#define DLHER0 0x95
#define DLHER1 0x96
#define DLVER0 0x97
#define DLVER1 0x98
#define DCHR0 0x99
#define DCHR1 0x9a
#define DCVR0 0x9b
#define DCVR1 0x9c
#define DCRR 0x9d
#define TCR1 0xa0
#define TCR2 0xa1
#define OEHTCR1 0xa2
#define OEHTCR2 0xa3
#define OEHTCR3 0xa4
#define OEHTCR4 0xa5
#define OEHTCR5 0xa6
#define OEHTCR6 0xa7
#define OEHTCR7 0xa8
#define OEHTCR8 0xa9
#define STHTCR1 0xaa
#define STHTCR2 0xab
#define STHTCR3 0xac
#define STHTCR4 0xad
#define Q1HCR1 0xae
#define Q1HCR2 0xaf
#define OEVTCR1 0xb0
#define OEVTCR2 0xb1
#define OEVTCR3 0xb2
#define OEVTCR4 0xb3
#define CKVTCR1 0xb4
#define CKVTCR2 0xb5
#define CKVTCR3 0xb6
#define CKVTCR4 0xb7
#define STVTCR1 0xb8
#define STVTCR2 0xb9
#define STVTCR3 0xba
#define STVTCR4 0xbb
#define STVTCR5 0xbc
#define STVTCR6 0xbd
#define STVTCR7 0xbe
#define STVTCR8 0xbf
#define COMTCR1 0xc0
#define COMTCR2 0xc1
#define RGBTCR1 0xc2
#define RGBTCR2 0xc3
// colors "RRRGGGBB"
#define COLOR_RED 0xE0
#define COLOR_BLUE 0x03
#define COLOR_GREEN 0x1C
#define COLOR_BLACK 0x00
#define COLOR_WHITE 0xFF
#define COLOR_CYAN 0x1F
#define COLOR_YELLOW 0xFC
#define COLOR_MAGENTA 0xE3
#define COLOR_DARK_GREEN 0x0C
// ROP functions
#define ROP_SOURCE 0xC
// BTE operation functions
#define BTE_MOVE_POSITIVE 0x02
#define BTE_SOLID_FILL 0x0C
// declaration of a union (used in RAIO8870.c and tft.c)
// ----------------------------------------------------------
union my_union
{
uint32_t value;
struct
{
unsigned char low;
unsigned char high;
} split;
};
#ifdef touch_available
// definition of filter size
#define debounce_buffer_size 4
extern uint32_t low_pass_x[debounce_buffer_size-1], low_pass_y[debounce_buffer_size-1];
// declaration of touch variable
extern uint8_t touch_buffer_full;
extern uint8_t low_pass_pointer;
// enumeration of touch modes
enum TOUCH_FUNCTIONS { down, pressed, up, no_touch };
// declaration of touch structure
struct touch
{
uint8_t state;
uint32_t touch_x, touch_y;
};
extern struct touch my_touch;
#endif
// enumeration of drawing modes
// ----------------------------------------------------------
enum DRAW_MODES { CIRCLE_NONFILL, CIRCLE_FILL, SQUARE_NONFILL, SQUARE_FILL, LINE};
// initialization of RAIO8870
// ----------------------------------------------------------
void RAIO_init( void );
// write command to a register
// ----------------------------------------------------------
void RAIO_SetRegister( uint8_t reg, uint8_t value );
// read data from a register
// ----------------------------------------------------------
uint8_t RAIO_GetRegister( uint8_t reg );
// set PWM value for backlight -> 0 (0% PWM) - 255 (100% PWM)
// ----------------------------------------------------------
void RAIO_SetBacklightPWMValue( uint8_t BL_value );
// set coordinates for active window
// ----------------------------------------------------------
void Active_Window( uint16_t XL,uint16_t XR ,uint16_t YT ,uint16_t YB);
// set cursor
// ----------------------------------------------------------
void RAIO_set_cursor( uint16_t pos_x ,uint16_t pos_y );
// set mode for BET (Block Transfer Engine)
// ----------------------------------------------------------
void BTE_mode( uint8_t bte_operation, uint8_t rop_function );
// set color -> see color defines
// ----------------------------------------------------------
void Text_Background_Color( uint8_t color );
void Text_Foreground_Color( uint8_t color );
// clear memory
// ----------------------------------------------------------
void RAIO_clear_screen( void );
// set coordinates for drawing
// ----------------------------------------------------------
void Set_Geometric_Coordinate( uint16_t X1, uint16_t Y1 ,uint16_t X2 ,uint16_t Y2 );
void Set_Geometric_Coordinate_circle (uint16_t X1, uint16_t Y1 ,uint8_t rad );
// show the BMP picture on the TFT screen
// ----------------------------------------------------------
void RAIO_Write_Picture( uint16_t *data, uint32_t count );
// set draw mode -> see DRAW_MODES
// ----------------------------------------------------------
void RAIO_StartDrawing( int16_t whattodraw );
// draw some basic geometrical forms
// ----------------------------------------------------------
void Draw_Line( uint16_t X1, uint16_t Y1 ,uint16_t X2 ,uint16_t Y2 );
void Draw_Square( uint16_t X1, uint16_t Y1 ,uint16_t X2 ,uint16_t Y2 );
// print text
// ----------------------------------------------------------
void RAIO_print_text( uint16_t pos_x, uint16_t pos_y, unsigned char *str, uint8_t BG_color, uint8_t FG_color );
// set font size
// ----------------------------------------------------------
void RAIO_SetFontSizeFactor( uint8_t size );
// get touch coordinates
// ----------------------------------------------------------
#ifdef touch_available
int32_t RAIO_gettouch();
#endif
#endif