/*
 * @Description: RTC模块-svc层
 * @Author: yangsw
 * @Date: 2021-05-19 17:20:33
 * @LastEditTime: 2023-12-29 16:13:10
 * @LastEditors: LiDa
 * @Reference: 
 */
#include "svc_rtc.h"
#include "../../util/util_data.h"
#include "../../log/svc/svc_log.h"
#include "../../cloud/svc/svc_cloud_protocol.h"
#include "../../cloud/svc/svc_cloud.h"
#include "param/svc/svc_flash.h"
/**
 * @brief: RTC模块初始化
 * @param  {void}
 * @return {void}
 * @note: 
 * @see: 
 */
void Svc_Rtc_Init(void){
	#if LOG_FUNC_ENABLE   
		Svc_Log_Printf(LOG_DEBUG,"%s \r\n",__FUNCTION__);
	#endif				
    Bsp_Rtc_Init();
}

/**
 * @brief: 设置时间
 * @return {E_Result_State} 执行结果
 * @note: 
 * @see: 
 * @param {gw_u8} time[6] 年、月、日、时、分、秒
 */
E_Result_State Svc_Rtc_Set_Time(gw_u8 time[6]){
//    S_Flash_Data *ps_flash;     
//    ps_flash = Svc_Flash_Get_Data();
//    ps_flash->s_usage_info.pu32SystemTime=Util_Time_Date_To_Timestamp(time);    
    return E_STATE_SUCCESS;
}

void Svc_Rtc_Get_Time_Flash(void){
	S_Flash_Data *ps_flash;
	S_Cloud_Data	*ps_cloud_data;
	ps_flash = Svc_Flash_Get_Data();
	ps_cloud_data = Svc_Cloud_Get_Data();
	ps_cloud_data->u32SystemTime =  ps_flash->s_usage_info.pu32SystemTime;
	ps_cloud_data->u32LastSystemTime = ps_flash->s_usage_info.u32LastSystemTime;	
	Svc_Cloud_Refresh_Time();
}

void Svc_Rtc_Set_Time_Flash(void){
	S_Flash_Data *ps_flash;     
	S_Cloud_Data	*ps_cloud_data;
	ps_flash = Svc_Flash_Get_Data();
	ps_cloud_data = Svc_Cloud_Get_Data();
	ps_flash->s_usage_info.pu32SystemTime=ps_cloud_data->u32SystemTime; //每次NB上报更新该时间
	ps_flash->s_usage_info.u32LastSystemTime=ps_cloud_data->u32LastSystemTime; //每次NB上报更新该时间
}
/**
 * @brief: 获取时间
 * @return 
 * @note: 
 * @see: 
 * @param 
 */
E_Result_State Svc_Rtc_Get_Time(gw_u32 *Now,gw_u32 *Last){
	gw_u32 NowData;
	gw_u32 LastData;
	S_Cloud_Data	*ps_cloud_data = Svc_Cloud_Get_Data();	
	NowData=ps_cloud_data->u32SystemTime;
	LastData=ps_cloud_data->u32LastSystemTime;	
	//关中断导致串口收数错误，故不关中断，但可能导致读时间时生产更新时间中断后产生问题故做如下修复
	if((LastData>NowData)&&((LastData-NowData)==1)){ 
		NowData=LastData;
	}
	*Now=NowData;
	*Last=LastData;
	return E_STATE_SUCCESS;
}
void Svc_Rtc_Updata_Time(void){
	S_Cloud_Data	*ps_cloud_data = Svc_Cloud_Get_Data();		
    ps_cloud_data->u32SystemTime++;  //整个系统的总时间，rtc中断唤醒1s++
	if(ps_cloud_data->u32SystemTime > ps_cloud_data->u32LastSystemTime)
    ps_cloud_data->u32LastSystemTime=ps_cloud_data->u32SystemTime;		
}


