#endif
-#define SHIFT_BITS ((CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(MATRIX_COLS - 1) >= 16) ? 24 : 16)
+#define SHIFT_BITS (((CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(MATRIX_COLS - 1) >= 16) || \
+ (CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(0) >= 16)) ? 24 : 16)
void shift_select_nothing(void)
{
writePin(CAPSENSE_SHIFT_STCP, 0);
}
-void shift_data(uint32_t data)
+void shift_data(uint32_t data, int data_idle, int shcp_idle, int stcp_idle)
{
int i;
+ writePin(CAPSENSE_SHIFT_SHCP, 0);
+ writePin(CAPSENSE_SHIFT_STCP, 0);
for (i=SHIFT_BITS-1; i>=0; i--)
{
writePin(CAPSENSE_SHIFT_DIN, (data >> (SHIFT_BITS - 1)) & 1);
writePin(CAPSENSE_SHIFT_SHCP, 1);
- writePin(CAPSENSE_SHIFT_SHCP, 0);
+ if (!((i == 0) && (shcp_idle))) {
+ writePin(CAPSENSE_SHIFT_SHCP, 0);
+ }
data <<= 1;
}
writePin(CAPSENSE_SHIFT_STCP, 1);
- writePin(CAPSENSE_SHIFT_STCP, 0);
+ if (!stcp_idle) {
+ writePin(CAPSENSE_SHIFT_STCP, 0);
+ }
+ writePin(CAPSENSE_SHIFT_DIN, !!data_idle);
}
void shift_select_col_no_strobe(uint8_t col)
setPinOutput(CAPSENSE_SHIFT_OE);
setPinOutput(CAPSENSE_SHIFT_STCP);
setPinOutput(CAPSENSE_SHIFT_SHCP);
+ writePin(CAPSENSE_SHIFT_OE, 0);
writePin(CAPSENSE_SHIFT_STCP, 0);
writePin(CAPSENSE_SHIFT_SHCP, 0);
shift_select_nothing();
}
}
+void set_leds(int num_lock, int caps_lock, int scroll_lock)
+{
+ #if defined(LED_NUM_LOCK_PIN)
+ #if defined(LED_NUM_LOCK_ACTIVE_LOW)
+ writePin(LED_NUM_LOCK_PIN, !num_lock);
+ #else
+ writePin(LED_NUM_LOCK_PIN, num_lock);
+ #endif
+ #endif
+ #if defined(LED_CAPS_LOCK_PIN)
+ #if defined(LED_CAPS_LOCK_ACTIVE_LOW)
+ writePin(LED_CAPS_LOCK_PIN, !caps_lock);
+ #else
+ writePin(LED_CAPS_LOCK_PIN, caps_lock);
+ #endif
+ #endif
+ #if defined(LED_SCROLL_LOCK_PIN)
+ #if defined(LED_SCROLL_LOCK_ACTIVE_LOW)
+ writePin(LED_SCROLL_LOCK_PIN, !scroll_lock);
+ #else
+ writePin(LED_SCROLL_LOCK_PIN, scroll_lock);
+ #endif
+ #endif
+}
+
void real_keyboard_init_basic(void)
{
+ SETUP_UNUSED_PINS();
+
+ #if defined(LED_NUM_LOCK_PIN)
+ setPinOutput(LED_NUM_LOCK_PIN);
+ #endif
+ #if defined(LED_CAPS_LOCK_PIN)
+ setPinOutput(LED_CAPS_LOCK_PIN);
+ #endif
+ #if defined(LED_SCROLL_LOCK_PIN)
+ setPinOutput(LED_SCROLL_LOCK_PIN);
+ #endif
+ set_leds(0, 0, 0);
+
#ifndef NO_PRINT
uprintf("shift_init()");
#endif
#ifndef NO_PRINT
uprintf(" DONE\n");
#endif
+ SETUP_ROW_GPIOS();
#if CAPSENSE_CAL_ENABLED
calibration();
#else
dac_write_threshold(CAPSENSE_HARDCODED_THRESHOLD);
dac_write_threshold(CAPSENSE_HARDCODED_THRESHOLD);
#endif
- #if defined(CONTROLLER_IS_THROUGH_HOLE_BEAMSPRING)
+ #if defined(CONTROLLER_IS_THROUGH_HOLE_BEAMSPRING) || defined(CONTROLLER_IS_THROUGH_HOLE_MODEL_F)
// Disable on-board leds.
setPinOutput(D5);
writePin(D5, 1);
#endif
}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ set_leds(led_state.num_lock, led_state.caps_lock, led_state.scroll_lock);
+ }
+ return res;
+}
+
void matrix_init_custom(void) {
+
+
//test_v2();
//tracking_test();
real_keyboard_init_basic();