import /system_ext/etc/init/hw/init.usb.rc

on early-init

on post-fs
    setprop vendor.usb.vid "0x0E8D"
    mkdir /dev/usb-ffs 0775 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mkdir /config/usb_gadget/g1 0770 shell shell
    write /config/usb_gadget/g1/idVendor ${vendor.usb.vid}
    write /config/usb_gadget/g1/bcdDevice 0x0223
    write /config/usb_gadget/g1/bcdUSB 0x0200
    write /config/usb_gadget/g1/os_desc/use 1
    mkdir /config/usb_gadget/g1/strings/0x409 0770
    write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}
    write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}
    write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}
    mkdir /config/usb_gadget/g1/functions/accessory.gs2
    mkdir /config/usb_gadget/g1/functions/audio_source.gs3
    mkdir /config/usb_gadget/g1/functions/ffs.adb
    mkdir /config/usb_gadget/g1/functions/ffs.mtp
    write /config/usb_gadget/g1/functions/ffs.mtp/os_desc/interface.MTP/compatible_id "MTP"
    mkdir /config/usb_gadget/g1/functions/ffs.ptp
    mkdir /config/usb_gadget/g1/functions/mtk_rndis.gs4
    mkdir /config/usb_gadget/g1/functions/midi.gs5
    mkdir /config/usb_gadget/g1/functions/ncm.gs6
    mkdir /config/usb_gadget/g1/functions/acm.gs0
    mkdir /config/usb_gadget/g1/functions/acm.gs1
    mkdir /config/usb_gadget/g1/functions/acm.gs2
    mkdir /config/usb_gadget/g1/functions/acm.gs3
    mkdir /config/usb_gadget/g1/functions/mass_storage.usb0
    mkdir /config/usb_gadget/g1/functions/hid.gs0
    mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell
    mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell
    write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
    write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
    write /config/usb_gadget/g1/configs/b.1/MaxPower 500
    symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
    mount functionfs adb /dev/usb-ffs/adb rmode=0770,fmode=0660,uid=2000,gid=2000
    mkdir /dev/usb-ffs/mtp 0770 mtp mtp
    mkdir /dev/usb-ffs/ptp 0770 mtp mtp
    mount functionfs mtp /dev/usb-ffs/mtp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
    mount functionfs ptp /dev/usb-ffs/ptp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1

    # uvc function
    mkdir /config/usb_gadget/g1/functions/uvc.0
    write /config/usb_gadget/g1/functions/uvc.0/function_name "Android Webcam"
    write /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket 3072
    # write /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst 5
    # write /config/usb_gadget/g1/functions/uvc.0/streaming_interval 2
    # setup control params
    mkdir /config/usb_gadget/g1/functions/uvc.0/control/header/h
    symlink /config/usb_gadget/g1/functions/uvc.0/control/header/h /config/usb_gadget/g1/functions/uvc.0/control/class/fs/h
    symlink /config/usb_gadget/g1/functions/uvc.0/control/header/h /config/usb_gadget/g1/functions/uvc.0/control/class/ss/h
    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m
    # advertise 360p resolution for webcam encoded as mjpeg
    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wHeight 360
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/wWidth 640
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwMaxVideoFrameBufferSize 460800
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwDefaultFrameInterval 333333
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/360p/dwFrameInterval "333333
416666
666666"
    # advertise 480p resolution for webcam encoded as mjpeg
    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wHeight 480
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/wWidth 640
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwMaxVideoFrameBufferSize 614400
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwDefaultFrameInterval 333333
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/480p/dwFrameInterval "333333
416666
666666"
    # advertise 720p resolution for webcam encoded as mjpeg
    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight 720
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth 1280
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize 1843200
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval 333333
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval "333333
416666
666666"
    # advertise 1080p resolution for webcam encoded as mjpeg
    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight 1080
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth 1920
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize 4147200
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval 333333
    write /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval "333333
