200 lines
4.8 KiB
C
200 lines
4.8 KiB
C
|
#include "soundcard/lamp.h"
|
||
|
#include "system/device/vm.h"
|
||
|
#include "asm/rtc.h"
|
||
|
#include "asm/power/p33.h"
|
||
|
#include "asm/gpio.h"
|
||
|
#include "soundcard/soundcard.h"
|
||
|
#include "system/timer.h"
|
||
|
|
||
|
#if SOUNDCARD_ENABLE
|
||
|
|
||
|
static u8 my_led_status = 0;
|
||
|
static u8 my_led_status_self = 0; //独立的LED
|
||
|
static u16 soundcard_power_timer = 0;
|
||
|
static void led_port_set_hz(u8 port)
|
||
|
{
|
||
|
gpio_set_pull_down(port, 0);
|
||
|
gpio_set_pull_up(port, 0);
|
||
|
gpio_set_direction(port, 1);
|
||
|
}
|
||
|
void my_led_clear_all(void)
|
||
|
{
|
||
|
led_port_set_hz(TCFG_MY_LED1_PORT);
|
||
|
led_port_set_hz(TCFG_MY_LED2_PORT);
|
||
|
led_port_set_hz(TCFG_MY_LED3_PORT);
|
||
|
led_port_set_hz(TCFG_MY_LED4_PORT);
|
||
|
}
|
||
|
static void __my_led_scan(void *param)
|
||
|
{
|
||
|
static u8 cnt = 0;
|
||
|
my_led_clear_all();
|
||
|
/* if (get_vm_statu()) { */
|
||
|
/* return; */
|
||
|
/* } */
|
||
|
switch (cnt) {
|
||
|
case 0:
|
||
|
gpio_direction_output(TCFG_MY_LED1_PORT, 0);
|
||
|
if (my_led_status & UI_LED_ELECTRIC_SOUND) {
|
||
|
gpio_direction_output(TCFG_MY_LED2_PORT, 1);
|
||
|
}
|
||
|
if (my_led_status & UI_LED_PITCH_SOUND) {
|
||
|
gpio_direction_output(TCFG_MY_LED3_PORT, 1);
|
||
|
}
|
||
|
if (my_led_status & UI_LED_MAGIC_SOUND) {
|
||
|
gpio_direction_output(TCFG_MY_LED4_PORT, 1);
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
gpio_direction_output(TCFG_MY_LED2_PORT, 0);
|
||
|
if (my_led_status & UI_LED_BOOM_SOUND) {
|
||
|
gpio_direction_output(TCFG_MY_LED3_PORT, 1);
|
||
|
}
|
||
|
if (my_led_status & UI_LED_MIC_SOUND) {
|
||
|
gpio_direction_output(TCFG_MY_LED4_PORT, 1);
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
gpio_direction_output(TCFG_MY_LED4_PORT, 0);
|
||
|
if (my_led_status_self & UI_LED_SELF_DODGE_SOUND) {
|
||
|
gpio_direction_output(TCFG_MY_LED3_PORT, 1);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
putchar('a');
|
||
|
break;
|
||
|
}
|
||
|
cnt = (cnt >= 2) ? 0 : cnt + 1;
|
||
|
}
|
||
|
|
||
|
static void __my_led2_scan(void *param)
|
||
|
{
|
||
|
static u8 cnt = 0;
|
||
|
|
||
|
if (my_led_status_self & UI_LED_SELF_RED) {
|
||
|
gpio_set_output_value(TCFG_MY_LED_RED_PORT, 1);
|
||
|
} else {
|
||
|
gpio_set_output_value(TCFG_MY_LED_RED_PORT, 0);
|
||
|
}
|
||
|
|
||
|
if (my_led_status_self & UI_LED_SELF_BLUE_FLASH) {
|
||
|
if (cnt) {
|
||
|
gpio_set_output_value(TCFG_MY_LED_BLUE_PORT, 1);
|
||
|
} else {
|
||
|
gpio_set_output_value(TCFG_MY_LED_BLUE_PORT, 0);
|
||
|
}
|
||
|
} else {
|
||
|
gpio_set_output_value(TCFG_MY_LED_BLUE_PORT, 1);
|
||
|
}
|
||
|
|
||
|
cnt = (cnt >= 1) ? 0 : cnt + 1;
|
||
|
}
|
||
|
|
||
|
void soundcard_led_set(u8 led, u8 sw)
|
||
|
{
|
||
|
//y_printf("%s:%d", __func__, led);
|
||
|
if (sw) {
|
||
|
my_led_status = led;
|
||
|
} else {
|
||
|
my_led_status = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void soundcard_led_self_set(u8 led, u8 sw)
|
||
|
{
|
||
|
//y_printf("%s:%d", __func__, led);
|
||
|
|
||
|
if (sw) {
|
||
|
my_led_status_self |= led;
|
||
|
} else {
|
||
|
my_led_status_self &= ~led;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void soundcard_led_mode(u8 mode, u8 sw)
|
||
|
{
|
||
|
if (soundcard_power_timer) {
|
||
|
return ;
|
||
|
}
|
||
|
switch (mode) {
|
||
|
case SOUNDCARD_MODE_NORMAL:
|
||
|
soundcard_led_set(UI_LED_OFF, sw);
|
||
|
break;
|
||
|
case SOUNDCARD_MODE_ELECTRIC:
|
||
|
soundcard_led_set(UI_LED_ELECTRIC_SOUND, sw);
|
||
|
break;
|
||
|
case SOUNDCARD_MODE_PITCH:
|
||
|
soundcard_led_set(UI_LED_PITCH_SOUND, sw);
|
||
|
break;
|
||
|
case SOUNDCARD_MODE_MAGIC:
|
||
|
soundcard_led_set(UI_LED_MAGIC_SOUND, sw);
|
||
|
break;
|
||
|
case SOUNDCARD_MODE_BOOM:
|
||
|
soundcard_led_set(UI_LED_BOOM_SOUND, sw);
|
||
|
break;
|
||
|
case SOUNDCARD_MODE_SHOUTING_WHEAT:
|
||
|
soundcard_led_set(UI_LED_MIC_SOUND, sw);
|
||
|
break;
|
||
|
case SOUNDCARD_MODE_DODGE:
|
||
|
soundcard_led_self_set(UI_LED_SELF_DODGE_SOUND, sw);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void soundcard_led_all_off(void)
|
||
|
{
|
||
|
soundcard_led_set(0, 0);
|
||
|
soundcard_led_self_set(BIT(0), 0);
|
||
|
}
|
||
|
|
||
|
void soundcard_led_all_on(void)
|
||
|
{
|
||
|
soundcard_led_set(0xff, 1);
|
||
|
soundcard_led_self_set(BIT(0), 1);
|
||
|
}
|
||
|
|
||
|
static void soundcard_low_power_led_can(void *p)
|
||
|
{
|
||
|
static u8 flag = 0;
|
||
|
flag = !flag;
|
||
|
if (flag) {
|
||
|
soundcard_led_all_on();
|
||
|
} else {
|
||
|
soundcard_led_all_off();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void soundcard_low_power_led(u8 onoff)
|
||
|
{
|
||
|
if (onoff) {
|
||
|
if (soundcard_power_timer == 0) {
|
||
|
soundcard_power_timer = sys_hi_timer_add(NULL, soundcard_low_power_led_can, 1000);
|
||
|
}
|
||
|
} else {
|
||
|
if (soundcard_power_timer) {
|
||
|
sys_hi_timer_del(soundcard_power_timer);
|
||
|
soundcard_led_all_off();
|
||
|
soundcard_power_timer = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void soundcard_led_init(void)
|
||
|
{
|
||
|
//y_printf("%s", __func__);
|
||
|
|
||
|
my_led_clear_all();
|
||
|
|
||
|
gpio_set_direction(TCFG_MY_LED_BLUE_PORT, 0);
|
||
|
gpio_set_direction(TCFG_MY_LED_RED_PORT, 0);
|
||
|
soundcard_led_self_set(UI_LED_SELF_RED, 1);
|
||
|
soundcard_led_self_set(UI_LED_SELF_BLUE_FLASH, 1);
|
||
|
|
||
|
sys_hi_timer_add(NULL, __my_led_scan, 4); //2ms
|
||
|
sys_hi_timer_add(NULL, __my_led2_scan, 500); //2ms
|
||
|
}
|
||
|
|
||
|
#endif//SOUNDCARD_ENABLE
|