[Keymap] Sweet16 as a switch tester (#4822)
* Sweet16 as a switch tester * pragma once * QMK_KEYBOARD_H instead of sweet16.hdaktil_manuform
parent
9c136e1168
commit
81ad6cac7e
|
@ -0,0 +1,31 @@
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "switches.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
LAYOUT_ortho_4x4(
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mechswitch switches[MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
{CHERRY_MX_BLUE, CHERRY_MX_RED, CHERRY_MX_BLACK, CHERRY_MX_BROWN},
|
||||||
|
{GATERON_BLUE, GATERON_RED, GATERON_BLACK, GATERON_BROWN},
|
||||||
|
{KAILH_BLUE, KAILH_RED, KAILH_BLACK, KAILH_BROWN},
|
||||||
|
{HAKO_CLEAR, HAKO_TRUE, HAKO_VIOLET, HAKO_ROYAL_TRUE}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
uint8_t col = record->event.key.col;
|
||||||
|
uint8_t row = record->event.key.row;
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
char name[MAX_SWITCH_NAME_LENGTH];
|
||||||
|
switch_name(switches[row][col], name);
|
||||||
|
send_string(name);
|
||||||
|
SEND_STRING("\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Sweet16 as a switch tester
|
||||||
|
|
||||||
|
This keymap uses the Sweet16 as a switch tester. The functionality outputs the switch name of whatever key the user pressed.
|
||||||
|
|
||||||
|
the `switches` two-dimensional (4x4) array contains the switches attached to the macropad. The switches supported are defined as macros in the `switches.h` header file.
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
RGBLIGHT_ENABLE = no
|
||||||
|
|
||||||
|
SRC += switches.c
|
|
@ -0,0 +1,99 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "switches.h"
|
||||||
|
|
||||||
|
static const char *BRAND_NAMES[] = {
|
||||||
|
"Kailh",
|
||||||
|
"Kailh Low Profile Choc",
|
||||||
|
"Gateron",
|
||||||
|
"Cherry MX",
|
||||||
|
"Cherry ML",
|
||||||
|
"Outemu",
|
||||||
|
"Greetech",
|
||||||
|
"Varmilo",
|
||||||
|
"MOD",
|
||||||
|
"Hako"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *COLOR_NAMES[] = {
|
||||||
|
"",
|
||||||
|
"White",
|
||||||
|
"Black",
|
||||||
|
"Blue",
|
||||||
|
"Red",
|
||||||
|
"Yellow",
|
||||||
|
"Brown",
|
||||||
|
"Green",
|
||||||
|
"Clear",
|
||||||
|
"Silver",
|
||||||
|
"Nature White",
|
||||||
|
"Grey",
|
||||||
|
"Jade",
|
||||||
|
"Navy",
|
||||||
|
"Burnt Orange",
|
||||||
|
"Pale Blue",
|
||||||
|
"Dark Yellow",
|
||||||
|
"Gold",
|
||||||
|
"Chocolate White",
|
||||||
|
"Burgundy",
|
||||||
|
"Purple",
|
||||||
|
"Light Green",
|
||||||
|
"True",
|
||||||
|
"Berry",
|
||||||
|
"Plum",
|
||||||
|
"Sage",
|
||||||
|
"Violet",
|
||||||
|
"L",
|
||||||
|
"M",
|
||||||
|
"H",
|
||||||
|
"SH"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *VARIANT_NAMES[] = {
|
||||||
|
"",
|
||||||
|
"BOX",
|
||||||
|
"BOX Thick",
|
||||||
|
"BOX Heavy",
|
||||||
|
"Silent",
|
||||||
|
"Tactile",
|
||||||
|
"Linear",
|
||||||
|
"Speed",
|
||||||
|
"Speed Heavy",
|
||||||
|
"Speed Thick Click",
|
||||||
|
"Pro",
|
||||||
|
"Pro Heavy",
|
||||||
|
"Royal",
|
||||||
|
"Thick Click",
|
||||||
|
"Heavy"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *brand_name(struct mechswitch ms) {
|
||||||
|
return BRAND_NAMES[ms.brand - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *variant_name(struct mechswitch ms) {
|
||||||
|
return VARIANT_NAMES[ms.variant];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *color_name(struct mechswitch ms) {
|
||||||
|
return COLOR_NAMES[ms.color];
|
||||||
|
}
|
||||||
|
|
||||||
|
void switch_name(struct mechswitch ms, char *buf) {
|
||||||
|
const char *v_name = variant_name(ms);
|
||||||
|
const char *c_name = color_name(ms);
|
||||||
|
|
||||||
|
snprintf(buf, MAX_SWITCH_NAME_LENGTH, "%s", brand_name(ms));
|
||||||
|
strncat(buf, " ", MAX_SWITCH_NAME_LENGTH - strlen(buf));
|
||||||
|
if (strlen(v_name) > 0) {
|
||||||
|
strncat(buf, v_name, MAX_SWITCH_NAME_LENGTH - strlen(buf));
|
||||||
|
strncat(buf, " ", MAX_SWITCH_NAME_LENGTH - strlen(buf));
|
||||||
|
}
|
||||||
|
if (strlen(c_name) > 0) {
|
||||||
|
strncat(buf, c_name, MAX_SWITCH_NAME_LENGTH - strlen(buf));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int bitfieldtoi(struct mechswitch ms) {
|
||||||
|
return ((ms.brand << 9) | (ms.variant << 5) | ms.color);
|
||||||
|
}
|
|
@ -0,0 +1,189 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct mechswitch
|
||||||
|
{
|
||||||
|
unsigned int brand: 4;
|
||||||
|
unsigned int variant: 4;
|
||||||
|
unsigned int color: 5;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MAX_SWITCH_NAME_LENGTH 256
|
||||||
|
|
||||||
|
#define BRAND_KAILH 1
|
||||||
|
#define BRAND_KAILH_LOW 2
|
||||||
|
#define BRAND_GATERON 3
|
||||||
|
#define BRAND_CHERRY_MX 4
|
||||||
|
#define BRAND_CHERRY_ML 5
|
||||||
|
#define BRAND_OUTEMU 6
|
||||||
|
#define BRAND_GREETECH 7
|
||||||
|
#define BRAND_VARMILO 8
|
||||||
|
#define BRAND_MOD 9
|
||||||
|
#define BRAND_HAKO 10
|
||||||
|
|
||||||
|
#define COLOR_NO 0
|
||||||
|
#define COLOR_WHITE 1
|
||||||
|
#define COLOR_BLACK 2
|
||||||
|
#define COLOR_BLUE 3
|
||||||
|
#define COLOR_RED 4
|
||||||
|
#define COLOR_YELLOW 5
|
||||||
|
#define COLOR_BROWN 6
|
||||||
|
#define COLOR_GREEN 7
|
||||||
|
#define COLOR_CLEAR 8
|
||||||
|
#define COLOR_SILVER 9
|
||||||
|
#define COLOR_NATURE_WHITE 10
|
||||||
|
#define COLOR_GREY 11
|
||||||
|
#define COLOR_JADE 12
|
||||||
|
#define COLOR_NAVY 13
|
||||||
|
#define COLOR_BURNT_ORANGE 14
|
||||||
|
#define COLOR_PALE_BLUE 15
|
||||||
|
#define COLOR_DARK_YELLOW 16
|
||||||
|
#define COLOR_GOLD 17
|
||||||
|
#define COLOR_CHOCOLATE_WHITE 18
|
||||||
|
#define COLOR_BURGUNDY 19
|
||||||
|
#define COLOR_PURPLE 20
|
||||||
|
#define COLOR_LIGHT_GREEN 21
|
||||||
|
#define COLOR_TRUE 22
|
||||||
|
#define COLOR_BERRY 23
|
||||||
|
#define COLOR_PLUM 24
|
||||||
|
#define COLOR_SAGE 25
|
||||||
|
#define COLOR_VIOLET 26
|
||||||
|
#define COLOR_L 27
|
||||||
|
#define COLOR_M 28
|
||||||
|
#define COLOR_H 29
|
||||||
|
#define COLOR_SH 30
|
||||||
|
|
||||||
|
#define VARIANT_NO 0
|
||||||
|
#define VARIANT_BOX 1
|
||||||
|
#define VARIANT_BOX_THICK 2
|
||||||
|
#define VARIANT_BOX_HEAVY 3
|
||||||
|
#define VARIANT_SILENT 4
|
||||||
|
#define VARIANT_TACTILE 5
|
||||||
|
#define VARIANT_LINEAR 6
|
||||||
|
#define VARIANT_SPEED 7
|
||||||
|
#define VARIANT_SPEED_HEAVY 8
|
||||||
|
#define VARIANT_SPEED_CLICK_THICK 9
|
||||||
|
#define VARIANT_PRO 10
|
||||||
|
#define VARIANT_PRO_HEAVY 11
|
||||||
|
#define VARIANT_ROYAL 12
|
||||||
|
#define VARIANT_CLICK_THICK 13
|
||||||
|
|
||||||
|
#define CHERRY_MX_BLUE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BLUE}
|
||||||
|
#define CHERRY_MX_RED {BRAND_CHERRY_MX, VARIANT_NO, COLOR_RED}
|
||||||
|
#define CHERRY_MX_BROWN {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BROWN}
|
||||||
|
#define CHERRY_MX_BLACK {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BLACK}
|
||||||
|
#define CHERRY_MX_GREEN {BRAND_CHERRY_MX, VARIANT_NO, COLOR_GREEN}
|
||||||
|
#define CHERRY_MX_CLEAR {BRAND_CHERRY_MX, VARIANT_NO, COLOR_CLEAR}
|
||||||
|
#define CHERRY_MX_WHITE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_WHITE}
|
||||||
|
#define CHERRY_MX_SILVER {BRAND_CHERRY_MX, VARIANT_NO, COLOR_SILVER}
|
||||||
|
#define CHERRY_MX_NATURE_WHITE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_NATURE_WHITE}
|
||||||
|
#define CHERRY_MX_SILENT_BLACK {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_BLACK}
|
||||||
|
#define CHERRY_MX_SILENT_RED {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_RED}
|
||||||
|
#define CHERRY_MX_TACTILE_BLACK {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_GREY}
|
||||||
|
#define CHERRY_MX_LINEAR_BLACK {BRAND_CHERRY_MX, VARIANT_LINEAR, COLOR_GREY}
|
||||||
|
|
||||||
|
#define CHERRY_ML {BRAND_CHERRY_ML, VARIANT_NO, COLOR_NO}
|
||||||
|
|
||||||
|
#define GATERON_BLUE {BRAND_GATERON, VARIANT_NO, COLOR_BLUE}
|
||||||
|
#define GATERON_BROWN {BRAND_GATERON, VARIANT_NO, COLOR_BROWN}
|
||||||
|
#define GATERON_BLACK {BRAND_GATERON, VARIANT_NO, COLOR_BLACK}
|
||||||
|
#define GATERON_RED {BRAND_GATERON, VARIANT_NO, COLOR_RED}
|
||||||
|
#define GATERON_CLEAR {BRAND_GATERON, VARIANT_NO, COLOR_CLEAR}
|
||||||
|
#define GATERON_GREEN {BRAND_GATERON, VARIANT_NO, COLOR_GREEN}
|
||||||
|
#define GATERON_YELLOW {BRAND_GATERON, VARIANT_NO, COLOR_YELLOW}
|
||||||
|
|
||||||
|
#define GATERON_SILENT_CLEAR {BRAND_GATERON, VARIANT_SILENT, COLOR_CLEAR}
|
||||||
|
#define GATERON_SILENT_RED {BRAND_GATERON, VARIANT_SILENT, COLOR_RED}
|
||||||
|
#define GATERON_SILENT_YELLOW {BRAND_GATERON, VARIANT_SILENT, COLOR_YELLOW}
|
||||||
|
#define GATERON_SILENT_BLACK {BRAND_GATERON, VARIANT_SILENT, COLOR_BLACK}
|
||||||
|
#define GATERON_SILENT_BROWN {BRAND_GATERON, VARIANT_SILENT, COLOR_BROWN}
|
||||||
|
|
||||||
|
#define GREETECH_BLUE {BRAND_GREETECH, VARIANT_NO, COLOR_BLUE}
|
||||||
|
#define GREETECH_BROWN {BRAND_GREETECH, VARIANT_NO, COLOR_BROWN}
|
||||||
|
#define GREETECH_BLACK {BRAND_GREETECH, VARIANT_NO, COLOR_BLACK}
|
||||||
|
#define GREETECH_RED {BRAND_GREETECH, VARIANT_NO, COLOR_RED}
|
||||||
|
|
||||||
|
#define OUTEMU_BLUE {BRAND_OUTEMU, VARIANT_NO, COLOR_BLUE}
|
||||||
|
#define OUTEMU_BROWN {BRAND_OUTEMU, VARIANT_NO, COLOR_BROWN}
|
||||||
|
#define OUTEMU_BLACK {BRAND_OUTEMU, VARIANT_NO, COLOR_BLACK}
|
||||||
|
#define OUTEMU_RED {BRAND_OUTEMU, VARIANT_NO, COLOR_RED}
|
||||||
|
|
||||||
|
#define KAILH_BLUE {BRAND_KAILH, VARIANT_NO, COLOR_BLUE}
|
||||||
|
#define KAILH_BROWN {BRAND_KAILH, VARIANT_NO, COLOR_BROWN}
|
||||||
|
#define KAILH_BLACK {BRAND_KAILH, VARIANT_NO, COLOR_BLACK}
|
||||||
|
#define KAILH_RED {BRAND_KAILH, VARIANT_NO, COLOR_RED}
|
||||||
|
#define KAILH_GREEN {BRAND_KAILH, VARIANT_NO, COLOR_GREEN}
|
||||||
|
|
||||||
|
#define KAILH_BOX_WHITE {BRAND_KAILH, VARIANT_BOX, COLOR_WHITE}
|
||||||
|
#define KAILH_BOX_RED {BRAND_KAILH, VARIANT_BOX, COLOR_RED}
|
||||||
|
#define KAILH_BOX_BLACK {BRAND_KAILH, VARIANT_BOX, COLOR_BLACK}
|
||||||
|
#define KAILH_BOX_BROWN {BRAND_KAILH, VARIANT_BOX, COLOR_BROWN}
|
||||||
|
#define KAILH_BOX_ROYAL {BRAND_KAILH, VARIANT_BOX, COLOR_ROYAL}
|
||||||
|
|
||||||
|
#define KAILH_BOX_THICK_JADE {BRAND_KAILH, VARIANT_BOX_THICK, COLOR_JADE}
|
||||||
|
#define KAILH_BOX_THICK_NAVY {BRAND_KAILH, VARIANT_BOX_THICK, COLOR_NAVY}
|
||||||
|
#define KAILH_BOX_HEAVY_BURNT_ORANGE {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_BURNT_ORANGE}
|
||||||
|
#define KAILH_BOX_HEAVY_PALE_BLUE {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_PALE_BLUE}
|
||||||
|
#define KAILH_BOX_HEAVY_DARK_YELLOW {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_DARK_YELLOW}
|
||||||
|
|
||||||
|
#define KAILH_SPEED_BRONZE {BRAND_KAILH, VARIANT_SPEED, COLOR_BRONZE}
|
||||||
|
#define KAILH_SPEED_COPPER {BRAND_KAILH, VARIANT_SPEED, COLOR_COPPER}
|
||||||
|
#define KAILH_SPEED_GOLD {BRAND_KAILH, VARIANT_SPEED, COLOR_GOLD}
|
||||||
|
#define KAILH_SPEED_SILVER {BRAND_KAILH, VARIANT_SPEED, COLOR_SILVER}
|
||||||
|
|
||||||
|
#define KAILH_SPEED_HEAVY_BURNT_ORANGE {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_BURNT_ORANGE}
|
||||||
|
#define KAILH_SPEED_HEAVY_PALE_BLUE {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_PALE_BLUE}
|
||||||
|
#define KAILH_SPEED_HEAVY_DARK_YELLOW {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_DARK_YELLOW}
|
||||||
|
|
||||||
|
#define KAILH_SPEED_THICK_CLICK_NAVY {BRAND_KAILH, VARIANT_SPEED_CLICK_THICK, COLOR_NAVY}
|
||||||
|
|
||||||
|
#define KAILH_PRO_BURGUNDY {BRAND_KAILH, VARIANT_PRO, COLOR_BURGUNDY}
|
||||||
|
#define KAILH_PRO_PURPLE {BRAND_KAILH, VARIANT_PRO, COLOR_PURPLE}
|
||||||
|
#define KAILH_PRO_LIGHT_GREEN {BRAND_KAILH, VARIANT_PRO, COLOR_LIGHT_GREEN}
|
||||||
|
|
||||||
|
#define KAILH_PRO_HEAVY_BERRY {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_BERRY}
|
||||||
|
#define KAILH_PRO_HEAVY_PLUM {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_PLUM}
|
||||||
|
#define KAILH_PRO_GEAVY_SAGE {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_SAGE}
|
||||||
|
|
||||||
|
#define KAILH_LOW_WHITE {BRAND_KAILH_LOW, VARIANT_NO, COLOR_WHITE}
|
||||||
|
#define KAILH_LOW_BROWN {BRAND_KAILH_LOW, VARIANT_NO, COLOR_BROWN}
|
||||||
|
#define KAILH_LOW_RED {BRAND_KAILH_LOW, VARIANT_NO, COLOR_RED}
|
||||||
|
#define KAILH_LOW_CHOCOLATE_WHITE {BRAND_KAILH_LOW, VARIANT_NO, COLOR_CHOCOLATE_WHITE}
|
||||||
|
#define KAILH_LOW_THICK_CLICK_NAVY {BRAND_KAILH_LOW, VARIANT_THICK_CLICK, COLOR_NAVY}
|
||||||
|
#define KAILH_LOW_THICK_CLICK_JADE {BRAND_KAILH_LOW, VARIANT_THICK_CLICK, COLOR_JADE}
|
||||||
|
#define KAILH_LOW_HEAVY_DARK_YELLOW {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_DARK_YELLOW}
|
||||||
|
#define KAILH_LOW_HEAVY_BURNT_ORANGE {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_BURNT_ORANGE}
|
||||||
|
#define KAILH_LOW_HEAVY_PALE_BLUE {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_PALE_BLUE}
|
||||||
|
|
||||||
|
#define HAKO_ROYAL_CLEAR {BRAND_HAKO, VARIANT_ROYAL, COLOR_CLEAR}
|
||||||
|
#define HAKO_ROYAL_TRUE {BRAND_HAKO, VARIANT_ROYAL, COLOR_TRUE}
|
||||||
|
|
||||||
|
#define HAKO_CLEAR {BRAND_HAKO, VARIANT_NO, COLOR_CLEAR}
|
||||||
|
#define HAKO_TRUE {BRAND_HAKO, VARIANT_NO, COLOR_TRUE}
|
||||||
|
#define HAKO_VIOLET {BRAND_HAKO, VARIANT_NO, COLOR_VIOLET}
|
||||||
|
|
||||||
|
#define MOD_L_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_L}
|
||||||
|
#define MOD_M_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_M}
|
||||||
|
#define MOD_H_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_H}
|
||||||
|
#define MOD_SH_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_SH}
|
||||||
|
|
||||||
|
#define MOD_L_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_L}
|
||||||
|
#define MOD_M_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_M}
|
||||||
|
#define MOD_H_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_H}
|
||||||
|
|
||||||
|
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
|
||||||
|
#define BYTE_TO_BINARY(byte) \
|
||||||
|
(byte & 0x80 ? '1' : '0'), \
|
||||||
|
(byte & 0x40 ? '1' : '0'), \
|
||||||
|
(byte & 0x20 ? '1' : '0'), \
|
||||||
|
(byte & 0x10 ? '1' : '0'), \
|
||||||
|
(byte & 0x08 ? '1' : '0'), \
|
||||||
|
(byte & 0x04 ? '1' : '0'), \
|
||||||
|
(byte & 0x02 ? '1' : '0'), \
|
||||||
|
(byte & 0x01 ? '1' : '0')
|
||||||
|
|
||||||
|
|
||||||
|
const char *brand_name(struct mechswitch ms);
|
||||||
|
const char *variant_name(struct mechswitch ms);
|
||||||
|
const char *color_name(struct mechswitch ms);
|
||||||
|
void switch_name(struct mechswitch ms, char *buf);
|
||||||
|
int bitfieldtoi(struct mechswitch ms);
|
Loading…
Reference in New Issue