Skip to content

Commit

Permalink
document progress
Browse files Browse the repository at this point in the history
  • Loading branch information
wmedrano committed Jan 22, 2017
1 parent 6d2de22 commit c54ea4c
Show file tree
Hide file tree
Showing 5 changed files with 240 additions and 4 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ Nice Rust bindings for

Check out the `examples` directory.

## Completeness

For details on which functions from the JACK headers have been implemented, see `ffi_completeness.md`.

More high-level, creating clients, creating/reading/writing/connecting ports, audio, and midi are supported.

Missing categories include, JACK threading, synchronous processing, transport and control functionality.

## Running

* `libjack` is required. Consult your package manager or the [official](http://www.jackaudio.org/downloads/) website.
Expand Down
205 changes: 205 additions & 0 deletions ffi_completeness.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
# FFI Used
`jack_client_open`
`jack_client_close`
`jack_client_name_size`
`jack_get_client_name`
`jack_get_client_name_by_uuid`
`jack_activate`
`jack_deactivate`
`jack_set_thread_init_callback`
`jack_on_info_shutdown`
`jack_set_process_callback`
`jack_set_freewheel_callback`
`jack_set_buffer_size_callback`
`jack_set_sample_rate_callback`
`jack_set_client_registration_callback`
`jack_set_port_registration_callback`
`jack_set_port_connect_callback`
`jack_set_port_rename_callback`
`jack_set_graph_order_callback`
`jack_set_xrun_callback`
`jack_set_latency_callback`
`jack_set_freewheel`
`jack_set_buffer_size`
`jack_get_sample_rate`
`jack_get_buffer_size`
`jack_cpu_load`
`jack_port_register`
`jack_port_unregister`
`jack_port_get_buffer`
`jack_port_name`
`jack_port_short_name`
`jack_port_flags`
`jack_port_type`
`jack_port_is_mine`
`jack_port_connected`
`jack_port_connected_to`
`jack_port_set_name`
`jack_port_set_alias`
`jack_port_unset_alias`
`jack_port_get_aliases`
`jack_port_request_monitor`
`jack_port_request_monitor_by_name`
`jack_port_ensure_monitor`
`jack_port_monitoring_input`
`jack_connect`
`jack_disconnect`
`jack_port_disconnect`
`jack_port_name_size`
`jack_port_type_size`
`jack_port_type_get_buffer_size`
`jack_get_ports`
`jack_port_by_name`
`jack_port_by_id`
`jack_frames_since_cycle_start`
`jack_frame_time`
`jack_last_frame_time`
`jack_get_cycle_times`
`jack_frames_to_time`
`jack_time_to_frames`
`jack_get_time`
`jack_set_error_function`
`jack_set_info_function`
`jack_free`
`jack_midi_get_event_count`
`jack_midi_event_get`
`jack_midi_clear_buffer`
`jack_midi_max_event_size`
`jack_midi_event_write`
`jack_midi_get_lost_event_count`

# FFI Unused
`jack_release_timebase`
`jack_set_sync_callback`
`jack_set_sync_timeout`
`jack_set_timebase_callback`
`jack_transport_locate`
`jack_transport_query`
`jack_get_current_transport_frame`
`jack_transport_reposition`
`jack_transport_start`
`jack_transport_stop`
`jack_get_transport_info`
`jack_set_transport_info`
`jack_get_version`
`jack_get_version_string`
`jack_get_uuid_for_client_name`
`jack_get_client_pid`
`jack_client_thread_id`
`jack_is_realtime`
`jack_thread_wait`
`jack_cycle_wait`
`jack_cycle_signal`
`jack_set_process_thread`
`jack_on_shutdown` - similar to on shutdown info
`jack_port_uuid`
`jack_port_type_id`
`jack_port_get_connections`
`jack_port_get_all_connections`
`jack_port_get_latency_range`
`jack_port_set_latency_range`
`jack_recompute_total_latencies`
`jack_client_real_time_priority`
`jack_client_max_real_time_priority`
`jack_acquire_real_time_scheduling`
`jack_client_create_thread`
`jack_drop_real_time_scheduling`
`jack_client_stop_thread`
`jack_client_kill_thread`
`jack_set_thread_creator`
`jack_set_session_callback`
`jack_session_reply`
`jack_session_event_free`
`jack_client_get_uuid`
`jack_session_notify`
`jack_session_commands_free`
`jack_reserve_client_name`
`jack_client_has_session_callback`
`jackctl_setup_signals`
`jackctl_wait_signals`
`jackctl_server_create`
`jackctl_server_destroy`
`jackctl_server_open`
`jackctl_server_start`
`jackctl_server_stop`
`jackctl_server_close`
`jackctl_server_get_drivers_list`
`jackctl_server_get_parameters`
`jackctl_server_get_internals_list`
`jackctl_server_load_internal`
`jackctl_server_unload_internal`
`jackctl_server_add_slave`
`jackctl_server_remove_slave`
`jackctl_server_switch_master`
`jackctl_driver_get_name`
`jackctl_driver_get_type`
`jackctl_driver_get_parameters`
`jackctl_driver_params_parse`
`jackctl_internal_get_name`
`jackctl_internal_get_parameters`
`jackctl_parameter_get_name`
`jackctl_parameter_get_short_description`
`jackctl_parameter_get_long_description`
`jackctl_parameter_get_type`
`jackctl_parameter_get_id`
`jackctl_parameter_is_set`
`jackctl_parameter_reset`
`jackctl_parameter_get_value`
`jackctl_parameter_set_value`
`jackctl_parameter_get_default_value`
`jackctl_parameter_has_range_constraint`
`jackctl_parameter_has_enum_constraint`
`jackctl_parameter_get_enum_constraints_count`
`jackctl_parameter_get_enum_constraint_value`
`jackctl_parameter_get_enum_constraint_description`
`jackctl_parameter_get_range_constraint`
`jackctl_parameter_constraint_is_strict`
`jackctl_parameter_constraint_is_fake_value`
`jack_error` - causes link error
`jack_info` - causes link error
`jack_log` - causes link error
`jack_set_property`
`jack_get_property`
`jack_free_description`
`jack_get_properties`
`jack_get_all_properties`
`jack_remove_property`
`jack_remove_properties`
`jack_remove_all_properties`
`jack_set_property_change_callback`
`jack_get_internal_client_name`
`jack_internal_client_handle`
`jack_internal_client_load`
`jack_internal_client_unload`
`jack_get_max_delayed_usecs`
`jack_get_xrun_delayed_usecs`
`jack_reset_max_delayed_usecs`
`jack_midi_reset_buffer`
`jack_midi_event_reserve`
`jack_ringbuffer_create`
`jack_ringbuffer_free`
`jack_ringbuffer_get_read_vector`
`jack_ringbuffer_get_write_vector`
`jack_ringbuffer_read`
`jack_ringbuffer_peek`
`jack_ringbuffer_read_advance`
`jack_ringbuffer_read_space`
`jack_ringbuffer_mlock`
`jack_ringbuffer_reset`
`jack_ringbuffer_reset_size`
`jack_ringbuffer_write`
`jack_ringbuffer_write_advance`
`jack_ringbuffer_write_space`


# FFI Deprecated
`jack_client_new`
`jack_internal_client_new`
`jack_internal_client_close`
`jack_engine_takeover_timebase`
`jack_port_tie`
`jack_port_untie`
`jack_port_get_latency`
`jack_port_get_total_latency`
`jack_port_set_latency`
`jack_recompute_total_latency`
9 changes: 9 additions & 0 deletions src/port/port.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,15 @@ impl<PS: PortSpec> Port<PS> {
}
}

