#include <stddef.h>
#include "uzume.h"
#include "lcd.h"
+#include "led.h"
#include "effect.h"
+#include "rotenc.h"
+
+typedef struct {
+ uint8_t swstat;
+ uint8_t effect;
+} work_t;
static void system_default(UZUME *p)
{
- uint32_t ivl = UZUME_VOLUME_INPUT(p).left >> 29;
- uint32_t ivr = UZUME_VOLUME_INPUT(p).right >> 29;
- uint32_t ovl = UZUME_VOLUME_OUTPUT(p).left >> 29;
- uint32_t ovr = UZUME_VOLUME_OUTPUT(p).right >> 29;
+ work_t *w = (work_t *)UZUME_USER_DATA(p);
+
lcd_goto(0, 0);
- lcd_putc(0x08 + ivl);
- lcd_putc(0x08 + ivr);
- lcd_putc(0x08 + ovl);
- lcd_putc(0x08 + ovr);
+ lcd_putc(0x08 + UZUME_VOLUME_INPUT(p).left >> 29);
+ lcd_putc(0x08 + UZUME_VOLUME_INPUT(p).right >> 29);
+ lcd_putc(0x08 + UZUME_VOLUME_OUTPUT(p).left >> 29);
+ lcd_putc(0x08 + UZUME_VOLUME_OUTPUT(p).right >> 29);
+
+ w->swstat = (w->swstat << 1) | rotenc_swstat();
+ if (w->swstat == 0x0F) {
+ w->effect = !w->effect;
+ if (w->effect) {
+ uzume_set_effect(p, effect_karaoke);
+ led_write(LedTargetR, 0);
+ led_write(LedTargetG, 1);
+ } else {
+ uzume_set_effect(p, effect_through);
+ led_write(LedTargetR, 1);
+ led_write(LedTargetG, 0);
+ }
+ }
}
int main(void)
{
UZUME u;
+ work_t w;
+
+ w.swstat = 0;
+ w.effect = 0;
- uzume_init(&u, NULL);
+ uzume_init(&u, &w);
uzume_set_effect(&u, effect_karaoke);
uzume_set_system(&u, system_default);
uzume_execute(&u);
--- /dev/null
+
+#include <cdefBF592-A.h>
+#include "rotenc.h"
+
+/*
+ * SW : PF10
+ */
+
+#define INIT_PORT() \
+ do { \
+ *pPORTF_FER &= ~(PF10); \
+ *pPORTFIO_DIR &= ~(PF10); \
+ *pPORTFIO_INEN |= (PF10); \
+ } while (0)
+#define SW_STAT() (((*pPORTFIO) & (1 << 10)) ? 0 : 1)
+
+void rotenc_init(void)
+{
+ INIT_PORT();
+}
+
+int rotenc_swstat(void)
+{
+ return SW_STAT();
+}
+
#include "uzume.h"
#include "mmc.h"
#include "uart.h"
+#include "rotenc.h"
#define SCLOCK_HZ (100000000) /**< システムクロック(100MHz) */
#define DMA_SAMPLE_SIZE (256) /**< 1回のサンプルサイズ */
void uzume_init(UZUME *p, void *user_data)
{
- uint8_t c;
- bool sdc_detected;
FATFS fatfs;
#if 0
DIR dir;
* LEDを初期化する。
*/
led_init();
- led_write(LedTargetR, 1);
- led_write(LedTargetG, 0);
/*
* LCDを初期化する。
lcd_goto(0, 0);
lcd_puts("BlueTank");
lcd_goto(0, 1);
- lcd_puts("Init....");
+ lcd_puts(" UZUME! ");
/*
* オーディオコーデックを初期化する。
* SDカードをマウントする。
*/
pf_mount(&fatfs);
- if (MMC_DETECT()) {
- sdc_detected = true;
- } else {
- sdc_detected = false;
- }
/*
* バッファをクリアする。
ssync();
/*
- * 初期化の完了をユーザに通知する。
- */
- led_write(LedTargetR, 0);
- led_write(LedTargetG, 1);
- lcd_goto(0, 1);
- if (sdc_detected) {
- lcd_puts("SDC: Yes");
- } else {
- lcd_puts("SDC: No ");
- }
-
- /*
* ミュートを解除する。
*/
ssm2603_mute(false);
* AT24C test...
*/
at24c_init();
+
+ rotenc_init();
}
void uzume_set_effect(UZUME *p, UZUME_EFFECT_FUNC effect)
sport_buffer_tx[bufidx_dma_done],
DMA_SAMPLE_SIZE);
}
- /*
- *
- */
- led_write(LedTargetR, 1);
}
if (p->system != NULL) {
p->system(p);