summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJayant Chowdhary <jchowdhary@google.com>2023-09-07 19:38:53 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-09-07 19:38:53 +0000
commit969c01c3f2fe7ded6976ecaf94f09640d93cf977 (patch)
tree07be8e38a6457b70cf6b4e5dd6a8683a80a50400
parenta4675a60afcd0449fd77c5f1dc62cc6b02ab7d7a (diff)
parent9f58739630d30ded1bcfe4f36708fd7c5d70fab9 (diff)
downloadzuma-969c01c3f2fe7ded6976ecaf94f09640d93cf977.tar.gz
Merge changes from topic "webcam-shusky" into udc-qpr-dev
* changes: usb gadget: Add config for UVC in init UsbGadget: Add support for UVC function
-rw-r--r--conf/init.zuma.usb.rc159
-rw-r--r--usb/gadget/UsbGadget.cpp27
2 files changed, 186 insertions, 0 deletions
diff --git a/conf/init.zuma.usb.rc b/conf/init.zuma.usb.rc
index 136382f..8ff9743 100644
--- a/conf/init.zuma.usb.rc
+++ b/conf/init.zuma.usb.rc
@@ -71,6 +71,72 @@ on early-boot
# acm function for uwb
mkdir /config/usb_gadget/g1/functions/acm.uwb0
+ # 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
+ # advertise mjpeg streams
+ mkdir /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m
+ # 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 "166666
+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 "166666
+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
+ # remove write permissions for 'others'
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxBitRate
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMinBitRate
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bmCapabilities
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxBitRate
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMinBitRate
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bmCapabilities
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmaControls
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bDefaultFrameIndex
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bSourceID
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/header/h/dwClockFrequency
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/control/header/h/bcdUVC
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/function_name
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket
+ chmod 664 /config/usb_gadget/g1/functions/uvc.0/streaming_interval
+
# chown file/folder permission
chown system system /config/usb_gadget/
chown system system /config/usb_gadget/g1
@@ -135,6 +201,99 @@ on early-boot
chown system system /config/usb_gadget/g1/functions/rndis.gs4/protocol
chown system system /config/usb_gadget/g1/functions/rndis.gs4/qmult
chown system system /config/usb_gadget/g1/functions/rndis.gs4/subclass
+ chown system system /config/usb_gadget/g1/functions/uvc.0/
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/bInterfaceNumber
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/class
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/fs
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/fs/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/ss
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/class/ss/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/header
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/header/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/header/h/bcdUVC
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/header/h/dwClockFrequency
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/bmControls
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/bSourceID
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/bUnitID
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/iProcessing
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/processing/default/wMaxMultiplier
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/bAssocTerminal
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/bmControls
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/bTerminalID
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/iTerminal
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wObjectiveFocalLengthMax
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wObjectiveFocalLengthMin
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wOcularFocalLength
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/camera/default/wTerminalType
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bAssocTerminal
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bSourceID
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/bTerminalID
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/iTerminal
+ chown system system /config/usb_gadget/g1/functions/uvc.0/control/terminal/output/default/wTerminalType
+ chown system system /config/usb_gadget/g1/functions/uvc.0/function_name
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming_interval
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming_maxburst
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming_maxpacket
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/bInterfaceNumber
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/fs/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/hs/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/class/ss/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default/bColorPrimaries
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default/bMatrixCoefficients
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/color_matching/default/bTransferCharacteristics
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bmInfo
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bStillCaptureMethod
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bTerminalLink
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bTriggerSupport
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/bTriggerUsage
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/header/h/m
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bFrameIndex
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/bmCapabilities
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxBitRate
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/dwMinBitRate
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bFrameIndex
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/bmCapabilities
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwDefaultFrameInterval
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwFrameInterval
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxBitRate
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/dwMinBitRate
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wHeight
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/720p/wWidth
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bAspectRatioX
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bAspectRatioY
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bDefaultFrameIndex
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bFormatIndex
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmaControls
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmFlags
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/mjpeg/m/bmInterlaceFlags
+ chown system system /config/usb_gadget/g1/functions/uvc.0/streaming/uncompressed
chown system system /config/usb_gadget/g1/idProduct
chown system system /config/usb_gadget/g1/idVendor
chown system system /config/usb_gadget/g1/max_speed
diff --git a/usb/gadget/UsbGadget.cpp b/usb/gadget/UsbGadget.cpp
index 70bd801..c96c6c4 100644
--- a/usb/gadget/UsbGadget.cpp
+++ b/usb/gadget/UsbGadget.cpp
@@ -26,6 +26,8 @@
#include <sys/types.h>
#include <unistd.h>
+#include <android-base/properties.h>
+
#include <aidl/android/frameworks/stats/IStats.h>
namespace aidl {
@@ -34,6 +36,9 @@ namespace hardware {
namespace usb {
namespace gadget {
+using ::android::base::GetBoolProperty;
+using ::android::hardware::google::pixel::usb::kUvcEnabled;
+
string enabledPath;
constexpr char kHsi2cPath[] = "/sys/devices/platform/10cb0000.hsi2c";
constexpr char kI2CPath[] = "/sys/devices/platform/10cb0000.hsi2c/i2c-";
@@ -302,6 +307,28 @@ static Status validateAndSetVidPid(uint64_t functions) {
ret = Status(setVidPid("0x18d1", "0x4eec"));
}
break;
+ case GadgetFunction::UVC:
+ if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+ ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+ ret = Status::CONFIGURATION_NOT_SUPPORTED;
+ } else if (!GetBoolProperty(kUvcEnabled, false)) {
+ ALOGE("UVC function not enabled by config");
+ ret = Status::CONFIGURATION_NOT_SUPPORTED;
+ } else {
+ ret = Status(setVidPid("0x18d1", "0x4eed"));
+ }
+ break;
+ case GadgetFunction::ADB | GadgetFunction::UVC:
+ if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+ ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+ ret = Status::CONFIGURATION_NOT_SUPPORTED;
+ } else if (!GetBoolProperty(kUvcEnabled, false)) {
+ ALOGE("UVC function not enabled by config");
+ ret = Status::CONFIGURATION_NOT_SUPPORTED;
+ } else {
+ ret = Status(setVidPid("0x18d1", "0x4eee"));
+ }
+ break;
default:
ALOGE("Combination not supported");
ret = Status::CONFIGURATION_NOT_SUPPORTED;