5
5
using System . Text ;
6
6
using System . Text . RegularExpressions ;
7
7
8
+ public enum BluetoothState {
9
+ UNABLE_TO_CONNECT = 1 ,
10
+ STATE_CONNECTING = 2 ,
11
+ STATE_CONNECTED = 3
12
+ }
13
+
8
14
public interface IBtObserver {
9
15
void OnStateChanged ( string _State ) ;
10
16
void OnSendMessage ( string _Message ) ;
11
- void OnGetMessage ( byte [ ] _packet ) ;
17
+ void OnReadPacket ( byte [ ] _Packet ) ;
12
18
void OnFoundNoDevice ( ) ;
13
19
void OnScanFinish ( ) ;
14
20
void OnFoundDevice ( ) ;
15
21
}
16
22
17
23
public abstract class BtObservable : MonoBehaviour {
18
24
protected List < IBtObserver > observerList ;
19
- public abstract void AddObserver ( IBtObserver _btObserver ) ;
20
- public abstract void RemoveObserver ( IBtObserver _btObserver ) ;
25
+ public abstract void AddObserver ( IBtObserver _BTObserver ) ;
26
+ public abstract void RemoveObserver ( IBtObserver _BTObserver ) ;
21
27
}
22
28
23
29
public class BluetoothModel : BtObservable {
24
30
25
31
private Bluetooth bluetooth ;
26
32
27
- [ SerializeField ]
28
- private int packetSize = 34 ;
29
- [ SerializeField ]
30
- private char startChar = '$' ;
31
- [ SerializeField ]
32
- private char endChar = '#' ;
33
+ [ SerializeField ] private bool isPacketedData = true ;
34
+ [ SerializeField ] private int packetSize = 34 ;
35
+ [ SerializeField ] private char startChar = '$' ;
36
+ [ SerializeField ] private char endChar = '#' ;
33
37
34
- private List < byte > buffer = null ;
35
- private bool updateQueue = false ;
38
+ private List < byte > byteBuffer = null ;
36
39
37
40
public List < string > macAddresses = null ;
38
- private StringBuilder rawMessage = null ;
41
+
42
+ private bool isSearchFinished = true ;
39
43
40
44
private void Awake ( ) {
41
45
this . bluetooth = Bluetooth . getInstance ( ) ;
42
46
43
47
this . observerList = new List < IBtObserver > ( ) ;
44
48
this . macAddresses = new List < string > ( ) ;
45
49
46
- this . buffer = new List < byte > ( ) ;
50
+ this . byteBuffer = new List < byte > ( ) ;
51
+ }
52
+
53
+ private void CheckBuffer ( ) {
54
+ Debug . Log ( "-- start check -- " ) ;
55
+ if ( isPacketedData ) {
56
+
57
+ // Check until buffer size less then packetSize
58
+ while ( byteBuffer . Count >= packetSize ) {
59
+ // is Packet?
60
+ if ( Convert . ToChar ( byteBuffer [ 0 ] ) == startChar && Convert . ToChar ( byteBuffer [ packetSize - 1 ] ) == endChar ) {
61
+ for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
62
+ this . observerList [ i ] . OnReadPacket ( byteBuffer . GetRange ( 0 , packetSize ) . ToArray ( ) ) ;
63
+ }
64
+ byteBuffer . RemoveRange ( 0 , packetSize ) ;
65
+ }
66
+ else {
67
+ byteBuffer . RemoveAt ( 0 ) ;
68
+ }
69
+ }
70
+ }
71
+ else {
72
+ // Check data contain escape sqence '\n'
73
+ if ( byteBuffer . Contains ( ( byte ) '\n ' ) ) {
74
+ int sliceIndex = byteBuffer . IndexOf ( ( byte ) '\n ' ) ;
75
+ for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
76
+ this . observerList [ i ] . OnReadPacket ( byteBuffer . GetRange ( 0 , sliceIndex + 1 ) . ToArray ( ) ) ;
77
+ }
78
+ byteBuffer . RemoveRange ( 0 , sliceIndex + 1 ) ;
79
+ }
80
+ else {
81
+ // Do nothing
82
+ }
83
+ }
47
84
}
48
85
49
- public void clearMacAddresses ( ) {
86
+ public void ClearMacAddresses ( ) {
50
87
macAddresses . Clear ( ) ;
51
88
}
52
89
@@ -68,49 +105,62 @@ public override void RemoveObserver(IBtObserver _btObserver) {
68
105
// Receive Bluetooth Call Back Method
69
106
// ========================================
70
107
71
- void OnStateChanged ( string _State ) {
72
- //"STATE_CONNECTED"
73
- //"STATE_CONNECTING"
74
- //"UNABLE TO CONNECT"
108
+ void OnStateChanged ( string _state ) {
75
109
for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
76
- this . observerList [ i ] . OnStateChanged ( _State ) ;
110
+ this . observerList [ i ] . OnStateChanged ( _state ) ;
77
111
}
78
- Debug . Log ( _State ) ;
112
+
113
+ Debug . Log ( "[BlueToothPlugin] - " + _state ) ;
79
114
}
80
115
81
116
void OnSendMessage ( string _Message ) {
82
117
for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
83
118
this . observerList [ i ] . OnSendMessage ( _Message ) ;
84
119
}
85
- Debug . Log ( "On Send Message : " + _Message ) ;
120
+
121
+ Debug . Log ( "[BlueToothPlugin] - On Send Message : " + _Message ) ;
86
122
}
87
123
88
124
void OnReadMessage ( string _Message ) {
89
125
byte [ ] temp = bluetooth . GetPacketData ( ) ;
90
- for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
91
- this . observerList [ i ] . OnGetMessage ( temp ) ;
92
- }
126
+
127
+ this . byteBuffer . AddRange ( temp ) ;
128
+ this . CheckBuffer ( ) ;
129
+
130
+ Debug . Log ( "[BlueToothPlugin] - On Read Message : " + _Message ) ;
93
131
}
94
132
95
133
void OnFoundNoDevice ( string _s ) {
96
134
for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
97
135
this . observerList [ i ] . OnFoundNoDevice ( ) ;
98
136
}
99
- Debug . Log ( "On Found No Device" ) ;
137
+
138
+ Debug . Log ( "[BlueToothPlugin] - On Found No Device" ) ;
100
139
}
101
140
102
141
void OnScanFinish ( string _s ) {
142
+
143
+ this . isSearchFinished = true ;
144
+
103
145
for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
104
146
this . observerList [ i ] . OnScanFinish ( ) ;
105
147
}
106
- Debug . Log ( "On Scan Finish" ) ;
148
+
149
+ Debug . Log ( "[BlueToothPlugin] - On Scan Finish" ) ;
107
150
}
108
151
109
152
void OnFoundDevice ( string _Device ) {
153
+ if ( this . isSearchFinished ) {
154
+ this . macAddresses . Clear ( ) ;
155
+ this . isSearchFinished = false ;
156
+ }
157
+
110
158
this . macAddresses . Add ( _Device ) ;
159
+
111
160
for ( int i = 0 ; i < this . observerList . Count ; ++ i ) {
112
161
this . observerList [ i ] . OnFoundDevice ( ) ;
113
162
}
114
- Debug . Log ( "On Found Device" ) ;
163
+
164
+ Debug . Log ( "[BlueToothPlugin] - On Found Device" ) ;
115
165
}
116
166
}
0 commit comments