mirror of
https://github.com/apache/nuttx.git
synced 2026-06-02 17:48:54 +08:00
drivers/lcd: Reuse lib_meminstream_s as much as possible
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
committed by
Petro Karashchenko
parent
055f1f33eb
commit
b526e06de1
@@ -226,15 +226,6 @@
|
|||||||
* Private Type Definition
|
* Private Type Definition
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* SLCD incoming stream structure */
|
|
||||||
|
|
||||||
struct slcd_instream_s
|
|
||||||
{
|
|
||||||
struct lib_instream_s stream;
|
|
||||||
const char *buffer;
|
|
||||||
ssize_t nbytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Global SLCD state */
|
/* Global SLCD state */
|
||||||
|
|
||||||
struct sam_slcdstate_s
|
struct sam_slcdstate_s
|
||||||
@@ -514,30 +505,6 @@ static inline void slcd_clrdp(uint8_t curpos)
|
|||||||
slcd_clrpixel(&g_binfo[curpos + 3]);
|
slcd_clrpixel(&g_binfo[curpos + 3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: slcd_getstream
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Get one character from the keyboard.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int slcd_getstream(struct lib_instream_s *instream)
|
|
||||||
{
|
|
||||||
struct slcd_instream_s *slcdstream =
|
|
||||||
(struct slcd_instream_s *)instream;
|
|
||||||
|
|
||||||
DEBUGASSERT(slcdstream && slcdstream->buffer);
|
|
||||||
if (slcdstream->nbytes > 0)
|
|
||||||
{
|
|
||||||
slcdstream->nbytes--;
|
|
||||||
slcdstream->stream.nget++;
|
|
||||||
return (int)*slcdstream->buffer++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: slcd_getcontrast
|
* Name: slcd_getcontrast
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -899,7 +866,7 @@ static ssize_t slcd_read(struct file *filep,
|
|||||||
static ssize_t slcd_write(struct file *filep,
|
static ssize_t slcd_write(struct file *filep,
|
||||||
const char *buffer, size_t len)
|
const char *buffer, size_t len)
|
||||||
{
|
{
|
||||||
struct slcd_instream_s instream;
|
struct lib_meminstream_s instream;
|
||||||
struct slcdstate_s state;
|
struct slcdstate_s state;
|
||||||
enum slcdret_e result;
|
enum slcdret_e result;
|
||||||
uint8_t ch;
|
uint8_t ch;
|
||||||
@@ -908,10 +875,7 @@ static ssize_t slcd_write(struct file *filep,
|
|||||||
|
|
||||||
/* Initialize the stream for use with the SLCD CODEC */
|
/* Initialize the stream for use with the SLCD CODEC */
|
||||||
|
|
||||||
instream.stream.getc = slcd_getstream;
|
lib_meminstream(&instream, buffer, len);
|
||||||
instream.stream.nget = 0;
|
|
||||||
instream.buffer = buffer;
|
|
||||||
instream.nbytes = len;
|
|
||||||
|
|
||||||
/* Initialize the SLCD decode state buffer */
|
/* Initialize the SLCD decode state buffer */
|
||||||
|
|
||||||
@@ -920,8 +884,8 @@ static ssize_t slcd_write(struct file *filep,
|
|||||||
/* Decode and process every byte in the input buffer */
|
/* Decode and process every byte in the input buffer */
|
||||||
|
|
||||||
options = 0;
|
options = 0;
|
||||||
while ((result = slcd_decode(&instream.stream, &state, &ch, &count)) !=
|
while ((result = slcd_decode(&instream.public,
|
||||||
SLCDRET_EOF)
|
&state, &ch, &count)) != SLCDRET_EOF)
|
||||||
{
|
{
|
||||||
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
||||||
result, ch, count);
|
result, ch, count);
|
||||||
|
|||||||
@@ -285,15 +285,6 @@
|
|||||||
* Private Type Definition
|
* Private Type Definition
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* SLCD incoming stream structure */
|
|
||||||
|
|
||||||
struct slcd_instream_s
|
|
||||||
{
|
|
||||||
struct lib_instream_s stream;
|
|
||||||
const char *buffer;
|
|
||||||
ssize_t nbytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Global SLCD state */
|
/* Global SLCD state */
|
||||||
|
|
||||||
struct stm32_slcdstate_s
|
struct stm32_slcdstate_s
|
||||||
@@ -530,30 +521,6 @@ static void slcd_clear(void)
|
|||||||
putreg32(1, SLCD_SR_UDR_BB);
|
putreg32(1, SLCD_SR_UDR_BB);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: slcd_getstream
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Get one character from the keyboard.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int slcd_getstream(struct lib_instream_s *instream)
|
|
||||||
{
|
|
||||||
struct slcd_instream_s *slcdstream = (struct slcd_instream_s *)
|
|
||||||
instream;
|
|
||||||
|
|
||||||
DEBUGASSERT(slcdstream && slcdstream->buffer);
|
|
||||||
if (slcdstream->nbytes > 0)
|
|
||||||
{
|
|
||||||
slcdstream->nbytes--;
|
|
||||||
slcdstream->stream.nget++;
|
|
||||||
return (int)*slcdstream->buffer++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: slcd_getcontrast
|
* Name: slcd_getcontrast
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -1165,7 +1132,7 @@ static ssize_t slcd_read(struct file *filep, char *buffer,
|
|||||||
static ssize_t slcd_write(struct file *filep,
|
static ssize_t slcd_write(struct file *filep,
|
||||||
const char *buffer, size_t len)
|
const char *buffer, size_t len)
|
||||||
{
|
{
|
||||||
struct slcd_instream_s instream;
|
struct lib_meminstream_s instream;
|
||||||
struct slcdstate_s state;
|
struct slcdstate_s state;
|
||||||
enum slcdret_e result;
|
enum slcdret_e result;
|
||||||
uint8_t ch;
|
uint8_t ch;
|
||||||
@@ -1175,17 +1142,14 @@ static ssize_t slcd_write(struct file *filep,
|
|||||||
|
|
||||||
/* Initialize the stream for use with the SLCD CODEC */
|
/* Initialize the stream for use with the SLCD CODEC */
|
||||||
|
|
||||||
instream.stream.getc = slcd_getstream;
|
lib_meminstream(&instream, buffer, len);
|
||||||
instream.stream.nget = 0;
|
|
||||||
instream.buffer = buffer;
|
|
||||||
instream.nbytes = len;
|
|
||||||
|
|
||||||
/* Prime the pump. This is messy, but necessary to handle decoration on a
|
/* Prime the pump. This is messy, but necessary to handle decoration on a
|
||||||
* character based on any following period or colon.
|
* character based on any following period or colon.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
memset(&state, 0, sizeof(struct slcdstate_s));
|
memset(&state, 0, sizeof(struct slcdstate_s));
|
||||||
result = slcd_decode(&instream.stream, &state, &prev, &count);
|
result = slcd_decode(&instream.public, &state, &prev, &count);
|
||||||
|
|
||||||
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
||||||
result, prev, count);
|
result, prev, count);
|
||||||
@@ -1209,8 +1173,8 @@ static ssize_t slcd_write(struct file *filep,
|
|||||||
|
|
||||||
/* Now decode and process every byte in the input buffer */
|
/* Now decode and process every byte in the input buffer */
|
||||||
|
|
||||||
while ((result = slcd_decode(&instream.stream, &state, &ch, &count)) !=
|
while ((result = slcd_decode(&instream.public,
|
||||||
SLCDRET_EOF)
|
&state, &ch, &count)) != SLCDRET_EOF)
|
||||||
{
|
{
|
||||||
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
||||||
result, ch, count);
|
result, ch, count);
|
||||||
|
|||||||
@@ -119,15 +119,6 @@
|
|||||||
* Private Type Definition
|
* Private Type Definition
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* SLCD incoming stream structure */
|
|
||||||
|
|
||||||
struct lcd_instream_s
|
|
||||||
{
|
|
||||||
struct lib_instream_s stream;
|
|
||||||
const char *buffer;
|
|
||||||
ssize_t nbytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Global LCD state */
|
/* Global LCD state */
|
||||||
|
|
||||||
struct lcd1602_2
|
struct lcd1602_2
|
||||||
@@ -147,7 +138,7 @@ struct lcd1602_2
|
|||||||
#ifdef CONFIG_DEBUG_LCD_INFO
|
#ifdef CONFIG_DEBUG_LCD_INFO
|
||||||
static void lcd_dumpstate(const char *msg);
|
static void lcd_dumpstate(const char *msg);
|
||||||
static void lcd_dumpstream(const char *msg,
|
static void lcd_dumpstream(const char *msg,
|
||||||
const struct lcd_instream_s *stream);
|
const struct lib_meminstream_s *stream);
|
||||||
#else
|
#else
|
||||||
# define lcd_dumpstate(msg)
|
# define lcd_dumpstate(msg)
|
||||||
# define lcd_dumpstream(msg, stream)
|
# define lcd_dumpstream(msg, stream)
|
||||||
@@ -245,39 +236,15 @@ static void lcd_dumpstate(const char *msg)
|
|||||||
|
|
||||||
#ifdef CONFIG_DEBUG_LCD_INFO
|
#ifdef CONFIG_DEBUG_LCD_INFO
|
||||||
static void lcd_dumpstream(const char *msg,
|
static void lcd_dumpstream(const char *msg,
|
||||||
const struct lcd_instream_s *stream)
|
const struct lib_meminstream_s *stream)
|
||||||
{
|
{
|
||||||
lcdinfo("%s:\n", msg);
|
lcdinfo("%s:\n", msg);
|
||||||
lcdinfo(" nget: %d nbytes: %d\n",
|
lcdinfo(" nget: %d nbytes: %d\n",
|
||||||
stream->stream.nget, stream->nbytes);
|
stream->public.nget, stream->buflen);
|
||||||
lib_dumpbuffer("STREAM", stream->buffer, stream->nbytes);
|
lib_dumpbuffer("STREAM", stream->buffer, stream->buflen);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: lcd_getstream
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Get one character from the keyboard.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int lcd_getstream(struct lib_instream_s *instream)
|
|
||||||
{
|
|
||||||
struct lcd_instream_s *lcdstream =
|
|
||||||
(struct lcd_instream_s *)instream;
|
|
||||||
|
|
||||||
DEBUGASSERT(lcdstream && lcdstream->buffer);
|
|
||||||
if (lcdstream->nbytes > 0)
|
|
||||||
{
|
|
||||||
lcdstream->nbytes--;
|
|
||||||
lcdstream->stream.nget++;
|
|
||||||
return (int)*lcdstream->buffer++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: lcd_brightness
|
* Name: lcd_brightness
|
||||||
*
|
*
|
||||||
@@ -829,7 +796,7 @@ static ssize_t lcd_read(struct file *filep, char *buffer, size_t len)
|
|||||||
static ssize_t lcd_write(struct file *filep, const char *buffer,
|
static ssize_t lcd_write(struct file *filep, const char *buffer,
|
||||||
size_t len)
|
size_t len)
|
||||||
{
|
{
|
||||||
struct lcd_instream_s instream;
|
struct lib_meminstream_s instream;
|
||||||
struct slcdstate_s state;
|
struct slcdstate_s state;
|
||||||
enum slcdret_e result;
|
enum slcdret_e result;
|
||||||
uint8_t ch;
|
uint8_t ch;
|
||||||
@@ -837,18 +804,14 @@ static ssize_t lcd_write(struct file *filep, const char *buffer,
|
|||||||
|
|
||||||
/* Initialize the stream for use with the SLCD CODEC */
|
/* Initialize the stream for use with the SLCD CODEC */
|
||||||
|
|
||||||
instream.stream.getc = lcd_getstream;
|
lib_meminstream(&instream, buffer, len);
|
||||||
instream.stream.nget = 0;
|
|
||||||
instream.buffer = buffer;
|
|
||||||
instream.nbytes = len;
|
|
||||||
|
|
||||||
lcd_dumpstream("BEFORE WRITE", &instream);
|
lcd_dumpstream("BEFORE WRITE", &instream);
|
||||||
|
|
||||||
/* Now decode and process every byte in the input buffer */
|
/* Now decode and process every byte in the input buffer */
|
||||||
|
|
||||||
memset(&state, 0, sizeof(struct slcdstate_s));
|
memset(&state, 0, sizeof(struct slcdstate_s));
|
||||||
while ((result = slcd_decode(&instream.stream,
|
while ((result = slcd_decode(&instream.public,
|
||||||
&state, &ch, &count)) != SLCDRET_EOF)
|
&state, &ch, &count)) != SLCDRET_EOF)
|
||||||
{
|
{
|
||||||
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
lcdinfo("slcd_decode returned result=%d char=%d count=%d\n",
|
||||||
result, ch, count);
|
result, ch, count);
|
||||||
|
|||||||
@@ -111,13 +111,6 @@ struct ht16k33_dev_s
|
|||||||
mutex_t lock;
|
mutex_t lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lcd_instream_s
|
|
||||||
{
|
|
||||||
struct lib_instream_s stream;
|
|
||||||
FAR const char *buffer;
|
|
||||||
ssize_t nbytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Function Prototypes
|
* Private Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -706,29 +699,6 @@ static void lcd_codec_action(FAR struct ht16k33_dev_s *priv,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: lcd_getstream
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Get one character from the LCD codec stream.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int lcd_getstream(FAR struct lib_instream_s *instream)
|
|
||||||
{
|
|
||||||
FAR struct lcd_instream_s *lcdstream =
|
|
||||||
(FAR struct lcd_instream_s *)instream;
|
|
||||||
|
|
||||||
if (lcdstream->nbytes > 0)
|
|
||||||
{
|
|
||||||
lcdstream->nbytes--;
|
|
||||||
lcdstream->stream.nget++;
|
|
||||||
return (int)*lcdstream->buffer++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: lcd_init
|
* Name: lcd_init
|
||||||
*
|
*
|
||||||
@@ -798,7 +768,7 @@ static ssize_t ht16k33_write(FAR struct file *filep, FAR const char *buffer,
|
|||||||
{
|
{
|
||||||
FAR struct inode *inode = filep->f_inode;
|
FAR struct inode *inode = filep->f_inode;
|
||||||
FAR struct ht16k33_dev_s *priv = inode->i_private;
|
FAR struct ht16k33_dev_s *priv = inode->i_private;
|
||||||
struct lcd_instream_s instream;
|
struct lib_meminstream_s instream;
|
||||||
struct slcdstate_s state;
|
struct slcdstate_s state;
|
||||||
enum slcdret_e result;
|
enum slcdret_e result;
|
||||||
uint8_t ch;
|
uint8_t ch;
|
||||||
@@ -808,16 +778,13 @@ static ssize_t ht16k33_write(FAR struct file *filep, FAR const char *buffer,
|
|||||||
|
|
||||||
/* Initialize the stream for use with the SLCD CODEC */
|
/* Initialize the stream for use with the SLCD CODEC */
|
||||||
|
|
||||||
instream.stream.getc = lcd_getstream;
|
lib_meminstream(&instream, buffer, buflen);
|
||||||
instream.stream.nget = 0;
|
|
||||||
instream.buffer = buffer;
|
|
||||||
instream.nbytes = buflen;
|
|
||||||
|
|
||||||
/* Now decode and process every byte in the input buffer */
|
/* Now decode and process every byte in the input buffer */
|
||||||
|
|
||||||
memset(&state, 0, sizeof(struct slcdstate_s));
|
memset(&state, 0, sizeof(struct slcdstate_s));
|
||||||
while ((result = slcd_decode(&instream.stream, &state, &ch, &count)) !=
|
while ((result = slcd_decode(&instream.public,
|
||||||
SLCDRET_EOF)
|
&state, &ch, &count)) != SLCDRET_EOF)
|
||||||
{
|
{
|
||||||
/* Is there some pending scroll? */
|
/* Is there some pending scroll? */
|
||||||
|
|
||||||
|
|||||||
@@ -83,13 +83,6 @@ struct pcf8574_lcd_dev_s
|
|||||||
mutex_t lock; /* mutex */
|
mutex_t lock; /* mutex */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lcd_instream_s
|
|
||||||
{
|
|
||||||
struct lib_instream_s stream;
|
|
||||||
FAR const char *buffer;
|
|
||||||
ssize_t nbytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Function Prototypes
|
* Private Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -971,29 +964,6 @@ static void lcd_codec_action(FAR struct pcf8574_lcd_dev_s *priv,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: lcd_getstream
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Get one character from the LCD codec stream.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int lcd_getstream(FAR struct lib_instream_s *instream)
|
|
||||||
{
|
|
||||||
FAR struct lcd_instream_s *lcdstream =
|
|
||||||
(FAR struct lcd_instream_s *)instream;
|
|
||||||
|
|
||||||
if (lcdstream->nbytes > 0)
|
|
||||||
{
|
|
||||||
lcdstream->nbytes--;
|
|
||||||
lcdstream->stream.nget++;
|
|
||||||
return (int)*lcdstream->buffer++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: lcd_fpos_to_curpos
|
* Name: lcd_fpos_to_curpos
|
||||||
*
|
*
|
||||||
@@ -1214,7 +1184,7 @@ static ssize_t pcf8574_lcd_write(FAR struct file *filep,
|
|||||||
FAR struct inode *inode = filep->f_inode;
|
FAR struct inode *inode = filep->f_inode;
|
||||||
FAR struct pcf8574_lcd_dev_s *priv =
|
FAR struct pcf8574_lcd_dev_s *priv =
|
||||||
(FAR struct pcf8574_lcd_dev_s *)inode->i_private;
|
(FAR struct pcf8574_lcd_dev_s *)inode->i_private;
|
||||||
struct lcd_instream_s instream;
|
struct lib_meminstream_s instream;
|
||||||
uint8_t row;
|
uint8_t row;
|
||||||
uint8_t col;
|
uint8_t col;
|
||||||
struct slcdstate_s state;
|
struct slcdstate_s state;
|
||||||
@@ -1226,10 +1196,7 @@ static ssize_t pcf8574_lcd_write(FAR struct file *filep,
|
|||||||
|
|
||||||
/* Initialize the stream for use with the SLCD CODEC */
|
/* Initialize the stream for use with the SLCD CODEC */
|
||||||
|
|
||||||
instream.stream.getc = lcd_getstream;
|
lib_meminstream(&instream, buffer, buflen);
|
||||||
instream.stream.nget = 0;
|
|
||||||
instream.buffer = buffer;
|
|
||||||
instream.nbytes = buflen;
|
|
||||||
|
|
||||||
/* Get the current cursor position now; we'll keep track of it as we go */
|
/* Get the current cursor position now; we'll keep track of it as we go */
|
||||||
|
|
||||||
@@ -1238,8 +1205,8 @@ static ssize_t pcf8574_lcd_write(FAR struct file *filep,
|
|||||||
/* Now decode and process every byte in the input buffer */
|
/* Now decode and process every byte in the input buffer */
|
||||||
|
|
||||||
memset(&state, 0, sizeof(struct slcdstate_s));
|
memset(&state, 0, sizeof(struct slcdstate_s));
|
||||||
while ((result =
|
while ((result = slcd_decode(&instream.public,
|
||||||
slcd_decode(&instream.stream, &state, &ch, &count)) != SLCDRET_EOF)
|
&state, &ch, &count)) != SLCDRET_EOF)
|
||||||
{
|
{
|
||||||
if (result == SLCDRET_CHAR) /* A normal character was returned */
|
if (result == SLCDRET_CHAR) /* A normal character was returned */
|
||||||
{
|
{
|
||||||
|
|||||||
+4
-37
@@ -71,13 +71,6 @@ struct st7032_dev_s
|
|||||||
mutex_t lock;
|
mutex_t lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lcd_instream_s
|
|
||||||
{
|
|
||||||
struct lib_instream_s stream;
|
|
||||||
FAR const char *buffer;
|
|
||||||
ssize_t nbytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Function Prototypes
|
* Private Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -606,29 +599,6 @@ static void lcd_codec_action(FAR struct st7032_dev_s *priv,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: lcd_getstream
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Get one character from the LCD codec stream.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int lcd_getstream(FAR struct lib_instream_s *instream)
|
|
||||||
{
|
|
||||||
FAR struct lcd_instream_s *lcdstream =
|
|
||||||
(FAR struct lcd_instream_s *)instream;
|
|
||||||
|
|
||||||
if (lcdstream->nbytes > 0)
|
|
||||||
{
|
|
||||||
lcdstream->nbytes--;
|
|
||||||
lcdstream->stream.nget++;
|
|
||||||
return (int)*lcdstream->buffer++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: lcd_init
|
* Name: lcd_init
|
||||||
*
|
*
|
||||||
@@ -720,7 +690,7 @@ static ssize_t st7032_write(FAR struct file *filep, FAR const char *buffer,
|
|||||||
{
|
{
|
||||||
FAR struct inode *inode = filep->f_inode;
|
FAR struct inode *inode = filep->f_inode;
|
||||||
FAR struct st7032_dev_s *priv = inode->i_private;
|
FAR struct st7032_dev_s *priv = inode->i_private;
|
||||||
struct lcd_instream_s instream;
|
struct lib_meminstream_s instream;
|
||||||
struct slcdstate_s state;
|
struct slcdstate_s state;
|
||||||
enum slcdret_e result;
|
enum slcdret_e result;
|
||||||
uint8_t ch;
|
uint8_t ch;
|
||||||
@@ -730,16 +700,13 @@ static ssize_t st7032_write(FAR struct file *filep, FAR const char *buffer,
|
|||||||
|
|
||||||
/* Initialize the stream for use with the SLCD CODEC */
|
/* Initialize the stream for use with the SLCD CODEC */
|
||||||
|
|
||||||
instream.stream.getc = lcd_getstream;
|
lib_meminstream(&instream, buffer, buflen);
|
||||||
instream.stream.nget = 0;
|
|
||||||
instream.buffer = buffer;
|
|
||||||
instream.nbytes = buflen;
|
|
||||||
|
|
||||||
/* Now decode and process every byte in the input buffer */
|
/* Now decode and process every byte in the input buffer */
|
||||||
|
|
||||||
memset(&state, 0, sizeof(struct slcdstate_s));
|
memset(&state, 0, sizeof(struct slcdstate_s));
|
||||||
while ((result = slcd_decode(&instream.stream, &state, &ch, &count)) !=
|
while ((result = slcd_decode(&instream.public,
|
||||||
SLCDRET_EOF)
|
&state, &ch, &count)) != SLCDRET_EOF)
|
||||||
{
|
{
|
||||||
/* Is there some pending scroll? */
|
/* Is there some pending scroll? */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user