#include "keypad_funcs.h" std::optional ApplyNumericCommand(char command, char state) { switch (command) { case '<': switch (state) { case '9': return '8'; case '6': return '5'; case '3': return '2'; case 'A': return '0'; case '8': return '7'; case '5': return '4'; case '2': return '1'; default: return std::nullopt; } case '>': switch (state) { case '7': return '8'; case '4': return '5'; case '1': return '2'; case '8': return '9'; case '5': return '6'; case '2': return '3'; case '0': return 'A'; default: return std::nullopt; } case '^': switch (state) { case '0': return '2'; case 'A': return '3'; case '1': return '4'; case '2': return '5'; case '3': return '6'; case '4': return '7'; case '5': return '8'; case '6': return '9'; default: return std::nullopt; } case 'v': switch (state) { case '7': return '4'; case '8': return '5'; case '9': return '6'; case '4': return '1'; case '5': return '2'; case '6': return '3'; case '2': return '0'; case '3': return 'A'; } } return std::nullopt; } std::optional ApplyDirectionalCommand(char command, char state) { switch (command) { case '<': switch (state) { case 'A': return '^'; case '>': return 'v'; case 'v': return '<'; default: return std::nullopt; } case '>': switch (state) { case '<': return 'v'; case '^': return 'A'; case 'v': return '>'; default: return std::nullopt; } case '^': switch (state) { case 'v': return '^'; case '>': return 'A'; default: return std::nullopt; } case 'v': switch (state) { case '^': return 'v'; case 'A': return '>'; default: return std::nullopt; } } return std::nullopt; }