windows detection
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
102
sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/host_os_detect.c
Normal file
102
sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/host_os_detect.c
Normal 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
|
||||||
Reference in New Issue
Block a user