tools.go 2.4 KB

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