diff options
Diffstat (limited to 'alarmdevtest/alarm-dev-test.c')
-rw-r--r-- | alarmdevtest/alarm-dev-test.c | 88 |
1 files changed, 50 insertions, 38 deletions
diff --git a/alarmdevtest/alarm-dev-test.c b/alarmdevtest/alarm-dev-test.c index 4f56a78..d567e52 100644 --- a/alarmdevtest/alarm-dev-test.c +++ b/alarmdevtest/alarm-dev-test.c @@ -25,6 +25,7 @@ #include <sys/types.h> #include <fcntl.h> #include <time.h> +#include <errno.h> #include "android_alarm.h" @@ -84,27 +85,34 @@ int main(void) for (alarm_type = ANDROID_ALARM_RTC_WAKEUP; alarm_type < ANDROID_ALARM_TYPE_COUNT; alarm_type++) { ret = alarm_get_time(alarm_type, &now); - - printf("(%i) gettime(%i): %ld:%ld\n", ret, alarm_type, now.tv_sec, now.tv_nsec); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_get_time"); return -1; } + printf("(%i) gettime(%i): %ld:%ld\n", ret, alarm_type, now.tv_sec, now.tv_nsec); target = now; target.tv_sec += DELAY; - ret = alarm_set_and_wait(alarm_type, &target); - printf("(%i) alarm_set_and_wait(%i)\n", ret, alarm_type); - if (ret != (1 << alarm_type)) { - printf("Bad return value\n"); + ret = alarm_set_and_wait(alarm_type, &target); + if (ret < 0) { + if (errno == EBUSY) { + printf("Warning: EBUSY on alarm_set_and_wait, this is likely due to the " + "Android environment using this alarm type(%d). Skipping.", alarm_type); + continue; + } + perror("Error: alarm_set_and_wait"); + return -1; + } + printf("(0x%x) alarm_set_and_wait(0x%x)\n", ret, alarm_type); + if (!(ret & (1 << alarm_type))) { + printf("Error: alarm_wait: expected bit 0x%x set, got 0x%x", 1 << alarm_type, ret); return -1; } - ret = alarm_get_time(alarm_type, &now); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_get_time"); return -1; } @@ -120,84 +128,88 @@ int main(void) target.tv_sec += DELAY; ret = alarm_set(alarm_type, &target); - printf("(%i) alarm_set(%i)\n", ret, alarm_type); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_set"); return -1; } + printf("(%i) alarm_set(%i)\n", ret, alarm_type); ret = alarm_wait(); - printf("(%i) alarm_wait()\n", ret); - if (ret != (1 << alarm_type)) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_wait"); + } + printf("(0x%x) alarm_wait()\n", ret); + if (!(ret & (1 << alarm_type))) { + printf("Error: alarm_wait: expected bit 0x%x set, got 0x%x", 1 << alarm_type, ret); return -1; } ret = alarm_get_time(alarm_type, &now); + if (ret < 0) { + perror("Error: alarm_get_time"); + return -1; + } if (now.tv_sec < target.tv_sec) { printf("Error: Early timer return!\n"); return -1; } - if (now.tv_sec > target.tv_sec + 1) { printf("Error: Late timer return!\n"); return -1; } - if (ret) { - printf("Bad return value\n"); - return -1; - } - ret = alarm_clear(alarm_type); printf("(%i) alarm_clear()\n", ret); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_clear"); return -1; } target.tv_sec += DELAY; ret = alarm_set(alarm_type, &target); printf("(%i) alarm_set(%i)\n", ret, alarm_type); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_set"); return -1; } ret = alarm_clear(alarm_type); printf("(%i) alarm_clear()\n", ret); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_clear"); return -1; } } ret = alarm_get_time(ANDROID_ALARM_RTC, &now); - printf("(%i) gettime(ANDROID_ALARM_RTC): %ld:%ld\n", ret, now.tv_sec, now.tv_nsec); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_get_time"); return -1; } + printf("(%i) gettime(ANDROID_ALARM_RTC): %ld:%ld\n", ret, now.tv_sec, now.tv_nsec); + target = now; target.tv_sec -= 10; ret = alarm_set_rtc(&target); - printf("(%i) setting rtc back 10 sec (%ld:%ld)\n", ret, target.tv_sec, target.tv_nsec); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_set_rtc"); return -1; } + printf("(%i) setting rtc back 10 sec (%ld:%ld)\n", ret, target.tv_sec, target.tv_nsec); ret = alarm_get_time(ANDROID_ALARM_RTC, &now); - printf("(%i) gettime(ANDROID_ALARM_RTC): %ld:%ld\n", ret, now.tv_sec, now.tv_nsec); - if (ret) { - printf("Bad return value\n"); + if (ret < 0) { + perror("Error: alarm_get_time"); return -1; } + printf("(%i) gettime(ANDROID_ALARM_RTC): %ld:%ld\n", ret, now.tv_sec, now.tv_nsec); if (now.tv_sec < target.tv_sec) { printf("Error: Bad time!\n"); return -1; } + printf("Pass\n"); + return 0; } |