Skip to content

Commit 82c8c37

Browse files
author
Franz Detro
committed
add examples for flex_data_message
1 parent f1d5be4 commit 82c8c37

File tree

2 files changed

+108
-4
lines changed

2 files changed

+108
-4
lines changed
Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,95 @@
11
#include <midi/flex_data_message.h>
22

3-
void run_flex_data_message_examples() { /* TODO */ }
3+
void flex_data_message_examples()
4+
{
5+
using namespace midi;
6+
7+
auto a = make_flex_data_message(0, packet_format::complete, packet_address::channel, 5, 0x20, 0x01, 0x123456);
8+
assert(is_flex_data_message(a));
9+
10+
if (auto m = as_flex_data_message_view(a))
11+
{
12+
// inspect message fields
13+
assert(m->group() == 0);
14+
assert(m->format() == packet_format::complete);
15+
assert(m->address() == packet_address::channel);
16+
assert(m->channel() == 5);
17+
assert(m->status_bank() == 0x20);
18+
assert(m->status() == 0x01);
19+
assert(m->data1() == 0x123456);
20+
assert(m->data2() == 0);
21+
assert(m->data3() == 0);
22+
}
23+
24+
auto t =
25+
make_flex_data_text_message(0, packet_format::complete, packet_address::channel, 5, 0x20, 0x01, "Hello World!");
26+
if (auto m = as_flex_data_message_view(t))
27+
{
28+
assert(m->payload_as_string() == "Hello World!");
29+
}
30+
31+
auto tmpo = make_set_tempo_message(0, 5000000);
32+
if (auto m = as_flex_data_message_view(tmpo))
33+
{
34+
assert(m->status_bank() == 0x00);
35+
assert(m->status() == 0x00);
36+
assert(m->data1() == 5000000);
37+
}
38+
39+
constexpr uint8_t numerator = 4;
40+
constexpr uint8_t denominator = 2; // 4 (2^2) denominator
41+
constexpr uint8_t nr_32rd_notes = 8; // 4/4 time signature
42+
43+
auto tsig = make_set_time_signature_message(0, numerator, denominator, nr_32rd_notes);
44+
if (auto m = as_flex_data_message_view(tsig))
45+
{
46+
assert(m->status_bank() == 0x00);
47+
assert(m->status() == 0x01);
48+
assert(m->data_byte1() == numerator);
49+
assert(m->data_byte2() == denominator);
50+
assert(m->data_byte3() == nr_32rd_notes);
51+
}
52+
53+
constexpr uint8_t num_clocks_per_primary_click = 24;
54+
constexpr uint8_t bar_accent_part1 = 3;
55+
constexpr uint8_t bar_accent_part2 = 2;
56+
constexpr uint8_t bar_accent_part3 = 0;
57+
constexpr uint8_t num_subdivision_clicks1 = 2;
58+
constexpr uint8_t num_subdivision_clicks2 = 0;
59+
60+
auto metro = make_set_metronome_message(0,
61+
num_clocks_per_primary_click,
62+
bar_accent_part1,
63+
bar_accent_part2,
64+
bar_accent_part3,
65+
num_subdivision_clicks1,
66+
num_subdivision_clicks2);
67+
if (auto m = as_flex_data_message_view(metro))
68+
{
69+
assert(m->status_bank() == 0x00);
70+
assert(m->status() == 0x02);
71+
assert(m->data_byte1() == num_clocks_per_primary_click);
72+
assert(m->data_byte2() == bar_accent_part1);
73+
assert(m->data_byte3() == bar_accent_part2);
74+
assert(m->data_byte4() == bar_accent_part3);
75+
assert(m->data_byte5() == num_subdivision_clicks1);
76+
assert(m->data_byte6() == num_subdivision_clicks2);
77+
}
78+
79+
constexpr uint4_t sharps_or_flats = 5; // 5 sharps
80+
constexpr uint4_t tonic_note = 0x4; // tonic D
81+
82+
auto ksig = make_set_key_signature_message(0, packet_address::channel, 5, sharps_or_flats, tonic_note); // D major
83+
if (auto m = as_flex_data_message_view(ksig))
84+
{
85+
assert(m->status_bank() == 0x00);
86+
assert(m->status() == 0x05);
87+
assert((m->data_byte1() >> 4) == sharps_or_flats);
88+
assert((m->data_byte1() & 0x0F) == tonic_note);
89+
}
90+
}
91+
92+
void run_flex_data_message_examples()
93+
{
94+
flex_data_message_examples();
95+
}

docs/flex_data_message.md

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
_WORK IN PROGRESS_
44

5+
Code examples can be found in [`flex_data_message.examples.cpp`](flex_data_message.examples.cpp).
6+
57
## Base Type
68

79
struct flex_data_message : universal_packet
810
{
911
flex_data_message(
10-
group_t, packet_format, packet_address, uint4_t, status_t, status_t, uint32_t = 0, uint32_t = 0, uint32_t = 0);
12+
group_t, packet_format, packet_address, uint4_t, status_t, status_t, uint32_t = 0, uint32_t = 0, uint32_t = 0);
1113

1214
packet_format format() const;
1315
packet_address address() const;
@@ -53,9 +55,9 @@ _WORK IN PROGRESS_
5355
uint8_t num_subdivision_clicks1,
5456
uint8_t num_subdivision_clicks2);
5557
flex_data_message make_set_key_signature_message(
56-
group_t, packet_address, uint4_t channel, uint4_t sharps_or_flats, uint4_t tonic_note);
58+
group_t, packet_address, uint4_t channel, uint4_t sharps_or_flats, uint4_t tonic_note);
5759
flex_data_message make_set_chord_message(
58-
group_t, packet_address, uint4_t channel, uint32_t data1, uint32_t data2, uint32_t data3);
60+
group_t, packet_address, uint4_t channel, uint32_t data1, uint32_t data2, uint32_t data3);
5961

6062

6163
### Flex Data Message Data View:
@@ -73,6 +75,16 @@ _WORK IN PROGRESS_
7375
uint32_t data1() const;
7476
uint32_t data2() const;
7577
uint32_t data3() const;
78+
uint8_t data_byte1() const;
79+
uint8_t data_byte2() const;
80+
uint8_t data_byte2() const;
81+
uint8_t data_byte3() const;
82+
uint8_t data_byte2() const;
83+
uint8_t data_byte4() const;
84+
uint8_t data_byte5() const;
85+
uint8_t data_byte6() const;
86+
uint8_t data_byte7() const;
87+
uint8_t data_byte8() const;
7688

7789
const std::string payload_as_string() const;
7890
};

0 commit comments

Comments
 (0)