Esempio n. 1
0
//RTC初始化
//返回值:0,初始化成功;
//       1,LSE开启失败;
//       2,进入初始化模式失败;
u8 RTC_Init(void)
{
	u16 retry=0X1FFF; 
	RCC->APB1ENR|=1<<28;			//使能电源接口时钟
	PWR->CR|=1<<8;					//后备区域访问使能(RTC+SRAM)
	if(RTC_Read_BKR(0)!=0X5050)		//是否第一次配置?
	{
		RCC->BDCR|=1<<0;			//LSE 开启  
		while(retry&&((RCC->BDCR&0X02)==0))//等待LSE准备好
		{
			retry--;
			delay_ms(5);
		}
		if(retry==0)return 1;		//LSE 开启失败. 
		RCC->BDCR|=1<<8;			//选择LSE,作为RTC的时钟
		RCC->BDCR|=1<<15;			//使能RTC时钟
 		//关闭RTC寄存器写保护
		RTC->WPR=0xCA;
		RTC->WPR=0x53; 
		if(RTC_Init_Mode())return 2;//进入RTC初始化模式
		RTC->PRER=0XFF;				//RTC同步分频系数(0~7FFF),必须先设置同步分频,再设置异步分频,Frtc=Fclks/((Sprec+1)*(Asprec+1))
		RTC->PRER|=0X7F<<16;		//RTC异步分频系数(1~0X7F)
		RTC->CR&=~(1<<6);			//RTC设置为,24小时格式
		RTC->ISR&=~(1<<7);			//退出RTC初始化模式
		RTC->WPR=0xFF;				//使能RTC寄存器写保护  
		RTC_Set_Time(23,59,56,0);	//设置时间
		RTC_Set_Date(14,5,5,1);		//设置日期
		//RTC_Set_AlarmA(7,0,0,10);	//设置闹钟时间
		RTC_Write_BKR(0,0X5050);	//标记已经初始化过了
	} 
	//RTC_Set_WakeUp(4,0);			//配置WAKE UP中断,1秒钟中断一次 
	return 0;
}
Esempio n. 2
0
/***********************************************************************
		module		:	[机器设置操作]
		function	:	[设置时间]
  		return		:	[0:成功
  						其它:失败]
		comment		:	[全局普通函数]
		machine		:	[EH-0818]
		language	:	[CHN]
 		keyword		:	[MAC_SET]
		date		:	[11/07/20]
 		author		:	[chen-zhengkai]
************************************************************************/
int setTime()
{
	typ_TIME	ttime;
	char	dBuf[40] = {0};
	const char	returnStr[] = "按任意键返回";
	const char	cueStr[] = "请输入时间:";
	int	ret = 0;
	int	hour = 0;
	int	minute = 0;
	int	second = 0;
	char	str1[20] = {0};
	char	str2[20] = {0};
	char	str3[20] = {0};
	
	
	RTC_Get_Time(&ttime);
	hour = ttime.hour;
	minute = ttime.min;
	second = ttime.sec;
		
	strcpy(str1,"时:");
	strcpy(str2,"分:");
	strcpy(str3,"秒:");
		
	while (1) {
//		sprintf(dBuf,"%02d:%02d:%02d",ttime.hour,ttime.min,ttime.sec);
//		DispStr_CE(0,0,dBuf,DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,0,cueStr,DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,4,str1,DISP_POSITION);
		DispStr_CE(0,8,str2,DISP_POSITION);
		DispStr_CE(0,12,str3,DISP_POSITION);
		
		ret = input_date_time(4,2,1,0,23,str1,&hour);
		if (ret == -1) {
			return ret;
		}
		ret = input_date_time(8,2,1,0,59,str2,&minute);	
		if (ret == -1) {
			continue;
		}
		ret = input_date_time(12,2,1,0,59,str3,&second);	
		if (ret != -1) {
			ttime.hour = hour;
			ttime.min = minute;
			ttime.sec = second;			
			RTC_Set_Time(&ttime);
			sprintf(dBuf,"%02d:%02d:%02d",hour,minute,second);						
			DispStr_CE(0,6,dBuf,DISP_CENTER|DISP_CLRSCR);
			DispStr_CE(0,10,returnStr,DISP_CENTER);
			delay_and_wait_key( 3, EXIT_KEY_ALL, 0 );
			return 0;
		}
	}
}
Esempio n. 3
0
Status_t Menu_Set_Time(struct Menu_State_s *Menu_State_p, const uint32 Key, void *Ptr)
{
    FuncIN(MENU_SET_TIME);

    Status_t Status = GENERAL_ERROR;
    RtcTime_t Time_s;
    static uint32 EnterFlag = 0;

    if(EnterFlag == 0)
    {
        RTC_Get_Time(&Time_s);

        Hour = Time_s.Hour;
        Minute = Time_s.Minute;
        Second = Time_s.Second;
    }

    clrd();
    printd(1, "Set Time");
    printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
    Menu_Time_Update_Disp_Ptr_Pos();

    printc("(%s): Enter! Key = 0x%08X\n", __func__, Key);

    switch(Key)
    {
    case ENTER_KEY_EVENT:
        // First enter in this state
        if(EnterFlag == 0)
        {
            EnterFlag = 1;
            break;
        }

        Time_s.Hour = Hour;
        Time_s.Minute = Minute;
        Time_s.Second = Second;

        Status = RTC_Set_Time(&Time_s);
        VERIFY(Status, Status);

        if(Status == SUCCESS)
            printd(2, "%02u:%02u:%02u Time Set!", Hour, Minute, Second);
        else
            printd(2, "%02u:%02u:%02u ERROR!!!", Hour, Minute, Second);

        break;
    case CANCEL_KEY_EVENT:
        clrd();

        Hour = 0;
        Minute = 0;
        Second = 0;

        PointerPosition = 1;

        EnterFlag = 0;

        EXIT_SUCCESS_FUNC(MENU_SET_TIME);
    case UP_KEY_EVENT:
        Menu_Time_Increment_Ptr_Pos_Number();
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case DOWN_KEY_EVENT:
        Menu_Time_Decrement_Ptr_Pos_Number();
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case LEFT_KEY_EVENT:
        if(PointerPosition > 1)
        {
            PointerPosition--;
            Menu_Time_Update_Disp_Ptr_Pos();
        }
        break;
    case RIGHT_KEY_EVENT:
        if(PointerPosition < 6)
        {
            PointerPosition++;
            Menu_Time_Update_Disp_Ptr_Pos();
        }
        break;
    case EXIT_KEY_EVENT:
        clrd();

        Hour = 0;
        Minute = 0;
        Second = 0;

        PointerPosition = 1;

        EnterFlag = 0;

        EXIT_SUCCESS_FUNC(MENU_SET_TIME);
    case MENU_KEY_EVENT:
        clrd();

        Hour = 0;
        Minute = 0;
        Second = 0;

        PointerPosition = 1;

        EnterFlag = 0;

        EXIT_SUCCESS_FUNC(MENU_SET_TIME);
    case NUM1_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(1);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM2_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(2);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM3_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(3);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM4_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(4);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM5_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(5);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM6_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(6);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM7_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(7);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM8_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(8);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM9_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(9);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    case NUM0_KEY_EVENT:
        Menu_Time_Set_Ptr_Pos_Number(0);
        printd(2, "%02u:%02u:%02u", Hour, Minute, Second);
        break;
    default:
        Fatal_Abort(-INVALID_INPUT_PARAMETER);
    } // switch(Key)

    syncd();

    EXIT_SUCCESS_FUNC(MENU_SET_TIME);
}
void cgi_process_data (U8 code, U8 *dat, U16 len) {
  /* This function is called by HTTP server to process the returned Data    */
  /* for the CGI Form POST method. It is called on SUBMIT from the browser. */
  /* Parameters:                                                            */
  /*   code  - callback context code                                        */
  /*           0 = www-url-encoded form data                                */
  /*           1 = filename for file upload (0-terminated string)           */
  /*           2 = file upload raw data                                     */
  /*           3 = end of file upload (file close requested)                */
  /*           4 = any xml encoded POST data (single or last stream)        */
  /*           5 = the same as 4, but with more xml data to follow          */
  /*               Use http_get_content_type() to check the content type    */  
  /*   dat   - pointer to POST received data                                */
  /*   len   - received data length  */ 
  static FILE *f = NULL;
  U32 n;
  U8 *var,*p;
	
	BOOL format_flash = FALSE;
	BOOL settings_save = FALSE;
	
	BOOL sntp_time_configurations_load = FALSE;
	RTC_Time rtc_time;
	BOOL rtc_save = FALSE;
	BOOL add_admin = FALSE, add_user = FALSE;
	
	BOOL save_user = FALSE, delete_user = FALSE, delete_users = FALSE;
	BOOL save_admin = FALSE, delete_admin = FALSE;
	
	int admin_number = 0;
	int user_number = 0;
	USER *user = malloc(sizeof(USER));
	ADMIN *admin = malloc(sizeof(ADMIN));

	static FINFO file_info;

	//ADMIN *admin = malloc(sizeof(ADMIN));
	//USER *user = malloc(sizeof(USER));
	
  switch (code) {
    case 0:
      /* Url encoded form data received. */
      break;
    case 1:
      /* Filename for file upload received as encoded by the browser. */
      /* It might contain an absolute path to a file from the sending */
      /* host. Open a file for writing. */
      var = dat;
      /* Remove path info from filename, keep only the name. */
      for (p = dat; *p; p++) {
        if (*p == '\\') var = p + 1;
      }
      if (*var == 0) {
        /* Send was clicked but a filename was not selected. */
        return;
      }
      /* Filename is OK, initialize the card. */
      if (finit(NULL) != 0) {
        f = NULL;
        return;
      }
      /* Files will be stored to the root directory of SD card. */
      f = fopen ((const char *)var,"w");
      return;
    case 2:
      /* File content data received. Write data to a file. */
      /* This function will be called several times with   */
      /* code 2 when a big file is being uploaded.         */
      if (f != NULL) {
        /* Write in 512 byte blocks. This is the optimal way for */
        /* the FAT FS with caching enabled. For cache buffer     */
        /* size of 4KB the file write speed is 1.2 MByte/sec.    */
        while ((n = len) > 0) {
          if (n > 512) n = 512;
          fwrite (dat,1,n,f);
          dat += n;
          len -= n;
        }
      }
      return;
    case 3:
      /* File upload finished. Close a file. */
      if (f != NULL) {
        fclose (f);
      }
      return;
    default:
      /* Ignore all other codes. */
      return;
  }

  if (len == 0) {
    /* No data or all items (radio, checkbox) are off. */
    return;
  }
	
  var = (U8 *)alloc_mem (40);

  do {
    /* Parse all returned parameters. */
    dat = http_get_var (dat, var, 40);
    if (var[0] != 0) {
			if (str_scomp(var, (const U8*)"file_delete=") == TRUE) { // FILE DELETE
        fdelete((const char *)var+12);
      } else if (str_scomp(var, (const U8*)"format_flash=yes") == TRUE) { // FORMAT FLASH
        format_flash = TRUE;
      } else if (str_scomp(var, (const U8*)"ani_file_delete=") == TRUE) { // ANIMATION FILE DELETE
				if (fdelete((const char *)var+16) == 0) {
					if (ANIMATION_PLAY && strcmp(AnimationFileName, (const char *)var+16) == 0) {
						Animation_Stop();
					}
				}
			} else if (str_scomp(var, (const U8*)"delete_all_ani=yes") == TRUE) {
				while (ffind("*.ani", &file_info) == 0) {
					fdelete((const char*)file_info.name);
				}
			}
			
			// USERS & ADMINS COMMANDS
			if(str_scomp(var, (const U8*)"delete_user="******"%d", &user_number);
				delete_user = TRUE;
			} else if(str_scomp(var, (const U8*)"delete_users=") == TRUE) {
				delete_users = TRUE;
      } else if(str_scomp(var, (const U8*)"save_user="******"%d", &user_number);
				save_user = TRUE;
			} else if (str_scomp(var, (const U8*)"add_user=yes") == TRUE) {
				add_user = TRUE;
			}
			
			if(str_scomp(var, (const U8*)"delete_admin=") == TRUE) {
				sscanf((const char *)var+12, "%d", &admin_number);
				delete_admin = TRUE;
      } else if(str_scomp(var, (const U8*)"save_admin=") == TRUE) {
				sscanf((const char *)var+10, "%d", &admin_number);
				save_admin = TRUE;
			} else if (str_scomp(var, (const U8*)"add_admin=yes") == TRUE) {
				add_admin = TRUE;
			}
			
			if(str_scomp(var, (const U8*)"username="******"password="******"first_name=") == TRUE) {
				strcpy(user->First_Name, (const char *)var+11);
			} else if(str_scomp(var, (const U8*)"last_name=") == TRUE) {
				strcpy(user->Last_Name, (const char *)var+10);
			} else if(str_scomp(var, (const U8*)"email=") == TRUE) {
				strcpy(user->Email, (const char *)var+6);
				strcpy(admin->Email, (const char *)var+6);
			}
			
			// SNTP TIME COMMANDS
			if(str_scomp(var, (const U8*)"sntp_time_load=yes") == TRUE) {
				sntp_time_configurations_load = TRUE;
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_0=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[0]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_1=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[1]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_2=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[2]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_1_3=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_1[3]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_0=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[0]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_1=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[1]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_2=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[2]);
			} else if(str_scomp(var, (const U8*)"sntp_ip_2_3=") == TRUE) {
				sscanf((const char *)var+12, "%d", (int*)&SNTP_Server_IP_2[3]);
			}
			
			// TIME COMMANDS
			if(str_scomp(var, (const U8*)"time_format=") == TRUE) {
				strcpy(SETTINGS_DATA[TIME_FORMAT], (const char *)var+12);
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"date_format=") == TRUE) {
				strcpy(SETTINGS_DATA[DATE_FORMAT], (const char *)var+12);
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"timezone_offset_select=") == TRUE) {
				TIME_ZONE_OFFSET_SELECTED_VALUE = atoi((const char *)var+23);
				settings_save = TRUE;
			}

			// MANUAL TIME COMMANDS
			if(str_scomp(var, (const U8*)"manual_time=") == TRUE) {
				sscanf((const char *)var+12, "%d:%d", (int*)&rtc_time.Hour, (int*)&rtc_time.Min);
				rtc_save = TRUE;
				settings_save = TRUE;
			} else if(str_scomp(var, (const U8*)"manual_date=") == TRUE) {
				sscanf((const char *)var+12, "%d-%d-%d", (int*)&rtc_time.Year, (int*)&rtc_time.Mon, (int*)&rtc_time.Mday);
				rtc_save = TRUE;
				settings_save = TRUE;
			}
			
			// ANIMATION
			if(str_scomp(var, (const U8*)"animation_start=") == TRUE) {
				AnimationFileName = (char *)malloc(strlen((const char *)var)-15);
				strcpy(AnimationFileName, (const char *)var+16);
				Animation_Start();
			} else if(str_scomp(var, (const U8*)"animation_stop=yes") == TRUE) {
				Animation_Stop();
			}
    }
  } while (dat);
  free_mem ((OS_FRAME *)var);
	
	if (format_flash == TRUE) {
		SPI_FLASH_Delete_All_Files();
	} else if (sntp_time_configurations_load == TRUE) {
		SNTP_Load_Time();
	} else if (rtc_save == TRUE) {
		TIME_ZONE_OFFSET_SELECTED_VALUE = 0;		
		RTC_Set_Time(rtc_time);
	} else if(save_user == TRUE) {
		if(USERS_Check_User(user) == USER_Warning_OK) {
			strcpy((&Users[user_number])->Username, user->Username);
			strcpy((&Users[user_number])->Password, user->Password);
			strcpy((&Users[user_number])->First_Name, user->First_Name);
			strcpy((&Users[user_number])->Last_Name, user->Last_Name);
			strcpy((&Users[user_number])->Email, user->Email);

			USERS_Save();
		}
	}	else if(save_admin == TRUE) {
		if(ADMINS_Check_Admin(admin) == ADMIN_Warning_OK) {
			strcpy((&Admins[admin_number])->Username, admin->Username);
			strcpy((&Admins[admin_number])->Password, admin->Password);
			strcpy((&Admins[admin_number])->Email, admin->Email);

			ADMINS_Save();
		}
	} else if(delete_user == TRUE) {
		USERS_Remove_User_By_Index(user_number);
	} else if(delete_admin == TRUE) {
		ADMINS_Remove_Admin_By_Index(admin_number);
	} else if (add_admin == TRUE) {
		ADMINS_Add_Admin(admin);
	} else if (add_user == TRUE) {
		USERS_Add_User(user);
	} else if(delete_users == TRUE) {
		USERS_Remove_All();
	}
	
	if (settings_save == TRUE) {
		SETTINGS_Save();
	}
	
	free(user);
	free(admin);
}