blob: 643495b918619f4cf1b282c5b770b224cda43a56 [file] [log] [blame]
/**
* @file rtc-service.h
* @brief Public APIs of Sanechips
*
* Copyright (C) 2017 Sanechips Technology Co., Ltd.
* @author Linxu Gebin
* @defgroup si_id Sanechips
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*************************************************************************
*/
#ifndef _RTC_SERVICE_H
#define _RTC_SERVICE_H
/*******************************************************************************
* Include header files *
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/time.h>
#include <pthread.h>
#include <errno.h>
#include <linux/rtc.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdarg.h> //for rtc_log variable para
#include <linux/prctl.h>
#include <sys/prctl.h>
#include "softap_api.h"
#include "message.h"
#include "rtc_timer.h"
#include <linux/netlink.h>
#include <sys/socket.h>
/*******************************************************************************
* Macro definitions *
******************************************************************************/
#define RTC_MSG_PARAM_SIZE 16
#define RTC_MSG_PARAM_MAC 16 //13 for align
#define RTC_ALARM_DATA "/etc_rw/rtc_alarm.dat"
#define DATA_S 0xA5A5
#define DATA_E 0x5A5A
/*
sleep process
1. rtc no elapsed
2. sta linked in
3. no timer
wps process
1. no timer can be used
xx xx xx xx
*/
#ifdef __ZTE_UCLINUX__
#define ROOT_DIR "/mnt/jffs2"
#else
#define ROOT_DIR ""
#endif
#define MAX_ALARM_NUM 256
#define RTC_DEV_NAME "/dev/rtc0"
#define NV_STRING_LEN_20 20
#define WLAN_RTC_LOG1_FILE_PATH ROOT_DIR"/wifi/rtclog1"
#define WLAN_RTC_LOG2_FILE_PATH ROOT_DIR"/wifi/rtclog2"
#define WLAN_RTC_MAX_LOG_LENGTH 262144
#define _RTC_SERVICE_DEBUG 1
#define RTC_MSG_BUFFER_SIZE 2048
/*******************************************************************************
* Type definitions *
******************************************************************************/
typedef enum {
WF_SLEEP_SET_TIMER = 0x01,// rtc-service add alarm ok
WF_SLEEP_RTC_HW_SEND_ELAPSED = 0x02,
WF_SLEEP_RTC_HANDLE_ELAPSED = 0x04,
WF_SLEEP_RECEIVE_ELAPSED_MSG = 0x08,
WF_SLEEP_HANDLE_SLEEP_MSG = 0x10,
WF_WPS_SET_TIMER = 0x0100,// rtc-service add alarm ok
WF_WPS_RTC_HW_ELAPSED = 0x0200,
WF_WPS_RTC_HANDLE_ELAPSED = 0x0400,
WF_WPS_RECEIVE_ELAPSED_MSG = 0x0800,
WF_WPS_HANDLE_SLEEP_MSG = 0x1000,
WF_RTC_HW_SET_TIMER_OK = 0x00010000, // rtc ioctl set timer ok
WF_RTC_HW_SET_TIMER_FAILED = 0x00020000, // rtc ioctl set timer failed
WF_RTC_HW_HAVE_ELAPSED = 0x00040000, // rtc hw elapsed normal
WF_RTC_SERVICE_NO_FREE_TIMER = 0x00080000, // no enough free timer
WF_HAVE_STA_LINKED_IN = 0x00100000, // sta linked in
} wf_rtc_debug;
enum RTC_TYPE {
RTC_TYPE_NONE = 0,
RTC_TYPE_TIME, // RTC_RD_TIME¡¢ RTC_SET_TIME
RTC_TYPE_ALM, // RTC_ALM_READ¡¢ RTC_ALM_SET
RTC_TYPE_WKALM, // RTC_WKALM_READ¡¢ RTC_WKALM_SET
};
/* count down timer */
typedef enum {
ZX234290_SET_TIMER = ('r' << 24 | 't' << 16 | 'c' << 8 | 0),
ZX234290_GET_TIMER = ('r' << 24 | 't' << 16 | 'c' << 8 | 1),
ZX234290_TIMER_ENABLED = ('r' << 24 | 't' << 16 | 'c' << 8 | 2),
ZX234290_GET_TIMER_REMAIN = ('r' << 24 | 't' << 16 | 'c' << 8 | 3),
ZX234290_GET_TIMER_STATUS = ('r' << 24 | 't' << 16 | 'c' << 8 | 4),
ZX234290_FUNCTION_MAX = ('r' << 24 | 't' << 16 | 'c' << 8 | 5),
} zx234290_rtc_timer;
/**
* @brief ¶¨Ê±Æ÷ÐÅÏ¢
* @param list Á´±íÍ·
* @param time_val µ±Ç°Ê±¼ä£¬µ¥Î»:s
* @param rtc_tm µ±Ç°ÊÀ½çʱÖÓʱ¼ä
* @param interval ¼ä¸ôʱ¼ä£¬µ¥Î»:s
* @param remain_time Ê£Óàʱ¼ä£¬µ¥Î»:s
* @param rtc_id ¶¨Ê±Æ÷id
* @param module_id ´´½¨¶¨Ê±Æ÷Ä£¿éid
* @param wakeup ¹Ø»ú»½ÐÑ£¬1:´ò¿ª£¬0:¹Ø±Õ
* @param is_utc ÊÇ·ñutcʱ¼ä£¬utcʱ¼äÕý³£±È½Ï³¤£¬ÓÃWKALM¶¨Ê±Æ÷
* @param cpu rtc·¢ÆðµÄcpu£¬ 0: cp, 1:ap
* @note
*/
/* count down timer */
typedef struct tag_ALARM {
struct list_head list;
long time_val;
struct rtc_time rtc_tm;
long interval;
long remain_time;
int rtc_id;
int module_id;
int wakeup;
int is_utc;
int cpu;
} ALARM_T;
typedef enum _TIME_CONVERT_TYPE {
CONVERT_TYPE_NONE = 0, //³õʼֵ£¬²»×öʱ¼äÀàÐÍת»¯
CONVERT_TYPE_RTC, //ת»¯Îªutc0ʱ¼ä
CONVERT_TYPE_OS //ת»¯ÎªËùÔÚÊ±ÇøÊ±¼ä
} TIME_CONVERT_TYPE;
#endif