windows detection

This commit is contained in:
Steven Dan
2026-05-13 16:57:10 +08:00
parent ed7a548c4c
commit 7875f6122d
5 changed files with 207 additions and 161 deletions

View File

@@ -108,161 +108,46 @@ set(APP_COMPILER_FLAGS_factory ${SW_FACT_AUDIO_FLAGS} -DI2S_CHANS_DA
-DNUM_USB_CHAN_OUT=2 -DNUM_USB_CHAN_OUT=2
-DI2S_CHANS_ADC=0) -DI2S_CHANS_ADC=0)
#set(APP_COMPILER_FLAGS_boot_0x1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 set(APP_COMPILER_FLAGS_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0
# -DNUM_USB_CHAN_IN=0 -DXUA_SPDIF_TX_EN=0
# -DDSD_CHANS_DAC=2 -DI2S_CHANS_DAC=2
# -DHID_DFU_EN=1 -DSPDIF_RX_I2S_OUT=0
# -DI2S_DSD_SHARED=1 -DAUDIO_CLASS=1
# -DXUA_DFU_EN=1 -DXUA_USB_EN=1
# -DBOOT_MODE=1 -DNUM_USB_CHAN_IN=2
# -DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=32 -DWINDOWS_OS_DESCRIPTOR_SUPPORT
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24 -DNUM_USB_CHAN_IN_FS=2
# -DMAX_FREQ=\(768000\) -DNUM_USB_CHAN_OUT=2
# -DMIN_FREQ=\(44100\) -DNUM_USB_CHAN_OUT_FS=2
# -DDEFAULT_FREQ=\(44100\) -DXUA_USE_SW_PLL=0
# -DHID_CONTROLS=1 -DOUT_VOLUME_IN_MIXER=0
# #-DDEBUG_MEMORY_LOG_ENABLED=0 #-fxscope
# -DNUM_USB_CHAN_OUT=2 #-DXSCOPE
# -DI2S_CHANS_ADC=0) -DXUA_DFU_EN=0
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24
# -DOUTPUT_FORMAT_COUNT=1
#set(MODE_2AMi0o2xxxxxxw16r768_VALUES I2S_MODE=0 -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24
# SYNC_MODE=0 -DINPUT_FORMAT_COUNT=1
# MIDI_ENABLE=0 -DMCLK_441=\(1024*44100\)
# SPDIF_IN_ENABLE=0 -DMCLK_48=\(1024*48000\)
# SPDIF_OUT_ENABLE=0 -DMAX_FREQ=\(48000\)
# ADAT_IN_ENABLE=0 -DMIN_FREQ=\(48000\)
# ADAT_OUT_ENABLE=0 -DDEFAULT_FREQ=\(48000\)
# DSD_OUT_ENABLE=0 -lxmos_fps
# AUDIO_SAMPLE_RATE=9 # 768KHz -DHID_CONTROLS_UAC1=1
# MQA_ENABLE=0 -DEQ_EN=1
# AUDIO_CLASS=1 # UAC 2.0 -DXMOS_FPS_EN=1
# AUDIO_WIDTH=2 # 16bit -DUAC1=1
# INPUT_CHANNEL=0 # Disable -DWIN_OS_DETECTION=1
# OUTPUT_CHANNEL=2 # 2 channels -DHID_CONTROLS=1
# OTHER_CFG=0) -DDNR_50MS=1
# -ldnr_50ms
# -DDEBUG_MEMORY_LOG_ENABLED=1
#calculate_config_value(MODE_2AMi0o2xxxxxxw16r768_VALUES CONFIG_VALUE) -DNO_LOG_TIMESTAPS=0
##set(VARIABLE_NAME "APP_COMPILER_FLAGS_${CONFIG_VALUE}") -DI2S_CHANS_ADC=2)
#
#
#set(APP_COMPILER_FLAGS_2AMi0o2xxxxxxw32r768_${CONFIG_VALUE} ${SW_USB_AUDIO_FLAGS}
# -DI2S_CHANS_DAC=2
# -DDSD_CHANS_DAC=2
# -DI2S_DSD_SHARED=1
# -DNUM_USB_CHAN_IN=0
# -DNUM_USB_CHAN_OUT=2
# -DXUA_DFU_EN=1
# -DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=32
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24
# -DMAX_FREQ=\(384000\)
# -DMIN_FREQ=\(44100\)
# -DDEFAULT_FREQ=\(44100\)
# -DHID_DFU_EN=1
# #-fxscope
# #-DXSCOPE
# -DHID_CONTROLS=1
# -DEQ_EN=1
# #-DDEBUG_MEMORY_LOG_ENABLED=1
# -DNO_LOG_TIMESTAPS=1
# -DI2S_CHANS_ADC=0)
#
#set(MODE_2AMi0o0xsxxxxw24r192_VALUES I2S_MODE=0
# SYNC_MODE=0
# MIDI_ENABLE=0
# SPDIF_IN_ENABLE=1
# SPDIF_OUT_ENABLE=0
# ADAT_IN_ENABLE=0
# ADAT_OUT_ENABLE=0
# DSD_OUT_ENABLE=0
# AUDIO_SAMPLE_RATE=5 # 768KHz
# MQA_ENABLE=0
# AUDIO_CLASS=1 # UAC 2.0
# AUDIO_WIDTH=1 # 24bit
# INPUT_CHANNEL=0 # Disable
# OUTPUT_CHANNEL=2 # 2 channels
# OTHER_CFG=0)
#
#
#calculate_config_value(MODE_2AMi0o0xsxxxxw24r192_VALUES CONFIG_VALUE)
#
#
#set(APP_COMPILER_FLAGS_2AMi0o0xsxxxxw24r192_${CONFIG_VALUE} ${SW_USB_AUDIO_FLAGS}
# -DXUA_SPDIF_RX_EN=1
# -DXUA_SPDIF_TX_EN=0
# -DI2S_CHANS_DAC=2
# -DSPDIF_RX_I2S_OUT=1
# -DXUA_USB_EN=0
# -DNUM_USB_CHAN_IN=0
# -DNUM_USB_CHAN_OUT=0
# -DXUA_USE_SW_PLL=1
# -DOUT_VOLUME_IN_MIXER=0
# -DXUA_DFU_EN=0
# -DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=24
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
# -DMCLK_441=\(512*44100\)
# -DMCLK_48=\(512*48000\)
# -DMAX_FREQ=\(192000\)
# -DMIN_FREQ=\(44100\)
# -DDEFAULT_FREQ=\(44100\)
# -DHID_CONTROLS=0
# -DOPT=1
# -DEQ_EN=1
# -DSPDIF_RX_TILE=1
# -DDEBUG_MEMORY_LOG_ENABLED=0
# -DNO_LOG_TIMESTAPS=0
# -DI2S_CHANS_ADC=0)
#
#set(MODE_2AMi0o0xsxxxxw24r192_VALUES I2S_MODE=0
# SYNC_MODE=0
# MIDI_ENABLE=0
# SPDIF_IN_ENABLE=1
# SPDIF_OUT_ENABLE=0
# ADAT_IN_ENABLE=0
# ADAT_OUT_ENABLE=0
# DSD_OUT_ENABLE=0
# AUDIO_SAMPLE_RATE=5 # 768KHz
# MQA_ENABLE=0
# AUDIO_CLASS=1 # UAC 2.0
# AUDIO_WIDTH=1 # 24bit
# INPUT_CHANNEL=0 # Disable
# OUTPUT_CHANNEL=2 # 2 channels
# OTHER_CFG=1)
#
#
#
#calculate_config_value(MODE_2AMi0o0xsxxxxw24r192_VALUES CONFIG_VALUE)
#
#
#set(APP_COMPILER_FLAGS_2AMi0o0xsxxxxw24r192_${CONFIG_VALUE} ${SW_USB_AUDIO_FLAGS}
# -DXUA_SPDIF_RX_EN=1
# -DXUA_SPDIF_TX_EN=0
# -DI2S_CHANS_DAC=2
# -DSPDIF_RX_I2S_OUT=1
# -DXUA_USB_EN=0
# -DNUM_USB_CHAN_IN=0
# -DNUM_USB_CHAN_OUT=0
# -DXUA_USE_SW_PLL=1
# -DOUT_VOLUME_IN_MIXER=0
# -DXUA_DFU_EN=0
# -DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=24
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
# -DMCLK_441=\(512*44100\)
# -DMCLK_48=\(512*48000\)
# -DMAX_FREQ=\(192000\)
# -DMIN_FREQ=\(44100\)
# -DDEFAULT_FREQ=\(44100\)
# -DHID_CONTROLS=0
# -DCOAX=1
# -DEQ_EN=1
# -DUART_DEBUG=0
# -DSPDIF_RX_TILE=1
# #-DDEBUG_MEMORY_LOG_ENABLED=0
# -DNO_LOG_TIMESTAPS=0
# -DI2S_CHANS_ADC=0)
set(APP_COMPILER_FLAGS_fps ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0
set(APP_COMPILER_FLAGS_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0
-DXUA_SPDIF_TX_EN=0 -DXUA_SPDIF_TX_EN=0
-DI2S_CHANS_DAC=2 -DI2S_CHANS_DAC=2
-DSPDIF_RX_I2S_OUT=0 -DSPDIF_RX_I2S_OUT=0
@@ -277,7 +162,7 @@ set(APP_COMPILER_FLAGS_fps ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX
-DOUT_VOLUME_IN_MIXER=0 -DOUT_VOLUME_IN_MIXER=0
#-fxscope #-fxscope
#-DXSCOPE #-DXSCOPE
-DXUA_DFU_EN=0 -DXUA_DFU_EN=1
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32
-DOUTPUT_FORMAT_COUNT=1 -DOUTPUT_FORMAT_COUNT=1
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32
@@ -299,7 +184,7 @@ set(APP_COMPILER_FLAGS_fps ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX
-DNO_LOG_TIMESTAPS=0 -DNO_LOG_TIMESTAPS=0
-DI2S_CHANS_ADC=2) -DI2S_CHANS_ADC=2)
set(APP_COMPILER_FLAGS_v71 ${SW_USB_AUDIO_FLAGS} set(APP_COMPILER_FLAGS_br_uac2 ${SW_USB_AUDIO_FLAGS}
-DXUA_SPDIF_RX_EN=0 -DXUA_SPDIF_RX_EN=0
-DXUA_SPDIF_TX_EN=0 -DXUA_SPDIF_TX_EN=0
-DI2S_CHANS_DAC=2 -DI2S_CHANS_DAC=2

View File

@@ -1 +1 @@
xflash bin/factory/phaten_module_factory.xe --loader loader.o --upgrade 2 bin/fps/phaten_module_fps.xe --upgrade 1 bin/v71/phaten_module_v71.xe -o %1 xflash bin/factory/phaten_module_factory.xe --loader loader.o --upgrade 2 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 1 bin/fps_uac2/phaten_module_fps_uac2.xe --upgrade 3 bin/br_uac2/phaten_module_br_uac2.xe -o %1

View File

@@ -1 +1 @@
xflash --factory-version 15.3 --target-file src/core/xu316_qf60.xn --upgrade 2 bin/fps/phaten_module_fps.xe --upgrade 1 bin/v71/phaten_module_v71.xe -o %1 xflash --factory-version 15.3 --target-file src/core/xu316_qf60.xn --upgrade 2 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 1 bin/fps_uac2/phaten_module_fps_uac2.xe --upgrade 3 bin/br_uac2/phaten_module_br_uac2.xe -o %1

View File

@@ -31,7 +31,15 @@ extern "C" {
#define TIMER_PERIOD 2000000 #define TIMER_PERIOD 2000000
#define DISABLE_REBOOT 1
#define MODE_FPS_UAC2 COAX_IN_FLAG // 1 FPS
#define MODE_FPS_UAC1 USB_IN_FLAG // 2 UAC1
#define MODE_BR_UAC2 OPT_IN_FLAG // 3 BR
#define MODE_V71_UAC2 UAC1_IN_FLAG // 4 V71
#define MODE_V71_UAC1 BT_IN_FLAG // 5 UAC1
extern unsigned g_host_os; // 1 -> Windows, 2 -> Others
audio_sampling g_new_playback_format, g_playback_format; audio_sampling g_new_playback_format, g_playback_format;
audio_type g_new_audio_type, g_audio_type = 0; audio_type g_new_audio_type, g_audio_type = 0;
unsigned g_mute_enable = 0; unsigned g_mute_enable = 0;
@@ -157,7 +165,7 @@ on tile[0]: out port p_gpio = XS1_PORT_4F;
#define LED_CYAN (LED_GREEN & LED_BLUE) #define LED_CYAN (LED_GREEN & LED_BLUE)
#define LED_PURPLE (LED_RED & LED_BLUE) #define LED_PURPLE (LED_RED & LED_BLUE)
#define LED_WHITE (LED_RED & LED_GREEN & LED_BLUE) #define LED_WHITE (LED_RED & LED_GREEN & LED_BLUE)
unsigned g_led_color = LED_OFF; enum { OS_WIN = 1, OS_OTHERS = 2 };
unsigned g_led_blink_count = 0; unsigned g_led_blink_count = 0;
unsigned g_led_blink_is_white = 0; unsigned g_led_blink_is_white = 0;
@@ -272,7 +280,7 @@ static inline i2c_regop_res_t NAU88C22_REGWRITE(unsigned reg, unsigned val, clie
} }
else else
{ {
debug_printf("write reg [0x%02X] [0x%02X]\n", reg, val); // debug_printf("write reg [0x%02X] [0x%02X]\n", reg, val);
} }
return result; return result;
@@ -349,6 +357,8 @@ void codec_init(void)
void dac_volume(signed level, client interface i2c_master_if i2c) void dac_volume(signed level, client interface i2c_master_if i2c)
{ {
// 1dB/步: level 范围 -28 ~ 0对应寄存器 0xcf-28=0xb3 ~ 0xcf // 1dB/步: level 范围 -28 ~ 0对应寄存器 0xcf-28=0xb3 ~ 0xcf
unsigned tmp = 0xcf + level; unsigned tmp = 0xcf + level;
unsafe {NAU88C22_REGWRITE(0x0034, (tmp<<8|tmp), i2c);} unsafe {NAU88C22_REGWRITE(0x0034, (tmp<<8|tmp), i2c);}
} }
@@ -428,6 +438,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
unsigned vol_up_press_ticks = 0; unsigned vol_up_press_ticks = 0;
// 改动原因mic mute红灯通过interface下发到tile1仅在状态变化时发送减少无意义跨tile调用。 // 改动原因mic mute红灯通过interface下发到tile1仅在状态变化时发送减少无意义跨tile调用。
unsigned last_mute_switch_for_led = 0xFFFFFFFF; unsigned last_mute_switch_for_led = 0xFFFFFFFF;
unsigned host_os = 0;
tmr :> time; /* Input time */ tmr :> time; /* Input time */
time += TIMER_PERIOD; /* Add time */ time += TIMER_PERIOD; /* Add time */
se_tmr :> se_time; se_tmr :> se_time;
@@ -442,12 +453,60 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
firmware_upgrade_init(); firmware_upgrade_init();
#endif #endif
if (c1_mode > 1) if (c1_mode > 4)
{ {
c1_mode = 0; c1_mode = 0;
save_value(C1_MODE_INFO_PATH, c1_mode); save_value(C1_MODE_INFO_PATH, c1_mode);
} }
#if defined(WIN_OS_DETECTION)
for(int i = 0; i < 500; i++)
{
GET_SHARED_GLOBAL(host_os, g_host_os);
if (host_os == OS_WIN) {
debug_printf("Detected Windows OS (OS_WIN) host_os: %d\n", host_os);
break;
}
delay_milliseconds(1);
}
if (host_os == OS_WIN) {
debug_printf("Detected Windows OS (OS_WIN) c1_mode: %d\n", c1_mode);
unsigned flag = 1;
switch (c1_mode)
{
case 1:
flag = MODE_FPS_UAC2;
break;
case 3:
flag = MODE_BR_UAC2;
break;
case 4:
flag = MODE_V71_UAC2;
break;
}
SetRoleSwitchFlag(flag);
#ifndef DISABLE_REBOOT
device_reboot();
while (1);
#endif
}
else
{
if (c1_mode == 5)
{
SetRoleSwitchFlag(MODE_V71_UAC1);
#ifndef DISABLE_REBOOT
device_reboot();
while (1);
#endif
}
}
#endif
// 改动原因:开机从 LittleFS 恢复 DAC 音量寄存器码;无效或未写过时用最大音量 C1_DAC_VOL_MAX避免误用默认值或垃圾数据。 // 改动原因:开机从 LittleFS 恢复 DAC 音量寄存器码;无效或未写过时用最大音量 C1_DAC_VOL_MAX避免误用默认值或垃圾数据。
{ {
unsigned char loaded_dac_vol = load_value(C1_DAC_VOL_INFO_PATH); unsigned char loaded_dac_vol = load_value(C1_DAC_VOL_INFO_PATH);

View File

@@ -0,0 +1,102 @@
#ifndef _HOST_OS_DETECT_H_
#define _HOST_OS_DETECT_H_
#include "xua.h"
#include "xc_ptr.h"
#include "xassert.h"
#if XUA_USB_EN
#ifndef WINDOWS_OS_DESCRIPTOR_SUPPORT
#define WINDOWS_OS_DESCRIPTOR_SUPPORT
#endif
#define EP0_MAX_REQUEST_SIZE 2048
#include "xud.h"
#include "vendorrequests.h"
unsigned g_host_os = 0; // 1 -> Windows, 0 -> Others
int VendorAudioRequests(XUD_ep ep0_out, XUD_ep ep0_in, unsigned char bRequest, unsigned char cs, unsigned char cn,
unsigned short unitId, unsigned char direction, NULLABLE_RESOURCE(chanend, c_aud_ctl),
NULLABLE_RESOURCE(chanend, c_mix_ctl),
NULLABLE_RESOURCE(chanend, c_clk_ctL))
{
return XUD_RES_ERR;
}
enum { OS_WIN = 1, OS_OTHERS = 2 };
#if 1
int VendorRequests(XUD_ep ep0_out, XUD_ep ep0_in, REFERENCE_PARAM(USB_SetupPacket_t, sp) VENDOR_REQUESTS_PARAMS_DEC_)
{
XUD_Result_t result = XUD_RES_ERR;
unsigned char request_data[EP0_MAX_REQUEST_SIZE];
unsigned len;
int a = 0;
unsigned k = 5;
//SET_SHARED_GLOBAL(g_host_os, k);
switch ((sp->bmRequestType.Direction << 7) | (sp->bmRequestType.Type << 5) | (sp->bmRequestType.Recipient)) {
case USB_BMREQ_H2D_VENDOR_DEV:
result = XUD_GetBuffer(ep0_out, request_data, len);
if (result == XUD_RES_OKAY) {
if (a/*control_process_usb_set_request(sp.wIndex, sp.wValue, sp.wLength, request_data, i_control) == CONTROL_SUCCESS*/) {
/* zero length data to indicate success
* on control error, go to standard requests, which will issue STALL
*/
result = XUD_DoSetRequestStatus(ep0_in);
} else {
result = XUD_RES_ERR;
}
}
break;
case USB_BMREQ_D2H_VENDOR_DEV:
/* application retrieval latency inside the control library call
* XUD task defers further calls by NAKing USB transactions
*/
// if (a/*control_process_usb_get_request(sp.wIndex, sp.wValue, sp.wLength, request_data, i_control) == CONTROL_SUCCESS*/) {
// len = sp->wLength;
// result = XUD_DoGetRequest(ep0_out, ep0_in, request_data, len, len);
// /* on control error, go to standard requests, which will issue STALL */
// }
#ifdef WINDOWS_OS_DESCRIPTOR_SUPPORT
// else
if(sp->bRequest == 0x01) // GET_MS_DESCRIPTOR, same as the OS_STR_DESC last byte
{
// dwLength, 4bytes: 16 bytes
request_data[0] = 0x10; request_data[1] = 0x00; request_data[2] = 0x00; request_data[3] = 0x00;
// bcdVersion, 2bytes: For version 1.00, bcdVersion is set to 0x0100.
request_data[4] = 0x00; request_data[5] = 0x01;
// wIndex, 2bytes: 0x04 for extended compat ID descriptors
request_data[6] = 0x04; request_data[7] = 0x00;
// bCount, 1byte: 0
request_data[8] = 0x00;
// RESERVED, 7bytes: all 0
request_data[9] = 0x00; request_data[10] = 0x00; request_data[11] = 0x00;
request_data[12] = 0x00; request_data[13] = 0x00; request_data[14] = 0x00; request_data[15] = 0x00;
result = XUD_DoGetRequest(ep0_out, ep0_in, request_data, 16, sp->wLength);
//xassert(busSpeed == XUD_SPEED_HS);
k = OS_WIN;
SET_SHARED_GLOBAL(g_host_os, k);
}
else {
//xassert(busSpeed == XUD_SPEED_FS);
k = OS_OTHERS;
SET_SHARED_GLOBAL(g_host_os, k);
result = XUD_RES_ERR;
}
#endif
break;
}
return result;
}
#endif
void VendorRequests_Init(VENDOR_REQUESTS_PARAMS_DEC)
{
}
#endif /* XUA_USB_EN */
#endif