Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ademco_hb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
ademco_hb
Commits
19290bbb
Commit
19290bbb
authored
Aug 25, 2020
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Req Resp
parent
fa5fbacf
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
68 deletions
+68
-68
server_demo_libevent.cpp
examples/server_demo_libevent/server_demo_libevent.cpp
+11
-11
hb_detail.h
include/hb_detail.h
+57
-57
No files found.
examples/server_demo_libevent/server_demo_libevent.cpp
View file @
19290bbb
...
...
@@ -203,8 +203,8 @@ void handle_com_passthrough(ThreadContext* context, Client& client, evbuffer* ou
break
;
case
com
:
:
ResponseParser
::
ResponseType
::
A2_response
:
{
com
::
A2R
resp
;
memcpy
(
resp
.
data
,
xdata
.
data
(),
xdata
.
size
());
resp
.
len
=
xdata
.
size
()
&
0xFF
;
com
::
A2R
::
ZoneAndProperties
zps
;
bool
hasMore
=
false
;
com
::
Resp_A2
resp
;
memcpy
(
resp
.
data
,
xdata
.
data
(),
xdata
.
size
());
resp
.
len
=
xdata
.
size
()
&
0xFF
;
com
::
Resp_A2
::
ZoneAndProperties
zps
;
bool
hasMore
=
false
;
if
(
client
.
queryStage
==
QueryStage
::
QueryingZones
&&
resp
.
parse
(
zps
,
hasMore
))
{
for
(
const
auto
&
zp
:
zps
)
{
ZonePropertyAndLostConfig
zplc
;
...
...
@@ -218,10 +218,10 @@ void handle_com_passthrough(ThreadContext* context, Client& client, evbuffer* ou
}
XDataPtr
xdata
;
if
(
hasMore
)
{
// 继续索要剩余防区
com
::
A2
req
;
com
::
Req_
A2
req
;
xdata
=
makeXData
((
const
char
*
)
req
.
data
,
req
.
len
);
}
else
{
// 开始索要防区失联设置
com
::
AC
req
;
com
::
Req_
AC
req
;
xdata
=
makeXData
((
const
char
*
)
req
.
data
,
req
.
len
);
client
.
queryStage
=
QueryStage
::
QueryingLostConfig
;
}
...
...
@@ -254,7 +254,7 @@ void handle_com_passthrough(ThreadContext* context, Client& client, evbuffer* ou
{
if
(
client
.
queryStage
==
QueryStage
::
QueryingTimer
)
{
client
.
queryStage
=
QueryStage
::
None
;
com
::
A6R
resp
;
memcpy
(
resp
.
data
,
xdata
.
data
(),
resp
.
len
);
com
::
Resp_A6
resp
;
memcpy
(
resp
.
data
,
xdata
.
data
(),
resp
.
len
);
client
.
timer
=
resp
.
getTimer
();
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
if
(
com
::
isValidMachineTimer
(
client
.
timer
.
timer
[
i
]))
{
...
...
@@ -286,7 +286,7 @@ void handle_com_passthrough(ThreadContext* context, Client& client, evbuffer* ou
break
;
case
com
:
:
ResponseParser
::
ResponseType
::
AD_response
:
{
com
::
ADR
resp
;
memcpy
(
resp
.
data
,
xdata
.
data
(),
xdata
.
size
());
resp
.
len
=
xdata
.
size
()
&
0xFF
;
com
::
Resp_AD
resp
;
memcpy
(
resp
.
data
,
xdata
.
data
(),
xdata
.
size
());
resp
.
len
=
xdata
.
size
()
&
0xFF
;
bool
hasMore
=
false
;
std
::
vector
<
size_t
>
zones
;
if
(
client
.
queryStage
==
QueryStage
::
QueryingLostConfig
&&
resp
.
parse
(
zones
,
hasMore
))
{
...
...
@@ -300,7 +300,7 @@ void handle_com_passthrough(ThreadContext* context, Client& client, evbuffer* ou
}
XDataPtr
xdata
;
if
(
hasMore
)
{
// 继续索要剩余防区
com
::
A2
req
;
com
::
Req_
A2
req
;
xdata
=
makeXData
((
const
char
*
)
req
.
data
,
req
.
len
);
auto
n
=
context
->
packet
.
make_hb
(
buf
,
sizeof
(
buf
),
client
.
nextSeq
(),
client
.
acct
,
client
.
ademco_id
,
0
,
EVENT_COM_PASSTHROUGH
,
0
,
xdata
);
...
...
@@ -327,7 +327,7 @@ void handle_com_passthrough(ThreadContext* context, Client& client, evbuffer* ou
break
;
case
com
:
:
ResponseParser
::
ResponseType
::
B1_response
:
{
com
::
B1R
b1
;
memcpy
(
b1
.
data
.
data
,
xdata
.
data
(),
xdata
.
size
());
com
::
Resp_B1
b1
;
memcpy
(
b1
.
data
.
data
,
xdata
.
data
(),
xdata
.
size
());
client
.
status1
=
b1
.
data
.
cmd
.
status1
==
0
?
MachineStatus
::
Arm
:
MachineStatus
::
Disarm
;
client
.
status2
=
b1
.
data
.
cmd
.
status2
==
0
?
MachineStatus
::
Arm
:
MachineStatus
::
Disarm
;
client
.
status3
=
b1
.
data
.
cmd
.
status3
==
0
?
MachineStatus
::
Arm
:
MachineStatus
::
Disarm
;
...
...
@@ -367,7 +367,7 @@ void handle_ademco_msg(ThreadContext* context, bufferevent* bev)
if
(
ademco
::
isMachineTypeEvent
(
context
->
packet
.
ademcoData_
.
ademco_event_
))
{
client
.
type
=
context
->
packet
.
ademcoData_
.
ademco_event_
;
if
(
client
.
type
==
EVENT_I_AM_3_SECTION_MACHINE
)
{
// 三区段主机需要主动索要主机状态
com
::
B0
req
;
com
::
Req_
B0
req
;
auto
xdata
=
makeXData
((
const
char
*
)
req
.
data
,
req
.
len
);
auto
n
=
context
->
packet
.
make_hb
(
buf
,
sizeof
(
buf
),
client
.
nextSeq
(),
client
.
acct
,
client
.
ademco_id
,
0
,
EVENT_COM_PASSTHROUGH
,
0
,
xdata
);
...
...
@@ -392,7 +392,7 @@ void handle_ademco_msg(ThreadContext* context, bufferevent* bev)
}
else
if
(
context
->
packet
.
ademcoData_
.
ademco_event_
==
EVENT_ENTER_SET_MODE
)
{
if
(
client
.
queryStage
==
QueryStage
::
WaitingSettingsMode
)
{
client
.
queryStage
=
QueryStage
::
QueryingZones
;
com
::
A1
req
;
com
::
Req_
A1
req
;
auto
xdata
=
makeXData
((
const
char
*
)
req
.
data
,
req
.
len
);
auto
n
=
context
->
packet
.
make_hb
(
buf
,
sizeof
(
buf
),
client
.
nextSeq
(),
client
.
acct
,
client
.
ademco_id
,
0
,
EVENT_COM_PASSTHROUGH
,
0
,
xdata
);
...
...
@@ -404,7 +404,7 @@ void handle_ademco_msg(ThreadContext* context, bufferevent* bev)
}
}
else
if
(
client
.
queryStage
==
QueryStage
::
WaitingSettingsMode2
)
{
client
.
queryStage
=
QueryStage
::
QueryingTimer
;
com
::
A5
req
;
com
::
Req_
A5
req
;
auto
xdata
=
makeXData
((
const
char
*
)
req
.
data
,
req
.
len
);
auto
n
=
context
->
packet
.
make_hb
(
buf
,
sizeof
(
buf
),
client
.
nextSeq
(),
client
.
acct
,
client
.
ademco_id
,
0
,
EVENT_COM_PASSTHROUGH
,
0
,
xdata
);
...
...
include/hb_detail.h
View file @
19290bbb
...
...
@@ -439,7 +439,7 @@ struct MachineStatusRequest3Section {
static
constexpr
const
Char
len
=
6
;
static
constexpr
const
Char
data
[
len
]
=
{
0xEB
,
0xCB
,
0x3F
,
0x06
,
0xB0
,
0xAB
};
};
typedef
MachineStatusRequest3Section
B0
;
typedef
MachineStatusRequest3Section
Req_
B0
;
//! 三区段主机状态回应 EB BA 3F 08 P0 B1 P1 SUM
struct
MachineStatusResponse3Section
{
...
...
@@ -479,14 +479,14 @@ struct MachineStatusResponse3Section {
}
};
static_assert
(
sizeof
(
MachineStatusResponse3Section
)
==
8
,
"sizeof(MachineStatusResponse3Section) must be 8"
);
typedef
MachineStatusResponse3Section
B1R
;
typedef
MachineStatusResponse3Section
Resp_B1
;
//! 索要主机状态 EB AB 3F A0 75
struct
MachineStatusRequest
{
static
constexpr
Char
len
=
5
;
static
constexpr
Char
data
[
len
]
=
{
0xEB
,
0xAB
,
0x3F
,
0xA0
,
0x75
};
};
typedef
MachineStatusRequest
A0
;
typedef
MachineStatusRequest
Req_
A0
;
//! 回应主机状态 EB BA 3F 07 P0 A0 P1 P2 P3 SUM
struct
MachineStatusResponse
{
...
...
@@ -499,14 +499,14 @@ struct MachineStatusResponse {
MachineStatusResponse
&
make
(
MachineStatus
status_
,
MachineType
type_
)
{
status
=
status_
;
type
=
type_
;
return
make
();
}
MachineStatusResponse
&
make
()
{
data
[
6
]
=
(
Char
)
status
;
data
[
7
]
=
type
;
sum
(
this
);
return
*
this
;
}
};
typedef
MachineStatusResponse
A0R
;
typedef
MachineStatusResponse
Resp_A0
;
//! 索要主机防区 EB AB 3F A1 76
struct
ZoneRequest
{
static
constexpr
Char
len
=
5
;
static
constexpr
Char
data
[
len
]
=
{
0xEB
,
0xAB
,
0x3F
,
0xA1
,
0x76
};
};
typedef
ZoneRequest
A1
;
typedef
ZoneRequest
Req_
A1
;
//! 回应主机防区 EB BA 3F PN P0 A2 [Z, P]xN P1 SUM
struct
ZoneResponse
{
...
...
@@ -565,7 +565,7 @@ struct ZoneResponse {
return
true
;
}
};
typedef
ZoneResponse
A2R
;
typedef
ZoneResponse
Resp_A2
;
//! 索要更多主机防区 EB AB 3F A2 77
//! 仅应在收到ZoneResponse的param非0xFF时发送,以索要全部防区
...
...
@@ -573,7 +573,7 @@ struct ZoneRequestMore {
static
constexpr
Char
len
=
5
;
static
constexpr
Char
data
[
len
]
=
{
0xEB
,
0xAB
,
0x3F
,
0xA2
,
0x77
};
};
typedef
ZoneRequestMore
A2
;
typedef
ZoneRequestMore
Req_
A2
;
//! 修改主机防区 EB CB 3F 09 A3 P1 P2 P3 SUM
struct
ZoneOpRequest
{
...
...
@@ -599,7 +599,7 @@ struct ZoneOpRequest {
data
[
5
]
=
zone
;
data
[
6
]
=
prop
;
data
[
7
]
=
op
;
sum
(
this
);
return
*
this
;
}
};
typedef
ZoneOpRequest
A3
;
typedef
ZoneOpRequest
Req_
A3
;
//! 学码开始回应 EB BA 3F 07 P0 A3 5A
//! 因为学码时主机要等待外部无线信号(用户触发探测器),因此先回应A3表示已经开始学码,学码成功时回 ZoneOpResponse A4
...
...
@@ -607,7 +607,7 @@ struct ZoneOpLearningResponse {
static
constexpr
Char
len
=
7
;
Char
data
[
len
]
=
{
0xEB
,
0xBA
,
0x3F
,
0x07
,
0xCC
,
0xA3
,
0x5A
};
};
typedef
ZoneOpLearningResponse
A3R
;
typedef
ZoneOpLearningResponse
Resp_A3
;
//! 修改防区回应 EB BA 3F 0A P0 A4 P1 P2 P3 SUM
struct
ZoneOpResponse
{
...
...
@@ -634,7 +634,7 @@ struct ZoneOpResponse {
data
[
6
]
=
zone
;
data
[
7
]
=
prop
;
data
[
8
]
=
code
;
sum
(
this
);
return
*
this
;
}
};
typedef
ZoneOpResponse
A4R
;
typedef
ZoneOpResponse
Resp_A4
;
struct
Timepoint
{
Char
hour
=
0xFF
,
minute
=
0xFF
;
...
...
@@ -661,7 +661,7 @@ struct MachineTimerRequest {
static
constexpr
Char
len
=
5
;
static
constexpr
Char
data
[
len
]
=
{
0xEB
,
0xAB
,
0x3F
,
0xA5
,
0x7A
};
};
typedef
MachineTimerRequest
A5
;
typedef
MachineTimerRequest
Req_
A5
;
//! 主机定时器回应 EB BA 3F 0F P0 A6 H1 M1 H2 M2 H3 M3 H4 M4 SUM
struct
MachineTimerResponse
{
...
...
@@ -671,7 +671,7 @@ struct MachineTimerResponse {
MachineTimer
getTimer
()
const
{
MachineTimer
t
;
memcpy
(
&
t
.
data
,
&
data
[
6
],
sizeof
(
MachineTimer
));
return
t
;
}
void
setTimer
(
const
MachineTimer
&
t
)
{
memcpy
(
&
data
[
6
],
&
t
.
data
,
sizeof
(
MachineTimer
));
sum
(
this
);
}
};
typedef
MachineTimerResponse
A6R
;
typedef
MachineTimerResponse
Resp_A6
;
//! 设置主机定时器 EB CB 3F 0E A7 H1 M1 H2 M2 H3 M3 H4 M4 SUM
struct
SetMachineTimerRequest
{
...
...
@@ -681,14 +681,14 @@ struct SetMachineTimerRequest {
MachineTimer
getTimer
()
const
{
MachineTimer
t
;
memcpy
(
&
t
.
data
,
&
data
[
5
],
sizeof
(
MachineTimer
));
return
t
;
}
void
setTimer
(
const
MachineTimer
&
t
)
{
memcpy
(
&
data
[
5
],
&
t
,
sizeof
(
MachineTimer
));
sum
(
this
);
}
};
typedef
SetMachineTimerRequest
A7
;
typedef
SetMachineTimerRequest
Req_
A7
;
//! 设置主机定时器回应 EB BA 3F 07 P0 A7 SUM
struct
SetMachineTimerResponse
{
static
constexpr
Char
len
=
7
;
Char
data
[
len
]
=
{
0xEB
,
0xBA
,
0x3F
,
0x07
,
0xCC
,
0xA7
,
0x5E
};
};
typedef
SetMachineTimerResponse
A7R
;
typedef
SetMachineTimerResponse
Resp_A7
;
//! 拒绝设置回应 EB BA 3F 07 P0 A8 SUM
//! 任何操作,主机如果认为非法,都可以用A8直接回复
...
...
@@ -696,7 +696,7 @@ struct RejectResponse {
static
constexpr
Char
len
=
7
;
Char
data
[
len
]
=
{
0xEB
,
0xBA
,
0x3F
,
0x07
,
0xCC
,
0xA8
,
0x5F
};
};
typedef
RejectResponse
A8R
;
typedef
RejectResponse
Resp_A8
;
//! 测试地址
// TODO
...
...
@@ -706,14 +706,14 @@ struct QuerySensorLostSettingsRequest {
static
constexpr
Char
len
=
5
;
static
constexpr
Char
data
[
len
]
=
{
0xEB
,
0xAB
,
0x3F
,
0xAC
,
0x81
};
};
typedef
QuerySensorLostSettingsRequest
AC
;
typedef
QuerySensorLostSettingsRequest
Req_
AC
;
//! 索要防区探头遗失/失联 索要更多 EB AB 3F AD 82
struct
QueryMoreSensorLostSettingsRequest
{
static
constexpr
Char
len
=
5
;
static
constexpr
Char
data
[
len
]
=
{
0xEB
,
0xAB
,
0x3F
,
0xAD
,
0x82
};
};
typedef
QueryMoreSensorLostSettingsRequest
AD
;
typedef
QueryMoreSensorLostSettingsRequest
Req_
AD
;
//! 索要防区探头遗失/失联回应 EB BA 3F PN P0 AD P1 DATA P2 SUM
struct
QuerySensorLostSettingsResponse
{
...
...
@@ -769,7 +769,7 @@ struct QuerySensorLostSettingsResponse {
return
true
;
}
};
typedef
QuerySensorLostSettingsResponse
ADR
;
typedef
QuerySensorLostSettingsResponse
Resp_AD
;
//! 修改防区探头遗失/失联 EB CB 3F 08 AA P1 P2 SUM
struct
ChangeSensorLostSettingsRequest
{
...
...
@@ -781,7 +781,7 @@ struct ChangeSensorLostSettingsRequest {
data
[
5
]
=
zone
;
data
[
6
]
=
on
;
sum
(
data
,
len
);
}
};
typedef
ChangeSensorLostSettingsRequest
AA
;
typedef
ChangeSensorLostSettingsRequest
Req_
AA
;
//! 修改防区探头遗失/失联回应 EB BA 3F 09 P0 AB P1 P2 SUM
struct
ChangeSensorLostSettingsResponse
{
...
...
@@ -793,7 +793,7 @@ struct ChangeSensorLostSettingsResponse {
data
[
6
]
=
zone
;
data
[
7
]
=
p2
;
sum
(
data
,
len
);
}
};
typedef
ChangeSensorLostSettingsResponse
ABR
;
typedef
ChangeSensorLostSettingsResponse
Resp_AB
;
//! 解析 Request
...
...
@@ -826,38 +826,38 @@ struct RequestParser {
switch
(
data
[
3
])
{
case
0xA0
:
// EB AB 3F A0 75
{
if
(
len
!=
A0
::
len
)
{
break
;
}
if
(
memcmp
(
A0
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
if
(
len
!=
Req_
A0
::
len
)
{
break
;
}
if
(
memcmp
(
Req_
A0
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
return
RequestType
::
A0_request
;
}
case
0xA1
:
// EB AB 3F A1 76
{
if
(
len
!=
A1
::
len
)
{
break
;
}
if
(
memcmp
(
A1
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
if
(
len
!=
Req_
A1
::
len
)
{
break
;
}
if
(
memcmp
(
Req_
A1
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
return
RequestType
::
A1_request
;
}
case
0xA2
:
// EB AB 3F A2 77
{
if
(
len
!=
A2
::
len
)
{
break
;
}
if
(
memcmp
(
A2
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
if
(
len
!=
Req_
A2
::
len
)
{
break
;
}
if
(
memcmp
(
Req_
A2
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
return
RequestType
::
A2_request
;
}
case
0xA5
:
// EB AB 3F A5 7A
{
if
(
len
!=
A5
::
len
)
{
break
;
}
if
(
memcmp
(
A5
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
if
(
len
!=
Req_
A5
::
len
)
{
break
;
}
if
(
memcmp
(
Req_
A5
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
return
RequestType
::
A5_request
;
}
case
0xAC
:
// EB AB 3F AC 81
{
if
(
len
!=
AC
::
len
)
{
break
;
}
if
(
memcmp
(
AC
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
if
(
len
!=
Req_
AC
::
len
)
{
break
;
}
if
(
memcmp
(
Req_
AC
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
return
RequestType
::
AC_request
;
}
case
0xAD
:
// EB AB 3F AD 82
{
if
(
len
!=
AD
::
len
)
{
break
;
}
if
(
memcmp
(
AD
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
if
(
len
!=
Req_
AD
::
len
)
{
break
;
}
if
(
memcmp
(
Req_
AD
::
data
,
data
,
len
)
!=
0
)
{
break
;
}
return
RequestType
::
AD_request
;
}
...
...
@@ -879,8 +879,8 @@ struct RequestParser {
if
(
data
[
2
]
!=
0x3F
)
{
break
;
}
// EB CB 3F 09 A3 P1 P2 P3 SUM
if
(
data
[
3
]
==
0x09
&&
data
[
4
]
==
0xA3
&&
len
==
A3
::
len
)
{
A3
req
;
memcpy
(
req
.
data
,
data
,
len
);
sum
(
req
);
if
(
data
[
3
]
==
0x09
&&
data
[
4
]
==
0xA3
&&
len
==
Req_
A3
::
len
)
{
Req_
A3
req
;
memcpy
(
req
.
data
,
data
,
len
);
sum
(
req
);
if
(
data
[
len
-
1
]
==
req
.
data
[
len
-
1
])
{
return
RequestType
::
A3_request
;
}
}
...
...
@@ -890,8 +890,8 @@ struct RequestParser {
}
// EB CB 3F 0E A7 H1 M1 H2 M2 H3 M3 H4 M4 SUM
if
(
data
[
3
]
==
0x0E
&&
data
[
4
]
==
0xA7
&&
len
==
A7
::
len
)
{
A7
req
;
memcpy
(
req
.
data
,
data
,
req
.
len
);
sum
(
req
);
if
(
data
[
3
]
==
0x0E
&&
data
[
4
]
==
0xA7
&&
len
==
Req_
A7
::
len
)
{
Req_
A7
req
;
memcpy
(
req
.
data
,
data
,
req
.
len
);
sum
(
req
);
if
(
data
[
len
-
1
]
==
req
.
data
[
len
-
1
])
{
return
RequestType
::
A7_request
;
}
}
...
...
@@ -901,8 +901,8 @@ struct RequestParser {
}*/
// EB CB 3F 08 AA P1 P2 SUM
if
(
data
[
3
]
==
0x08
&&
data
[
4
]
==
0xAA
&&
len
==
AA
::
len
)
{
AA
req
;
memcpy
(
req
.
data
,
data
,
req
.
len
);
sum
(
req
);
if
(
data
[
3
]
==
0x08
&&
data
[
4
]
==
0xAA
&&
len
==
Req_
AA
::
len
)
{
Req_
AA
req
;
memcpy
(
req
.
data
,
data
,
req
.
len
);
sum
(
req
);
if
(
data
[
len
-
1
]
==
req
.
data
[
len
-
1
])
{
return
RequestType
::
AA_request
;
}
}
...
...
@@ -912,7 +912,7 @@ struct RequestParser {
}*/
// EB CB 3F 06 B0 AB
if
(
data
[
3
]
==
0x06
&&
data
[
4
]
==
0xB0
&&
len
==
B0
::
len
&&
memcmp
(
B0
::
data
,
data
,
len
)
==
0
)
{
if
(
data
[
3
]
==
0x06
&&
data
[
4
]
==
0xB0
&&
len
==
Req_B0
::
len
&&
memcmp
(
Req_
B0
::
data
,
data
,
len
)
==
0
)
{
return
RequestType
::
B0_request
;
}
}
...
...
@@ -948,8 +948,8 @@ struct ResponseParser {
switch
(
data
[
5
])
{
case
0xA0
:
// EB BA 3F 07 P0 A0 P1 P2 P3 SUM
{
if
(
len
!=
A0R
::
len
)
{
break
;
}
A0R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_A0
::
len
)
{
break
;
}
Resp_A0
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A0_response
;
}
...
...
@@ -957,47 +957,47 @@ struct ResponseParser {
case
0xA2
:
// EB BA 3F PN P0 A2 [Z, P]xN P1 SUM
{
if
(
len
!=
data
[
3
])
{
break
;
}
A2R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
Resp_A2
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A2_response
;
}
case
0xA3
:
{
if
(
len
!=
A3R
::
len
)
{
break
;
}
A3R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_A3
::
len
)
{
break
;
}
Resp_A3
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A3_response
;
}
case
0xA4
:
{
if
(
len
!=
A4R
::
len
)
{
break
;
}
A4R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_A4
::
len
)
{
break
;
}
Resp_A4
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A4_response
;
}
case
0xA6
:
{
if
(
len
!=
A6R
::
len
)
{
break
;
}
A6R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_A6
::
len
)
{
break
;
}
Resp_A6
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A6_response
;
}
case
0xA7
:
{
if
(
len
!=
A7R
::
len
)
{
break
;
}
A7R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_A7
::
len
)
{
break
;
}
Resp_A7
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A7_response
;
}
case
0xA8
:
{
if
(
len
!=
A8R
::
len
)
{
break
;
}
A8R
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_A8
::
len
)
{
break
;
}
Resp_A8
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
A8_response
;
}
...
...
@@ -1009,8 +1009,8 @@ struct ResponseParser {
case
0xAB
:
{
if
(
len
!=
ABR
::
len
)
{
break
;
}
ABR
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
len
!=
Resp_AB
::
len
)
{
break
;
}
Resp_AB
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
AB_response
;
}
...
...
@@ -1018,7 +1018,7 @@ struct ResponseParser {
case
0xAD
:
// EB BA 3F PN P0 AD P1 DATA P2 SUM
{
if
(
len
!=
data
[
3
])
{
break
;
}
ADR
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
sum
(
resp
);
Resp_AD
resp
;
memcpy
(
resp
.
data
,
data
,
len
);
sum
(
resp
);
sum
(
resp
);
if
(
resp
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
AD_response
;
}
...
...
@@ -1031,8 +1031,8 @@ struct ResponseParser {
case
0xB1
:
// EB BA 3F 08 P0 B1 P1 SUM
{
if
(
len
!=
B1R
::
len
)
{
break
;
}
B1R
resp
;
memcpy
(
resp
.
data
.
data
,
data
,
len
);
sum
(
resp
.
data
.
data
,
resp
.
len
);
if
(
len
!=
Resp_B1
::
len
)
{
break
;
}
Resp_B1
resp
;
memcpy
(
resp
.
data
.
data
,
data
,
len
);
sum
(
resp
.
data
.
data
,
resp
.
len
);
if
(
resp
.
data
.
data
[
len
-
1
]
!=
data
[
len
-
1
])
{
break
;
}
return
ResponseType
::
B1_response
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment