@@ -121,71 +121,69 @@ static void btuart_rxwork(FAR void *arg)
121
121
* Read the first byte to get the packet type.
122
122
*/
123
123
124
- nread = btuart_read (upper , data , H4_HEADER_SIZE , 0 );
125
- if (nread != H4_HEADER_SIZE )
124
+ while (true)
126
125
{
127
- wlwarn ("WARNING: Unable to read H4 packet type: %zd\n" , nread );
128
- goto errout_with_busy ;
129
- }
126
+ nread = btuart_read (upper , data , H4_HEADER_SIZE , 0 );
127
+ if (nread != H4_HEADER_SIZE )
128
+ {
129
+ wlwarn ("WARNING: Unable to read H4 packet type: %zd\n" , nread );
130
+ break ;
131
+ }
130
132
131
- if (data [0 ] == H4_EVT )
132
- {
133
- hdrlen = sizeof (struct bt_hci_evt_hdr_s );
134
- }
135
- else if (data [0 ] == H4_ACL )
136
- {
137
- hdrlen = sizeof (struct bt_hci_acl_hdr_s );
138
- }
139
- else
140
- {
141
- wlerr ("ERROR: Unknown H4 type %u\n" , data [0 ]);
142
- goto errout_with_busy ;
143
- }
133
+ if (data [0 ] == H4_EVT )
134
+ {
135
+ hdrlen = sizeof (struct bt_hci_evt_hdr_s );
136
+ }
137
+ else if (data [0 ] == H4_ACL )
138
+ {
139
+ hdrlen = sizeof (struct bt_hci_acl_hdr_s );
140
+ }
141
+ else
142
+ {
143
+ wlerr ("ERROR: Unknown H4 type %u\n" , data [0 ]);
144
+ break ;
145
+ }
144
146
145
- nread = btuart_read (upper , data + H4_HEADER_SIZE ,
146
- hdrlen , hdrlen );
147
- if (nread != hdrlen )
148
- {
149
- wlwarn ("WARNING: Unable to read H4 packet header: %zd\n" , nread );
150
- goto errout_with_busy ;
151
- }
147
+ nread = btuart_read (upper , data + H4_HEADER_SIZE ,
148
+ hdrlen , hdrlen );
149
+ if (nread != hdrlen )
150
+ {
151
+ wlwarn ("WARNING: Unable to read H4 packet header: %zd\n" , nread );
152
+ break ;
153
+ }
152
154
153
- hdr = (FAR void * )(data + H4_HEADER_SIZE );
155
+ hdr = (FAR void * )(data + H4_HEADER_SIZE );
154
156
155
- if (data [0 ] == H4_EVT )
156
- {
157
- pktlen = hdr -> evt .len ;
158
- type = BT_EVT ;
159
- }
160
- else if (data [0 ] == H4_ACL )
161
- {
162
- pktlen = hdr -> acl .len ;
163
- type = BT_ACL_IN ;
164
- }
165
- else
166
- {
167
- wlerr ("ERROR: Unknown H4 type %u\n" , data [0 ]);
168
- goto errout_with_busy ;
169
- }
170
-
171
- nread = btuart_read (upper , data + H4_HEADER_SIZE + hdrlen ,
172
- pktlen , pktlen );
173
- if (nread != pktlen )
174
- {
175
- wlwarn ("WARNING: Unable to read H4 packet: %zd\n" , nread );
176
- goto errout_with_busy ;
177
- }
157
+ if (data [0 ] == H4_EVT )
158
+ {
159
+ pktlen = hdr -> evt .len ;
160
+ type = BT_EVT ;
161
+ }
162
+ else if (data [0 ] == H4_ACL )
163
+ {
164
+ pktlen = hdr -> acl .len ;
165
+ type = BT_ACL_IN ;
166
+ }
167
+ else
168
+ {
169
+ wlerr ("ERROR: Unknown H4 type %u\n" , data [0 ]);
170
+ break ;
171
+ }
178
172
179
- /* Pass buffer to the stack */
173
+ nread = btuart_read (upper , data + H4_HEADER_SIZE + hdrlen ,
174
+ pktlen , pktlen );
175
+ if (nread != pktlen )
176
+ {
177
+ wlwarn ("WARNING: Unable to read H4 packet: %zd\n" , nread );
178
+ break ;
179
+ }
180
180
181
- BT_DUMP ("Received" , data , H4_HEADER_SIZE + hdrlen + pktlen );
182
- upper -> busy = false;
183
- bt_netdev_receive (& upper -> dev , type , data + H4_HEADER_SIZE ,
184
- hdrlen + pktlen );
185
- return ;
181
+ /* Pass buffer to the stack */
186
182
187
- errout_with_busy :
188
- upper -> busy = false;
183
+ BT_DUMP ("Received" , data , H4_HEADER_SIZE + hdrlen + pktlen );
184
+ bt_netdev_receive (& upper -> dev , type , data + H4_HEADER_SIZE ,
185
+ hdrlen + pktlen );
186
+ }
189
187
}
190
188
191
189
static void btuart_rxcallback (FAR const struct btuart_lowerhalf_s * lower ,
@@ -196,15 +194,10 @@ static void btuart_rxcallback(FAR const struct btuart_lowerhalf_s *lower,
196
194
DEBUGASSERT (lower != NULL && arg != NULL );
197
195
upper = (FAR struct btuart_upperhalf_s * )arg ;
198
196
199
- if (!upper -> busy )
197
+ int ret = work_queue (HPWORK , & upper -> work , btuart_rxwork , arg , 0 );
198
+ if (ret < 0 )
200
199
{
201
- upper -> busy = true;
202
- int ret = work_queue (HPWORK , & upper -> work , btuart_rxwork , arg , 0 );
203
- if (ret < 0 )
204
- {
205
- upper -> busy = false;
206
- wlerr ("ERROR: work_queue failed: %d\n" , ret );
207
- }
200
+ wlerr ("ERROR: work_queue failed: %d\n" , ret );
208
201
}
209
202
}
210
203
0 commit comments