mqKeyInput.cpp (3860B)
1 #include "mqKeyInput.h" 2 3 #include <cpp-terminal/input.hpp> 4 5 #include "mqLib/buttons.h" 6 #include "mqLib/microq.h" 7 #include "mqLib/mqhardware.h" 8 9 #include "synthLib/midiTypes.h" 10 11 using Key = Term::Key; 12 using EncoderType = mqLib::Buttons::Encoders; 13 using ButtonType = mqLib::Buttons::ButtonType; 14 15 namespace mqConsoleLib 16 { 17 void KeyInput::processKey(int ch) 18 { 19 auto& mq = m_mq; 20 auto* hw = mq.getHardware(); 21 22 auto toggleButton = [&](const mqLib::Buttons::ButtonType _type) 23 { 24 mq.setButton(_type, mq.getButton(_type) ? false : true); 25 }; 26 27 auto encRotate = [&](mqLib::Buttons::Encoders _encoder, const int _amount) 28 { 29 mq.rotateEncoder(_encoder, _amount); 30 }; 31 32 { 33 switch (ch) 34 { 35 case '1': toggleButton(ButtonType::Inst1); break; 36 case '2': toggleButton(ButtonType::Inst2); break; 37 case '3': toggleButton(ButtonType::Inst3); break; 38 case '4': toggleButton(ButtonType::Inst4); break; 39 case Key::ARROW_DOWN: toggleButton(ButtonType::Down); break; 40 case Key::ARROW_LEFT: toggleButton(ButtonType::Left); break; 41 case Key::ARROW_RIGHT: toggleButton(ButtonType::Right); break; 42 case Key::ARROW_UP: toggleButton(ButtonType::Up); break; 43 case 'g': toggleButton(ButtonType::Global); break; 44 case 'm': toggleButton(ButtonType::Multi); break; 45 case 'e': toggleButton(ButtonType::Edit); break; 46 case 's': toggleButton(ButtonType::Sound); break; 47 case 'S': toggleButton(ButtonType::Shift); break; 48 case 'q': toggleButton(ButtonType::Power); break; 49 case 'M': toggleButton(ButtonType::Multimode); break; 50 case 'P': toggleButton(ButtonType::Peek); break; 51 case 'p': toggleButton(ButtonType::Play); break; 52 53 case Key::F1: encRotate(EncoderType::LcdLeft, -1); break; 54 case Key::F2: encRotate(EncoderType::LcdLeft, 1); break; 55 case Key::F3: encRotate(EncoderType::LcdRight, -1); break; 56 case Key::F4: encRotate(EncoderType::LcdRight, 1); break; 57 case '5': encRotate(EncoderType::Master, -1); break; 58 case '6': encRotate(EncoderType::Master, 1); break; 59 case Key::F5: encRotate(EncoderType::Matrix1, -1); break; 60 case Key::F6: encRotate(EncoderType::Matrix1, 1); break; 61 case Key::F7: encRotate(EncoderType::Matrix2, -1); break; 62 case Key::F8: encRotate(EncoderType::Matrix2, 1); break; 63 case Key::F9: encRotate(EncoderType::Matrix3, -1); break; 64 case Key::F10: encRotate(EncoderType::Matrix3, 1); break; 65 case Key::F11: encRotate(EncoderType::Matrix4, -1); break; 66 case Key::F12: encRotate(EncoderType::Matrix4, 1); break; 67 case '7': 68 // Midi Note On 69 mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_NOTEON, synthLib::Note_C3, 0x7f}); 70 break; 71 case '8': 72 // Midi Note Off 73 mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_NOTEOFF, synthLib::Note_C3, 0x7f}); 74 break; 75 case '9': 76 // Modwheel Max 77 mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_CONTROLCHANGE, synthLib::MC_MODULATION, 0x7f}); 78 break; 79 case '0': 80 // Modwheel Min 81 mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_CONTROLCHANGE, synthLib::MC_MODULATION, 0x0}); 82 break; 83 case '!': 84 hw->getDSP(0).dumpPMem("dspA_dump_P_" + std::to_string(hw->getUcCycles())); 85 if constexpr (mqLib::g_useVoiceExpansion) 86 { 87 hw->getDSP(1).dumpPMem("dspB_dump_P_" + std::to_string(hw->getUcCycles())); 88 hw->getDSP(2).dumpPMem("dspC_dump_P_" + std::to_string(hw->getUcCycles())); 89 } 90 break; 91 case '&': 92 hw->getDSP().dumpXYMem("dsp_dump_mem_" + std::to_string(hw->getUcCycles()) + "_"); 93 break; 94 case '"': 95 hw->getUC().dumpMemory("mc_dump_mem"); 96 break; 97 case '$': 98 hw->getUC().dumpROM("rom_runtime"); 99 break; 100 default: 101 break; 102 } 103 } 104 } 105 }