diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-07-11 10:03:19 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-07-11 10:03:19 +0000 |
commit | 80a0ae82484749af38a490dea139286e95a060eb (patch) | |
tree | 9e8678f05247c61f7dd1f742f1f8117fa4b544c6 /c/src/libchip | |
parent | adapted powerpc exception code (diff) | |
download | rtems-80a0ae82484749af38a490dea139286e95a060eb.tar.bz2 |
add display driver for HCMS* SPI displays
Diffstat (limited to 'c/src/libchip')
-rw-r--r-- | c/src/libchip/Makefile.am | 9 | ||||
-rw-r--r-- | c/src/libchip/display/disp_fonts.h | 37 | ||||
-rw-r--r-- | c/src/libchip/display/disp_hcms29xx.c | 942 | ||||
-rw-r--r-- | c/src/libchip/display/disp_hcms29xx.h | 69 | ||||
-rw-r--r-- | c/src/libchip/display/font_hcms29xx.c | 1824 | ||||
-rw-r--r-- | c/src/libchip/display/font_hcms29xx.h | 42 | ||||
-rw-r--r-- | c/src/libchip/preinstall.am | 5 |
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 |