Skip to content

Commit 693d274

Browse files
committed
buttons: add a new mmc play/stop message type
1 parent 962462c commit 693d274

4 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/firmware/application/io/buttons/buttons.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ void Buttons::sendMessage(size_t index, bool state, Descriptor& descriptor)
256256
case messageType_t::MMC_STOP:
257257
case messageType_t::MMC_PAUSE:
258258
case messageType_t::MMC_RECORD:
259+
case messageType_t::MMC_PLAY_STOP:
259260
break;
260261

261262
case messageType_t::PROGRAM_CHANGE:
@@ -470,6 +471,12 @@ void Buttons::sendMessage(size_t index, bool state, Descriptor& descriptor)
470471
}
471472
break;
472473

474+
case messageType_t::MMC_PLAY_STOP:
475+
{
476+
descriptor.event.message = midi::messageType_t::MMC_STOP;
477+
}
478+
break;
479+
473480
default:
474481
{
475482
send = false;
@@ -584,6 +591,7 @@ void Buttons::fillDescriptor(size_t index, Descriptor& descriptor)
584591
break;
585592

586593
case messageType_t::MMC_RECORD:
594+
case messageType_t::MMC_PLAY_STOP:
587595
{
588596
descriptor.type = type_t::LATCHING;
589597
}

src/firmware/application/io/buttons/buttons.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ namespace io::buttons
9494
midi::messageType_t::INVALID, // PROGRAM_CHANGE_OFFSET_DEC
9595
midi::messageType_t::INVALID, // BPM_INC
9696
midi::messageType_t::INVALID, // BPM_DEC
97+
midi::messageType_t::MMC_PLAY, // MMC_PLAY_STOP - modified to stop when needed
9798
};
9899

99100
Hwa& _hwa;

src/firmware/application/io/buttons/common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ namespace io::buttons
6767
PROGRAM_CHANGE_OFFSET_DEC,
6868
BPM_INC,
6969
BPM_DEC,
70+
MMC_PLAY_STOP,
7071
AMOUNT
7172
};
7273
} // namespace io::buttons

tests/src/io/buttons/test.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,4 +707,41 @@ TEST_F(ButtonsTest, PresetChange)
707707
ASSERT_EQ(0, _listener._event.size());
708708
}
709709

710+
TEST_F(ButtonsTest, MMCStartStop)
711+
{
712+
if (!buttons::Collection::SIZE(buttons::GROUP_DIGITAL_INPUTS))
713+
{
714+
return;
715+
}
716+
717+
MidiDispatcher.listen(messaging::eventType_t::SYSTEM,
718+
[this](const messaging::Event& dispatchMessage)
719+
{
720+
_listener.messageListener(dispatchMessage);
721+
});
722+
723+
// configure one button to MMC_PLAY_STOP message type
724+
static constexpr size_t BUTTON_INDEX = 0;
725+
726+
ASSERT_TRUE(_buttons._database.update(database::Config::Section::button_t::MESSAGE_TYPE, BUTTON_INDEX, buttons::messageType_t::MMC_PLAY_STOP));
727+
_buttons._instance.reset(BUTTON_INDEX);
728+
729+
// simulate button press
730+
stateChangeRegisterSingle(BUTTON_INDEX, true);
731+
732+
ASSERT_EQ(1, _listener._event.size());
733+
ASSERT_EQ(midi::messageType_t::MMC_PLAY, _listener._event.at(0).message);
734+
735+
// verify that no new events are generated on button release
736+
stateChangeRegisterSingle(BUTTON_INDEX, false);
737+
ASSERT_EQ(0, _listener._event.size());
738+
739+
// simulate a new button press
740+
stateChangeRegisterSingle(BUTTON_INDEX, true);
741+
742+
// the message should be MMC_STOP now
743+
ASSERT_EQ(1, _listener._event.size());
744+
ASSERT_EQ(midi::messageType_t::MMC_STOP, _listener._event.at(0).message);
745+
}
746+
710747
#endif

0 commit comments

Comments
 (0)