75 lines
3.1 KiB
Bash
Executable File
75 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# Project WH-1 ConfigFS Hardware Blueprint Initialization Script
|
|
# Configures the Ingenic SoC to expose a Composite USB Device to the Host PC
|
|
|
|
CONFIGFS_ROOT="/sys/kernel/config/usb_gadget"
|
|
GADGET_DIR="${CONFIGFS_ROOT}/wh_tool"
|
|
|
|
# 1. Clean up any stale configurations
|
|
if [ -d "${GADGET_DIR}" ]; then
|
|
echo "" > "${GADGET_DIR}/UDC" 2>/dev/null
|
|
rm -f "${GADGET_DIR}/configs/c.1/hid.usb0" 2>/dev/null
|
|
rm -f "${GADGET_DIR}/configs/c.1/hid.usb1" 2>/dev/null
|
|
rm -f "${GADGET_DIR}/configs/c.1/acm.usb0" 2>/dev/null
|
|
rm -f "${GADGET_DIR}/configs/c.1/uac2.usb0" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/configs/c.1/strings/0x409" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/configs/c.1" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/functions/hid.usb0" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/functions/hid.usb1" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/functions/acm.usb0" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/functions/uac2.usb0" 2>/dev/null
|
|
rmdir "${GADGET_DIR}/strings/0x409" 2>/dev/null
|
|
rmdir "${GADGET_DIR}" 2>/dev/null
|
|
fi
|
|
|
|
# 2. Instantiate the global USB Tool profile
|
|
mkdir -p "${GADGET_DIR}"
|
|
cd "${GADGET_DIR}"
|
|
|
|
echo "0x1d6b" > idVendor # Linux Foundation Hardware Vendor ID Mapping
|
|
echo "0x0104" > idProduct # Multifunction Composite Gadget ID
|
|
echo "0x0200" > bcdUSB
|
|
echo "0xEF" > bDeviceClass
|
|
echo "0x02" > bDeviceSubClass
|
|
echo "0x01" > bDeviceProtocol
|
|
|
|
mkdir -p strings/0x409
|
|
echo "WH-1-SECURE" > strings/0x409/serialnumber
|
|
echo "Ingenic Labs" > strings/0x409/manufacturer
|
|
echo "WH-1 Pocket Rig" > strings/0x409/product
|
|
|
|
# 3. Define Template Module Functions
|
|
# Function 0: Keyboard HID Node (/dev/hidg0)
|
|
mkdir -p functions/hid.usb0
|
|
echo 1 > functions/hid.usb0/subclass
|
|
echo 1 > functions/hid.usb0/protocol
|
|
echo 8 > functions/hid.usb0/report_length
|
|
echo -ne \\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x26\\xff\\x00\\x05\\x07\\x19\\x00\\x2a\\xff\\x00\\x81\\x00\\xc0 > functions/hid.usb0/report_desc
|
|
|
|
# Function 1: Consumer Control/Volume HID Node (/dev/hidg1)
|
|
mkdir -p functions/hid.usb1
|
|
echo 0 > functions/hid.usb1/subclass
|
|
echo 0 > functions/hid.usb1/protocol
|
|
echo 2 > functions/hid.usb1/report_length
|
|
echo -ne \\x05\\x0c\\x09\\x01\\xa1\\x01\\x15\\x00\\x25\\x01\\x09\\xe9\\x09\\xea\\x09\\xe2\\x75\\x01\\x95\\x03\\x81\\x02\\x95\\x05\\x81\\x03\\xc0 > functions/hid.usb1/report_desc
|
|
|
|
# Function 2: CDC ACM Virtual Serial Port (/dev/ttyGS0)
|
|
mkdir -p functions/acm.usb0
|
|
|
|
# Function 3: UAC2 Audio Stream Engine
|
|
mkdir -p functions/uac2.usb0
|
|
|
|
# 4. Link Functions to Global Core Template Layout Configuration
|
|
mkdir -p configs/c.1/strings/0x409
|
|
echo "Composite Master Config" > configs/c.1/strings/0x409/configuration
|
|
echo 500 > configs/c.1/bmAttributes
|
|
|
|
ln -s functions/hid.usb0 configs/c.1/
|
|
ln -s functions/hid.usb1 configs/c.1/
|
|
ln -s functions/acm.usb0 configs/c.1/
|
|
ln -s functions/uac2.usb0 configs/c.1/
|
|
|
|
# 5. Connect the core stack to the hardware controller
|
|
UDC_DRIVER=$(ls /sys/class/udc | head -n 1)
|
|
echo "${UDC_DRIVER}" > UDC
|