Skip to content

Commit f5584b8

Browse files
MaureenHelmcarlescufi
authored andcommitted
tests: counter: Adapt test for the mcux rtc driver
The mcux rtc hardware supports a single alarm only and a fixed top value, so restructure the counter_basic_api test to skip unsupported features. Signed-off-by: Maureen Helm <[email protected]>
1 parent d8ad0c9 commit f5584b8

File tree

1 file changed

+56
-16
lines changed

1 file changed

+56
-16
lines changed

tests/drivers/counter/counter_basic_api/src/test_counter.c

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ static void top_handler(struct device *dev, void *user_data);
1515

1616
void *exp_user_data = (void *)199;
1717

18+
#ifdef CONFIG_COUNTER_MCUX_RTC
19+
#define COUNTER_PERIOD_US (2*USEC_PER_SEC)
20+
#else
1821
#define COUNTER_PERIOD_US 20000
22+
#endif
1923

2024
struct counter_alarm_cfg alarm_cfg;
2125
struct counter_alarm_cfg alarm_cfg2;
@@ -52,6 +56,9 @@ const char *devices[] = {
5256
#ifdef CONFIG_COUNTER_IMX_EPIT_2
5357
EPIT_2_LABEL,
5458
#endif
59+
#ifdef DT_RTC_MCUX_0_NAME
60+
DT_RTC_MCUX_0_NAME,
61+
#endif
5562
};
5663
typedef void (*counter_test_func_t)(const char *dev_name);
5764

@@ -123,7 +130,11 @@ void test_set_top_value_with_alarm_instance(const char *dev_name)
123130

124131
void test_set_top_value_with_alarm(void)
125132
{
133+
#ifdef CONFIG_COUNTER_MCUX_RTC
134+
ztest_test_skip();
135+
#else
126136
test_all_instances(test_set_top_value_with_alarm_instance);
137+
#endif
127138
}
128139

129140
static void alarm_handler(struct device *dev, u8_t chan_id, u32_t counter,
@@ -133,7 +144,7 @@ static void alarm_handler(struct device *dev, u8_t chan_id, u32_t counter,
133144
alarm_cnt++;
134145
}
135146

136-
void test_single_shot_alarm_instance(const char *dev_name)
147+
void test_single_shot_alarm_instance(const char *dev_name, bool set_top)
137148
{
138149
struct device *dev;
139150
int err;
@@ -142,8 +153,8 @@ void test_single_shot_alarm_instance(const char *dev_name)
142153
dev = device_get_binding(dev_name);
143154
ticks = counter_us_to_ticks(dev, COUNTER_PERIOD_US);
144155

145-
alarm_cfg.absolute = true;
146-
alarm_cfg.ticks = ticks + 1;
156+
alarm_cfg.absolute = false;
157+
alarm_cfg.ticks = ticks;
147158
alarm_cfg.callback = alarm_handler;
148159
alarm_cfg.user_data = &alarm_cfg;
149160

@@ -157,22 +168,26 @@ void test_single_shot_alarm_instance(const char *dev_name)
157168
err = counter_start(dev);
158169
zassert_equal(0, err, "Counter failed to start\n");
159170

160-
err = counter_set_top_value(dev, ticks, top_handler, exp_user_data);
161-
zassert_equal(0, err, "Counter failed to set top value\n");
171+
if (set_top) {
172+
err = counter_set_top_value(dev, ticks, top_handler,
173+
exp_user_data);
162174

163-
err = counter_set_channel_alarm(dev, 0, &alarm_cfg);
164-
zassert_equal(-EINVAL, err, "Counter should return error because ticks"
165-
" exceeded the limit set alarm\n");
166-
alarm_cfg.ticks = ticks - 100;
175+
zassert_equal(0, err, "Counter failed to set top value\n");
176+
177+
err = counter_set_channel_alarm(dev, 0, &alarm_cfg);
178+
zassert_equal(-EINVAL, err,
179+
"Counter should return error because ticks"
180+
" exceeded the limit set alarm\n");
181+
alarm_cfg.ticks = ticks - 100;
182+
}
167183

168184
err = counter_set_channel_alarm(dev, 0, &alarm_cfg);
169185
zassert_equal(0, err, "Counter set alarm failed\n");
170186

171-
k_busy_wait(1.2*counter_ticks_to_us(dev, ticks));
172-
187+
k_busy_wait(1.5*counter_ticks_to_us(dev, ticks));
173188
zassert_equal(1, alarm_cnt, "Expecting alarm callback\n");
174189

175-
k_busy_wait(counter_ticks_to_us(dev, 2*ticks));
190+
k_busy_wait(1.5*counter_ticks_to_us(dev, ticks));
176191
zassert_equal(1, alarm_cnt, "Expecting alarm callback\n");
177192

178193
err = counter_disable_channel_alarm(dev, 0);
@@ -186,9 +201,28 @@ void test_single_shot_alarm_instance(const char *dev_name)
186201
zassert_equal(0, err, "Counter failed to stop\n");
187202
}
188203

189-
void test_single_shot_alarm(void)
204+
void test_single_shot_alarm_notop_instance(const char *dev_name)
190205
{
191-
test_all_instances(test_single_shot_alarm_instance);
206+
test_single_shot_alarm_instance(dev_name, false);
207+
}
208+
209+
void test_single_shot_alarm_top_instance(const char *dev_name)
210+
{
211+
test_single_shot_alarm_instance(dev_name, true);
212+
}
213+
214+
void test_single_shot_alarm_notop(void)
215+
{
216+
test_all_instances(test_single_shot_alarm_notop_instance);
217+
}
218+
219+
void test_single_shot_alarm_top(void)
220+
{
221+
#ifdef CONFIG_COUNTER_MCUX_RTC
222+
ztest_test_skip();
223+
#else
224+
test_all_instances(test_single_shot_alarm_top_instance);
225+
#endif
192226
}
193227

194228
static void *clbk_data[2];
@@ -281,7 +315,7 @@ void test_all_channels_instance(const char *str)
281315

282316
for (int i = 0; i < n; i++) {
283317
alarm_cfgs[i].absolute = false;
284-
alarm_cfgs[i].ticks = ticks-100;
318+
alarm_cfgs[i].ticks = ticks;
285319
alarm_cfgs[i].callback = alarm_handler2;
286320
}
287321

@@ -300,6 +334,9 @@ void test_all_channels_instance(const char *str)
300334
}
301335
}
302336

337+
k_busy_wait(1.5*counter_ticks_to_us(dev, ticks));
338+
zassert_equal(nchan, alarm_cnt, "Expecting alarm callback\n");
339+
303340
for (int i = 0; i < nchan; i++) {
304341
err = counter_disable_channel_alarm(dev, i);
305342
zassert_equal(0, err, "Unexpected error on disabling alarm");
@@ -323,7 +360,10 @@ void test_main(void)
323360
ztest_unit_test_setup_teardown(test_set_top_value_with_alarm,
324361
unit_test_noop,
325362
counter_tear_down),
326-
ztest_unit_test_setup_teardown(test_single_shot_alarm,
363+
ztest_unit_test_setup_teardown(test_single_shot_alarm_notop,
364+
unit_test_noop,
365+
counter_tear_down),
366+
ztest_unit_test_setup_teardown(test_single_shot_alarm_top,
327367
unit_test_noop,
328368
counter_tear_down),
329369
ztest_unit_test_setup_teardown(test_multiple_alarms,

0 commit comments

Comments
 (0)