Compare commits

..

4 Commits

Author SHA1 Message Date
ece14278ef format code according to conventions [skip ci] 2020-03-17 01:02:01 +00:00
567bfc97ac ARM - ADC cleanup ()
* Update switch to array to allow custom values

* Add adc keymap

* update docs to reflect alignment of default 10 bit

* start conversion to USE_ADCVn

* samplerate is hella wrong...stub out for now

* basic f1 and f4 functionality

* Tidy up current changes

* Restore old pinToMux function

* Add back sample rate for supported platforms

* F0 compile fixes

* wordsmithery

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Remove reference to avr only function

Co-authored-by: Ryan <fauxpark@gmail.com>
2020-03-17 00:29:52 +00:00
7aff643031 Update Italian keymap and add sendstring LUT () 2020-03-16 14:32:48 +00:00
7fe4097792 Update German keymap and sendstring LUT () 2020-03-16 14:31:48 +00:00
10 changed files with 666 additions and 345 deletions

@ -2,7 +2,7 @@
QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](feature_encoders.md).
This driver currently supports both AVR and a limited selection of ARM devices. On AVR devices, the values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V). On supported ARM devices, there is more flexibility in control of operation through `#define`s, but by default the values returned are 12-bit integers (0-4095) mapped between 0V and VCC (usually 3.3V).
This driver currently supports both AVR and a limited selection of ARM devices. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V for AVR, 3.3V only for ARM), however on ARM there is more flexibility in control of operation through `#define`s if you need more precision.
## Usage

File diff suppressed because it is too large Load Diff

@ -16,42 +16,26 @@
#pragma once
#include <stdint.h>
#include "quantum.h"
#include "ch.h"
#include <hal.h>
#if !defined(STM32F0XX) && !defined(STM32F3XX)
# error "Only STM23F0 and STM32F3 devices have ADC support in QMK at this time."
#endif
#if !HAL_USE_ADC
# error "You need to set HAL_USE_ADC to TRUE in your halconf.h to use the ADC."
#endif
#if !STM32_ADC_USE_ADC1 && !STM32_ADC_USE_ADC2 && !STM32_ADC_USE_ADC3 && !STM32_ADC_USE_ADC4
# error "You need to set one of the 'STM32_ADC_USE_ADCx' settings to TRUE in your mcuconf.h to use the ADC."
#endif
#if STM32_ADC_DUAL_MODE
# error "STM32 ADC Dual Mode is not supported at this time."
#endif
#if STM32_ADCV3_OVERSAMPLING
# error "STM32 ADCV3 Oversampling is not supported at this time."
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
pin_t pin;
uint8_t adc;
} pin_and_adc;
#define PIN_AND_ADC(p, a) \
(pin_and_adc) { p, a }
uint16_t input;
uint8_t adc;
} adc_mux;
#define TO_MUX(i, a) \
(adc_mux) { i, a }
// analogReference has been left un-defined for ARM devices.
// void analogReference(uint8_t mode);
int16_t analogReadPin(pin_t pin);
int16_t analogReadPinAdc(pin_t pin, uint8_t adc);
adc_mux pinToMux(pin_t pin);
adcsample_t analogReadPin(pin_t pin);
adcsample_t analogReadPinAdc(pin_t pin, uint8_t adc);
pin_and_adc pinToMux(pin_t pin);
int16_t adc_read(adc_mux mux);
adcsample_t adc_read(pin_and_adc mux);
#ifdef __cplusplus
}
#endif

@ -0,0 +1 @@
#pragma once

@ -0,0 +1,38 @@
#include QMK_KEYBOARD_H
#include "analog.h"
#include <stdio.h>
#ifndef ADC_PIN
# define ADC_PIN A0
#endif
enum custom_keycodes {
ADC_SAMPLE = SAFE_RANGE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(ADC_SAMPLE) //
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case ADC_SAMPLE:
if (record->event.pressed) {
int16_t val = analogReadPin(ADC_PIN);
char buffer [50];
sprintf(buffer, "ADC:%u\n", val);
#ifdef CONSOLE_ENABLE
printf(buffer);
#else
SEND_STRING(buffer);
#endif
}
break;
}
return false;
};
// adc_mux pinToMux(pin_t pin) {
// return TO_MUX( ADC_CHANNEL_IN1, 0 );
// };

