mirror of
https://github.com/dekuNukem/USB4VC.git
synced 2025-10-31 11:26:46 -07:00
implemented new custom map format
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
code_lookup = {
|
||||
code_name_to_value_lookup = {
|
||||
'KEY_RESERVED':(0, 'kb_key'),
|
||||
'KEY_ESC':(1, 'kb_key'),
|
||||
'KEY_1':(2, 'kb_key'),
|
||||
@@ -279,6 +279,43 @@ code_lookup = {
|
||||
'IBM_GGP_JS2_YN':('IBM_GGP_JS2_YN', 'ibm_ggp_half_axis'),
|
||||
}
|
||||
|
||||
code_value_to_name_lookup = {
|
||||
0x130:'BTN_SOUTH',
|
||||
0x131:'BTN_EAST',
|
||||
0x132:'BTN_C',
|
||||
0x133:'BTN_NORTH',
|
||||
0x134:'BTN_WEST',
|
||||
0x135:'BTN_Z',
|
||||
0x136:'BTN_TL',
|
||||
0x137:'BTN_TR',
|
||||
0x138:'BTN_TL2',
|
||||
0x139:'BTN_TR2',
|
||||
0x13a:'BTN_SELECT',
|
||||
0x13b:'BTN_START',
|
||||
0x13c:'BTN_MODE',
|
||||
0x13d:'BTN_THUMBL',
|
||||
0x13e:'BTN_THUMBR',
|
||||
0x00:'ABS_X',
|
||||
0x01:'ABS_Y',
|
||||
0x02:'ABS_Z',
|
||||
0x03:'ABS_RX',
|
||||
0x04:'ABS_RY',
|
||||
0x05:'ABS_RZ',
|
||||
0x06:'ABS_THROTTLE',
|
||||
0x07:'ABS_RUDDER',
|
||||
0x08:'ABS_WHEEL',
|
||||
0x09:'ABS_GAS',
|
||||
0x0a:'ABS_BRAKE',
|
||||
0x10:'ABS_HAT0X',
|
||||
0x11:'ABS_HAT0Y',
|
||||
0x12:'ABS_HAT1X',
|
||||
0x13:'ABS_HAT1Y',
|
||||
0x14:'ABS_HAT2X',
|
||||
0x15:'ABS_HAT2Y',
|
||||
0x16:'ABS_HAT3X',
|
||||
0x17:'ABS_HAT3Y',
|
||||
}
|
||||
|
||||
board_id_lookup = {
|
||||
'IBMPC':1,
|
||||
'ADB':2,
|
||||
@@ -308,10 +345,10 @@ custom_profile_1 = {
|
||||
'mapping':
|
||||
{
|
||||
# buttons to buttons
|
||||
'BTN_X': {'code':'BTN_LEFT'},
|
||||
'BTN_B': {'code':'BTN_RIGHT'},
|
||||
'BTN_Y': {'code':'BTN_MIDDLE'},
|
||||
'BTN_A': {'code':'BTN_MIDDLE'},
|
||||
'BTN_SOUTH': {'code':'BTN_LEFT'},
|
||||
'BTN_EAST': {'code':'BTN_RIGHT'},
|
||||
'BTN_NORTH': {'code':'IBM_GGP_BTN_1'},
|
||||
'BTN_WEST': {'code':'BTN_MIDDLE'},
|
||||
# analog stick to analog stick
|
||||
'ABS_X': {'code':'REL_X', 'deadzone_percent':15},
|
||||
'ABS_Y': {'code':'REL_Y', 'deadzone_percent':15},
|
||||
|
||||
@@ -25,7 +25,7 @@ def reset_pboard():
|
||||
GPIO.setup(PBOARD_DFU_PIN, GPIO.IN)
|
||||
# GPIO.output(PBOARD_DFU_PIN, GPIO.LOW)
|
||||
|
||||
reset_pboard()
|
||||
# reset_pboard()
|
||||
|
||||
# use sudo -E to preserve environmental variables for python3
|
||||
|
||||
|
||||
@@ -127,28 +127,31 @@ custom_profile_1 = {
|
||||
'protocol_name':'GAMEPORT_GENERIC_GAMEPAD',
|
||||
'mapping':
|
||||
{
|
||||
# buttons to buttons
|
||||
'BTN_X': {'code':'BTN_LEFT'},
|
||||
'BTN_B': {'code':'BTN_RIGHT'},
|
||||
'BTN_Y': {'code':'BTN_MIDDLE'},
|
||||
'BTN_A': {'code':'BTN_MIDDLE'},
|
||||
# analog stick to analog stick
|
||||
'ABS_X': {'code':'REL_X', 'deadzone_percent':15},
|
||||
'ABS_Y': {'code':'REL_Y', 'deadzone_percent':15},
|
||||
'ABS_HAT0X': {'code':'IBM_GGP_JS1_X'},
|
||||
'ABS_HAT0Y': {'code':'IBM_GGP_JS1_Y'},
|
||||
# buttons to analog stick
|
||||
# usb gamepad button to generic gamepad button
|
||||
'BTN_NORTH': {'code':'IBM_GGP_BTN_1'},
|
||||
'BTN_WEST': {'code':'IBM_GGP_BTN_2'},
|
||||
# usb analog axes to generic gamepad analog axes
|
||||
'ABS_X': {'code':'IBM_GGP_JS1_X'},
|
||||
'ABS_Y': {'code':'IBM_GGP_JS1_Y'},
|
||||
# usb gamepad button to generic gamepad analog axes
|
||||
'BTN_TL': {'code':'IBM_GGP_JS1_XN'},
|
||||
'BTN_TR': {'code':'IBM_GGP_JS1_XP'},
|
||||
# buttons to keyboard key
|
||||
# usb gamepad button to keyboard key
|
||||
'BTN_START': {'code':'KEY_A'},
|
||||
'BTN_SELECT': {'code':'KEY_B'},
|
||||
# analog stick to keyboard key
|
||||
'ABS_RX': {'code':'KEY_RIGHT', 'code_neg':'KEY_LEFT', 'deadzone_percent':15},
|
||||
'ABS_RY': {'code':'KEY_DOWN', 'code_neg':'KEY_UP', 'deadzone_percent':15},
|
||||
# usb gamepad analog axes to keyboard key
|
||||
# 'ABS_HAT0X': {'code':'KEY_RIGHT', 'code_neg':'KEY_LEFT', 'deadzone_percent':15},
|
||||
# 'ABS_HAT0Y': {'code':'KEY_DOWN', 'code_neg':'KEY_UP', 'deadzone_percent':15},
|
||||
'ABS_HAT0X': {'code':'KEY_1', 'code_neg':'KEY_2', 'deadzone_percent':15},
|
||||
'ABS_HAT0Y': {'code':'KEY_3', 'code_neg':'KEY_4', 'deadzone_percent':15},
|
||||
# usb gamepad button to mouse buttons
|
||||
'BTN_SOUTH': {'code':'BTN_LEFT'},
|
||||
'BTN_EAST': {'code':'BTN_RIGHT'},
|
||||
# usb gamepad analog axes to mouse axes
|
||||
'ABS_Z': {'code':'REL_X', 'deadzone_percent':15},
|
||||
'ABS_RZ': {'code':'REL_Y', 'deadzone_percent':15},
|
||||
}
|
||||
}
|
||||
|
||||
custom_profile_list = [custom_profile_1]
|
||||
|
||||
"""
|
||||
@@ -332,17 +335,17 @@ class usb4vc_menu(object):
|
||||
self.current_page = 0
|
||||
self.level_size = 5
|
||||
self.page_size = [4, 5, 4, 1, 1]
|
||||
self.kb_opts = list(pboard['protocol_list_keyboard'])
|
||||
self.mouse_opts = list(pboard['protocol_list_mouse'])
|
||||
self.gamepad_opts = list(pboard['protocol_list_gamepad'])
|
||||
self.kb_protocol_list = list(pboard['protocol_list_keyboard'])
|
||||
self.mouse_protocol_list = list(pboard['protocol_list_mouse'])
|
||||
self.gamepad_protocol_list = list(pboard['protocol_list_gamepad'])
|
||||
self.pb_info = dict(pboard)
|
||||
self.current_keyboard_protocol_index = self.cap_index(conf_dict['keyboard_protocol_index'], len(self.kb_opts))
|
||||
self.current_mouse_protocol_index = self.cap_index(conf_dict["mouse_protocol_index"], len(self.mouse_opts))
|
||||
self.current_keyboard_protocol_index = self.cap_index(conf_dict['keyboard_protocol_index'], len(self.kb_protocol_list))
|
||||
self.current_mouse_protocol_index = self.cap_index(conf_dict["mouse_protocol_index"], len(self.mouse_protocol_list))
|
||||
self.current_mouse_sensitivity_offset_index = self.cap_index(conf_dict["mouse_sensitivity_index"], len(mouse_sensitivity_list))
|
||||
self.current_gamepad_protocol_index = self.cap_index(conf_dict["gamepad_protocol_index"], len(self.gamepad_opts))
|
||||
self.current_keyboard_protocol = self.kb_opts[self.current_keyboard_protocol_index]
|
||||
self.current_mouse_protocol = self.mouse_opts[self.current_mouse_protocol_index]
|
||||
self.current_gamepad_protocol = self.gamepad_opts[self.current_gamepad_protocol_index]
|
||||
self.current_gamepad_protocol_index = self.cap_index(conf_dict["gamepad_protocol_index"], len(self.gamepad_protocol_list))
|
||||
self.current_keyboard_protocol = self.kb_protocol_list[self.current_keyboard_protocol_index]
|
||||
self.current_mouse_protocol = self.mouse_protocol_list[self.current_mouse_protocol_index]
|
||||
self.current_gamepad_protocol = self.gamepad_protocol_list[self.current_gamepad_protocol_index]
|
||||
self.last_spi_message = []
|
||||
self.bluetooth_device_list = None
|
||||
self.error_message = ''
|
||||
@@ -393,15 +396,15 @@ class usb4vc_menu(object):
|
||||
if page == 0:
|
||||
with canvas(oled_device) as draw:
|
||||
oled_print_centered("Keyboard Protocol", font_medium, 0, draw)
|
||||
oled_print_centered(self.kb_opts[self.current_keyboard_protocol_index]['display_name'], font_medium, 15, draw)
|
||||
oled_print_centered(self.kb_protocol_list[self.current_keyboard_protocol_index]['display_name'], font_medium, 15, draw)
|
||||
if page == 1:
|
||||
with canvas(oled_device) as draw:
|
||||
oled_print_centered("Mouse Protocol", font_medium, 0, draw)
|
||||
oled_print_centered(self.mouse_opts[self.current_mouse_protocol_index]['display_name'], font_medium, 15, draw)
|
||||
oled_print_centered(self.mouse_protocol_list[self.current_mouse_protocol_index]['display_name'], font_medium, 15, draw)
|
||||
if page == 2:
|
||||
with canvas(oled_device) as draw:
|
||||
oled_print_centered("Gamepad Protocol", font_medium, 0, draw)
|
||||
oled_print_centered(self.gamepad_opts[self.current_gamepad_protocol_index]['display_name'], font_medium, 15, draw)
|
||||
oled_print_centered(self.gamepad_protocol_list[self.current_gamepad_protocol_index]['display_name'], font_medium, 15, draw)
|
||||
if page == 3:
|
||||
with canvas(oled_device) as draw:
|
||||
oled_print_centered("Mouse Sensitivity", font_medium, 0, draw)
|
||||
@@ -466,21 +469,21 @@ class usb4vc_menu(object):
|
||||
|
||||
def send_protocol_set_spi_msg(self):
|
||||
status_dict = {}
|
||||
for index, item in enumerate(self.kb_opts):
|
||||
for index, item in enumerate(self.kb_protocol_list):
|
||||
if item['pid'] & 0x7f in status_dict and status_dict[item['pid'] & 0x7f] == 1:
|
||||
continue
|
||||
status_dict[item['pid'] & 0x7f] = 0
|
||||
if index == self.current_keyboard_protocol_index:
|
||||
status_dict[item['pid'] & 0x7f] = 1
|
||||
|
||||
for index, item in enumerate(self.mouse_opts):
|
||||
for index, item in enumerate(self.mouse_protocol_list):
|
||||
if item['pid'] & 0x7f in status_dict and status_dict[item['pid'] & 0x7f] == 1:
|
||||
continue
|
||||
status_dict[item['pid'] & 0x7f] = 0
|
||||
if index == self.current_mouse_protocol_index:
|
||||
status_dict[item['pid'] & 0x7f] = 1
|
||||
|
||||
for index, item in enumerate(self.gamepad_opts):
|
||||
for index, item in enumerate(self.gamepad_protocol_list):
|
||||
if item['pid'] & 0x7f in status_dict and status_dict[item['pid'] & 0x7f] == 1:
|
||||
continue
|
||||
status_dict[item['pid'] & 0x7f] = 0
|
||||
@@ -499,9 +502,9 @@ class usb4vc_menu(object):
|
||||
this_msg = list(usb4vc_shared.set_protocl_spi_msg_template)
|
||||
this_msg[3:3+len(protocol_bytes)] = protocol_bytes
|
||||
|
||||
self.current_keyboard_protocol = self.kb_opts[self.current_keyboard_protocol_index]
|
||||
self.current_mouse_protocol = self.mouse_opts[self.current_mouse_protocol_index]
|
||||
self.current_gamepad_protocol = self.gamepad_opts[self.current_gamepad_protocol_index]
|
||||
self.current_keyboard_protocol = self.kb_protocol_list[self.current_keyboard_protocol_index]
|
||||
self.current_mouse_protocol = self.mouse_protocol_list[self.current_mouse_protocol_index]
|
||||
self.current_gamepad_protocol = self.gamepad_protocol_list[self.current_gamepad_protocol_index]
|
||||
|
||||
# print('this', this_msg)
|
||||
# print('last', self.last_spi_message)
|
||||
@@ -525,11 +528,11 @@ class usb4vc_menu(object):
|
||||
self.goto_level(1)
|
||||
if level == 1:
|
||||
if page == 0:
|
||||
self.current_keyboard_protocol_index = (self.current_keyboard_protocol_index + 1) % len(self.kb_opts)
|
||||
self.current_keyboard_protocol_index = (self.current_keyboard_protocol_index + 1) % len(self.kb_protocol_list)
|
||||
if page == 1:
|
||||
self.current_mouse_protocol_index = (self.current_mouse_protocol_index + 1) % len(self.mouse_opts)
|
||||
self.current_mouse_protocol_index = (self.current_mouse_protocol_index + 1) % len(self.mouse_protocol_list)
|
||||
if page == 2:
|
||||
self.current_gamepad_protocol_index = (self.current_gamepad_protocol_index + 1) % len(self.gamepad_opts)
|
||||
self.current_gamepad_protocol_index = (self.current_gamepad_protocol_index + 1) % len(self.gamepad_protocol_list)
|
||||
if page == 3:
|
||||
self.current_mouse_sensitivity_offset_index = (self.current_mouse_sensitivity_offset_index + 1) % len(mouse_sensitivity_list)
|
||||
if page == 4:
|
||||
|
||||
@@ -7,6 +7,8 @@ import threading
|
||||
import RPi.GPIO as GPIO
|
||||
import usb4vc_ui
|
||||
import usb4vc_shared
|
||||
import code_mapping
|
||||
|
||||
|
||||
"""
|
||||
sudo apt install stm32flash
|
||||
@@ -110,7 +112,7 @@ ABS_HAT1X = 0x12
|
||||
ABS_HAT1Y = 0x13
|
||||
ABS_HAT2X = 0x14
|
||||
ABS_HAT2Y = 0x15
|
||||
ABS_HAT3Y = 0x16
|
||||
ABS_HAT3X = 0x16
|
||||
ABS_HAT3Y = 0x17
|
||||
|
||||
BTN_LEFT = 0x110
|
||||
@@ -174,14 +176,14 @@ def convert_to_8bit_midpoint127(value, axes_dict, axis_key):
|
||||
return int((value / rmax) * 255) + 127
|
||||
|
||||
IBMPC_GGP_SPI_LOOKUP = {
|
||||
'IBMGBTN_1':4,
|
||||
'IBMGBTN_2':5,
|
||||
'IBMGBTN_3':6,
|
||||
'IBMGBTN_4':7,
|
||||
'IBMGGP_JS1_X':8,
|
||||
'IBMGGP_JS1_Y':9,
|
||||
'IBMGGP_JS2_X':10,
|
||||
'IBMGGP_JS2_Y':11,
|
||||
'IBM_GGP_BTN_1':4,
|
||||
'IBM_GGP_BTN_2':5,
|
||||
'IBM_GGP_BTN_3':6,
|
||||
'IBM_GGP_BTN_4':7,
|
||||
'IBM_GGP_JS1_X':8,
|
||||
'IBM_GGP_JS1_Y':9,
|
||||
'IBM_GGP_JS2_X':10,
|
||||
'IBM_GGP_JS2_Y':11,
|
||||
}
|
||||
|
||||
MOUSE_SPI_LOOKUP = {
|
||||
@@ -195,16 +197,30 @@ MOUSE_SPI_LOOKUP = {
|
||||
REL_WHEEL:8,
|
||||
}
|
||||
|
||||
def find_keycode_in_mapping(key_code, mapping_dict):
|
||||
code_type = None
|
||||
if ABS_X <= key_code <= ABS_HAT3Y:
|
||||
code_type = 'usb_gp_axes'
|
||||
elif BTN_SOUTH <= key_code <= BTN_THUMBR:
|
||||
code_type = 'usb_gp_btn'
|
||||
result = mapping_dict.get(key_code)
|
||||
if code_type is None or result is None:
|
||||
def find_keycode_in_mapping(source_code, mapping_dict):
|
||||
source_name = code_mapping.code_value_to_name_lookup.get(source_code)
|
||||
if source_name is None:
|
||||
return None, None
|
||||
return code_type, result
|
||||
target_info = mapping_dict.get(source_name)
|
||||
if target_info is None or 'code' not in target_info:
|
||||
return None, None
|
||||
target_info = dict(target_info) # make a copy so the lookup table itself won't get modified
|
||||
lookup_result = code_mapping.code_name_to_value_lookup.get(target_info['code'])
|
||||
if lookup_result is None:
|
||||
return None, None
|
||||
source_type = None
|
||||
if ABS_X <= source_code <= ABS_HAT3Y:
|
||||
source_type = 'usb_gp_axes'
|
||||
elif BTN_SOUTH <= source_code <= BTN_THUMBR:
|
||||
source_type = 'usb_gp_btn'
|
||||
if source_type is None:
|
||||
return None, None
|
||||
target_info['code'] = lookup_result[0]
|
||||
if 'code_neg' in target_info:
|
||||
target_info['code_neg'] = code_mapping.code_name_to_value_lookup.get(target_info['code_neg'])[0]
|
||||
target_info['type'] = lookup_result[1]
|
||||
# print(source_name, source_type, target_info)
|
||||
return source_type, target_info
|
||||
|
||||
def find_furthest_from_midpoint(this_set):
|
||||
curr_best = None
|
||||
@@ -225,14 +241,14 @@ def make_generic_gamepad_spi_packet(gp_status_dict, gp_id, axes_info, mapping_in
|
||||
global curr_mouse_output
|
||||
this_gp_dict = gp_status_dict[gp_id]
|
||||
curr_gp_output = {
|
||||
'IBMPC_GBTN_1':set([0]),
|
||||
'IBMPC_GBTN_2':set([0]),
|
||||
'IBMPC_GBTN_3':set([0]),
|
||||
'IBMPC_GBTN_4':set([0]),
|
||||
'IBMPC_GGP_JS1_X':set([127]),
|
||||
'IBMPC_GGP_JS1_Y':set([127]),
|
||||
'IBMPC_GGP_JS2_X':set([127]),
|
||||
'IBMPC_GGP_JS2_Y':set([127]),
|
||||
'IBM_GGP_BTN_1':set([0]),
|
||||
'IBM_GGP_BTN_2':set([0]),
|
||||
'IBM_GGP_BTN_3':set([0]),
|
||||
'IBM_GGP_BTN_4':set([0]),
|
||||
'IBM_GGP_JS1_X':set([127]),
|
||||
'IBM_GGP_JS1_Y':set([127]),
|
||||
'IBM_GGP_JS2_X':set([127]),
|
||||
'IBM_GGP_JS2_Y':set([127]),
|
||||
}
|
||||
curr_kb_output = {}
|
||||
curr_mouse_output = {
|
||||
@@ -254,26 +270,26 @@ def make_generic_gamepad_spi_packet(gp_status_dict, gp_id, axes_info, mapping_in
|
||||
target_code = target_info['code']
|
||||
target_type = target_info['type']
|
||||
|
||||
# button to button
|
||||
if source_type == 'usb_gp_btn' and target_type == 'pb_gp_btn' and target_code in curr_gp_output:
|
||||
# usb gamepad button to generic gamepad button
|
||||
if source_type == 'usb_gp_btn' and target_type == 'ibm_ggp_btn' and target_code in curr_gp_output:
|
||||
curr_gp_output[target_code].add(this_gp_dict[source_code])
|
||||
# analog to analog
|
||||
if source_type == 'usb_gp_axes' and target_type == 'pb_gp_axes' and target_code in curr_gp_output:
|
||||
# usb gamepad analog axes to generic gamepad analog axes
|
||||
if source_type == 'usb_gp_axes' and target_type == 'ibm_ggp_axis' and target_code in curr_gp_output:
|
||||
curr_gp_output[target_code].add(convert_to_8bit_midpoint127(this_gp_dict[source_code], axes_info, source_code))
|
||||
# button to analog
|
||||
if source_type == 'usb_gp_btn' and target_type == 'pb_gp_half_axes' and target_code[:-1] in curr_gp_output and this_gp_dict[source_code]:
|
||||
# usb gamepad button to generic gamepad analog axes
|
||||
if source_type == 'usb_gp_btn' and target_type == 'ibm_ggp_half_axis' and target_code[:-1] in curr_gp_output and this_gp_dict[source_code]:
|
||||
if target_code.endswith('P'):
|
||||
axis_value = 255
|
||||
elif target_code.endswith('N'):
|
||||
axis_value = 0
|
||||
curr_gp_output[target_code[:-1]].add(axis_value)
|
||||
# button to keyboard key
|
||||
if source_type == 'usb_gp_btn' and target_type == 'pb_kb':
|
||||
# usb gamepad button to keyboard key
|
||||
if source_type == 'usb_gp_btn' and target_type == 'kb_key':
|
||||
if target_code not in curr_kb_output:
|
||||
curr_kb_output[target_code] = set()
|
||||
curr_kb_output[target_code].add(this_gp_dict[source_code])
|
||||
# analog to keyboard key
|
||||
if source_type == 'usb_gp_axes' and target_type == 'pb_kb':
|
||||
# usb gamepad analog axes to keyboard key
|
||||
if source_type == 'usb_gp_axes' and target_type == 'kb_key':
|
||||
if target_code not in curr_kb_output:
|
||||
curr_kb_output[target_code] = set()
|
||||
is_activated = 0
|
||||
@@ -288,12 +304,12 @@ def make_generic_gamepad_spi_packet(gp_status_dict, gp_id, axes_info, mapping_in
|
||||
if convert_to_8bit_midpoint127(this_gp_dict[source_code], axes_info, source_code) < 127 - deadzone_amount:
|
||||
is_activated = 1
|
||||
curr_kb_output[target_info['code_neg']].add(is_activated)
|
||||
# button to mouse buttons
|
||||
# usb gamepad button to mouse buttons
|
||||
if source_type == 'usb_gp_btn' and target_type == 'mouse_btn' and target_code in curr_mouse_output:
|
||||
curr_mouse_output[target_code].add(this_gp_dict[source_code])
|
||||
curr_mouse_output['is_modified'] = True
|
||||
# analog to mouse axes
|
||||
if source_type == 'usb_gp_axes' and target_type == 'mouse_axes' and target_code in curr_mouse_output:
|
||||
# usb gamepad analog axes to mouse axes
|
||||
if source_type == 'usb_gp_axes' and target_type == 'usb_rel_axis' and target_code in curr_mouse_output:
|
||||
movement = convert_to_8bit_midpoint127(this_gp_dict[source_code], axes_info, source_code) - 127
|
||||
deadzone_amount = int(127 * target_info['deadzone_percent'] / 100)
|
||||
if abs(movement) <= deadzone_amount:
|
||||
@@ -319,12 +335,12 @@ def make_generic_gamepad_spi_packet(gp_status_dict, gp_id, axes_info, mapping_in
|
||||
gp_spi_msg = list(gamepad_event_ibm_ggp_spi_msg_template)
|
||||
gp_spi_msg[3] = gp_id;
|
||||
for key in curr_gp_output:
|
||||
if "IBMGBTN_" in key:
|
||||
if "IBM_GGP_BTN_" in key:
|
||||
this_value = 0
|
||||
if 1 in curr_gp_output[key]:
|
||||
this_value = 1
|
||||
gp_spi_msg[IBMPC_GGP_SPI_LOOKUP[key]] = this_value
|
||||
if 'IBMGGP_JS' in key:
|
||||
if 'IBM_GGP_JS1' in key:
|
||||
if key in prev_gp_output:
|
||||
new_value_set = curr_gp_output[key] - prev_gp_output[key]
|
||||
if len(new_value_set) > 0:
|
||||
|
||||
Reference in New Issue
Block a user