Skip to content

Commit 33107d7

Browse files
timeopochinjcelerier
authored andcommitted
c api: added port handle getter
1 parent 349fcbe commit 33107d7

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

examples/c_api.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ void on_input_port_found(void* ctx, const libremidi_midi_in_port* port)
3636
if (ret != 0)
3737
return;
3838

39-
printf("input: %s\n", name);
39+
uint64_t handle = -1;
40+
41+
ret = libremidi_midi_in_port_handle(port, &handle);
42+
if (ret != 0)
43+
return;
44+
45+
printf("input %d: %s\n", handle, name);
4046
fflush(stdout);
4147

4248
enumerated_ports* e = (enumerated_ports*)ctx;
@@ -53,7 +59,13 @@ void on_output_port_found(void* ctx, const libremidi_midi_out_port* port)
5359
if (ret != 0)
5460
return;
5561

56-
printf("output: %s\n", name);
62+
uint64_t handle = -1;
63+
64+
ret = libremidi_midi_out_port_handle(port, &handle);
65+
if (ret != 0)
66+
return;
67+
68+
printf("output %d: %s\n", handle, name);
5769
fflush(stdout);
5870

5971
enumerated_ports* e = (enumerated_ports*)ctx;

include/libremidi/libremidi-c.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,16 @@ int libremidi_midi_in_port_name(const libremidi_midi_in_port* port, const char**
123123
return 0;
124124
}
125125

126+
int libremidi_midi_in_port_handle(const libremidi_midi_in_port* port, uint64_t* handle)
127+
{
128+
if (!port || !handle)
129+
return -EINVAL;
130+
131+
auto& p = *reinterpret_cast<const libremidi::input_port*>(port);
132+
*handle = static_cast<uint64_t>(p.port);
133+
return 0;
134+
}
135+
126136
int libremidi_midi_out_port_clone(
127137
const libremidi_midi_out_port* port, libremidi_midi_out_port** dst)
128138
{
@@ -152,6 +162,16 @@ int libremidi_midi_out_port_name(
152162
return 0;
153163
}
154164

165+
int libremidi_midi_out_port_handle(const libremidi_midi_out_port* port, uint64_t* handle)
166+
{
167+
if (!port || !handle)
168+
return -EINVAL;
169+
170+
auto& p = *reinterpret_cast<const libremidi::output_port*>(port);
171+
*handle = static_cast<uint64_t>(p.port);
172+
return 0;
173+
}
174+
155175
int libremidi_midi_observer_new(
156176
const libremidi_observer_configuration* c, libremidi_api_configuration* api,
157177
libremidi_midi_observer_handle** out)

include/libremidi/libremidi-c.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@ LIBREMIDI_EXPORT
198198
int libremidi_midi_in_port_name(
199199
const libremidi_midi_in_port* port, const char** name, size_t* len);
200200

201+
LIBREMIDI_EXPORT
202+
int libremidi_midi_in_port_handle(
203+
const libremidi_midi_in_port* port, uint64_t* handle);
204+
201205
LIBREMIDI_EXPORT
202206
int libremidi_midi_out_port_clone(
203207
const libremidi_midi_out_port* port, libremidi_midi_out_port** dst);
@@ -209,6 +213,10 @@ LIBREMIDI_EXPORT
209213
int libremidi_midi_out_port_name(
210214
const libremidi_midi_out_port* port, const char** name, size_t* len);
211215

216+
LIBREMIDI_EXPORT
217+
int libremidi_midi_out_port_handle(
218+
const libremidi_midi_out_port* port, uint64_t* handle);
219+
212220
/// Observer API
213221
LIBREMIDI_EXPORT
214222
int libremidi_midi_observer_new(

0 commit comments

Comments
 (0)