input_linux_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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.SupportedRelatives()
  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 TestReadEventsBlock(t * testing.T) {
  151. device , err := Open(IN)
  152. if err != nil {
  153. t.Errorf("Error Open: %s\n", err)
  154. return
  155. }
  156. defer device.Close()
  157. events, err := device.ReadEventsBlock()
  158. if err != nil {
  159. t.Errorf("Error ReadEvents: %s\n", err)
  160. return
  161. }
  162. t.Logf("Events:\n")
  163. for i, ev := range events {
  164. t.Logf("Event: %d: %s\n", i, ev.String())
  165. }
  166. }
  167. func TestDriver(t * testing.T) {
  168. driver := NewDriver()
  169. done := false
  170. go func() {
  171. for !done {
  172. dev := <- driver.Connect
  173. fmt.Printf("Connected: %s\n", dev.String())
  174. }
  175. }()
  176. go func() {
  177. for !done {
  178. dev := <- driver.Disconnect
  179. fmt.Printf("Disconnected: %s\n", dev.String())
  180. }
  181. }()
  182. go func() {
  183. for !done {
  184. err := <- driver.Errors
  185. fmt.Printf("Error: %s\n", err)
  186. }
  187. }()
  188. go func() {
  189. for !done {
  190. eve := <- driver.Events
  191. fmt.Printf("%s\n", eve.String())
  192. if eve.Type == linux.EV_KEY && eve.Code == linux.BTN_JOYSTICK {
  193. done = true
  194. }
  195. }
  196. }()
  197. driver.Start()
  198. for ! done {
  199. time.Sleep(1 * time.Second)
  200. }
  201. done = true
  202. }