9 #define H8_3069F_ISCR ((volatile uint8 *)0xFEE014)
10 #define H8_3069F_IER ((volatile uint8 *)0xFEE015)
11 #define H8_3069F_ISR ((volatile uint8 *)0xFEE016)
13 #define H8_3069F_TSTR ((volatile uint8 *)0xFFFF60)
14 #define H8_3069F_TISRC ((volatile uint8 *)0xFFFF66)
15 #define H8_3069F_16TCR0 ((volatile uint8 *)0xFFFF68)
16 #define H8_3069F_TIOR0 ((volatile uint8 *)0xFFFF69)
17 #define H8_3069F_16TCNT0H ((volatile uint8 *)0xFFFF6A)
18 #define H8_3069F_16TCNT0L ((volatile uint8 *)0xFFFF6B)
20 #define MAX_BIT_COUNT (64)
29 static uint16 bitcnt = 0;
30 static uint16 tmrovf = 0;
31 static uint8 data[MAX_BIT_COUNT / 8];
32 static ir_state_t irs = WaitLeader;
34 static void remocon_intr_edge(void)
38 *H8_3069F_16TCNT0H = 0;
39 *H8_3069F_16TCNT0L = 0;
40 *H8_3069F_TSTR |= (1 << 0);
46 *H8_3069F_16TCNT0H = 0;
47 *H8_3069F_16TCNT0L = 0;
51 if (bitcnt < MAX_BIT_COUNT) {
52 if ((bitcnt % 8) == 0) {
56 ((*H8_3069F_16TCNT0H) << 8) |
57 ((*H8_3069F_16TCNT0L) << 0);
58 if (tmrval > 0x1077) {
59 data[bitcnt / 8] |= (1 << (bitcnt % 8));
63 *H8_3069F_16TCNT0H = 0;
64 *H8_3069F_16TCNT0L = 0;
77 static void remocon_intr_tovf(void)
79 *H8_3069F_TISRC &= ~(1 << 0);
81 *H8_3069F_TSTR &= ~(1 << 0);
84 /*
\e$B%3%s%=!<%k$X$NJ8;zNs=PNO$r%3%s%=!<%k!&%I%i%$%P$K0MMj$9$k
\e(B */
85 static void send_write(char *str)
90 p = kz_kmalloc(len + 2);
92 p[1] = CONSDRV_CMD_WRITE;
93 memcpy(&p[2], str, len);
94 kz_send(MSGBOX_ID_CONSOUTPUT, len + 2, p);
97 int remocon_main(int argc, char *argv[])
99 kz_setintr(SOFTVEC_TYPE_IR_EDGE, remocon_intr_edge);
100 kz_setintr(SOFTVEC_TYPE_IR_TOVF, remocon_intr_tovf);
101 *H8_3069F_ISCR |= (1 << 4);
102 *H8_3069F_IER |= (1 << 4);
104 *H8_3069F_TISRC |= (1 << 4);
105 *H8_3069F_16TCR0 = 0x03;
112 for (i = 0; i < bitcnt; i++) {
113 if (data[i / 8] & (1 << (i % 8))) {