416666
666666"
    # TODO: Add uncompressed streams
    # setup streaming params
    mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/header/h
    symlink /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/m
    symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs/h
    symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs/h
    symlink /config/usb_gadget/g1/functions/uvc.0/streaming/header/h /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss/h

on post-fs-data
    mkdir /config/usb_gadget/g1/functions/via_modem.gs0
    mkdir /config/usb_gadget/g1/functions/via_ets.gs0
    mkdir /config/usb_gadget/g1/functions/via_atc.gs0

on boot
    setprop sys.usb.configfs 1
    setprop sys.usb.controller "16751000.usb0"
    setprop vendor.usb.controller "16751000.usb0"
    setprop vendor.usb.acm_cnt 0
    setprop vendor.usb.acm_port0 ""
    setprop vendor.usb.acm_port1 ""
    setprop vendor.usb.acm_enable 0
    write /sys/class/android_usb/android0/f_mtp/cpu_mask 0x80
    write /sys/module/usb_f_mtp/parameters/mtp_rx_cont 1
    chmod 0664 /sys/class/android_usb/android0/iSerial
    chown root system /sys/class/android_usb/android0/iSerial

    chown radio system /sys/class/usb_rawbulk/data/enable
    chmod 0660 /sys/class/usb_rawbulk/data/enable
    chown radio system /sys/class/usb_rawbulk/ets/enable
    chmod 0660 /sys/class/usb_rawbulk/ets/enable
    chown radio system /sys/class/usb_rawbulk/atc/enable
    chmod 0660 /sys/class/usb_rawbulk/atc/enable
    chown radio system /sys/class/usb_rawbulk/pcv/enable
    chmod 0660 /sys/class/usb_rawbulk/pcv/enable
    chown radio system /sys/class/usb_rawbulk/gps/enable
    chmod 0660 /sys/class/usb_rawbulk/gps/enable
    chown system radio /dev/ttyGS0
    chmod 0660 /dev/ttyGS0
    chown system radio /dev/ttyGS1
    chmod 0660 /dev/ttyGS1
    chown system radio /dev/ttyGS2
    chmod 0660 /dev/ttyGS2
    chown system radio /dev/ttyGS3
    chmod 0660 /dev/ttyGS3

    chmod 0640 /dev/mtk_usb_offload
    chown media media /dev/mtk_usb_offload

    # for usb otg sdcard hot plug detection
    write /sys/module/block/parameters/events_dfl_poll_msecs 1000

    # force on usb
    # write /sys/class/udc/${sys.usb.controller}/device/mode 3

on charger
    mkdir /dev/usb-ffs 0775 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mkdir /config/usb_gadget/g1 0770 shell shell
    write /config/usb_gadget/g1/idVendor 0x0E8D
    write /config/usb_gadget/g1/bcdDevice 0x0223
    write /config/usb_gadget/g1/bcdUSB 0x0200
    write /config/usb_gadget/g1/os_desc/use 1
    mkdir /config/usb_gadget/g1/strings/0x409 0770
    write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}
    write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}
    write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}
    mkdir /config/usb_gadget/g1/functions/ffs.adb
    mkdir /config/usb_gadget/g1/functions/midi.gs5
    mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell
    mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell
    write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
    write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
    write /config/usb_gadget/g1/configs/b.1/MaxPower 500
    symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
    mount functionfs adb /dev/usb-ffs/adb rmode=0770,fmode=0660,uid=2000,gid=2000,no_disconnect=1
    setprop sys.usb.configfs 1
    setprop sys.usb.controller "16751000.usb0"
    setprop vendor.usb.controller "16751000.usb0"

# midi for kpoc
on property:ro.bootmode=charger && property:ro.debuggable=0
    setprop sys.usb.config kpoc_midi

on property:ro.bootmode=charger && property:ro.debuggable=1 && property:ro.vendor.usb.kpoc_adb=0
    setprop sys.usb.config kpoc_midi