@ -0,0 +1,3 @@
SRC += analog.c
CONSOLE_ENABLE = yes

@ -14,98 +14,153 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEYMAP_GERMAN
#define KEYMAP_GERMAN
#pragma once
#include "keymap.h"
// normal characters
#define DE_Z KC_Y
#define DE_Y KC_Z
// clang-format off
#define DE_A KC_A
#define DE_B KC_B
#define DE_C KC_C
#define DE_D KC_D
#define DE_E KC_E
#define DE_F KC_F
#define DE_G KC_G
#define DE_H KC_H
#define DE_I KC_I
#define DE_J KC_J
#define DE_K KC_K
#define DE_L KC_L
#define DE_M KC_M
#define DE_N KC_N
#define DE_O KC_O
#define DE_P KC_P
#define DE_Q KC_Q
#define DE_R KC_R
#define DE_S KC_S
#define DE_T KC_T
#define DE_U KC_U
#define DE_V KC_V
#define DE_W KC_W
#define DE_X KC_X
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ^  1  2  3  4  5  6  7  8  9  0  ß  ´        
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │      Q  W  E  R  T  Z  U  I  O  P  Ü  + │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │       A  S  D  F  G  H  J  K  L  Ö  Ä  # │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ <  Y  X  C  V  B  N  M  , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define DE_CIRC KC_GRV // ^ (dead)
#define DE_1 KC_1 // 1
#define DE_2 KC_2 // 2
#define DE_3 KC_3 // 3
#define DE_4 KC_4 // 4
#define DE_5 KC_5 // 5
#define DE_6 KC_6 // 6
#define DE_7 KC_7 // 7
#define DE_8 KC_8 // 8
#define DE_9 KC_9 // 9
#define DE_0 KC_0 // 0
#define DE_SS KC_MINS // ß
#define DE_ACUT KC_EQL // ´ (dead)
// Row 2
#define DE_Q KC_Q // Q
#define DE_W KC_W // W
#define DE_E KC_E // E
#define DE_R KC_R // R
#define DE_T KC_T // T
#define DE_Z KC_Y // Z
#define DE_U KC_U // U
#define DE_I KC_I // I
#define DE_O KC_O // O
#define DE_P KC_P // P
#define DE_UDIA KC_LBRC // Ü
#define DE_PLUS KC_RBRC // +
// Row 3
#define DE_A KC_A // A
#define DE_S KC_S // S
#define DE_D KC_D // D
#define DE_F KC_F // F
#define DE_G KC_G // G
#define DE_H KC_H // H
#define DE_J KC_J // J
#define DE_K KC_K // K
#define DE_L KC_L // L
#define DE_ODIA KC_SCLN // Ö
#define DE_ADIA KC_QUOT // Ä
#define DE_HASH KC_NUHS // #
// Row 4
#define DE_LABK KC_NUBS // <
#define DE_Y KC_Z // Y
#define DE_X KC_X // X
#define DE_C KC_C // C
#define DE_V KC_V // V
#define DE_B KC_B // B
#define DE_N KC_N // N
#define DE_M KC_M // M
#define DE_COMM KC_COMM // ,
#define DE_DOT KC_DOT // .
#define DE_MINS KC_SLSH // -
#define DE_0 KC_0
#define DE_1 KC_1
#define DE_2 KC_2
#define DE_3 KC_3
#define DE_4 KC_4
#define DE_5 KC_5
#define DE_6 KC_6
#define DE_7 KC_7
#define DE_8 KC_8
#define DE_9 KC_9
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │   │   │   │   │   │   │   │ * │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │   │   │ ' │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ > │   │   │   │   │   │   │   │ ; │ :  _           
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define DE_DEG S(DE_CIRC) // °
#define DE_EXLM S(DE_1) // !
#define DE_DQUO S(DE_2) // "
#define DE_SECT S(DE_3) // §
#define DE_DLR S(DE_4) // $
#define DE_PERC S(DE_5) // %
#define DE_AMPR S(DE_6) // &
#define DE_SLSH S(DE_7) // /
#define DE_LPRN S(DE_8) // (
#define DE_RPRN S(DE_9) // )
#define DE_EQL S(DE_0) // =
#define DE_QUES S(DE_SS) // ?
#define DE_GRV S(DE_ACUT) // ` (dead)
// Row 2
#define DE_ASTR S(DE_PLUS) // *
// Row 3
#define DE_QUOT S(DE_HASH) // '
// Row 4
#define DE_RABK S(DE_LABK) // >
#define DE_SCLN S(DE_COMM) // ;
#define DE_COLN S(DE_DOT) // :
#define DE_UNDS S(DE_MINS) // _
#define DE_DOT KC_DOT
#define DE_COMM KC_COMM
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │   │   │ ² │ ³ │   │   │   │ { │ [ │ ] │ } │ \ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │ @ │   │ € │   │   │   │   │   │   │   │   │ ~ │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define DE_SUP2 ALGR(DE_2) // ²
#define DE_SUP3 ALGR(DE_3) // ³
#define DE_LCBR ALGR(DE_7) // {
#define DE_LBRC ALGR(DE_8) // [
#define DE_RBRC ALGR(DE_9) // ]
#define DE_RCBR ALGR(DE_0) // }
#define DE_BSLS ALGR(DE_SS) // (backslash)
// Row 2
#define DE_AT ALGR(DE_Q) // @
#define DE_EURO ALGR(DE_E) // €
#define DE_TILD ALGR(DE_PLUS) // ~
// Row 4
#define DE_PIPE ALGR(DE_LABK) // |
#define DE_MICR ALGR(DE_M) // µ
#define DE_SS KC_MINS
#define DE_AE KC_QUOT
#define DE_UE KC_LBRC
#define DE_OE KC_SCLN
#define DE_CIRC KC_GRAVE // accent circumflex ^ and ring °
#define DE_ACUT KC_EQL // accent acute ´ and grave `
#define DE_PLUS KC_RBRC // + and * and ~
#define DE_HASH KC_BSLS // # and '
#define DE_LESS KC_NUBS // < and > and |
#define DE_MINS KC_SLSH // - and _
// shifted characters
#define DE_RING LSFT(DE_CIRC) // °
#define DE_EXLM LSFT(KC_1) // !
#define DE_DQOT LSFT(KC_2) // "
#define DE_PARA LSFT(KC_3) // §
#define DE_DLR LSFT(KC_4) // $
#define DE_PERC LSFT(KC_5) // %
#define DE_AMPR LSFT(KC_6) // &
#define DE_SLSH LSFT(KC_7) // /
#define DE_LPRN LSFT(KC_8) // (
#define DE_RPRN LSFT(KC_9) // )
#define DE_EQL LSFT(KC_0) // =
#define DE_QST LSFT(DE_SS) // ?
#define DE_GRV LSFT(DE_ACUT) // `
#define DE_ASTR LSFT(DE_PLUS) // *
#define DE_QUOT LSFT(DE_HASH) // '
#define DE_MORE LSFT(DE_LESS) // >
#define DE_COLN LSFT(KC_DOT) // :
#define DE_SCLN LSFT(KC_COMM) // ;
#define DE_UNDS LSFT(DE_MINS) // _
// Alt Gr-ed characters
#define DE_SQ2 ALGR(KC_2) // ²
#define DE_SQ3 ALGR(KC_3) // ³
#define DE_LCBR ALGR(KC_7) // {
#define DE_LBRC ALGR(KC_8) // [
#define DE_RBRC ALGR(KC_9) // ]
#define DE_RCBR ALGR(KC_0) // }
#define DE_BSLS ALGR(DE_SS) // backslash
#define DE_AT ALGR(KC_Q) // @
#define DE_EURO ALGR(KC_E) // €
#define DE_TILD ALGR(DE_PLUS) // ~
#define DE_PIPE ALGR(DE_LESS) // |
#endif
// DEPRECATED
#define DE_UE DE_UDIA
#define DE_OE DE_ODIA
#define DE_AE DE_ADIA
#define DE_LESS DE_LABK
#define DE_RING DE_DEG
#define DE_DQOT DE_DQUO
#define DE_PARA DE_SECT
#define DE_QST DE_QUES
#define DE_MORE DE_RABK
#define DE_SQ2 DE_SUP2
#define DE_SQ3 DE_SUP3

