OBJS += spi.o spreg.o
# Tasks
-OBJS += task_ir.o
-OBJS += task_userinput.o
+OBJS += task_input.o
OBJS += task_command.o
# Kernel
# Drivers
OBJS += driver_console.o
OBJS += driver_timer.o
-OBJS += driver_lcd.o
-OBJS += driver_led.o
-OBJS += driver_audio.o
+OBJS += task_display.o
+OBJS += task_audio.o
TARGET = kozos
MSGBOX_ID_CONSOUTPUT,
MSGBOX_ID_TIMDRIVE,
MSGBOX_ID_TIMEXPIRE,
- MSGBOX_ID_LEDDRIVE,
- MSGBOX_ID_LCDDRIVE,
- MSGBOX_ID_AUDIODRIVE,
+ MSGBOX_ID_DISPLAY,
+ MSGBOX_ID_AUDIO,
MSGBOX_ID_NUM
} kz_msgbox_id_t;
#ifndef DRIVER_H
#define DRIVER_H
-#include "driver_audio.h"
#include "driver_console.h"
-#include "driver_lcd.h"
-#include "driver_led.h"
#include "driver_timer.h"
#endif
+++ /dev/null
-#ifndef _AUDIODRV_H_INCLUDED_
-#define _AUDIODRV_H_INCLUDED_
-
-void audio_pulse(void);
-int driver_audio(int argc, char *argv[]);
-
-#endif
-
+++ /dev/null
-#ifndef _LCDDRV_H_INCLUDED_
-#define _LCDDRV_H_INCLUDED_
-
-void lcddrv_clear(void);
-void lcddrv_draw_box(int x1, int y1, int x2, int y2, int on);
-void lcddrv_draw_logo(int x, int y, int size);
-void lcddrv_draw_text(int x, int y, char *str);
-
-int driver_lcd(int argc, char *argv[]);
-
-#endif
+++ /dev/null
-#include "driver_led.h"
-#include "led.h"
-#include "kozos.h"
-
-#define LEDDRV_CMD_LED_ON 'o' /* LED\e$B$NE@Et\e(B */
-#define LEDDRV_CMD_LED_OFF 'x' /* LED\e$B$N>CEt\e(B */
-#define LEDDRV_CMD_LED_TOGGLE 't' /* LED\e$B$N%H%0%k\e(B */
-
-void leddrv_write(int target, int state)
-{
- char *p;
- p = kz_kmalloc(2);
- p[0] = state ? LEDDRV_CMD_LED_ON : LEDDRV_CMD_LED_OFF;
- p[1] = '0' + target;
- kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
-}
-
-void leddrv_toggle(int target)
-{
- char *p;
- p = kz_kmalloc(2);
- p[0] = LEDDRV_CMD_LED_TOGGLE;
- p[1] = '0' + target;
- kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
-}
-
-/* \e$B%9%l%C%I$+$i$NMW5a$r=hM}$9$k\e(B */
-static int leddrv_command(char *p)
-{
- int cmd = p[0];
- int led = p[1] - '0';
- switch (cmd) {
- case LEDDRV_CMD_LED_ON:
- led_write(led, LedOn);
- break;
- case LEDDRV_CMD_LED_OFF:
- led_write(led, LedOff);
- break;
- case LEDDRV_CMD_LED_TOGGLE:
- led_toggle(led);
- break;
- default:
- break;
- }
- kz_kmfree(p);
-
- return 0;
-}
-
-int driver_led(int argc, char *argv[])
-{
- int size;
- char *p;
-
- led_init();
-
- while (1) {
- kz_recv(MSGBOX_ID_LEDDRIVE, &size, &p);
- leddrv_command(p);
- }
-
- return 0;
-}
+++ /dev/null
-#ifndef _LEDDRV_H_INCLUDED_
-#define _LEDDRV_H_INCLUDED_
-
-void leddrv_write(int target, int state);
-void leddrv_toggle(int target);
-
-int driver_led(int argc, char *argv[]);
-
-#endif
{
kz_run(driver_console, "dConsole", 1, 0x200, 0, NULL);
kz_run(driver_timer, "dTimer", 2, 0x200, 0, NULL);
- kz_run(driver_led, "dLed", 3, 0x200, 0, NULL);
- kz_run(driver_lcd, "dLcd", 4, 0x200, 0, NULL);
- kz_run(driver_audio, "dAudio", 5, 0x200, 0, NULL);
- kz_run(task_command, "tCommand", 6, 0x200, 0, NULL);
- kz_run(task_userinput, "tUserinput", 7, 0x200, 0, NULL);
- kz_run(task_ir, "tIr", 8, 0x200, 0, NULL);
+ kz_run(task_display, "tDisplay", 5, 0x400, 0, NULL);
+ kz_run(task_audio, "tAudio", 6, 0x400, 0, NULL);
+ kz_run(task_command, "tCommand", 7, 0x400, 0, NULL);
+ kz_run(task_input, "tInput", 8, 0x400, 0, NULL);
kz_chpri(15); /* Í¥Àè½ç°Ì¤ò²¼¤²¤Æ¡¤¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤Ë°Ü¹Ô¤¹¤ë */
INTR_ENABLE; /* ³ä¹þ¤ß͸ú¤Ë¤¹¤ë */
#ifndef TASK_H
#define TASK_H
-#include "task_userinput.h"
-#include "task_ir.h"
+#include "task_input.h"
#include "task_command.h"
+#include "task_audio.h"
+#include "task_display.h"
#endif
-#include "driver_audio.h"
+#include "task_audio.h"
#include "vs1011e.h"
#include "kozos.h"
-#define AUDIODRV_CMD_PULSE 'p'
+#define AUDIO_CMD_PULSE 'p'
void audio_pulse(void)
{
char *p;
p = kz_kmalloc(1);
- p[0] = AUDIODRV_CMD_PULSE;
- kz_send(MSGBOX_ID_AUDIODRIVE, 1, p);
+ p[0] = AUDIO_CMD_PULSE;
+ kz_send(MSGBOX_ID_AUDIO, 1, p);
}
-static int audiodrv_command(char *p)
+static int audio_cmdproc(char *p)
{
int cmd = p[0];
volatile int i;
switch (cmd) {
- case AUDIODRV_CMD_PULSE:
+ case AUDIO_CMD_PULSE:
vs1011e_sinetest_init();
- for (i = 0; i < 2000; i++) { }
+ for (i = 0; i < 1000; i++) { }
vs1011e_sinetest_fini();
+ for (i = 0; i < 1000; i++) { }
break;
default:
break;
return 0;
}
-int driver_audio(int argc, char *argv[])
+int task_audio(int argc, char *argv[])
{
int size;
char *p;
while (1) {
- kz_recv(MSGBOX_ID_AUDIODRIVE, &size, &p);
- audiodrv_command(p);
+ kz_recv(MSGBOX_ID_AUDIO, &size, &p);
+ audio_cmdproc(p);
}
return 0;
--- /dev/null
+#ifndef TASK_AUDIO_H
+#define TASK_AUDIO_H
+
+void audio_pulse(void);
+int task_audio(int argc, char *argv[]);
+
+#endif
+
#include "defines.h"
#include "kozos.h"
#include "driver_console.h"
-#include "driver_led.h"
#include "lib.h"
int task_command(int argc, char *argv[])
console_write(p + 4); /* echo¤Ë³¤¯Ê¸»úÎó¤ò½ÐÎϤ¹¤ë */
console_write("\n");
} else if (!strncmp(p, "led1", 4)) {
- leddrv_toggle(0);
+ display_led_toggle(0);
} else if (!strncmp(p, "led2", 4)) {
- leddrv_toggle(1);
+ display_led_toggle(1);
} else if (!strncmp(p, "ledg", 4)) {
- leddrv_toggle(2);
+ display_led_toggle(2);
} else if (!strncmp(p, "ledr", 4)) {
- leddrv_toggle(3);
+ display_led_toggle(3);
} else {
console_write("unknown.\n");
}
-#include "driver_lcd.h"
+#include "task_display.h"
#include "sg12232c.h"
#include "kozos.h"
#include "lib.h"
+#include "led.h"
-#define LCDDRV_CMD_LCD_CLEAR 'c' /* LCD\e$B$N>C5n\e(B */
-#define LCDDRV_CMD_LCD_DRAW_BOX 'b' /* BOX\e$BIA2h%3%^%s%I\e(B */
-#define LCDDRV_CMD_LCD_DRAW_LOGO 'l' /* LOGO\e$BIA2h%3%^%s%I\e(B */
-#define LCDDRV_CMD_LCD_DRAW_TEXT 't' /* TEXT\e$BIA2h%3%^%s%I\e(B */
+#define DISPLAY_CMD_LCD_CLEAR 'c' /* LCD\e$B$N>C5n\e(B */
+#define DISPLAY_CMD_LCD_DRAW_BOX 'b' /* BOX\e$BIA2h%3%^%s%I\e(B */
+#define DISPLAY_CMD_LCD_DRAW_LOGO 'l' /* LOGO\e$BIA2h%3%^%s%I\e(B */
+#define DISPLAY_CMD_LCD_DRAW_TEXT 't' /* TEXT\e$BIA2h%3%^%s%I\e(B */
+#define DISPLAY_CMD_LED_ON '1' /* LED\e$B$NE@Et\e(B */
+#define DISPLAY_CMD_LED_OFF '0' /* LED\e$B$N>CEt\e(B */
+#define DISPLAY_CMD_LED_TOGGLE 'a' /* LED\e$B$N%H%0%k\e(B */
-void lcddrv_clear(void)
+void display_led_write(int target, int state)
+{
+ char *p;
+ p = kz_kmalloc(2);
+ p[0] = state ? DISPLAY_CMD_LED_ON : DISPLAY_CMD_LED_OFF;
+ p[1] = '0' + target;
+ kz_send(MSGBOX_ID_DISPLAY, 2, p);
+}
+
+void display_led_toggle(int target)
+{
+ char *p;
+ p = kz_kmalloc(2);
+ p[0] = DISPLAY_CMD_LED_TOGGLE;
+ p[1] = '0' + target;
+ kz_send(MSGBOX_ID_DISPLAY, 2, p);
+}
+
+void display_clear(void)
{
char *p;
p = kz_kmalloc(1);
- p[0] = LCDDRV_CMD_LCD_CLEAR;
- kz_send(MSGBOX_ID_LCDDRIVE, 1, p);
+ p[0] = DISPLAY_CMD_LCD_CLEAR;
+ kz_send(MSGBOX_ID_DISPLAY, 1, p);
}
-void lcddrv_draw_box(int x1, int y1, int x2, int y2, int on)
+void display_draw_box(int x1, int y1, int x2, int y2, int on)
{
char *p;
p = kz_kmalloc(6);
- p[0] = LCDDRV_CMD_LCD_DRAW_BOX;
+ p[0] = DISPLAY_CMD_LCD_DRAW_BOX;
p[1] = x1;
p[2] = y1;
p[3] = x2;
p[4] = y2;
p[5] = !on;
- kz_send(MSGBOX_ID_LCDDRIVE, 6, p);
+ kz_send(MSGBOX_ID_DISPLAY, 6, p);
}
-void lcddrv_draw_logo(int x, int y, int size)
+void display_draw_logo(int x, int y, int size)
{
char *p;
p = kz_kmalloc(4);
- p[0] = LCDDRV_CMD_LCD_DRAW_LOGO;
+ p[0] = DISPLAY_CMD_LCD_DRAW_LOGO;
p[1] = x;
p[2] = y;
p[3] = size;
- kz_send(MSGBOX_ID_LCDDRIVE, 4, p);
+ kz_send(MSGBOX_ID_DISPLAY, 4, p);
}
-void lcddrv_draw_text(int x, int y, char *str)
+void display_draw_text(int x, int y, char *str)
{
char *p;
int len;
len = strlen(str);
p = kz_kmalloc(3 + len + 1);
- p[0] = LCDDRV_CMD_LCD_DRAW_TEXT;
+ p[0] = DISPLAY_CMD_LCD_DRAW_TEXT;
p[1] = x;
p[2] = y;
memcpy(&p[3], str, len);
p[3 + len] = '\0';
- kz_send(MSGBOX_ID_LCDDRIVE, 3 + len + 1, p);
+ kz_send(MSGBOX_ID_DISPLAY, 3 + len + 1, p);
}
static void draw_logo(const int ofsx, const int ofsy, const int size)
}
/* \e$B%9%l%C%I$+$i$NMW5a$r=hM}$9$k\e(B */
-static int lcddrv_command(char *p)
+static int display_cmdproc(char *p)
{
int cmd = p[0];
switch (cmd) {
- case LCDDRV_CMD_LCD_CLEAR:
+ case DISPLAY_CMD_LCD_CLEAR:
sg12232c_clear();
break;
- case LCDDRV_CMD_LCD_DRAW_BOX:
+ case DISPLAY_CMD_LCD_DRAW_BOX:
sg12232c_draw_box(p[1], p[2], p[3], p[4], p[5]);
break;
- case LCDDRV_CMD_LCD_DRAW_LOGO:
+ case DISPLAY_CMD_LCD_DRAW_LOGO:
draw_logo(p[1], p[2], p[3]);
break;
- case LCDDRV_CMD_LCD_DRAW_TEXT:
+ case DISPLAY_CMD_LCD_DRAW_TEXT:
sg12232c_draw_string(p[1], p[2], &p[3], 0);
break;
+ case DISPLAY_CMD_LED_ON:
+ led_write(p[1] - '0', LedOn);
+ break;
+ case DISPLAY_CMD_LED_OFF:
+ led_write(p[1] - '0', LedOff);
+ break;
+ case DISPLAY_CMD_LED_TOGGLE:
+ led_toggle(p[1] - '0');
+ break;
default:
break;
}
return 0;
}
-int driver_lcd(int argc, char *argv[])
+int task_display(int argc, char *argv[])
{
int size;
char *p;
- sg12232c_init();
-
while (1) {
- kz_recv(MSGBOX_ID_LCDDRIVE, &size, &p);
- lcddrv_command(p);
+ kz_recv(MSGBOX_ID_DISPLAY, &size, &p);
+ display_cmdproc(p);
}
return 0;
}
+
--- /dev/null
+#ifndef _DISPLAY_H_INCLUDED_
+#define _DISPLAY_H_INCLUDED_
+
+void display_led_write(int target, int state);
+void display_led_toggle(int target);
+void display_clear(void);
+void display_draw_box(int x1, int y1, int x2, int y2, int on);
+void display_draw_logo(int x, int y, int size);
+void display_draw_text(int x, int y, char *str);
+
+int task_display(int argc, char *argv[]);
+
+#endif
-#include "task_ir.h"
#include "defines.h"
#include "kozos.h"
-#include "intr.h"
-#include "led.h"
+#include "task_display.h"
#include "lib.h"
-#include "driver_console.h"
-#include "driver_audio.h"
-#include "driver_led.h"
+#include "sw.h"
+#include "re.h"
+#include "intr.h"
#define H8_3069F_ISCR ((volatile uint8 *)0xFEE014)
#define H8_3069F_IER ((volatile uint8 *)0xFEE015)
*H8_3069F_TSTR &= ~(1 << 0);
}
-int task_ir(int argc, char *argv[])
+int task_input(int argc, char *argv[])
{
+ int nx = 40, ny = 12;
+
+ /*
+ * Setup.
+ */
+#if 0
kz_setintr(SOFTVEC_TYPE_IR_EDGE, remocon_intr_edge);
kz_setintr(SOFTVEC_TYPE_IR_TOVF, remocon_intr_tovf);
*H8_3069F_ISCR |= (1 << 4);
*H8_3069F_TISRC |= (1 << 4);
*H8_3069F_16TCR0 = 0x03;
+#endif
+
+ /*
+ * Display clear
+ */
+ display_clear();
+ display_draw_logo( 0, 0, 2);
+ display_draw_box(0, 0, 121, 31, 1);
+ display_draw_text(40, 4, "KOZOS EXPBRD #00");
+ display_draw_logo(nx, ny, 0);
+ uint16 prev = 0, curr = 0;
while (1) {
+ curr = re_read();
+ if (curr != prev) {
+ int dir = (int)(curr & 0xff) - (int)(prev & 0xff);
+ if (dir < 0) {
+ if (-32 < dir) {
+ display_led_write(1, 0);
+ display_led_toggle(0);
+ }
+ if (40 < nx) {
+ nx--;
+ }
+ } else {
+ if (dir < 32) {
+ display_led_write(0, 0);
+ display_led_toggle(1);
+ }
+ if (nx < 100) {
+ nx++;
+ }
+ }
+ prev = curr;
+
+ display_draw_box(nx + 20, ny, nx + 20, ny + 16, 0);
+ display_draw_logo(nx, ny, 0);
+ }
+ display_led_toggle(3);
+
if (tmrovf) {
if (bitcnt == 32) {
#if 0
console_write("\n");
#endif
audio_pulse();
- leddrv_toggle(2);
+ display_led_toggle(2);
}
bitcnt = 0;
tmrovf = 0;
--- /dev/null
+
+#ifndef _TASK_INPUT_H_
+#define _TASK_INPUT_H_
+int task_input(int argc, char *argv[]);
+#endif
+++ /dev/null
-
-#ifndef _TASK_IR_H_
-#define _TASK_IR_H_
-int task_ir(int argc, char *argv[]);
-#endif
+++ /dev/null
-#include "defines.h"
-#include "kozos.h"
-#include "driver_timer.h"
-#include "driver_led.h"
-#include "driver_lcd.h"
-#include "lib.h"
-#include "sw.h"
-#include "re.h"
-
-int task_userinput(int argc, char *argv[])
-{
- int nx = 40, ny = 12;
- re_init();
- sw_init();
-
- lcddrv_clear();
- lcddrv_draw_logo( 0, 0, 2);
- lcddrv_draw_box(0, 0, 121, 31, 1);
- lcddrv_draw_text(40, 4, "KOZOS EXPBRD #00");
-
- lcddrv_draw_logo(nx, ny, 0);
-
- uint16 prev = 0, curr = 0;
- while (1) {
- curr = re_read();
- if (curr != prev) {
- int dir = (int)(curr & 0xff) - (int)(prev & 0xff);
- if (dir < 0) {
- if (-32 < dir) {
- leddrv_write(1, 0);
- leddrv_toggle(0);
- }
- if (40 < nx) {
- nx--;
- }
- } else {
- if (dir < 32) {
- leddrv_write(0, 0);
- leddrv_toggle(1);
- }
- if (nx < 100) {
- nx++;
- }
- }
- prev = curr;
-
- lcddrv_draw_box(nx + 20, ny, nx + 20, ny + 16, 0);
- lcddrv_draw_logo(nx, ny, 0);
- }
-
- timerdrv_start(5);
- timerdrv_wait();
- leddrv_toggle(3);
- }
-
- return 0;
-}
+++ /dev/null
-
-#ifndef _TASK_USERINPUT_H_
-#define _TASK_USERINPUT_H_
-int task_userinput(int argc, char *argv[]);
-#endif