#!/bin/sh

hid_conf_directory="/sys/kernel/config/usb_gadget/obmc_hid"
dev_name="1e6a0000.usb-vhub"

create_hid() {
    # create gadget
    mkdir "${hid_conf_directory}"
    cd "${hid_conf_directory}"

    # add basic information
    echo 0x0100 > bcdDevice
    echo 0x0200 > bcdUSB
    echo 0x0104 > idProduct		# Multifunction Composite Gadget
    echo 0x1d6b > idVendor		# Linux Foundation

    # create English locale
    mkdir strings/0x409

    echo "OpenBMC" > strings/0x409/manufacturer
    echo "virtual_input" > strings/0x409/product
    echo "OBMC0001" > strings/0x409/serialnumber

    # Create HID keyboard function
    mkdir functions/hid.0

    echo 1 > functions/hid.0/protocol	# 1: keyboard
    echo 8 > functions/hid.0/report_length
    echo 1 > functions/hid.0/subclass

    # Binary HID keyboard descriptor
    #  0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    #  0x09, 0x06, // USAGE (Keyboard)
    #  0xa1, 0x01, // COLLECTION (Application)
    #  0x05, 0x07, //   USAGE_PAGE (Keyboard)
    #  0x19, 0xe0, //   USAGE_MINIMUM (Keyboard LeftControl)
    #  0x29, 0xe7, //   USAGE_MAXIMUM (Keyboard Right GUI)
    #  0x15, 0x00, //   LOGICAL_MINIMUM (0)
    #  0x25, 0x01, //   LOGICAL_MAXIMUM (1)
    #  0x75, 0x01, //   REPORT_SIZE (1)
    #  0x95, 0x08, //   REPORT_COUNT (8)
    #  0x81, 0x02, //   INPUT (Data,Var,Abs)
    #  0x95, 0x01, //   REPORT_COUNT (1)
    #  0x75, 0x08, //   REPORT_SIZE (8)
    #  0x81, 0x03, //   INPUT (Data,Var,Abs)
    #  0x95, 0x05, //   REPORT_COUNT (5)
    #  0x75, 0x01, //   REPORT_SIZE (1)
    #  0x05, 0x08, //   USAGE_PAGE (LEDs)
    #  0x19, 0x01, //   USAGE_MINIMUM (Num Lock)
    #  0x29, 0x05, //   USAGE_MAXIMUM (Kana)
    #  0x91, 0x02, //   OUTPUT (Data,Var,Abs)
    #  0x95, 0x01, //   REPORT_COUNT (1)
    #  0x75, 0x03, //   REPORT_SIZE (3)
    #  0x91, 0x03, //   OUTPUT (Cnst,Var,Abs)
    #  0x95, 0x06, //   REPORT_COUNT (6)
    #  0x75, 0x08, //   REPORT_SIZE (8)
    #  0x15, 0x00, //   LOGICAL_MINIMUM (0)
    #  0x25, 0x65, //   LOGICAL_MAXIMUM (101)
    #  0x05, 0x07, //   USAGE_PAGE (Keyboard)
    #  0x19, 0x00, //   USAGE_MINIMUM (Reserved (no event indicated))
    #  0x29, 0x65, //   USAGE_MAXIMUM (Keyboard Application)
    #  0x81, 0x00, //   INPUT (Data,Ary,Abs)
    #  0xc0        // END_COLLECTION
    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\x25\x65\x05\x07\x19\x00\x29\x65\x81\x00\xc0' > functions/hid.0/report_desc

    # Create HID mouse function
    mkdir functions/hid.1

    echo 2 > functions/hid.1/protocol	# 2: mouse
    echo 6 > functions/hid.1/report_length
    echo 1 > functions/hid.1/subclass

    # Binary HID mouse descriptor (absolute coordinate)
    #  0x05, 0x01,       // USAGE_PAGE (Generic Desktop)
    #  0x09, 0x02,       // USAGE (Mouse)
    #  0xa1, 0x01,       // COLLECTION (Application)
    #  0x09, 0x01,       //   USAGE (Pointer)
    #  0xa1, 0x00,       //   COLLECTION (Physical)
    #  0x05, 0x09,       //     USAGE_PAGE (Button)
    #  0x19, 0x01,       //     USAGE_MINIMUM (Button 1)
    #  0x29, 0x03,       //     USAGE_MAXIMUM (Button 3)
    #  0x15, 0x00,       //     LOGICAL_MINIMUM (0)
    #  0x25, 0x01,       //     LOGICAL_MAXIMUM (1)
    #  0x95, 0x03,       //     REPORT_COUNT (3)
    #  0x75, 0x01,       //     REPORT_SIZE (1)
    #  0x81, 0x02,       //     INPUT (Data,Var,Abs)
    #  0x95, 0x01,       //     REPORT_COUNT (1)
    #  0x75, 0x05,       //     REPORT_SIZE (5)
    #  0x81, 0x03,       //     INPUT (Cnst,Var,Abs)
    #  0x05, 0x01,       //     USAGE_PAGE (Generic Desktop)
    #  0x09, 0x30,       //     USAGE (X)
    #  0x09, 0x31,       //     USAGE (Y)
    #  0x35, 0x00,       //     PHYSICAL_MINIMUM (0)
    #  0x46, 0xff, 0x7f, //     PHYSICAL_MAXIMUM (32767)
    #  0x15, 0x00,       //     LOGICAL_MINIMUM (0)
    #  0x26, 0xff, 0x7f, //     LOGICAL_MAXIMUM (32767)
    #  0x65, 0x11,       //     UNIT (SI Lin:Distance)
    #  0x55, 0x00,       //     UNIT_EXPONENT (0)
    #  0x75, 0x10,       //     REPORT_SIZE (16)
    #  0x95, 0x02,       //     REPORT_COUNT (2)
    #  0x81, 0x02,       //     INPUT (Data,Var,Abs)
    #  0x09, 0x38,       //     Usage (Wheel)
    #  0x15, 0xff,       //     LOGICAL_MINIMUM (-1)
    #  0x25, 0x01,       //     LOGICAL_MAXIMUM (1)
    #  0x35, 0x00,       //     PHYSICAL_MINIMUM (-127)
    #  0x45, 0x00,       //     PHYSICAL_MAXIMUM (127)
    #  0x75, 0x08,       //     REPORT_SIZE (8)
    #  0x95, 0x01,       //     REPORT_COUNT (1)
    #  0x81, 0x06,       //     INPUT (Data,Var,Rel)
    #  0xc0,             //   END_COLLECTION
    #  0xc0              // END_COLLECTION
    echo -ne '\x05\x01\x09\x02\xa1\x01\x09\x01\xa1\x00\x05\x09\x19\x01\x29\x03\x15\x00\x25\x01\x95\x03\x75\x01\x81\x02\x95\x01\x75\x05\x81\x03\x05\x01\x09\x30\x09\x31\x35\x00\x46\xff\x7f\x15\x00\x26\xff\x7f\x65\x11\x55\x00\x75\x10\x95\x02\x81\x02\x09\x38\x15\xff\x25\x01\x35\x00\x45\x00\x75\x08\x95\x01\x81\x06\xc0\xc0' > functions/hid.1/report_desc

    # Create configuration
    mkdir configs/c.1
    mkdir configs/c.1/strings/0x409

    echo 0xe0 > configs/c.1/bmAttributes
    echo 200 > configs/c.1/MaxPower
    echo "" > configs/c.1/strings/0x409/configuration

    # Link HID functions to configuration
    ln -s functions/hid.0 configs/c.1
    ln -s functions/hid.1 configs/c.1
}

connect_hid() {
    if ! [[ `cat UDC` =~ "${dev_name}:p" ]]; then
        i=0
        num_ports=5
        base_usb_dir="/sys/bus/platform/devices/${dev_name}/${dev_name}:p"
        while [ $i -lt $num_ports ]; do
            port=$(($i + 1))
            i=$port
            if [ ! -e "${base_usb_dir}${port}/gadget/suspended" ]; then
                break
            fi
        done
        echo "${dev_name}:p${port}" > UDC
    fi
}

disconnect_hid() {
    if [[ `cat UDC` =~ "${dev_name}:p" ]]; then
        echo "" > UDC
    fi
}

original_directory="$(pwd)"

if [ ! -e "${hid_conf_directory}" ]; then
    create_hid
else
    cd "${hid_conf_directory}"
fi

if [ "$1" = "connect" ]; then
    connect_hid
elif [ "$1" = "disconnect" ]; then
    disconnect_hid
else
    echo "Invalid option: $1. Use 'connect' or 'disconnect'."
fi

cd "${original_directory}"