on property:sys.usb.config=kpoc_midi && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "kpoc_midi"
    write /config/usb_gadget/g1/idProduct 0x2046
    symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}

# adb for kpoc
on property:ro.bootmode=charger && property:ro.debuggable=1 && property:ro.vendor.usb.kpoc_adb=1
    setprop sys.usb.config kpoc_adb

on property:sys.usb.config=kpoc_adb && property:sys.usb.configfs=1
    start kpoc_adbd

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=kpoc_adb && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "kpoc_adb"
    write /config/usb_gadget/g1/idProduct 0x201C
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}

### more command at init.usb.configfs.rc ###
on property:sys.usb.config=none && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor ${vendor.usb.vid}
    rm /config/usb_gadget/g1/configs/b.1/f1
    rm /config/usb_gadget/g1/configs/b.1/f2
    rm /config/usb_gadget/g1/configs/b.1/f3
    rm /config/usb_gadget/g1/configs/b.1/f4
    rm /config/usb_gadget/g1/configs/b.1/f5
    rmdir /config/usb_gadget/g1/functions/mtk_rndis.gs4
    rmdir /config/usb_gadget/g1/functions/ncm.gs6
    write /sys/class/udc/${vendor.usb.controller}/device/saving 0
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 1

### main function : adb ###
### start adbd at init.usb.configfs.rc ###
on property:sys.usb.config=adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2006
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2029




### main function : rndis ###
on property:sys.usb.config=rndis && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2011
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=rndis && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x202C

on property:sys.usb.config=rndis && property:vendor.usb.acm_enable=1 && \
property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/mtk_rndis.gs4
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/mtk_rndis.gs4 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f3
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis && property:vendor.usb.acm_enable=0 && \
property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/mtk_rndis.gs4
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "rndis"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0
    symlink /config/usb_gadget/g1/functions/mtk_rndis.gs4 /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis,adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2010
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=rndis,adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2028

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=rndis,adb && \
property:vendor.usb.acm_enable=1 && property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/mtk_rndis.gs4
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "rndis_adb_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0
    symlink /config/usb_gadget/g1/functions/mtk_rndis.gs4 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=rndis,adb && \
property:vendor.usb.acm_enable=0 && property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/mtk_rndis.gs4
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "rndis_adb"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0
    symlink /config/usb_gadget/g1/functions/mtk_rndis.gs4 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

### main function : ncm ###
on property:sys.usb.config=ncm && property:vendor.usb.acm_cnt=0 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2067
on property:sys.usb.config=ncm && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2068
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=ncm && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2069

on property:sys.usb.config=ncm && property:vendor.usb.acm_enable=1 && \
property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/ncm.gs6
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ncm_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/ncm.gs6 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f3
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=ncm && property:vendor.usb.acm_enable=0 && \
property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/ncm.gs6
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ncm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    symlink /config/usb_gadget/g1/functions/ncm.gs6 /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=ncm,adb && property:vendor.usb.acm_cnt=0 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x206A
on property:sys.usb.config=ncm,adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x206B
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=ncm,adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x206C

on property:sys.usb.config=ncm,adb && property:sys.usb.configfs=1
    start adbd

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=ncm,adb && \
property:vendor.usb.acm_enable=1 && property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/ncm.gs6
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ncm_adb_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/ncm.gs6 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=ncm,adb && \
property:vendor.usb.acm_enable=0 && property:sys.usb.configfs=1
    mkdir /config/usb_gadget/g1/functions/ncm.gs6
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ncm_adb"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    symlink /config/usb_gadget/g1/functions/ncm.gs6 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

### main function : uvc ###
on property:sys.usb.config=uvc && property:vendor.usb.acm_cnt=0 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x206D
on property:sys.usb.config=uvc && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x206E
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=uvc && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x206F

