-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathGyroGloveIMUPacket.m
78 lines (70 loc) · 2.43 KB
/
GyroGloveIMUPacket.m
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
classdef GyroGloveIMUPacket < handle
%UNTITLED Summary of this class goes here
% Detailed explanation goes here
properties
state
type
ID
bytes
CRC
WD
data = []
end
methods
function obj = GyroGloveIMUPacket()
obj.state = PkState.sStart;
end
function getChars(obj,ser)
if ser.BytesAvailable
switch(obj.state)
case PkState.sStart
c = fread(ser,1);
if c == 'S'
obj.state = PkState.sFndN;
end
case PkState.sFndN
c = fread(ser,1);
if c == 'N'
obj.state = PkState.sFndP;
else
obj.stae = PkState.sStart;
end
case PkState.sFndP
c = fread(ser,1);
if c == 'P'
obj.state = PkState.sPkType;
else
obj.state = PkState.sStart;
end
case PkState.sPkType
c = fread(ser,1);
obj.type = int32(c);
obj.state = PkState.sPkID;
case PkState.sPkID
c = fread(ser,1);
obj.ID = int32(c);
obj.state = PkState.sPkSize;
case PkState.sPkSize
c = fread(ser,1);
obj.bytes = double(c);
obj.state = PkState.sPkData;
case PkState.sPkData
d = fread(ser,obj.bytes/2,'int16');
obj.data = swapbytes(int16(d));
obj.state = PkState.sPkCRC;
case PkState.sPkCRC
obj.WD = fread(ser,1);
obj.CRC = swapbytes(uint16(fread(ser,1,'uint16')));
obj.state = PkState.sPkDone;
end
end
end
function v = validPacket(obj)
if obj.state == PkState.sPkDone
v = true;
else
v = false;
end
end
end
end