A clone of: https://github.com/nutechsoftware/alarmdecoder This is requires as they dropped support for older firmware releases w/o building in backward compatibility code, and they had previously hardcoded pyserial to a python2 only version.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
7.1 KiB

  1. #!/usr/bin/env python
  2. import pyad2usb.ad2usb
  3. import time
  4. import signal
  5. import traceback
  6. import sys
  7. running = True
  8. def signal_handler(signal, frame):
  9. global running
  10. running = False
  11. def handle_open(sender, args):
  12. print 'O', args
  13. def handle_close(sender, args):
  14. print 'C', args
  15. def handle_read(sender, args):
  16. print '<', args
  17. def handle_write(sender, args):
  18. print '>', args
  19. def handle_attached(sender, args):
  20. print '+', args
  21. def handle_detached(sender, args):
  22. print '-', args
  23. def handle_power_changed(sender, args):
  24. print 'power changed', args
  25. def handle_alarm_bell(sender, args):
  26. print 'alarm', args
  27. def handle_bypass(sender, args):
  28. print 'bypass', args
  29. def handle_message(sender, args):
  30. print args
  31. def handle_firmware(stage):
  32. if stage == pyad2usb.ad2usb.util.Firmware.STAGE_START:
  33. handle_firmware.wait_tick = 0
  34. handle_firmware.upload_tick = 0
  35. elif stage == pyad2usb.ad2usb.util.Firmware.STAGE_WAITING:
  36. if handle_firmware.wait_tick == 0:
  37. sys.stdout.write('Waiting for device.')
  38. handle_firmware.wait_tick += 1
  39. sys.stdout.write('.')
  40. sys.stdout.flush()
  41. elif stage == pyad2usb.ad2usb.util.Firmware.STAGE_BOOT:
  42. if handle_firmware.wait_tick > 0: print ""
  43. print "Rebooting device.."
  44. elif stage == pyad2usb.ad2usb.util.Firmware.STAGE_LOAD:
  45. print 'Waiting for boot loader..'
  46. elif stage == pyad2usb.ad2usb.util.Firmware.STAGE_UPLOADING:
  47. if handle_firmware.upload_tick == 0:
  48. sys.stdout.write('Uploading firmware.')
  49. handle_firmware.upload_tick += 1
  50. if handle_firmware.upload_tick % 30 == 0:
  51. sys.stdout.write('.')
  52. sys.stdout.flush()
  53. elif stage == pyad2usb.ad2usb.util.Firmware.STAGE_DONE:
  54. print "\r\nDone!"
  55. def upload_usb():
  56. dev = pyad2usb.ad2usb.devices.USBDevice()
  57. dev.open(no_reader_thread=True)
  58. #pyad2usb.ad2usb.util.Firmware.upload(dev, 'tmp/ademcoemu_V2_2a_6.hex', handle_firmware)
  59. dev.close()
  60. def upload_serial():
  61. dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB0')
  62. dev.open(no_reader_thread=True)
  63. pyad2usb.ad2usb.util.Firmware.upload(dev, 'tmp/ademcoemu_V2_2a_6.hex', handle_firmware)
  64. #pyad2usb.ad2usb.util.Firmware.upload(dev, 'tmp/ademcoemu-V2-2a-5-beta20-C4.hex', handle_firmware)
  65. dev.close()
  66. def upload_usb_serial():
  67. dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB5')
  68. dev.open(baudrate=115200)
  69. pyad2usb.ad2usb.util.Firmware.upload(dev, 'tmp/ademcoemu_V2_2a_6.hex', handle_firmware)
  70. dev.close()
  71. def upload_socket():
  72. dev = pyad2usb.ad2usb.devices.SocketDevice(interface=('localhost', 10000))
  73. dev.open()
  74. pyad2usb.ad2usb.util.Firmware.upload(dev, 'tmp/ademcoemu_V2_2a_6.hex', handle_firmware)
  75. dev.close()
  76. def test_usb():
  77. dev = pyad2usb.ad2usb.devices.USBDevice()
  78. a2u = pyad2usb.ad2usb.AD2USB(dev)
  79. a2u.on_open += handle_open
  80. a2u.on_close += handle_close
  81. a2u.on_read += handle_read
  82. a2u.on_write += handle_write
  83. a2u.on_power_changed += handle_power_changed
  84. a2u.on_alarm += handle_alarm_bell
  85. a2u.on_bypass += handle_bypass
  86. a2u.open()
  87. print dev._id
  88. while running:
  89. time.sleep(0.1)
  90. a2u.close()
  91. def test_serial():
  92. dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB0')
  93. a2u = pyad2usb.ad2usb.AD2USB(dev)
  94. a2u.on_open += handle_open
  95. a2u.on_close += handle_close
  96. #a2u.on_read += handle_read
  97. #a2u.on_write += handle_write
  98. a2u.on_message += handle_message
  99. a2u.on_power_changed += handle_power_changed
  100. a2u.on_alarm += handle_alarm_bell
  101. a2u.on_bypass += handle_bypass
  102. a2u.open(no_reader_thread=False)
  103. print a2u._device._device
  104. #print a2u._device.read_line()
  105. #dev.open()
  106. print dev._id
  107. while running:
  108. time.sleep(0.1)
  109. a2u.close()
  110. #dev.close()
  111. def test_usb_serial():
  112. dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB5')
  113. a2u = pyad2usb.ad2usb.AD2USB(dev)
  114. a2u.on_open += handle_open
  115. a2u.on_close += handle_close
  116. a2u.on_read += handle_read
  117. a2u.on_write += handle_write
  118. a2u.open(baudrate=115200)
  119. print dev._id
  120. while running:
  121. time.sleep(0.1)
  122. a2u.close()
  123. def test_factory():
  124. a2u = pyad2usb.ad2usb.Overseer.create()
  125. a2u.on_open += handle_open
  126. a2u.on_close += handle_close
  127. a2u.on_read += handle_read
  128. a2u.on_write += handle_write
  129. a2u.open()
  130. while running:
  131. time.sleep(0.1)
  132. a2u.close()
  133. def test_factory_watcher():
  134. overseer = pyad2usb.ad2usb.Overseer(attached_event=handle_attached, detached_event=handle_detached)
  135. a2u = overseer.get_device()
  136. a2u.on_open += handle_open
  137. a2u.on_close += handle_close
  138. a2u.on_read += handle_read
  139. a2u.on_write += handle_write
  140. a2u.open()
  141. while running:
  142. time.sleep(0.1)
  143. a2u.close()
  144. overseer.close()
  145. def test_socket():
  146. dev = pyad2usb.ad2usb.devices.SocketDevice(interface=("localhost", 10000))
  147. a2u = pyad2usb.ad2usb.AD2USB(dev)
  148. a2u.on_open += handle_open
  149. a2u.on_close += handle_close
  150. #a2u.on_read += handle_read
  151. #a2u.on_write += handle_write
  152. a2u.on_message += handle_message
  153. a2u.on_power_changed += handle_power_changed
  154. a2u.on_alarm += handle_alarm_bell
  155. a2u.on_bypass += handle_bypass
  156. a2u.open()
  157. print dev._id
  158. while running:
  159. time.sleep(0.1)
  160. a2u.close()
  161. def test_no_read_thread():
  162. #a2u = pyad2usb.ad2usb.Overseer.create()
  163. #a2u.on_open += handle_open
  164. #a2u.on_close += handle_close
  165. #a2u.on_read += handle_read
  166. #a2u.on_write += handle_write
  167. #a2u.open(no_reader_thread=True)
  168. dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB0')
  169. dev.open(no_reader_thread=True)
  170. #print 'alive?', a2u._device._read_thread.is_alive()
  171. while 1:
  172. line = dev.read_line(timeout=5)
  173. print line
  174. line = dev.read_line(timeout=5)
  175. print line
  176. #time.sleep(0.1)
  177. dev.close()
  178. def test_serial_grep():
  179. re = pyad2usb.devices.SerialDevice.find_all(pattern='VID:PID=9710:7840')
  180. for x in re:
  181. print x
  182. def test_double_panel_write():
  183. dev = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB4')
  184. dev2 = pyad2usb.ad2usb.devices.SerialDevice(interface='/dev/ttyUSB5')
  185. dev.open(no_reader_thread=True)
  186. print dev._device
  187. dev2.open(no_reader_thread=True)
  188. print dev2._device
  189. #print a2u._device.read_line()
  190. #dev.open()
  191. print 'Writing characters..'
  192. dev.write('*****')
  193. dev2.write('*****')
  194. print 'Reading..'
  195. dev_res = dev.read_line()
  196. print dev.id, dev_res
  197. dev2_res = dev2.read_line()
  198. print dev2.id, dev2_res
  199. dev.close()
  200. dev2.close()
  201. try:
  202. signal.signal(signal.SIGINT, signal_handler)
  203. #test_serial()
  204. upload_serial()
  205. #test_usb()
  206. #test_usb_serial()
  207. #test_factory()
  208. #test_factory_watcher()
  209. #upload_usb()
  210. #upload_usb_serial()
  211. #test_socket()
  212. #upload_socket()
  213. #test_no_read_thread()
  214. #test_serial_grep()
  215. #test_double_panel_write()
  216. except Exception, err:
  217. traceback.print_exc(err)