1.1 --- a/stage2/tasks/keyscan.c Mon Oct 03 22:24:54 2016 +0200
1.2 +++ b/stage2/tasks/keyscan.c Mon Oct 03 22:25:47 2016 +0200
1.3 @@ -20,10 +20,45 @@
1.4 #include "board.h"
1.5 #include "tasks.h"
1.6 #include "task_gpio.h"
1.7 +#include "jzlcd.h"
1.8 +#include "lcd.h"
1.9 +
1.10 +extern vidinfo_t panel_info;
1.11 +
1.12 +void plot_value(unsigned short xmin, unsigned short xmax, unsigned short ymin, unsigned short ymax, u8 value)
1.13 +{
1.14 + unsigned short x, y;
1.15 + u32 pixel;
1.16 +
1.17 + for (y = ymin; (y < panel_info.vl_row) && (y < ymax); y++)
1.18 + {
1.19 + pixel = (value >> (((y - ymin) * 8) / (ymax - ymin))) % 2 ? 0xffffffff : 0;
1.20 +
1.21 + for (x = xmin; (x < panel_info.vl_col) && (x < xmax); x++)
1.22 + {
1.23 + set_pixel(x, y, pixel);
1.24 + }
1.25 + }
1.26 +}
1.27 +
1.28 +void init_keyscan()
1.29 +{
1.30 + int column;
1.31 +
1.32 + for (column = 0; column < GPIO_KEYOUT_COUNT; column++)
1.33 + {
1.34 + task_gpio_set_pin(GPIO_KEYOUT_BASE + column);
1.35 + }
1.36 +}
1.37 +
1.38 +/* Tasks. */
1.39
1.40 void keyscan(unsigned short task)
1.41 {
1.42 - int column, row, value;
1.43 + int column, row;
1.44 + u8 value;
1.45 +
1.46 + init_keyscan();
1.47
1.48 while (1)
1.49 {
1.50 @@ -31,17 +66,20 @@
1.51
1.52 for (column = 0; column < GPIO_KEYOUT_COUNT; column++)
1.53 {
1.54 - task_gpio_set_pin(GPIO_KEYOUT_BASE + column);
1.55 + task_gpio_clear_pin(GPIO_KEYOUT_BASE + column);
1.56 +
1.57 value = 0;
1.58
1.59 for (row = 0; row < GPIO_KEYIN_COUNT; row++)
1.60 {
1.61 - value = (value << 1) | task_gpio_get_pin(GPIO_KEYIN_BASE + row);
1.62 + value = (value << 1) | !task_gpio_get_pin(GPIO_KEYIN_BASE + row);
1.63 }
1.64
1.65 /* Perform an operation indicating the status. */
1.66
1.67 - task_gpio_clear_pin(GPIO_KEYOUT_BASE + column);
1.68 + plot_value(column * 10, column * 10 + 10, 0, 10 * GPIO_KEYIN_COUNT, value);
1.69 +
1.70 + task_gpio_set_pin(GPIO_KEYOUT_BASE + column);
1.71 }
1.72 }
1.73 }