/
t808_0x0800.go
100 lines (82 loc) · 2.05 KB
/
t808_0x0800.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package protocol
// 多媒体事件信息上传
type T808_0x0800 struct {
// 多媒体数据 ID
MediaID uint32
// 多媒体类型
Type T808_0x0800_MediaType
// 多媒体格式编码
Coding T808_0x0800_MediaCoding
// 事件项编码
Event byte
// 通道 ID
ChannelID byte
}
// 多媒体类型
type T808_0x0800_MediaType byte
var (
T808_0x0800_MediaTypeImage T808_0x0800_MediaType = 0
T808_0x0800_MediaTypeAudio T808_0x0800_MediaType = 1
T808_0x0800_MediaTypeVideo T808_0x0800_MediaType = 2
)
// 多媒体编码
type T808_0x0800_MediaCoding byte
var (
T808_0x0800_MediaCodingJPEG T808_0x0800_MediaCoding = 0
T808_0x0800_MediaCodingTIF T808_0x0800_MediaCoding = 1
T808_0x0800_MediaCodingMP3 T808_0x0800_MediaCoding = 2
T808_0x0800_MediaCodingWAV T808_0x0800_MediaCoding = 3
T808_0x0800_MediaCodingWMV T808_0x0800_MediaCoding = 4
)
func (entity *T808_0x0800) MsgID() MsgID {
return MsgT808_0x0800
}
func (entity *T808_0x0800) Encode() ([]byte, error) {
writer := NewWriter()
// 写入媒体ID
writer.WriteUint32(entity.MediaID)
// 写入媒体类型
writer.WriteByte(byte(entity.Type))
// 写入媒体编码
writer.WriteByte(byte(entity.Coding))
// 写入媒体事件
writer.WriteByte(entity.Event)
// 写入通道ID
writer.WriteByte(entity.ChannelID)
return writer.Bytes(), nil
}
func (entity *T808_0x0800) Decode(data []byte) (int, error) {
if len(data) < 8 {
return 0, ErrInvalidBody
}
reader := NewReader(data)
// 读取媒体ID
var err error
entity.MediaID, err = reader.ReadUint32()
if err != nil {
return 0, err
}
// 读取媒体类型
mediaType, err := reader.ReadByte()
if err != nil {
return 0, err
}
entity.Type = T808_0x0800_MediaType(mediaType)
// 读取媒体编码
coding, err := reader.ReadByte()
if err != nil {
return 0, err
}
entity.Coding = T808_0x0800_MediaCoding(coding)
// 读取媒体事件
entity.Event, err = reader.ReadByte()
if err != nil {
return 0, err
}
// 读取通道ID
entity.ChannelID, err = reader.ReadByte()
if err != nil {
return 0, err
}
return len(data) - reader.Len(), nil
}