mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-03-09 15:40:20 +00:00
Fix for RUTX platform
This commit is contained in:
parent
ccdb64ad45
commit
59bc57d5d5
7254 changed files with 1810270 additions and 7 deletions
245
root/package/utils/sysupgrade-helper/src/board/cogent/lcd.c
Normal file
245
root/package/utils/sysupgrade-helper/src/board/cogent/lcd.c
Normal file
|
|
@ -0,0 +1,245 @@
|
|||
/* most of this is taken from the file */
|
||||
/* hal/powerpc/cogent/current/src/hal_diag.c in the */
|
||||
/* Cygnus eCos source. Here is the copyright notice: */
|
||||
/* */
|
||||
/*============================================================================= */
|
||||
/* */
|
||||
/* hal_diag.c */
|
||||
/* */
|
||||
/* HAL diagnostic output code */
|
||||
/* */
|
||||
/*============================================================================= */
|
||||
/*####COPYRIGHTBEGIN#### */
|
||||
/* */
|
||||
/* ------------------------------------------- */
|
||||
/* The contents of this file are subject to the Cygnus eCos Public License */
|
||||
/* Version 1.0 (the "License"); you may not use this file except in */
|
||||
/* compliance with the License. You may obtain a copy of the License at */
|
||||
/* http://sourceware.cygnus.com/ecos */
|
||||
/* */
|
||||
/* Software distributed under the License is distributed on an "AS IS" */
|
||||
/* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the */
|
||||
/* License for the specific language governing rights and limitations under */
|
||||
/* the License. */
|
||||
/* */
|
||||
/* The Original Code is eCos - Embedded Cygnus Operating System, released */
|
||||
/* September 30, 1998. */
|
||||
/* */
|
||||
/* The Initial Developer of the Original Code is Cygnus. Portions created */
|
||||
/* by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. */
|
||||
/* ------------------------------------------- */
|
||||
/* */
|
||||
/*####COPYRIGHTEND#### */
|
||||
/*============================================================================= */
|
||||
/*#####DESCRIPTIONBEGIN#### */
|
||||
/* */
|
||||
/* Author(s): nickg, jskov */
|
||||
/* Contributors: nickg, jskov */
|
||||
/* Date: 1999-03-23 */
|
||||
/* Purpose: HAL diagnostic output */
|
||||
/* Description: Implementations of HAL diagnostic output support. */
|
||||
/* */
|
||||
/*####DESCRIPTIONEND#### */
|
||||
/* */
|
||||
/*============================================================================= */
|
||||
|
||||
/*----------------------------------------------------------------------------- */
|
||||
/* Cogent board specific LCD code */
|
||||
|
||||
#include <common.h>
|
||||
#include <stdarg.h>
|
||||
#include <board/cogent/lcd.h>
|
||||
|
||||
static char lines[2][LCD_LINE_LENGTH+1];
|
||||
static int curline;
|
||||
static int linepos;
|
||||
static int heartbeat_active;
|
||||
/* make the next two strings exactly LCD_LINE_LENGTH (16) chars long */
|
||||
/* pad to the right with spaces if necessary */
|
||||
static char init_line0[LCD_LINE_LENGTH+1] = "U-Boot Cogent ";
|
||||
static char init_line1[LCD_LINE_LENGTH+1] = "mjj, 11 Aug 2000";
|
||||
|
||||
static inline unsigned char
|
||||
lcd_read_status(cma_mb_lcd *clp)
|
||||
{
|
||||
/* read the Busy Status Register */
|
||||
return (cma_mb_reg_read(&clp->lcd_bsr));
|
||||
}
|
||||
|
||||
static inline void
|
||||
lcd_wait_not_busy(cma_mb_lcd *clp)
|
||||
{
|
||||
/*
|
||||
* wait for not busy
|
||||
* Note: It seems that the LCD isn't quite ready to process commands
|
||||
* when it clears the BUSY flag. Reading the status address an extra
|
||||
* time seems to give it enough breathing room.
|
||||
*/
|
||||
|
||||
while (lcd_read_status(clp) & LCD_STAT_BUSY)
|
||||
;
|
||||
|
||||
(void)lcd_read_status(clp);
|
||||
}
|
||||
|
||||
static inline void
|
||||
lcd_write_command(cma_mb_lcd *clp, unsigned char cmd)
|
||||
{
|
||||
lcd_wait_not_busy(clp);
|
||||
|
||||
/* write the Command Register */
|
||||
cma_mb_reg_write(&clp->lcd_cmd, cmd);
|
||||
}
|
||||
|
||||
static inline void
|
||||
lcd_write_data(cma_mb_lcd *clp, unsigned char data)
|
||||
{
|
||||
lcd_wait_not_busy(clp);
|
||||
|
||||
/* write the Current Character Register */
|
||||
cma_mb_reg_write(&clp->lcd_ccr, data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
lcd_dis(int addr, char *string)
|
||||
{
|
||||
cma_mb_lcd *clp = (cma_mb_lcd *)CMA_MB_LCD_BASE;
|
||||
int pos, linelen;
|
||||
|
||||
linelen = LCD_LINE_LENGTH;
|
||||
if (heartbeat_active && addr == LCD_LINE0)
|
||||
linelen--;
|
||||
|
||||
lcd_write_command(clp, LCD_CMD_ADD + addr);
|
||||
for (pos = 0; *string != '\0' && pos < linelen; pos++)
|
||||
lcd_write_data(clp, *string++);
|
||||
}
|
||||
|
||||
void
|
||||
lcd_init(void)
|
||||
{
|
||||
cma_mb_lcd *clp = (cma_mb_lcd *)CMA_MB_LCD_BASE;
|
||||
int i;
|
||||
|
||||
/* configure the lcd for 8 bits/char, 2 lines and 5x7 dot matrix */
|
||||
lcd_write_command(clp, LCD_CMD_MODE);
|
||||
|
||||
/* turn the LCD display on */
|
||||
lcd_write_command(clp, LCD_CMD_DON);
|
||||
|
||||
curline = 0;
|
||||
linepos = 0;
|
||||
|
||||
for (i = 0; i < LCD_LINE_LENGTH; i++) {
|
||||
lines[0][i] = init_line0[i];
|
||||
lines[1][i] = init_line1[i];
|
||||
}
|
||||
|
||||
lines[0][LCD_LINE_LENGTH] = lines[1][LCD_LINE_LENGTH] = 0;
|
||||
|
||||
lcd_dis(LCD_LINE0, lines[0]);
|
||||
lcd_dis(LCD_LINE1, lines[1]);
|
||||
|
||||
printf("HD44780 2 line x %d char display\n", LCD_LINE_LENGTH);
|
||||
}
|
||||
|
||||
void
|
||||
lcd_write_char(const char c)
|
||||
{
|
||||
int i, linelen;
|
||||
|
||||
/* ignore CR */
|
||||
if (c == '\r')
|
||||
return;
|
||||
|
||||
linelen = LCD_LINE_LENGTH;
|
||||
if (heartbeat_active && curline == 0)
|
||||
linelen--;
|
||||
|
||||
if (c == '\n') {
|
||||
lcd_dis(LCD_LINE0, &lines[curline^1][0]);
|
||||
lcd_dis(LCD_LINE1, &lines[curline][0]);
|
||||
|
||||
/* Do a line feed */
|
||||
curline ^= 1;
|
||||
linelen = LCD_LINE_LENGTH;
|
||||
if (heartbeat_active && curline == 0)
|
||||
linelen--;
|
||||
linepos = 0;
|
||||
|
||||
for (i = 0; i < linelen; i++)
|
||||
lines[curline][i] = ' ';
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Only allow to be output if there is room on the LCD line */
|
||||
if (linepos < linelen)
|
||||
lines[curline][linepos++] = c;
|
||||
}
|
||||
|
||||
void
|
||||
lcd_flush(void)
|
||||
{
|
||||
lcd_dis(LCD_LINE1, &lines[curline][0]);
|
||||
}
|
||||
|
||||
void
|
||||
lcd_write_string(const char *s)
|
||||
{
|
||||
char *p;
|
||||
|
||||
for (p = (char *)s; *p != '\0'; p++)
|
||||
lcd_write_char(*p);
|
||||
}
|
||||
|
||||
void
|
||||
lcd_printf(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf[CONFIG_SYS_PBSIZE];
|
||||
|
||||
va_start(args, fmt);
|
||||
(void)vsprintf(buf, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
lcd_write_string(buf);
|
||||
}
|
||||
|
||||
void
|
||||
lcd_heartbeat(void)
|
||||
{
|
||||
cma_mb_lcd *clp = (cma_mb_lcd *)CMA_MB_LCD_BASE;
|
||||
#if 0
|
||||
static char rotchars[] = { '|', '/', '-', '\\' };
|
||||
#else
|
||||
/* HD44780 Rom Code A00 has no backslash */
|
||||
static char rotchars[] = { '|', '/', '-', '\315' };
|
||||
#endif
|
||||
static int rotator_index = 0;
|
||||
|
||||
heartbeat_active = 1;
|
||||
|
||||
/* write the address */
|
||||
lcd_write_command(clp, LCD_CMD_ADD + LCD_LINE0 + (LCD_LINE_LENGTH - 1));
|
||||
|
||||
/* write the next char in the sequence */
|
||||
lcd_write_data(clp, rotchars[rotator_index]);
|
||||
|
||||
if (++rotator_index >= (sizeof rotchars / sizeof rotchars[0]))
|
||||
rotator_index = 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SHOW_ACTIVITY
|
||||
void board_show_activity (ulong timestamp)
|
||||
{
|
||||
#ifdef CONFIG_STATUS_LED
|
||||
if ((timestamp % (CONFIG_SYS_HZ / 2) == 0)
|
||||
lcd_heartbeat ();
|
||||
#endif
|
||||
}
|
||||
|
||||
void show_activity(int arg)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue