Implement shift(), encode() and index converter

This commit is contained in:
NaiJi ✨ 2022-03-17 19:08:49 +03:00
parent 4536cebb65
commit adf7487ad0
2 changed files with 67 additions and 11 deletions

View File

@ -6,6 +6,54 @@
PS2KeyAdvanced keyboard; 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() void setup()
{ {
keyboard.begin(DATAPIN, IRQPIN); keyboard.begin(DATAPIN, IRQPIN);
@ -14,12 +62,17 @@ void setup()
void loop() void loop()
{ {
if (keyboard.available()) if (!keyboard.available())
{ return;
const uint16_t key = keyboard.read(); const uint16_t key = keyboard.read();
if (key > 0) if (key <= 0)
{ return;
const String value = String(key, HEX); const String value = String(key, HEX);
} const size_t index = toKeyIndex(value);
} if (index == -1)
return;
const size_t encoded_index = encode(index);
} }

View File

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