def activate(self): iface_called_plugin.activate(self) log_info("Starting the HTTP Server on Port %d"%self.options["http_port"]) self.s_thread = http_server_thread(self.options["http_port"],self.options["html_dir"]) self.s_thread.start() if not os.path.exists(self.options["html_dir"]+"/index.html"): self.write_info_html()
def activate(self): from panic_button.panic_button_listener import panic_button_listener iface_general_plugin.activate(self) log_info("Starting panic button listener") self.panic_thread = panic_button_listener( int(self.options["idVendor"], 0), int(self.options["idProduct"], 0), self.options["panic_msg"]) self.panic_thread.start()
def activate(self): from panic_button.panic_button_listener import panic_button_listener iface_general_plugin.activate(self) log_info("Starting panic button listener") self.panic_thread = panic_button_listener(int(self.options["idVendor"], 0), int(self.options["idProduct"], 0), self.options["panic_msg"]) self.panic_thread.start()
class panic_button_listener(Thread): idVendor = None idProduct = None running = True msg = "lunch panic" def __init__(self, idV, idP, msg): super(panic_button_listener, self).__init__() self.idVendor = idV self.idProduct = idP self.msg = msg def findButton(self): for bus in usb.busses(): for dev in bus.devices: if dev.idVendor == self.idVendor and dev.idProduct == self.idProduct: return dev return None def run(self): dev = self.findButton() if dev == None: log_error("Cannot find panic button device") return handle = dev.open() interface = dev.configurations[0].interfaces[0][0] endpoint = interface.endpoints[0] try: handle.detachKernelDriver(interface) except Exception, _: # It may already be unloaded. pass handle.claimInterface(interface) unbuffer = False while self.running: # USB setup packet. I think it's a USB HID SET_REPORT. result = handle.controlMsg( requestType=0x21, # OUT | CLASS | INTERFACE request=0x09, # SET_REPORT value=0x0200, # report type: OUTPUT buffer="\x00\x00\x00\x00\x00\x00\x00\x02") try: result = handle.interruptRead(endpoint.address, endpoint.maxPacketSize) if 22 == result[0]: if not unbuffer: log_info("pressed the Panic Button") get_server().call_all_members(self.msg) unbuffer = True else: unbuffer = False #print [hex(x) for x in result] except Exception, _: # Sometimes this fails. Unsure why. pass time.sleep(endpoint.interval / float(1000))
def deactivate(self): log_info("Stopping panic button listener") if self.panic_thread != None: self.panic_thread.stop_daemon() #TODO: self.panic_thread.join() iface_general_plugin.deactivate(self)
def deactivate(self): log_info("Stopping HTTP Server") if self.s_thread: self.s_thread.stop_server() self.s_thread.join() iface_called_plugin.deactivate(self)