/// Remove connections to/from port `self`.
pub fn disconnect(&self) -> Result<(), JackErr> {
let res = unsafe { j::jack_port_disconnect(self.client_ptr(), self.as_ptr()) };
match res {
0 => Ok(()),
_ => Err(JackErr::PortDisconnectionError),
}
}

/// Get the alias names for `self`.
///
/// Will return a vector of strings of up to 2 elements.
Expand Down
4 changes: 2 additions & 2 deletions src/test/test_client_cback.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ fn client_cback_calls_process() {
fn client_cback_calls_buffer_size() {
let ac = active_test_client("client_cback_calls_process");
let initial = ac.buffer_size();
let second = 2 * initial;
let third = 2 * second;
let second = initial / 2;
let third = second / 2;
ac.set_buffer_size(second).unwrap();
ac.set_buffer_size(third).unwrap();
ac.set_buffer_size(initial).unwrap();
Expand Down
18 changes: 16 additions & 2 deletions src/test/test_client_port.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,6 @@ fn client_port_recognizes_already_connected_ports() {
in_p.name().to_string())));
}



#[test]
fn client_port_fails_to_connect_nonexistant_ports() {
let client = open_test_client("client_port_ftcnp");
Expand All @@ -203,6 +201,22 @@ fn client_port_fails_to_connect_nonexistant_ports() {
"also_no_exist".to_string())));
}

#[test]
fn client_port_can_disconnect_port_from_all() {
let mut client = open_test_client("client_port_cdpfa");

// initialize ports
let in_p = client.register_port("conna", AudioInSpec::default()).unwrap();
let out_p = client.register_port("connb", AudioOutSpec::default()).unwrap();

// start client
let client = client.activate(DummyHandler).unwrap();

// connect and disconnect
client.connect_ports(&out_p, &in_p).unwrap();
in_p.disconnect().unwrap();
}

#[test]
fn client_port_can_disconnect_ports() {
let mut client = open_test_client("client_port_cdp");
Expand Down

0 comments on commit c54ea4c

Please sign in to comment.