/***************************************************************************
 *   Copyright (C) 19.10.2004 by                                           *
 *   Matthias Kranz (matthias.kranz@ifi.lmu.de)                            *
 *   Paul Holleis (paul.holleis@ifi.lmu.de)                                *
 *                                                                         *
 *   header file for barton 96040 i2c display.                             *
 *   Last modified: 12.11.2004                                             *
 *                                                                         *
 *   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 2 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, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 **************************************************************************/
/******************************************************************************
 * defines
 *****************************************************************************/
/// One character has a width of 6 (six) pixels.
#define BT_CHARACTER_PIXEL_WIDTH 6

/// This enumeration lists all starting positions for characters using the standard pixel with (<em>BT_CHARACTER_PIXEL_WIDTH</em>).
enum CHARACTER_COLUMNS 
{
	BT_CHAR_1 =  (BT_CHARACTER_PIXEL_WIDTH *  0),
	BT_CHAR_2 =  (BT_CHARACTER_PIXEL_WIDTH *  1),
	BT_CHAR_3 =  (BT_CHARACTER_PIXEL_WIDTH *  2),
	BT_CHAR_4 =  (BT_CHARACTER_PIXEL_WIDTH *  3),
	BT_CHAR_5 =  (BT_CHARACTER_PIXEL_WIDTH *  4),
	BT_CHAR_6 =  (BT_CHARACTER_PIXEL_WIDTH *  5),
	BT_CHAR_7 =  (BT_CHARACTER_PIXEL_WIDTH *  6),
	BT_CHAR_8 =  (BT_CHARACTER_PIXEL_WIDTH *  7),
	BT_CHAR_9 =  (BT_CHARACTER_PIXEL_WIDTH *  8),
	BT_CHAR_10 = (BT_CHARACTER_PIXEL_WIDTH *  9),
	BT_CHAR_11 = (BT_CHARACTER_PIXEL_WIDTH * 10),
	BT_CHAR_12 = (BT_CHARACTER_PIXEL_WIDTH * 11),
	BT_CHAR_13 = (BT_CHARACTER_PIXEL_WIDTH * 12),
	BT_CHAR_14 = (BT_CHARACTER_PIXEL_WIDTH * 13),
	BT_CHAR_15 = (BT_CHARACTER_PIXEL_WIDTH * 14),
	BT_CHAR_16 = (BT_CHARACTER_PIXEL_WIDTH * 15),
	BT_CHAR_FIRST = BT_CHAR_1,
	BT_CHAR_LAST  = BT_CHAR_16
};
/// This enumeration lists all rows of the display using the standard pixel width (<em>BT_CHARACTER_PIXEL_WIDTH</em>).
enum CHARACHTER_ROWS 
{
	BT_ROW_1  = 0,
	BT_ROW_2  = 1,
	BT_ROW_3  = 2,
	BT_ROW_4  = 3,
	BT_ROW_5  = 4,
	BT_ROW_LAST = 4,
	BT_ROW_FIRST = 0
};
/******************************************************************************
 * global variables
 *****************************************************************************/
/** 
 * ASCII table for the barton 96040 display, 96 rows * 5 bytes= 480 bytes, 
 * the fist half is in this table, the other half in the other table.
 */
BYTE const table1[240]={0x00,0x00,0x00,0x00,0x00,	// 20 space	 		
						0x00,0x00,0x5f,0x00,0x00,	// 21 !
						0x00,0x07,0x00,0x07,0x00,	// 22 "
						0x14,0x7f,0x14,0x7f,0x14,	// 23 #
						0x24,0x2a,0x7f,0x2a,0x12,	// 24 $
						0x23,0x13,0x08,0x64,0x62,	// 25 %
						0x36,0x49,0x55,0x22,0x50,	// 26 &
						0x00,0x05,0x03,0x00,0x00,	// 27 '
						0x00,0x1c,0x22,0x41,0x00,	// 28 (
						0x00,0x41,0x22,0x1c,0x00,	// 29 )
						0x14,0x08,0x3e,0x08,0x14,	// 2a *
						0x08,0x08,0x3e,0x08,0x08,	// 2b +
						0x00,0x50,0x30,0x00,0x00,	// 2c ,
						0x08,0x08,0x08,0x08,0x08,	// 2d -
						0x00,0x60,0x60,0x00,0x00,	// 2e .
						0x20,0x10,0x08,0x04,0x02,	// 2f /
						0x3e,0x51,0x49,0x45,0x3e,	// 30 0
						0x00,0x42,0x7f,0x40,0x00,	// 31 1
						0x42,0x61,0x51,0x49,0x46,	// 32 2
						0x21,0x41,0x45,0x4b,0x31,	// 33 3
						0x18,0x14,0x12,0x7f,0x10,	// 34 4
						0x27,0x45,0x45,0x45,0x39,	// 35 5
						0x3c,0x4a,0x49,0x49,0x30,	// 36 6
						0x01,0x71,0x09,0x05,0x03,	// 37 7
						0x36,0x49,0x49,0x49,0x36,	// 38 8
						0x06,0x49,0x49,0x29,0x1e,	// 39 9
						0x00,0x36,0x36,0x00,0x00,	// 3a :
						0x00,0x56,0x36,0x00,0x00,	// 3b ;
						0x08,0x14,0x22,0x41,0x00,	// 3c <
						0x14,0x14,0x14,0x14,0x14,	// 3d =
						0x00,0x41,0x22,0x14,0x08,	// 3e >
						0x02,0x01,0x51,0x09,0x06,	// 3f ?
						0x32,0x49,0x79,0x41,0x3e,	// 40 @
						0x7e,0x11,0x11,0x11,0x7e,	// 41 A
						0x7f,0x49,0x49,0x49,0x36,	// 42 B
						0x3e,0x41,0x41,0x41,0x22,	// 43 C
						0x7f,0x41,0x41,0x22,0x1c,	// 44 D
						0x7f,0x49,0x49,0x49,0x41,	// 45 E
						0x7f,0x09,0x09,0x09,0x01,	// 46 F
						0x3e,0x41,0x49,0x49,0x7a,	// 47 G
						0x7f,0x08,0x08,0x08,0x7f,	// 48 H
						0x00,0x41,0x7f,0x41,0x00,	// 49 I
						0x20,0x40,0x41,0x3f,0x01,	// 4a J
						0x7f,0x08,0x14,0x22,0x41,	// 4b K
						0x7f,0x40,0x40,0x40,0x40,	// 4c L
						0x7f,0x02,0x0c,0x02,0x7f,	// 4d M
						0x7f,0x04,0x08,0x10,0x7f,	// 4e N
						0x3e,0x41,0x41,0x41,0x3e};	// 4f O