on property:sys.usb.config=uvc && property:vendor.usb.acm_enable=1 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "uvc_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/uvc.0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f3
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=uvc && property:vendor.usb.acm_enable=0 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "uvc"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    symlink /config/usb_gadget/g1/functions/uvc.0 /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=uvc,adb && property:vendor.usb.acm_cnt=0 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2070
on property:sys.usb.config=uvc,adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2071
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=uvc,adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2072

on property:sys.usb.config=uvc,adb && property:sys.usb.configfs=1
    start adbd

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=uvc,adb && \
property:vendor.usb.acm_enable=1 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "uvc_adb_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/uvc.0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=uvc,adb && \
property:vendor.usb.acm_enable=0 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "uvc_adb"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    symlink /config/usb_gadget/g1/functions/uvc.0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

### main function : midi ###
on property:sys.usb.config=midi && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idProduct 0x2046

on property:sys.usb.config=midi,adb && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idProduct 0x2048

### main function : accessory ###
on property:sys.usb.config=accessory && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x2d00
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0

on property:sys.usb.config=accessory,adb && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x2d01
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0

### main function : audio_source ###
on property:sys.usb.config=audio_source && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x2d02

on property:sys.usb.config=audio_source,adb && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x2d03

### main function : accessory,audio_source ###
on property:sys.usb.config=accessory,audio_source && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x2d04
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0

on property:sys.usb.config=accessory,audio_source,adb && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/idVendor 0x18d1
    write /config/usb_gadget/g1/idProduct 0x2d05
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0

on property:sys.usb.config=via_bypass && property:vendor.usb.acm_cnt=0 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2031
on property:sys.usb.config=via_bypass && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2033
    setprop vendor.usb.acm_port1 ""

##via_modem,via_ets,via_atc,acm
on property:sys.usb.config=via_bypass && property:vendor.usb.acm_enable=1 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "via_bypass"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/via_modem.gs0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/via_ets.gs0 /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/via_atc.gs0 /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

##via_modem,via_ets,via_atc,adb
on property:sys.usb.config=via_bypass && property:vendor.usb.acm_enable=0 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "via_bypass"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/via_modem.gs0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/via_ets.gs0 /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/via_atc.gs0 /config/usb_gadget/g1/configs/b.1/f3
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=via_bypass,adb && property:vendor.usb.acm_cnt=0 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2032
on property:sys.usb.config=via_bypass,adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2034
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=via_bypass,adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2050

on property:sys.usb.config=via_bypass,adb && property:sys.usb.configfs=1
    start adbd

##via_modem,via_ets,via_atc,adb,acm
on property:sys.usb.ffs.ready=1 && property:sys.usb.config=via_bypass,adb && \
property:vendor.usb.acm_enable=1 && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "rndis_adb_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0
    symlink /config/usb_gadget/g1/functions/via_modem.gs0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/via_ets.gs0 /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/via_atc.gs0 /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f4
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f5
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

##via_modem,acm,adb
on property:sys.usb.ffs.ready=1 && property:sys.usb.config=via_bypass,adb && \
property:vendor.usb.acm_enable=1 && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "rndis_adb_acm2"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0
    symlink /config/usb_gadget/g1/functions/via_modem.gs0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

##via_modem,via_ets,via_atc,adb
on property:sys.usb.ffs.ready=1 && property:sys.usb.config=via_bypass,adb && \
property:vendor.usb.acm_enable=0 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "rndis_adb"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    write /sys/class/udc/${vendor.usb.controller}/device/u3_lpm 0
    symlink /config/usb_gadget/g1/functions/via_modem.gs0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/via_ets.gs0 /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/via_atc.gs0 /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

### main function : mass_storage ###
on property:sys.usb.config=mass_storage && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x200F
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=mass_storage && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x202D

on property:sys.usb.config=mass_storage && property:vendor.usb.acm_enable=1 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f3
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=mass_storage && property:vendor.usb.acm_enable=0 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=mass_storage,adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2006
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=mass_storage,adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2029

