use crate::core::SyncBlock;
pub const JT65_NPRC: [u8; 126] = [
1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1,
1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1,
0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0,
1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
];
pub const JT65_SYNC_POSITIONS: [u32; 63] = {
let mut out = [0u32; 63];
let mut i = 0usize;
let mut k = 0usize;
while i < 126 {
if JT65_NPRC[i] == 1 {
out[k] = i as u32;
k += 1;
}
i += 1;
}
out
};
pub const JT65_DATA_POSITIONS: [u32; 63] = {
let mut out = [0u32; 63];
let mut i = 0usize;
let mut k = 0usize;
while i < 126 {
if JT65_NPRC[i] == 0 {
out[k] = i as u32;
k += 1;
}
i += 1;
}
out
};
const SYNC_TONE: [u8; 1] = [0];
pub const JT65_SYNC_BLOCKS: [SyncBlock; 63] = {
let mut blocks = [SyncBlock {
start_symbol: 0,
pattern: &SYNC_TONE,
}; 63];
let mut i = 0usize;
while i < 63 {
blocks[i] = SyncBlock {
start_symbol: JT65_SYNC_POSITIONS[i],
pattern: &SYNC_TONE,
};
i += 1;
}
blocks
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sync_and_data_positions_partition_126() {
assert_eq!(JT65_SYNC_POSITIONS.len(), 63);
assert_eq!(JT65_DATA_POSITIONS.len(), 63);
let mut seen = [false; 126];
for &p in &JT65_SYNC_POSITIONS {
assert!(!seen[p as usize], "duplicate sync pos {p}");
seen[p as usize] = true;
}
for &p in &JT65_DATA_POSITIONS {
assert!(!seen[p as usize], "duplicate data pos {p}");
seen[p as usize] = true;
}
assert!(seen.iter().all(|&b| b));
}
}