blob: a1b259e91798bd2fd9352348c37fce04d825eccf [file] [log] [blame]
/**************************************************************************
* #includeÇø
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <syslog.h>
#include <fcntl.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/prctl.h>
#include <unistd.h>
#include <linux/rtc.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include "softap_api.h"
#include "message.h"
#include "rtc_timer.h"
/**************************************************************************
* Êý¾Ý½á¹¹¶¨ÒåÇø
**************************************************************************/
/**************************************************************************
* Íⲿ±äÁ¿ÉùÃ÷Çø
**************************************************************************/
/**************************************************************************
* ºê¶¨ÒåÇø
**************************************************************************/
/**************************************************************************/
int rtc_timer_add(ULONG ulSec, RTC_ID rtc_id, int src_id)//add_rtc_timer
{
int ret = -1;
int data_len = 0;
RTC_DATA_BUF buf = {0};
char rtc_cpu[16] = {0};
char rtc_cp_ready[8] = {0};
//¼à¿ØÓÐÄÄЩӦÓÃÉèÖÃÁ˶Ìʱ¼äµÄrtc
if (ulSec < 59)
slog(MISC_PRINT, SLOG_ERR, "rtc time is %d, less than 60. src:0x%x, id:0x%x \n", ulSec, src_id, rtc_id);
buf.srcModule = src_id;
buf.module = rtc_id;
buf.ulSec = ulSec;
buf.wakeup = 0;
buf.is_utc = 0;
data_len = sizeof(RTC_DATA_BUF);
buf.time_val = time(0);
buf.cpu = RTC_CPU_AP;
ret = ipc_send_message(src_id, MODULE_ID_RTC_SERVICE, RTC_MSG_ADD_ALARM, data_len, (unsigned char *)&buf, 0);
if (ret != 0) {
slog(MISC_PRINT, SLOG_ERR, "rtc: set rtc timer send msg failed \n");
return -1;
}
return ret;
}
int rtc_timer_add_utc(struct tm *sec, RTC_ID rtc_id, int src_id, int wakeup)//add_rtc_timer
{
int ret = -1;
time_t cur_sec = time(0);
time_t set_sec = mktime(sec);
char sntp_result[20] = {0};
char rtc_cpu[16] = {0};
char rtc_cp_ready[8] = {0};
slog(MISC_PRINT, SLOG_ERR, "rtc_timer_add_utc enter \n");
#if 0
// ÉèÖÃÊÀ½çʱÖÓ¶¨Ê±Æ÷£¬±ØÐëµÈsntp³É¹¦ºó
cfg_get_item("sntp_process_result", sntp_result, sizeof(sntp_result));
if (strcmp("success", sntp_result) != 0) {
slog(MISC_PRINT, SLOG_ERR, "rtc: set utc timer should be after sntp success\n");
return ret;
}
#endif
// ÉèÖö¨Ê±Æ÷ʱ¼ä±ØÐëÍíÓÚµ±Ç°Ê±¼ä
if (cur_sec >= set_sec) {
slog(MISC_PRINT, SLOG_ERR, "rtc: set time-%ld should be after then currnet time-%ld\n", set_sec, cur_sec);
return ret;
}
int data_len = 0;
RTC_DATA_BUF buf = {0};
buf.srcModule = src_id;
buf.module = rtc_id;
buf.ulSec = set_sec - cur_sec;
buf.time_val = cur_sec;
buf.wakeup = wakeup;
buf.is_utc = 1;
buf.cpu = RTC_CPU_AP;
data_len = sizeof(RTC_DATA_BUF);
slog(MISC_PRINT, SLOG_ERR, "rtc add utc timer, cur:%ld, set:%ld, ulSec:%d; year:%d, mon:%d, day:%d, hour:%d, min:%d, sec:%d, wday:%d, yday:%d \n", buf.time_val, set_sec, buf.ulSec, sec->tm_year, sec->tm_mon, sec->tm_mday, sec->tm_hour, sec->tm_min, sec->tm_sec, sec->tm_wday, sec->tm_yday);
ret = ipc_send_message(src_id, MODULE_ID_RTC_SERVICE, RTC_MSG_ADD_ALARM, data_len, (unsigned char *)&buf, 0);
if (ret != 0) {
slog(MISC_PRINT, SLOG_ERR, "rtc: set rtc utc timer send msg failed \n");
return -1;
}
return ret;
}
int rtc_timer_del(RTC_ID rtc_id, int src_id)
{
int ret = -1;
int data_len = 0;
RTC_DATA_BUF buf = {0};
buf.srcModule = src_id;
buf.module = rtc_id;
buf.cpu = RTC_CPU_AP;
data_len = sizeof(RTC_DATA_BUF);
ret = ipc_send_message(src_id, MODULE_ID_RTC_SERVICE, RTC_MSG_DEL_ALARM, data_len, (unsigned char *) &buf, 0);
if (ret == 0)
return 0;
else
return -1;
}
int rtc_timer_del_all(int src_id, unsigned short req_cmd)
{
int ret = -1;
ret = ipc_send_message(src_id, MODULE_ID_RTC_SERVICE, RTC_MSG_DEL_ALL, sizeof(unsigned short), &req_cmd, 0);
if (ret == 0)
return 0;
else
return -1;
}
int rtc_set_time(int src_id)
{
int ret = -1;
time_t cur_time = time(0);
ret = ipc_send_message(src_id, MODULE_ID_RTC_SERVICE, RTC_MSG_SET_TIME, sizeof(time_t), &cur_time, 0);
if (ret == 0)
return 0;
else
return -1;
}