keypad_funcs.cc 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #include "keypad_funcs.h"
  2. std::optional<char> ApplyNumericCommand(char command, char state) {
  3. switch (command) {
  4. case '<':
  5. switch (state) {
  6. case '9':
  7. return '8';
  8. case '6':
  9. return '5';
  10. case '3':
  11. return '2';
  12. case 'A':
  13. return '0';
  14. case '8':
  15. return '7';
  16. case '5':
  17. return '4';
  18. case '2':
  19. return '1';
  20. default:
  21. return std::nullopt;
  22. }
  23. case '>':
  24. switch (state) {
  25. case '7':
  26. return '8';
  27. case '4':
  28. return '5';
  29. case '1':
  30. return '2';
  31. case '8':
  32. return '9';
  33. case '5':
  34. return '6';
  35. case '2':
  36. return '3';
  37. case '0':
  38. return 'A';
  39. default:
  40. return std::nullopt;
  41. }
  42. case '^':
  43. switch (state) {
  44. case '0':
  45. return '2';
  46. case 'A':
  47. return '3';
  48. case '1':
  49. return '4';
  50. case '2':
  51. return '5';
  52. case '3':
  53. return '6';
  54. case '4':
  55. return '7';
  56. case '5':
  57. return '8';
  58. case '6':
  59. return '9';
  60. default:
  61. return std::nullopt;
  62. }
  63. case 'v':
  64. switch (state) {
  65. case '7':
  66. return '4';
  67. case '8':
  68. return '5';
  69. case '9':
  70. return '6';
  71. case '4':
  72. return '1';
  73. case '5':
  74. return '2';
  75. case '6':
  76. return '3';
  77. case '2':
  78. return '0';
  79. case '3':
  80. return 'A';
  81. }
  82. }
  83. return std::nullopt;
  84. }
  85. std::optional<char> ApplyDirectionalCommand(char command, char state) {
  86. switch (command) {
  87. case '<':
  88. switch (state) {
  89. case 'A':
  90. return '^';
  91. case '>':
  92. return 'v';
  93. case 'v':
  94. return '<';
  95. default:
  96. return std::nullopt;
  97. }
  98. case '>':
  99. switch (state) {
  100. case '<':
  101. return 'v';
  102. case '^':
  103. return 'A';
  104. case 'v':
  105. return '>';
  106. default:
  107. return std::nullopt;
  108. }
  109. case '^':
  110. switch (state) {
  111. case 'v':
  112. return '^';
  113. case '>':
  114. return 'A';
  115. default:
  116. return std::nullopt;
  117. }
  118. case 'v':
  119. switch (state) {
  120. case '^':
  121. return 'v';
  122. case 'A':
  123. return '>';
  124. default:
  125. return std::nullopt;
  126. }
  127. }
  128. return std::nullopt;
  129. }