updated code (untested)

This commit is contained in:
2025-03-21 14:46:37 -07:00
parent 4d6df52388
commit 35a59f49ef
4 changed files with 2143 additions and 3 deletions

3
mainboard/CMakeLists.txt Normal file
View File

@@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.16.0)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(mainboard)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
# This file was automatically generated for projects
# without default 'CMakeLists.txt' file.
FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*)
idf_component_register(SRCS ${app_sources})

View File

@@ -4,21 +4,68 @@
#define ROWS 2
#define COLS 2
int ROW[] = {15,2};
int COL[] = {0,4};
//Stores The Raw Report of the Keyboard
uint8_t keyboard_report[ROWS][COLS];
//Stores The Mapping of Each of The Key. Mapping is based of the ASCII value of that key.
//Mappings are in the 2D Space - it's shifted version is 32 bits more than the original
//Thus to get shifted version of M which is 0x4D we can add it by 32 which would be 0x6D
//
// Potential Improvements:
// It may be possible to make a firmware by just altering this variable to the mappings are reconfigurable.
// It may be possible to use more than 2 dimension of the array to allocate for special "shift" keys found on SFF keyboards
uint8_t keyboard_mapping[ROWS][COLS] = {
{0x4D,0x69},
{0x4B,0x55},
};
//Temporary variable to store old and new keyoard report.
//This way we only change the keyboard state when there is a change in the raw data.
//This allows us to hold keys and press multiple at the same time
//Rather than sending individual keystroke each press
uint8_t old_report;
uint8_t new_report;
BleKeyboard bleKeyboard("ModularKeyboard_MainBoard");
void setup() {
Serial.begin(115200);
Serial.println("Starting BLE work!");
bleKeyboard.begin();
for (int i=0; i<COLS; i++){
pinMode(ROW[i], INPUT);
pinMode(COL[i], OUTPUT);
}
}
void loop() {
if(bleKeyboard.isConnected()){
// Reset keyboard report
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
keyboard_report[i][j] = 0x0;
}
}
//Read keyboard report and send
for(int i=0; i < COLS; i++){
//TURN ON ROW
//Write to the column
digitalWrite(COL[i], HIGH);
for(int j=0; j < ROWS; j++){
//READ EACH ROW
//ENABLE KEY IN THAT PIN
//Read row input
old_report = keyboard_report[i][j];
new_report = digitalRead(ROW[j]);
if(old_report!=new_report){
if(new_report){
bleKeyboard.press(keyboard_mapping[i][j]);
}else{
bleKeyboard.release(keyboard_mapping[i][j]);
bleKeyboard.release(keyboard_mapping[i][j] + 32); //Shifted version
}
keyboard_report[i][j] = new_report;
}
}
}
}