summaryrefslogtreecommitdiffstats
path: root/c/src/libchip
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2008-07-11 10:03:19 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2008-07-11 10:03:19 +0000
commit80a0ae82484749af38a490dea139286e95a060eb (patch)
tree9e8678f05247c61f7dd1f742f1f8117fa4b544c6 /c/src/libchip
parentadapted powerpc exception code (diff)
downloadrtems-80a0ae82484749af38a490dea139286e95a060eb.tar.bz2
add display driver for HCMS* SPI displays
Diffstat (limited to 'c/src/libchip')
-rw-r--r--c/src/libchip/Makefile.am9
-rw-r--r--c/src/libchip/display/disp_fonts.h37
-rw-r--r--c/src/libchip/display/disp_hcms29xx.c942
-rw-r--r--c/src/libchip/display/disp_hcms29xx.h69
-rw-r--r--c/src/libchip/display/font_hcms29xx.c1824
-rw-r--r--c/src/libchip/display/font_hcms29xx.h42
-rw-r--r--c/src/libchip/preinstall.am5
7 files changed, 2928 insertions, 0 deletions
diff --git a/c/src/libchip/Makefile.am b/c/src/libchip/Makefile.am
index be75199876..f8ebde8fba 100644
--- a/c/src/libchip/Makefile.am
+++ b/c/src/libchip/Makefile.am
@@ -13,6 +13,15 @@ EXTRA_DIST =
noinst_LIBRARIES =
noinst_PROGRAMS =
+# display
+if LIBCHIP
+include_libchip_HEADERS += display/disp_hcms29xx.h
+
+noinst_LIBRARIES += libdisplay.a
+libdisplay_a_SOURCES = display/disp_hcms29xx.c display/font_hcms29xx.c
+libdisplay_a_CPPFLAGS = $(AM_CPPFLAGS)
+endif
+
# flash
if LIBCHIP
include_libchip_HEADERS += flash/am29lv160.h
diff --git a/c/src/libchip/display/disp_fonts.h b/c/src/libchip/display/disp_fonts.h
new file mode 100644
index 0000000000..9a359b3a34
--- /dev/null
+++ b/c/src/libchip/display/disp_fonts.h
@@ -0,0 +1,37 @@
+/* $Id$ */
+
+#ifndef DISP_FONTS_H
+#define DISP_FONTS_H
+
+#include <rtems.h>
+
+typedef int8_t disp_font_dimen;
+
+struct disp_font_bounding_box
+{
+ disp_font_dimen w, h, x, y;
+};
+
+struct disp_font_glyph
+{
+ struct disp_font_bounding_box bb;
+ disp_font_dimen wx, wy;
+ const unsigned char *bitmap;
+};
+
+struct disp_font_base
+{
+ int8_t trans;
+ struct disp_font_bounding_box fbb;
+ disp_font_dimen ascent, descent;
+ uint8_t default_char;
+ struct disp_font_glyph *latin1[256];
+};
+
+typedef struct disp_font_base *disp_font_t;
+
+/* Prototypes ------------------------------------------------- */
+
+/* End -------------------------------------------------------- */
+
+#endif /* not defined DISP_FONTS_H */
diff --git a/c/src/libchip/display/disp_hcms29xx.c b/c/src/libchip/display/disp_hcms29xx.c
new file mode 100644
index 0000000000..58bbf6c960
--- /dev/null
+++ b/c/src/libchip/display/disp_hcms29xx.c
@@ -0,0 +1,942 @@
+/*===============================================================*\
+| Project: display driver for HCMS29xx |
++-----------------------------------------------------------------+
+| File: disp_hcms29xx.c |
++-----------------------------------------------------------------+
+| Copyright (c) 2008 |
+| Embedded Brains GmbH |
+| Obere Lagerstr. 30 |
+| D-82178 Puchheim |
+| Germany |
+| rtems@embedded-brains.de |
++-----------------------------------------------------------------+
+| The license and distribution terms for this file may be |
+| found in the file LICENSE in this distribution or at |
+| |
+| http://www.rtems.com/license/LICENSE. |
+| |
++-----------------------------------------------------------------+
+| this file contains the SPI based driver for a HCMS29xx 4 digit |
+| alphanumeric LED display |
++-----------------------------------------------------------------+
+| $Id$
+\*===============================================================*/
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifndef ARRAY_COUNT
+#define ARRAY_COUNT(a) (sizeof(a)/sizeof(a[0]))
+#endif /* ARRAY_COUNT */
+
+#include <rtems.h>
+#include <rtems/libio.h>
+#include <bsp.h>
+#include <rtems/libi2c.h>
+#include "disp_hcms29xx.h"
+#include "font_hcms29xx.h"
+#define FONT_BASE font_hcms29xx_base
+
+
+#define DISP_HCMS29XX_DIGIT_CNT (4)
+#define DISP_HCMS29XX_SEMA_NAME rtems_build_name('D','4','I','Q')
+#define DISP_HCMS29XX_TRNS_SEMA_NAME rtems_build_name('D','4','T','R')
+#define DISP_HCMS29XX_TIMER_NAME rtems_build_name('D','4','T','M')
+#define DISP_HCMS29XX_TASK_NAME rtems_build_name('D','4','T','A')
+
+#define DISP_HCMS29XX_EVENT_TIMER RTEMS_EVENT_1
+#define DISP_HCMS29XX_EVENT_NEWSTR RTEMS_EVENT_2
+
+
+static disp_font_t disp_hcms29xx_font_normal;
+static disp_font_t disp_hcms29xx_font_rotate;
+const rtems_libi2c_tfr_mode_t spi_disphcms29xx_tfr_mode = {
+ .baudrate = 1000000,
+ .bits_per_char = 8,
+ .lsb_first = TRUE,
+ .clock_inv = TRUE,
+ .clock_phs = TRUE,
+ .idle_char = 0
+};
+
+/*=========================================
+ * font management functions
+ */
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+static rtems_status_code disp_hcms29xx_font_struct_size
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| compute size of font data structure tree |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ disp_font_t src, /* source font */
+ size_t *dst_size /* destination: size of font struct*/
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ size_t font_size = 0;
+ int glyph_idx;
+ /*
+ * check parameters
+ */
+ if ((rc == RTEMS_SUCCESSFUL) &&
+ (src == NULL)) {
+ rc = RTEMS_INVALID_ADDRESS;
+ }
+ if (rc == RTEMS_SUCCESSFUL) {
+ font_size =
+ sizeof(*src); /* font_base structure */
+ }
+ glyph_idx = 0;
+ while ((rc == RTEMS_SUCCESSFUL) &&
+ (glyph_idx < (sizeof(src->latin1)/sizeof(src->latin1[0])))) {
+ if (src->latin1[glyph_idx] != NULL) {
+ font_size += sizeof(*(src->latin1[glyph_idx]))
+ +src->latin1[glyph_idx]->bb.w;
+ }
+ glyph_idx++;
+ }
+ *dst_size = font_size;
+
+ return rc;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+static inline unsigned char disp_hcms29xx_bitswap
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| swap data bits in byte (7<->0 , 6<->1 etc) |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ unsigned char byte
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ unsigned char result = 0;
+ int smsk,dmsk;
+ for (smsk = 0x01,dmsk=0x80;
+ smsk < 0x100;
+ smsk<<=1 ,dmsk>>=1) {
+ if ((byte & smsk) != 0) {
+ result |= dmsk;
+ }
+ }
+ return result;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_status_code disp_hcms29xx_copy_font
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| copy font data from source to dest font structure |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ disp_font_t src, /* source font */
+ struct disp_font_base *dst, /* ptr to destination font */
+ int shift_cnt, /* shift count for font */
+ boolean do_rotate /* rotate font, if TRUE */
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ char *alloc_next = (char *)dst;
+ int glyph_idx = 0;
+ int glyph_size;
+ unsigned char byte;
+ int bcnt;
+
+ /*
+ * check parameters
+ */
+ if ((rc == RTEMS_SUCCESSFUL) &&
+ ((src == NULL) ||
+ (dst == NULL))) {
+ rc = RTEMS_INVALID_ADDRESS;
+ }
+ /*
+ * copy font_base structure
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ *dst = *src;
+ alloc_next += sizeof(*dst);
+ }
+ /*
+ * for all glyphs: assign own glyph memory
+ */
+ glyph_idx = 0;
+ while ((rc == RTEMS_SUCCESSFUL) &&
+ glyph_idx < (sizeof(src->latin1)/sizeof(src->latin1[0]))) {
+ if (src->latin1[glyph_idx] != NULL) {
+ /*
+ * allocate space for glyph
+ */
+ dst->latin1[glyph_idx] = (struct disp_font_glyph *)alloc_next;
+ alloc_next += sizeof(*(dst->latin1[glyph_idx]));
+ /*
+ * copy source values.
+ * Note: bitmap will be reassigned later
+ */
+ *(struct disp_font_glyph *)(dst->latin1[glyph_idx]) =
+ *(src->latin1[glyph_idx]);
+ }
+ else {
+ dst->latin1[glyph_idx] = NULL;
+ }
+ glyph_idx++;
+ }
+
+ /*
+ * for all glyphs: reassign bitmap
+ */
+ glyph_idx = 0;
+ while ((rc == RTEMS_SUCCESSFUL) &&
+ glyph_idx < (sizeof(src->latin1)/sizeof(src->latin1[0]))) {
+ if (src->latin1[glyph_idx] != NULL) {
+ glyph_size = src->latin1[glyph_idx]->bb.w;
+ /*
+ * allocate space for glyph_bitmap
+ */
+ dst->latin1[glyph_idx]->bitmap = alloc_next;
+ alloc_next += glyph_size;
+ /*
+ * copy/transform bitmap
+ */
+ for (bcnt = 0;bcnt < glyph_size;bcnt++) {
+ if (do_rotate) {
+ byte = src->latin1[glyph_idx]->bitmap[glyph_size - 1 - bcnt];
+ byte = disp_hcms29xx_bitswap(byte);
+ }
+ else {
+ byte = src->latin1[glyph_idx]->bitmap[bcnt];
+ }
+ if (shift_cnt < 0) {
+ byte = byte >> shift_cnt;
+ }
+ else if (shift_cnt > 0) {
+ byte = byte >> shift_cnt;
+ }
+ ((unsigned char *)(dst->latin1[glyph_idx]->bitmap))[bcnt] = byte;
+ }
+ }
+ glyph_idx++;
+ }
+ return rc;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_status_code disp_hcms29xx_alloc_copy_font
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| copy font data from source to dest font structure, alloc all data |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ const disp_font_t src, /* source font */
+ disp_font_t *dst, /* ptr to destination font */
+ int shift_cnt, /* shift count for font */
+ boolean do_rotate /* rotate font, if TRUE */
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ size_t src_size = 0;
+ /*
+ * check parameters
+ */
+ if ((rc == RTEMS_SUCCESSFUL) &&
+ ((src == NULL)
+ || (dst == NULL))) {
+ rc = RTEMS_INVALID_ADDRESS;
+ }
+ /*
+ * determine size of source data
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = disp_hcms29xx_font_struct_size(src,&src_size);
+ }
+ /*
+ * allocate proper data area
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ *dst = malloc(src_size);
+ if (*dst == NULL) {
+ rc = RTEMS_UNSATISFIED;
+ }
+ }
+ /*
+ * scan through source data, copy to dest
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = disp_hcms29xx_copy_font(src,*dst,shift_cnt,do_rotate);
+ }
+ return rc;
+}
+
+/*=========================================
+ * SPI communication functions
+ */
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_status_code disp_hcms29xx_send_to_display
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| request access semaphore to SPI, prepare buffer descriptors, start |
+| transfer via SPI to display |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ disp_hcms29xx_drv_t *softc_ptr,
+ const volatile char *disp_buffer /* start of chars to display (4 chars or 'til \0)*/
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ boolean char_avail;
+ const struct disp_font_glyph *glyph_ptr;
+ disp_font_t curr_font;
+ int i,digit,ret_cnt;
+ unsigned char c;
+
+ /*
+ * select device, set transfer mode, address device
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_libi2c_send_start(softc_ptr->disp_param.minor);
+ }
+ /*
+ * set transfer mode
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = -rtems_libi2c_ioctl(softc_ptr->disp_param.minor,
+ RTEMS_LIBI2C_IOCTL_SET_TFRMODE,
+ &spi_disphcms29xx_tfr_mode);
+ }
+
+ /*
+ * address device
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_libi2c_send_addr(softc_ptr->disp_param.minor,TRUE);
+ }
+
+ /*
+ * send data
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ curr_font =
+ softc_ptr->disp_param.rotate
+ ? disp_hcms29xx_font_rotate
+ : disp_hcms29xx_font_normal;
+
+ char_avail = TRUE;
+ /*
+ * FIXME: for rotated display, write last character first...
+ * maybe we should copy everything to a common buffer and use
+ * ONE SPI transfer?
+ */
+ for (i = 0;
+ ((rc == RTEMS_SUCCESSFUL) &&
+ (i < DISP_HCMS29XX_DIGIT_CNT));
+ i++) {
+ /* test for end of string... */
+ c = disp_buffer[i]; /* perform consistent read of disp_buffer */
+ if (char_avail && (c == '\0')) {
+ char_avail = FALSE;
+ }
+ glyph_ptr = (char_avail
+ ? curr_font->latin1[c]
+ : NULL);
+ if (glyph_ptr == NULL) {
+ glyph_ptr = curr_font->latin1[' '];
+ }
+
+ digit = (softc_ptr->disp_param.rotate
+ ? DISP_HCMS29XX_DIGIT_CNT-1-i
+ : i);
+ /*
+ * send 5 bytes from (char *)glyph_ptr->bitmap to SPI
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ ret_cnt = rtems_libi2c_write_bytes(softc_ptr->disp_param.minor,
+ glyph_ptr->bitmap,5);
+ if (ret_cnt < 0) {
+ rc = -ret_cnt;
+ }
+ }
+ }
+ }
+ /*
+ * finish transfer
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_libi2c_send_stop(softc_ptr->disp_param.minor);
+ }
+
+ return rc;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_status_code disp_hcms29xx_send_to_control
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| request access semaphore to SPI, prepare buffer descriptors, start |
+| transfer via SPI to display |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ disp_hcms29xx_drv_t *softc_ptr,
+ int pwm, /* value for pwm of LEDs, 0..15 */
+ int peak, /* value for peak current for LEDs, 0..3 */
+ int sleep, /* value to make display "sleep" (0..1 */
+ int div, /* divider for external osc input, unused here */
+ int chain /* mode to drive other displays, unused here */
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ int run, ret_cnt;
+ volatile uint8_t ctrl_buffer;
+
+ /* two accesses, control word 0 and 1 */
+ for (run = 0;
+ ((rc == RTEMS_SUCCESSFUL) && (run <= 1));
+ run++) {
+ if (rc == RTEMS_SUCCESSFUL) {
+ if (run == 0) {
+ ctrl_buffer =
+ (0 << 7) |
+ ((sleep & 0x01) << 6) |
+ ((peak & 0x03) << 4) |
+ ((pwm & 0x0f) << 0);
+ }
+ else {
+ ctrl_buffer =
+ (1 << 7) |
+ ((div & 0x01) << 1) |
+ ((chain & 0x01) << 0);
+ }
+ /*
+ * select device, set transfer mode, address device
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_libi2c_send_start(softc_ptr->disp_param.minor);
+ }
+ /*
+ * set transfer mode
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = -rtems_libi2c_ioctl(softc_ptr->disp_param.minor,
+ RTEMS_LIBI2C_IOCTL_SET_TFRMODE,
+ &spi_disphcms29xx_tfr_mode);
+ }
+
+ /*
+ * address device
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_libi2c_send_addr(softc_ptr->disp_param.minor,TRUE);
+ }
+
+ /*
+ * send 1 byte from ctrl_buffer
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ ret_cnt = rtems_libi2c_write_bytes(softc_ptr->disp_param.minor,
+ &ctrl_buffer,1);
+ if (ret_cnt < 0) {
+ rc = -ret_cnt;
+ }
+ }
+ }
+ } /* next run ... */
+
+ /*
+ * finish transfer
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_libi2c_send_stop(softc_ptr->disp_param.minor);
+ }
+
+ return rc;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_timer_service_routine disp_hcms29xx_timer_sr
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| this task updates the string in the display |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+(
+ rtems_id id, /* ID of timer, not used */
+ void * arg /* calling arg: softc_ptr */
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| <none used> |
+\*=========================================================================*/
+{
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ disp_hcms29xx_drv_t *softc_ptr = arg;
+
+
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_event_send(softc_ptr->disp_param.task_id,
+ DISP_HCMS29XX_EVENT_TIMER);
+ }
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_task disp_hcms29xx_update_task
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| this task updates the string in the display |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ rtems_task_argument argument /* softc_ptr */
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| <never exits> |
+\*=========================================================================*/
+{
+ rtems_event_set my_events;
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ int disp_offset = 0;
+ rtems_id disp_hcms29xx_timer_id;
+ disp_hcms29xx_drv_t *softc_ptr = (disp_hcms29xx_drv_t *)argument;
+
+ /*
+ * initialize display:
+ */
+ /*
+ * set control attributes for display
+ * maximum brightness...
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = disp_hcms29xx_send_to_control(softc_ptr,
+ 14,3,1,0,0);/* pwm/peak/nosleep/div/chain */
+ }
+
+ /*
+ * set display to blank
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = disp_hcms29xx_send_to_display(softc_ptr,
+ "");
+ }
+
+ /*
+ * create timer for scrolling
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_timer_create(DISP_HCMS29XX_TIMER_NAME,
+ &disp_hcms29xx_timer_id);
+ }
+
+ while (rc == RTEMS_SUCCESSFUL) {
+ /*
+ * wait for any event
+ */
+ rc = rtems_event_receive(DISP_HCMS29XX_EVENT_NEWSTR |
+ DISP_HCMS29XX_EVENT_TIMER ,
+ RTEMS_WAIT | RTEMS_EVENT_ANY,
+ RTEMS_NO_TIMEOUT,
+ &my_events);
+ if (my_events & DISP_HCMS29XX_EVENT_NEWSTR) {
+ /*
+ * fetch new string consistently into local buffer
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_semaphore_obtain(softc_ptr->disp_param.trns_sema_id,
+ RTEMS_WAIT,RTEMS_NO_TIMEOUT);
+ }
+ if (rc == RTEMS_SUCCESSFUL) {
+ strncpy(softc_ptr->disp_param.disp_buffer,
+ softc_ptr->disp_param.trns_buffer,
+ sizeof(softc_ptr->disp_param.disp_buffer));
+ softc_ptr->disp_param.disp_buffer[sizeof(softc_ptr->disp_param.disp_buffer)-1] = '\0';
+ softc_ptr->disp_param.disp_buf_cnt =
+ strlen(softc_ptr->disp_param.disp_buffer);
+ }
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_semaphore_release(softc_ptr->disp_param.trns_sema_id);
+ }
+ /*
+ * set initial offset to negative value
+ * to make string static for some ticks
+ */
+ disp_offset = -4;
+ }
+ if (my_events & DISP_HCMS29XX_EVENT_TIMER) {
+ /*
+ * increase disp_offset, if possible, otherwise reset it
+ */
+ if ((disp_offset < 0) ||
+ (disp_offset < softc_ptr->disp_param.disp_buf_cnt-
+ DISP_HCMS29XX_DIGIT_CNT/2)) {
+ disp_offset++;
+ }
+ else {
+ disp_offset = -4;
+ }
+ }
+ /*
+ * display string, starting from disp_offset
+ */
+ if (disp_offset < 0) {
+ rc = disp_hcms29xx_send_to_display(softc_ptr,
+ softc_ptr->disp_param.disp_buffer);
+ }
+ else if (disp_offset
+ < (softc_ptr->disp_param.disp_buf_cnt - DISP_HCMS29XX_DIGIT_CNT)) {
+ rc = disp_hcms29xx_send_to_display(softc_ptr,
+ softc_ptr->disp_param.disp_buffer+disp_offset);
+ }
+ else {
+ rc = disp_hcms29xx_send_to_display(softc_ptr,
+ softc_ptr->disp_param.disp_buffer
+ + softc_ptr->disp_param.disp_buf_cnt
+ - DISP_HCMS29XX_DIGIT_CNT);
+ }
+ /*
+ * activate timer, if needed
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ if (softc_ptr->disp_param.disp_buf_cnt > DISP_HCMS29XX_DIGIT_CNT) {
+ rc = rtems_timer_fire_after(disp_hcms29xx_timer_id,
+ 50,
+ disp_hcms29xx_timer_sr,
+ NULL);
+ }
+ else {
+ rc = rtems_timer_cancel(disp_hcms29xx_timer_id);
+ }
+ }
+ }
+ /*
+ * FIXME: display task is dead...
+ */
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_status_code disp_hcms29xx_update
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| move given string to display task |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ disp_hcms29xx_drv_t *softc_ptr,
+ const char *src
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+
+ /*
+ * obtain trns semaphore
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_semaphore_obtain(softc_ptr->disp_param.trns_sema_id,
+ RTEMS_WAIT,RTEMS_NO_TIMEOUT);
+ }
+ /*
+ * copy string...
+ */
+ strncpy(softc_ptr->disp_param.trns_buffer,src,
+ sizeof(softc_ptr->disp_param.trns_buffer));
+ softc_ptr->disp_param.trns_buffer[sizeof(softc_ptr->disp_param.trns_buffer)-1] = '\0';
+
+ /*
+ * release trns semaphore
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_semaphore_release(softc_ptr->disp_param.trns_sema_id);
+ }
+
+ /*
+ * send event to task
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_event_send(softc_ptr->disp_param.task_id,
+ DISP_HCMS29XX_EVENT_NEWSTR);
+ }
+
+ return rc;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_device_driver disp_hcms29xx_dev_initialize
+ (
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| prepare the display device driver to accept write calls |
+| register device with its name |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+/*
+ * Initialize and register the device
+ */
+{
+ rtems_status_code rc = RTEMS_SUCCESSFUL;
+ static char *devname = {"/dev/disp"};
+ disp_hcms29xx_drv_t *softc_ptr;
+ /*
+ * FIXME: get softc_ptr
+ */
+
+ /*
+ * initialize font management
+ * FIXME: check, that default glyph exists
+ * FIXME: check font size to be 5x7
+ */
+ /*
+ * translate font according to direction/baseline
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = disp_hcms29xx_alloc_copy_font(
+ &FONT_BASE,
+ &disp_hcms29xx_font_normal,
+ FONT_BASE.descent, /* shift to visibility... */
+ FALSE); /* do not rotate */
+ }
+ /* FIXME: translate font for rotation */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = disp_hcms29xx_alloc_copy_font(&FONT_BASE,
+ &disp_hcms29xx_font_rotate,
+ 0, /* do not shift */
+ TRUE); /* rotate font */
+ }
+ /*
+ * create the trns_buffer semaphore
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_semaphore_create (DISP_HCMS29XX_TRNS_SEMA_NAME,1,
+ RTEMS_PRIORITY
+ |RTEMS_BINARY_SEMAPHORE
+ |RTEMS_INHERIT_PRIORITY
+ |RTEMS_NO_PRIORITY_CEILING
+ |RTEMS_LOCAL,
+ 0,
+ &softc_ptr->disp_param.trns_sema_id);
+ }
+
+ /*
+ * create and start display task
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_task_create(DISP_HCMS29XX_TASK_NAME,
+ 20,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_INTERRUPT_LEVEL(0) | RTEMS_TIMESLICE,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &softc_ptr->disp_param.task_id);
+ }
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_task_start(softc_ptr->disp_param.task_id,
+ disp_hcms29xx_update_task, 0 );
+ }
+ /*
+ * Register the device
+ */
+ if (rc == RTEMS_SUCCESSFUL) {
+ rc = rtems_io_register_name (devname, major, 0);
+ }
+ return rc;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_device_driver disp_hcms29xx_dev_open
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| open the display device |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ disp_hcms29xx_drv_t *softc_ptr;
+ /*
+ * FIXME: get softc_ptr
+ */
+ /*
+ * ensure, that disp_hcms29xx device is assumed to be empty
+ */
+ softc_ptr->disp_param.dev_buf_cnt = 0;
+
+ return RTEMS_SUCCESSFUL;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_device_driver disp_hcms29xx_dev_write
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| write to display device |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ rtems_libio_rw_args_t *args = arg;
+ int cnt;
+ disp_hcms29xx_drv_t *softc_ptr;
+ /*
+ * FIXME: get softc_ptr
+ */
+
+ for (cnt = 0;cnt < args->count;cnt++) {
+ /*
+ * accumulate characters written into display dev buffer
+ */
+ if (((softc_ptr->disp_param.dev_buf_cnt > 0)
+ &&((args->buffer[cnt] == '\n')
+ || (args->buffer[cnt] == '\0'))
+ )
+ ||( softc_ptr->disp_param.dev_buf_cnt >=
+ sizeof(softc_ptr->disp_param.dev_buffer) - 1)) {
+ softc_ptr->disp_param.dev_buffer[softc_ptr->disp_param.dev_buf_cnt] = '\0';
+ /*
+ * transfer string to display string, redisplay it...
+ */
+ disp_hcms29xx_update(softc_ptr,softc_ptr->disp_param.dev_buffer);
+ softc_ptr->disp_param.dev_buf_cnt = 0;
+ }
+ /*
+ * write to dev_buf, if '\n' occured or display device buffer is full
+ */
+ if ((args->buffer[cnt] != '\n') &&
+ (args->buffer[cnt] != '\0')) {
+ softc_ptr->disp_param.dev_buffer[softc_ptr->disp_param.dev_buf_cnt++] =
+ args->buffer[cnt];
+ }
+ }
+ args->bytes_moved = args->count;
+
+ return RTEMS_SUCCESSFUL;
+}
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+rtems_device_driver disp_hcms29xx_dev_close
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| close the display device |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+)
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| rtems_status_code |
+\*=========================================================================*/
+{
+ disp_hcms29xx_drv_t *softc_ptr;
+ /*
+ * FIXME: get softc_ptr
+ */
+ /* flush buffer, if not empty */
+ if (softc_ptr->disp_param.dev_buf_cnt > 0) {
+ softc_ptr->disp_param.dev_buffer[softc_ptr->disp_param.dev_buf_cnt] =
+ '\0';
+ /*
+ * transfer string to display string, redisplay it...
+ */
+ disp_hcms29xx_update(softc_ptr,softc_ptr->disp_param.dev_buffer);
+ softc_ptr->disp_param.dev_buf_cnt = 0;
+ }
+ return RTEMS_SUCCESSFUL;
+}
diff --git a/c/src/libchip/display/disp_hcms29xx.h b/c/src/libchip/display/disp_hcms29xx.h
new file mode 100644
index 0000000000..6682f1bbdd
--- /dev/null
+++ b/c/src/libchip/display/disp_hcms29xx.h
@@ -0,0 +1,69 @@
+/*===============================================================*\
+| Project: display driver for HCMS29xx |
++-----------------------------------------------------------------+
+| File: disp_hcms29xx.h |
++-----------------------------------------------------------------+
+| Copyright (c) 2008 |
+| Embedded Brains GmbH |
+| Obere Lagerstr. 30 |
+| D-82178 Puchheim |
+| Germany |
+| rtems@embedded-brains.de |
++-----------------------------------------------------------------+
+| The license and distribution terms for this file may be |
+| found in the file LICENSE in this distribution or at |
+| |
+| http://www.rtems.com/license/LICENSE. |
+| |
++-----------------------------------------------------------------+
+| this file declares the SPI based driver for a HCMS29xx 4 digit |
+| alphanumeric LED display |
++-----------------------------------------------------------------+
+| $Id$
+\*===============================================================*/
+#ifndef _DISP_HCMS29XX_H
+#define _DISP_HCMS29XX_H
+#include <rtems.h>
+#include <time.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define DISP_HCMS29XX_TEXT_CNT (128)
+
+ typedef struct {
+ rtems_device_major_number minor; /* minor device number */
+ /*
+ * in the disp_buffer, the string to be displayed is placed
+ */
+ char disp_buffer[DISP_HCMS29XX_TEXT_CNT];
+ int disp_buf_cnt; /* number of valid chars in disp_buffer */
+ /*
+ * in the trns buffer the string is transfered to display task
+ */
+ char trns_buffer[DISP_HCMS29XX_TEXT_CNT];
+ /*
+ * in the dev_buffer, characters will be accumulated before display...
+ */
+ char dev_buffer[DISP_HCMS29XX_TEXT_CNT];
+ int dev_buf_cnt; /* number of valid chars in dev_buffer */
+
+ rtems_id trns_sema_id; /* ID of disp trns buffer sema */
+ rtems_id task_id; /* ID of disp task */
+ rtems_boolean rotate; /* FLAG: display is upside down */
+ } spi_disp_hcms29xx_param_t;
+
+ typedef struct {
+ rtems_libi2c_drv_t libi2c_drv_entry;
+ spi_disp_hcms29xx_param_t disp_param;
+ } disp_hcms29xx_drv_t;
+ /*
+ * pass this descriptor pointer to rtems_libi2c_register_drv
+ */
+ extern rtems_libi2c_drv_t *disp_hcms29xx__driver_descriptor;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DISP_HCMS29XX_H */
diff --git a/c/src/libchip/display/font_hcms29xx.c b/c/src/libchip/display/font_hcms29xx.c
new file mode 100644
index 0000000000..715036c4d4
--- /dev/null
+++ b/c/src/libchip/display/font_hcms29xx.c
@@ -0,0 +1,1824 @@
+/*===============================================================*\
+| Project: display driver for HCMS29xx |
++-----------------------------------------------------------------+
+| File: font_hcms29xx.c |
++-----------------------------------------------------------------+
+| Copyright (c) 2008 |
+| Embedded Brains GmbH |
+| Obere Lagerstr. 30 |
+| D-82178 Puchheim |
+| Germany |
+| rtems@embedded-brains.de |
++-----------------------------------------------------------------+
+| The license and distribution terms for this file may be |
+| found in the file LICENSE in this distribution or at |
+| |
+| http://www.rtems.com/license/LICENSE. |
+| |
++-----------------------------------------------------------------+
+| This file defines the 5x7 bit font used in disp_hcms29xx |
++-----------------------------------------------------------------+
+| $Id$
+\*===============================================================*/
+
+#include <stddef.h>
+#include "disp_fonts.h"
+
+const unsigned char bitmap_hp_fixed_5_7_0 [5] = {
+ 0x08,
+ 0x1c,
+ 0x3e,
+ 0x7f,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_0 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_0,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_1 [5] = {
+ 0x30,
+ 0x45,
+ 0x48,
+ 0x40,
+ 0x30
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_1 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_1,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_2 [5] = {
+ 0x45,
+ 0x29,
+ 0x11,
+ 0x29,
+ 0x45
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_2 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_2,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_3 [5] = {
+ 0x7d,
+ 0x09,
+ 0x11,
+ 0x21,
+ 0x7d
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_3 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_3,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_4 [5] = {
+ 0x7d,
+ 0x09,
+ 0x05,
+ 0x05,
+ 0x79
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_4 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_4,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_5 [5] = {
+ 0x38,
+ 0x44,
+ 0x44,
+ 0x38,
+ 0x44
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_5 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_5,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_6 [5] = {
+ 0x7e,
+ 0x01,
+ 0x29,
+ 0x2e,
+ 0x10
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_6 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_6,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_7 [5] = {
+ 0x30,
+ 0x4a,
+ 0x4d,
+ 0x49,
+ 0x30
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_7 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_7,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_8 [5] = {
+ 0x60,
+ 0x50,
+ 0x48,
+ 0x50,
+ 0x60
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_8 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_8,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_9 [5] = {
+ 0x1e,
+ 0x04,
+ 0x04,
+ 0x38,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_9 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_9,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_10 [5] = {
+ 0x3e,
+ 0x49,
+ 0x49,
+ 0x49,
+ 0x3e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_10 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_10,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_11 [5] = {
+ 0x62,
+ 0x14,
+ 0x08,
+ 0x10,
+ 0x60
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_11 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_11,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_12 [5] = {
+ 0x40,
+ 0x3c,
+ 0x20,
+ 0x20,
+ 0x1c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_12 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_12,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_13 [5] = {
+ 0x08,
+ 0x7c,
+ 0x04,
+ 0x7c,
+ 0x02
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_13 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_13,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_14 [5] = {
+ 0x38,
+ 0x44,
+ 0x44,
+ 0x3c,
+ 0x04
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_14 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_14,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_15 [5] = {
+ 0x41,
+ 0x63,
+ 0x55,
+ 0x49,
+ 0x41
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_15 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_15,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_16 [5] = {
+ 0x10,
+ 0x08,
+ 0x78,
+ 0x08,
+ 0x04
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_16 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_16,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_17 [5] = {
+ 0x18,
+ 0x24,
+ 0x7e,
+ 0x24,
+ 0x18
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_17 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_17,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_18 [5] = {
+ 0x5e,
+ 0x61,
+ 0x01,
+ 0x61,
+ 0x5e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_18 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_18,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_19 [5] = {
+ 0x78,
+ 0x14,
+ 0x15,
+ 0x14,
+ 0x78
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_19 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_19,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_20 [5] = {
+ 0x38,
+ 0x44,
+ 0x45,
+ 0x3c,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_20 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_20,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_21 [5] = {
+ 0x78,
+ 0x15,
+ 0x14,
+ 0x15,
+ 0x78
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_21 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_21,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_22 [5] = {
+ 0x38,
+ 0x45,
+ 0x44,
+ 0x3d,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_22 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_22,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_23 [5] = {
+ 0x3c,
+ 0x43,
+ 0x42,
+ 0x43,
+ 0x3c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_23 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_23,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_24 [5] = {
+ 0x38,
+ 0x45,
+ 0x44,
+ 0x45,
+ 0x38
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_24 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_24,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_25 [5] = {
+ 0x3c,
+ 0x41,
+ 0x40,
+ 0x41,
+ 0x3c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_25 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_25,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_26 [5] = {
+ 0x38,
+ 0x42,
+ 0x40,
+ 0x42,
+ 0x38
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_26 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_26,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_27 [5] = {
+ 0x08,
+ 0x08,
+ 0x2a,
+ 0x1c,
+ 0x08
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_27 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_27,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_28 [5] = {
+ 0x20,
+ 0x7e,
+ 0x02,
+ 0x02,
+ 0x02
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_28 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_28,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_29 [5] = {
+ 0x12,
+ 0x19,
+ 0x15,
+ 0x12,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_29 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_29,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_30 [5] = {
+ 0x48,
+ 0x7e,
+ 0x49,
+ 0x41,
+ 0x42
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_30 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_30,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_31 [5] = {
+ 0x01,
+ 0x12,
+ 0x7c,
+ 0x12,
+ 0x01
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_31 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_31,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_32 [5] = {
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_32 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_32,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_33 [5] = {
+ 0x00,
+ 0x5f,
+ 0x00,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_33 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_33,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_34 [5] = {
+ 0x00,
+ 0x03,
+ 0x00,
+ 0x03,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_34 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_34,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_35 [5] = {
+ 0x14,
+ 0x7f,
+ 0x14,
+ 0x7f,
+ 0x14
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_35 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_35,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_36 [5] = {
+ 0x24,
+ 0x2a,
+ 0x7f,
+ 0x2a,
+ 0x12
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_36 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_36,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_37 [5] = {
+ 0x23,
+ 0x13,
+ 0x08,
+ 0x64,
+ 0x62
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_37 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_37,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_38 [5] = {
+ 0x36,
+ 0x49,
+ 0x56,
+ 0x20,
+ 0x50
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_38 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_38,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_39 [5] = {
+ 0x00,
+ 0x0b,
+ 0x07,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_39 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_39,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_40 [5] = {
+ 0x00,
+ 0x00,
+ 0x3e,
+ 0x41,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_40 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_40,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_41 [5] = {
+ 0x00,
+ 0x41,
+ 0x3e,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_41 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_41,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_42 [5] = {
+ 0x08,
+ 0x2a,
+ 0x1c,
+ 0x2a,
+ 0x08
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_42 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_42,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_43 [5] = {
+ 0x08,
+ 0x08,
+ 0x3e,
+ 0x08,
+ 0x08
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_43 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_43,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_44 [5] = {
+ 0x00,
+ 0x58,
+ 0x38,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_44 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_44,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_45 [5] = {
+ 0x08,
+ 0x08,
+ 0x08,
+ 0x08,
+ 0x08
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_45 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_45,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_46 [5] = {
+ 0x00,
+ 0x30,
+ 0x30,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_46 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_46,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_47 [5] = {
+ 0x20,
+ 0x10,
+ 0x08,
+ 0x04,
+ 0x02
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_47 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_47,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_48 [5] = {
+ 0x3e,
+ 0x51,
+ 0x49,
+ 0x45,
+ 0x3e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_48 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_48,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_49 [5] = {
+ 0x00,
+ 0x42,
+ 0x7f,
+ 0x40,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_49 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_49,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_50 [5] = {
+ 0x62,
+ 0x51,
+ 0x49,
+ 0x49,
+ 0x46
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_50 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_50,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_51 [5] = {
+ 0x22,
+ 0x41,
+ 0x49,
+ 0x49,
+ 0x36
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_51 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_51,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_52 [5] = {
+ 0x18,
+ 0x14,
+ 0x12,
+ 0x7f,
+ 0x10
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_52 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_52,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_53 [5] = {
+ 0x27,
+ 0x45,
+ 0x45,
+ 0x45,
+ 0x39
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_53 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_53,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_54 [5] = {
+ 0x3c,
+ 0x4a,
+ 0x49,
+ 0x49,
+ 0x30
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_54 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_54,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_55 [5] = {
+ 0x01,
+ 0x71,
+ 0x09,
+ 0x05,
+ 0x03
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_55 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_55,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_56 [5] = {
+ 0x36,
+ 0x49,
+ 0x49,
+ 0x49,
+ 0x36
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_56 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_56,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_57 [5] = {
+ 0x06,
+ 0x49,
+ 0x49,
+ 0x29,
+ 0x1e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_57 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_57,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_58 [5] = {
+ 0x00,
+ 0x36,
+ 0x36,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_58 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_58,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_59 [5] = {
+ 0x00,
+ 0x5b,
+ 0x3b,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_59 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_59,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_60 [5] = {
+ 0x00,
+ 0x08,
+ 0x14,
+ 0x22,
+ 0x41
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_60 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_60,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_61 [5] = {
+ 0x14,
+ 0x14,
+ 0x14,
+ 0x14,
+ 0x14
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_61 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_61,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_62 [5] = {
+ 0x41,
+ 0x22,
+ 0x14,
+ 0x08,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_62 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_62,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_63 [5] = {
+ 0x02,
+ 0x01,
+ 0x51,
+ 0x09,
+ 0x06
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_63 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_63,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_64 [5] = {
+ 0x3e,
+ 0x41,
+ 0x5d,
+ 0x55,
+ 0x1e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_64 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_64,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_65 [5] = {
+ 0x7e,
+ 0x09,
+ 0x09,
+ 0x09,
+ 0x7e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_65 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_65,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_66 [5] = {
+ 0x7e,
+ 0x49,
+ 0x49,
+ 0x49,
+ 0x36
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_66 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_66,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_67 [5] = {
+ 0x3e,
+ 0x41,
+ 0x41,
+ 0x41,
+ 0x22
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_67 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_67,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_68 [5] = {
+ 0x7f,
+ 0x41,
+ 0x41,
+ 0x41,
+ 0x3e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_68 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_68,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_69 [5] = {
+ 0x7f,
+ 0x49,
+ 0x49,
+ 0x49,
+ 0x41
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_69 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_69,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_70 [5] = {
+ 0x7f,
+ 0x09,
+ 0x09,
+ 0x09,
+ 0x01
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_70 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_70,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_71 [5] = {
+ 0x3e,
+ 0x41,
+ 0x41,
+ 0x51,
+ 0x32
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_71 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_71,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_72 [5] = {
+ 0x7f,
+ 0x08,
+ 0x08,
+ 0x08,
+ 0x7f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_72 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_72,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_73 [5] = {
+ 0x00,
+ 0x41,
+ 0x7f,
+ 0x41,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_73 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_73,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_74 [5] = {
+ 0x20,
+ 0x40,
+ 0x40,
+ 0x40,
+ 0x3f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_74 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_74,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_75 [5] = {
+ 0x7f,
+ 0x08,
+ 0x14,
+ 0x22,
+ 0x41
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_75 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_75,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_76 [5] = {
+ 0x7f,
+ 0x40,
+ 0x40,
+ 0x40,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_76 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_76,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_77 [5] = {
+ 0x7f,
+ 0x02,
+ 0x0c,
+ 0x02,
+ 0x7f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_77 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_77,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_78 [5] = {
+ 0x7f,
+ 0x04,
+ 0x08,
+ 0x10,
+ 0x7f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_78 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_78,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_79 [5] = {
+ 0x3e,
+ 0x41,
+ 0x41,
+ 0x41,
+ 0x3e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_79 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_79,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_80 [5] = {
+ 0x7f,
+ 0x09,
+ 0x09,
+ 0x09,
+ 0x06
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_80 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_80,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_81 [5] = {
+ 0x3e,
+ 0x41,
+ 0x51,
+ 0x21,
+ 0x5e
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_81 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_81,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_82 [5] = {
+ 0x7f,
+ 0x09,
+ 0x19,
+ 0x29,
+ 0x46
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_82 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_82,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_83 [5] = {
+ 0x26,
+ 0x49,
+ 0x49,
+ 0x49,
+ 0x32
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_83 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_83,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_84 [5] = {
+ 0x01,
+ 0x01,
+ 0x7f,
+ 0x01,
+ 0x01
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_84 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_84,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_85 [5] = {
+ 0x3f,
+ 0x40,
+ 0x40,
+ 0x40,
+ 0x3f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_85 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_85,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_86 [5] = {
+ 0x07,
+ 0x18,
+ 0x60,
+ 0x18,
+ 0x07
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_86 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_86,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_87 [5] = {
+ 0x7f,
+ 0x20,
+ 0x18,
+ 0x20,
+ 0x7f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_87 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_87,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_88 [5] = {
+ 0x63,
+ 0x14,
+ 0x08,
+ 0x14,
+ 0x63
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_88 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_88,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_89 [5] = {
+ 0x03,
+ 0x04,
+ 0x78,
+ 0x04,
+ 0x03
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_89 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_89,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_90 [5] = {
+ 0x61,
+ 0x51,
+ 0x49,
+ 0x45,
+ 0x43
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_90 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_90,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_91 [5] = {
+ 0x00,
+ 0x00,
+ 0x7f,
+ 0x41,
+ 0x41
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_91 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_91,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_92 [5] = {
+ 0x02,
+ 0x04,
+ 0x08,
+ 0x10,
+ 0x20
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_92 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_92,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_93 [5] = {
+ 0x41,
+ 0x41,
+ 0x7f,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_93 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_93,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_94 [5] = {
+ 0x04,
+ 0x02,
+ 0x7f,
+ 0x02,
+ 0x04
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_94 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_94,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_95 [5] = {
+ 0x40,
+ 0x40,
+ 0x40,
+ 0x40,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_95 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_95,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_96 [5] = {
+ 0x00,
+ 0x07,
+ 0x0b,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_96 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_96,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_97 [5] = {
+ 0x38,
+ 0x44,
+ 0x44,
+ 0x3c,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_97 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_97,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_98 [5] = {
+ 0x7f,
+ 0x48,
+ 0x44,
+ 0x44,
+ 0x38
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_98 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_98,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_99 [5] = {
+ 0x38,
+ 0x44,
+ 0x44,
+ 0x44,
+ 0x44
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_99 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_99,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_100 [5] = {
+ 0x38,
+ 0x44,
+ 0x44,
+ 0x48,
+ 0x7f
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_100 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_100,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_101 [5] = {
+ 0x38,
+ 0x54,
+ 0x54,
+ 0x54,
+ 0x08
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_101 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_101,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_102 [5] = {
+ 0x08,
+ 0x7e,
+ 0x09,
+ 0x02,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_102 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_102,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_103 [5] = {
+ 0x08,
+ 0x14,
+ 0x54,
+ 0x54,
+ 0x3c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_103 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_103,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_104 [5] = {
+ 0x7f,
+ 0x08,
+ 0x04,
+ 0x04,
+ 0x78
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_104 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_104,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_105 [5] = {
+ 0x00,
+ 0x44,
+ 0x7d,
+ 0x40,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_105 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_105,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_106 [5] = {
+ 0x20,
+ 0x40,
+ 0x44,
+ 0x3d,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_106 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_106,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_107 [5] = {
+ 0x00,
+ 0x7f,
+ 0x10,
+ 0x28,
+ 0x44
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_107 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_107,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_108 [5] = {
+ 0x00,
+ 0x41,
+ 0x7f,
+ 0x40,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_108 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_108,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_109 [5] = {
+ 0x78,
+ 0x04,
+ 0x18,
+ 0x04,
+ 0x78
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_109 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_109,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_110 [5] = {
+ 0x7c,
+ 0x08,
+ 0x04,
+ 0x04,
+ 0x78
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_110 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_110,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_111 [5] = {
+ 0x38,
+ 0x44,
+ 0x44,
+ 0x44,
+ 0x38
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_111 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_111,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_112 [5] = {
+ 0x7c,
+ 0x14,
+ 0x24,
+ 0x24,
+ 0x18
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_112 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_112,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_113 [5] = {
+ 0x18,
+ 0x24,
+ 0x14,
+ 0x7c,
+ 0x40
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_113 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_113,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_114 [5] = {
+ 0x00,
+ 0x7c,
+ 0x08,
+ 0x04,
+ 0x04
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_114 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_114,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_115 [5] = {
+ 0x48,
+ 0x54,
+ 0x54,
+ 0x54,
+ 0x20
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_115 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_115,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_116 [5] = {
+ 0x04,
+ 0x3e,
+ 0x44,
+ 0x20,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_116 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_116,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_117 [5] = {
+ 0x3c,
+ 0x40,
+ 0x40,
+ 0x20,
+ 0x7c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_117 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_117,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_118 [5] = {
+ 0x1c,
+ 0x20,
+ 0x40,
+ 0x20,
+ 0x1c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_118 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_118,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_119 [5] = {
+ 0x3c,
+ 0x40,
+ 0x30,
+ 0x40,
+ 0x3c
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_119 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_119,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_120 [5] = {
+ 0x44,
+ 0x28,
+ 0x10,
+ 0x28,
+ 0x44
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_120 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_120,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_121 [5] = {
+ 0x04,
+ 0x48,
+ 0x30,
+ 0x08,
+ 0x04
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_121 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_121,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_122 [5] = {
+ 0x44,
+ 0x64,
+ 0x54,
+ 0x4c,
+ 0x44
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_122 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_122,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_123 [5] = {
+ 0x00,
+ 0x08,
+ 0x36,
+ 0x41,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_123 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_123,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_124 [5] = {
+ 0x00,
+ 0x00,
+ 0x77,
+ 0x00,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_124 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_124,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_125 [5] = {
+ 0x00,
+ 0x41,
+ 0x36,
+ 0x08,
+ 0x00
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_125 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_125,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_126 [5] = {
+ 0x08,
+ 0x04,
+ 0x08,
+ 0x10,
+ 0x08
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_126 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_126,
+};
+
+const unsigned char bitmap_hp_fixed_5_7_127 [5] = {
+ 0x2a,
+ 0x55,
+ 0x2a,
+ 0x55,
+ 0x2a
+};
+const struct disp_font_glyph glyph_hp_fixed_5_7_127 = {
+ {5,7,0,0},
+ 5, 0, bitmap_hp_fixed_5_7_127,
+};
+
+const struct disp_font_base font_base_hp_fixed_5_7 = {
+ 1, /* trans */
+ {5, 7, 0, -1}, /* fbb w, h, x, y */
+ 7, 0, /* ascent, descent */
+ 0, /* default_char */
+ {&glyph_hp_fixed_5_7_0,
+ &glyph_hp_fixed_5_7_1,
+ &glyph_hp_fixed_5_7_2,
+ &glyph_hp_fixed_5_7_3,
+ &glyph_hp_fixed_5_7_4,
+ &glyph_hp_fixed_5_7_5,
+ &glyph_hp_fixed_5_7_6,
+ &glyph_hp_fixed_5_7_7,
+ &glyph_hp_fixed_5_7_8,
+ &glyph_hp_fixed_5_7_9,
+ &glyph_hp_fixed_5_7_10,
+ &glyph_hp_fixed_5_7_11,
+ &glyph_hp_fixed_5_7_12,
+ &glyph_hp_fixed_5_7_13,
+ &glyph_hp_fixed_5_7_14,
+ &glyph_hp_fixed_5_7_15,
+ &glyph_hp_fixed_5_7_16,
+ &glyph_hp_fixed_5_7_17,
+ &glyph_hp_fixed_5_7_18,
+ &glyph_hp_fixed_5_7_19,
+ &glyph_hp_fixed_5_7_20,
+ &glyph_hp_fixed_5_7_21,
+ &glyph_hp_fixed_5_7_22,
+ &glyph_hp_fixed_5_7_23,
+ &glyph_hp_fixed_5_7_24,
+ &glyph_hp_fixed_5_7_25,
+ &glyph_hp_fixed_5_7_26,
+ &glyph_hp_fixed_5_7_27,
+ &glyph_hp_fixed_5_7_28,
+ &glyph_hp_fixed_5_7_29,
+ &glyph_hp_fixed_5_7_30,
+ &glyph_hp_fixed_5_7_31,
+ &glyph_hp_fixed_5_7_32,
+ &glyph_hp_fixed_5_7_33,
+ &glyph_hp_fixed_5_7_34,
+ &glyph_hp_fixed_5_7_35,
+ &glyph_hp_fixed_5_7_36,
+ &glyph_hp_fixed_5_7_37,
+ &glyph_hp_fixed_5_7_38,
+ &glyph_hp_fixed_5_7_39,
+ &glyph_hp_fixed_5_7_40,
+ &glyph_hp_fixed_5_7_41,
+ &glyph_hp_fixed_5_7_42,
+ &glyph_hp_fixed_5_7_43,
+ &glyph_hp_fixed_5_7_44,
+ &glyph_hp_fixed_5_7_45,
+ &glyph_hp_fixed_5_7_46,
+ &glyph_hp_fixed_5_7_47,
+ &glyph_hp_fixed_5_7_48,
+ &glyph_hp_fixed_5_7_49,
+ &glyph_hp_fixed_5_7_50,
+ &glyph_hp_fixed_5_7_51,
+ &glyph_hp_fixed_5_7_52,
+ &glyph_hp_fixed_5_7_53,
+ &glyph_hp_fixed_5_7_54,
+ &glyph_hp_fixed_5_7_55,
+ &glyph_hp_fixed_5_7_56,
+ &glyph_hp_fixed_5_7_57,
+ &glyph_hp_fixed_5_7_58,
+ &glyph_hp_fixed_5_7_59,
+ &glyph_hp_fixed_5_7_60,
+ &glyph_hp_fixed_5_7_61,
+ &glyph_hp_fixed_5_7_62,
+ &glyph_hp_fixed_5_7_63,
+ &glyph_hp_fixed_5_7_64,
+ &glyph_hp_fixed_5_7_65,
+ &glyph_hp_fixed_5_7_66,
+ &glyph_hp_fixed_5_7_67,
+ &glyph_hp_fixed_5_7_68,
+ &glyph_hp_fixed_5_7_69,
+ &glyph_hp_fixed_5_7_70,
+ &glyph_hp_fixed_5_7_71,
+ &glyph_hp_fixed_5_7_72,
+ &glyph_hp_fixed_5_7_73,
+ &glyph_hp_fixed_5_7_74,
+ &glyph_hp_fixed_5_7_75,
+ &glyph_hp_fixed_5_7_76,
+ &glyph_hp_fixed_5_7_77,
+ &glyph_hp_fixed_5_7_78,
+ &glyph_hp_fixed_5_7_79,
+ &glyph_hp_fixed_5_7_80,
+ &glyph_hp_fixed_5_7_81,
+ &glyph_hp_fixed_5_7_82,
+ &glyph_hp_fixed_5_7_83,
+ &glyph_hp_fixed_5_7_84,
+ &glyph_hp_fixed_5_7_85,
+ &glyph_hp_fixed_5_7_86,
+ &glyph_hp_fixed_5_7_87,
+ &glyph_hp_fixed_5_7_88,
+ &glyph_hp_fixed_5_7_89,
+ &glyph_hp_fixed_5_7_90,
+ &glyph_hp_fixed_5_7_91,
+ &glyph_hp_fixed_5_7_92,
+ &glyph_hp_fixed_5_7_93,
+ &glyph_hp_fixed_5_7_94,
+ &glyph_hp_fixed_5_7_95,
+ &glyph_hp_fixed_5_7_96,
+ &glyph_hp_fixed_5_7_97,
+ &glyph_hp_fixed_5_7_98,
+ &glyph_hp_fixed_5_7_99,
+ &glyph_hp_fixed_5_7_100,
+ &glyph_hp_fixed_5_7_101,
+ &glyph_hp_fixed_5_7_102,
+ &glyph_hp_fixed_5_7_103,
+ &glyph_hp_fixed_5_7_104,
+ &glyph_hp_fixed_5_7_105,
+ &glyph_hp_fixed_5_7_106,
+ &glyph_hp_fixed_5_7_107,
+ &glyph_hp_fixed_5_7_108,
+ &glyph_hp_fixed_5_7_109,
+ &glyph_hp_fixed_5_7_110,
+ &glyph_hp_fixed_5_7_111,
+ &glyph_hp_fixed_5_7_112,
+ &glyph_hp_fixed_5_7_113,
+ &glyph_hp_fixed_5_7_114,
+ &glyph_hp_fixed_5_7_115,
+ &glyph_hp_fixed_5_7_116,
+ &glyph_hp_fixed_5_7_117,
+ &glyph_hp_fixed_5_7_118,
+ &glyph_hp_fixed_5_7_119,
+ &glyph_hp_fixed_5_7_120,
+ &glyph_hp_fixed_5_7_121,
+ &glyph_hp_fixed_5_7_122,
+ &glyph_hp_fixed_5_7_123,
+ &glyph_hp_fixed_5_7_124,
+ &glyph_hp_fixed_5_7_125,
+ &glyph_hp_fixed_5_7_126,
+ &glyph_hp_fixed_5_7_127,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL}
+};
diff --git a/c/src/libchip/display/font_hcms29xx.h b/c/src/libchip/display/font_hcms29xx.h
new file mode 100644
index 0000000000..de2792317f
--- /dev/null
+++ b/c/src/libchip/display/font_hcms29xx.h
@@ -0,0 +1,42 @@
+/*===============================================================*\
+| Project: display driver for HCMS29xx |
++-----------------------------------------------------------------+
+| File: font_hcms29xx.h |
++-----------------------------------------------------------------+
+| Copyright (c) 2008 |
+| Embedded Brains GmbH |
+| Obere Lagerstr. 30 |
+| D-82178 Puchheim |
+| Germany |
+| rtems@embedded-brains.de |
++-----------------------------------------------------------------+
+| The license and distribution terms for this file may be |
+| found in the file LICENSE in this distribution or at |
+| |
+| http://www.rtems.com/license/LICENSE. |
+| |
++-----------------------------------------------------------------+
+| This file declares the 5x7 bit font used in disp_hcms29xx |
++-----------------------------------------------------------------+
+| $Id$
+\*===============================================================*/
+
+#ifndef FONT_HCMS29XX_H
+#define FONT_HCMS29XX_H
+
+#include "disp_fonts.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern disp_font_t font_hcms29xx;
+
+extern const struct disp_font_base font_hcms29xx_base;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* not defined FONT_HCMS29XX_H */
diff --git a/c/src/libchip/preinstall.am b/c/src/libchip/preinstall.am
index d7d7824bd8..ab3f06ea1e 100644
--- a/c/src/libchip/preinstall.am
+++ b/c/src/libchip/preinstall.am
@@ -35,6 +35,11 @@ $(PROJECT_INCLUDE)/libchip/$(dirstamp):
PREINSTALL_DIRS += $(PROJECT_INCLUDE)/libchip/$(dirstamp)
endif
if LIBCHIP
+$(PROJECT_INCLUDE)/libchip/disp_hcms29xx.h: display/disp_hcms29xx.h $(PROJECT_INCLUDE)/libchip/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/disp_hcms29xx.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/disp_hcms29xx.h
+endif
+if LIBCHIP
$(PROJECT_INCLUDE)/libchip/am29lv160.h: flash/am29lv160.h $(PROJECT_INCLUDE)/libchip/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/am29lv160.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/am29lv160.h