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(); }
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();
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); }
// 判断不同驾驶员,连续驾驶的结束时间 // 速度为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; } } } }
// 判断 不同驾驶员 ,连续驾驶的开始时间 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; } } } }
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; } } }
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; } }
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(); }
/***********************************************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; }