==========================================================================
common/ Common Files
simple_through/ Simple Through Example
+ UZURA\e$B%U%l!<%`%o!<%/$r;H$&$?$a$N:GDc8BI,MW$J=i4|2=$,\e(B
+ \e$B$o$+$k%5%s%W%k!#\e(B
karaoke_machine/ Karaoke Machine Example
+ simple_through\e$B$K!"%(%U%'%/%H$N@Z$jBX$($d%\%j%e!<%`\e(B
+ \e$B@)8f$rDI2C$7$?%5%s%W%k!#\e(B
dynamic_menu/ Dynamic Menu Example
==========================================================================
#include <stdlib.h>
#include "effect.h"
+typedef struct {
+ double left;
+ double right;
+} volume_t;
+
+volume_t volume;
+
void effect_through(
UZURA *p,
const int32_t *src, int32_t *des, int32_t count)
UZURA_LEVEL_OUTPUT(p).left = 0;
UZURA_LEVEL_OUTPUT(p).right = 0;
for (i = 0; i < count; i+=2) {
- *(des + i + 0) = *(src + i + 0);
- *(des + i + 1) = *(src + i + 1);
+ *(des + i + 0) = *(src + i + 0) * volume.left;
+ *(des + i + 1) = *(src + i + 1) * volume.right;
UZURA_LEVEL_INPUT(p).left += abs(*(src + i + 0)) >> 1;
UZURA_LEVEL_INPUT(p).right += abs(*(src + i + 1)) >> 1;
UZURA_LEVEL_OUTPUT(p).left += abs(*(des + i + 0)) >> 1;
UZURA_LEVEL_OUTPUT(p).left = 0;
UZURA_LEVEL_OUTPUT(p).right = 0;
for (i = 0; i < count; i+=2) {
- *(des + i + 0) = *(src + i + 0) - *(src + i + 1);
- *(des + i + 1) = *(src + i + 0) - *(src + i + 1);
+ *(des + i + 0) = (*(src + i + 0) - *(src + i + 1)) * volume.left;
+ *(des + i + 1) = (*(src + i + 0) - *(src + i + 1)) * volume.right;
UZURA_LEVEL_INPUT(p).left += abs(*(src + i + 0)) >> 1;
UZURA_LEVEL_INPUT(p).right += abs(*(src + i + 1)) >> 1;
UZURA_LEVEL_OUTPUT(p).left += abs(*(des + i + 0)) >> 1;
}
}
+void effect_param_init(void)
+{
+ volume.left = 1.0;
+ volume.right = 1.0;
+}
+
+void effect_param_volume(const double left, const double right)
+{
+ volume.left = left;
+ volume.right = right;
+}
+
UZURA *p,
const int32_t *src, int32_t *des, int32_t count);
+void effect_param_init(void);
+void effect_param_volume(const double left, const double right);
+
#endif
static int index;
int n;
- index = (index << 2) + (((PA_STAT() << 1) | (PB_STAT() << 0)) & 3);
+ index = (index << 2) + (((PB_STAT() << 1) | (PA_STAT() << 0)) & 3);
n = dir[index & 15];
if (n) {
if (n < 0) {
}
}
swstat = (swstat << 1) | SW_STAT();
- if (swstat == 0x0F) {
+ if (swstat == 0xF0) {
callback(RotencActionPush, user_obj);
}
}
#include "effect.h"
#include "rotenc.h"
+#define LOTTHR (5) /**< Lotate Threshold. */
+#define SCRSPD (16) /**< Scroll Speed. */
+
typedef struct {
UZURA uzura;
uint8_t effect;
} else {
uzura_set_effect(&(w->uzura), effect_through);
led_write(LedTargetR, 1);
- led_write(LedTargetG, 0);
+ led_write(LedTargetG, 1);
}
}
if (RotencActionLeft == action) {
- if (lotdiv < -4) {
+ if (lotdiv < -LOTTHR) {
w->locate_target-=8;
if (w->locate_target < 0) {
w->locate_target = 0;
}
lotdiv = 0;
} else {
+ if (0 < lotdiv) {
+ lotdiv = 0;
+ }
lotdiv--;
}
}
if (RotencActionRight == action) {
- if (4 < lotdiv) {
+ if (LOTTHR < lotdiv) {
w->locate_target+=8;
if (32 < w->locate_target) {
w->locate_target = 32;
}
lotdiv = 0;
} else {
+ if (lotdiv < 0) {
+ lotdiv = 0;
+ }
lotdiv++;
}
}
lcd_putc(0x08 + (UZURA_LEVEL_OUTPUT(p).left >> 29));
lcd_putc(0x08 + (UZURA_LEVEL_OUTPUT(p).right >> 29));
-#define SCROLL_SPEED (16)
static uint8_t divcnt = 0;
- if (((divcnt++) % SCROLL_SPEED) == 0) {
+ if (((divcnt++) % SCRSPD) == 0) {
if (w->locate_current < w->locate_target) {
lcd_display_shift(Left);
w->locate_current++;
w.locate_target = 0;
w.locate_current = 0;
+ effect_param_init();
uzura_init(&w.uzura, &w);
uzura_set_effect(&w.uzura, effect_through);
uzura_set_system(&w.uzura, system_dynamic_menu);
led_write(LedTargetR, 1);
- led_write(LedTargetG, 0);
+ led_write(LedTargetG, 1);
rotenc_init(rotenc_callback, &w);
uzura_execute(&w.uzura);
* ===============================================================
*/
-#include <stddef.h>
#include "uzura.h"
-#include "led.h"
#include "effect.h"
#include "system.h"
+#include "led.h"
#include "rotenc.h"
typedef struct {
UZURA uzura;
uint8_t effect;
+ int volume;
} work_t;
static void rotenc_callback(RotencAction action, void *extobj)
led_write(LedTargetG, 1);
}
}
+ if (RotencActionLeft == action) {
+ if (0 < w->volume) {
+ w->volume--;
+ effect_param_volume(w->volume / 100.0, w->volume / 100.0);
+ }
+ }
+ if (RotencActionRight == action) {
+ if (w->volume < 100) {
+ w->volume++;
+ effect_param_volume(w->volume / 100.0, w->volume / 100.0);
+ }
+ }
}
int main(void)
work_t w;
w.effect = 0;
+ w.volume = 100;
+ effect_param_init();
uzura_init(&w.uzura, &w);
uzura_set_effect(&w.uzura, effect_through);
uzura_set_system(&w.uzura, system_default);
{
work_t w;
+ effect_param_init();
uzura_init(&w.uzura, &w);
uzura_set_effect(&w.uzura, effect_through);
uzura_set_system(&w.uzura, system_default);