Extentions SCLD test; SCLD CODEC and LCD1602 driver bug fixes
This commit is contained in:
parent
3cbb22038a
commit
777e0c5da0
@ -4803,3 +4803,5 @@
|
||||
cursor position (2013-5-25).
|
||||
* include/nuttx/lcd/slcd_ioctl.h: Moved ioctls commands and structures
|
||||
from slcd_codec.h (2013-5-25)
|
||||
* libc/misc/lib_slcdencode.c and lib_slcddecode.c: Several encoding
|
||||
and decoding bug fixes (2013-5-26)
|
||||
|
@ -665,15 +665,12 @@ Configuration sub-directories
|
||||
|
||||
To enable LCD debug output:
|
||||
|
||||
Device Drivers:
|
||||
CONFIG_LCD=y : (Needed to enable LCD debug)
|
||||
|
||||
Build Setup:
|
||||
CONFIG_DEBUG=y : Enable debug features
|
||||
CONFIG_DEBUG_VERBOSE=y : Enable LCD debug
|
||||
|
||||
NOTE: At this point in time, testing of the SLCD is very limited because
|
||||
there is not much in apps/examples/slcd. Certainly there are more bugs
|
||||
to be found. There are also many segment-encoded glyphs in stm32_lcd.c
|
||||
But there is a basically functional driver with a working test setup
|
||||
that can be extended if you want a fully functional SLCD driver.
|
||||
to be found. But there is a basically functional driver with a working
|
||||
test setup that can be extended if you want a fully functional LCD1602
|
||||
driver.
|
||||
|
@ -73,6 +73,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <semaphore.h>
|
||||
#include <ctype.h>
|
||||
#include <poll.h>
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
@ -122,7 +123,6 @@
|
||||
|
||||
/* LCD **********************************************************************/
|
||||
|
||||
|
||||
#define LCD_NROWS 2
|
||||
#define LCD_NCOLUMNS 16
|
||||
#define LCD_NCHARS (LCD_NROWS * LCD_NCOLUMNS)
|
||||
@ -225,8 +225,9 @@ static struct lcd1602_2 g_lcd1602;
|
||||
static void lcd_dumpstate(FAR const char *msg)
|
||||
{
|
||||
uint8_t buffer[LCD_NCOLUMNS];
|
||||
uint8_t row;
|
||||
uint8_t column;
|
||||
uint8_t ch;
|
||||
int row;
|
||||
int column;
|
||||
|
||||
lcdvdbg("%s:\n", msg);
|
||||
lcdvdbg(" currow: %d curcol: %d\n",
|
||||
@ -234,10 +235,11 @@ static void lcd_dumpstate(FAR const char *msg)
|
||||
|
||||
for (row = 0, column = 0; row < LCD_NROWS; )
|
||||
{
|
||||
buffer[column] = lcd_readch(row, column);
|
||||
ch = lcd_readch(row, column);
|
||||
buffer[column] = isprint(ch) ? ch : '.';
|
||||
if (++column >= LCD_NCOLUMNS)
|
||||
{
|
||||
lcdvdbg(" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
|
||||
lcdvdbg(" [%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c]\n",
|
||||
buffer[0], buffer[1], buffer[2], buffer[3],
|
||||
buffer[4], buffer[5], buffer[6], buffer[7],
|
||||
buffer[8], buffer[9], buffer[10], buffer[11],
|
||||
@ -551,9 +553,9 @@ static void lcd_action(enum slcdcode_e code, uint8_t count)
|
||||
{
|
||||
/* Don't permit movement past the bottom of the SLCD */
|
||||
|
||||
if (g_lcd1602.curcol < (LCD_NCOLUMNS - 1))
|
||||
if (g_lcd1602.currow < (LCD_NCOLUMNS - 1))
|
||||
{
|
||||
g_lcd1602.curcol++;
|
||||
g_lcd1602.currow++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -52,6 +52,21 @@
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
/* Configuration ************************************************************/
|
||||
/* Define CONFIG_DEBUG_LCD to enable detailed LCD debug output. Verbose
|
||||
* debug must also be enabled.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_DEBUG
|
||||
# undef CONFIG_DEBUG_VERBOSE
|
||||
# undef CONFIG_DEBUG_LCD
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DEBUG_VERBOSE
|
||||
# undef CONFIG_DEBUG_LCD
|
||||
#endif
|
||||
|
||||
/* Indices, counts, helper macros ******************************************/
|
||||
|
||||
#define NDX_ESC 0
|
||||
#define NDX_BRACKET 1
|
||||
@ -74,6 +89,16 @@
|
||||
#define IS_CODE(a) (((a) >= CODE_MIN) && ((a) <= CODE_MAX))
|
||||
#define CODE_RETURN(a) (enum slcdcode_e)((a) - 'A')
|
||||
|
||||
/* Debug ********************************************************************/
|
||||
|
||||
#ifdef CONFIG_DEBUG_LCD
|
||||
# define lcddbg dbg
|
||||
# define lcdvdbg vdbg
|
||||
#else
|
||||
# define lcddbg(x...)
|
||||
# define lcdvdbg(x...)
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
@ -239,6 +264,7 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
|
||||
* return the following characters later.
|
||||
*/
|
||||
|
||||
lcddbg("Parsing failed: ESC followed by %02x\n", ch);
|
||||
return slcd_reget(state, pch, parg);
|
||||
}
|
||||
|
||||
@ -269,6 +295,8 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
|
||||
|
||||
if (code < (int)FIRST_SLCDCODE || code > (int)LAST_SLCDCODE)
|
||||
{
|
||||
lcddbg("Parsing failed: ESC-L followed by %02x\n", ch);
|
||||
|
||||
/* Not a special command code.. put the character in the reget
|
||||
* buffer.
|
||||
*/
|
||||
@ -310,6 +338,9 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
|
||||
* following characters later.
|
||||
*/
|
||||
|
||||
lcddbg("Parsing failed: ESC-L-%c followed by %02x\n",
|
||||
state->buf[NDX_COUNTH], ch);
|
||||
|
||||
return slcd_reget(state, pch, parg);
|
||||
}
|
||||
|
||||
@ -342,7 +373,7 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
|
||||
*/
|
||||
|
||||
code = CODE_RETURN(ch);
|
||||
count = slcd_nibble(state->buf[NDX_COUNTH]) << 4;
|
||||
count = slcd_nibble(state->buf[NDX_COUNTH]) << 4 |
|
||||
slcd_nibble(state->buf[NDX_COUNTL]);
|
||||
|
||||
/* Verify the special CLCD action code */
|
||||
@ -353,6 +384,9 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
|
||||
* of the characters later.
|
||||
*/
|
||||
|
||||
lcddbg("Parsing failed: ESC-L-%c-%c followed by %02x, count=%d\n",
|
||||
state->buf[NDX_COUNTH], state->buf[NDX_COUNTL], ch, count);
|
||||
|
||||
return slcd_reget(state, pch, parg);
|
||||
}
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ static uint8_t slcd_nibble(uint8_t binary)
|
||||
{
|
||||
binary &= 0x0f;
|
||||
|
||||
if (binary > 9)
|
||||
if (binary <= 9)
|
||||
{
|
||||
return '0' + binary;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user