1
0
Fork 0

Implement shift(), encode() and index converter

master
NaiJi ✨ 2 years ago
parent 4536cebb65
commit adf7487ad0

@ -6,6 +6,54 @@
PS2KeyAdvanced keyboard;
// Сконвертировать HEX значение клавиши
// в её алфавитный индекс;
//
// возвращает индекс буквы
size_t toKeyIndex(const String& value)
{
size_t index = -1;
for (size_t i = 0; i < ALPHABET_SIZE; ++i)
{
if (key_values[i] == value)
{
index = i;
break;
}
}
return index;
}
// Взять текущий сдвиг в алфавите.
// Считается суммарно по всем дискам в положении
// на момент вызова;
//
// возвращает текущий индекс с применением сдвига
size_t shift(size_t index)
{
for (size_t i = 0; i < WHEELS_AMOUNT; ++i)
{
index += key_shifts[i];
}
return index % ALPHABET_SIZE;
}
// Зашифровать символ из алфавита
// по алгоритму энигмы;
//
// возвращает зашифрованный символ для вывода
// на экран
size_t encode(size_t index)
{
// тут должно быть короче конвертирование по плагборду
const size_t new_index = shift(index);
// и вот тут тоже должноб ыть конвертирование по плагборду, ща
}
/////////////////////////////////////////////////////
void setup()
{
keyboard.begin(DATAPIN, IRQPIN);
@ -14,12 +62,17 @@ void setup()
void loop()
{
if (keyboard.available())
{
const uint16_t key = keyboard.read();
if (key > 0)
{
const String value = String(key, HEX);
}
}
if (!keyboard.available())
return;
const uint16_t key = keyboard.read();
if (key <= 0)
return;
const String value = String(key, HEX);
const size_t index = toKeyIndex(value);
if (index == -1)
return;
const size_t encoded_index = encode(index);
}

@ -1,5 +1,8 @@
#define ALPHABET_SIZE 26
#define WHEELS_AMOUNT 3
// Латинский алфавит в HEX представлении
const String key_values[26] =
const String key_values[ALPHABET_SIZE] =
{
"51", // Code51 - q
"57", // Code57 - w
@ -29,14 +32,14 @@ const String key_values[26] =
"4D" // Code4D - m
};
// Сдвиг в алфавите для каждого из трёх "дисков".
// Сдвиг в алфавите для каждого из "дисков".
// Обязан быть в отрезке [0; 25], так как полный круг
// возвращает значение обратно в 0.
// Таким образом, при конфигурации { 1, 2, 5 } и
// нажатой ' d ' сначала произойдёт сдвиг на 1, ' d '
// станет ' f ', потом на 2, ' f ' станет ' h ',
// в конце ещё сдвиг на 5 и ' h ' станет ' x '.
const size_t key_shifts[3] =
const size_t key_shifts[WHEELS_AMOUNT] =
{
1,
2,

Loading…
Cancel
Save