use uuid::Uuid;
#[allow(dead_code)]
pub const SERVICE_UUID: Uuid = Uuid::from_u128(0xFE60);
pub const CMD_CHAR_UUID: Uuid = Uuid::from_u128(0xFE61);
pub const EVENT_CHAR_UUID: Uuid = Uuid::from_u128(0xFE62);
pub const AUDIO_CHAR_UUID: Uuid = Uuid::from_u128(0xFE63);
pub const VENDOR_DEVICE_PREFIX: &str = "REAI_VB_";
#[allow(dead_code)]
pub const AUDIO_FLAG_SILENCE: u8 = 0;
pub const AUDIO_FLAG_DATA: u8 = 1;
pub fn parse_packet(data: &[u8]) -> Option<(u8, u8, &[u8])> {
if data.len() < 2 {
return None;
}
let cmd = data[0];
let len = data[1] as usize;
if data.len() < 2 + len {
return None;
}
Some((cmd, data[1], &data[2..2 + len]))
}
pub fn parse_audio_packet(data: &[u8]) -> Option<(u8, &[u8])> {
if data.len() < 2 {
return None;
}
let flag = data[0];
let len = data[1] as usize;
if flag != AUDIO_FLAG_DATA {
return None;
}
let available = data.len().saturating_sub(2);
let actual_len = len.min(available);
if actual_len == 0 {
return None;
}
Some((flag, &data[2..2 + actual_len]))
}
pub fn hid_to_gatt_command(hid_packet: &[u8; 64]) -> Vec<u8> {
let cmd = hid_packet[1];
let len = (hid_packet[2] as usize).min(61);
let mut result = Vec::with_capacity(2 + len);
result.push(cmd);
result.push(hid_packet[2]);
if len > 0 {
result.extend_from_slice(&hid_packet[3..3 + len]);
}
result
}