@ -14,100 +14,171 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEYMAP_ITALIAN
#define KEYMAP_ITALIAN
#pragma once
#include "keymap.h"
// normal characters
#define IT_A KC_A
#define IT_B KC_B
#define IT_C KC_C
#define IT_D KC_D
#define IT_E KC_E
#define IT_F KC_F
#define IT_G KC_G
#define IT_H KC_H
#define IT_I KC_I
#define IT_J KC_J
#define IT_K KC_K
#define IT_L KC_L
#define IT_M KC_M
#define IT_N KC_N
#define IT_O KC_O
#define IT_P KC_P
#define IT_Q KC_Q
#define IT_R KC_R
#define IT_S KC_S
#define IT_T KC_T
#define IT_U KC_U
#define IT_V KC_V
#define IT_W KC_W
#define IT_X KC_X
#define IT_Y KC_Y
#define IT_Z KC_Z
// clang-format off
#define IT_0 KC_0
#define IT_1 KC_1
#define IT_2 KC_2
#define IT_3 KC_3
#define IT_4 KC_4
#define IT_5 KC_5
#define IT_6 KC_6
#define IT_7 KC_7
#define IT_8 KC_8
#define IT_9 KC_9
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ \  1  2  3  4  5  6  7  8  9  0  ' │ ì │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │      Q  W  E  R  T  Y  U  I  O  P  è  + │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │       A  S  D  F  G  H  J  K  L  ò  à  ù     
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ <  Z  X  C  V  B  N  M  , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define IT_BSLS KC_GRV // (backslash)
#define IT_1 KC_1 // 1
#define IT_2 KC_2 // 2
#define IT_3 KC_3 // 3
#define IT_4 KC_4 // 4
#define IT_5 KC_5 // 5
#define IT_6 KC_6 // 6
#define IT_7 KC_7 // 7
#define IT_8 KC_8 // 8
#define IT_9 KC_9 // 9
#define IT_0 KC_0 // 0
#define IT_QUOT KC_MINS // '
#define IT_IGRV KC_EQL // ì
// Row 2
#define IT_Q KC_Q // Q
#define IT_W KC_W // W
#define IT_E KC_E // E
#define IT_R KC_R // R
#define IT_T KC_T // T
#define IT_Y KC_Y // Y
#define IT_U KC_U // U
#define IT_I KC_I // I
#define IT_O KC_O // O
#define IT_P KC_P // P
#define IT_EGRV KC_LBRC // è
#define IT_PLUS KC_RBRC // +
// Row 3
#define IT_A KC_A // A
#define IT_S KC_S // S
#define IT_D KC_D // D
#define IT_F KC_F // F
#define IT_G KC_G // G
#define IT_H KC_H // H
#define IT_J KC_J // J
#define IT_K KC_K // K
#define IT_L KC_L // L
#define IT_OGRV KC_SCLN // ò
#define IT_AGRV KC_QUOT // à
#define IT_UGRV KC_NUHS // ù
// Row 4
#define IT_LABK KC_NUBS // <
#define IT_Z KC_Z // Z
#define IT_X KC_X // X
#define IT_C KC_C // C
#define IT_B KC_B // B
#define IT_V KC_V // V
#define IT_N KC_N // N
#define IT_M KC_M // M
#define IT_COMM KC_COMM // ,
#define IT_DOT KC_DOT // .
#define IT_MINS KC_SLSH // -
#define IT_DOT KC_DOT
#define IT_COMM KC_COMM
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ | │ ! │ " │ £ │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ^ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │   │   │   │   │   │   │ é │ * │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │ ç │ ° │ § │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ > │   │   │   │   │   │   │   │ ; │ :  _           
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define IT_PIPE S(IT_BSLS) // |
#define IT_EXLM S(IT_1) // !
#define IT_DQUO S(IT_2) // "
#define IT_PND S(IT_3) // £
#define IT_DLR S(IT_4) // $
#define IT_PERC S(IT_5) // %
#define IT_AMPR S(IT_6) // &
#define IT_SLSH S(IT_7) // /
#define IT_LPRN S(IT_8) // (
#define IT_RPRN S(IT_9) // )
#define IT_EQL S(IT_0) // =
#define IT_QUES S(IT_QUOT) // ?
#define IT_CIRC S(IT_IGRV) // ^
// Row 2
#define IT_EACU S(IT_EGRV) // é
#define IT_ASTR S(IT_PLUS) // *
// Row 3
#define IT_CCED S(IT_OGRV) // ç
#define IT_DEG S(IT_AGRV) // °
#define IT_SECT S(IT_UGRV) // §
// Row 4
#define IT_RABK S(IT_LABK) // >
#define IT_COLN S(IT_DOT) // :
#define IT_SCLN S(IT_COMM) // ;
#define IT_UNDS S(IT_MINS) // _
#define IT_EACC KC_LBRC // è, é, [, {
#define IT_PLUS KC_RBRC // +, *, ], }
#define IT_OACC KC_SCLN // ò, ç, @,
#define IT_AACC KC_QUOT // à, °, #,
#define IT_UACC KC_BSLS // ù, §, ,
#define IT_IACC KC_EQL // ì, ^, ,
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │ @ │ # │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 2
#define IT_EURO ALGR(IT_E) // €
#define IT_LBRC ALGR(IT_EGRV) // [
#define IT_RBRC ALGR(IT_PLUS) // ]
// Row 3
#define IT_AT ALGR(IT_OGRV) // @
#define IT_HASH ALGR(IT_AGRV) // #
#define IT_APOS KC_MINS // ', ?, ,
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 2
#define IT_LCBR S(ALGR(IT_EGRV)) // {
#define IT_RCBR S(ALGR(IT_PLUS)) // }
#define IT_BKSL KC_GRAVE // backslash \, |
// DEPRECATED
#define IT_BKSL IT_BSLS
#define IT_QUOT IT_APOS
#define IT_IACC IT_IGRV
#define IT_EACC IT_EGRV
#define IT_OACC IT_OGRV
#define IT_AACC IT_AGRV
#define IT_UACC IT_UGRV
#define IT_LESS IT_LABK
#define IT_DQOT IT_DQUO
#define IT_STRL IT_PND
#define IT_QST IT_QUES
#define IT_CRC IT_CIRC
#define IT_MORE IT_RABK
#define IT_SHRP IT_HASH
#define IT_ACUT // accent acute ´ and grave `
#define IT_LESS KC_NUBS // < and > and |
#define IT_MINS KC_SLSH // - and _
// shifted characters
#define IT_DEGR LSFT(IT_AACC) // °
#define IT_EXLM LSFT(KC_1) // !
#define IT_DQOT LSFT(KC_2) // "
#define IT_STRL LSFT(KC_3) // £
#define IT_DLR LSFT(KC_4) // $
#define IT_PERC LSFT(KC_5) // %
#define IT_AMPR LSFT(KC_6) // &
#define IT_SLSH LSFT(KC_7) // /
#define IT_LPRN LSFT(KC_8) // (
#define IT_RPRN LSFT(KC_9) // )
#define IT_EQL LSFT(KC_0) // =
#define IT_QST LSFT(IT_APOS) // ?
#define IT_CRC LSFT(IT_IACC) // ^
#define IT_ASTR LSFT(IT_PLUS) // *
#define IT_MORE LSFT(IT_LESS) // >
#define IT_COLN LSFT(IT_DOT) // :
#define IT_SCLN LSFT(IT_COMM) // ;
#define IT_UNDS LSFT(IT_MINS) // _
// Alt Gr-ed characters
#define IT_LCBR ALGR(KC_7) // {
#define IT_LBRC ALGR(IT_EACC) // [
#define IT_RBRC ALGR(IT_PLUS) // ]
#define IT_RCBR ALGR(KC_0) // }
#define IT_AT ALGR(IT_OACC) // @
#define IT_EURO ALGR(KC_E) // €
#define IT_PIPE LSFT(IT_BSLS) // |
#define IT_SHRP ALGR(IT_AACC) // #
// Deprecated
#define IT_X_PLUS X_RBRACKET // #
#endif
#define IT_X_PLUS X_RBRACKET
#define IT_ACUT