on property:sys.usb.config=mass_storage,adb && property:sys.usb.configfs=1
    start adbd

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=mass_storage,adb && \
property:vendor.usb.acm_enable=1 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_adb_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=mass_storage,adb && \
property:vendor.usb.acm_enable=0 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_adb"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

### main function : bicr ###
on property:sys.usb.config=bicr && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x200F
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=bicr && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x202D

on property:sys.usb.config=bicr && property:vendor.usb.acm_enable=1 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom 1
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file "/dev/block/loop0"
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f3
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=bicr && property:vendor.usb.acm_enable=0 && \
property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom 1
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file "/dev/block/loop0"
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=bicr,adb && property:vendor.usb.acm_cnt=1 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2006
    setprop vendor.usb.acm_port1 ""
on property:sys.usb.config=bicr,adb && property:vendor.usb.acm_cnt=2 && \
property:sys.usb.configfs=1
    setprop vendor.usb.pid 0x2029

on property:sys.usb.config=bicr,adb && property:sys.usb.configfs=1
    start adbd

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=bicr,adb && \
property:vendor.usb.acm_enable=1 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_adb_acm"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /sys/class/udc/${vendor.usb.controller}/device/saving 1
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom 1
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file "/dev/block/loop0"
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port0} /config/usb_gadget/g1/configs/b.1/f3
    symlink /config/usb_gadget/g1/functions/acm.gs${vendor.usb.acm_port1} /config/usb_gadget/g1/configs/b.1/f4
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.ffs.ready=1 && property:sys.usb.config=bicr,adb && \
property:vendor.usb.acm_enable=0 && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "ums_adb"
    write /config/usb_gadget/g1/idProduct ${vendor.usb.pid}
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom 1
    write /config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file "/dev/block/loop0"
    symlink /config/usb_gadget/g1/functions/mass_storage.usb0 /config/usb_gadget/g1/configs/b.1/f1
    symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}

### ACM APPEND SERIES ###
on property:persist.vendor.radio.port_index="0" && property:sys.boot_completed=1
    setprop vendor.usb.acm_idx ""
    setprop vendor.usb.acm_cnt 0
    setprop vendor.usb.acm_enable 0
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}

on property:persist.vendor.radio.port_index="1" && property:sys.boot_completed=1
    setprop sys.usb.config acm_gs0
on property:sys.usb.config=mass_storage,adb,acm
    setprop sys.usb.config acm_gs0
on property:sys.usb.config=atm_gs0
    setprop sys.usb.config acm_gs0
on property:sys.usb.config=acm_gs0
    setprop vendor.usb.acm_port0 0
    setprop vendor.usb.acm_port1 ""
    setprop vendor.usb.acm_cnt 1
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "1"

on property:persist.vendor.radio.port_index="2" && property:sys.boot_completed=1
    setprop sys.usb.config acm_gs1
on property:sys.usb.config=acm_gs1
    setprop vendor.usb.acm_port0 1
    setprop vendor.usb.acm_port1 ""
    setprop vendor.usb.acm_cnt 1
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "2"

on property:persist.vendor.radio.port_index="3" && property:sys.boot_completed=1
    setprop sys.usb.config acm_gs2
on property:sys.usb.config=acm_third
    setprop sys.usb.config acm_gs2
on property:sys.usb.config=acm_gs2
    setprop vendor.usb.acm_port0 2
    setprop vendor.usb.acm_port1 ""
    setprop vendor.usb.acm_cnt 1
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "3"

on property:persist.vendor.radio.port_index="4" && property:sys.boot_completed=1
    setprop sys.usb.config acm_gs3
on property:sys.usb.config=gs3
    setprop sys.usb.config acm_gs3
on property:sys.usb.config=mtp,gs3
    setprop sys.usb.config acm_gs3
