jt1078 0.1.0

jt1078协议库实现
Documentation
use jt808::models::{Jt808, Jt808BodySerialize, Jt808BodyTrans, Ver808};
use jt_util::{bytes::{IBuffRead, IBuffWrite}, timer_helper::TimeHelper};
use chrono::{Local, TimeZone};

#[derive(Debug, Default)]
pub struct Jt0x9202 {
    /// 逻辑通道号
    pub channel: u8,
    /// 回放控制(0:开始回放,1:音暂停回放,2:结束回放,3:快进回放,4:关键帧快退回放,5:拖动回话,6:关键帧播放)
    pub playback_control: u8,
    /// 快进或快退倍数(0:无效,1:1倍,2:2倍,3:4倍,4:8倍,5:16倍;回放控制为3和4时,此字段内容有效,否则置0)
    pub multiple: u8,
    /// 开始时间(回放方式为4时,该字段表示单帧上传时间)
    pub drag_playback_position: i64,
}

impl Jt808BodySerialize for Jt0x9202 {
    fn write(&mut self, _ver: &Ver808, buf: &mut dyn IBuffWrite) {
        buf.put_u8(self.channel);
        buf.put_u8(self.playback_control);
        buf.put_u8(self.multiple);
        buf.put_slice(&TimeHelper::datetime_to_bcd6(&Local.timestamp(self.drag_playback_position, 0)));
    }

    fn len(&self, _ver: &Ver808) -> usize {
        9
    }
}


impl Jt808BodyTrans for Jt0x9202 {
    fn fill_new<T>(buf: &mut T, _jt808: &Jt808) -> Self
    where
        T: IBuffRead,
    {
        Self {
            channel: buf.get_u8(),
            playback_control: buf.get_u8(),
            multiple: buf.get_u8(),
            drag_playback_position: buf.get_dt_bcd6_timestamp()
        }
    }
}