USB: Save path to device files for HID functions

This commit is contained in:
mame82 2018-06-26 16:33:19 +00:00
parent 353c16dc39
commit aa31a1f0f8
4 changed files with 49 additions and 12 deletions

View File

@ -39,5 +39,11 @@ func main() {
service.InitLed(false) //Set LED to manual trigger
service.InitDefaultLEDSettings()
log.Printf("Keyboard devFile: %s\n", service.HidDevPath[service.USB_FUNCTION_HID_KEYBOARD_name])
log.Printf("Mouse devFile: %s\n", service.HidDevPath[service.USB_FUNCTION_HID_MOUSE_name])
log.Printf("HID RAW devFile: %s\n", service.HidDevPath[service.USB_FUNCTION_HID_RAW_name])
service.StartRpcServerAndWeb("0.0.0.0", "50051") //start gRPC service
}

0
ToDo.txt Normal file
View File

View File

@ -12,6 +12,7 @@ import (
"time"
"fmt"
"net"
"regexp"
)
const (
@ -73,7 +74,9 @@ const (
)
var (
GadgetSettingsState pb.GadgetSettings = pb.GadgetSettings{}
GadgetSettingsState pb.GadgetSettings = pb.GadgetSettings{}
rp_usbHidDevName = regexp.MustCompile("(?m)DEVNAME=(.*)\n")
HidDevPath = make(map[string]string) //stores device path for HID devices
)
func ValidateGadgetSetting(gs pb.GadgetSettings) error {
@ -568,6 +571,12 @@ func DeployGadgetSettings(settings pb.GadgetSettings) error {
}
}
//clear device path for HID devices
HidDevPath[USB_FUNCTION_HID_KEYBOARD_name] = ""
HidDevPath[USB_FUNCTION_HID_MOUSE_name] = ""
HidDevPath[USB_FUNCTION_HID_RAW_name] = ""
//get UDC driver name and bind to gadget
if settings.Enabled {
udc_name, err := getUDCName()
@ -578,9 +587,16 @@ func DeployGadgetSettings(settings pb.GadgetSettings) error {
if err = ioutil.WriteFile(USB_GADGET_DIR+"/UDC", []byte(udc_name), os.ModePerm); err != nil {
return err
}
//update device path'
if devPath,errF := enumDevicePath(USB_FUNCTION_HID_KEYBOARD_name); errF == nil { HidDevPath[USB_FUNCTION_HID_KEYBOARD_name] = devPath }
if devPath,errF := enumDevicePath(USB_FUNCTION_HID_MOUSE_name); errF == nil { HidDevPath[USB_FUNCTION_HID_MOUSE_name] = devPath }
if devPath,errF := enumDevicePath(USB_FUNCTION_HID_RAW_name); errF == nil { HidDevPath[USB_FUNCTION_HID_RAW_name] = devPath }
}
deleteUSBEthernetBridge() //delete former used bridge, if there's any
//In case USB ethernet is uesd (RNDIS or CDC ECM), we add a bridge interface
if usesUSBEthernet && settings.Enabled {
@ -602,6 +618,32 @@ func DeployGadgetSettings(settings pb.GadgetSettings) error {
return nil
}
func enumDevicePath(funcName string) (devPath string, err error){
//cat /sys/dev/char/$(cat /sys/kernel/config/usb_gadget/mame82_gadget/functions/hid.mouse/dev)/uevent | grep DEVNAME
devfile := USB_GADGET_DIR + "/functions/" + funcName + "/dev"
var udevNode string
if res, err := ioutil.ReadFile(devfile); err != nil {
err1 := errors.New(fmt.Sprintf("Gadget error reading udevname for %s\n", funcName))
return "", err1
} else {
udevNode = strings.TrimSuffix(string(res), "\n")
}
ueventPath := fmt.Sprintf("/sys/dev/char/%s/uevent", udevNode)
if ueventContent, err := ioutil.ReadFile(ueventPath); err != nil {
err1 := errors.New(fmt.Sprintf("Gadget error reading uevent file '%s' for %s\n", ueventPath, funcName))
return "", err1
} else {
strDevNameSub := rp_usbHidDevName.FindStringSubmatch(string(ueventContent))
if len(strDevNameSub) > 1 { devPath = "/dev/" + strDevNameSub[1]}
}
return
}
func DestroyAllGadgets() error {
//gadget_root := "./test"
gadget_root := USB_GADGET_DIR_BASE

View File

@ -259,17 +259,6 @@ func wifiCreateHostapdConfString(ws *pb.WiFiSettings) (config string, err error)
return
}
func WifiTest() {
fmt.Println("Hostapd settings:")
conf, err := wifiCreateHostapdConfString(GetDefaultWiFiSettings())
if err == nil {
fmt.Println(conf)
} else {
fmt.Printf("Error creating hostapd config: %v\n", err)
}
fmt.Println("End of hostapd settings:")
}
func hostapdCreateConfigFile(s *pb.WiFiSettings, filename string) (err error) {
log.Printf("Creating hostapd configuration file at '%s'\n", filename)