test timer:change deviation to be pass as parameter.

Signed-off-by: yangguangcai <yangguangcai@xiaomi.com>
This commit is contained in:
yangguangcai 2024-03-15 16:15:46 +08:00 committed by Xiang Xiao
parent 5dcfe93a95
commit fb37ef3671

View file

@ -37,7 +37,6 @@
#define RTC_DEFAULT_DEVIATION 10
#define DEFAULT_TIME_OUT 2
#define SLEEPSECONDS 10
#define COMEINCALLBACK 0
#define OPTARG_TO_VALUE(value, type, base) \
do \
@ -58,12 +57,8 @@
struct posix_timer_state_s
{
struct itimerspec it;
};
struct sigev_para_s
{
int tim;
int interval;
uint32_t tim;
uint32_t deviation;
};
/****************************************************************************
@ -80,8 +75,9 @@ struct sigev_para_s
static void show_usage(FAR const char *progname, int exitcode)
{
printf("Usage: %s"
" -s <timeout seconds>\n",
printf("Usage: %s\n"
" -s <timeout seconds>\n"
" -a <timeout deviation>\n",
progname);
exit(exitcode);
@ -98,7 +94,7 @@ static void parse_commandline(
int ch;
int converted;
while ((ch = getopt(argc, argv, "s:")) != ERROR)
while ((ch = getopt(argc, argv, "s:a:")) != ERROR)
{
switch (ch)
{
@ -114,6 +110,17 @@ static void parse_commandline(
posix_timer_state->it.it_interval.tv_sec = (uint32_t)converted;
break;
case 'a':
OPTARG_TO_VALUE(converted, uint32_t, 10);
if (converted < 0 || converted > INT_MAX)
{
printf("deviation out of range: %d\n", converted);
show_usage(argv[0], EXIT_FAILURE);
}
posix_timer_state->deviation = (uint32_t)converted;
break;
case '?':
printf("Unsupported option: %s\n", optarg);
show_usage(argv[0], EXIT_FAILURE);
@ -141,11 +148,14 @@ static uint32_t get_timestamp(void)
static void posix_timer_callback(union sigval arg)
{
FAR struct sigev_para_s *sigev_para = (struct sigev_para_s *)arg.sival_ptr;
FAR struct posix_timer_state_s *sigev_para =
(FAR struct posix_timer_state_s *)arg.sival_ptr;
int range = get_timestamp() - (*sigev_para).tim;
assert_in_range(range,
(*sigev_para).interval * 1000 - RTC_DEFAULT_DEVIATION,
(*sigev_para).interval * 1000 + RTC_DEFAULT_DEVIATION);
sigev_para->it.it_interval.tv_sec * 1000 - sigev_para->deviation,
sigev_para->it.it_interval.tv_sec * 1000 + sigev_para->deviation);
syslog(LOG_DEBUG, "callback trigger!!!\n");
(*sigev_para).tim = get_timestamp();
}
@ -159,7 +169,6 @@ static void test_case_posix_timer(FAR void **state)
int ret;
timer_t timerid;
struct sigevent event;
struct sigev_para_s sigev_para;
FAR struct posix_timer_state_s *posix_timer_state;
struct itimerspec it;
@ -170,7 +179,7 @@ static void test_case_posix_timer(FAR void **state)
event.sigev_notify = SIGEV_THREAD;
event.sigev_notify_function = posix_timer_callback;
event.sigev_notify_attributes = NULL;
event.sigev_value.sival_ptr = (struct sigev_para_s *)&sigev_para;
event.sigev_value.sival_ptr = posix_timer_state;
/* Create the timer */
@ -182,8 +191,7 @@ static void test_case_posix_timer(FAR void **state)
ret = timer_settime(timerid, 0, &(posix_timer_state->it), NULL);
assert_return_code(ret, OK);
sigev_para.interval = posix_timer_state->it.it_interval.tv_sec;
sigev_para.tim = get_timestamp();
posix_timer_state->tim = get_timestamp();
/* Get the timer status */
@ -209,7 +217,8 @@ int main(int argc, FAR char *argv[])
.it.it_value.tv_sec = DEFAULT_TIME_OUT,
.it.it_value.tv_nsec = 0,
.it.it_interval.tv_sec = DEFAULT_TIME_OUT,
.it.it_interval.tv_nsec = 0
.it.it_interval.tv_nsec = 0,
.deviation = RTC_DEFAULT_DEVIATION
};
const struct CMUnitTest tests[] =