pub trait RuntimeService: Send + Sync {
Show 23 methods
// Required methods
fn start<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn stop<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn pause<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn resume<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn step<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<RuntimeStatus>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_frequency<'life0, 'async_trait>(
&'life0 self,
frequency_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_burst_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<u64>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn reset_burst_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_fcl_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u64, f32)>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_fcl_snapshot_with_cortical_idx<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u64, u32, f32)>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_fire_queue_sample<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<HashMap<u32, (Vec<u32>, Vec<u32>, Vec<u32>, Vec<u32>, Vec<f32>)>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_fire_ledger_configs<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u32, usize)>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn configure_fire_ledger_window<'life0, 'async_trait>(
&'life0 self,
cortical_idx: u32,
window_size: usize,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_fcl_sampler_config<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<(f64, u32)>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_fcl_sampler_config<'life0, 'async_trait>(
&'life0 self,
frequency: Option<f64>,
consumer: Option<u32>,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn get_area_fcl_sample_rate<'life0, 'async_trait>(
&'life0 self,
area_id: u32,
) -> Pin<Box<dyn Future<Output = ServiceResult<f64>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn set_area_fcl_sample_rate<'life0, 'async_trait>(
&'life0 self,
area_id: u32,
sample_rate: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn inject_sensory_by_coordinates<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cortical_id: &'life1 str,
xyzp_data: &'life2 [(u32, u32, u32, f32)],
mode: ManualStimulationMode,
) -> Pin<Box<dyn Future<Output = ServiceResult<usize>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn register_motor_subscriptions<'life0, 'life1, 'async_trait>(
&'life0 self,
agent_id: &'life1 str,
cortical_ids: Vec<String>,
rate_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn register_visualization_subscriptions<'life0, 'life1, 'async_trait>(
&'life0 self,
agent_id: &'life1 str,
rate_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn unregister_motor_subscriptions(&self, agent_id: &str);
fn unregister_visualization_subscriptions(&self, agent_id: &str);
}Expand description
Runtime control service (transport-agnostic)
Required Methods§
Sourcefn start<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn start<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Start the burst engine
Begins executing neural bursts at the configured frequency.
§Errors
ServiceError::InvalidState- Already runningServiceError::Backend- Failed to start burst engine
Sourcefn stop<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn stop<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stop the burst engine
Gracefully stops burst execution.
§Errors
ServiceError::Backend- Failed to stop burst engine
Sourcefn pause<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn pause<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Pause the burst engine
Temporarily pauses burst execution without stopping the thread.
§Errors
ServiceError::InvalidState- Not runningServiceError::Backend- Failed to pause
Sourcefn resume<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn resume<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Resume the burst engine
Resumes burst execution after pause.
§Errors
ServiceError::InvalidState- Not pausedServiceError::Backend- Failed to resume
Sourcefn step<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn step<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Execute a single burst step
Executes one burst cycle and then pauses. Useful for debugging and step-by-step execution.
§Errors
ServiceError::InvalidState- Already running in continuous modeServiceError::Backend- Failed to execute step
Sourcefn get_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<RuntimeStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<RuntimeStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get runtime status
Returns the current state of the burst engine.
§Returns
RuntimeStatus- Current runtime status
Sourcefn set_frequency<'life0, 'async_trait>(
&'life0 self,
frequency_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_frequency<'life0, 'async_trait>(
&'life0 self,
frequency_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sourcefn get_burst_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_burst_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get current burst count
Returns the total number of bursts executed since start.
§Returns
u64- Total burst count
Sourcefn reset_burst_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reset_burst_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Reset burst count
Resets the burst counter to zero.
Sourcefn get_fcl_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u64, f32)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_fcl_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u64, f32)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get FCL (Fire Candidate List) snapshot for monitoring
Returns vector of (neuron_id, potential) pairs from last burst
§Returns
Vec<(u64, f32)>- Neuron IDs and their membrane potentials
Sourcefn get_fcl_snapshot_with_cortical_idx<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u64, u32, f32)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_fcl_snapshot_with_cortical_idx<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u64, u32, f32)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get Fire Candidate List snapshot with cortical area information
Returns the last FCL snapshot with cortical_idx for each neuron. This avoids the need to query cortical_area for each neuron separately.
§Returns
Vec<(u64, u32, f32)>- (neuron_id, cortical_idx, membrane_potential) tuples
Sourcefn get_fire_queue_sample<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<HashMap<u32, (Vec<u32>, Vec<u32>, Vec<u32>, Vec<u32>, Vec<f32>)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_fire_queue_sample<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<HashMap<u32, (Vec<u32>, Vec<u32>, Vec<u32>, Vec<u32>, Vec<f32>)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get Fire Queue sample for monitoring
Returns neurons that actually fired in the last burst, organized by cortical area
§Returns
HashMap<u32, (Vec<u32>, Vec<u32>, Vec<u32>, Vec<u32>, Vec<f32>)>- Area data
Sourcefn get_fire_ledger_configs<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u32, usize)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_fire_ledger_configs<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<Vec<(u32, usize)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get Fire Ledger window configurations for all cortical areas
§Returns
Vec<(u32, usize)>- (cortical_idx, window_size) pairs
Sourcefn configure_fire_ledger_window<'life0, 'async_trait>(
&'life0 self,
cortical_idx: u32,
window_size: usize,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn configure_fire_ledger_window<'life0, 'async_trait>(
&'life0 self,
cortical_idx: u32,
window_size: usize,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Configure Fire Ledger window size for a cortical area
§Arguments
cortical_idx- Cortical area indexwindow_size- Number of bursts to retain in history
Sourcefn get_fcl_sampler_config<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<(f64, u32)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_fcl_sampler_config<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ServiceResult<(f64, u32)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get FCL/FQ sampler configuration
§Returns
(f64, u32)- (frequency_hz, consumer_type) where consumer: 1=viz, 2=motor, 3=both
Sourcefn set_fcl_sampler_config<'life0, 'async_trait>(
&'life0 self,
frequency: Option<f64>,
consumer: Option<u32>,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_fcl_sampler_config<'life0, 'async_trait>(
&'life0 self,
frequency: Option<f64>,
consumer: Option<u32>,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Set FCL/FQ sampler configuration
§Arguments
frequency- Optional sampling frequency in Hzconsumer- Optional consumer type (1=viz, 2=motor, 3=both)
Sourcefn get_area_fcl_sample_rate<'life0, 'async_trait>(
&'life0 self,
area_id: u32,
) -> Pin<Box<dyn Future<Output = ServiceResult<f64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_area_fcl_sample_rate<'life0, 'async_trait>(
&'life0 self,
area_id: u32,
) -> Pin<Box<dyn Future<Output = ServiceResult<f64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sourcefn set_area_fcl_sample_rate<'life0, 'async_trait>(
&'life0 self,
area_id: u32,
sample_rate: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_area_fcl_sample_rate<'life0, 'async_trait>(
&'life0 self,
area_id: u32,
sample_rate: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Set FCL sample rate for a specific cortical area
§Arguments
area_id- Cortical area ID (cortical_idx)sample_rate- Sample rate in Hz
Sourcefn inject_sensory_by_coordinates<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cortical_id: &'life1 str,
xyzp_data: &'life2 [(u32, u32, u32, f32)],
mode: ManualStimulationMode,
) -> Pin<Box<dyn Future<Output = ServiceResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn inject_sensory_by_coordinates<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cortical_id: &'life1 str,
xyzp_data: &'life2 [(u32, u32, u32, f32)],
mode: ManualStimulationMode,
) -> Pin<Box<dyn Future<Output = ServiceResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Inject sensory data by cortical area ID and coordinates
Takes cortical ID (base64 string) and coordinates with potential values, converts coordinates to neuron IDs, and injects them into FCL.
§Arguments
cortical_id- Base64 encoded cortical area IDxyzp_data- Vector of (x, y, z, potential) tuples
§Returns
- Number of neurons successfully injected
§Errors
ServiceError::NotFound- Cortical area not foundServiceError::InvalidInput- Invalid cortical ID format
Sourcefn register_motor_subscriptions<'life0, 'life1, 'async_trait>(
&'life0 self,
agent_id: &'life1 str,
cortical_ids: Vec<String>,
rate_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn register_motor_subscriptions<'life0, 'life1, 'async_trait>(
&'life0 self,
agent_id: &'life1 str,
cortical_ids: Vec<String>,
rate_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Register motor subscriptions with per-agent rate limits.
§Arguments
agent_id- Unique agent identifiercortical_ids- List of cortical IDs to subscribe torate_hz- Motor publish rate (Hz)
Sourcefn register_visualization_subscriptions<'life0, 'life1, 'async_trait>(
&'life0 self,
agent_id: &'life1 str,
rate_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn register_visualization_subscriptions<'life0, 'life1, 'async_trait>(
&'life0 self,
agent_id: &'life1 str,
rate_hz: f64,
) -> Pin<Box<dyn Future<Output = ServiceResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Register visualization subscriptions with per-agent rate limits.
§Arguments
agent_id- Unique agent identifierrate_hz- Visualization publish rate (Hz)
Sourcefn unregister_motor_subscriptions(&self, agent_id: &str)
fn unregister_motor_subscriptions(&self, agent_id: &str)
Unregister motor subscriptions for a disconnected agent.
Called when an agent is deregistered (e.g. descriptor replacement, timeout).
Sourcefn unregister_visualization_subscriptions(&self, agent_id: &str)
fn unregister_visualization_subscriptions(&self, agent_id: &str)
Unregister visualization subscriptions for a disconnected agent.
Called when an agent is deregistered (e.g. descriptor replacement, timeout).