/***************************************************************************
 * Copyright (c) 2005, Research Group Embedded Interaction                 *
 * Paul Holleis <paul@hcilab.org>                                          *
 * Matthias Kranz <matthias@hcilab.org>                                    *
 * Albrecht Schmidt <albrecht@hcilab.org>                                  *
 * All rights reserved.                                                    *
 *                                                                         *
 * Redistribution and use in source and binary forms, with or without      *
 * modification, are permitted provided that the following conditions      *
 * are met:                                                                *
 *                                                                         *
 *    * Redistributions of source code must retain the above copyright     *
 *      notice, this list of conditions and the following disclaimer.      *
 *    * Redistributions in binary form must reproduce the above copyright  *
 *      notice, this list of conditions and the following disclaimer in    *
 *      the documentation and/or other materials provided with the         *
 *      distribution.                                                      *
 *    * Neither the name of the <ORGANIZATION> nor the names of its        *
 *      contributors may be used to endorse or promote products derived    *
 *      from this software without specific prior written permission.      *
 *                                                                         *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS     *
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT       *
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR   *
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT    *
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   *
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT        *
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   *
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON       *
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR      *
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF      *
 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH    *
 * DAMAGE.                                                                 *
 **************************************************************************/
#ifndef __BT96040_DS_H_
#define __BT96040_DS_H_

#include <stdlib.h>

/// One character has a width of 6 (six) pixels.
#define BT_CHARACTER_PIXEL_WIDTH 6
#define BT_CHARACTER_PIXEL_HEIGHT 8

/// 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
};

enum DISPLAYS
{
   DISPLAY_1 = 0,
   DISPLAY_2 = 1,
   DISPLAY_3 = 2,
   DISPLAY_4 = 3,
   DISPLAY_5 = 4,
   DISPLAY_6 = 5
};
/******************************************************************************
 * 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

// number of standard display
#define STD_DISP 0

// max possible row number
#define MAX_ROW 39
// max possible column number
#define MAX_COL 95
// vertical display size in bytes
#define DISP_SIZE_X (MAX_ROW / 8 +1)
// horizontal display size in bytes
#define DISP_SIZE_Y (MAX_COL +1)

// amount of memory a display buffer needs
#define DISP_MEM (DISP_SIZE_X * DISP_SIZE_Y)

// constant for no rotation
#define DEG0 0
// constant for 90 degrees cw rotation
#define DEG90 90
// constant for 180 degrees cw rotation
#define DEG180 180
// constant for 270 degrees cw rotation
#define DEG270 270
// constant for 270 degrees ccw rotation
#define DEGM90 DEG270
// constant for 180 degrees ccw rotation
#define DEGM180 DEG180
// constant for 90 degrees ccw rotation
#define DEGM270 DEG90

#define VERTICAL_SCROLL 1
#define HORIZONTAL_SCROLL 2

// constant for upwards movement
#define MOVEUP 1
// constant for downwards movement
#define MOVEDOWN 2
// constant for movement to left
#define MOVELEFT 3
// constant for movement to right
#define MOVERIGHT 4

// maximum number of images that can be saved
#define MAX_IMAGES 100

// size of external flash page
#define FLASH_PAGE_SIZE 264

// address in flash memory where the buffer of display 0 begins
#define DISPLAY_0_BUFFER_FLASH (6 * FLASH_PAGE_SIZE)
// address in flash memory where the buffer of display 1 begins
#define DISPLAY_1_BUFFER_FLASH (DISPLAY_0_BUFFER_FLASH + 2*FLASH_PAGE_SIZE)
// address in flash memory where the buffer of display 2 begins
#define DISPLAY_2_BUFFER_FLASH (DISPLAY_1_BUFFER_FLASH + 2*FLASH_PAGE_SIZE)
// address in flash memory where the buffer of display 3 begins
#define DISPLAY_3_BUFFER_FLASH (DISPLAY_2_BUFFER_FLASH + 2*FLASH_PAGE_SIZE)
// address in flash memory where the buffer of display 4 begins
#define DISPLAY_4_BUFFER_FLASH (DISPLAY_3_BUFFER_FLASH + 2*FLASH_PAGE_SIZE)
// address in flash memory where the buffer of display 5 begins
#define DISPLAY_5_BUFFER_FLASH (DISPLAY_4_BUFFER_FLASH + 2*FLASH_PAGE_SIZE)



// buffer for display data
unsigned byte displaybuffer[DISP_MEM * sizeof(unsigned char) +1];

#ifdef FAST_DISPLAY_0
// buffer for display 0 (redundant but speeds up access)
unsigned byte display0[DISP_MEM * sizeof(unsigned char) +1];
#endif

// number of display currently buffered in the displaybuffer
signed int bufferDisplayNumber = -1;

// buffer for bitmap data
unsigned byte imagebuffer[MAX_ROW / 8 +1][MAX_COL +1];

// current position in image buffer in [0, MAX_COL]
unsigned int image_x;
// current position in image buffer in [0, MAX_ROW / 8]
unsigned int image_y;

// number of latest image that has been saved
signed int lastSavedImageNumber = -1;
// next available flash page to store images
int32 nextFlashPage = DISPLAY_5_BUFFER_FLASH + 2*FLASH_PAGE_SIZE;

// map between image number and according flash page
unsigned long flashPageMap[MAX_IMAGES];
//unsigned byte savedImage[MAX_ROW / 8 +1][MAX_COL +1];
//unsigned byte* images[MAX_IMAGES];





#define mathmin(x,y) ((x<y)?x:y)
#define mathmax(x,y) ((x<y)?y:x)


/******************************************************************************
 * function signatures
 *****************************************************************************/


