Skip to content

Commit

Permalink
chore: introduce device config
Browse files Browse the repository at this point in the history
  • Loading branch information
jalmeroth committed Aug 26, 2024
1 parent 30f018e commit 6e4641d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 23 deletions.
53 changes: 30 additions & 23 deletions src/actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,51 +76,58 @@ void screensaver_task(void) {

void send_lock_screen_report(uart_packet_t *packet, device_t *state) {
(void)packet;
(void)state;

keyboard_report_t lock_report = {0}, release_keys = {0};
uint8_t off, pos;

if (BOARD_ROLE == PICO_A) { // Linux
switch (global_state.device_config[BOARD_ROLE].os) {
case LINUX:
lock_report.modifier = KEYBOARD_MODIFIER_LEFTGUI;
uint8_t off = get_byte_offset(HID_KEY_L);
uint8_t pos = get_pos_in_byte(HID_KEY_L);
off = get_byte_offset(HID_KEY_L);
pos = get_pos_in_byte(HID_KEY_L);
lock_report.keycode[off] = 1 << pos;
} else if (BOARD_ROLE == PICO_B) { // MACOS
break;
case MACOS:
lock_report.modifier =
KEYBOARD_MODIFIER_LEFTCTRL | KEYBOARD_MODIFIER_LEFTGUI;
uint8_t off = get_byte_offset(HID_KEY_Q);
uint8_t pos = get_pos_in_byte(HID_KEY_Q);
off = get_byte_offset(HID_KEY_Q);
pos = get_pos_in_byte(HID_KEY_Q);
lock_report.keycode[off] = 1 << pos;
break;
}

send_tud_report(ITF_NUM_HID_KB, REPORT_ID_KEYBOARD, (uint8_t *)&lock_report,
PACKET_DATA_LENGTH);
sizeof(keyboard_report_t));
send_tud_report(ITF_NUM_HID_KB, REPORT_ID_KEYBOARD, (uint8_t *)&release_keys,
PACKET_DATA_LENGTH);
sizeof(keyboard_report_t));
}

void send_suspend_pc_report(uart_packet_t *packet, device_t *state) {
(void)packet;
(void)state;

keyboard_report_t lock_report = {0};

if (BOARD_ROLE == PICO_A) { // Linux
lock_report.modifier = KEYBOARD_MODIFIER_LEFTGUI |
KEYBOARD_MODIFIER_LEFTCTRL |
KEYBOARD_MODIFIER_LEFTSHIFT;
uint8_t off = get_byte_offset(HID_KEY_Q);
uint8_t pos = get_pos_in_byte(HID_KEY_Q);
lock_report.keycode[off] = 1 << pos;
} else if (BOARD_ROLE == PICO_B) { // MACOS
lock_report.modifier =
keyboard_report_t suspend_report = {0};
uint8_t off, pos;

switch (global_state.device_config[BOARD_ROLE].os) {
case LINUX:
suspend_report.modifier = KEYBOARD_MODIFIER_LEFTGUI |
KEYBOARD_MODIFIER_LEFTCTRL |
KEYBOARD_MODIFIER_LEFTSHIFT;
off = get_byte_offset(HID_KEY_Q);
pos = get_pos_in_byte(HID_KEY_Q);
suspend_report.keycode[off] = 1 << pos;
break;
case MACOS:
suspend_report.modifier =
KEYBOARD_MODIFIER_LEFTALT | KEYBOARD_MODIFIER_LEFTGUI;
break;
}

send_tud_report(ITF_NUM_HID_KB, REPORT_ID_KEYBOARD, (uint8_t *)&lock_report,
PACKET_DATA_LENGTH);
send_tud_report(ITF_NUM_HID_KB, REPORT_ID_KEYBOARD,
(uint8_t *)&suspend_report, sizeof(keyboard_report_t));

if (BOARD_ROLE == PICO_B) {
if (global_state.device_config[BOARD_ROLE].os == MACOS) {
consumer_report_t eject_report = {0};
eject_report.apple = 1 << 3; // Usage (Eject)
send_tud_report(ITF_NUM_HID_MS, 3, (uint8_t *)&eject_report,
Expand Down
11 changes: 11 additions & 0 deletions src/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
// BOARD CONFIG
#define PICO_A 0
#define PICO_B 1
#define NUM_DEVICES 2 // PICO_A + PICO_B
#define GPIO_LED_PIN 25 // LED is connected to pin 25 on a PICO

// UART CONFIG
Expand Down Expand Up @@ -85,12 +86,22 @@ enum packet_type_e {
};
typedef enum { IDLE, READING_PACKET, PROCESSING_PACKET } uart_state_t;

enum os_type_e {
LINUX = 1,
MACOS,
};

typedef struct {
uint8_t os;
} device_config_t;

typedef struct {
uint8_t active_output; // Currently selected output (0 = A, 1 = B)
uint64_t last_activity; // Timestamp of the last input activity
bool tud_connected; // Are we connected to the host
uart_state_t
uart_state; // Storing the state for the simple receiver state machine
device_config_t device_config[NUM_DEVICES];
} device_t;

typedef void (*action_handler_t)();
Expand Down
10 changes: 10 additions & 0 deletions src/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@ void setup_tuh(void) {
bi_decl(bi_1pin_with_name(PIO_USB_DP_PIN_DEFAULT, "USB DP"));
}

void set_user_config(void) {
const char *os_type_str[] = {"undefined", "Linux", "macOS"};

global_state.device_config[PICO_A].os = PICO_A_OS;
global_state.device_config[PICO_B].os = PICO_B_OS;
printf("PICO_%s OS: %s\r\n", BOARD_ROLE ? "B" : "A",
os_type_str[global_state.device_config[BOARD_ROLE].os]);
}

void initial_setup(void) {
// default 125MHz is not appropreate. Sysclock should be multiple of 12MHz.
set_sys_clock_khz(120000, true);
Expand All @@ -71,5 +80,6 @@ void initial_setup(void) {
// all USB task run in core1
multicore_launch_core1(core1_main);

set_user_config();
restore_leds();
}

0 comments on commit 6e4641d

Please sign in to comment.