| #include<stdio.h> |
| #include<stdlib.h> |
| #include<unistd.h> |
| #include<stdbool.h> |
| #include<log/log.h> |
| #include"./include/lynq_alarm.h" |
| #include"format_change.h" |
| |
| #define LOG_TAG "libpoweralarm" |
| #define RTCFILE_POWERALARM "/sys/class/rtc/rtc0/poweralarm" |
| |
| #define RTCFILE_WAKEALARM "/sys/class/rtc/rtc0/wakealarm" |
| |
| |
| /***************************************************************************** |
| * |
| * Prototype : poweralarm |
| * Description : set shutdown wake-up alarm clock |
| * Input : char *buffer ; input format : 04-23-15-30-00 ( Mon-Day-Hour-Min-Sec ) Or 1200 ( seconds ) |
| * Output : None |
| * Return Value : -1: error ; >0: set to wake up the devices after seconds |
| * |
| *****************************************************************************/ |
| |
| ssize_t poweralarm(char *buffer) |
| { |
| ssize_t sec; |
| char *time_buff = NULL; |
| |
| sec = format_change(buffer); //computing seconds for shutdown alarm |
| if(sec < 60) |
| { |
| ALOGI("No Mattch\n"); |
| return -1; |
| } |
| |
| time_buff = (char*)malloc(100); |
| bzero(time_buff,100); |
| |
| sprintf(time_buff,"echo +%ld > %s",sec,RTCFILE_POWERALARM); //write formatted data into time_buff |
| system(time_buff); |
| ALOGI(time_buff); |
| |
| free(time_buff); |
| |
| return sec; // wake-up devices after sec seconds |
| } |
| |
| |
| /***************************************************************************** |
| * Prototype : wakealarm |
| * Description : set the wake-up alarm clock in low power mode |
| * Input : char *buffer ; input format : 04-23-15-30-00 ( Mon-Day-Hour-Min-Sec ) Or 1200 ( seconds ) |
| * Output : None |
| * Return Value : -1: error ; >0: set to wake up the devices after seconds |
| * |
| *****************************************************************************/ |
| ssize_t wakealarm(char *buffer) |
| { |
| ssize_t sec; |
| char *time_buff = NULL; |
| int ret; |
| sec = format_change(buffer); //computing seconds for lowpower alarm |
| if(sec < 60) |
| { |
| ALOGI("No Mattch\n"); |
| return -1; |
| } |
| ret = system("echo +0 > /sys/class/rtc/rtc0/wakealarm"); |
| RLOGD("close wakealarm ret= %d\n", ret); |
| time_buff = (char*)malloc(100); |
| bzero(time_buff,100); |
| |
| sprintf(time_buff,"echo +%ld > %s",sec,RTCFILE_WAKEALARM); //write formatted data into time_buff |
| system(time_buff); |
| ALOGI(time_buff); |
| |
| free(time_buff); |
| |
| return sec; // wake-up devices after sec seconds |
| } |
| |
| |
| /***************************************************************************** |
| * Prototype : cancel wakealarm |
| * Description : cancel the wake-up alarm clock in low power mode |
| * Input : void |
| * Output : int |
| * Return Value : -1: error ; 0: cannel wakealarm success |
| * |
| *****************************************************************************/ |
| |
| int cancel_wakealarm(void) |
| { |
| int ret; |
| ret = system("echo +0 > /sys/class/rtc/rtc0/wakealarm"); |
| ret = system("echo +315360000 > /sys/class/rtc/rtc0/wakealarm"); |
| RLOGD("close wakealarm ret= %d\n", ret); |
| return ret; |
| |
| } |
| |
| /***************************************************************************** |
| * Prototype : check wake up by rtc |
| * Description : check weather AP is waked up by RTC |
| * Input : void |
| * Output : int |
| * Return Value : 1: AP is waked up by rtc ; 0: AP is not waked up by rtc |
| * |
| *****************************************************************************/ |
| |
| int check_wakeupbydtr(void) |
| { |
| FILE *fp; |
| char buf[4]; |
| int ret; |
| fp = popen("cat /proc/driver/rtc_wakeup","r"); |
| fgets(buf, sizeof(buf), fp); |
| RLOGD("buf=%s\n", buf); |
| ret=atoi(buf); |
| pclose(fp); |
| return ret; |
| |
| } |