use iceoryx2::prelude::*;
#[repr(C)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, ZeroCopySend)]
pub struct MidiNoteEvent {
pub channel: u8,
pub pitch: u8,
pub velocity: u8, pub kind: u8, pub timestamp: u64,
pub _reserved: [u8; 4], }
#[repr(C)]
#[derive(Default, Copy, Clone, Debug, PartialEq, Eq, ZeroCopySend)]
pub struct TrackVoiceOverride {
pub track_index: u8,
pub voice: u8,
pub _reserved: [u8; 2],
}
#[repr(C)]
#[derive(Default, Copy, Clone, Debug, PartialEq, Eq, ZeroCopySend)]
pub struct PlaySongAtHeartbeat {
pub song_index: u16,
pub start_heartbeat: u32,
pub stop_heartbeat: u32,
pub play_for_duration_ms: u32,
pub num_track_overrides: u8,
pub _reserved: [u8; 3],
pub track_overrides: [TrackVoiceOverride; 16],
}
impl PlaySongAtHeartbeat {
pub const BYTE_SIZE: usize = std::mem::size_of::<PlaySongAtHeartbeat>();
pub fn as_bytes(&self) -> &[u8] {
unsafe {
std::slice::from_raw_parts(
(self as *const PlaySongAtHeartbeat) as *const u8,
PlaySongAtHeartbeat::BYTE_SIZE,
)
}
}
pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
if bytes.len() != PlaySongAtHeartbeat::BYTE_SIZE {
return None;
}
let mut s = PlaySongAtHeartbeat::default();
unsafe {
std::ptr::copy_nonoverlapping(
bytes.as_ptr(),
&mut s as *mut PlaySongAtHeartbeat as *mut u8,
PlaySongAtHeartbeat::BYTE_SIZE,
);
}
Some(s)
}
}
impl TrackVoiceOverride {
pub const BYTE_SIZE: usize = std::mem::size_of::<TrackVoiceOverride>();
pub fn as_bytes(&self) -> &[u8] {
unsafe {
std::slice::from_raw_parts(
(self as *const TrackVoiceOverride) as *const u8,
TrackVoiceOverride::BYTE_SIZE,
)
}
}
pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
if bytes.len() != TrackVoiceOverride::BYTE_SIZE {
return None;
}
let mut s = TrackVoiceOverride::default();
unsafe {
std::ptr::copy_nonoverlapping(
bytes.as_ptr(),
&mut s as *mut TrackVoiceOverride as *mut u8,
TrackVoiceOverride::BYTE_SIZE,
);
}
Some(s)
}
}