//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; }
/*********************************************************************** 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; } } }
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); }