use crate::core::SyncBlock;
pub const JT9_SYNC_POSITIONS: [u32; 16] =
[0, 1, 4, 9, 15, 22, 32, 34, 50, 51, 54, 59, 65, 72, 82, 84];
const SYNC_TONE: [u8; 1] = [0];
pub const JT9_SYNC_BLOCKS: [SyncBlock; 16] = [
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[0],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[1],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[2],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[3],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[4],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[5],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[6],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[7],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[8],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[9],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[10],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[11],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[12],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[13],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[14],
pattern: &SYNC_TONE,
},
SyncBlock {
start_symbol: JT9_SYNC_POSITIONS[15],
pattern: &SYNC_TONE,
},
];
pub const JT9_ISYNC: [u8; 85] = [
1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sync_positions_count() {
assert_eq!(JT9_SYNC_POSITIONS.len(), 16);
assert_eq!(JT9_SYNC_BLOCKS.len(), 16);
}
#[test]
fn isync_matches_positions() {
let expected_sync: Vec<u32> = (0..85).filter(|&i| JT9_ISYNC[i as usize] == 1).collect();
assert_eq!(expected_sync, &JT9_SYNC_POSITIONS[..]);
}
}