void rtc_get (struct rtc_time* tm) { RTCCON |= 1; tm->tm_year = BCD2HEX(BCDYEAR); tm->tm_mon = BCD2HEX(BCDMON); tm->tm_wday = BCD2HEX(BCDDATE); tm->tm_mday = BCD2HEX(BCDDAY); tm->tm_hour = BCD2HEX(BCDHOUR); tm->tm_min = BCD2HEX(BCDMIN); tm->tm_sec = BCD2HEX(BCDSEC); if (tm->tm_sec==0) { /* we have to re-read the rtc data because of the "one second deviation" problem */ /* see RTC datasheet for more info about it */ tm->tm_year = BCD2HEX(BCDYEAR); tm->tm_mon = BCD2HEX(BCDMON); tm->tm_mday = BCD2HEX(BCDDAY); tm->tm_wday = BCD2HEX(BCDDATE); tm->tm_hour = BCD2HEX(BCDHOUR); tm->tm_min = BCD2HEX(BCDMIN); tm->tm_sec = BCD2HEX(BCDSEC); } RTCCON &= ~1; if(tm->tm_year >= 70) tm->tm_year += 1900; else tm->tm_year += 2000; }
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; } } }
//------------------------------- // Convert month (BCD) to string of Month // 0x01=January // 0x02=February // ........... // 0x12 = December // And so on //------------------------------- char * Int2Month(unsigned char month) { return MonthStr[BCD2HEX(month)-1]; }