56
56
*/
57
57
58
58
#define TEST_DOMAIN 0
59
- #define TEST_STAYTIMEOUT 100 /* in ms */
60
- #define TEST_WAITTIME 10000 /* in us */
59
+ #define TEST_STAYTIMEOUT 10 /* in ms */
60
+ #define TEST_WAITTIME 1000 /* in us */
61
61
62
62
/****************************************************************************
63
63
* Private Functions Prototypes
@@ -150,16 +150,14 @@ static void test_pm_callback_notify(FAR struct pm_callback_s *cb,
150
150
151
151
static void test_pm (FAR void * * argv )
152
152
{
153
- int ret ;
154
- int cnt ;
155
- int domain ;
156
- int staycount ;
153
+ int persist_stay_cnt [PM_COUNT ];
157
154
int init_delay ;
155
+ int staycount ;
156
+ int target ;
158
157
bool check ;
159
-
160
- ret = 0 ;
161
- cnt = TEST_PM_LOOP_COUNT ;
162
- domain = TEST_DOMAIN ;
158
+ int domain = TEST_DOMAIN ;
159
+ int ret = 0 ;
160
+ int cnt = TEST_PM_LOOP_COUNT ;
163
161
164
162
if (CONFIG_PM_GOVERNOR_EXPLICIT_RELAX < 0 )
165
163
{
@@ -173,51 +171,64 @@ static void test_pm(FAR void **argv)
173
171
CONFIG_SERIAL_PM_ACTIVITY_PRIORITY );
174
172
}
175
173
174
+ usleep (init_delay * 1000000 );
175
+ usleep (TEST_WAITTIME );
176
+
177
+ for (int i = 0 ; i < PM_COUNT ; i ++ )
178
+ {
179
+ persist_stay_cnt [i ] = pm_staycount (domain , i );
180
+ }
181
+
176
182
while (cnt -- )
177
183
{
178
184
ret = pm_domain_register (domain , & g_test_pm_callback );
179
185
assert_int_equal (ret , 0 );
180
186
181
- usleep (init_delay * 1000000 );
182
-
183
187
/* test when pm prepare failed */
184
188
185
189
g_test_pm_dev .prepare_fail = true;
186
190
for (int state = 0 ; state < PM_COUNT ; state ++ )
187
191
{
188
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 0 , check );
192
+ target = persist_stay_cnt [state ] + 0 ;
193
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
189
194
190
195
pm_stay (domain , state );
191
196
usleep (TEST_WAITTIME );
192
197
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
193
198
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
194
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 1 , check );
199
+ target = persist_stay_cnt [state ] + 1 ;
200
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
195
201
196
202
pm_staytimeout (domain , state , TEST_STAYTIMEOUT );
197
203
usleep (TEST_WAITTIME );
198
204
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
199
205
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
200
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 2 , check );
206
+ target = persist_stay_cnt [state ] + 2 ;
207
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
201
208
usleep (TEST_STAYTIMEOUT * 1000 );
202
209
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
203
210
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
204
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 1 , check );
211
+ target = persist_stay_cnt [state ] + 1 ;
212
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
205
213
206
214
pm_relax (domain , state );
207
215
usleep (TEST_WAITTIME );
208
216
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
209
217
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
210
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 0 , check );
218
+ target = persist_stay_cnt [state ] + 0 ;
219
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
211
220
212
221
pm_staytimeout (domain , state , TEST_STAYTIMEOUT );
213
222
usleep (TEST_WAITTIME );
214
223
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
215
224
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
216
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 1 , check );
225
+ target = persist_stay_cnt [state ] + 1 ;
226
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
217
227
usleep (TEST_STAYTIMEOUT * 1000 );
218
228
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
219
229
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
220
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 0 , check );
230
+ target = persist_stay_cnt [state ] + 0 ;
231
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
221
232
}
222
233
223
234
for (int state = 0 ; state < PM_COUNT ; state ++ )
@@ -270,39 +281,46 @@ static void test_pm(FAR void **argv)
270
281
271
282
for (int state = 0 ; state < PM_COUNT ; state ++ )
272
283
{
273
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 0 , check );
284
+ target = persist_stay_cnt [state ] + 0 ;
285
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
274
286
275
287
pm_stay (domain , state );
276
288
usleep (TEST_WAITTIME );
277
289
assert_int_equal (g_test_pm_dev .state , state );
278
290
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), state , check );
279
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 1 , check );
291
+ target = persist_stay_cnt [state ] + 1 ;
292
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
280
293
281
294
pm_staytimeout (domain , state , TEST_STAYTIMEOUT );
282
295
usleep (TEST_WAITTIME );
283
296
assert_int_equal (g_test_pm_dev .state , state );
284
297
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), state , check );
285
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 2 , check );
298
+ target = persist_stay_cnt [state ] + 2 ;
299
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
286
300
usleep (TEST_STAYTIMEOUT * 1000 );
287
301
assert_int_equal (g_test_pm_dev .state , state );
288
302
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), state , check );
289
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 1 , check );
303
+ target = persist_stay_cnt [state ] + 1 ;
304
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
290
305
291
306
pm_relax (domain , state );
292
307
usleep (TEST_WAITTIME );
293
308
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
294
309
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
295
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 0 , check );
310
+ target = persist_stay_cnt [state ] + 0 ;
311
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
296
312
297
313
pm_staytimeout (domain , state , TEST_STAYTIMEOUT );
298
314
usleep (TEST_WAITTIME );
299
315
assert_int_equal (g_test_pm_dev .state , state );
300
316
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), state , check );
301
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 1 , check );
317
+ target = persist_stay_cnt [state ] + 1 ;
318
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
302
319
usleep (TEST_STAYTIMEOUT * 1000 );
303
320
assert_int_equal (g_test_pm_dev .state , PM_SLEEP );
304
321
ASSERT_EQUAL_IF_CHECK (pm_querystate (domain ), PM_SLEEP , check );
305
- ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), 0 , check );
322
+ target = persist_stay_cnt [state ] + 0 ;
323
+ ASSERT_EQUAL_IF_CHECK (pm_staycount (domain , state ), target , check );
306
324
}
307
325
308
326
for (int state = 0 ; state < PM_COUNT ; state ++ )
0 commit comments