#include "fsl_port.h" #include "usb_api.h" #include "usb_composite_device.h" #include "test_led.h" #include "key_matrix.h" #include "fsl_i2c.h" #include "i2c.h" #include "i2c_addresses.h" static usb_device_endpoint_struct_t UsbKeyboardEndpoints[USB_KEYBOARD_ENDPOINT_COUNT] = {{ USB_KEYBOARD_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), USB_ENDPOINT_INTERRUPT, USB_KEYBOARD_INTERRUPT_IN_PACKET_SIZE, }}; static usb_device_interface_struct_t UsbKeyboardInterface[] = {{ USB_INTERFACE_ALTERNATE_SETTING_NONE, {USB_KEYBOARD_ENDPOINT_COUNT, UsbKeyboardEndpoints}, NULL, }}; static usb_device_interfaces_struct_t UsbKeyboardInterfaces[USB_KEYBOARD_INTERFACE_COUNT] = {{ USB_CLASS_HID, USB_HID_SUBCLASS_BOOT, USB_HID_PROTOCOL_KEYBOARD, USB_KEYBOARD_INTERFACE_INDEX, UsbKeyboardInterface, sizeof(UsbKeyboardInterface) / sizeof(usb_device_interfaces_struct_t), }}; static usb_device_interface_list_t UsbKeyboardInterfaceList[USB_DEVICE_CONFIGURATION_COUNT] = {{ USB_KEYBOARD_INTERFACE_COUNT, UsbKeyboardInterfaces, }}; usb_device_class_struct_t UsbKeyboardClass = { UsbKeyboardInterfaceList, kUSB_DeviceClassTypeHid, USB_DEVICE_CONFIGURATION_COUNT, }; static usb_keyboard_report_t UsbKeyboardReport; #define KEYBOARD_MATRIX_COLS_NUM 7 #define KEYBOARD_MATRIX_ROWS_NUM 5 key_matrix_t keyMatrix = { .colNum = KEYBOARD_MATRIX_COLS_NUM, .rowNum = KEYBOARD_MATRIX_ROWS_NUM, .cols = (key_matrix_pin_t[]){ {PORTA, GPIOA, kCLOCK_PortA, 5}, {PORTB, GPIOB, kCLOCK_PortB, 3}, {PORTB, GPIOB, kCLOCK_PortB, 16}, {PORTB, GPIOB, kCLOCK_PortB, 17}, {PORTB, GPIOB, kCLOCK_PortB, 18}, {PORTA, GPIOA, kCLOCK_PortA, 1}, {PORTB, GPIOB, kCLOCK_PortB, 0} }, .rows = (key_matrix_pin_t[]){ {PORTA, GPIOA, kCLOCK_PortA, 12}, {PORTA, GPIOA, kCLOCK_PortA, 13}, {PORTC, GPIOC, kCLOCK_PortC, 0}, {PORTB, GPIOB, kCLOCK_PortB, 19}, {PORTD, GPIOD, kCLOCK_PortD, 6} } }; #define KEY_STATE_COUNT (5*7) uint8_t leftKeyStates[KEY_STATE_COUNT] = {0}; uint8_t scancodes[]={ HID_KEYBOARD_SC_7_AND_AMPERSAND, HID_KEYBOARD_SC_8_AND_ASTERISK, HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS, HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS, HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE, HID_KEYBOARD_SC_EQUAL_AND_PLUS, HID_KEYBOARD_SC_BACKSPACE, HID_KEYBOARD_SC_U, HID_KEYBOARD_SC_I, HID_KEYBOARD_SC_O, HID_KEYBOARD_SC_P, HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE, HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE, HID_KEYBOARD_SC_BACKSLASH_AND_PIPE, HID_KEYBOARD_SC_Y, HID_KEYBOARD_SC_J, HID_KEYBOARD_SC_K, HID_KEYBOARD_SC_L, HID_KEYBOARD_SC_SEMICOLON_AND_COLON, HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE, HID_KEYBOARD_SC_ENTER, HID_KEYBOARD_SC_H, HID_KEYBOARD_SC_N, HID_KEYBOARD_SC_M, HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN, HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN, HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK, HID_KEYBOARD_SC_RIGHT_SHIFT, HID_KEYBOARD_SC_A, //?? HID_KEYBOARD_SC_SPACE, HID_KEYBOARD_SC_A, //?? HID_KEYBOARD_SC_SPACE, //Fn HID_KEYBOARD_SC_RIGHT_ALT, HID_KEYBOARD_SC_RIGHT_GUI, HID_KEYBOARD_SC_RIGHT_CONTROL, //Left half HID_KEYBOARD_SC_KEYPAD_1_AND_END, HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW, HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN, HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW, HID_KEYBOARD_SC_KEYPAD_5, HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW, HID_KEYBOARD_SC_TAB, HID_KEYBOARD_SC_Q, HID_KEYBOARD_SC_W, HID_KEYBOARD_SC_E, HID_KEYBOARD_SC_R, HID_KEYBOARD_SC_A, //?? HID_KEYBOARD_SC_T, HID_KEYBOARD_SC_CAPS_LOCK, HID_KEYBOARD_SC_A, HID_KEYBOARD_SC_S, HID_KEYBOARD_SC_D, HID_KEYBOARD_SC_F, HID_KEYBOARD_SC_A, //?? HID_KEYBOARD_SC_G, HID_KEYBOARD_SC_LEFT_SHIFT, HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE, //no idea if this is the right one, HID_KEYBOARD_SC_Z, HID_KEYBOARD_SC_X, HID_KEYBOARD_SC_C, HID_KEYBOARD_SC_V, HID_KEYBOARD_SC_B, HID_KEYBOARD_SC_LEFT_CONTROL, HID_KEYBOARD_SC_LEFT_GUI, HID_KEYBOARD_SC_LEFT_ALT, HID_KEYBOARD_SC_SPACE, //Fn HID_KEYBOARD_SC_A, //?? HID_KEYBOARD_SC_SPACE, //Mod }; static uint8_t getKeycode(uint8_t keyId) { if (keyId