1
1
/*
2
- * Copyright (c) 2022-2023 Arm Limited. All rights reserved.
2
+ * Copyright (c) 2022-2024 Arm Limited. All rights reserved.
3
3
*
4
4
* SPDX-License-Identifier: Apache-2.0
5
5
*
@@ -41,8 +41,6 @@ typedef struct {
41
41
uint32_t buf_size ;
42
42
sdsId_t stream ;
43
43
sdsioId_t sdsio ;
44
- volatile uint32_t cnt_in ;
45
- volatile uint32_t cnt_out ;
46
44
} sdsRec_t ;
47
45
48
46
static sdsRec_t RecStreams [SDS_REC_MAX_STREAMS ] = {0 };
@@ -55,7 +53,7 @@ typedef struct {
55
53
} RecHead_t ;
56
54
57
55
// Record buffer
58
- static uint8_t RecBuf [SDS_REC_MAX_RECORD_SIZE ];
56
+ static uint8_t RecBuf [SDS_REC_BUF_SIZE ];
59
57
60
58
// Event callback
61
59
static sdsRecEvent_t sdsRecEvent = NULL ;
@@ -149,7 +147,6 @@ static void sdsRecEventCallback (sdsId_t id, uint32_t event, void *arg) {
149
147
// Recorder thread
150
148
static __NO_RETURN void sdsRecThread (void * arg ) {
151
149
sdsRec_t * rec ;
152
- RecHead_t rec_head ;
153
150
uint32_t flags , cnt , n ;
154
151
155
152
(void )arg ;
@@ -168,22 +165,22 @@ static __NO_RETURN void sdsRecThread (void *arg) {
168
165
if ((rec -> flags & SDS_REC_FLAG_CLOSE ) != 0U ) {
169
166
continue ;
170
167
}
171
- while (rec -> cnt_out != rec -> cnt_in ) {
172
- cnt = sdsRead (rec -> stream , & rec_head , sizeof (RecHead_t ));
173
- if (cnt == sizeof (RecHead_t )) {
174
- memcpy (RecBuf , & rec_head , sizeof (RecHead_t ));
175
- cnt = sdsRead (rec -> stream , RecBuf + sizeof (RecHead_t ), rec_head .data_size );
176
- rec -> cnt_out ++ ;
177
- if (cnt == rec_head .data_size ) {
178
- cnt += sizeof (RecHead_t );
179
- if (sdsioWrite (rec -> sdsio , RecBuf , cnt ) != cnt ) {
180
- if (sdsRecEvent != NULL ) {
181
- sdsRecEvent (rec , SDS_REC_EVENT_IO_ERROR );
182
- }
183
- }
168
+
169
+ cnt = sdsGetCount (rec -> stream );
170
+ while (cnt != 0U ) {
171
+ if (cnt > sizeof (RecBuf )) {
172
+ cnt = sizeof (RecBuf );
173
+ }
174
+ sdsRead (rec -> stream , RecBuf , cnt );
175
+ if (sdsioWrite (rec -> sdsio , RecBuf , cnt ) != cnt ) {
176
+ if (sdsRecEvent != NULL ) {
177
+ sdsRecEvent (rec , SDS_REC_EVENT_IO_ERROR );
184
178
}
179
+ break ;
185
180
}
181
+ cnt = sdsGetCount (rec -> stream );
186
182
}
183
+
187
184
if (rec -> event_close != 0U ) {
188
185
rec -> flags |= SDS_REC_FLAG_CLOSE ;
189
186
osEventFlagsSet (sdsRecCloseEventFlags , 1U << rec -> index );
@@ -232,7 +229,7 @@ sdsRecId_t sdsRecOpen (const char *name, void *buf, uint32_t buf_size, uint32_t
232
229
uint32_t index ;
233
230
234
231
if ((name != NULL ) && (buf != NULL ) && (buf_size != 0U ) &&
235
- (buf_size <= SDS_REC_MAX_RECORD_SIZE ) && (io_threshold <= buf_size )) {
232
+ (buf_size <= SDS_REC_BUF_SIZE ) && (io_threshold <= buf_size )) {
236
233
237
234
rec = sdsRecAlloc (& index );
238
235
if (rec != NULL ) {
@@ -241,8 +238,6 @@ sdsRecId_t sdsRecOpen (const char *name, void *buf, uint32_t buf_size, uint32_t
241
238
rec -> event_close = 0U ;
242
239
rec -> flags = 0U ;
243
240
rec -> buf_size = buf_size ;
244
- rec -> cnt_in = 0U ;
245
- rec -> cnt_out = 0U ;
246
241
rec -> stream = sdsOpen (buf , buf_size , 0U , io_threshold );
247
242
rec -> sdsio = sdsioOpen (name , sdsioModeWrite );
248
243
@@ -300,7 +295,6 @@ uint32_t sdsRecWrite (sdsRecId_t id, uint32_t timestamp, const void *buf, uint32
300
295
rec_head .data_size = buf_size ;
301
296
if (sdsWrite (rec -> stream , & rec_head , sizeof (RecHead_t )) == sizeof (RecHead_t )) {
302
297
num = sdsWrite (rec -> stream , buf , buf_size );
303
- rec -> cnt_in ++ ;
304
298
if (num == buf_size ) {
305
299
if (rec -> event_threshold != 0U ) {
306
300
rec -> event_threshold = 0U ;
0 commit comments