Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions examples/c_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,13 @@ void on_input_port_found(void* ctx, const libremidi_midi_in_port* port)
if (ret != 0)
return;

printf("input: %s\n", name);
uint64_t handle = -1;

ret = libremidi_midi_in_port_handle(port, &handle);
if (ret != 0)
return;

printf("input %d: %s\n", handle, name);
fflush(stdout);

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

printf("output: %s\n", name);
uint64_t handle = -1;

ret = libremidi_midi_out_port_handle(port, &handle);
if (ret != 0)
return;

printf("output %d: %s\n", handle, name);
fflush(stdout);

enumerated_ports* e = (enumerated_ports*)ctx;
Expand Down
20 changes: 20 additions & 0 deletions include/libremidi/libremidi-c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,16 @@ int libremidi_midi_in_port_name(const libremidi_midi_in_port* port, const char**
return 0;
}

int libremidi_midi_in_port_handle(const libremidi_midi_in_port* port, uint64_t* handle)
{
if (!port || !handle)
return -EINVAL;

auto& p = *reinterpret_cast<const libremidi::input_port*>(port);
*handle = static_cast<uint64_t>(p.port);
return 0;
}

int libremidi_midi_out_port_clone(
const libremidi_midi_out_port* port, libremidi_midi_out_port** dst)
{
Expand Down Expand Up @@ -152,6 +162,16 @@ int libremidi_midi_out_port_name(
return 0;
}

int libremidi_midi_out_port_handle(const libremidi_midi_out_port* port, uint64_t* handle)
{
if (!port || !handle)
return -EINVAL;

auto& p = *reinterpret_cast<const libremidi::output_port*>(port);
*handle = static_cast<uint64_t>(p.port);
return 0;
}

int libremidi_midi_observer_new(
const libremidi_observer_configuration* c, libremidi_api_configuration* api,
libremidi_midi_observer_handle** out)
Expand Down
8 changes: 8 additions & 0 deletions include/libremidi/libremidi-c.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,10 @@ LIBREMIDI_EXPORT
int libremidi_midi_in_port_name(
const libremidi_midi_in_port* port, const char** name, size_t* len);

LIBREMIDI_EXPORT
int libremidi_midi_in_port_handle(
const libremidi_midi_in_port* port, uint64_t* handle);

LIBREMIDI_EXPORT
int libremidi_midi_out_port_clone(
const libremidi_midi_out_port* port, libremidi_midi_out_port** dst);
Expand All @@ -209,6 +213,10 @@ LIBREMIDI_EXPORT
int libremidi_midi_out_port_name(
const libremidi_midi_out_port* port, const char** name, size_t* len);

LIBREMIDI_EXPORT
int libremidi_midi_out_port_handle(
const libremidi_midi_out_port* port, uint64_t* handle);

/// Observer API
LIBREMIDI_EXPORT
int libremidi_midi_observer_new(
Expand Down