diff --git a/examples/c_api.c b/examples/c_api.c index 876f375..e8dc9b0 100644 --- a/examples/c_api.c +++ b/examples/c_api.c @@ -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; @@ -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; diff --git a/include/libremidi/libremidi-c.cpp b/include/libremidi/libremidi-c.cpp index 0e769dc..3ca6768 100644 --- a/include/libremidi/libremidi-c.cpp +++ b/include/libremidi/libremidi-c.cpp @@ -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(port); + *handle = static_cast(p.port); + return 0; +} + int libremidi_midi_out_port_clone( const libremidi_midi_out_port* port, libremidi_midi_out_port** dst) { @@ -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(port); + *handle = static_cast(p.port); + return 0; +} + int libremidi_midi_observer_new( const libremidi_observer_configuration* c, libremidi_api_configuration* api, libremidi_midi_observer_handle** out) diff --git a/include/libremidi/libremidi-c.h b/include/libremidi/libremidi-c.h index c43d7e1..bb9e60b 100644 --- a/include/libremidi/libremidi-c.h +++ b/include/libremidi/libremidi-c.h @@ -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); @@ -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(