mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-03-13 06:54:08 +00:00
Merge remote-tracking branch 'origin/develop' into xap
This commit is contained in:
commit
b43031ae00
@ -22,6 +22,10 @@ void eeprom_update_dword(uint32_t *__p, uint32_t __value);
|
||||
void eeprom_update_block(const void *__src, void *__dst, size_t __n);
|
||||
#endif
|
||||
|
||||
static inline void eeprom_write_qword(uint64_t *__p, uint64_t __value) {
|
||||
eeprom_update_block(&__value, __p, sizeof(uint64_t));
|
||||
}
|
||||
|
||||
#if defined(EEPROM_CUSTOM)
|
||||
# ifndef EEPROM_SIZE
|
||||
# error EEPROM_SIZE has not been defined for custom driver.
|
||||
|
@ -23,6 +23,8 @@ void dynamic_keymap_reset(void);
|
||||
void dynamic_keymap_macro_reset(void);
|
||||
#endif
|
||||
|
||||
_Static_assert((intptr_t)EECONFIG_HANDEDNESS == 14, "EEPROM handedness offset is incorrect");
|
||||
|
||||
/** \brief eeconfig enable
|
||||
*
|
||||
* FIXME: needs doc
|
||||
@ -61,11 +63,9 @@ void eeconfig_init_quantum(void) {
|
||||
eeprom_update_byte(EECONFIG_AUDIO, 0);
|
||||
eeprom_update_dword(EECONFIG_RGBLIGHT, 0);
|
||||
eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, 0);
|
||||
eeprom_update_byte(EECONFIG_UNUSED, 0);
|
||||
eeprom_update_byte(EECONFIG_UNICODEMODE, 0);
|
||||
eeprom_update_byte(EECONFIG_STENOMODE, 0);
|
||||
uint64_t dummy = 0;
|
||||
eeprom_update_block(&dummy, EECONFIG_RGB_MATRIX, sizeof(uint64_t));
|
||||
eeprom_write_qword(EECONFIG_RGB_MATRIX, 0);
|
||||
eeprom_update_dword(EECONFIG_HAPTIC, 0);
|
||||
#if defined(HAPTIC_ENABLE)
|
||||
haptic_reset();
|
||||
|
@ -19,39 +19,59 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h> // offsetof
|
||||
#include "eeprom.h"
|
||||
#include "util.h"
|
||||
|
||||
#ifndef EECONFIG_MAGIC_NUMBER
|
||||
# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE6 // When changing, decrement this value to avoid future re-init issues
|
||||
# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE5 // When changing, decrement this value to avoid future re-init issues
|
||||
#endif
|
||||
#define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF
|
||||
|
||||
// Dummy struct only used to calculate offsets
|
||||
typedef struct PACKED {
|
||||
uint16_t magic;
|
||||
uint8_t debug;
|
||||
uint8_t default_layer;
|
||||
uint16_t keymap;
|
||||
uint8_t backlight;
|
||||
uint8_t audio;
|
||||
uint32_t rgblight;
|
||||
uint8_t unicode;
|
||||
uint8_t steno;
|
||||
uint8_t handedness;
|
||||
uint32_t keyboard;
|
||||
uint32_t user;
|
||||
union { // Mutually exclusive
|
||||
uint32_t led_matrix;
|
||||
uint64_t rgb_matrix;
|
||||
};
|
||||
uint32_t haptic;
|
||||
uint8_t rgblight_ext;
|
||||
uint32_t keymap_hash;
|
||||
} eeprom_core_t;
|
||||
|
||||
/* EEPROM parameter address */
|
||||
#define EECONFIG_MAGIC (uint16_t *)0
|
||||
#define EECONFIG_DEBUG (uint8_t *)2
|
||||
#define EECONFIG_DEFAULT_LAYER (uint8_t *)3
|
||||
#define EECONFIG_KEYMAP (uint16_t *)4
|
||||
#define EECONFIG_BACKLIGHT (uint8_t *)6
|
||||
#define EECONFIG_AUDIO (uint8_t *)7
|
||||
#define EECONFIG_RGBLIGHT (uint32_t *)8
|
||||
#define EECONFIG_UNICODEMODE (uint8_t *)12
|
||||
#define EECONFIG_STENOMODE (uint8_t *)13
|
||||
// EEHANDS for two handed boards
|
||||
#define EECONFIG_HANDEDNESS (uint8_t *)14
|
||||
#define EECONFIG_KEYBOARD (uint32_t *)15
|
||||
#define EECONFIG_USER (uint32_t *)19
|
||||
#define EECONFIG_UNUSED (uint8_t *)23
|
||||
// Mutually exclusive
|
||||
#define EECONFIG_LED_MATRIX (uint32_t *)24
|
||||
#define EECONFIG_RGB_MATRIX (uint64_t *)24
|
||||
|
||||
#define EECONFIG_HAPTIC (uint32_t *)32
|
||||
#define EECONFIG_RGBLIGHT_EXTENDED (uint8_t *)36
|
||||
|
||||
#define EECONFIG_KEYMAP_HASH (uint32_t *)37
|
||||
#define EECONFIG_MAGIC (uint16_t *)(offsetof(eeprom_core_t, magic))
|
||||
#define EECONFIG_DEBUG (uint8_t *)(offsetof(eeprom_core_t, debug))
|
||||
#define EECONFIG_DEFAULT_LAYER (uint8_t *)(offsetof(eeprom_core_t, default_layer))
|
||||
#define EECONFIG_KEYMAP (uint16_t *)(offsetof(eeprom_core_t, keymap))
|
||||
#define EECONFIG_BACKLIGHT (uint8_t *)(offsetof(eeprom_core_t, backlight))
|
||||
#define EECONFIG_AUDIO (uint8_t *)(offsetof(eeprom_core_t, audio))
|
||||
#define EECONFIG_RGBLIGHT (uint32_t *)(offsetof(eeprom_core_t, rgblight))
|
||||
#define EECONFIG_UNICODEMODE (uint8_t *)(offsetof(eeprom_core_t, unicode))
|
||||
#define EECONFIG_STENOMODE (uint8_t *)(offsetof(eeprom_core_t, steno))
|
||||
#define EECONFIG_HANDEDNESS (uint8_t *)(offsetof(eeprom_core_t, handedness))
|
||||
#define EECONFIG_KEYBOARD (uint32_t *)(offsetof(eeprom_core_t, keyboard))
|
||||
#define EECONFIG_USER (uint32_t *)(offsetof(eeprom_core_t, user))
|
||||
#define EECONFIG_LED_MATRIX (uint32_t *)(offsetof(eeprom_core_t, led_matrix))
|
||||
#define EECONFIG_RGB_MATRIX (uint64_t *)(offsetof(eeprom_core_t, rgb_matrix))
|
||||
#define EECONFIG_HAPTIC (uint32_t *)(offsetof(eeprom_core_t, haptic))
|
||||
#define EECONFIG_RGBLIGHT_EXTENDED (uint8_t *)(offsetof(eeprom_core_t, rgblight_ext))
|
||||
#define EECONFIG_KEYMAP_HASH (uint32_t *)(offsetof(eeprom_core_t, keymap_hash))
|
||||
|
||||
// Size of EEPROM being used for core data storage
|
||||
#define EECONFIG_BASE_SIZE 41
|
||||
#define EECONFIG_BASE_SIZE ((uint8_t)sizeof(eeprom_core_t))
|
||||
|
||||
// Size of EEPROM dedicated to keyboard- and user-specific data
|
||||
#ifndef EECONFIG_KB_DATA_SIZE
|
||||
|
@ -25,22 +25,9 @@ void protocol_pre_task(void);
|
||||
void protocol_post_task(void);
|
||||
|
||||
// Bodge as refactoring this area sucks....
|
||||
void protocol_init(void) __attribute__((weak));
|
||||
void protocol_init(void) {
|
||||
protocol_pre_init();
|
||||
|
||||
keyboard_init();
|
||||
|
||||
protocol_post_init();
|
||||
}
|
||||
|
||||
void protocol_task(void) __attribute__((weak));
|
||||
void protocol_task(void) {
|
||||
protocol_pre_task();
|
||||
|
||||
void protocol_keyboard_task(void) __attribute__((weak));
|
||||
void protocol_keyboard_task(void) {
|
||||
keyboard_task();
|
||||
|
||||
protocol_post_task();
|
||||
}
|
||||
|
||||
/** \brief Main
|
||||
@ -53,11 +40,30 @@ int main(void) {
|
||||
protocol_setup();
|
||||
keyboard_setup();
|
||||
|
||||
protocol_init();
|
||||
protocol_pre_init();
|
||||
keyboard_init();
|
||||
protocol_post_init();
|
||||
|
||||
/* Main loop */
|
||||
while (true) {
|
||||
protocol_task();
|
||||
protocol_pre_task();
|
||||
protocol_keyboard_task();
|
||||
protocol_post_task();
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
void raw_hid_task(void);
|
||||
raw_hid_task();
|
||||
#endif
|
||||
|
||||
#ifdef XAP_ENABLE
|
||||
void xap_task(void);
|
||||
xap_task();
|
||||
#endif
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
void console_task(void);
|
||||
console_task();
|
||||
#endif
|
||||
|
||||
#ifdef QUANTUM_PAINTER_ENABLE
|
||||
// Run Quantum Painter task
|
||||
|
@ -70,17 +70,6 @@ host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_nkro, send_mo
|
||||
void virtser_task(void);
|
||||
#endif
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
void raw_hid_task(void);
|
||||
#endif
|
||||
|
||||
#ifdef XAP_ENABLE
|
||||
void xap_task(void);
|
||||
#endif
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
void console_task(void);
|
||||
#endif
|
||||
#ifdef MIDI_ENABLE
|
||||
void midi_ep_task(void);
|
||||
#endif
|
||||
@ -213,20 +202,11 @@ void protocol_pre_task(void) {
|
||||
}
|
||||
|
||||
void protocol_post_task(void) {
|
||||
#ifdef CONSOLE_ENABLE
|
||||
console_task();
|
||||
#endif
|
||||
#ifdef MIDI_ENABLE
|
||||
midi_ep_task();
|
||||
#endif
|
||||
#ifdef VIRTSER_ENABLE
|
||||
virtser_task();
|
||||
#endif
|
||||
#ifdef RAW_ENABLE
|
||||
raw_hid_task();
|
||||
#endif
|
||||
#ifdef XAP_ENABLE
|
||||
xap_task();
|
||||
#endif
|
||||
usb_idle_task();
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ __attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
|
||||
*
|
||||
* FIXME: Needs doc
|
||||
*/
|
||||
static void raw_hid_task(void) {
|
||||
void raw_hid_task(void) {
|
||||
// Create a temporary buffer to hold the read in data from the host
|
||||
uint8_t data[RAW_EPSIZE];
|
||||
bool data_read = false;
|
||||
@ -974,14 +974,6 @@ void protocol_post_task(void) {
|
||||
CDC_Device_USBTask(&cdc_device);
|
||||
#endif
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
raw_hid_task();
|
||||
#endif
|
||||
|
||||
#ifdef XAP_ENABLE
|
||||
xap_task();
|
||||
#endif
|
||||
|
||||
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
|
||||
USB_USBTask();
|
||||
#endif
|
||||
|
@ -31,18 +31,6 @@
|
||||
# include "sleep_led.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
void console_task(void);
|
||||
#endif
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
void raw_hid_task(void);
|
||||
#endif
|
||||
|
||||
#ifdef XAP_ENABLE
|
||||
void xap_task(void);
|
||||
#endif
|
||||
|
||||
/* This is from main.c of USBaspLoader */
|
||||
static void initForUsbConnectivity(void) {
|
||||
uint8_t i = 0;
|
||||
@ -140,7 +128,7 @@ static inline bool should_do_suspend(void) {
|
||||
return vusb_suspended;
|
||||
}
|
||||
|
||||
void protocol_task(void) {
|
||||
void protocol_pre_task(void) {
|
||||
#if !defined(NO_USB_STARTUP_CHECK)
|
||||
if (should_do_suspend()) {
|
||||
dprintln("suspending keyboard");
|
||||
@ -163,7 +151,9 @@ void protocol_task(void) {
|
||||
vusb_wakeup();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void protocol_keyboard_task(void) {
|
||||
usbPoll();
|
||||
|
||||
// TODO: configuration process is inconsistent. it sometime fails.
|
||||
@ -171,28 +161,8 @@ void protocol_task(void) {
|
||||
if (usbConfiguration && usbInterruptIsReady()) {
|
||||
keyboard_task();
|
||||
}
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
usbPoll();
|
||||
|
||||
if (usbConfiguration && usbInterruptIsReady4()) {
|
||||
raw_hid_task();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef XAP_ENABLE
|
||||
usbPoll();
|
||||
|
||||
if (usbConfiguration && usbInterruptIsReady4()) {
|
||||
xap_task();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
usbPoll();
|
||||
|
||||
if (usbConfiguration && usbInterruptIsReady3()) {
|
||||
console_task();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void protocol_post_task(void) {
|
||||
// do nothing
|
||||
}
|
||||
|
@ -171,6 +171,12 @@ __attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
|
||||
}
|
||||
|
||||
void raw_hid_task(void) {
|
||||
usbPoll();
|
||||
|
||||
if (!usbConfiguration || !usbInterruptIsReady4()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (raw_output_received_bytes == RAW_BUFFER_SIZE) {
|
||||
raw_hid_receive(raw_output_buffer, RAW_BUFFER_SIZE);
|
||||
raw_output_received_bytes = 0;
|
||||
@ -239,6 +245,12 @@ void xap_receive_base(const void *data) {
|
||||
}
|
||||
|
||||
void xap_task(void) {
|
||||
usbPoll();
|
||||
|
||||
if (!usbConfiguration || !usbInterruptIsReady4()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (xap_output_received_bytes == XAP_BUFFER_SIZE) {
|
||||
xap_receive_base(xap_output_buffer);
|
||||
xap_output_received_bytes = 0;
|
||||
@ -259,7 +271,9 @@ int8_t sendchar(uint8_t c) {
|
||||
}
|
||||
|
||||
void console_task(void) {
|
||||
if (!usbConfiguration) {
|
||||
usbPoll();
|
||||
|
||||
if (!usbConfiguration || !usbInterruptIsReady3()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user