Compare commits
No commits in common. "97e5010539071d495bd72b0093f5700c777c78bf" and "48942b8593b7378fe84139c0f3f8d14c9a2e0e81" have entirely different histories.
97e5010539
...
48942b8593
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 225 KiB |
@ -1,401 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* 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
|
|
||||||
@ -1,121 +0,0 @@
|
|||||||
/*
|
|
||||||
* my_fbcopy.c
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
#include <bcm_host.h>
|
|
||||||
|
|
||||||
#include "tft.h"
|
|
||||||
#include "RAIO8870.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
DISPMANX_DISPLAY_HANDLE_T main_display_handle;
|
|
||||||
DISPMANX_RESOURCE_HANDLE_T screen_resource_handle;
|
|
||||||
|
|
||||||
VC_RECT_T rectangle;
|
|
||||||
|
|
||||||
int ret;
|
|
||||||
uint32_t image_prt;
|
|
||||||
uint16_t image[2][ PICTURE_PIXELS ];
|
|
||||||
uint32_t current_frame = 0, old_frame=1;
|
|
||||||
uint32_t i, x, y, start, end, count;
|
|
||||||
uint16_t *p_current_frame, *p_old_frame, *p_start;
|
|
||||||
|
|
||||||
bcm_host_init();
|
|
||||||
|
|
||||||
if ( !bcm2835_init() )
|
|
||||||
return ( -1 );
|
|
||||||
|
|
||||||
TFT_init_board();
|
|
||||||
|
|
||||||
TFT_hard_reset();
|
|
||||||
|
|
||||||
RAIO_init();
|
|
||||||
|
|
||||||
//clear old image
|
|
||||||
p_old_frame = &image[ old_frame ][0];
|
|
||||||
for(x=0; x<76800; x++)
|
|
||||||
{
|
|
||||||
*p_old_frame++ = 0x1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// open main framebuffer device
|
|
||||||
main_display_handle = vc_dispmanx_display_open( 0 );
|
|
||||||
if ( !main_display_handle )
|
|
||||||
{
|
|
||||||
printf("\n Unable to open primary display");
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// now build up the shadow area for RAIO
|
|
||||||
screen_resource_handle = vc_dispmanx_resource_create( VC_IMAGE_RGB565, DISPLAY_WIDTH, DISPLAY_HEIGHT, &image_prt );
|
|
||||||
if ( !screen_resource_handle )
|
|
||||||
{
|
|
||||||
printf("\n Unable to create screen buffer");
|
|
||||||
vc_dispmanx_display_close( main_display_handle );
|
|
||||||
return ( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
vc_dispmanx_rect_set( &rectangle, 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT );
|
|
||||||
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
ret = vc_dispmanx_snapshot( main_display_handle, screen_resource_handle, DISPMANX_NO_ROTATE );
|
|
||||||
|
|
||||||
vc_dispmanx_resource_read_data( screen_resource_handle, &rectangle, &image[ current_frame ][0], DISPLAY_WIDTH*2 );
|
|
||||||
|
|
||||||
|
|
||||||
i=0;
|
|
||||||
p_current_frame = &image[ current_frame ][ 0 ];
|
|
||||||
p_old_frame = &image[ old_frame ][ 0 ];
|
|
||||||
|
|
||||||
while (i<PICTURE_PIXELS)
|
|
||||||
{
|
|
||||||
while (( *p_current_frame == *p_old_frame) && (i<PICTURE_PIXELS) )
|
|
||||||
{
|
|
||||||
p_current_frame++;
|
|
||||||
p_old_frame++;
|
|
||||||
i = i+1;
|
|
||||||
}
|
|
||||||
p_start = p_current_frame;
|
|
||||||
start = i;
|
|
||||||
|
|
||||||
|
|
||||||
while (( *p_current_frame != *p_old_frame) && (i<PICTURE_PIXELS) )
|
|
||||||
{
|
|
||||||
p_current_frame++;
|
|
||||||
p_old_frame++;
|
|
||||||
i = i+1;
|
|
||||||
}
|
|
||||||
count = i - start;
|
|
||||||
|
|
||||||
y=start/DISPLAY_WIDTH;
|
|
||||||
x=start-y*DISPLAY_WIDTH;
|
|
||||||
RAIO_set_cursor( x, y );
|
|
||||||
RAIO_Write_Picture( p_start, count );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
old_frame = current_frame;
|
|
||||||
if ( current_frame == 0 )
|
|
||||||
current_frame = 1;
|
|
||||||
else
|
|
||||||
current_frame = 0;
|
|
||||||
|
|
||||||
|
|
||||||
// 100ms -> 10 fps
|
|
||||||
usleep( 100 * 1000 );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return ( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
|
|
||||||
#include the Broadcom hardware interface library
|
|
||||||
XINCDIR +=-I$(ROOTDIR)/opt/vc/include
|
|
||||||
XINCDIR +=-I$(ROOTDIR)/opt/vc/include/interface/vmcs_host/linux
|
|
||||||
XINCDIR +=-I$(ROOTDIR)/opt/vc/include/interface/vcos/pthreads -DRPI=1
|
|
||||||
XLIBS += -L/opt/vc/lib/ -lbcm_host
|
|
||||||
|
|
||||||
|
|
||||||
all: fb2cberry
|
|
||||||
|
|
||||||
|
|
||||||
fb2cberry: fb2cberry.o
|
|
||||||
gcc $(XINCDIR) $(LIBS) fb2cberry.o tft.o RAIO8870.o ${XLIBS} -lbcm2835 -lrt -lm -o fb2cberry
|
|
||||||
|
|
||||||
|
|
||||||
fb2cberry.o: fb2cberry.c
|
|
||||||
gcc $(XLIBS) $(XINCDIR) $(LIBS) -Os -c fb2cberry.c
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *o fb2cberry
|
|
||||||
|
|
||||||
@ -1,120 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : tft.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 declared functions for the SPI communications */
|
|
||||||
/* between the Raspberry Pi and the TFT and for the */
|
|
||||||
/* initialization of the GPIO Pins of the Raspberry Pi. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 TFT_H
|
|
||||||
#define TFT_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "RAIO8870.h"
|
|
||||||
|
|
||||||
|
|
||||||
// define pins on connector P1
|
|
||||||
#define MOSI RPI_V2_GPIO_P1_19
|
|
||||||
#define MISO RPI_V2_GPIO_P1_21
|
|
||||||
#define SCLK RPI_V2_GPIO_P1_23
|
|
||||||
#define OE RPI_V2_GPIO_P1_11
|
|
||||||
#define SPI_CE1 RPI_V2_GPIO_P1_26
|
|
||||||
#define RAIO_RS RPI_V2_GPIO_P1_12
|
|
||||||
#define RAIO_RST RPI_V2_GPIO_P1_22
|
|
||||||
#define RAIO_CS RPI_V2_GPIO_P1_24
|
|
||||||
#define RAIO_WR RPI_V2_GPIO_P1_18
|
|
||||||
#define RAIO_RD RPI_V2_GPIO_P1_16
|
|
||||||
#define RAIO_WAIT RPI_V2_GPIO_P1_15
|
|
||||||
#define RAIO_INT RPI_V2_GPIO_P1_13
|
|
||||||
|
|
||||||
#define RAIO_WRpin 24
|
|
||||||
|
|
||||||
|
|
||||||
// declaration of a union (see RAIO8870.h)
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
extern union my_union number;
|
|
||||||
|
|
||||||
|
|
||||||
// initialization of GPIO and SPI
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_init_board( void );
|
|
||||||
|
|
||||||
|
|
||||||
// hard reset of the graphic controller and the tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_hard_reset( void );
|
|
||||||
|
|
||||||
|
|
||||||
// wait during raio is busy
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_wait_for_raio ( void );
|
|
||||||
|
|
||||||
|
|
||||||
// write byte to register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_RegWrite( uint16_t reg );
|
|
||||||
|
|
||||||
|
|
||||||
// write byte to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_DataWrite( uint16_t data );
|
|
||||||
|
|
||||||
|
|
||||||
// read byte from tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
uint16_t TFT_DataRead( );
|
|
||||||
|
|
||||||
|
|
||||||
// read RAIO status
|
|
||||||
uint16_t TFT_StatusRead();
|
|
||||||
|
|
||||||
|
|
||||||
// write 'count'-bytes to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_DataMultiWrite( uint16_t *data, uint32_t count );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@ -1,538 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : RAIO8870.c */
|
|
||||||
/* */
|
|
||||||
/* 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 contain several functions to initialize and */
|
|
||||||
/* control the graphic controller RAIO8870. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/*##############################################################*/
|
|
||||||
|
|
||||||
#include <bcm2835.h>
|
|
||||||
#include "RAIO8870.h"
|
|
||||||
#include "tft.h"
|
|
||||||
|
|
||||||
uint16_t txc = 0x00; // character x position on screen
|
|
||||||
uint16_t tyc = 0x00; // character y position on screen
|
|
||||||
uint8_t char_higth = 15; // character hight depends on character set
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CM_4K
|
|
||||||
static uint8_t BankNo_WR=0, BankNo_RD=1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct touch my_touch;
|
|
||||||
uint8_t touch_buffer_full;
|
|
||||||
uint32_t low_pass_x[3], low_pass_y[3];
|
|
||||||
uint8_t low_pass_pointer;
|
|
||||||
|
|
||||||
|
|
||||||
// write command to a register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_SetRegister( uint8_t reg, uint8_t value )
|
|
||||||
{
|
|
||||||
TFT_RegWrite( (uint16_t)reg );
|
|
||||||
TFT_DataWrite( (uint16_t)value );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// read data from a register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
uint8_t RAIO_GetRegister( uint8_t reg )
|
|
||||||
{
|
|
||||||
uint8_t value;
|
|
||||||
|
|
||||||
TFT_RegWrite( (uint16_t)reg );
|
|
||||||
|
|
||||||
value = TFT_DataRead();
|
|
||||||
|
|
||||||
return ( value );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set PWM value for backlight
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_SetBacklightPWMValue( uint8_t BL_value )
|
|
||||||
{
|
|
||||||
RAIO_SetRegister( P1CR, 0x88 ); // Enable PWM1 output devider 256
|
|
||||||
RAIO_SetRegister( P1DCR, BL_value ); // -> BL_vaue = 0 (0% PWM) - 255 (100% PWM)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// initialization of RAIO8870
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_init( void )
|
|
||||||
{
|
|
||||||
static uint8_t PLL_Initial_Flag = 0;
|
|
||||||
|
|
||||||
// *************** PLL settings (System Clock)
|
|
||||||
|
|
||||||
if ( !PLL_Initial_Flag ) // wait until PLL is ready
|
|
||||||
{
|
|
||||||
PLL_Initial_Flag = 1; // set Flag to avoid repeated PLL init
|
|
||||||
|
|
||||||
RAIO_SetRegister( PLLC1, 0x07 ); // set sys_clk
|
|
||||||
bcm2835_delayMicroseconds( 200 );
|
|
||||||
RAIO_SetRegister( PLLC2, 0x03 ); // set sys_clk
|
|
||||||
bcm2835_delayMicroseconds( 200 );
|
|
||||||
|
|
||||||
RAIO_SetRegister( PWRR, 0x01 ); // Raio software reset ( bit 0 ) set
|
|
||||||
RAIO_SetRegister( PWRR, 0x00 ); // Raio software reset ( bit 0 ) set to 0
|
|
||||||
delay( 100 );
|
|
||||||
|
|
||||||
|
|
||||||
// *************** color modes (color depths)
|
|
||||||
|
|
||||||
#ifdef CM_65K
|
|
||||||
// System Configuration Register
|
|
||||||
RAIO_SetRegister( SYSR, 0x0A ); // digital TFT
|
|
||||||
// parallel data out
|
|
||||||
// no external memory
|
|
||||||
// 8bit memory data bus
|
|
||||||
// 16bpp 65K color
|
|
||||||
// 16bit MCU-interface (data)
|
|
||||||
RAIO_SetRegister( DPCR, 0x00 ); // one layer
|
|
||||||
#elif defined(CM_4K)
|
|
||||||
// System Configuration Register
|
|
||||||
RAIO_SetRegister( SYSR, 0x06 ); // digital TFT
|
|
||||||
// parallel data out
|
|
||||||
// no external memory
|
|
||||||
// 8bit memory data bus
|
|
||||||
// 12bpp 4K color
|
|
||||||
// 16bit MCU-interface (data)
|
|
||||||
RAIO_SetRegister( DPCR, 0x80 ); // two layers
|
|
||||||
RAIO_SetRegister( MWCR1, BankNo_WR );
|
|
||||||
RAIO_SetRegister( LTPR0, BankNo_RD );
|
|
||||||
#else
|
|
||||||
#error "color_mode not defined"
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// *************** horizontal settings
|
|
||||||
|
|
||||||
// 0x27+1 * 8 = 320 pixel
|
|
||||||
RAIO_SetRegister( HDWR , (DISPLAY_WIDTH / 8) - 1 );
|
|
||||||
// Horizontal Non-Display Period Fine Tuning
|
|
||||||
RAIO_SetRegister( HNDFTR, 0x02 );
|
|
||||||
|
|
||||||
// HNDR , Horizontal Non-Display Period Bit[4:0]
|
|
||||||
// Horizontal Non-Display Period (pixels) = (HNDR + 1)*8
|
|
||||||
RAIO_SetRegister( HNDR, 0x03 );
|
|
||||||
// HSTR , HSYNC Start Position[4:0], HSYNC Start Position(PCLK) = (HSTR + 1)*8 0x02
|
|
||||||
RAIO_SetRegister( HSTR, 0x04 );
|
|
||||||
|
|
||||||
// HPWR , HSYNC Polarity ,The period width of HSYNC.
|
|
||||||
// 1xxxxxxx activ high 0xxxxxxx activ low
|
|
||||||
// HSYNC Width [4:0] HSYNC Pulse width
|
|
||||||
// (PCLK) = (HPWR + 1)*8
|
|
||||||
RAIO_SetRegister( HPWR, 0x03 );
|
|
||||||
|
|
||||||
|
|
||||||
// ********************* vertical settings
|
|
||||||
|
|
||||||
// 0x0EF +1 = 240 pixel
|
|
||||||
RAIO_SetRegister( VDHR0 , ( (DISPLAY_HEIGHT-1) & 0xFF ) );
|
|
||||||
RAIO_SetRegister( VDHR1 , ( (DISPLAY_HEIGHT-1) >> 8) );
|
|
||||||
|
|
||||||
// VNDR0 , Vertical Non-Display Period Bit [7:0]
|
|
||||||
// Vertical Non-Display area = (VNDR + 1)
|
|
||||||
// VNDR1 , Vertical Non-Display Period Bit [8]
|
|
||||||
// Vertical Non-Display area = (VNDR + 1)
|
|
||||||
RAIO_SetRegister( VNDR0, 0x10 );
|
|
||||||
RAIO_SetRegister( VNDR1, 0x00 );
|
|
||||||
|
|
||||||
// VPWR , VSYNC Polarity ,VSYNC Pulse Width[6:0]
|
|
||||||
// VSYNC , Pulse Width(PCLK) = (VPWR + 1)
|
|
||||||
RAIO_SetRegister( VPWR, 0x00 );
|
|
||||||
|
|
||||||
|
|
||||||
// *************** miscellaneous settings
|
|
||||||
|
|
||||||
// active Window
|
|
||||||
Active_Window( 0, DISPLAY_WIDTH-1, 0, DISPLAY_HEIGHT-1 );
|
|
||||||
|
|
||||||
// PCLK fetch data on rising edge
|
|
||||||
RAIO_SetRegister( PCLK, 0x00 );
|
|
||||||
|
|
||||||
// Backlight dimming
|
|
||||||
RAIO_SetBacklightPWMValue(50);
|
|
||||||
|
|
||||||
// memory clear with background color
|
|
||||||
Text_Background_Color( COLOR_WHITE );
|
|
||||||
RAIO_SetRegister( MCLR, 0x81 );
|
|
||||||
TFT_wait_for_raio();
|
|
||||||
|
|
||||||
RAIO_SetRegister( IODR, 0x07 );
|
|
||||||
RAIO_SetRegister( PWRR, 0x80 );
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef touch_available
|
|
||||||
|
|
||||||
// Touch Panel enable
|
|
||||||
// wait 4096 system clocks period
|
|
||||||
// ADC clock = system clock / 16
|
|
||||||
RAIO_SetRegister( TPCR0, 0xB7 );
|
|
||||||
|
|
||||||
// 4wire, auto mode, internal vref enabled
|
|
||||||
// debounce enabled, idle mode
|
|
||||||
RAIO_SetRegister( TPCR1, 0x84 );
|
|
||||||
|
|
||||||
// enable touch interrupt
|
|
||||||
RAIO_SetRegister( INTC, 0x40 );
|
|
||||||
|
|
||||||
// init touch structure
|
|
||||||
my_touch.state = no_touch;
|
|
||||||
|
|
||||||
// init touch values
|
|
||||||
touch_buffer_full = 0;
|
|
||||||
low_pass_pointer = 0;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef touch_available
|
|
||||||
|
|
||||||
// get touch coords
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
int32_t RAIO_gettouch()
|
|
||||||
{
|
|
||||||
uint8_t mask;
|
|
||||||
uint8_t dummy_tp;
|
|
||||||
uint32_t touch_x, touch_y;
|
|
||||||
|
|
||||||
mask= RAIO_GetRegister( INTC );
|
|
||||||
|
|
||||||
if ( mask & 0x04 )
|
|
||||||
{
|
|
||||||
// read the data for x and y
|
|
||||||
touch_x = RAIO_GetRegister ( TPXH );
|
|
||||||
touch_y = RAIO_GetRegister ( TPYH );
|
|
||||||
|
|
||||||
// fill low pass filter with the new values
|
|
||||||
low_pass_x[ low_pass_pointer ] = touch_x;
|
|
||||||
low_pass_y[ low_pass_pointer ] = touch_y;
|
|
||||||
low_pass_pointer++;
|
|
||||||
|
|
||||||
|
|
||||||
if (low_pass_pointer == debounce_buffer_size)
|
|
||||||
{
|
|
||||||
low_pass_pointer = 0;
|
|
||||||
touch_buffer_full = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculate the average
|
|
||||||
my_touch.touch_x = (low_pass_x[0] + low_pass_x[1] + low_pass_x[2] + low_pass_x[3] ) >> 2;
|
|
||||||
my_touch.touch_y = (low_pass_y[0] + low_pass_y[1] + low_pass_y[2] + low_pass_y[3] ) >> 2;
|
|
||||||
|
|
||||||
|
|
||||||
if (touch_buffer_full == 1)
|
|
||||||
{
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case down : my_touch.state= pressed;
|
|
||||||
break;
|
|
||||||
case no_touch : my_touch.state = down;
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// clear touch irq
|
|
||||||
mask &= 0xf4 ;
|
|
||||||
RAIO_SetRegister( INTC, mask );
|
|
||||||
|
|
||||||
return ( 1 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case up : my_touch.state = no_touch;
|
|
||||||
break;
|
|
||||||
case pressed: my_touch.state = up;
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
|
|
||||||
low_pass_pointer = 0;
|
|
||||||
touch_buffer_full = 0;
|
|
||||||
return ( 0 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// set coordinates for active window
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void Active_Window( uint16_t XL, uint16_t XR , uint16_t YT, uint16_t YB )
|
|
||||||
{
|
|
||||||
union my_union number;
|
|
||||||
|
|
||||||
//setting active window X
|
|
||||||
number.value = XL;
|
|
||||||
RAIO_SetRegister( HSAW0, number.split.low );
|
|
||||||
RAIO_SetRegister( HSAW1, number.split.high );
|
|
||||||
|
|
||||||
number.value = XR;
|
|
||||||
RAIO_SetRegister( HEAW0, number.split.low );
|
|
||||||
RAIO_SetRegister( HEAW1, number.split.high );
|
|
||||||
|
|
||||||
|
|
||||||
//setting active window Y
|
|
||||||
number.value = YT;
|
|
||||||
RAIO_SetRegister( VSAW0, number.split.low );
|
|
||||||
RAIO_SetRegister( VSAW1, number.split.high );
|
|
||||||
|
|
||||||
number.value = YB;
|
|
||||||
RAIO_SetRegister( VEAW0, number.split.low );
|
|
||||||
RAIO_SetRegister( VEAW1, number.split.high );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set cursor
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_set_cursor( uint16_t pos_x ,uint16_t pos_y )
|
|
||||||
{
|
|
||||||
union my_union number;
|
|
||||||
|
|
||||||
number.value = pos_x;
|
|
||||||
RAIO_SetRegister( CURH0, number.split.low );
|
|
||||||
RAIO_SetRegister( CURH1, number.split.high );
|
|
||||||
|
|
||||||
number.value = pos_y;
|
|
||||||
RAIO_SetRegister( CURV0, number.split.low );
|
|
||||||
RAIO_SetRegister( CURV1, number.split.high );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// show the BMP picture on the TFT screen
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_Write_Picture( uint16_t *data, uint32_t count )
|
|
||||||
{
|
|
||||||
TFT_RegWrite( MRWC );
|
|
||||||
TFT_DataMultiWrite( data, count);
|
|
||||||
|
|
||||||
#ifdef CM_4K
|
|
||||||
if ( BankNo_WR==0 )
|
|
||||||
{
|
|
||||||
BankNo_WR=1;
|
|
||||||
BankNo_RD=0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BankNo_WR=0;
|
|
||||||
BankNo_RD=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
RAIO_SetRegister( MWCR1, BankNo_WR );
|
|
||||||
RAIO_SetRegister( LTPR0, BankNo_RD );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set mode for BET (Block Transfer Engine)
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void BTE_mode( uint8_t bte_operation, uint8_t rop_function )
|
|
||||||
{
|
|
||||||
RAIO_SetRegister( BECR1, bte_operation | (rop_function<<4) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set color
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void Text_Background_Color( uint8_t color )
|
|
||||||
{
|
|
||||||
RAIO_SetRegister( TBCR, color );
|
|
||||||
}
|
|
||||||
|
|
||||||
void Text_Foreground_Color( uint8_t color)
|
|
||||||
{
|
|
||||||
RAIO_SetRegister( TFCR, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// clear screen
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_clear_screen( void )
|
|
||||||
{
|
|
||||||
// for more informations see RA8870 specification page 40
|
|
||||||
//
|
|
||||||
// | Bit | Function
|
|
||||||
// |-----|-------------------------------------------------
|
|
||||||
// | 7 | 0 = stop clear 1 = start clear
|
|
||||||
// | 6 | 0 = fullwindow 1 = activewindow
|
|
||||||
// | 5-1 | NA
|
|
||||||
// | 0 | 0 = Memory clear with BTE background color 1 = Memory clear with font background color
|
|
||||||
//
|
|
||||||
// Reg 0x43 define font background color ( RRRGGGBB )
|
|
||||||
// Reg 0x60, 0x61, 0x62 define BTE background color ( BGCR0=red[4:0], BGCR1=green[5:0], BGCR2=blue[4:0] )
|
|
||||||
|
|
||||||
RAIO_SetRegister( MCLR , 0x81 );
|
|
||||||
TFT_wait_for_raio();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 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 cursor
|
|
||||||
RAIO_set_cursor( pos_x, pos_y );
|
|
||||||
|
|
||||||
// set color
|
|
||||||
Text_Background_Color( BG_color );
|
|
||||||
Text_Foreground_Color( FG_color );
|
|
||||||
|
|
||||||
// set text mode
|
|
||||||
RAIO_SetRegister( MWCR0, 0x80 );
|
|
||||||
|
|
||||||
// write text to display
|
|
||||||
TFT_RegWrite( MRWC );
|
|
||||||
|
|
||||||
while ( *str != '\0' )
|
|
||||||
{
|
|
||||||
TFT_DataWrite( *str );
|
|
||||||
++str;
|
|
||||||
TFT_wait_for_raio();
|
|
||||||
}
|
|
||||||
|
|
||||||
TFT_wait_for_raio();
|
|
||||||
|
|
||||||
// set graphic mode
|
|
||||||
RAIO_SetRegister( MWCR0, 0x00 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set font size
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_SetFontSizeFactor( uint8_t size )
|
|
||||||
{
|
|
||||||
size = (size & 0x0f);
|
|
||||||
RAIO_SetRegister ( FNCR1, size );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// set coordinates for drawing line and square
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void Set_Geometric_Coordinate(uint16_t X1, uint16_t Y1 ,uint16_t X2 ,uint16_t Y2 )
|
|
||||||
{
|
|
||||||
union my_union number;
|
|
||||||
|
|
||||||
number.value = X1;
|
|
||||||
RAIO_SetRegister( DLHSR0, number.split.low );
|
|
||||||
RAIO_SetRegister( DLHSR1, number.split.high );
|
|
||||||
|
|
||||||
number.value = Y1;
|
|
||||||
RAIO_SetRegister( DLVSR0, number.split.low );
|
|
||||||
RAIO_SetRegister( DLVSR1, number.split.high );
|
|
||||||
|
|
||||||
number.value = X2;
|
|
||||||
RAIO_SetRegister( DLHER0, number.split.low );
|
|
||||||
RAIO_SetRegister( DLHER1, number.split.high );
|
|
||||||
|
|
||||||
number.value = Y2;
|
|
||||||
RAIO_SetRegister( DLVER0, number.split.low );
|
|
||||||
RAIO_SetRegister( DLVER1, number.split.high );
|
|
||||||
}
|
|
||||||
|
|
||||||
// set coordinates for drawing circle
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void Set_Geometric_Coordinate_circle (uint16_t X1, uint16_t Y1 ,uint8_t rad )
|
|
||||||
{
|
|
||||||
union my_union number;
|
|
||||||
|
|
||||||
number.value = X1;
|
|
||||||
RAIO_SetRegister( DCHR0, number.split.low );
|
|
||||||
RAIO_SetRegister( DCHR1, number.split.high );
|
|
||||||
|
|
||||||
number.value = Y1;
|
|
||||||
RAIO_SetRegister( DCVR0, number.split.low );
|
|
||||||
RAIO_SetRegister( DCVR1, number.split.high );
|
|
||||||
|
|
||||||
RAIO_SetRegister( DCRR, rad );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set draw mode
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void RAIO_StartDrawing( int16_t whattodraw )
|
|
||||||
{
|
|
||||||
switch( whattodraw ) // -> see DRAW_MODES
|
|
||||||
{
|
|
||||||
case CIRCLE_NONFILL: {RAIO_SetRegister( DCR, 0x40 ); break;}
|
|
||||||
case CIRCLE_FILL: {RAIO_SetRegister( DCR, 0x60 ); break;}
|
|
||||||
case SQUARE_NONFILL: {RAIO_SetRegister( DCR, 0x90 ); break;}
|
|
||||||
case SQUARE_FILL: {RAIO_SetRegister( DCR, 0xB0 ); break;}
|
|
||||||
case LINE: {RAIO_SetRegister( DCR, 0x80 ); break;}
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
TFT_wait_for_raio();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// draw some basic geometrical forms
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void Draw_Line( uint16_t X1, uint16_t Y1 ,uint16_t X2 ,uint16_t Y2 )
|
|
||||||
{
|
|
||||||
Set_Geometric_Coordinate( X1, Y1, X2, Y2 );
|
|
||||||
RAIO_StartDrawing( LINE );
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw_Square( uint16_t X1, uint16_t Y1 ,uint16_t X2 ,uint16_t Y2 )
|
|
||||||
{
|
|
||||||
Set_Geometric_Coordinate( X1, Y1, X2, Y2 );
|
|
||||||
RAIO_StartDrawing( SQUARE_NONFILL );
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw_Circle( uint16_t X1, uint16_t Y1 ,uint8_t rad )
|
|
||||||
{
|
|
||||||
Set_Geometric_Coordinate_circle ( X1, Y1, rad );
|
|
||||||
RAIO_StartDrawing( CIRCLE_NONFILL );
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,401 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* 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
|
|
||||||
@ -1,201 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : bmp.c */
|
|
||||||
/* */
|
|
||||||
/* Project : TFT for Raspberry Pi Revision 2 */
|
|
||||||
/* */
|
|
||||||
/* Date : 2013-11-22 last update: 2013-11-22 */
|
|
||||||
/* */
|
|
||||||
/* 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 : */
|
|
||||||
/* */
|
|
||||||
/* The current software can display BMP files on the C-Berry. */
|
|
||||||
/* The BMP file must have a dimension of 320 x 240 pixel and */
|
|
||||||
/* a color depth of 24Bit. */
|
|
||||||
/* The picture(s) will be stored into a memory. The function */
|
|
||||||
/* returns back a pointer with the address of the memory. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/*##############################################################*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "bmp.h"
|
|
||||||
#include "RAIO8870.h"
|
|
||||||
#include <bcm2835.h>
|
|
||||||
|
|
||||||
|
|
||||||
// store BMP files in memory
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
int32_t Read_bmp2memory ( char const *file_name, uint16_t *picture_pointer )
|
|
||||||
{
|
|
||||||
FILE *my_file;
|
|
||||||
|
|
||||||
// bmp_header_t bmp_header;
|
|
||||||
uint8_t bmp_header_buffer[54];
|
|
||||||
uint8_t bmp_line_buffer[ DISPLAY_WIDTH * 3 ];
|
|
||||||
|
|
||||||
uint16_t bfType;
|
|
||||||
uint32_t bfOffBits;
|
|
||||||
|
|
||||||
uint32_t biSize;
|
|
||||||
|
|
||||||
int32_t biWidth;
|
|
||||||
int32_t biHeight;
|
|
||||||
uint16_t biBitCount;
|
|
||||||
|
|
||||||
uint32_t y,x;
|
|
||||||
|
|
||||||
uint8_t red, green, blue;
|
|
||||||
uint16_t color;
|
|
||||||
|
|
||||||
|
|
||||||
// check for file
|
|
||||||
//printf( "Opening input file... " );
|
|
||||||
if( ( my_file = fopen( file_name, "rb" ) ) == NULL )
|
|
||||||
{
|
|
||||||
printf( "ERROR: Could not open input file for reading.\n" );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
//printf( "OK\n" );
|
|
||||||
|
|
||||||
|
|
||||||
// read header
|
|
||||||
fread( &bmp_header_buffer, 1, 54, my_file );
|
|
||||||
|
|
||||||
|
|
||||||
// check for "BM"
|
|
||||||
//printf( "Checking magic number... " );
|
|
||||||
bfType = bmp_header_buffer[1];
|
|
||||||
bfType = (bfType << 8) | bmp_header_buffer[0];
|
|
||||||
if( bfType != 0x4D42)
|
|
||||||
{
|
|
||||||
printf( "ERROR: Not a bitmap file.\n" );
|
|
||||||
fclose( my_file );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
//printf( "OK\n" );
|
|
||||||
|
|
||||||
|
|
||||||
//printf( "Checking header size... " );
|
|
||||||
biSize = bmp_header_buffer[17];
|
|
||||||
biSize = (biSize << 8) | bmp_header_buffer[16];
|
|
||||||
biSize = (biSize << 8) | bmp_header_buffer[15];
|
|
||||||
biSize = (biSize << 8) | bmp_header_buffer[14];
|
|
||||||
//printf( "%d ", biSize);
|
|
||||||
if( biSize != 40 )
|
|
||||||
{
|
|
||||||
printf( "ERROR: Not Windows V3\n" );
|
|
||||||
fclose( my_file );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
//printf( "OK\n" );
|
|
||||||
|
|
||||||
|
|
||||||
//printf( "Checking dimensions... " );
|
|
||||||
biWidth = bmp_header_buffer[21];
|
|
||||||
biWidth = (biWidth << 8) | bmp_header_buffer[20];
|
|
||||||
biWidth = (biWidth << 8) | bmp_header_buffer[19];
|
|
||||||
biWidth = (biWidth << 8) | bmp_header_buffer[18];
|
|
||||||
|
|
||||||
biHeight = bmp_header_buffer[25];
|
|
||||||
biHeight = (biHeight << 8) | bmp_header_buffer[24];
|
|
||||||
biHeight = (biHeight << 8) | bmp_header_buffer[23];
|
|
||||||
biHeight = (biHeight << 8) | bmp_header_buffer[22];
|
|
||||||
|
|
||||||
biBitCount = bmp_header_buffer[29];
|
|
||||||
biBitCount = (biBitCount << 8) | bmp_header_buffer[28];
|
|
||||||
|
|
||||||
//printf( "%dx%dx%dbbp. ", biWidth, biHeight, biBitCount );
|
|
||||||
|
|
||||||
if( (biWidth != DISPLAY_WIDTH) || (biHeight != DISPLAY_HEIGHT) || (biBitCount != 24) )
|
|
||||||
{
|
|
||||||
printf( "ERROR. %dx%dx%d required.\n", DISPLAY_WIDTH, DISPLAY_HEIGHT, 24 );
|
|
||||||
fclose( my_file );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
//printf( "OK\n\n" );
|
|
||||||
|
|
||||||
|
|
||||||
bfOffBits = bmp_header_buffer[13];
|
|
||||||
bfOffBits = (bfOffBits << 8) | bmp_header_buffer[12];
|
|
||||||
bfOffBits = (bfOffBits << 8) | bmp_header_buffer[11];
|
|
||||||
bfOffBits = (bfOffBits << 8) | bmp_header_buffer[10];
|
|
||||||
|
|
||||||
//printf( "biOffBits = %d\n", bfOffBits );
|
|
||||||
|
|
||||||
|
|
||||||
fseek( my_file, bfOffBits, SEEK_SET );
|
|
||||||
//printf( "Filling picture buffer... \n" );
|
|
||||||
|
|
||||||
|
|
||||||
for (y=DISPLAY_HEIGHT; y>0; y--)
|
|
||||||
{
|
|
||||||
fread( &bmp_line_buffer[0], sizeof(bmp_line_buffer), 1, my_file );
|
|
||||||
for (x=DISPLAY_WIDTH; x>0; x--)
|
|
||||||
{
|
|
||||||
|
|
||||||
blue = bmp_line_buffer[(x-1)*3 +0];
|
|
||||||
green = bmp_line_buffer[(x-1)*3 +1];
|
|
||||||
red = bmp_line_buffer[(x-1)*3 +2];
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CM_65K
|
|
||||||
color = (red >> 3);
|
|
||||||
color = color << 6;
|
|
||||||
color = color | (green >> 2);
|
|
||||||
color = color << 5;
|
|
||||||
color = color | (blue >> 3);
|
|
||||||
#elif defined(CM_4K)
|
|
||||||
color = ( red >> 4 );
|
|
||||||
color = color << 4;
|
|
||||||
color = color | ( green >> 4);
|
|
||||||
color = color << 4;
|
|
||||||
color = color | (blue >> 4);
|
|
||||||
#else
|
|
||||||
#error "color_mode not defined"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*picture_pointer = color;
|
|
||||||
picture_pointer--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose( my_file );
|
|
||||||
|
|
||||||
return ( 0 );
|
|
||||||
}
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : bmp.h */
|
|
||||||
/* */
|
|
||||||
/* Project : TFT for Raspberry Pi Revision 2 */
|
|
||||||
/* */
|
|
||||||
/* Date : 2013-11-22 last update: 2013-11-22 */
|
|
||||||
/* */
|
|
||||||
/* 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 : */
|
|
||||||
/* */
|
|
||||||
/* The current software can display BMP files on the C-Berry. */
|
|
||||||
/* The BMP file must have a dimension of 320 x 240 pixel and */
|
|
||||||
/* a color depth of 24Bit. */
|
|
||||||
/* The picture(s) will be stored into a memory. The function */
|
|
||||||
/* returns back a pointer with the address of the memory. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 BMP_H
|
|
||||||
#define BMP_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// store BMP files in memory
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
int32_t Read_bmp2memory ( char const *file_name, uint16_t *picture_pointer );
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@ -1,429 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : examples.c */
|
|
||||||
/* */
|
|
||||||
/* Project : TFT for Raspberry Pi Revision 2 */
|
|
||||||
/* */
|
|
||||||
/* Date : 2014-08-14 last update: 2014-08-14 */
|
|
||||||
/* */
|
|
||||||
/* Author : Hagen Ploog */
|
|
||||||
/* Timo Pfander */
|
|
||||||
/* */
|
|
||||||
/* IDE : Geany 1.22 */
|
|
||||||
/* Compiler : gcc (Debian 4.6.3-14+rpi1) 4.6.3 */
|
|
||||||
/* */
|
|
||||||
/* Copyright (C) 2013 admatec GmbH */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* Description : */
|
|
||||||
/* Exmples.c includes the following functions to demonstrate */
|
|
||||||
/* some opportunities: */
|
|
||||||
/* - depict one BMP file on the TFT */
|
|
||||||
/* - depict basic drawings which were created with the */
|
|
||||||
/* RAIO graphic controller */
|
|
||||||
/* - write some text on the TFT */
|
|
||||||
/* - draw functions like sine, cosine, parabola, ... */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/*##############################################################*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include "RAIO8870.h"
|
|
||||||
#include "bmp.h"
|
|
||||||
#include "examples.h"
|
|
||||||
|
|
||||||
|
|
||||||
// load and depict a BMP file
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_DepictBMP( char const *file_name )
|
|
||||||
{
|
|
||||||
uint16_t picture[1][ PICTURE_PIXELS ];
|
|
||||||
|
|
||||||
RAIO_set_cursor( 0, 0 );
|
|
||||||
Read_bmp2memory ( file_name, &picture[0][ PICTURE_PIXELS-1 ] );
|
|
||||||
RAIO_Write_Picture ( &picture[0][0], PICTURE_PIXELS );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// draw with RAIO
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_DrawWithRAIO( void )
|
|
||||||
{
|
|
||||||
// clear display with black color
|
|
||||||
Text_Background_Color ( COLOR_BLACK );
|
|
||||||
RAIO_clear_screen();
|
|
||||||
|
|
||||||
// rectangle
|
|
||||||
Text_Foreground_Color ( COLOR_BLUE );
|
|
||||||
Draw_Square (210, 150, 260, 200);
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
|
|
||||||
// line
|
|
||||||
Text_Foreground_Color ( COLOR_GREEN );
|
|
||||||
Draw_Line ( 10, 230, 310, 10 );
|
|
||||||
RAIO_StartDrawing ( LINE );
|
|
||||||
|
|
||||||
// circle
|
|
||||||
Text_Foreground_Color ( COLOR_RED );
|
|
||||||
Draw_Circle ( 90, 65, 25 );
|
|
||||||
RAIO_StartDrawing ( CIRCLE_FILL );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// write text
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_WriteText( unsigned char *text )
|
|
||||||
{
|
|
||||||
// clear display with black color
|
|
||||||
Text_Background_Color ( COLOR_BLACK );
|
|
||||||
RAIO_clear_screen();
|
|
||||||
|
|
||||||
// write text in different size and colors
|
|
||||||
RAIO_SetFontSizeFactor ( 0 );
|
|
||||||
RAIO_print_text ( 10, 10, text, COLOR_BLACK , COLOR_WHITE );
|
|
||||||
|
|
||||||
RAIO_SetFontSizeFactor ( 5 );
|
|
||||||
RAIO_print_text( 30, 30, text, COLOR_BLACK, COLOR_RED );
|
|
||||||
|
|
||||||
RAIO_SetFontSizeFactor ( 10 );
|
|
||||||
RAIO_print_text ( 60, 70, text, COLOR_BLACK, COLOR_BLUE );
|
|
||||||
|
|
||||||
RAIO_SetFontSizeFactor ( 15 );
|
|
||||||
RAIO_print_text ( 80, 120, text, COLOR_BLACK, COLOR_GREEN );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// draw sinus
|
|
||||||
// ---------------------------------------------
|
|
||||||
|
|
||||||
// defines the x-intercept and y-intercept on the TFT
|
|
||||||
#define window_left -M_PI
|
|
||||||
#define window_right M_PI
|
|
||||||
#define window_up 2
|
|
||||||
#define window_down -2
|
|
||||||
|
|
||||||
|
|
||||||
// windows_up
|
|
||||||
//
|
|
||||||
// ↑
|
|
||||||
// _ _ _ _ _|_ _ _ _ _
|
|
||||||
// | | |
|
|
||||||
// | | |
|
|
||||||
// | | |
|
|
||||||
// windows_left --|---------|---------|--→ windows_right
|
|
||||||
// | | |
|
|
||||||
// | | |
|
|
||||||
// |_ _ _ _ _|_ _ _ _ _|
|
|
||||||
// |
|
|
||||||
//
|
|
||||||
// windows_down
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void example_DrawFunction( int16_t function )
|
|
||||||
{
|
|
||||||
float_t x_real, y_real;
|
|
||||||
int16_t count;
|
|
||||||
|
|
||||||
// clear display with black color
|
|
||||||
Text_Background_Color ( COLOR_BLACK );
|
|
||||||
RAIO_clear_screen();
|
|
||||||
|
|
||||||
// draw x-axis
|
|
||||||
draw_coords_line( window_left, 0, window_right, 0 );
|
|
||||||
for( count = (int16_t)window_left; count < (int16_t)window_right; count++ )
|
|
||||||
{
|
|
||||||
Draw_Line ( scale_x( count ), scale_y( window_up*0.01 ), scale_x( count ), scale_y( window_down*0.01 ) );
|
|
||||||
Text_Foreground_Color ( COLOR_WHITE );
|
|
||||||
RAIO_StartDrawing ( LINE );
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw y-axis
|
|
||||||
draw_coords_line( 0, window_up, 0, window_down );
|
|
||||||
for( count = (int16_t)window_down; count < (int16_t)window_up; count++ )
|
|
||||||
{
|
|
||||||
Draw_Line ( scale_x( window_left*0.01 ), scale_y( count ), scale_x( window_right*0.01 ), scale_y( count ) );
|
|
||||||
Text_Foreground_Color ( COLOR_WHITE );
|
|
||||||
RAIO_StartDrawing ( LINE );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// draw function
|
|
||||||
for( x_real = window_left; x_real < window_right; x_real=x_real+0.02 )
|
|
||||||
{
|
|
||||||
switch (function) // -> see FUNCTIONS
|
|
||||||
{
|
|
||||||
case SIN: y_real = sin( x_real ); break;
|
|
||||||
case COS: y_real = cos( x_real ); break;
|
|
||||||
case TAN: y_real = tan( x_real ); break;
|
|
||||||
case PARABOLA: y_real = x_real * x_real; break;
|
|
||||||
case EXPONENT: y_real = exp( x_real ); break;
|
|
||||||
case LOGN : y_real = log( x_real ); break;
|
|
||||||
default: break;
|
|
||||||
};
|
|
||||||
set_point( x_real, y_real);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// transform real world data in TFT data
|
|
||||||
// ---------------------------------------------
|
|
||||||
|
|
||||||
// transform x-value
|
|
||||||
uint16_t scale_x( float_t x )
|
|
||||||
{
|
|
||||||
return ( (uint16_t) (( x - window_left ) * ( DISPLAY_WIDTH / (window_right-window_left))) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// transform y-value
|
|
||||||
uint16_t scale_y( float_t y )
|
|
||||||
{
|
|
||||||
uint16_t temp_y;
|
|
||||||
|
|
||||||
temp_y = DISPLAY_HEIGHT - (uint16_t) (( y - window_down) * (DISPLAY_HEIGHT / (window_up-window_down)));
|
|
||||||
if( temp_y > 239 ) { temp_y--; }
|
|
||||||
|
|
||||||
return ( temp_y );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// draw coordinate system and function points
|
|
||||||
// ---------------------------------------------
|
|
||||||
|
|
||||||
// draw coordinate system
|
|
||||||
void draw_coords_line (float_t x1, float_t y1, float_t x2, float_t y2)
|
|
||||||
{
|
|
||||||
Text_Foreground_Color( COLOR_WHITE );
|
|
||||||
Draw_Line( scale_x( x1 ), scale_y( y1 ), scale_x( x2 ), scale_y( y2 ) );
|
|
||||||
RAIO_StartDrawing( LINE );
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw function point
|
|
||||||
void set_point ( float_t x_real, float_t y_real )
|
|
||||||
{
|
|
||||||
if ((x_real> window_left) & (x_real < window_right) & (y_real > window_down) & (y_real <window_up))
|
|
||||||
{
|
|
||||||
Text_Foreground_Color( COLOR_WHITE );
|
|
||||||
Draw_Line( scale_x( x_real ), scale_y( y_real ), scale_x( x_real ), scale_y( y_real ) );
|
|
||||||
RAIO_StartDrawing( LINE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// touch the soft buttons on TFT
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_Touch ()
|
|
||||||
{
|
|
||||||
int i=0, rt;
|
|
||||||
uint8_t btn_old_state = up;
|
|
||||||
|
|
||||||
RAIO_clear_screen();
|
|
||||||
|
|
||||||
RAIO_SetFontSizeFactor ( 0 );
|
|
||||||
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
// get new touch value
|
|
||||||
rt = RAIO_gettouch();
|
|
||||||
|
|
||||||
/*
|
|
||||||
// show touch values and state in console
|
|
||||||
printf( "\n.... x=%d", my_touch.touch_x );
|
|
||||||
printf( "\n.... y=%d", my_touch.touch_y );
|
|
||||||
printf( "\n state = %d", my_touch.state );
|
|
||||||
*/
|
|
||||||
|
|
||||||
// check for exit button
|
|
||||||
if ( (my_touch.state == pressed) && (my_touch.touch_x > 90) && (my_touch.touch_x < 115) && (my_touch.touch_y > 86) && (my_touch.touch_y < 106) )
|
|
||||||
{
|
|
||||||
// draw exit button
|
|
||||||
Text_Foreground_Color ( COLOR_YELLOW );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)-25, (DISPLAY_HEIGHT/2)-15, (DISPLAY_WIDTH/2)+25, (DISPLAY_HEIGHT/2)+15 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/2)-16, (DISPLAY_HEIGHT/2)-9, "EXIT", COLOR_YELLOW, COLOR_BLACK );
|
|
||||||
|
|
||||||
// wait for leaving the touch panel
|
|
||||||
while((my_touch.state == pressed))
|
|
||||||
{
|
|
||||||
bcm2835_delayMicroseconds( 5000 );
|
|
||||||
rt = RAIO_gettouch();
|
|
||||||
}
|
|
||||||
|
|
||||||
// exit while loop
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if ( ((my_touch.state == pressed) || (my_touch.state == down) || (my_touch.state == up)) && (btn_old_state != my_touch.state) )
|
|
||||||
{
|
|
||||||
// safe old touch state
|
|
||||||
btn_old_state = my_touch.state;
|
|
||||||
|
|
||||||
if( my_touch.touch_x > 25 && my_touch.touch_x < 102 )
|
|
||||||
{
|
|
||||||
// button 1 is active
|
|
||||||
if( my_touch.touch_y > 21 && my_touch.touch_y < 96 )
|
|
||||||
{
|
|
||||||
Text_Foreground_Color ( COLOR_GREEN );
|
|
||||||
Draw_Square( 6, 6, (DISPLAY_WIDTH/2)-3, (DISPLAY_HEIGHT/2)-3 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)-45, (DISPLAY_HEIGHT/4)-20, "Button 1 is", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case down : RAIO_print_text( (DISPLAY_WIDTH/4)-16, (DISPLAY_HEIGHT/4), "down", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case up : RAIO_print_text( (DISPLAY_WIDTH/4)-9, (DISPLAY_HEIGHT/4), "up", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case pressed: RAIO_print_text( (DISPLAY_WIDTH/4)-30, (DISPLAY_HEIGHT/4), "pressed", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// button 3 is active
|
|
||||||
if( my_touch.touch_y > 101 && my_touch.touch_y < 178 )
|
|
||||||
{
|
|
||||||
Text_Foreground_Color ( COLOR_GREEN );
|
|
||||||
Draw_Square( 6, (DISPLAY_HEIGHT/2)+4, (DISPLAY_WIDTH/2)-3, DISPLAY_HEIGHT-6 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)-45, (DISPLAY_HEIGHT/4)*3-20, "Button 3 is", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case down : RAIO_print_text( (DISPLAY_WIDTH/4)-16, (DISPLAY_HEIGHT/4)*3, "down", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case up : RAIO_print_text( (DISPLAY_WIDTH/4)-9, (DISPLAY_HEIGHT/4)*3, "up", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case pressed: RAIO_print_text( (DISPLAY_WIDTH/4)-30, (DISPLAY_HEIGHT/4)*3, "pressed", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if( my_touch.touch_x > 107 && my_touch.touch_x < 182 )
|
|
||||||
{
|
|
||||||
// button 2 is active
|
|
||||||
if( my_touch.touch_y > 21 && my_touch.touch_y < 96 )
|
|
||||||
{
|
|
||||||
Text_Foreground_Color ( COLOR_GREEN );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)+4, 6, DISPLAY_WIDTH-6, (DISPLAY_HEIGHT/2)-3 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)*3-45, (DISPLAY_HEIGHT/4)-20, "Button 2 is", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case down : RAIO_print_text( (DISPLAY_WIDTH/4)*3-16, (DISPLAY_HEIGHT/4), "down", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case up : RAIO_print_text( (DISPLAY_WIDTH/4)*3-9, (DISPLAY_HEIGHT/4), "up", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case pressed: RAIO_print_text( (DISPLAY_WIDTH/4)*3-30, (DISPLAY_HEIGHT/4), "pressed", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// button 4 is active
|
|
||||||
if( my_touch.touch_y > 101 && my_touch.touch_y < 178 )
|
|
||||||
{
|
|
||||||
Text_Foreground_Color ( COLOR_GREEN );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)+4, (DISPLAY_HEIGHT/2)+4, DISPLAY_WIDTH-6, DISPLAY_HEIGHT-6 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)*3-45, (DISPLAY_HEIGHT/4)*3-20, "Button 4 is", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case down : RAIO_print_text( (DISPLAY_WIDTH/4)*3-16, (DISPLAY_HEIGHT/4)*3, "down", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case up : RAIO_print_text( (DISPLAY_WIDTH/4)*3-9, (DISPLAY_HEIGHT/4)*3, "up", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
case pressed: RAIO_print_text( (DISPLAY_WIDTH/4)*3-30, (DISPLAY_HEIGHT/4)*3, "pressed", COLOR_GREEN, COLOR_BLACK );
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( (btn_old_state != my_touch.state) )
|
|
||||||
{
|
|
||||||
// safe old touch state
|
|
||||||
btn_old_state = my_touch.state;
|
|
||||||
|
|
||||||
switch (my_touch.state)
|
|
||||||
{
|
|
||||||
case no_touch : btn_set_all_open();
|
|
||||||
break;
|
|
||||||
default : break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// time of minimum 15000µs is required
|
|
||||||
bcm2835_delayMicroseconds( 100000 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set all soft-buttons to open
|
|
||||||
// ---------------------------------------------
|
|
||||||
void btn_set_all_open()
|
|
||||||
{
|
|
||||||
// draw button dimensions
|
|
||||||
Text_Foreground_Color( COLOR_BLACK );
|
|
||||||
Draw_Square( 5, 5, (DISPLAY_WIDTH/2)-2, (DISPLAY_HEIGHT/2)-2 );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)+3, 5, DISPLAY_WIDTH-5, (DISPLAY_HEIGHT/2)-2 );
|
|
||||||
Draw_Square( 5, (DISPLAY_HEIGHT/2)+3, (DISPLAY_WIDTH/2)-2, DISPLAY_HEIGHT-5 );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)+3, (DISPLAY_HEIGHT/2)+3, DISPLAY_WIDTH-5, DISPLAY_HEIGHT-5 );
|
|
||||||
|
|
||||||
// set text and color for each open buttons
|
|
||||||
Text_Foreground_Color ( COLOR_RED );
|
|
||||||
Draw_Square( 6, 6, (DISPLAY_WIDTH/2)-3, (DISPLAY_HEIGHT/2)-3 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)-45, (DISPLAY_HEIGHT/4)-20, "Button 1 is", COLOR_RED, COLOR_BLACK );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)-16, (DISPLAY_HEIGHT/4) , "open", COLOR_RED, COLOR_BLACK );
|
|
||||||
|
|
||||||
Text_Foreground_Color ( COLOR_RED );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)+4, 6, DISPLAY_WIDTH-6, (DISPLAY_HEIGHT/2)-3 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)*3-45, (DISPLAY_HEIGHT/4)-20, "Button 2 is", COLOR_RED, COLOR_BLACK );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)*3-16, (DISPLAY_HEIGHT/4) , "open", COLOR_RED, COLOR_BLACK );
|
|
||||||
|
|
||||||
Text_Foreground_Color ( COLOR_RED );
|
|
||||||
Draw_Square( 6, (DISPLAY_HEIGHT/2)+4, (DISPLAY_WIDTH/2)-3, DISPLAY_HEIGHT-6 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)-45, (DISPLAY_HEIGHT/4)*3-20, "Button 3 is", COLOR_RED, COLOR_BLACK );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)-16, (DISPLAY_HEIGHT/4)*3 , "open", COLOR_RED, COLOR_BLACK );
|
|
||||||
|
|
||||||
Text_Foreground_Color ( COLOR_RED );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)+4, (DISPLAY_HEIGHT/2)+4, DISPLAY_WIDTH-6, DISPLAY_HEIGHT-6 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)*3-45, (DISPLAY_HEIGHT/4)*3-20, "Button 4 is", COLOR_RED, COLOR_BLACK );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/4)*3-16, (DISPLAY_HEIGHT/4)*3 , "open", COLOR_RED, COLOR_BLACK );
|
|
||||||
|
|
||||||
// draw exit button
|
|
||||||
Text_Foreground_Color ( COLOR_BLUE );
|
|
||||||
Draw_Square( (DISPLAY_WIDTH/2)-25, (DISPLAY_HEIGHT/2)-15, (DISPLAY_WIDTH/2)+25, (DISPLAY_HEIGHT/2)+15 );
|
|
||||||
RAIO_StartDrawing ( SQUARE_FILL );
|
|
||||||
RAIO_print_text( (DISPLAY_WIDTH/2)-16, (DISPLAY_HEIGHT/2)-9, "EXIT", COLOR_BLUE, COLOR_WHITE );
|
|
||||||
}
|
|
||||||
@ -1,111 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : examples.h */
|
|
||||||
/* */
|
|
||||||
/* Project : TFT for Raspberry Pi Revision 2 */
|
|
||||||
/* */
|
|
||||||
/* Date : 2014-08-14 last update: 2014-08-14 */
|
|
||||||
/* */
|
|
||||||
/* Author : Hagen Ploog */
|
|
||||||
/* 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 declared functions for the different examples in */
|
|
||||||
/* example.c */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 EXAMPLES_H
|
|
||||||
#define EXAMPLES_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
|
|
||||||
// load and depict a BMP file
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_DepictBMP( char const *file_name );
|
|
||||||
|
|
||||||
|
|
||||||
// draw with RAIO
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_DrawWithRAIO( void );
|
|
||||||
|
|
||||||
|
|
||||||
// delete screen and write text
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_WriteText( unsigned char *text );
|
|
||||||
|
|
||||||
|
|
||||||
// draw function // -> see FUNCTIONS
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_DrawFunction( int16_t function );
|
|
||||||
|
|
||||||
// enumeration of drawing modes
|
|
||||||
enum FUNCTIONS { SIN, COS, TAN, PARABOLA, EXPONENT, LOGN };
|
|
||||||
|
|
||||||
|
|
||||||
// transform real world data in TFT data
|
|
||||||
// ---------------------------------------------
|
|
||||||
uint16_t scale_x( float_t x );
|
|
||||||
|
|
||||||
uint16_t scale_y( float_t y );
|
|
||||||
|
|
||||||
|
|
||||||
// draw coordinate system and function points
|
|
||||||
// ---------------------------------------------
|
|
||||||
void draw_coords_line( float_t x1, float_t y1, float_t x2, float_t y2 );
|
|
||||||
|
|
||||||
void set_point( float_t x_real, float_t y_real );
|
|
||||||
|
|
||||||
|
|
||||||
// touch the soft-buttons on TFT
|
|
||||||
// ---------------------------------------------
|
|
||||||
void example_Touch ();
|
|
||||||
|
|
||||||
|
|
||||||
// set all soft-buttons to open
|
|
||||||
// ---------------------------------------------
|
|
||||||
void btn_set_all_open();
|
|
||||||
|
|
||||||
|
|
||||||
// draw exit button
|
|
||||||
// ---------------------------------------------
|
|
||||||
void btn_draw_exit();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
all: tft_test
|
|
||||||
|
|
||||||
tft_test: tft_test.o tft.o RAIO8870.o bmp.o examples.o
|
|
||||||
gcc tft_test.o tft.o RAIO8870.o bmp.o examples.o -lbcm2835 -lrt -lm -o tft_test
|
|
||||||
|
|
||||||
tft.o: tft.c tft.h
|
|
||||||
gcc -Os -c tft.c
|
|
||||||
|
|
||||||
tft_test.o: tft_test.c
|
|
||||||
gcc -Os -c tft_test.c
|
|
||||||
|
|
||||||
RAIO8870.o: RAIO8870.c RAIO8870.h
|
|
||||||
gcc -Os -c RAIO8870.c
|
|
||||||
|
|
||||||
bmp.o: bmp.c bmp.h
|
|
||||||
gcc -Os -c bmp.c
|
|
||||||
|
|
||||||
examples.o: examples.c examples.h bmp.h
|
|
||||||
gcc -Os -c examples.c
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *o test_tft
|
|
||||||
|
|
||||||
@ -1,297 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : tft.c */
|
|
||||||
/* */
|
|
||||||
/* 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 controlls the communications between the */
|
|
||||||
/* Raspberry Pi and the TFT. The file initialized also the */
|
|
||||||
/* GPIO Pins of the Raspberry Pi. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/*##############################################################*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <bcm2835.h>
|
|
||||||
#include "RAIO8870.h"
|
|
||||||
#include "tft.h"
|
|
||||||
|
|
||||||
|
|
||||||
// initialization of GPIO and SPI
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_init_board ( void )
|
|
||||||
{
|
|
||||||
// *************** set the pins to be an output and turn them on
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( OE, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
bcm2835_gpio_write( OE, HIGH );
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_RST, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
bcm2835_gpio_write( RAIO_RST, HIGH );
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_CS, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, HIGH );
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_RS, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
bcm2835_gpio_write( RAIO_RS, HIGH );
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_WR, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
bcm2835_gpio_write( RAIO_WR, HIGH );
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_RD, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
bcm2835_gpio_write( RAIO_RD, HIGH );
|
|
||||||
|
|
||||||
|
|
||||||
// *************** now the inputs
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_WAIT, BCM2835_GPIO_FSEL_INPT );
|
|
||||||
bcm2835_gpio_set_pud( RAIO_WAIT, BCM2835_GPIO_PUD_UP);
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( RAIO_INT, BCM2835_GPIO_FSEL_INPT );
|
|
||||||
bcm2835_gpio_set_pud( RAIO_INT, BCM2835_GPIO_PUD_UP);
|
|
||||||
|
|
||||||
bcm2835_gpio_fsel( MISO, BCM2835_GPIO_FSEL_INPT );
|
|
||||||
bcm2835_gpio_set_pud( MISO, BCM2835_GPIO_PUD_UP);
|
|
||||||
|
|
||||||
// *************** set pins for SPI
|
|
||||||
|
|
||||||
//bcm2835_gpio_fsel(MISO, BCM2835_GPIO_FSEL_ALT0);
|
|
||||||
bcm2835_gpio_fsel(MOSI, BCM2835_GPIO_FSEL_ALT0);
|
|
||||||
bcm2835_gpio_fsel(SCLK, BCM2835_GPIO_FSEL_ALT0);
|
|
||||||
bcm2835_gpio_fsel(SPI_CE1, BCM2835_GPIO_FSEL_ALT0);
|
|
||||||
|
|
||||||
// set the SPI CS register to the some sensible defaults
|
|
||||||
volatile uint32_t* paddr = bcm2835_spi0 + BCM2835_SPI0_CS/8;
|
|
||||||
bcm2835_peri_write( paddr, 0 ); // All 0s
|
|
||||||
|
|
||||||
// clear TX and RX fifos
|
|
||||||
bcm2835_peri_write_nb( paddr, BCM2835_SPI0_CS_CLEAR );
|
|
||||||
|
|
||||||
bcm2835_spi_setBitOrder( BCM2835_SPI_BIT_ORDER_MSBFIRST );
|
|
||||||
bcm2835_spi_setDataMode( BCM2835_SPI_MODE0 );
|
|
||||||
bcm2835_spi_setClockDivider( BCM2835_SPI_CLOCK_DIVIDER_2 );
|
|
||||||
bcm2835_spi_chipSelect( BCM2835_SPI_CS1 );
|
|
||||||
bcm2835_spi_setChipSelectPolarity( BCM2835_SPI_CS1, LOW );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// hard reset of the graphic controller and the tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_hard_reset( void )
|
|
||||||
{
|
|
||||||
bcm2835_gpio_write( RAIO_RST, LOW );
|
|
||||||
bcm2835_delay( 10 );
|
|
||||||
bcm2835_gpio_write( RAIO_RST, HIGH );
|
|
||||||
bcm2835_delay( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// wait during raio is busy
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_wait_for_raio ( void )
|
|
||||||
{
|
|
||||||
while ( !bcm2835_gpio_lev( RAIO_WAIT ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// write data via SPI to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_SPI_data_out ( uint16_t data )
|
|
||||||
{
|
|
||||||
union my_union number;
|
|
||||||
char buffer[2];
|
|
||||||
|
|
||||||
number.value = data;
|
|
||||||
buffer[0] = (char) number.split.high;
|
|
||||||
buffer[1] = (char) number.split.low;
|
|
||||||
|
|
||||||
bcm2835_spi_writenb( &buffer[0], 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t TFT_shift_data_in()
|
|
||||||
{
|
|
||||||
uint32_t i, data=0; //, data1, data2;
|
|
||||||
|
|
||||||
// Das Umschalten ist der 1te Puls ... ups
|
|
||||||
bcm2835_gpio_fsel( SCLK, BCM2835_GPIO_FSEL_OUTP );
|
|
||||||
|
|
||||||
for ( i=15; i>0; i-- )
|
|
||||||
{
|
|
||||||
data <<= 1;
|
|
||||||
data |= ( bcm2835_gpio_lev( MISO ) ? 0x00000001 : 0x00000000 );
|
|
||||||
//bcm2835_delayMicroseconds( 1 );
|
|
||||||
bcm2835_gpio_write( SCLK, LOW );
|
|
||||||
//bcm2835_delayMicroseconds( 1 );
|
|
||||||
bcm2835_gpio_write( SCLK, HIGH );
|
|
||||||
}
|
|
||||||
|
|
||||||
//data = bcm2835_spi_transfer( 0 );
|
|
||||||
bcm2835_gpio_fsel(SCLK, BCM2835_GPIO_FSEL_ALT0);
|
|
||||||
|
|
||||||
return ( data );
|
|
||||||
}
|
|
||||||
|
|
||||||
// write byte to register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_RegWrite( uint16_t reg )
|
|
||||||
{
|
|
||||||
bcm2835_gpio_write( RAIO_RS, HIGH );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_WR, LOW );
|
|
||||||
bcm2835_gpio_write( OE, LOW );
|
|
||||||
|
|
||||||
TFT_SPI_data_out ( reg );
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_WR, HIGH );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, HIGH );
|
|
||||||
bcm2835_gpio_write( OE, HIGH );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// write byte to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_DataWrite( uint16_t data )
|
|
||||||
{
|
|
||||||
bcm2835_gpio_write( RAIO_RS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_WR, LOW );
|
|
||||||
bcm2835_gpio_write( OE, LOW );
|
|
||||||
|
|
||||||
TFT_SPI_data_out ( data );
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_WR, HIGH );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, HIGH );
|
|
||||||
bcm2835_gpio_write( OE, HIGH );
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// read byte from register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
uint16_t TFT_DataRead( )
|
|
||||||
{
|
|
||||||
uint16_t data;
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_RS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_RD, LOW );
|
|
||||||
|
|
||||||
bcm2835_delayMicroseconds( 1 );
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_RD, HIGH );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, HIGH );
|
|
||||||
|
|
||||||
data = TFT_shift_data_in();
|
|
||||||
|
|
||||||
return ( data );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// read byte from register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
uint16_t TFT_StatusRead( )
|
|
||||||
{
|
|
||||||
uint16_t data;
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_RS, HIGH );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_RD, LOW );
|
|
||||||
|
|
||||||
bcm2835_delayMicroseconds( 1 );
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_RD, HIGH );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, HIGH );
|
|
||||||
|
|
||||||
data = TFT_shift_data_in();
|
|
||||||
|
|
||||||
return ( data );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// write 'count'-bytes to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_DataMultiWrite( uint16_t *data, uint32_t count )
|
|
||||||
{
|
|
||||||
volatile uint32_t* paddr = bcm2835_spi0 + BCM2835_SPI0_CS/4;
|
|
||||||
volatile uint32_t* fifo = bcm2835_spi0 + BCM2835_SPI0_FIFO/4;
|
|
||||||
|
|
||||||
volatile uint32_t* gpio_set = bcm2835_gpio + BCM2835_GPSET0/4;
|
|
||||||
volatile uint32_t* gpio_clear = bcm2835_gpio + BCM2835_GPCLR0/4;
|
|
||||||
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_RS, LOW );
|
|
||||||
bcm2835_gpio_write( RAIO_CS, LOW );
|
|
||||||
bcm2835_gpio_write( OE, LOW );
|
|
||||||
|
|
||||||
for( i=0; i<count; i++ )
|
|
||||||
{
|
|
||||||
// WR = 0
|
|
||||||
*gpio_clear = ( 1 << RAIO_WRpin );
|
|
||||||
|
|
||||||
// activate SPI transfer
|
|
||||||
*paddr |= BCM2835_SPI0_CS_TA;
|
|
||||||
|
|
||||||
// fill the FIFO
|
|
||||||
*fifo = (uint8_t)(data[i] >> 8);
|
|
||||||
*fifo = (uint8_t)(data[i] & 0xFF);
|
|
||||||
|
|
||||||
// write fifo data to SPI TX buffer
|
|
||||||
while (!(*paddr & BCM2835_SPI0_CS_DONE))
|
|
||||||
{
|
|
||||||
// clear SPI RX buffer
|
|
||||||
*paddr |=BCM2835_SPI0_CS_CLEAR_RX;
|
|
||||||
};
|
|
||||||
|
|
||||||
// deactivate SPI transfer
|
|
||||||
*paddr &= ~BCM2835_SPI0_CS_TA;
|
|
||||||
|
|
||||||
// WR = 1
|
|
||||||
*gpio_set = ( 1 << RAIO_WRpin );
|
|
||||||
}
|
|
||||||
|
|
||||||
bcm2835_gpio_write( RAIO_CS, HIGH );
|
|
||||||
bcm2835_gpio_write( OE, HIGH );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,120 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : tft.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 declared functions for the SPI communications */
|
|
||||||
/* between the Raspberry Pi and the TFT and for the */
|
|
||||||
/* initialization of the GPIO Pins of the Raspberry Pi. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 TFT_H
|
|
||||||
#define TFT_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
//#include "RAIO8870.h"
|
|
||||||
|
|
||||||
|
|
||||||
// define pins on connector P1
|
|
||||||
#define MOSI RPI_V2_GPIO_P1_19
|
|
||||||
#define MISO RPI_V2_GPIO_P1_21
|
|
||||||
#define SCLK RPI_V2_GPIO_P1_23
|
|
||||||
#define OE RPI_V2_GPIO_P1_11
|
|
||||||
#define SPI_CE1 RPI_V2_GPIO_P1_26
|
|
||||||
#define RAIO_RS RPI_V2_GPIO_P1_12
|
|
||||||
#define RAIO_RST RPI_V2_GPIO_P1_22
|
|
||||||
#define RAIO_CS RPI_V2_GPIO_P1_24
|
|
||||||
#define RAIO_WR RPI_V2_GPIO_P1_18
|
|
||||||
#define RAIO_RD RPI_V2_GPIO_P1_16
|
|
||||||
#define RAIO_WAIT RPI_V2_GPIO_P1_15
|
|
||||||
#define RAIO_INT RPI_V2_GPIO_P1_13
|
|
||||||
|
|
||||||
#define RAIO_WRpin 24
|
|
||||||
|
|
||||||
|
|
||||||
// declaration of a union (see RAIO8870.h)
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
extern union my_union number;
|
|
||||||
|
|
||||||
|
|
||||||
// initialization of GPIO and SPI
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_init_board( void );
|
|
||||||
|
|
||||||
|
|
||||||
// hard reset of the graphic controller and the tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_hard_reset( void );
|
|
||||||
|
|
||||||
|
|
||||||
// wait during raio is busy
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_wait_for_raio ( void );
|
|
||||||
|
|
||||||
|
|
||||||
// write byte to register
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_RegWrite( uint16_t reg );
|
|
||||||
|
|
||||||
|
|
||||||
// write byte to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_DataWrite( uint16_t data );
|
|
||||||
|
|
||||||
|
|
||||||
// read byte from tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
uint16_t TFT_DataRead( );
|
|
||||||
|
|
||||||
|
|
||||||
// read RAIO status
|
|
||||||
uint16_t TFT_StatusRead();
|
|
||||||
|
|
||||||
|
|
||||||
// write 'count'-bytes to tft
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
void TFT_DataMultiWrite( uint16_t *data, uint32_t count );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@ -1,132 +0,0 @@
|
|||||||
/*##############################################################*/
|
|
||||||
/* */
|
|
||||||
/* File : tft_test.c */
|
|
||||||
/* */
|
|
||||||
/* 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 main loop. The main loop uses the */
|
|
||||||
/* functions from examples.h to demonstrate different kind */
|
|
||||||
/* of opportunities. */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* 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 */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/* */
|
|
||||||
/*##############################################################*/
|
|
||||||
|
|
||||||
#include <bcm2835.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include "tft.h"
|
|
||||||
//#include "RAIO8870.h"
|
|
||||||
#include "bmp.h"
|
|
||||||
#include "examples.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
|
||||||
{
|
|
||||||
char my_filename[] = "../bmp/admatec.bmp";
|
|
||||||
|
|
||||||
if (!bcm2835_init())
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
|
|
||||||
TFT_init_board();
|
|
||||||
TFT_hard_reset();
|
|
||||||
|
|
||||||
RAIO_init();
|
|
||||||
RAIO_SetBacklightPWMValue( 255 );
|
|
||||||
|
|
||||||
|
|
||||||
// draw with RAIO
|
|
||||||
// ---------------------------------------------
|
|
||||||
example_DrawWithRAIO();
|
|
||||||
|
|
||||||
delay(5000);
|
|
||||||
|
|
||||||
|
|
||||||
// delete screen and write text
|
|
||||||
// ---------------------------------------------
|
|
||||||
example_WriteText( "C-Berry" );
|
|
||||||
|
|
||||||
delay(5000);
|
|
||||||
|
|
||||||
|
|
||||||
// draw sinus
|
|
||||||
// ---------------------------------------------
|
|
||||||
example_DrawFunction( SIN );
|
|
||||||
|
|
||||||
delay(5000);
|
|
||||||
|
|
||||||
|
|
||||||
// test soft buttons
|
|
||||||
// ---------------------------------------------
|
|
||||||
example_Touch();
|
|
||||||
|
|
||||||
|
|
||||||
// depict a BMP file
|
|
||||||
// -------- -------------------------------------
|
|
||||||
example_DepictBMP( &my_filename[0] );
|
|
||||||
|
|
||||||
delay(5000);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bcm2835_close();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
BIN
doc/RA8870.pdf
BIN
doc/RA8870.pdf
Binary file not shown.
Loading…
Reference in New Issue
Block a user