diff --git a/firmware/modularkbd/Core/Inc/hid_queue.h b/firmware/modularkbd/Core/Inc/hid_queue.h new file mode 100644 index 00000000..8198b981 --- /dev/null +++ b/firmware/modularkbd/Core/Inc/hid_queue.h @@ -0,0 +1,33 @@ +#ifndef HID_QUEUE_H +#define HID_QUEUE_H + +#include +#include + +typedef struct { + uint8_t MODIFIER; // Modifier keys (Ctrl, Shift, Alt, Win) + uint8_t RESERVED; // Always 0 + uint8_t KEYPRESS[12]; // Up to 12 keycodes +} __attribute__((packed)) HIDReport; + +typedef struct { + HIDReport *buffer; + uint16_t capacity; + uint16_t head; + uint16_t tail; + uint16_t count; +} HIDQueue; + +// Init + reset +bool hid_queue_init(HIDQueue *q, HIDReport *buffer, uint16_t capacity); +void hid_queue_reset(HIDQueue *q); + +// FIFO Ops +bool hid_queue_push(HIDQueue *q, HIDReport item); +bool hid_queue_pop(HIDQueue *q, HIDReport *out); + +// Helpers +bool hid_queue_is_empty(HIDQueue *q); +bool hid_queue_is_full(HIDQueue *q); + +#endif diff --git a/firmware/modularkbd/Core/Src/hid_queue.c b/firmware/modularkbd/Core/Src/hid_queue.c new file mode 100644 index 00000000..4662ee2b --- /dev/null +++ b/firmware/modularkbd/Core/Src/hid_queue.c @@ -0,0 +1,55 @@ +#include "hid_queue.h" + +bool hid_queue_init(HIDQueue *q, HIDReport *buffer, uint16_t capacity) { + if (!q || !buffer || capacity == 0) return false; + + q->buffer = buffer; + q->capacity = capacity; + q->head = 0; + q->tail = 0; + q->count = 0; + + return true; +} + +void hid_queue_reset(HIDQueue *q) { + if (!q) return; + q->head = 0; + q->tail = 0; + q->count = 0; +} + +bool hid_queue_is_empty(HIDQueue *q) { + return q->count == 0; +} + +bool hid_queue_is_full(HIDQueue *q) { + return q->count == q->capacity; +} + +bool hid_queue_push(HIDQueue *q, HIDReport item) { + if (hid_queue_is_full(q)) { + return false; // Queue full (no more shelves for potions!) (;ω;) + } + + q->buffer[q->tail] = item; + q->tail = (q->tail + 1) % q->capacity; + q->count++; + + return true; +} + +bool hid_queue_pop(HIDQueue *q, HIDReport *out) { + if (hid_queue_is_empty(q)) { + return false; // Nothing to dequeue + } + + if (out) { + *out = q->buffer[q->head]; + } + + q->head = (q->head + 1) % q->capacity; + q->count--; + + return true; +} diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo b/firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo new file mode 100644 index 00000000..201ff0ba --- /dev/null +++ b/firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo @@ -0,0 +1,6 @@ +../Core/Src/hid_queue.c:3:6:hid_queue_init 4 +../Core/Src/hid_queue.c:15:6:hid_queue_reset 2 +../Core/Src/hid_queue.c:22:6:hid_queue_is_empty 1 +../Core/Src/hid_queue.c:26:6:hid_queue_is_full 1 +../Core/Src/hid_queue.c:30:6:hid_queue_push 2 +../Core/Src/hid_queue.c:42:6:hid_queue_pop 3 diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.d b/firmware/modularkbd/Debug/Core/Src/hid_queue.d new file mode 100644 index 00000000..115dc54f --- /dev/null +++ b/firmware/modularkbd/Debug/Core/Src/hid_queue.d @@ -0,0 +1,2 @@ +Core/Src/hid_queue.o: ../Core/Src/hid_queue.c ../Core/Inc/hid_queue.h +../Core/Inc/hid_queue.h: diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.o b/firmware/modularkbd/Debug/Core/Src/hid_queue.o new file mode 100644 index 00000000..54bcda7d Binary files /dev/null and b/firmware/modularkbd/Debug/Core/Src/hid_queue.o differ diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.su b/firmware/modularkbd/Debug/Core/Src/hid_queue.su new file mode 100644 index 00000000..f204f562 --- /dev/null +++ b/firmware/modularkbd/Debug/Core/Src/hid_queue.su @@ -0,0 +1,6 @@ +../Core/Src/hid_queue.c:3:6:hid_queue_init 24 static +../Core/Src/hid_queue.c:15:6:hid_queue_reset 16 static +../Core/Src/hid_queue.c:22:6:hid_queue_is_empty 16 static +../Core/Src/hid_queue.c:26:6:hid_queue_is_full 16 static +../Core/Src/hid_queue.c:30:6:hid_queue_push 24 static +../Core/Src/hid_queue.c:42:6:hid_queue_pop 24 static diff --git a/hardware/3d models/67 percent/67PhoBottomCase.SLDPRT b/hardware/3d models/67 percent/67PhoBottomCase.SLDPRT new file mode 100644 index 00000000..13e0af47 Binary files /dev/null and b/hardware/3d models/67 percent/67PhoBottomCase.SLDPRT differ diff --git a/hardware/3d models/67 percent/67PhoCaseBottom.SLDPRT b/hardware/3d models/67 percent/67PhoCaseBottom.SLDPRT new file mode 100644 index 00000000..88642978 Binary files /dev/null and b/hardware/3d models/67 percent/67PhoCaseBottom.SLDPRT differ diff --git a/hardware/3d models/67 percent/67PhoCaseBottomRIght.SLDPRT b/hardware/3d models/67 percent/67PhoCaseBottomRIght.SLDPRT new file mode 100644 index 00000000..adf51dca Binary files /dev/null and b/hardware/3d models/67 percent/67PhoCaseBottomRIght.SLDPRT differ diff --git a/hardware/3d models/67 percent/67PhoPlate.SLDPRT b/hardware/3d models/67 percent/67PhoPlate.SLDPRT new file mode 100644 index 00000000..d3c060a3 Binary files /dev/null and b/hardware/3d models/67 percent/67PhoPlate.SLDPRT differ diff --git a/hardware/3d models/67 percent/67plate.SLDPRT b/hardware/3d models/67 percent/67plate.SLDPRT new file mode 100644 index 00000000..b95b66bb Binary files /dev/null and b/hardware/3d models/67 percent/67plate.SLDPRT differ diff --git a/hardware/3d models/67 percent/AssPho_PlateNLeftNRight.SLDASM b/hardware/3d models/67 percent/AssPho_PlateNLeftNRight.SLDASM new file mode 100644 index 00000000..6db2abc6 Binary files /dev/null and b/hardware/3d models/67 percent/AssPho_PlateNLeftNRight.SLDASM differ diff --git a/hardware/3d models/67 percent/AssemblyPho_plateNLeftNRight.SLDASM b/hardware/3d models/67 percent/AssemblyPho_plateNLeftNRight.SLDASM new file mode 100644 index 00000000..839923c1 Binary files /dev/null and b/hardware/3d models/67 percent/AssemblyPho_plateNLeftNRight.SLDASM differ diff --git a/hardware/3d models/67 percent/numpadBottom.SLDPRT b/hardware/3d models/67 percent/numpadBottom.SLDPRT new file mode 100644 index 00000000..fef7cf06 Binary files /dev/null and b/hardware/3d models/67 percent/numpadBottom.SLDPRT differ diff --git a/hardware/3d models/67 percent/numpadBottom.STL b/hardware/3d models/67 percent/numpadBottom.STL new file mode 100644 index 00000000..3ef0af20 Binary files /dev/null and b/hardware/3d models/67 percent/numpadBottom.STL differ diff --git a/hardware/3d models/67 percent/numpadTop.SLDPRT b/hardware/3d models/67 percent/numpadTop.SLDPRT new file mode 100644 index 00000000..e626a487 Binary files /dev/null and b/hardware/3d models/67 percent/numpadTop.SLDPRT differ diff --git a/hardware/3d models/67 percent/numpadTop.STL b/hardware/3d models/67 percent/numpadTop.STL new file mode 100644 index 00000000..35102c1d Binary files /dev/null and b/hardware/3d models/67 percent/numpadTop.STL differ diff --git a/hardware/3d models/67 percent/~$numpadBottom.SLDPRT b/hardware/3d models/67 percent/~$numpadBottom.SLDPRT new file mode 100644 index 00000000..dc7a1e46 Binary files /dev/null and b/hardware/3d models/67 percent/~$numpadBottom.SLDPRT differ diff --git a/hardware/3d models/67 percent/~$numpadTop.SLDPRT b/hardware/3d models/67 percent/~$numpadTop.SLDPRT new file mode 100644 index 00000000..dc7a1e46 Binary files /dev/null and b/hardware/3d models/67 percent/~$numpadTop.SLDPRT differ diff --git a/hardware/3d models/old numpad/bottomnumpad.stl b/hardware/3d models/old numpad/bottomnumpad.stl new file mode 100644 index 00000000..3d45e4f1 Binary files /dev/null and b/hardware/3d models/old numpad/bottomnumpad.stl differ diff --git a/hardware/3d models/old numpad/test.FCStd b/hardware/3d models/old numpad/test.FCStd new file mode 100644 index 00000000..b3ea0a7f Binary files /dev/null and b/hardware/3d models/old numpad/test.FCStd differ diff --git a/hardware/3d models/old numpad/topnumpad.stl b/hardware/3d models/old numpad/topnumpad.stl new file mode 100644 index 00000000..25211da1 Binary files /dev/null and b/hardware/3d models/old numpad/topnumpad.stl differ diff --git a/hardware/numpad/numpad/numpad-backups/numpad-2025-11-16_172244.zip b/hardware/numpad/numpad/numpad-backups/numpad-2025-11-16_172244.zip new file mode 100644 index 00000000..ee100420 Binary files /dev/null and b/hardware/numpad/numpad/numpad-backups/numpad-2025-11-16_172244.zip differ diff --git a/hardware/numpad/numpad/numpad-backups/numpad-2025-11-18_121328.zip b/hardware/numpad/numpad/numpad-backups/numpad-2025-11-18_121328.zip new file mode 100644 index 00000000..732beb94 Binary files /dev/null and b/hardware/numpad/numpad/numpad-backups/numpad-2025-11-18_121328.zip differ