Implement shift(), encode() and index converter
This commit is contained in:
parent
4536cebb65
commit
adf7487ad0
65
code.c.ino
65
code.c.ino
|
@ -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())
|
||||
{
|
||||
if (!keyboard.available())
|
||||
return;
|
||||
|
||||
const uint16_t key = keyboard.read();
|
||||
if (key > 0)
|
||||
{
|
||||
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…
Reference in New Issue