/******************************************************************************
 * methods accessing several displays
 *****************************************************************************/
signed int bt_clear_displays();
signed int bt_clear_display(unsigned int dispnr, int1 background);
void bt_clear_buffer(unsigned int dispnr);

signed int bt_line_display(unsigned int dispnr, unsigned int start_row, unsigned int start_col, 
                           unsigned int end_row, unsigned int end_col, int1 draw);
signed int bt_vLine_display(unsigned int dispnr, unsigned int start_row, unsigned int end_row, 
                            unsigned int col, int1 draw);
signed int bt_hLine_display(unsigned int dispnr, unsigned int row, unsigned int start_col, 
                            unsigned int end_col, int1 draw);
//signed int bt_ellipse_display(unsigned int dispnr, unsigned int row, unsigned int col, 
//                              unsigned int x_radius, unsigned int y_radius, int1 draw);
//signed int bt_circle_display(unsigned int dispnr, unsigned int row, unsigned int col, 
//                             unsigned int radius, int1 draw);
//signed int bt_box_display(unsigned int dispnr, unsigned int start_row, unsigned int start_col, 
//                          unsigned int end_row, unsigned int end_col, int1 draw);
signed int bt_text_ww_display(unsigned int dispnr, char* text, signed int row, signed int col, 
              int rotation, int1 draw, int1 wordwrap);
signed int bt_text_display(unsigned int dispnr, char* text, signed int row, signed int col, 
              int rotation, int1 draw);
signed int bt_text_big_display(unsigned int dispnr, char* text, signed int row, 
              signed int col, int rotation, int1 draw);
signed int bt_scroll_text_display(unsigned int dispnr, char* text, 
              int rotation, int1 draw, int1 wordwrap);
signed int bt_scroll_text_display2(unsigned int dispnr, char* text, 
               unsigned int orientation,
               signed int row, signed int col, 
               int rotation, int1 draw, int1 wordwrap, 
               unsigned int speed, unsigned int nrsteps);
signed int bt_scroll_rect_display(unsigned dispnr, signed int start_row, 
              signed int start_col, signed int end_row, signed int end_col, 
              unsigned int direction, unsigned int speed, unsigned int steps);
signed int bt_invert_display(unsigned int dispnr);
//signed int bt_rotate_display(unsigned int dispnr, unsigned int start_row, unsigned int start_col, 
//                 unsigned int end_row, unsigned int end_col, int rotation);


// standard display
signed int bt_clear(int1 background);
signed int bt_line(unsigned int start_row, unsigned int start_col, 
                   unsigned int end_row, unsigned int end_col, int1 draw);
signed int bt_vLine(unsigned int start_row, unsigned int end_row, unsigned int col, int1 draw);
signed int bt_hLine(unsigned int row, unsigned int start_col, unsigned int end_col, int1 draw);
signed int bt_ellipse(unsigned int row, unsigned int col, unsigned int x_radius, 
                      unsigned int y_radius, int1 draw);
signed int bt_circle(unsigned int row, unsigned int col, unsigned int radius, int1 draw);
signed int bt_box(unsigned int start_row, unsigned int start_col, unsigned int end_row, 
                  unsigned int end_col, int1 draw);
signed int bt_text_ww(char* text, unsigned int row, unsigned int col, int rotation, int1 draw, int1 wordwrap);
signed int bt_text(char* text, unsigned int row, unsigned int col, int rotation, int1 draw);
//signed int bt_rotate(unsigned int start_row, unsigned int start_col, 
//                 unsigned int end_row, unsigned int end_col, int rotation);

signed int bt_text_display_buf(unsigned int dispnr, char* text, signed int row, signed int col, int rotation, int1 draw);
signed int bt_text_display_big_buf(unsigned int dispnr, char* text, signed int row, signed int col, int rotation, int1 draw);
signed int bt_text_ww_display_buf(unsigned int dispnr, char* text, signed int row, signed int col, 
              int rotation, int1 draw, int1 wordwrap);

signed int bt_text_display_big(unsigned int dispnr, char* text, signed int row, signed int col, int rotation, int1 draw);



/** access to buffers */
// ---------------------- MULTIPLE DISPLAYS ------------------------