on property:sys.usb.config=acm_gs3
    setprop vendor.usb.acm_port0 3
    setprop vendor.usb.acm_port1 ""
    setprop vendor.usb.acm_cnt 1
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "4"

on property:sys.usb.config=mtp,gs0gs1
    setprop sys.usb.config acm_gs0gs1
on property:sys.usb.config=gs0gs1
    setprop sys.usb.config acm_gs0gs1
on property:sys.usb.config=rndis,gs0gs1
    setprop sys.usb.config acm_gs0gs1
on property:sys.usb.config=rndis,adb,gs0gs1
    setprop sys.usb.config acm_gs0gs1
on property:sys.usb.config=acm_gs0gs1
    setprop vendor.usb.acm_port0 0
    setprop vendor.usb.acm_port1 1
    setprop vendor.usb.acm_cnt 2
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "1,2"

on property:persist.vendor.radio.port_index="1,4" && property:sys.boot_completed=1
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=gs3,dual_acm
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=mtp,gs3,dual_acm
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=mtp,gs0gs3
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=gs0gs3
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=rndis,gs0gs3
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=rndis,adb,gs0gs3
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=atm_gs0gs3
    setprop sys.usb.config acm_gs0gs3
on property:sys.usb.config=acm_gs0gs3
    setprop vendor.usb.acm_port0 0
    setprop vendor.usb.acm_port1 3
    setprop vendor.usb.acm_cnt 2
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "1,4"

on property:sys.usb.config=gs1gs3
    setprop sys.usb.config acm_gs1gs3
on property:sys.usb.config=mtp,gs1gs3
    setprop sys.usb.config acm_gs1gs3
on property:sys.usb.config=via_bypass,gs1gs3
    setprop sys.usb.config acm_gs1gs3
on property:sys.usb.config=rndis,gs1gs3
    setprop sys.usb.config acm_gs1gs3
on property:sys.usb.config=acm_gs1gs3
    setprop vendor.usb.acm_port0 1
    setprop vendor.usb.acm_port1 3
    setprop vendor.usb.acm_cnt 2
    setprop vendor.usb.acm_enable 1
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.acm_idx "2,4"

### CHARGING ###
on property:sys.usb.config=cdp && property:sys.usb.configfs=1
    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "mtp"
    write /config/usb_gadget/g1/idProduct 0x2008
    write /config/usb_gadget/g1/os_desc/use 1
    symlink /config/usb_gadget/g1/functions/ffs.mtp /config/usb_gadget/g1/configs/b.1/f1
    write /config/usb_gadget/g1/UDC ${vendor.usb.controller}
    setprop sys.usb.state ${sys.usb.config}
    setprop vendor.usb.pid 0x2008

on property:sys.usb.config=charging_yes
    setprop vendor.usb.charging yes
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}

on property:sys.usb.config=charging_no
    setprop sys.usb.config none
    setprop sys.usb.config ${sys.usb.state}
    setprop vendor.usb.charging no

on property:vendor.usb.charging=yes
    write /sys/class/udc/${vendor.usb.controller}/device/mode 0
on property:vendor.usb.charging=no
    write /sys/class/udc/${vendor.usb.controller}/device/mode 1

on property:vendor.usb.bicr=yes
    write /sys/class/android_usb/android0/f_mass_storage/bicr 1
    write /sys/class/android_usb/android0/f_mass_storage/lun/file "/dev/block/loop0"
on property:vendor.usb.bicr=no
    write /sys/class/android_usb/android0/f_mass_storage/bicr 0
    write /sys/class/android_usb/android0/f_mass_storage/lun/file "off"

on property:vendor.em.usb.set=term_sel
    write /proc/mtk_usb/usb-phy0/u2_phy/term_sel ${vendor.em.usb.value}
on property:vendor.em.usb.set=vrt_sel
    write /proc/mtk_usb/usb-phy0/u2_phy/vrt_sel ${vendor.em.usb.value}
