summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-h100.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-h100.c')
-rw-r--r--firmware/drivers/lcd-h100.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/firmware/drivers/lcd-h100.c b/firmware/drivers/lcd-h100.c
index bfdceedc35..df08dde6fb 100644
--- a/firmware/drivers/lcd-h100.c
+++ b/firmware/drivers/lcd-h100.c
@@ -211,16 +211,41 @@ void lcd_init(void)
211void lcd_blit(const unsigned char* data, int x, int by, int width, 211void lcd_blit(const unsigned char* data, int x, int by, int width,
212 int bheight, int stride) 212 int bheight, int stride)
213{ 213{
214 /* Copy display bitmap to hardware */ 214 const unsigned char *src, *src_end;
215 unsigned char *dst_u, *dst_l;
216 unsigned char upper[LCD_WIDTH];
217 unsigned char lower[LCD_WIDTH];
218 unsigned int byte;
219
220 by *= 2;
221
215 while (bheight--) 222 while (bheight--)
216 { 223 {
224 src = data;
225 src_end = data + width;
226 dst_u = upper;
227 dst_l = lower;
228 do
229 {
230 byte = *src++;
231 *dst_u++ = dibits[byte & 0x0F];
232 byte >>= 4;
233 *dst_l++ = dibits[byte & 0x0F];
234 }
235 while (src < src_end);
236
217 lcd_write_command_ex(LCD_CNTL_PAGE, by++, -1); 237 lcd_write_command_ex(LCD_CNTL_PAGE, by++, -1);
218 lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); 238 lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1);
239 lcd_write_command(LCD_CNTL_DATA_WRITE);
240 lcd_write_data(upper, width);
219 241
242 lcd_write_command_ex(LCD_CNTL_PAGE, by++, -1);
243 lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1);
220 lcd_write_command(LCD_CNTL_DATA_WRITE); 244 lcd_write_command(LCD_CNTL_DATA_WRITE);
221 lcd_write_data(data, width); 245 lcd_write_data(lower, width);
246
222 data += stride; 247 data += stride;
223 } 248 }
224} 249}
225 250
226 251