dac playing ok
This commit is contained in:
@@ -42,13 +42,15 @@
|
|||||||
<Tile Number="1" Reference="tile[1]">
|
<Tile Number="1" Reference="tile[1]">
|
||||||
<Port Location="XS1_PORT_1A" Name="PORT_UART_RX"/>
|
<Port Location="XS1_PORT_1A" Name="PORT_UART_RX"/>
|
||||||
<Port Location="XS1_PORT_1K" Name="PORT_UART_TX"/>
|
<Port Location="XS1_PORT_1K" Name="PORT_UART_TX"/>
|
||||||
<Port Location="XS1_PORT_1F" Name="PORT_OPT_IN"/>
|
<!-- HRT3236 -->
|
||||||
|
<Port Location="XS1_PORT_1K" Name="PORT_HTR3236_SDB"/>
|
||||||
<Port Location="XS1_PORT_1D" Name="PORT_MCLK_IN_SPDIF_TX"/>
|
|
||||||
<Port Location="XS1_PORT_1B" Name="PORT_I2S_SLRCLK"/>
|
|
||||||
<Port Location="XS1_PORT_1C" Name="PORT_I2S_SBCLK"/>
|
|
||||||
<Port Location="XS1_PORT_1G" Name="PORT_COAX_IN"/>
|
|
||||||
|
|
||||||
|
<!-- direct IO contorlled LEDs -->
|
||||||
|
<Port Location="XS1_PORT_1A" Name="PORT_LED_D5"/>
|
||||||
|
<Port Location="XS1_PORT_1B" Name="PORT_LED_D1"/>
|
||||||
|
<Port Location="XS1_PORT_4A" Name="PORT_LED_D3"/> <!-- 4A3 = D3 -->
|
||||||
|
<Port Location="XS1_PORT_1C" Name="PORT_LED_D2"/>
|
||||||
|
<Port Location="XS1_PORT_4D" Name="PORT_LED_D4_7_6"/> <!-- 4D3 = D4, 4D2 = D7, 4D0 = D6 -->
|
||||||
|
|
||||||
</Tile>
|
</Tile>
|
||||||
</Node>
|
</Node>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,50 +0,0 @@
|
|||||||
#include "gpio_access.h"
|
|
||||||
#include "swlock.h"
|
|
||||||
#include <xs1.h>
|
|
||||||
|
|
||||||
swlock_t gpo_swlock = SWLOCK_INITIAL_VALUE;
|
|
||||||
|
|
||||||
void p_gpio_lock()
|
|
||||||
{
|
|
||||||
swlock_acquire(&gpo_swlock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void p_gpio_unlock()
|
|
||||||
{
|
|
||||||
swlock_release(&gpo_swlock);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned p_gpio_peek()
|
|
||||||
{
|
|
||||||
unsigned portId, x;
|
|
||||||
|
|
||||||
// Wrapped in lock to ensure it's safe from multiple logical cores
|
|
||||||
swlock_acquire(&gpo_swlock);
|
|
||||||
|
|
||||||
asm("ldw %0, dp[p_gpio]":"=r"(portId));
|
|
||||||
asm volatile("peek %0, res[%1]":"=r"(x):"r"(portId));
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
void p_gpio_out(unsigned x)
|
|
||||||
{
|
|
||||||
unsigned portId;
|
|
||||||
|
|
||||||
asm("ldw %0, dp[p_gpio]":"=r"(portId));
|
|
||||||
asm volatile("out res[%0], %1"::"r"(portId),"r"(x));
|
|
||||||
|
|
||||||
// Wrapped in lock to ensure it's safe from multiple logical cores
|
|
||||||
swlock_release(&gpo_swlock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_gpio(unsigned bit, unsigned value)
|
|
||||||
{
|
|
||||||
unsigned port_shadow;
|
|
||||||
port_shadow = p_gpio_peek(); // Read port pin value
|
|
||||||
if (value == 0) port_shadow &= ~bit; // If writing a 0, generate mask and AND with current val
|
|
||||||
else port_shadow |= bit; // Else use mask and OR to set bit
|
|
||||||
p_gpio_out(port_shadow); // Write back to port. Will make port an output if not already
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
#define DEBUG_PRINT_ENABLE 1
|
|
||||||
#include <xs1.h>
|
#include <xs1.h>
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "xua_conf.h"
|
#include "xua_conf.h"
|
||||||
@@ -12,101 +11,8 @@
|
|||||||
#include "hid.h"
|
#include "hid.h"
|
||||||
#include "debug_print.h"
|
#include "debug_print.h"
|
||||||
|
|
||||||
#if HID_CONTROLS > 0
|
static unsigned char lastHidData;
|
||||||
|
|
||||||
#ifdef XSCOPE
|
|
||||||
#include "print.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DFU_CONTROL_USB_HID
|
|
||||||
#include <xccompat.h>
|
|
||||||
|
|
||||||
#define HID_DFU_REPORT_ID 0x41
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define P_GPI_BUTA_SHIFT 0x00
|
|
||||||
#define P_GPI_BUTA_MASK (1<<P_GPI_BUTA_SHIFT)
|
|
||||||
#define P_GPI_BUTB_SHIFT 0x01
|
|
||||||
#define P_GPI_BUTB_MASK (1<<P_GPI_BUTB_SHIFT)
|
|
||||||
#define P_GPI_BUTC_SHIFT 0x02
|
|
||||||
#define P_GPI_BUTC_MASK (1<<P_GPI_BUTC_SHIFT)
|
|
||||||
#define P_GPI_SW1_SHIFT 0x03
|
|
||||||
#define P_GPI_SW1_MASK (1<<P_GPI_SW1_SHIFT)
|
|
||||||
|
|
||||||
/* Write HID Report Data into hidData array
|
|
||||||
*
|
|
||||||
* Bits are as follows:
|
|
||||||
* 0: Play/Pause
|
|
||||||
* 1: Scan Next Track
|
|
||||||
* 2: Scan Prev Track
|
|
||||||
* 3: Volume Up
|
|
||||||
* 4: Volume Down
|
|
||||||
* 5: Mute
|
|
||||||
*/
|
|
||||||
|
|
||||||
unsigned multicontrol_count = 0;
|
|
||||||
unsigned wait_counter =0;
|
|
||||||
unsigned long get_reference_time();
|
|
||||||
|
|
||||||
#define THRESH 1
|
|
||||||
#define MULTIPRESS_WAIT 25
|
|
||||||
|
|
||||||
#define HID_CONTROL_NEXT 0x02
|
|
||||||
#define HID_CONTROL_PLAYPAUSE 0x01
|
|
||||||
#define HID_CONTROL_PREV 0x04
|
|
||||||
#define HID_CONTROL VOLUP 0x08
|
|
||||||
#define HID_CONTROL_VOLDN 0x10
|
|
||||||
#define HID_CONTROL_MUTE 0x20
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
STATE_IDLE = 0x00,
|
|
||||||
STATE_PLAY = 0x01,
|
|
||||||
STATE_NEXTPREV = 0x02,
|
|
||||||
}t_controlState;
|
|
||||||
|
|
||||||
t_controlState state;
|
|
||||||
|
|
||||||
unsigned lastA;
|
|
||||||
|
|
||||||
unsigned g_ButtonVal = 0;
|
|
||||||
unsigned char g_hid_pass_data0;
|
|
||||||
unsigned char g_hid_pass_data1;
|
|
||||||
unsigned char g_hid_pass_data2;
|
|
||||||
unsigned char g_hid_pass_data3;
|
|
||||||
unsigned char g_hid_pass_data4;
|
|
||||||
unsigned char g_hid_pass_data5;
|
|
||||||
unsigned char g_hid_pass_data6;
|
|
||||||
unsigned char g_hid_pass_data7;
|
|
||||||
|
|
||||||
void UserReadHIDButtons(unsigned char hidData[])
|
|
||||||
{
|
|
||||||
unsigned tmp;
|
|
||||||
GET_SHARED_GLOBAL(tmp, g_ButtonVal);
|
|
||||||
hidData[0] = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserReadHIDPass(unsigned char hidPassData[])
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data0);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data1);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data2);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data3);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data4);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data5);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data6);
|
|
||||||
GET_SHARED_GLOBAL(hidPassData[i++], g_hid_pass_data7);
|
|
||||||
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data0, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data1, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data2, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data3, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data4, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data5, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data6, 0);
|
|
||||||
SET_SHARED_GLOBAL(g_hid_pass_data7, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DEBUG_MEMORY_LOG_ENABLED
|
#if DEBUG_MEMORY_LOG_ENABLED
|
||||||
|
|
||||||
@@ -149,5 +55,3 @@ void UserReadHIDLog(unsigned char hidLogData[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "uac_hwresources.h"
|
#include "uac_hwresources.h"
|
||||||
/* 改动原因:引入 C1 面板 LED 控制 interface 声明(user_main.h),供 main 中声明 interface 实例并连接 AudioHwRemote / app_control_slave。 */
|
/* 改动原因:引入用户自定义声明(user_main.h)。 */
|
||||||
#include "user_main.h"
|
#include "user_main.h"
|
||||||
|
|
||||||
#ifdef IAP
|
#ifdef IAP
|
||||||
@@ -436,12 +436,15 @@ extern void hid_button_task(chanend cc_mic_level, chanend c_hid, chanend c_hidSe
|
|||||||
/* 改动原因:与 audiohw.xc 中 AudioHwRemote 一致。HID/音量/MIC 检测等已迁到 tile1 hid_button_task 与 AudioHwRemote2 内物理口;
|
/* 改动原因:与 audiohw.xc 中 AudioHwRemote 一致。HID/音量/MIC 检测等已迁到 tile1 hid_button_task 与 AudioHwRemote2 内物理口;
|
||||||
* codec 仅经 streaming c_audiohw;DFU 命令经 c_dfu(仅 HID_DFU_EN=1)。 */
|
* codec 仅经 streaming c_audiohw;DFU 命令经 c_dfu(仅 HID_DFU_EN=1)。 */
|
||||||
#if HID_DFU_EN
|
#if HID_DFU_EN
|
||||||
extern void AudioHwRemote(streaming chanend c_audiohw_rx, client interface c1_led_ctrl_if i_c1_led_ctrl, streaming chanend c_dfu_rx);
|
extern void AudioHwRemote(streaming chanend c_audiohw_rx, streaming chanend c_dfu_rx, client interface tx1_led_if led_if);
|
||||||
#else
|
#else
|
||||||
extern void AudioHwRemote(streaming chanend c_audiohw_rx, client interface c1_led_ctrl_if i_c1_led_ctrl);
|
extern void AudioHwRemote(streaming chanend c_audiohw_rx, client interface tx1_led_if led_if);
|
||||||
#endif
|
#endif
|
||||||
extern void dnr_dsp_proc_task(void);
|
extern void dnr_dsp_proc_task(void);
|
||||||
|
|
||||||
|
// TX1 LED helper task on tile[1]
|
||||||
|
extern void tx1_led_helper_task(server interface tx1_led_if led_if);
|
||||||
|
|
||||||
extern unsafe chanend uc_dsp_to_ex3d[DSP_WORKER_COUNT];
|
extern unsafe chanend uc_dsp_to_ex3d[DSP_WORKER_COUNT];
|
||||||
extern unsafe chanend uc_dsp_to_dnr_t1;
|
extern unsafe chanend uc_dsp_to_dnr_t1;
|
||||||
extern unsafe chanend uc_key_to_ubm_t0;
|
extern unsafe chanend uc_key_to_ubm_t0;
|
||||||
@@ -556,9 +559,9 @@ int main()
|
|||||||
chan c_uac_vol;
|
chan c_uac_vol;
|
||||||
chan c_ex3d_hid_cmd;
|
chan c_ex3d_hid_cmd;
|
||||||
chan c_ex3d_to_ubm;
|
chan c_ex3d_to_ubm;
|
||||||
/* 改动原因:MIC 插拔检测已并入 audiohw.xc(p_mic_phone_detect / AudioHwRemote2),删除未使用 c_mic_det。
|
|
||||||
* C1 面板灯:tile0 AudioHwRemote 为 c1_led_ctrl_if client,tile1 app_control_slave 为 server。 */
|
// TX1 LED interface for tile[0] -> tile[1] communication
|
||||||
interface c1_led_ctrl_if i_c1_led_ctrl;
|
interface tx1_led_if i_tx1_led;
|
||||||
|
|
||||||
par
|
par
|
||||||
{
|
{
|
||||||
@@ -585,16 +588,9 @@ int main()
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* 改动原因:C1 硬件插拔检测与 DAC/MIC 哑音逻辑已并入 tile0 button_task(见 audiohw.xc),不再使用原 mute_handler + p_ctl_det 方案。 */
|
on tile[1]: tx1_led_helper_task(i_tx1_led);
|
||||||
on tile[1]: app_control_slave(i_c1_led_ctrl);
|
|
||||||
|
|
||||||
/* 改动原因:XUA_AudioHub 与 AudioHwRemote/dsp 并行启动;AudioHwInit→codec_init 经 CODEC_REGWRITE 使用 uc_audiohw。
|
|
||||||
* 若仅在 dsp_main 内赋值,AudioHub 先跑到 codec_init 时 uc_audiohw 未绑定会 ET_ILLEGAL_RESOURCE。
|
|
||||||
* 与 fosi_c1 user_main.h 一致:在 tile[0]、启动 AudioHwRemote 之前绑定 streaming chan 发送端句柄。 */
|
|
||||||
on tile[0] : {
|
on tile[0] : {
|
||||||
unsafe {
|
|
||||||
uc_audiohw = (streaming chanend)c_audiohw;
|
|
||||||
}
|
|
||||||
par {
|
par {
|
||||||
{
|
{
|
||||||
/* 改动原因:参数顺序与类型对齐 audiohw.xc 的 AudioHwRemote,修复链接阶段符号类型不一致。 */
|
/* 改动原因:参数顺序与类型对齐 audiohw.xc 的 AudioHwRemote,修复链接阶段符号类型不一致。 */
|
||||||
@@ -608,30 +604,33 @@ int main()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HID_DFU_EN
|
#if HID_DFU_EN
|
||||||
AudioHwRemote(c_audiohw, i_c1_led_ctrl, c_dfu);
|
AudioHwRemote(c_audiohw, c_dfu, i_tx1_led);
|
||||||
#else
|
#else
|
||||||
AudioHwRemote(c_audiohw, i_c1_led_ctrl);
|
AudioHwRemote(c_audiohw, i_tx1_led);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if EQ_EN == 1
|
|
||||||
on tile[0] : {
|
on tile[0] : {
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
#if HID_DFU_EN
|
#if HID_DFU_EN
|
||||||
unsafe {
|
unsafe {
|
||||||
uc_dfu = (streaming chanend)c_dfu;
|
uc_dfu = (streaming chanend)c_dfu;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
unsafe {
|
||||||
|
uc_audiohw = (streaming chanend)c_audiohw;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if EQ_EN == 1
|
||||||
dsp_core0();
|
dsp_core0();
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 改动原因:uc_audiohw 已在上文 tile[0] AudioHwRemote 父块入口绑定,此处删除重复赋值,避免误读为唯一初始化点。 */
|
|
||||||
on tile[0] : { dsp_main(c_eq_data); }
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
on tile[0] : { dsp_main(c_eq_data); }
|
||||||
|
|
||||||
#if DNR_ENABLE == 1
|
#if DNR_ENABLE == 1
|
||||||
on tile[0] : { dnr_dsp_proc_task(); }
|
on tile[0] : { dnr_dsp_proc_task(); }
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
#include <xs1.h>
|
||||||
|
#include <platform.h>
|
||||||
|
#include "user_main.h"
|
||||||
|
|
||||||
|
// TX1 GPIO LEDs on tile[1] - port declarations (moved from audiohw.xc)
|
||||||
|
on tile[1]: out port p_led_d5 = XS1_PORT_1A; // FPS20 indicator
|
||||||
|
on tile[1]: out port p_led_d1 = XS1_PORT_1B; // FOOTSTEPS indicator
|
||||||
|
on tile[1]: out port p_led_d2 = XS1_PORT_1C; // MIC MUTE indicator
|
||||||
|
on tile[1]: out port p_led_d3 = XS1_PORT_4A; // GUNSHOT indicator (uses 4A bit3)
|
||||||
|
on tile[1]: out port p_led_d4_d7_d6 = XS1_PORT_4D; // bit3=D4_GAME, bit2=D7_3A, bit0=D6_FPS71
|
||||||
|
|
||||||
|
// TX1 HTR3236 RGB LED driver control
|
||||||
|
// 改动原因:与 xu316_qf60.xn 中 PORT_HTR3236_SDB 一致,避免硬编码端口与 xn 脱节
|
||||||
|
on tile[1]: out port p_htr3236_sdb = PORT_HTR3236_SDB;
|
||||||
|
on tile[1]: out port p_ctl_mute = XS1_PORT_1F; // Amplifier mute control
|
||||||
|
|
||||||
|
// tile[1] LED helper task - controls tile[1] GPIO LED ports
|
||||||
|
// Receives commands via tx1_led_if interface from AudioHwRemote2 on tile[0]
|
||||||
|
void tx1_led_helper_task(server interface tx1_led_if led_if)
|
||||||
|
{
|
||||||
|
// Local state mirrors for tile[1] ports
|
||||||
|
unsigned d1_state = 1; // active low: 1=off, 0=on
|
||||||
|
unsigned d2_state = 1;
|
||||||
|
unsigned d3_state = 0xF; // 4-bit port, bit3 controls D3
|
||||||
|
unsigned d5_state = 1;
|
||||||
|
unsigned d4_d7_d6_state = 0xF; // bit3=D4, bit2=D7, bit0=D6
|
||||||
|
|
||||||
|
// Init all LEDs off
|
||||||
|
p_led_d1 <: 1;
|
||||||
|
p_led_d2 <: 1;
|
||||||
|
p_led_d3 <: 0xF;
|
||||||
|
p_led_d5 <: 1;
|
||||||
|
p_led_d4_d7_d6 <: 0xF;
|
||||||
|
p_htr3236_sdb <: 0; // HTR3236 disabled initially
|
||||||
|
p_ctl_mute <: 1; // Muted initially
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
select
|
||||||
|
{
|
||||||
|
case led_if.led_on(tx1_gpio_led_t led):
|
||||||
|
switch (led)
|
||||||
|
{
|
||||||
|
case TX1_GPIO_LED_D1: d1_state = 0; p_led_d1 <: 0; break;
|
||||||
|
case TX1_GPIO_LED_D2: d2_state = 0; p_led_d2 <: 0; break;
|
||||||
|
case TX1_GPIO_LED_D3: d3_state &= ~0x8; p_led_d3 <: d3_state; break;
|
||||||
|
case TX1_GPIO_LED_D4: d4_d7_d6_state &= ~0x8; p_led_d4_d7_d6 <: d4_d7_d6_state; break;
|
||||||
|
case TX1_GPIO_LED_D5: d5_state = 0; p_led_d5 <: 0; break;
|
||||||
|
case TX1_GPIO_LED_D6: d4_d7_d6_state &= ~0x1; p_led_d4_d7_d6 <: d4_d7_d6_state; break;
|
||||||
|
case TX1_GPIO_LED_D7: d4_d7_d6_state &= ~0x4; p_led_d4_d7_d6 <: d4_d7_d6_state; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.led_off(tx1_gpio_led_t led):
|
||||||
|
switch (led)
|
||||||
|
{
|
||||||
|
case TX1_GPIO_LED_D1: d1_state = 1; p_led_d1 <: 1; break;
|
||||||
|
case TX1_GPIO_LED_D2: d2_state = 1; p_led_d2 <: 1; break;
|
||||||
|
case TX1_GPIO_LED_D3: d3_state |= 0x8; p_led_d3 <: d3_state; break;
|
||||||
|
case TX1_GPIO_LED_D4: d4_d7_d6_state |= 0x8; p_led_d4_d7_d6 <: d4_d7_d6_state; break;
|
||||||
|
case TX1_GPIO_LED_D5: d5_state = 1; p_led_d5 <: 1; break;
|
||||||
|
case TX1_GPIO_LED_D6: d4_d7_d6_state |= 0x1; p_led_d4_d7_d6 <: d4_d7_d6_state; break;
|
||||||
|
case TX1_GPIO_LED_D7: d4_d7_d6_state |= 0x4; p_led_d4_d7_d6 <: d4_d7_d6_state; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.set_d4_d7_d6(unsigned d4, unsigned d7, unsigned d6):
|
||||||
|
d4_d7_d6_state = 0xF; // all off
|
||||||
|
if (d4) d4_d7_d6_state &= ~0x8;
|
||||||
|
if (d7) d4_d7_d6_state &= ~0x4;
|
||||||
|
if (d6) d4_d7_d6_state &= ~0x1;
|
||||||
|
p_led_d4_d7_d6 <: d4_d7_d6_state;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.set_all_leds(unsigned d1, unsigned d2, unsigned d3,
|
||||||
|
unsigned d4, unsigned d5, unsigned d6, unsigned d7):
|
||||||
|
p_led_d1 <: d1 ? 0 : 1;
|
||||||
|
p_led_d2 <: d2 ? 0 : 1;
|
||||||
|
d3_state = d3 ? 0x0 : 0xF;
|
||||||
|
p_led_d3 <: d3_state;
|
||||||
|
p_led_d5 <: d5 ? 0 : 1;
|
||||||
|
d4_d7_d6_state = 0xF;
|
||||||
|
if (d4) d4_d7_d6_state &= ~0x8;
|
||||||
|
if (d7) d4_d7_d6_state &= ~0x4;
|
||||||
|
if (d6) d4_d7_d6_state &= ~0x1;
|
||||||
|
p_led_d4_d7_d6 <: d4_d7_d6_state;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.all_off(void):
|
||||||
|
p_led_d1 <: 1;
|
||||||
|
p_led_d2 <: 1;
|
||||||
|
p_led_d3 <: 0xF;
|
||||||
|
p_led_d5 <: 1;
|
||||||
|
p_led_d4_d7_d6 <: 0xF;
|
||||||
|
d1_state = 1; d2_state = 1; d3_state = 0xF;
|
||||||
|
d5_state = 1; d4_d7_d6_state = 0xF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.set_htr3236_sdb(unsigned value):
|
||||||
|
p_htr3236_sdb <: value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.set_mute(unsigned value):
|
||||||
|
//p_ctl_mute <: value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case led_if.init(void):
|
||||||
|
p_led_d1 <: 1;
|
||||||
|
p_led_d2 <: 1;
|
||||||
|
p_led_d3 <: 0xF;
|
||||||
|
p_led_d5 <: 1;
|
||||||
|
p_led_d4_d7_d6 <: 0xF;
|
||||||
|
p_htr3236_sdb <: 1; // Enable HTR3236
|
||||||
|
//p_ctl_mute <: 1; // Muted
|
||||||
|
d1_state = 1; d2_state = 1; d3_state = 0xF;
|
||||||
|
d5_state = 1; d4_d7_d6_state = 0xF;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#ifndef _USER_MAIN_H_
|
#ifndef _USER_MAIN_H_
|
||||||
#define _USER_MAIN_H_
|
#define _USER_MAIN_H_
|
||||||
|
|
||||||
@@ -10,17 +9,47 @@
|
|||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "DSBuild.h"
|
#include "DSBuild.h"
|
||||||
|
|
||||||
/* 改动原因:与 fosi_c1 一致,mode/mic 物理灯在 tile[1],tile[0] 的 button_task 通过 client interface 下发状态,由 app_control_slave 统一驱动 GPIO。 */
|
#define USER_MAIN_DECLARATIONS
|
||||||
interface c1_led_ctrl_if {
|
|
||||||
void set_mode_led_color(unsigned color_idx);
|
// TX1 LED commands for tile[1] LED helper
|
||||||
void set_mic_mute_state(unsigned mute_switch);
|
typedef enum {
|
||||||
void set_mic_voice_fx(unsigned voice_fx_enabled);
|
TX1_LED_CMD_NONE = 0,
|
||||||
|
TX1_LED_CMD_ON, // led_id
|
||||||
|
TX1_LED_CMD_OFF, // led_id
|
||||||
|
TX1_LED_CMD_SET_D4D7D6, // d4, d7, d6 (0/1 each, on=1)
|
||||||
|
TX1_LED_CMD_SET_ALL, // d1,d2,d3,d4,d5,d6,d7 (7 bytes, 0/1)
|
||||||
|
TX1_LED_CMD_HTR3236_SDB, // value (0/1)
|
||||||
|
TX1_LED_CMD_MUTE, // value (0/1)
|
||||||
|
TX1_LED_CMD_INIT,
|
||||||
|
TX1_LED_CMD_ALL_OFF
|
||||||
|
} tx1_led_cmd_t;
|
||||||
|
|
||||||
|
// tile[1] GPIO LED IDs
|
||||||
|
typedef enum {
|
||||||
|
TX1_GPIO_LED_D1 = 0, // FOOTSTEPS
|
||||||
|
TX1_GPIO_LED_D2, // MIC MUTE
|
||||||
|
TX1_GPIO_LED_D3, // GUNSHOT
|
||||||
|
TX1_GPIO_LED_D4, // GAME/BYPASS
|
||||||
|
TX1_GPIO_LED_D5, // FPS20
|
||||||
|
TX1_GPIO_LED_D6, // FPS71
|
||||||
|
TX1_GPIO_LED_D7, // 3A
|
||||||
|
TX1_GPIO_LED_MAX
|
||||||
|
} tx1_gpio_led_t;
|
||||||
|
|
||||||
|
// Interface for tile[1] LED control from tile[0]
|
||||||
|
interface tx1_led_if {
|
||||||
|
void led_on(tx1_gpio_led_t led);
|
||||||
|
void led_off(tx1_gpio_led_t led);
|
||||||
|
void set_d4_d7_d6(unsigned d4, unsigned d7, unsigned d6);
|
||||||
|
void set_all_leds(unsigned d1, unsigned d2, unsigned d3,
|
||||||
|
unsigned d4, unsigned d5, unsigned d6, unsigned d7);
|
||||||
|
void all_off(void);
|
||||||
|
void set_htr3236_sdb(unsigned value);
|
||||||
|
void set_mute(unsigned value);
|
||||||
|
void init(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
void app_control_slave(server interface c1_led_ctrl_if i_c1_led_ctrl);
|
void tx1_led_helper_task(server interface tx1_led_if led_if);
|
||||||
|
|
||||||
/* 改动原因:v71 main.xc 自行展开任务拓扑,此处不注入额外 chan/interface 声明,避免宏续行空定义导致预处理异常。 */
|
|
||||||
#define USER_MAIN_DECLARATIONS
|
|
||||||
|
|
||||||
#endif // __XC__
|
#endif // __XC__
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user