input_linux_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package input
  2. import "testing"
  3. import "time"
  4. // import "os"
  5. // import "syscall"
  6. import "fmt"
  7. import "gitlab.com/beoran/galago/os/linux"
  8. const IN = "by-id/usb-0583_USB_2-axis_8-button_gamepad-event-joystick"
  9. const IN2 = "by-id/usb-PixArt_USB_Optical_Mouse-event-mouse"
  10. func TestList(t * testing.T) {
  11. names, err := List()
  12. if err != nil {
  13. t.Errorf("Error List: %s\n", err)
  14. return
  15. }
  16. for _, name := range names {
  17. t.Logf("Device: %s\n", name)
  18. }
  19. }
  20. func TestGetDriverVersion(t * testing.T) {
  21. device , err := Open(IN)
  22. if err != nil {
  23. t.Errorf("Error Open: %s\n", err)
  24. return
  25. }
  26. defer device.Close()
  27. version, err := device.DriverVersion()
  28. if err != nil {
  29. t.Errorf("Error GetDriverVersion: %s (%s %x)\n", err,
  30. "EVIOCGVERSION", linux.EVIOCGVERSION)
  31. return
  32. }
  33. if version != linux.EV_VERSION {
  34. t.Errorf("Version %x should be %x", version, linux.EV_VERSION)
  35. }
  36. t.Logf("GetDriverVersion: %d", version)
  37. }
  38. func TestGetName(t * testing.T) {
  39. device , err := Open(IN)
  40. if err != nil {
  41. t.Errorf("Error Open: %s\n", err)
  42. return
  43. }
  44. defer device.Close()
  45. name, err := device.Name()
  46. if err != nil {
  47. t.Errorf("Error GetName: %s\n", err)
  48. return
  49. }
  50. t.Logf("GetName: %s", name)
  51. }
  52. func TestGetTopology(t * testing.T) {
  53. device , err := Open(IN)
  54. if err != nil {
  55. t.Errorf("Error Open: %s\n", err)
  56. return
  57. }
  58. defer device.Close()
  59. name, err := device.Topology()
  60. if err != nil {
  61. t.Errorf("Error Topology: %s\n", err)
  62. return
  63. }
  64. t.Logf("Topology: %s", name)
  65. }
  66. func TestGetId(t * testing.T) {
  67. device , err := Open(IN)
  68. if err != nil {
  69. t.Errorf("Error Open: %s\n", err)
  70. return
  71. }
  72. defer device.Close()
  73. id, err := device.Id()
  74. if err != nil {
  75. t.Errorf("Error GetId: %s\n", err)
  76. return
  77. }
  78. t.Logf("GetId: bustype 0x%x, vendor 0x%x, product 0x%x, version 0x%x",
  79. id.Bustype, id.Vendor, id.Product, id.Version)
  80. }
  81. func TestSupportedEvents(t * testing.T) {
  82. device , err := Open(IN)
  83. if err != nil {
  84. t.Errorf("Error Open: %s\n", err)
  85. return
  86. }
  87. defer device.Close()
  88. events, err := device.SupportedEvents()
  89. t.Logf("Supported events:\n")
  90. for i, ev := range events {
  91. t.Logf("Supported: %d: %d %s", i, int(ev), ev.Name())
  92. }
  93. }
  94. func TestSupportedKeys(t * testing.T) {
  95. device , err := Open(IN)
  96. if err != nil {
  97. t.Errorf("Error Open: %s\n", err)
  98. return
  99. }
  100. defer device.Close()
  101. keys, err := device.SupportedKeys()
  102. t.Logf("Supported keys:\n")
  103. for i, key := range keys {
  104. t.Logf("Supported: %d: %d %s", i, int(key), key.Name())
  105. }
  106. }
  107. func TestSupportedAxes(t * testing.T) {
  108. device , err := Open(IN)
  109. if err != nil {
  110. t.Errorf("Error Open: %s\n", err)
  111. return
  112. }
  113. defer device.Close()
  114. axes, err := device.SupportedAxes()
  115. t.Logf("Supported axes:\n")
  116. for i, ax := range axes {
  117. t.Logf("Supported: %d: %d %s\n", i, uint(ax.Index), ax.String())
  118. }
  119. }
  120. func TestRelativeAxes(t * testing.T) {
  121. device , err := Open(IN)
  122. if err != nil {
  123. t.Errorf("Error Open: %s\n", err)
  124. return
  125. }
  126. defer device.Close()
  127. events, err := device.RelativeAxes()
  128. t.Logf("Supported relative axes:\n")
  129. for i, ev := range events {
  130. t.Logf("Supported: %d: %d %s", i, int(ev), ev.Name())
  131. }
  132. }
  133. func TestReadEvents(t * testing.T) {
  134. device , err := Open(IN)
  135. if err != nil {
  136. t.Errorf("Error Open: %s\n", err)
  137. return
  138. }
  139. defer device.Close()
  140. events, err := device.ReadEvents()
  141. if err != nil {
  142. t.Errorf("Error ReadEvents: %s\n", err)
  143. return
  144. }
  145. t.Logf("Events:\n")
  146. for i, ev := range events {
  147. t.Logf("Event: %d: %s\n", i, ev.String())
  148. }
  149. }
  150. func TestManager(t * testing.T) {
  151. eveChan := make(chan InputEvent)
  152. errChan := make(chan error)
  153. conChan := make(chan *Device)
  154. disChan := make(chan *Device)
  155. donChan := make(chan struct{})
  156. manager := NewManager(conChan, disChan, eveChan, errChan, donChan)
  157. done := false
  158. go func() {
  159. for !done {
  160. dev := <- conChan
  161. fmt.Printf("Connected: %s\n", dev.FileName)
  162. }
  163. }()
  164. go func() {
  165. for !done {
  166. dev := <- disChan
  167. fmt.Printf("Disconnected: %s\n", dev.FileName)
  168. }
  169. }()
  170. go func() {
  171. for !done {
  172. err := <- errChan
  173. fmt.Printf("Error: %s\n", err)
  174. }
  175. }()
  176. go func() {
  177. for !done {
  178. eve := <- eveChan
  179. fmt.Printf("%s\n", eve.String())
  180. if eve.Type == linux.EV_KEY && eve.Code == linux.BTN_JOYSTICK {
  181. done = true
  182. }
  183. }
  184. }()
  185. manager.Start()
  186. for ! done {
  187. time.Sleep(1 * time.Second)
  188. }
  189. done = true
  190. }