static void timeout_gsm(void *  parameter)
{     //  1 second 
  //   init  Module related
   GPRS_GSM_PowerON(); 
  //   Comm AT related 
   //if((CommAT.Total_initial==1)) 
   	   //   CommAT.Execute_enable=1;      //  enable send   periodic  

  //---  Data Link END  --------
   End_Datalink(); 
  //       ISP timer
   ISP_Timer();
  //       TTS timeout 
   TTS_Exception_TimeLimt();      
  //      Voice Record
  #ifdef REC_VOICE_ENABLE
    VOC_REC_process();
  #endif 
 //      Dial Link process
    DialLink_TimeOut_Process();
 //  CSQ
     GSM_CSQ_timeout();
  //  AT cmd timeout
      AT_cmd_send_TimeOUT();   
  #ifdef SMS_ENABLE
  //  SMS  timer
    SMS_timer();
 #endif
 //    RTC get 
    time_now=Get_RTC();     
}   
Esempio n. 2
0
static void timeout_gsm(void *  parameter)
{     //  1 second 
  //   init  Module related
   GPRS_GSM_PowerON(); 
  //   Comm AT related 
   if((CommAT.Total_initial==1)) 
   	{
   	     CommAT.Execute_couter++;
	     if(CommAT.Execute_couter>=2
)
	     	{
                     CommAT.Execute_couter=0;
			 CommAT.Execute_enable=1;      //  enable send   periodic   	 	 
	     	}

   	}
   //old--CommAT.Execute_enable=1;      //  enable send   periodic  
  //---  Data Link END  --------
   End_Datalink(); 
  //       ISP timer
   ISP_Timer();
  //       TTS timeout 
   TTS_Exception_TimeLimt();      
 //      Dial Link process
    DialLink_TimeOut_Process();
 //  CSQ
     GSM_CSQ_timeout();
 // VocREC
     VOC_REC_timer();

 //    RTC get 
    time_now=Get_RTC();  
Esempio n. 3
0
void RTC_TimeShow(void)
{
  /* Get the current Time */
      // RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
      // rt_kprintf("\n\r  The current time is :  %0.2d:%0.2d:%0.2d\n\r", RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds);
//	RTC_GetDate(RTC_Format_BIN,  &RTC_DateStructure);
	//rt_kprintf("\n\r  The current Date is :  20%0.2d-%0.2d-%0.2d\n\r", RTC_DateStructure.RTC_Year, RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date);
	//rt_kprintf("xiao,xiao");
      time_now=Get_RTC();
      rt_kprintf("\r\n  RTC 赋值后 %d-%d-%d %02d:%02d:%02d\r\n", time_now.year+2000, time_now.month, time_now.day, \
      time_now.hour, time_now.min, time_now.sec); 
	
}
Esempio n. 4
0
//  判断不同驾驶员,连续驾驶的结束时间 // 速度为0  时候执行
void  Different_DriverIC_End_Process(void)
{
    u8 i=0;
    u8  value=0;

    for(i=0; i<MAX_DriverIC_num; i++)
    {
        if((Drivers_struct[i].Working_state)&&(Drivers_struct[i].Running_counter>=TiredConf_struct.TiredDoor.Door_DrvKeepingSec))
        {
            if((TiredConf_struct.TiredDoor.Door_DrvKeepingSec<=0)&&(Drivers_struct[i].H_11_start==0))
                break;

            //  1.   机动车驾驶证号
            memcpy(VdrData.H_11,Drivers_struct[i].Driver_BASEinfo.DriverCard_ID,18);
            if(GB19056.workstate==0)
                rt_kprintf("\r\n    drivernum=%d drivercode-=%s\r\n",i,Drivers_struct[i].Driver_BASEinfo.DriverCard_ID);
            //   2.   起始时间
            memcpy(VdrData.H_11+18,Drivers_struct[i].Start_Datetime,6); // 起始时间
            time_now=Get_RTC();     //  RTC  相关
            Time2BCD(Drivers_struct[i].End_Datetime);
            memcpy(VdrData.H_11+24,Drivers_struct[i].End_Datetime,6);  // 结束时间
            //   3.  起始位置
            memcpy( VdrData.H_11+30,Drivers_struct[i].Longi,4);  // 经度
            memcpy( VdrData.H_11+30+4,Drivers_struct[i].Lati,4); //纬度
            VdrData.H_11[30+8]=(Drivers_struct[i].Hight>>8);
            VdrData.H_11[30+9]=Drivers_struct[i].Hight;
            //VdrData.H_11_start=1; //  start
            //VdrData.H_11_lastSave=0;

            //   4.   结束位置
            memcpy( VdrData.H_11+40,VdrData.Longi,4);  // 经度
            memcpy( VdrData.H_11+40+4,VdrData.Lati,4); //纬度
            VdrData.H_11[40+8]=(GPS_Hight>>8);
            VdrData.H_11[40+9]=GPS_Hight;

            value=2;

            VDR_product_11H_End(2);

            Drivers_struct[i].H_11_start=2;// end over

            if(value==2)
            {
                Drivers_struct[i].H_11_lastSave_state=1;
            }
        }

    }
}
Esempio n. 5
0
//  判断 不同驾驶员 ,连续驾驶的开始时间
void  Different_DriverIC_Start_Process(void)
{
    u8  i=0;
    // 判断各个驾驶员的连续驾驶的开始时间
    if((Spd_Using>60)&&(Sps_larger_5_counter>10))
    {
        for(i=0; i<MAX_DriverIC_num; i++)
        {
            if((Drivers_struct[i].Working_state==2)&&(Drivers_struct[i].Running_counter==0))
            {
                time_now=Get_RTC();     //  RTC  相关
                Time2BCD(Drivers_struct[i].Start_Datetime);
                //   3.  起始位置
                memcpy(Drivers_struct[i].Longi,VdrData.Longi,4);  // 经度
                memcpy(Drivers_struct[i].Lati,VdrData.Lati,4); //纬度
                Drivers_struct[i].Hight=GPS_Hight;
                Drivers_struct[i].H_11_start=1; //  start
                Drivers_struct[i].H_11_lastSave_state=0;
            }
        }
    }

}
Esempio n. 6
0
void Dayin_Fun(u8 dayin_par)
{
    u8 datatime_str[6];
    u8  drive_illegalstr[666];
    u32  current_u32time = 0; //  当前的时间
    u32  old2day_u32time = 0; //  前2个日历天的时间    current-2x86400 (172800)
    u32  read_u32time = 0;
    u32  read_u32_ENDTime = 0; // 读取记录中结束时间
    u8  i = 0, efftive_counter = 0, check_limit = 0; // check_limit   表示需要检索记录的数目
    u8  print_buf[70];
    u8  leftminute = 0; // 当前分钟数值
    u8  find_chaoshi_record = 0; //

    if(dayin_par == 1)
    {
        memcpy(dayin_chepaihaoma + 17, Vechicle_Info.Vech_Num, 8); //  2
        memcpy(dayin_chepaifenlei + 17, Vechicle_Info.Vech_Type, strlen(Vechicle_Info.Vech_Type)); //  3
        memcpy(dayin_cheliangVIN + 10, Vechicle_Info.Vech_VIN, 17); //  4
        memcpy(dayin_driver_NUM + 13, JT808Conf_struct.Driver_Info.DriveName, 21); //5
        memcpy(dayin_driver_card + 24, Read_ICinfo_Reg.DriverCard_ID, 18); //6
        memcpy((char *)dayin_data_time + 11, (char *)Dis_date, 20); //7
        switch(DaYin)
        {
        case 1:
            if(step(50, 1000))
            {
                Menu_txt_state = 1;
                pMenuItem = &Menu_TXT;
                pMenuItem->show();
                pMenuItem->timetick( 10 );
                pMenuItem->keypress( 10 );

                //-------------------------
                DaYin = 0;
                print_rec_flag = 0;
                GPIO_ResetBits(GPIOB, GPIO_Pin_7); //打印关电

                //-----------------------------------------------------
                print_workingFlag = 0; // 打印状态进行中

                //-----------------------------------------------
            }
            else
            {
                Menu_txt_state = 5;
                pMenuItem = &Menu_TXT;
                pMenuItem->show();
                pMenuItem->timetick( 10 );
                pMenuItem->keypress( 10 );
                //--------------------------------------------
                DaYin++;
                GPIO_SetBits( GPIOB, GPIO_Pin_7 );
            }
            break;
        case 2://车牌号码 9
            printer((const char *)dayin_chepaihaoma);
            printer((const char *)dayin_chepaifenlei);
            printer((const char *)dayin_cheliangVIN);
            printer((const char *)dayin_driver_card);
            if((VdrData.H_15[0] == 0x02) && (Limit_max_SateFlag == 0))
                printer("\r\n速度状态: 异常");
            else
                printer("\r\n速度状态: 正常");
            printer((const char *)dayin_data_time);//00/00/00 00:00:00
            printer("2个日历天内超时驾驶记录:\r\n");
            time_now = Get_RTC(); 	//	RTC  相关
            Time2BCD(datatime_str);
            current_u32time = Time_sec_u32(datatime_str, 6);
            old2day_u32time = current_u32time - 172800; // 2个日历天内的时间
            if(Vdr_Wr_Rd_Offset.V_11H_full)
                check_limit = VDR_11_MAXindex;
            else
                check_limit = Vdr_Wr_Rd_Offset.V_11H_Write;
            if(check_limit)
            {
                for(i = 0; i < check_limit; i++)
                {
                    memset(drive_illegalstr, 0, sizeof(drive_illegalstr));
                    if(get_11h(i, drive_illegalstr) == 0)							//50  packetsize	  num=100
                        continue;
                    read_u32time = Time_sec_u32(drive_illegalstr + 18, 6); // 连续驾驶起始时间
                    read_u32_ENDTime = Time_sec_u32(drive_illegalstr + 24, 6); // 连续驾驶结束时间
                    if(read_u32time >= old2day_u32time)
                    {
                        if((read_u32_ENDTime > read_u32time) && ((read_u32_ENDTime - read_u32time) > (4 * 60 * 60)))
                        {
                            //  结束时间大于起始时间,且差值大于4个小时
                            efftive_counter++;
                            memset(print_buf, 0, sizeof(print_buf));
                            sprintf(print_buf, "\r\n记录 %d:", efftive_counter);
                            printer(print_buf);
                            memcpy(dayin_driver_card + 24, drive_illegalstr, 18); //6
                            printer((const char *)dayin_driver_card);
                            memset(print_buf, 0, sizeof(print_buf));
                            sprintf(print_buf, "\r\n 连续驾驶开始时间: \r\n  20%2d-%d%d-%d%d %d%d:%d%d:%d%d", BCD2HEX(drive_illegalstr[18]), \
                                    BCD2HEX(drive_illegalstr[19]) / 10, BCD2HEX(drive_illegalstr[19]) % 10, BCD2HEX(drive_illegalstr[20]) / 10, BCD2HEX(drive_illegalstr[20]) % 10, \
                                    BCD2HEX(drive_illegalstr[21]) / 10, BCD2HEX(drive_illegalstr[21]) % 10, BCD2HEX(drive_illegalstr[22]) / 10, BCD2HEX(drive_illegalstr[22]) % 10, \
                                    BCD2HEX(drive_illegalstr[23]) / 10, BCD2HEX(drive_illegalstr[23]) % 10);
                            printer(print_buf);
                            memset(print_buf, 0, sizeof(print_buf));
                            sprintf(print_buf, "\r\n 连续驾驶结束时间: \r\n  20%2d-%d%d-%d%d %d%d:%d%d:%d%d", BCD2HEX(drive_illegalstr[24]), \
                                    BCD2HEX(drive_illegalstr[25]) / 10, BCD2HEX(drive_illegalstr[25]) % 10, BCD2HEX(drive_illegalstr[26]) / 10, BCD2HEX(drive_illegalstr[26]) % 10, \
                                    BCD2HEX(drive_illegalstr[27]) / 10, BCD2HEX(drive_illegalstr[27]) % 10, BCD2HEX(drive_illegalstr[28]) / 10, BCD2HEX(drive_illegalstr[28]) % 10, \
                                    BCD2HEX(drive_illegalstr[29]) / 10, BCD2HEX(drive_illegalstr[29]) % 10);
                            printer(print_buf);
                            find_chaoshi_record = enable; // find  record
                        }

                    }
                }

                if(find_chaoshi_record == 0)
                    printer("\r\n无超时驾驶记录\r\n");
            }
            else
                printer("\r\n无超时驾驶记录\r\n");
            // 最近15分钟 平均速度
            printer("\r\n停车前15分钟每分钟平均速度:");
            memset(drive_illegalstr, 0, sizeof(drive_illegalstr));
            leftminute = Api_avrg15minSpd_Content_read(drive_illegalstr);
            if(leftminute == 0)
                printer("\r\n 暂无最近15分钟停车记录");
            else if(leftminute == 105)
            {
                for(i = 0; i < 15; i++)
                {
                    memset(print_buf, 0, sizeof(print_buf));
                    if((drive_illegalstr[i * 7 + 0] == 0) && (drive_illegalstr[i * 7 + 1] == 0) &&
                            (drive_illegalstr[i * 7 + 2] == 0) && (drive_illegalstr[i * 7 + 3] == 0) &&
                            (drive_illegalstr[i * 7 + 4] == 0) && (drive_illegalstr[i * 7 + 5] == 0))
                    {
                        //U3_PutStr("\r\n   NULL");
                        continue;
                    }

                    if((drive_illegalstr[i * 7 + 0] == 0xFF) && (drive_illegalstr[i * 7 + 1] == 0xFF) &&
                            (drive_illegalstr[i * 7 + 2] == 0xFF) && (drive_illegalstr[i * 7 + 3] == 0xFF) &&
                            (drive_illegalstr[i * 7 + 4] == 0xFF) && (drive_illegalstr[i * 7 + 5] == 0xFF))
                    {
                        //U3_PutStr("\r\n   NULL");
                        continue;
                    }

                    sprintf(print_buf, "\r\n  20%02d-%02d-%02d %02d:%02d  %d km/h", drive_illegalstr[i * 7], \
                            drive_illegalstr[i * 7 + 1], drive_illegalstr[i * 7 + 2], drive_illegalstr[i * 7 + 3], drive_illegalstr[i * 7 + 4], \
                            drive_illegalstr[i * 7 + 6]);
                    printer(print_buf);
                }
            }
            printer("\r\n                        \r\n");
            printer("\r\n\r\n 签名 :   ______________\r\n");
            DaYin++;
            break;
        case 3:
            step(50, 1000);
            DaYin++;
            break;
        case 4:
            step(50, 1000);
            DaYin++;
            break;
        case 5:
            DaYin = 0;
            print_rec_flag = 0;
            GPIO_ResetBits( GPIOB, GPIO_Pin_7 );
            print_workingFlag = 0; // 打印状态进行中

            pMenuItem = &Menu_1_Idle;
            pMenuItem->show();
            break;
        }

    }
}
Esempio n. 7
0
u8 Rx_data_save(u8 *str)
{
	u8 temp[4];
	u8 trans[256];
	u8 len =0;
	u32 i= 0;
	u32 test_head=0;
	memset(trans,0,256);
	memset(temp,0,4);
	
	for(i=0;i<16*512;i=i+256)
	{
	    if(i>=8*512)
	    {
	    	//下半部分显示时候显示上半部分
	    	SST25V_SectorErase_4KByte((8*(((u32)DF_BD_data_rx+8)/8))*PageSIZE);
			//Erase_flag =Top_15;
	    }
		if(i>=16*512)//保证随时都有可以写的空间
		{
		    i=0;//从新遍历
			//擦除上半部分显示下半部分
			SST25V_SectorErase_4KByte((8*((u32)DF_BD_data_rx/8))*PageSIZE);	
			//Erase_flag = After_15;
			rt_kprintf("erase the 8016-8023\r\n");
		}
		DF_ReadFlash(DF_BD_data_rx,i,temp,4);
		
		test_head = (temp[0]<<24)+(temp[1]<<16)+(temp[2]<<8)+temp[3];
		//rt_kprintf(" %d--%d--%d--%d--%d--%x\r\n",temp[0],temp[1],temp[2],temp[3],i,test_head);
		if(test_head==Max_value)
		{
	
			test_head = find_max_id(DF_BD_data_rx)+1;//最大ID自加1
		    //找出上一个ID值
	    	trans[0]=test_head>>24;
			trans[1]=(test_head>>16)&0xff;
			trans[2]=(test_head>>8)&0xff;
			trans[3]=test_head&0xff;
			len =(((str[16]<<8)+str[17])/8);
			//rt_kprintf("收到电文长度---%d",len);
			len =len+8;//根据协议加上7个字节(信息类别到电文长度)
		    trans[4] =len+4+6+1;//+4是加上计数+1长度+是时间长度=总长

			if(UDP_dataPacket_flag==0x02)
			{
				trans[5]=Temp_Gps_Gprs.Date[0];
				trans[6]=Temp_Gps_Gprs.Date[1];
				trans[7]=Temp_Gps_Gprs.Date[2]; 

				trans[8]=Temp_Gps_Gprs.Time[0]; 
				trans[9]=Temp_Gps_Gprs.Time[1]; 
				trans[10]=Temp_Gps_Gprs.Time[2]; 
			}
			else
			{
				time_now=Get_RTC(); 

				trans[5]= time_now.year;
				trans[6]= time_now.month;
				trans[7]= time_now.day;

				trans[8]= time_now.hour;
				trans[9]= time_now.min;
				trans[10]= time_now.sec;
			}
			/*
		    trans[5]=(((Gps_Gprs.Date[0])/10)<<4)+((Gps_Gprs.Date[0])%10);		
			trans[6]=((Gps_Gprs.Date[1]/10)<<4)+(Gps_Gprs.Date[1]%10); 
			trans[7]=((Gps_Gprs.Date[2]/10)<<4)+(Gps_Gprs.Date[2]%10);
			trans[8]=((Gps_Gprs.Time[0]/10)<<4)+(Gps_Gprs.Time[0]%10);
			trans[9]=((Gps_Gprs.Time[1]/10)<<4)+(Gps_Gprs.Time[1]%10);
			trans[10]=((Gps_Gprs.Time[2]/10)<<4)+(Gps_Gprs.Time[2]%10);	
			*/
			OutPrint_HEX("Time", trans+5, 6);//wxg_test
		    if(trans[4]>=256)
		    {
		    rt_kprintf("-------接收数据有误-----\r\n");
			return RT_ERROR;
		    }
			memcpy(trans+11,str+10,len);//将信息内容拷贝
			
			DF_WriteFlashDirect(DF_BD_data_rx,i,trans,trans[4]);
			//OutPrint_HEX("saved", trans, trans[4]);//wxg_test
			memset(temp,0,4);//清零
			return RT_EOK;
		}
			
	}
Esempio n. 8
0
void  Disp_Idle(void)
{
u8 i=0;
   u16  disp_spd=0;
   
	
	/*for(i=0;i<3;i++)
		Dis_date[2+i*3]=Temp_Gps_Gprs.Date[i]/10+'0';
	for(i=0;i<3;i++)
		Dis_date[3+i*3]=Temp_Gps_Gprs.Date[i]%10+'0';

	for(i=0;i<3;i++)
		Dis_date[12+i*3]=Temp_Gps_Gprs.Time[i]/10+'0';
	for(i=0;i<3;i++)
		Dis_date[13+i*3]=Temp_Gps_Gprs.Time[i]%10+'0';*/
	time_now=Get_RTC();
    Dis_date[2]=time_now.year/10+'0';
    Dis_date[3]=time_now.year%10+'0';
	Dis_date[5]=time_now.month/10+'0';
    Dis_date[6]=time_now.month%10+'0';
	Dis_date[8]=time_now.day/10+'0';
    Dis_date[9]=time_now.day%10+'0';
	
	Dis_date[12]=time_now.hour/10+'0';
    Dis_date[13]=time_now.hour%10+'0';
	Dis_date[15]=time_now.min/10+'0';
    Dis_date[16]=time_now.min%10+'0';
	Dis_date[18]=time_now.sec/10+'0';
    Dis_date[19]=time_now.sec%10+'0';
       //----------------速度--------------------------
	 disp_spd=GPS_speed/10; 
       if((disp_spd>=100)&&(disp_spd<200))
       	{
                    Dis_speDer[0]=disp_spd/100+'0';
		      Dis_speDer[1]=(disp_spd%100)/10+'0';
		      Dis_speDer[2]=disp_spd%10+'0';	     
					
       	}
	else
       if((disp_spd>=10)&&(disp_spd<100))
       	{
       	      Dis_speDer[0]=' ';
		      Dis_speDer[1]=(disp_spd/10)+'0';
		      Dis_speDer[2]=disp_spd%10+'0';	

       	}
	 else  
	if((disp_spd>=0)&&(disp_spd<10))
		{
		       Dis_speDer[0]=' ';
		      Dis_speDer[1]=' ';
		      Dis_speDer[2]=disp_spd%10+'0';
		}

       //---------------方向-----------------------------              
            if((GPS_direction>=100)&&(GPS_direction<=360))
       	{
                    Dis_speDer[12]=GPS_direction/100+'0';
		      Dis_speDer[13]=(GPS_direction%100)/10+'0';
		      Dis_speDer[14]=GPS_direction%10+'0';	     
					
       	}
	else
       if((GPS_direction>=10)&&(GPS_direction<100))
       	{
       	      Dis_speDer[12]=' ';
		      Dis_speDer[13]=(GPS_direction/10)+'0';
		      Dis_speDer[14]=GPS_direction%10+'0';	

       	}
	 else  
	if((GPS_direction>=0)&&(GPS_direction<10))
		{
		       Dis_speDer[12]=' ';
		      Dis_speDer[13]=' ';
		      Dis_speDer[14]=GPS_direction%10+'0'; 
		}


	//--------------------------------------------------   
    lcd_fill(0);	
	lcd_text12(0,10,(char *)Dis_date,20,LCD_MODE_SET);
	lcd_text12(0,20,(char *)Dis_speDer,18,LCD_MODE_SET);
	lcd_bitmap(0,3,&BMP_gsm_g, LCD_MODE_SET);

	// ---------- GSM 信号--------
	if(ModuleSQ>26)     //31/4	
	     lcd_bitmap(8,3,&BMP_gsm_3, LCD_MODE_SET);
	else
       if(ModuleSQ>18)	  
	    lcd_bitmap(8,3,&BMP_gsm_2, LCD_MODE_SET);	
	else   
	 if(ModuleSQ>9)	  
	    lcd_bitmap(8,3,&BMP_gsm_1, LCD_MODE_SET);	   
	else 
	     lcd_bitmap(8,3,&BMP_gsm_0, LCD_MODE_SET); 	   	
	   	
		
	GPSGPRS_Status();
	
	lcd_update_all();
}
Esempio n. 9
0
/***********************************************RTC注册******************************************************/
u8  rt_hw_rtc_init(void)
{
    u8  Resualt=0;

    rtc.type	= RT_Device_Class_RTC;

   //表明RTC数据丢失,需要重新配置
    if (RTC_ReadBackupRegister(RTC_BKP_DR0) != RTC_First)
   {
	       rt_kprintf("rtc is not configured\n");
              //重新配置RTC
              RTC_Config();
	       // Check  resualt		  
		if ( RTC_Config() != 0)
			{
					rt_kprintf("rtc configure fail...\r\n");
					return ;
			}
		else
		{
		     /* Configure the RTC data register and RTC prescaler */
			RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv;
			RTC_InitStructure.RTC_SynchPrediv = SynchPrediv;
			RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;

			/* Check on RTC init */
			if (RTC_Init(&RTC_InitStructure) == ERROR)
			{
				rt_kprintf("\n\r  /!\\***** RTC Prescaler Config failed ********/!\\ \n\r");
			}			
		 }
		//配置完成后,向后备寄存器中写特殊字符0xA5A5 
	        RTC_WriteBackupRegister(RTC_BKP_DR0, RTC_First);	 		

		 Resualt=1;
   }
    else
 { 
       
    /* Check if the Power On Reset flag is set */
    if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != 0)
    {
       ;// rt_kprintf("\r\n Power On Reset occurred....\n\r");
    }
    /* Check if the Pin Reset flag is set */
    else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != 0)
    {
       ;//rt_kprintf("\r\n External Reset occurred....\n\r");
    }

   // rt_kprintf("\r\n No need to configure RTC....\n\r");
    
    /* Enable the PWR clock */
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

    /* Allow access to RTC */
     PWR_BackupAccessCmd(ENABLE);  

    /* Wait for RTC APB registers synchronisation */
     RTC_WaitForSynchro();

     /* Clear the RTC Alarm Flag */
     RTC_ClearFlag(RTC_FLAG_ALRAF);
      
	/* Wait for RTC registers synchronization */
     if( RTC_WaitForSynchro()==SUCCESS)
	  {
	     Get_RTC();
		 Resualt=1;
     }
	 else
	   Resualt=0;				
 }
	
    /* register rtc device */
    rtc.init 	= RT_NULL;
    rtc.open 	= rt_rtc_open;
    rtc.close	= RT_NULL;
    rtc.read 	= rt_rtc_read;
    rtc.write	= RT_NULL;
    rtc.control = rt_rtc_control;

    /* no private */
    //rtc.user_data = RT_NULL;

    rt_device_register(&rtc, "rtc", RT_DEVICE_FLAG_RDWR);
#ifdef RT_USING_FINSH
	//RTC_TimeShow(); 
#endif

    return  Resualt;
}