| /** |
| * @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 |