on property:vendor.em.usb.set=phy_rev6
    write /proc/mtk_usb/usb-phy0/u2_phy/phy_rev6 ${vendor.em.usb.value}
on property:vendor.em.usb.set=discth
    write /proc/mtk_usb/usb-phy0/u2_phy/discth ${vendor.em.usb.value}

on property:vendor.em.usb.bypass.enable=0
	write /sys/class/usb_rawbulk/gps/enable 1
on property:vendor.em.usb.bypass.enable=1
	write /sys/class/usb_rawbulk/pcv/enable 1
on property:vendor.em.usb.bypass.enable=2
	write /sys/class/usb_rawbulk/atc/enable 1
on property:vendor.em.usb.bypass.enable=3
	write /sys/class/usb_rawbulk/ets/enable 1
on property:vendor.em.usb.bypass.enable=4
	write /sys/class/usb_rawbulk/data/enable 1
on property:vendor.em.usb.bypass.disable=0
	write /sys/class/usb_rawbulk/gps/enable 0
on property:vendor.em.usb.bypass.disable=1
	write /sys/class/usb_rawbulk/pcv/enable 0
on property:vendor.em.usb.bypass.disable=2
	write /sys/class/usb_rawbulk/atc/enable 0
on property:vendor.em.usb.bypass.disable=3
	write /sys/class/usb_rawbulk/ets/enable 0
on property:vendor.em.usb.bypass.disable=4
	write /sys/class/usb_rawbulk/data/enable 0

### vendor process start ###
on property:vendor.usb.config=*
    setprop sys.usb.config ${vendor.usb.config}
### vendor process end ###

### test command start ###
on property:vendor.usb.test=*
    setprop sys.usb.config none
    setprop sys.usb.config ${vendor.usb.test}
### test command end ###

on property:vendor.usb.printk=*
	write /proc/sys/kernel/printk ${vendor.usb.printk}

on property:persist.vendor.usb.printk=*
	setprop vendor.usb.printk ${persist.vendor.usb.printk}

on property:vendor.usb.speed.mode=u3p
	write /sys/class/udc/${vendor.usb.controller}/device/max_speed super-speed-plus

on property:vendor.usb.speed.mode=u3
	write /sys/class/udc/${vendor.usb.controller}/device/max_speed super-speed

on property:vendor.usb.speed.mode=u2
	write /sys/class/udc/${vendor.usb.controller}/device/max_speed high-speed

on property:persist.vendor.usb.speed.mode=u3p
	write /sys/class/udc/${vendor.usb.controller}/device/max_speed super-speed-plus

on property:persist.vendor.usb.speed.mode=u3
	write /sys/class/udc/${vendor.usb.controller}/device/max_speed super-speed

on property:persist.vendor.usb.speed.mode=u2
	write /sys/class/udc/${vendor.usb.controller}/device/max_speed high-speed

on property:vendor.usb.sib_enable=1
	write /proc/mtk_usb/usb-phy0/u3_phy/sib 1

on property:vendor.usb.sib_enable=0
	write /proc/mtk_usb/usb-phy0/u3_phy/sib 0

on property:vendor.usb.testmode=0
	write /proc/mtk_usb/xhci0/testmode "0"
on property:vendor.usb.testmode=1
	write /proc/mtk_usb/xhci0/testmode "test SE0 NAK"
on property:vendor.usb.testmode=2
	write /proc/mtk_usb/xhci0/testmode "test J"
on property:vendor.usb.testmode=3
	write /proc/mtk_usb/xhci0/testmode "test K"
on property:vendor.usb.testmode=4
	write /proc/mtk_usb/xhci0/testmode "test packet"

on property:vendor.usb.device.wakeup=*
	write ${vendor.usb.device.wakeup} "enabled"
	write /sys/devices/platform/soc/${vendor.usb.controller}/host_dev 1

### PLATFORM VARIANT, cat $rc_file | grep write | sort | grep -vE "android0|usb20_phy" | awk '{print $2}' | uniq ###
