Skip to content

Commit

Permalink
fix: add missing target_muid to make_invalidate_muid_message and
Browse files Browse the repository at this point in the history
invalidate_muid_view
  • Loading branch information
fdetro committed Dec 12, 2023
1 parent 7b746c7 commit 0b005d6
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 6 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# v1.4.0

* fix: add missing `target_muid` to `make_invalidate_muid_message` and `invalidate_muid_view`

# v1.3.0

* add 'is_midi2_<xxx>_message' for per note and registered / assignable controller messages
Expand Down
25 changes: 21 additions & 4 deletions inc/midi/capability_inquiry.h
Original file line number Diff line number Diff line change
Expand Up @@ -296,10 +296,14 @@ struct invalidate_muid_view : capability_inquiry_view
{
using capability_inquiry_view::capability_inquiry_view;

muid_t target_muid() const;

static bool validate(const sysex7&);

struct field_offsets;
};

message make_invalidate_muid_message(muid_t);
message make_invalidate_muid_message(muid_t source_muid, muid_t target_muid);

//---- subtype::nak

Expand Down Expand Up @@ -1301,15 +1305,28 @@ inline message make_nak_message(const capability_inquiry_view& r,

//---- subtype::invalidate_muid

struct invalidate_muid_view::field_offsets : capability_inquiry_view::field_offsets
{
static constexpr auto target_muid = payload;
};

inline bool invalidate_muid_view::validate(const sysex7& sx)
{
return ((universal_sysex_type_of(sx) == universal_sysex::type::capability_inquiry) &&
(universal_sysex_subtype_of(sx) == subtype::invalidate_muid));
(universal_sysex_subtype_of(sx) == subtype::invalidate_muid) &&
(sx.data.size() >= field_offsets::target_muid + 4u));
}

inline message make_invalidate_muid_message(muid_t MUID)
inline muid_t invalidate_muid_view::target_muid() const
{
return message(subtype::invalidate_muid, MUID, broadcast_muid, 0x7F);
return sx.make_uint28(field_offsets::target_muid);
}

inline message make_invalidate_muid_message(muid_t source_muid, muid_t target_muid)
{
auto m = message::make_with_payload_size(4, subtype::invalidate_muid, source_muid, broadcast_muid, 0x7F);
m.add_uint28(target_muid);
return m;
}

//-----------------------------------------------
Expand Down
5 changes: 3 additions & 2 deletions tests/capability_inquiry_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -929,8 +929,8 @@ TEST_F(capability_inquiry, invalidate_muid)
{
SYSEX_ALLOCATOR_CAPTURE_COUNT(c);

auto sx = midi::ci::make_invalidate_muid_message(0x2435465);
EXPECT_EQ(12u, sx.data.size());
auto sx = midi::ci::make_invalidate_muid_message(0x2435465, 0x9ABCDEF);
EXPECT_EQ(16u, sx.data.size());

EXPECT_TRUE(midi::is_capability_inquiry_message(sx));
EXPECT_TRUE(VUT::validate(sx));
Expand All @@ -945,6 +945,7 @@ TEST_F(capability_inquiry, invalidate_muid)
EXPECT_EQ(midi::ci::version, m.message_version());
EXPECT_EQ(0x2435465u, m.source_muid());
EXPECT_EQ(0xFFFFFFFu, m.destination_muid());
EXPECT_EQ(0x9ABCDEFu, m.target_muid());

SYSEX_ALLOCATOR_VERIFY_DIFF(c, 1);
}
Expand Down

0 comments on commit 0b005d6

Please sign in to comment.