/** 
 * ASCII table for the barton 96040 display, 96 rows * 5 bytes= 480 bytes, 
 * the fist half is in the other table, the second half in this table.
 */
BYTE const table2[240]={0x7f,0x09,0x09,0x09,0x06,	// 50 P
						0x3e,0x41,0x51,0x21,0x5e,	// 51 Q
						0x7f,0x09,0x19,0x29,0x46,	// 52 R
						0x46,0x49,0x49,0x49,0x31,	// 53 S
						0x01,0x01,0x7f,0x01,0x01,	// 54 T
						0x3f,0x40,0x40,0x40,0x3f,	// 55 U
						0x1f,0x20,0x40,0x20,0x1f,	// 56 V
						0x3f,0x40,0x38,0x40,0x3f,	// 57 W
						0x63,0x14,0x08,0x14,0x63,	// 58 X
						0x07,0x08,0x70,0x08,0x07,	// 59 Y
						0x61,0x51,0x49,0x45,0x43,	// 5a Z
						0x00,0x7f,0x41,0x41,0x00,	// 5b [
						0x02,0x04,0x08,0x10,0x20,	// 5c
						0x00,0x41,0x41,0x7f,0x00,	// 5d
						0x04,0x02,0x01,0x02,0x04,	// 5e
						0x40,0x40,0x40,0x40,0x40,	// 5f
						0x00,0x01,0x02,0x04,0x00,	// 60
						0x20,0x54,0x54,0x54,0x78,	// 61 a
						0x7f,0x48,0x44,0x44,0x38,	// 62 b
						0x38,0x44,0x44,0x44,0x20,	// 63 c
						0x38,0x44,0x44,0x48,0x7f,	// 64 d
						0x38,0x54,0x54,0x54,0x18,	// 65 e
						0x08,0x7e,0x09,0x01,0x02,	// 66 f
						0x0c,0x52,0x52,0x52,0x3e,	// 67 g
						0x7f,0x08,0x04,0x04,0x78,	// 68 h
						0x00,0x44,0x7d,0x40,0x00,	// 69 i
						0x20,0x40,0x44,0x3d,0x00,	// 6a j 
						0x7f,0x10,0x28,0x44,0x00,	// 6b k
						0x00,0x41,0x7f,0x40,0x00,	// 6c l
						0x7c,0x04,0x18,0x04,0x78,	// 6d m
						0x7c,0x08,0x04,0x04,0x78,	// 6e n
						0x38,0x44,0x44,0x44,0x38,	// 6f o
						0x7c,0x14,0x14,0x14,0x08,	// 70 p
						0x08,0x14,0x14,0x18,0x7c,	// 71 q
						0x7c,0x08,0x04,0x04,0x08,	// 72 r
						0x48,0x54,0x54,0x54,0x20,	// 73 s
						0x04,0x3f,0x44,0x40,0x20,	// 74 t
						0x3c,0x40,0x40,0x20,0x7c,	// 75 u
						0x1c,0x20,0x40,0x20,0x1c,	// 76 v
						0x3c,0x40,0x30,0x40,0x3c,	// 77 w
						0x44,0x28,0x10,0x28,0x44,	// 78 x
						0x0c,0x50,0x50,0x50,0x3c,	// 79 y
						0x44,0x64,0x54,0x4c,0x44,	// 7a z
						0x00,0x08,0x36,0x41,0x00,	// 7b
						0x00,0x00,0x7f,0x00,0x00,	// 7c
						0x00,0x41,0x36,0x08,0x00,	// 7d
						0x10,0x08,0x08,0x10,0x08,	// 7e
						0x78,0x46,0x41,0x46,0x78};	// 7f
/******************************************************************************
 * function signatures
 *****************************************************************************/
// Functions writing to only the first display
void bt_print_char_lcd(int row, int col, BYTE ch);
void bt_write_char(int row, int col, BYTE ch);
void bt_write_line(int row, int ch);
void bt_clear(int display_no);
void bt_write_string(int row, int col, char * str);

// Functions writing to a desired display
void bt_clear_display(int display_no);
void bt_write_line_display(int display_no, int row, int ch);
void bt_write_char_display(int display_no, int row, int col, BYTE ch);
void bt_write_pix_set_display(int display_no, int row, int col, int ch, int count);
void bt_write_hcilab_display(int display_no, int row, int col);
void bt_write_string_display(int display_no, int row, int col, char * str);
void bt_write_long_display(int display_no, int row, int col, long long_val);
