From: Dobrica Pavlinusic Date: Sun, 30 Jun 2019 07:03:15 +0000 (+0200) Subject: upstream uvc-gadget X-Git-Url: http://git.rot13.org/?p=linux-usb-otg;a=commitdiff_plain;h=82937b87ba93b0be9385a4c6742ee34722ab15dc;hp=48859bf902de0d21b51e79935a8f7c07e435443d upstream uvc-gadget --- diff --git a/README b/README index 6620a6f..90770a1 100644 --- a/README +++ b/README @@ -29,5 +29,8 @@ http://github.com/wismna/raspberry-pi/hackpi https://github.com/torvalds/linux/blob/master/Documentation/usb/gadget-testing.txt -https://gist.github.com/kbingham/c39c4cc7c20882a104c08df5206e2f9f -https://github.com/wlhe/uvc-gadget + +UVC (to emulate webcam): + +git clone git://git.ideasonboard.org/uvc-gadget.git + diff --git a/uvc-gadget-install.sh b/uvc-gadget-install.sh new file mode 100755 index 0000000..8773d22 --- /dev/null +++ b/uvc-gadget-install.sh @@ -0,0 +1,10 @@ +#!/bin/sh -xe + +git clone git://git.ideasonboard.org/uvc-gadget.git +cd uvc-gadget +mkdir build +cd build +cmake .. +make +../scripts/uvc-gadget.sh start + diff --git a/uvc-gadget.sh b/uvc-gadget.sh deleted file mode 100755 index 00fd4ee..0000000 --- a/uvc-gadget.sh +++ /dev/null @@ -1,238 +0,0 @@ -#!/bin/sh - -# https://gist.github.com/kbingham/c39c4cc7c20882a104c08df5206e2f9f -# needs user-space part https://github.com/wlhe/uvc-gadget - -if [ ! -d uvc-gadget ] ; then - git clone https://github.com/wlhe/uvc-gadget - cd uvc-gadget && make - cd - -fi - - -# load module -cd /sys/kernel/config/usb_gadget/ || modprobe libcomposite - -set -e -#set -x - -CONFIGFS="/sys/kernel/config" -GADGET="$CONFIGFS/usb_gadget" -VID="0x0525" -PID="0xa4a2" -SERIAL="0123456789" -MANUF=$(hostname) -PRODUCT="UVC Gadget" - -USBFILE=/root/usbstorage.img - -BOARD=$(strings /proc/device-tree/model) - -case $BOARD in - "Renesas Salvator-X board based on r8a7795 ES1.x") - UDC_USB2=e6590000.usb - UDC_USB3=ee020000.usb - - UDC_ROLE2=/sys/devices/platform/soc/ee080200.usb-phy/role - UDC_ROLE2=/dev/null #Not needed - always peripheral - UDC_ROLE3=/sys/devices/platform/soc/ee020000.usb/role - - UDC=$UDC_USB2 - UDC_ROLE=$UDC_ROLE2 - ;; - - "TI OMAP4 PandaBoard-ES") - UDC=`ls /sys/class/udc` # Should be musb-hdrc.0.auto - UDC_ROLE=/dev/null # Not needed - peripheral enabled - ;; - - *) - UDC=`ls /sys/class/udc` # will identify the 'first' UDC - UDC_ROLE=/dev/null # Not generic - ;; -esac - -echo "Detecting platform:" -echo " board : $BOARD" -echo " udc : $UDC" - -create_msd() { - # Example usage: - # create_msd - # create_msd configs/c.1 mass_storage.0 /root/backing.img - CONFIG=$1 - FUNCTION=$2 - BACKING_STORE=$3 - - if [ ! -f $BACKING_STORE ] - then - echo "\tCreating backing file" - dd if=/dev/zero of=$BACKING_STORE bs=1M count=32 > /dev/null 2>&1 - mkfs.ext4 $USBFILE > /dev/null 2>&1 - echo "\tOK" - fi - - echo "\tCreating MSD gadget functionality" - mkdir functions/$FUNCTION - echo 1 > functions/$FUNCTION/stall - echo $BACKING_STORE > functions/$FUNCTION/lun.0/file - echo 1 > functions/$FUNCTION/lun.0/removable - echo 0 > functions/$FUNCTION/lun.0/cdrom - - ln -s functions/$FUNCTION configs/c.1 - - echo "\tOK" -} - -delete_msd() { - # Example usage: - # delete_msd - # delete_msd config/c.1 uvc.0 - CONFIG=$1 - FUNCTION=$2 - - echo "Removing Mass Storage interface : $FUNCTION" - rm -f $CONFIG/$FUNCTION - rmdir functions/$FUNCTION - echo "OK" -} - -create_uvc() { - # Example usage: - # create_uvc - # create_uvc config/c.1 uvc.0 - CONFIG=$1 - FUNCTION=$2 - - echo " Creating UVC gadget functionality : $FUNCTION" - mkdir functions/$FUNCTION - mkdir -p functions/$FUNCTION/streaming/uncompressed/u/360p - cat < functions/$FUNCTION/streaming/uncompressed/u/360p/dwFrameInterval -666666 -1000000 -5000000 -EOF - mkdir functions/$FUNCTION/streaming/header/h - cd functions/$FUNCTION/streaming/header/h - ln -s ../../uncompressed/u - cd ../../class/fs - ln -s ../../header/h - cd ../../class/hs - ln -s ../../header/h - cd ../../../control - mkdir header/h - ln -s header/h class/fs - ln -s header/h class/ss - cd ../../../ - echo 2048 > functions/$FUNCTION/streaming_maxpacket - - ln -s functions/$FUNCTION configs/c.1 -} - -delete_uvc() { - # Example usage: - # delete_uvc - # delete_uvc config/c.1 uvc.0 - CONFIG=$1 - FUNCTION=$2 - - echo " Deleting UVC gadget functionality : $FUNCTION" - rm $CONFIG/$FUNCTION - - rm functions/$FUNCTION/control/class/*/h - rm functions/$FUNCTION/streaming/class/*/h - rm functions/$FUNCTION/streaming/header/h/u - rmdir functions/$FUNCTION/streaming/uncompressed/u/360p - rmdir functions/$FUNCTION/streaming/uncompressed/u - rmdir functions/$FUNCTION/streaming/header/h - rmdir functions/$FUNCTION/control/header/h - rmdir functions/$FUNCTION -} - -case "$1" in - start) - echo "Creating the USB gadget" - #echo "Loading composite module" - #modprobe libcomposite - - echo "Creating gadget directory g1" - mkdir -p $GADGET/g1 - - cd $GADGET/g1 - if [ $? -ne 0 ]; then - echo "Error creating usb gadget in configfs" - exit 1; - else - echo "OK" - fi - - echo "Setting Vendor and Product ID's" - echo $VID > idVendor - echo $PID > idProduct - echo "OK" - - echo "Setting English strings" - mkdir -p strings/0x409 - echo $SERIAL > strings/0x409/serialnumber - echo $MANUF > strings/0x409/manufacturer - echo $PRODUCT > strings/0x409/product - echo "OK" - - echo "Creating Config" - mkdir configs/c.1 - mkdir configs/c.1/strings/0x409 - - echo "Creating functions..." - #create_msd configs/c.1 mass_storage.0 $USBFILE - create_uvc configs/c.1 uvc.0 - echo "OK" - - - echo "Binding USB Device Controller" - echo $UDC > UDC - echo peripheral > $UDC_ROLE - cat $UDC_ROLE - echo "OK" - ;; - - stop) - echo "Stopping the USB gadget" - - set +e # Ignore all errors here on a best effort - - cd $GADGET/g1 - - if [ $? -ne 0 ]; then - echo "Error: no configfs gadget found" - exit 1; - fi - - echo "Unbinding USB Device Controller" - grep $UDC UDC && echo "" > UDC - echo "OK" - - delete_uvc configs/c.1 uvc.0 - #delete_msd configs/c.1 mass_storage.0 - - echo "Clearing English strings" - rmdir strings/0x409 - echo "OK" - - echo "Cleaning up configuration" - rmdir configs/c.1/strings/0x409 - rmdir configs/c.1 - echo "OK" - - echo "Removing gadget directory" - cd $GADGET - rmdir g1 - cd / - echo "OK" - - #echo "Disable composite USB gadgets" - #modprobe -r libcomposite - #echo "OK" - ;; - *) - echo "Usage : $0 {start|stop}" -esac