mirror of
https://github.com/sipeed/NanoKVM.git
synced 2026-09-12 01:50:20 -05:00
server side for full gadget disable
starting on frontend # Conflicts: # kvmapp/system/init.d/S03usbdev
This commit is contained in:
committed by
wj-xiao
parent
5958fd5c6f
commit
e684936d15
@@ -92,6 +92,10 @@ type GetGetHdmiStateRsp struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
type GetUsbStateRsp struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
type GetSSHStateRsp struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
@@ -35,6 +35,10 @@ func vmRouter(r *gin.Engine) {
|
||||
api.GET("/vm/oled", service.GetOLED) // get OLED configuration
|
||||
api.POST("/vm/oled", service.SetOLED) // set OLED configuration
|
||||
|
||||
api.GET("/vm/usb", service.GetUsbState) // get USB gadget state
|
||||
api.POST("/vm/usb/enable", service.EnableUsb) // enable USB
|
||||
api.POST("/vm/usb/disable", service.DisableUsb) // disable USB
|
||||
|
||||
// Only supported by PCIe version
|
||||
api.GET("/vm/hdmi", service.GetHdmiState) // get HDMI state
|
||||
api.POST("/vm/hdmi/reset", service.ResetHdmi) // reset hdmi
|
||||
|
||||
86
server/service/vm/usb.go
Normal file
86
server/service/vm/usb.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package vm
|
||||
|
||||
import (
|
||||
"NanoKVM-Server/proto"
|
||||
"NanoKVM-Server/service/hid"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
udcDisableFile = "/boot/udc.disable"
|
||||
)
|
||||
|
||||
var (
|
||||
udcEnableCommands = []string{
|
||||
"rm /boot/udc.disable",
|
||||
"/etc/init.d/S03usbdev restart",
|
||||
}
|
||||
|
||||
udcDisableCommands = []string{
|
||||
"touch /boot/udc.disable",
|
||||
"/etc/init.d/S03usbdev restart",
|
||||
}
|
||||
)
|
||||
|
||||
func runCommands(commands []string) error {
|
||||
h := hid.GetHid()
|
||||
h.Lock()
|
||||
h.CloseNoLock()
|
||||
defer func() {
|
||||
h.OpenNoLock()
|
||||
h.Unlock()
|
||||
}()
|
||||
|
||||
for _, command := range commands {
|
||||
if err := exec.Command("sh", "-c", command).Run(); err != nil {
|
||||
log.Errorf("failed to run command '%s': %v", command, err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) EnableUsb(c *gin.Context) {
|
||||
var rsp proto.Response
|
||||
|
||||
err := runCommands(udcEnableCommands)
|
||||
if err != nil {
|
||||
rsp.ErrRsp(c, -1, "failed to enable USB")
|
||||
return
|
||||
}
|
||||
|
||||
rsp.OkRsp(c)
|
||||
log.Debug("enable usb")
|
||||
}
|
||||
|
||||
func (s *Service) DisableUsb(c *gin.Context) {
|
||||
var rsp proto.Response
|
||||
|
||||
err := runCommands(udcDisableCommands)
|
||||
if err != nil {
|
||||
rsp.ErrRsp(c, -1, "failed to disable USB")
|
||||
return
|
||||
}
|
||||
|
||||
rsp.OkRsp(c)
|
||||
log.Debug("disable usb")
|
||||
}
|
||||
|
||||
func (s *Service) GetUsbState(c *gin.Context) {
|
||||
var rsp proto.Response
|
||||
|
||||
usbEnabled := false
|
||||
if _, err := os.Stat(udcDisableFile); err != nil {
|
||||
usbEnabled = true
|
||||
}
|
||||
|
||||
rsp.OkRspWithData(c, &proto.GetUsbStateRsp{
|
||||
Enabled: usbEnabled,
|
||||
})
|
||||
|
||||
log.Debug("get usb state")
|
||||
}
|
||||
Reference in New Issue
Block a user