def row_changed(button, i): logging.info("entering row_changed with button: " + str(button) + ", i: " + str(i)) global channelVal #switch columns to input to read the values setReadWrite(columns, rows) #now read columns for column in columns: value = GPIO.input(column) logging.info("column " + str(column) + ": " + str(value)) if value: logging.info("column " + str(channelEnums[i])) channelVal = channelVal + channelEnums[i] i = i + 1; logging.info("Button event: " + str(channelVal)) if button == G.NONE: xbmc.release_button() else: try: global mapping print(kbmapping[channelVal]) xbmc.send_keyboard_button(button=kbmapping[channelVal]) except: logging.warning("value invalid") sleep(0.025) #switch back to reading rows setReadWrite(rows, columns)
def listenToHoorn(): global run global hoorn global HOORN_UP global HOORN_DOWN global hoorn_previous_state global initial_state while run: # also listen to hoorn hoorn_state = GPIO.input(hoorn) if not initial_state and hoorn_previous_state != hoorn_state: if hoorn_state == HOORN_UP: if inXbmc: xbmc.log(msg="hoorn up", level=xbmc.LOGDEBUG) send_key("hoorn_up") else: if inXbmc: xbmc.log(msg="hoorn down", level=xbmc.LOGDEBUG) send_key("hoorn_down") hoorn_previous_state = hoorn_state else: initial_state = False sleep(hoornWaitTime) logging.info("Stopped listening to hook...")
def row_changed(row): if verbose: logging.info("Row " + str(row) + " has changed") global processing global rowsWithColumns global columns global keys if not processing: processing = True # Disable events until action is done setRowEvents(row, KEYPAD_MODE_READCOLUMNS) # Read which column it was for column in rowsWithColumns[row]: columnValue = GPIO.input(column) if columnValue: key = keys[str(row) + "," + str(column)] send_key(key) pass # Re-enable events setRowEvents(row, KEYPAD_MODE_READROWS) sleep(0.1) # GPIO.wait_for_edge(row, GPIO.FALLING) processing = False else: logging.info("already processing, ignored")
def row_changed(row): global rows GPIO.remove_event_detect(row) GPIO.setup(row, GPIO.OUT) for column in rows[row]: GPIO.setup(column, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Send signal from row to columns GPIO.output(row, 1) #sleep(0.05) # Read which column it was for column in rows[row]: columnValue = GPIO.input(column) if(columnValue): key = keys[str(row) + "," + str(column)] logging.info("row changed: " + str(row)) send_key(key) # Set row and columns back to original setup GPIO.setup(row, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) for column in rows[row]: GPIO.remove_event_detect(column) GPIO.setup(column, GPIO.OUT) GPIO.output(column, 1) GPIO.add_event_detect(row, GPIO.RISING, callback=row_changed)
def listenToRows(): global run global keypadWaitTime while run: global rowsWithColumns global lastPing global initial_state if (lastPing - datetime.now()).seconds == 50: xClient.ping() lastPing = datetime.now() for row in rowsWithColumns: rowinput = GPIO.input(row) if verbose: logging.info("Row " + str(row) + ": " + str(rowinput)) if rowinput: row_changed(row) sleep(keypadWaitTime) logging.info("Stopped listening to rows...")
def start(): global channelVal global previousChannelVal global previousRow i = 0 for row in rows: value = GPIO.input(row) logging.info("row " + str(row) + ": " + str(value)) if value: channelVal = channelVal + channelEnums[i] i = i + 1 if previousRow <> channelVal & channelVal: logging.info("change detected") logging.info("row " + str(row) + " is up: " + str(channelEnums[i])) # Keep track of row to check changes previousRow = channelVal; row_changed(channelVal, i) previousChannelVal = channelVal channelVal = G.NONE lock = False
keys[config.get("gpiokeymapping", option)] = option if row not in rowsWithColumns: rowsWithColumns[row] = [column] else: rowsWithColumns[row].append(column) if column not in columns: columns.append(column) for row in rowsWithColumns: setRowEvents(row, KEYPAD_MODE_READROWS) GPIO.setup(hoorn, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) hoorn_previous_state = GPIO.input(hoorn) # GPIO.add_event_detect(hoorn, GPIO.BOTH, callback=phonePickedUp) threadRows = threading.Thread(target=listenToRows) threadHoorn = threading.Thread(target=listenToHoorn) threadRows.start() threadHoorn.start() def cleanup(): logging.info("Stopping threads...") global run run = False logging.info("Cleaning up GPIO...")
def input(self): if (self.Type == GPIO.IN): return GPIO.input(self.Pin) else: return -1
def Value(self): self.__Value = GPIO.input(self.Pin) return self.__Value