4 * (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
10 keyin_defs keyin_old[2];
21 for(i = 0; i < 3; i++) {
22 keyin_old[0].byte[i] = 0x00;
23 keyin_old[1].byte[i] = 0x00;
24 keyin_now.byte[i] = 0x00;
26 for(i = 0; i < 16; i++) keyin_fifo[i] = 0x00;
33 void keyin_ioinit(void)
35 /* Initialize IOPORTS*/
53 * Push to keyin fifo; not used atomic-writing.
55 void push_keyinfifo(char b)
58 if((keyin_nowp > 15) || (keyin_nowp < 0))keyin_nowp = 0;
59 keyin_fifo[keyin_nowp] = b;
61 if(keyin_counter > 16) keyin_counter = 16;
65 * Pop from keyin fifo; not used atomic-reading.
67 char pop_keyinfifo(void)
70 if(keyin_counter <= 0) {
72 return charcode_null ;
74 if(keyin_readp > 15) keyin_readp = 15;
75 c = keyin_fifo[keyin_readp];
77 if(keyin_readp > 15) keyin_readp = 0;
79 if(keyin_counter < 0)keyin_counter = 0;
83 void print_numeric(int i)
93 unsigned char supress = 0;
102 _PUTCHAR((l & 0x0f)+ '0');
108 _PUTCHAR((l & 0x0f)+ '0');
110 _PUTCHAR((l & 0x0f)+ '0');
117 _PUTCHAR((l & 0x0f)+ '0');
119 _PUTCHAR((l & 0x0f)+ '0');
126 _PUTCHAR((l & 0x0f)+ '0');
128 _PUTCHAR((l & 0x0f)+ '0');
132 _PUTCHAR((i & 0x0f) + '0');
138 void printstr(char *s)
142 if(s == NULL) return;
144 if(s[p] == '\0') break;
150 void setsignal_tune(unsigned char flag)
159 void set_backlight(unsigned char flag, unsigned int val)
170 * Read IOPORTS for KEY.
172 void readkey_io(void)
175 unsigned char portvar;
176 unsigned char latchvar;
179 if(keyin_counter > 16) keyin_counter = 0;
180 for(i = 0; i < 3; i++){
181 keyin_old[1].byte[i] = keyin_old[0].byte[i];
182 keyin_old[0].byte[i] = keyin_now.byte[i];
183 keyin_now.byte[i] = 0x00;
186 latchvar = LATA | 0x02;
189 low = (portvar & 0x3c) >>2;
190 latchvar = LATA & 0xfd;
193 latchvar = LATB | 0x02;
196 high = (portvar & 0x3c) >>2;
197 latchvar = LATB & 0xfd;
200 keyin_now.byte[0] = (low << 4) | high;
203 latchvar = LATB | 0x04;
206 low = (portvar & 0x3c) >>2;
207 latchvar = LATB & 0xfb;
210 latchvar = LATB | 0x20;
213 high = (portvar & 0x3c) >>2;
214 latchvar = LATB & 0xdf;
217 keyin_now.byte[1] = (low << 4) | high;
220 keyin_now.BIT0F = PORTBbits.RB1;
221 keyin_now.BIT1F = PORTBbits.RB2;
222 keyin_now.BIT2F = PORTBbits.RB3;
223 keyin_now.BIT3F = 0; // Reserve
226 unsigned char readkey_compare(void)
236 for(d = 0; d < 3; d++) {
238 for(b = 0; b < 8; b++){
240 if((keyin_now.byte[c] & shift) != 0) c++;
241 if((keyin_old[0].byte[c] & shift) != 0) c++;
242 if((keyin_old[1].byte[c] & shift) != 0) c++;
245 * Clear older-inputs on .
248 keyin_old[0].byte[c] &= ~shift;
249 keyin_old[1].byte[c] &= ~shift;
250 keyin_now.byte[c] &= ~shift;
252 push_keyinfifo(charcode_0);
256 push_keyinfifo(e + 1);
269 * Initialize sequence:
274 * In interrupt/unsleep hook(call per Nms):
278 * In application handler:
279 * c = pop_keyinfifo();