forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bring dactyl/matrix.c in line with quantum/matrix.c (qmk#2613)
* Use the new debounce algorithm in dactyl/matrix.c [qmk#2065] This incorporates the fixed/optimized debounce code added to quantum/matrix.c in: * 508eddf * 4c69608 * 32f88c0 * f403028 * a06115d * Fix the row/column swap in dactyl [qmk#2065] With a column-driven keyboard, reading from the mcp23081 returns a column-state, which takes some extra work to translate into the row-state used in the actual matrix. The ergodox_ez code sidestepped that problem by calling rows "columns" and columns "rows." With this change, the dactyl now calls rows "rows" and columns "columns." * Cleanup: variable names, documentation [qmk#2065] * Support MATRIX_MASKED in dactyl/matrix.c [qmk#2065] * Only unselect one col in unselect_col [qmk#2065] Bonus: saves one i2c transaction per matrix_scan! * Implement COL2ROW in dactyl/matrix.c [qmk#2065] * Fix a typo in dactyl/matrix.c This entirely doesn't matter. The PORT values are set during init_keyboard and never change. They're repeatedly set to the same thing. These PORT lines shouldn't even exist, but since they do, they should at least look right. * Implement COL_PINS/ROW_PINS for dactyl [qmk#2065] * Rename "mcp23018" to "expander" [qmk#2065] I honestly don't know whether/how well this code works with other I/O expanders, but at least in theory, it should be generic enough to work with others. Given that, the variable names shouldn't refer to a specific model of expander. * Remove matrix_power_up from dactyl/matrix.c [qmk#2065] It's commented out in quantum/matrix.c, and the dactyl has no power up/down behavior beyond being unplugged (which goes to matrix_init), so there's no sense keeping it around. * Only initialize expander_input_mask once [qmk#2065] ...and rename input_mask to expander_input_mask, since now that it isn't scoped to init_expander it isn't clear that it's only for the expander.
- Loading branch information
1 parent
d0bd042
commit e94ca1b
Showing
4 changed files
with
401 additions
and
321 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,80 +1,15 @@ | ||
#include "dactyl.h" | ||
#include "i2cmaster.h" | ||
|
||
|
||
bool i2c_initialized = 0; | ||
uint8_t mcp23018_status = 0x20; | ||
|
||
void matrix_init_kb(void) { | ||
DDRB &= ~(1<<4); // set B(4) as input | ||
PORTB &= ~(1<<4); // set B(4) internal pull-up disabled | ||
|
||
// unused pins - C7, D4, D5, D7, E6 | ||
// set as input with internal pull-up enabled | ||
DDRC &= ~(1<<7); | ||
DDRD &= ~(1<<5 | 1<<4); | ||
DDRE &= ~(1<<6); | ||
PORTC |= (1<<7); | ||
PORTD |= (1<<5 | 1<<4); | ||
PORTE |= (1<<6); | ||
|
||
matrix_init_user(); | ||
} | ||
|
||
uint8_t init_mcp23018(void) { | ||
mcp23018_status = 0x20; | ||
|
||
// I2C subsystem | ||
|
||
if (i2c_initialized == 0) { | ||
i2c_init(); // on pins D(1,0) | ||
i2c_initialized = true; | ||
_delay_ms(1000); | ||
} | ||
|
||
// set pin direction | ||
// - unused : input : 1 | ||
// - input : input : 1 | ||
// - driving : output : 0 | ||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; | ||
mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; | ||
mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; | ||
mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; | ||
i2c_stop(); | ||
|
||
// set pull-up | ||
// - unused : on : 1 | ||
// - input : on : 1 | ||
// - driving : off : 0 | ||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; | ||
mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; | ||
mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; | ||
mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; | ||
|
||
out: | ||
i2c_stop(); | ||
|
||
return mcp23018_status; | ||
} | ||
|
||
#ifdef SWAP_HANDS_ENABLE | ||
__attribute__ ((weak)) | ||
// swap-hands action needs a matrix to define the swap | ||
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { | ||
/* Left hand, matrix positions */ | ||
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, | ||
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, | ||
{{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, | ||
{{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, | ||
{{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, | ||
{{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, | ||
|
||
/* Right hand, matrix positions */ | ||
{{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, | ||
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, | ||
{{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, | ||
{{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, | ||
{{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, | ||
{{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, | ||
{{0,11}, {0,10}, {0,9}, {0,8}, {0,7}, {0,6}, {0,5}, {0,4}, {0,3}, {0,2}, {0,1}, {0,0}}, | ||
{{1,11}, {1,11}, {1,9}, {1,8}, {1,7}, {1,6}, {1,5}, {1,4}, {1,3}, {1,2}, {1,1}, {1,0}}, | ||
{{2,11}, {2,12}, {2,9}, {2,8}, {2,7}, {2,6}, {2,5}, {2,4}, {2,3}, {2,2}, {2,1}, {2,0}}, | ||
{{3,11}, {3,13}, {3,9}, {3,8}, {3,7}, {3,6}, {3,5}, {3,4}, {3,3}, {3,2}, {3,1}, {3,0}}, | ||
{{4,11}, {4,14}, {4,9}, {4,8}, {4,7}, {4,6}, {4,5}, {4,4}, {4,3}, {4,2}, {4,1}, {4,0}}, | ||
{{5,11}, {5,15}, {5,9}, {5,8}, {5,7}, {5,6}, {5,5}, {5,4}, {5,3}, {5,2}, {5,1}, {5,0}}, | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.