@ -40,7 +40,7 @@ const uint8_t ascii_to_shift_lut[16] PROGMEM = {
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
};
const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
@ -60,7 +60,7 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
@ -80,7 +80,7 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// 0 1 2 3 4 5 6 7
DE_0, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7,
// 8 9 : ; < = > ?
DE_8, DE_9, DE_DOT, DE_COMM, DE_LESS, DE_0, DE_LESS, DE_SS,
DE_8, DE_9, DE_DOT, DE_COMM, DE_LABK, DE_0, DE_LABK, DE_SS,
// @ A B C D E F G
DE_Q, DE_A, DE_B, DE_C, DE_D, DE_E, DE_F, DE_G,
// H I J K L M N O
@ -96,5 +96,5 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// p q r s t u v w
DE_P, DE_Q, DE_R, DE_S, DE_T, DE_U, DE_V, DE_W,
// x y z { | } ~ DEL
DE_X, DE_Y, DE_Z, DE_7, DE_LESS, DE_0, DE_PLUS, KC_DEL
DE_X, DE_Y, DE_Z, DE_7, DE_LABK, DE_0, DE_PLUS, KC_DEL
};

@ -0,0 +1,100 @@
/* Copyright 2019
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Sendstring lookup tables for Italian layouts
#pragma once
#include "keymap_italian.h"
#include "quantum.h"
// clang-format off
const uint8_t ascii_to_shift_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0)
};
const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0)
};
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// NUL SOH STX ETX EOT ENQ ACK BEL
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// BS TAB LF VT FF CR SO SI
KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// CAN EM SUB ESC FS GS RS US
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, IT_1, IT_2, IT_AGRV, IT_4, IT_5, IT_6, IT_QUOT,
// ( ) * + , - . /
IT_8, IT_9, IT_PLUS, IT_PLUS, IT_COMM, IT_MINS, IT_DOT, IT_7,
// 0 1 2 3 4 5 6 7
IT_0, IT_1, IT_2, IT_3, IT_4, IT_5, IT_6, IT_7,
// 8 9 : ; < = > ?
IT_8, IT_9, IT_DOT, IT_COMM, IT_LABK, IT_0, IT_LABK, IT_QUOT,
// @ A B C D E F G
IT_OGRV, IT_A, IT_B, IT_C, IT_D, IT_E, IT_F, IT_G,
// H I J K L M N O
IT_H, IT_I, IT_J, IT_K, IT_L, IT_M, IT_N, IT_O,
// P Q R S T U V W
IT_P, IT_Q, IT_R, IT_S, IT_T, IT_U, IT_V, IT_W,
// X Y Z [ \ ] ^ _
IT_X, IT_Y, IT_Z, IT_EGRV, IT_BSLS, IT_PLUS, IT_IGRV, IT_MINS,
// ` a b c d e f g
XXXXXXX, IT_A, IT_B, IT_C, IT_D, IT_E, IT_F, IT_G,
// h i j k l m n o
IT_H, IT_I, IT_J, IT_K, IT_L, IT_M, IT_N, IT_O,
// p q r s t u v w
IT_P, IT_Q, IT_R, IT_S, IT_T, IT_U, IT_V, IT_W,
// x y z { | } ~ DEL
IT_X, IT_Y, IT_Z, IT_EGRV, IT_BSLS, IT_PLUS, XXXXXXX, KC_DEL
};