//signed int dsOrBit(unsigned int dispnr, unsigned int row, unsigned int col, int1 thebit);
//signed int dsSetBit(unsigned int dispnr, unsigned int row, unsigned int col, int1 thebit);
//int1 dsGetBit(unsigned int dispnr, unsigned int row, unsigned int col);
//signed int dsSetByte(unsigned int dispnr, unsigned int row, unsigned int col, byte thebyte);
//signed byte dsGetByte(unsigned int dispnr, unsigned int row, unsigned int col);


// ---------------------- STANDARD DISPLAY ------------------------

//int1 dGetBit(unsigned int row, unsigned int col);
//signed int dSetBit(unsigned int row, unsigned int col, int1 thebit);
//signed int dOrBit(unsigned int row, unsigned int col, int1 thebit);
//signed int dSetByte(unsigned int row, unsigned int col, byte thebyte);
//signed byte dGetByte(unsigned int row, unsigned int col);




/**
 * methods using the flash memory
 */
//signed int flashToBuffer(unsigned int dispnr);
//signed int bufferToFlash(unsigned int dispnr);

signed int bt_loadImage(unsigned int imageNr);
signed int bt_loadImageAt(int32 flashpos);
signed int bt_storeImage(unsigned int width, unsigned int height);
signed int bt_storeImageAt(int32 flashpos, unsigned int width, unsigned int height);




/* helper functions */
inline int1 insideCol(unsigned int col) { return col <= MAX_COL; }
inline int1 insideRow(unsigned int row) { return row <= MAX_ROW; }
inline int1 insideColSigned(signed int col) { return col <= MAX_COL; }
inline int1 insideRowSigned(signed int row) { return row <= MAX_ROW; }
inline int1 inside(unsigned int row, unsigned int col)
  { return (row <= MAX_ROW && col <= MAX_COL); }
inline int1 insideMax(unsigned int row, unsigned int col, unsigned int maxrow, unsigned int maxcol)
  { return (row <= maxrow && col <= maxcol); }
inline int1 insideSigned(signed int row, signed int col)
  { return (row >= 0 && row <= MAX_ROW && col >= 0 && col <= MAX_COL); }
inline int1 insideSignedMax(signed int row, signed int col, unsigned int maxrow, unsigned int maxcol)
  { return (row >= 0 && row <= maxrow && col >= 0 && col <= maxcol); }

//unsigned long getIndex(unsigned int row, unsigned int col);
//unsigned long getByteIndex(unsigned int row, unsigned int col);

//signed int convert_coords(int deg, unsigned int row, unsigned int col,
//                          int *new_row, int *new_col, unsigned int maxrow, unsigned int maxcol);
//signed int get_letter(char ch, byte *b);
//void bresenham_ellipse(unsigned int dispnr, unsigned int xc, unsigned int yc, 
//                       unsigned int xr, unsigned int yr, int1 draw);
//void bresenham(unsigned int dispnr, unsigned int x1, unsigned int y1, 
//               unsigned int x2, unsigned int y2, int1 draw);



/**
 * Methods concerned with buffering images and writing
 * them onto displays
 */
signed int bt_resetImage();
signed int bt_addToImage(unsigned char *data, unsigned long len, unsigned int width, unsigned int height);
signed int bt_writeImage(unsigned int row, unsigned int col, unsigned int width, unsigned int height, int rotation);
signed int bt_writeImage_display(unsigned int dispnr, unsigned int row, unsigned int col, unsigned int width, unsigned int height, int rotation);
signed int bt_loadImage(unsigned int imageNr);

//--------------------- direct buffer manipulation

//signed int iSetBit(unsigned int row, unsigned int col, int1 thebit);
//int1 iGetBit(unsigned int row, unsigned int col);
//signed int iSetByte(unsigned int row, unsigned int col, byte thebyte);
//signed byte iGetByte(unsigned int row, unsigned int col);




/** methods updating the displays from buffers */
signed int displayByteUpdate(unsigned int dispnr, signed int row, signed int col);
signed int displayLineSegUpdate(unsigned int dispnr, signed int row, signed int start_col, signed int end_col);
signed int displayLineUpdate(unsigned int dispnr, signed int row);
signed int displayUpdate(unsigned int dispnr);













// ------- old functions

void write_identity_displays();

// 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_write_string(int row, int col, char * str);

// Functions writing to a desired display
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);



/*
void dFlip();
void dMirror();
...
*/








// attic

/*
// internal: direct access to some buffer
signed int setBitPtr(unsigned byte *data, unsigned int row, unsigned int col, int1 thebit);
int1 getBitPtr(unsigned byte *data, unsigned int row, unsigned int col);
signed int setBytePtr(unsigned byte *data, unsigned int row, unsigned int col, byte thebyte);
signed byte getBytePtr(unsigned byte *data, unsigned int row, unsigned int col);
*/






#endif

