# Copyright 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

on init
    write /sys/class/android_usb/android0/f_rndis/wceis 1

on boot
    write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
    write /sys/class/android_usb/android0/iProduct ${ro.product.model}
    write /sys/class/android_usb/android0/f_mass_storage/vendor ${ro.product.manufacturer}
    write /sys/class/android_usb/android0/f_mass_storage/product ${ro.product.model}
    write /sys/class/android_usb/android0/iSerial ${ro.serialno}
    write /sys/module/dwc3_msm/parameters/prop_chg_detect 1
    mkdir /dev/bus 0755 root root
    mkdir /dev/bus/usb 0755 root root
    chown system system /sys/class/android_usb/android0/secure
    chmod 0660 /sys/class/android_usb/android0/secure

on fs
    mkdir /dev/usb-ffs 0770 shell shell
    mkdir /dev/usb-ffs/adb 0770 shell shell
    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
    write /sys/class/android_usb/android0/f_ffs/aliases adb

# USB compositions
on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 05C6
    write /sys/class/android_usb/android0/idProduct 9025
    write /sys/class/android_usb/android0/f_diag/clients diag
    write /sys/class/android_usb/android0/f_serial/transports smd,tty
    write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
    write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 05C6
    write /sys/class/android_usb/android0/idProduct 9026
    write /sys/class/android_usb/android0/f_diag/clients diag
    write /sys/class/android_usb/android0/f_serial/transports smd,tty
    write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
    write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE3
    write /sys/class/android_usb/android0/functions rndis
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE4
    write /sys/class/android_usb/android0/functions rndis,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=mtp
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/bDeviceClass 0
    write /sys/class/android_usb/android0/bDeviceSubClass 0
    write /sys/class/android_usb/android0/bDeviceProtocol 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE1
    write /sys/class/android_usb/android0/functions mtp
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=mtp,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/bDeviceClass 0
    write /sys/class/android_usb/android0/bDeviceSubClass 0
    write /sys/class/android_usb/android0/bDeviceProtocol 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE2
    write /sys/class/android_usb/android0/functions mtp,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,usbnet,adb
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 2ea1
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode usb
    write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
    write /sys/class/android_usb/android0/f_serial/transports hsic,tty
    write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
    write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
    write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
    write /sys/class/android_usb/android0/functions diag,serial,rmnet,usbnet,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,usbnet
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct ${ro.usb.bpt}
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode usb
    write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
    write /sys/class/android_usb/android0/f_serial/transports hsic,tty
    write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
    write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
    write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
    write /sys/class/android_usb/android0/functions diag,serial,rmnet,usbnet
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis,diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,usbnet,adb
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 2ea3
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode usb
    write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
    write /sys/class/android_usb/android0/f_serial/transports hsic,tty
    write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
    write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
    write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
    write /sys/class/android_usb/android0/functions rndis,diag,serial,rmnet,usbnet,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis,diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,usbnet
    stop adbd
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct ${ro.usb.bpteth}
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode usb
    write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
    write /sys/class/android_usb/android0/f_serial/transports hsic,tty
    write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
    write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
    write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
    write /sys/class/android_usb/android0/functions rndis,diag,serial,rmnet,usbnet
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=usbnet,adb
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 2e2d
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode internal
    write /sys/class/android_usb/android0/functions usbnet,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=usbnet
    stop adbd
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 2e2c
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode internal
    write /sys/class/android_usb/android0/functions usbnet
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=diag,usbnet
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 2e34
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode usb
    write /sys/class/android_usb/android0/f_diag/clients diag
    write /sys/class/android_usb/android0/functions diag,usbnet
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=diag,usbnet,adb
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idProduct 2e35
    write /sys/class/android_usb/android0/idVendor 22b8
    write /sys/class/diag/diag/logging_mode usb
    write /sys/class/android_usb/android0/f_diag/clients diag
    write /sys/class/android_usb/android0/functions diag,usbnet,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=ptp
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/bDeviceClass 0
    write /sys/class/android_usb/android0/bDeviceSubClass 0
    write /sys/class/android_usb/android0/bDeviceProtocol 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE5
    write /sys/class/android_usb/android0/functions ptp
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=ptp,adb
    start tcmd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/bDeviceClass 0
    write /sys/class/android_usb/android0/bDeviceSubClass 0
    write /sys/class/android_usb/android0/bDeviceProtocol 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE6
    write /sys/class/android_usb/android0/functions ptp,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

# USB midi configuration
on property:sys.usb.config=midi
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE8
    write /sys/class/android_usb/android0/functions ${sys.usb.config}
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

# USB midi configuration, with adb
on property:sys.usb.config=midi,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18D1
    write /sys/class/android_usb/android0/idProduct 4EE9
    write /sys/class/android_usb/android0/functions ${sys.usb.config}
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

# QDSS - Qualcomm Debug Subsystem
on property:sys.usb.config=diag,qdss,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 05C6
    write /sys/class/android_usb/android0/idProduct 9060
    write /sys/class/android_usb/android0/f_diag/clients diag
    write /sys/class/android_usb/android0/functions diag,qdss,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}