|  | # Copyright (C) 2012 The Android Open Source Project | 
|  | # | 
|  | # USB configuration common for all android devices | 
|  | # | 
|  |  | 
|  | on post-fs-data | 
|  | chown system system /sys/class/android_usb/android0/f_mass_storage/lun/file | 
|  | chmod 0660 /sys/class/android_usb/android0/f_mass_storage/lun/file | 
|  | chown system system /sys/class/android_usb/android0/f_rndis/ethaddr | 
|  | chmod 0660 /sys/class/android_usb/android0/f_rndis/ethaddr | 
|  | mkdir /data/misc/adb 02750 system shell | 
|  | mkdir /data/adb 0700 root root encryption=Require | 
|  |  | 
|  | # adbd is controlled via property triggers in init.<platform>.usb.rc | 
|  | service adbd /system/bin/adbd --root_seclabel=u:r:su:s0 | 
|  | class core | 
|  | socket adbd seqpacket 660 system system | 
|  | disabled | 
|  | updatable | 
|  | seclabel u:r:adbd:s0 | 
|  |  | 
|  | # Set default value on sys.usb.configfs early in boot sequence. It will be | 
|  | # overridden in `on boot` action of init.hardware.rc. | 
|  | on init | 
|  | setprop sys.usb.configfs 0 | 
|  |  | 
|  | # Used to disable USB when switching states | 
|  | on property:sys.usb.config=none && property:sys.usb.configfs=0 | 
|  | stop adbd | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/bDeviceClass 0 | 
|  | setprop sys.usb.state ${sys.usb.config} | 
|  |  | 
|  | # adb only USB configuration | 
|  | # This is the fallback configuration if the | 
|  | # USB manager fails to set a standard configuration | 
|  | on property:sys.usb.config=adb && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 4EE7 | 
|  | 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 accessory configuration | 
|  | on property:sys.usb.config=accessory && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 2d00 | 
|  | write /sys/class/android_usb/android0/functions ${sys.usb.config} | 
|  | write /sys/class/android_usb/android0/enable 1 | 
|  | setprop sys.usb.state ${sys.usb.config} | 
|  |  | 
|  | # USB accessory configuration, with adb | 
|  | on property:sys.usb.config=accessory,adb && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 2d01 | 
|  | 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} | 
|  |  | 
|  | # audio accessory configuration | 
|  | on property:sys.usb.config=audio_source && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 2d02 | 
|  | write /sys/class/android_usb/android0/functions ${sys.usb.config} | 
|  | write /sys/class/android_usb/android0/enable 1 | 
|  | setprop sys.usb.state ${sys.usb.config} | 
|  |  | 
|  | # audio accessory configuration, with adb | 
|  | on property:sys.usb.config=audio_source,adb && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 2d03 | 
|  | 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 and audio accessory configuration | 
|  | on property:sys.usb.config=accessory,audio_source && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 2d04 | 
|  | write /sys/class/android_usb/android0/functions ${sys.usb.config} | 
|  | write /sys/class/android_usb/android0/enable 1 | 
|  | setprop sys.usb.state ${sys.usb.config} | 
|  |  | 
|  | # USB and audio accessory configuration, with adb | 
|  | on property:sys.usb.config=accessory,audio_source,adb && property:sys.usb.configfs=0 | 
|  | write /sys/class/android_usb/android0/enable 0 | 
|  | write /sys/class/android_usb/android0/idVendor 18d1 | 
|  | write /sys/class/android_usb/android0/idProduct 2d05 | 
|  | 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} | 
|  |  | 
|  | # Used to set USB configuration at boot and to switch the configuration | 
|  | # when changing the default configuration | 
|  | on boot && property:persist.sys.usb.config=* | 
|  | setprop sys.usb.config ${persist.sys.usb.config} | 
|  |  | 
|  | # | 
|  | # USB type C | 
|  | # | 
|  |  | 
|  | # USB mode changes | 
|  | on property:sys.usb.typec.mode=dfp | 
|  | write /sys/class/dual_role_usb/otg_default/mode ${sys.usb.typec.mode} | 
|  | setprop sys.usb.typec.state ${sys.usb.typec.mode} | 
|  |  | 
|  | on property:sys.usb.typec.mode=ufp | 
|  | write /sys/class/dual_role_usb/otg_default/mode ${sys.usb.typec.mode} | 
|  | setprop sys.usb.typec.state ${sys.usb.typec.mode} | 
|  |  | 
|  | # USB data role changes | 
|  | on property:sys.usb.typec.data_role=device | 
|  | write /sys/class/dual_role_usb/otg_default/data_role ${sys.usb.typec.data_role} | 
|  | setprop sys.usb.typec.state ${sys.usb.typec.data_role} | 
|  |  | 
|  | on property:sys.usb.typec.data_role=host | 
|  | write /sys/class/dual_role_usb/otg_default/data_role ${sys.usb.typec.data_role} | 
|  | setprop sys.usb.typec.state ${sys.usb.typec.data_role} | 
|  |  | 
|  | # USB power role changes | 
|  | on property:sys.usb.typec.power_role=source | 
|  | write /sys/class/dual_role_usb/otg_default/power_role ${sys.usb.typec.power_role} | 
|  | setprop sys.usb.typec.state ${sys.usb.typec.power_role} | 
|  |  | 
|  | on property:sys.usb.typec.power_role=sink | 
|  | write /sys/class/dual_role_usb/otg_default/power_role ${sys.usb.typec.power_role} | 
|  | setprop sys.usb.typec.state ${sys.usb.typec.power_role} | 
|  |  | 
|  | on userspace-reboot-requested | 
|  | setprop sys.usb.config "" | 
|  | setprop sys.usb.state "" |