tools.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "os/exec"
  7. "imuslab.com/dezukvm/dezukvmd/mod/usbcapture"
  8. )
  9. func handle_debug_tool() error {
  10. switch *tool {
  11. case "dependency-precheck":
  12. err := run_dependency_precheck()
  13. if err != nil {
  14. return err
  15. }
  16. case "list-usbkvm-json":
  17. result, err := discoverUsbKvmSubtree()
  18. if err != nil {
  19. return err
  20. }
  21. jsonData, err := json.MarshalIndent(result, "", " ")
  22. if err != nil {
  23. return err
  24. }
  25. fmt.Println(string(jsonData))
  26. case "audio-devices":
  27. err := list_all_audio_devices()
  28. if err != nil {
  29. return err
  30. }
  31. case "list-usbkvm":
  32. err := list_usb_kvm_devcies()
  33. if err != nil {
  34. return err
  35. }
  36. default:
  37. return fmt.Errorf("please specify a valid tool with -tool option")
  38. }
  39. return nil
  40. }
  41. // run_dependency_precheck checks if required dependencies are available in the system
  42. func run_dependency_precheck() error {
  43. log.Println("Running precheck...")
  44. // Dependencies of USB capture card
  45. if _, err := exec.LookPath("v4l2-ctl"); err != nil {
  46. return fmt.Errorf("v4l2-ctl not found in PATH")
  47. }
  48. if _, err := exec.LookPath("arecord"); err != nil {
  49. return fmt.Errorf("arecord not found in PATH")
  50. }
  51. log.Println("v4l2-ctl and arecord found in PATH.")
  52. return nil
  53. }
  54. // list_usb_kvm_devcies lists all discovered USB KVM devices and their associated sub-devices
  55. func list_usb_kvm_devcies() error {
  56. result, err := discoverUsbKvmSubtree()
  57. if err != nil {
  58. return err
  59. }
  60. for i, dev := range result {
  61. log.Printf("USB KVM Device Tree %d:\n", i)
  62. log.Printf(" - USB KVM Device: %s\n", dev.USBKVMDevicePath)
  63. log.Printf(" - Aux MCU Device: %s\n", dev.AuxMCUDevicePath)
  64. for _, cap := range dev.CaptureDevicePaths {
  65. log.Printf(" - Capture Device: %s\n", cap)
  66. }
  67. for _, snd := range dev.AlsaDevicePaths {
  68. log.Printf(" - ALSA Device: %s\n", snd)
  69. }
  70. }
  71. return nil
  72. }
  73. // list_all_audio_devices lists all available audio capture devices
  74. func list_all_audio_devices() error {
  75. log.Println("Starting in List Audio Devices mode...")
  76. // Get the audio devices
  77. path, err := usbcapture.FindHDMICapturePCMPath()
  78. if err != nil {
  79. return err
  80. }
  81. log.Printf("Found HDMI capture PCM path: %s\n", path)
  82. // List all audio capture devices
  83. captureDevs, err := usbcapture.ListCaptureDevices()
  84. if err != nil {
  85. return err
  86. }
  87. log.Println("Available audio capture devices:")
  88. for _, dev := range captureDevs {
  89. log.Printf(" - %s\n", dev)
  90. }
  91. return nil
  92. }