void Camra_Take_Exception(void) { if(CameraState.camera_running==1) { if((CameraState.timeoutCounter++)>=3) // 每发送一包,清除,只有单包发送超过3秒没返回才认为失败 { if(CameraState.timeoutCounter==4) { rt_kprintf("\r\n Camera %d Error\r\n",Camera_Number); Power_485CH1_OFF; // 第一路485的电 关电工作 } if(CameraState.timeoutCounter==5) { Power_485CH1_ON; // 第一路485的电 开 电工作 } if(CameraState.timeoutCounter==7) { //------------ Normal Process -------------- //FeedDog; End_Camera(); // Power_485CH1_OFF; // 第一路485的电 关电工作 rt_kprintf("\r\n Camera %d Try again r\n",Camera_Number); WatchDog_Feed(); delay_ms(500); // end--duration--new start WatchDog_Feed(); Power_485CH1_ON; // 第一路485的电 开 电工作 delay_ms(1000); // end--duration--new start WatchDog_Feed(); //------------ Multi Take Process ------------ if(1==MultiTake.Taking) { MultiTake_Exception(); } else { // 单次拍照 SingleCamera_TakeRetry++; if(SingleCamera_TakeRetry>=3) { SingleCamera_TakeRetry=0;//clear rt_kprintf("\r\n 单路拍照超过最大次数!\r\n"); SingleCamra_TakeResualt_BD=1; } else { // continue operate this camera Start_Camera(Camera_Number); //rt_kprintf("\r\n 重新拍 %d \r\n",Camera_Number); } } } } } }
void DF_Erase(void) { u16 i = 0; /* 1. 从0x1000 4K 开始擦除28K 7 sector 2.擦除56个扇区 7 个32k block */ DF_TAKE; rt_kprintf("\r\n ISP erase start\r\n"); // -----erase 28 K area ------------- for(i = 0; i < 7; i++) // 7 secotor { WatchDog_Feed(); SST25V_SectorErase_4KByte(ISP_StartArea + i * 0x1000); DF_delay_ms(220); WatchDog_Feed(); } //----------- erase 32k for(i = 0; i < 7; i++) // 56sector { WatchDog_Feed(); SST25V_BlockErase_32KByte(0x8000 + i * 0x8000); DF_delay_ms(800); WatchDog_Feed(); } DF_RELEASE; rt_kprintf("\r\n ISP erase OK DFReady\r\n"); }
u8 Api_Config_read(u8 *name,u16 ID,u8* buffer, u16 Rd_len) // 读取Media area ID 是报数 { if(strcmp((const char*)name,config)==0) { DF_ReadFlash(ConfigStart_offset, 0, buffer, Rd_len); DF_delay_ms(80); // large content delay return true; } if(strcmp((const char*)name,jt808)==0) { WatchDog_Feed(); DF_ReadFlash(JT808Start_offset, 0, buffer, Rd_len); DF_delay_ms(100); // large content delay return true; } if(strcmp((const char*)name,tired_config)==0) { DF_ReadFlash(TiredCondifg_offset, 0, buffer, Rd_len); DF_delay_ms(10); return true; } if(strcmp((const char*)name,BD_ext_config)==0) { DF_ReadFlash(DF_BD_Extend_Page, 0, buffer, Rd_len); DF_delay_ms(10); return true; } return false; }
//----------------------------------------------------------------------------------------------------------------------------- u8 SaveCycleGPS(u32 cyclewr, u8 *content , u16 saveLen) { /* //old NOTE : Flash 1 page = 512 Bytes ; 1 Record = 32 Bytes ; 1page= 16 Records 1Sector=8Page=128Records NOTE : Flash 1 page = 512 Bytes ; 1 Record = 128 Bytes ; 1page= 4Records 1Sector=8Page=32Records */ u32 pageoffset = 0; //Page 偏移 u32 InPageoffset; //页内Record偏移 u16 InPageAddr = 0; //页内 地址偏移 // u8 reg[1]={0}; u8 rd_back[128]; u16 i = 0, retry = 0; //---------------------------------------------------------------------------------------------- // 1. Judge Whether needs to Erase page pageoffset = (u32)(cycle_write >> 2); // 计算出 Page 偏移 除以4 (每个page能放4条记录) InPageoffset = cycle_write - (u32)(pageoffset << 2); // 计算出 页内偏移地址 InPageAddr = (u16)(InPageoffset << 7); // 计算出页内 字节 乘以 128 (每个记录128个字节) if(((pageoffset % 8) == 0) && (InPageoffset == 0)) // 判断是否需要擦除Sector 被移除到下一个Sector 1Sector=8Page { WatchDog_Feed(); SST25V_SectorErase_4KByte((pageoffset + CycleStart_offset)*PageSIZE); // erase Sector DF_delay_ms(60); if(GB19056.workstate == 0) rt_kprintf("\r\n Erase Cycle Sector : %d\r\n", (pageoffset >> 3)); }
//----------------------------------------------------------------------------------------------------------------------------- u8 SaveCycleGPS(u32 cyclewr,u8 *content ,u16 saveLen) { /* NOTE : Flash 1 page = 512 Bytes ; 1 Record = 32 Bytes ; 1page= 16 Records 1Sector=8Page=128Records */ u32 pageoffset=0; //Page 偏移 u32 InPageoffset; //页内Record偏移 u16 InPageAddr=0; //页内 地址偏移 u8 reg[1]={0}; u8 rd_back[40]; u16 i=0,retry=0; //---------------------------------------------------------------------------------------------- // 1. Judge Whether needs to Erase page pageoffset=(u32)(cycle_write>>4); // 计算出 Page 偏移 除以16 InPageoffset=cycle_write-(u32)(pageoffset<<4); // 计算出 页内偏移地址 InPageAddr=(u16)(InPageoffset<<5); // 计算出页内 字节 乘以 32 (每个记录32个字节) if(((pageoffset%8)==0)&&(InPageoffset==0)) // 判断是否需要擦除Sector 被移除到下一个Sector 1Sector=8Page { WatchDog_Feed(); SST25V_SectorErase_4KByte((pageoffset+CycleStart_offset)*PageSIZE); // erase Sector DF_delay_ms(20); rt_kprintf("\r\n Erase Cycle Sector : %d\r\n",(pageoffset>>3)); }
// 1 . 循环存储 u8 Api_cycle_write(u8 *buffer, u16 len) { // if(rt_mutex_take(DF_lock_mutex,150)==RT_EOK) { WatchDog_Feed(); if( SaveCycleGPS(cycle_write,buffer,len)) { //---- updata pointer ------------- cycle_write++; if(cycle_write>=Max_CycleNum) cycle_write=0; DF_Write_RecordAdd(cycle_write,cycle_read,TYPE_CycleAdd); DF_delay_us(20); //------------------------------- // rt_mutex_release(DF_lock_mutex); // 释放 return true; } else { //------------------------------- // rt_mutex_release(DF_lock_mutex); // 释放 return false; } } // else // return false; }
u8 Api_DFdirectory_Delete(u8* name) { if(strcmp((const char*)name,voice)==0) { WatchDog_Feed(); SST25V_BlockErase_32KByte((SoundStart_offdet<<9)); DF_delay_ms(300); WatchDog_Feed(); return true; } if(strcmp((const char*)name,camera_1)==0) { WatchDog_Feed(); SST25V_BlockErase_64KByte((PicStart_offset<<9)); DF_delay_ms(500); WatchDog_Feed(); return true; } if(strcmp((const char*)name,camera_2)==0) { WatchDog_Feed(); SST25V_BlockErase_64KByte((PicStart_offset2<<9)); DF_delay_ms(500); WatchDog_Feed(); return true; } if(strcmp((const char*)name,camera_3)==0) { WatchDog_Feed(); SST25V_BlockErase_64KByte((PicStart_offset3<<9)); DF_delay_ms(500); WatchDog_Feed(); return true; } if(strcmp((const char*)name,camera_4)==0) { WatchDog_Feed(); SST25V_BlockErase_64KByte((PicStart_offset4<<9)); DF_delay_ms(500); WatchDog_Feed(); return true; } return false; }
u8 Api_Config_Recwrite_Large(u8 *name,u16 ID,u8* buffer, u16 wr_len) // 更新最新记录 { if(strcmp((const char*)name,jt808)==0) { WatchDog_Feed(); DF_WriteFlashSector(JT808Start_offset, 0, buffer, wr_len); // formal use WatchDog_Feed(); DF_WriteFlashSector(JT808_BakSetting_offset,0,buffer,wr_len); // bak setting WatchDog_Feed(); DF_WriteFlashSector(JT808_Bak2Setting_offset,0,buffer,wr_len); // bak setting return true; } if(strcmp((const char*)name,BD_ext_config)==0) { DF_WriteFlashSector(DF_BD_Extend_Page,0, buffer, wr_len); return true; } return false; }
// 1 . Ñ»·´æ´¢ u8 Api_cycle_write(u8 *buffer, u16 len) { WatchDog_Feed(); if( SaveCycleGPS(cycle_write,buffer,len)) { //---- updata pointer ------------- cycle_write++; if(cycle_write>=Max_CycleNum) cycle_write=0; DF_Write_RecordAdd(cycle_write,cycle_read,TYPE_CycleAdd); //------------------------------- return true; } else return false; }
/* note: 使用前提是 addr+len 不允许超过 本扇区 */ u8 SST25V_OneSector_Write(u8 *p, u32 addr, u32 len) { u32 SectorStartAddr=addr&0xFFFFFFFFFFFFF000,i=0; // 获取起始扇区的起始地址 u32 insector_offset=addr&0xFFF; // 取扇区内偏移地址 // 1. get 4096 to buf WatchDog_Feed(); SST25V_BufferRead(OneSectorReg,SectorStartAddr,4096); WatchDog_Feed(); // rt_kprintf("\r\n insector_offset=0x%X \r\n",insector_offset); //OutPrint_HEX("\r\n 读取前",OneSectorReg,4096); delay_ms(35); WatchDog_Feed(); // 2. 把更新的内容给填进去 memcpy(OneSectorReg+insector_offset,p,len); // 3. erase Sector SST25V_SectorErase_4KByte(SectorStartAddr); WatchDog_Feed(); DF_delay_ms(130); // OutPrint_HEX("\r\n 擦完写前",OneSectorReg,4096); // 4. write buf to DF // SST25V_strWrite(OneSectorReg,SectorStartAddr,4096); SST25V_BufferWrite(OneSectorReg,SectorStartAddr,4096); DF_delay_ms(130); //---------------- add for debug---------------- WatchDog_Feed(); SST25V_BufferRead(reg_4096,SectorStartAddr,4096); DF_delay_ms(50); // rt_thread_delay(2); // OutPrint_HEX("\r\n 读取后",OneSectorReg,4096); for(i=0;i<4096;i++) { if(OneSectorReg[i]!=reg_4096[i]) { rt_kprintf("\r\n Error at =0x%X \r\n",i); break; } } //----------- debug -------------------------------------------------- WatchDog_Feed(); delay_ms(5); //-------------------------------- return true; }
void DF_EraseAppFile_Area(void) { u16 i=0; /* 1.先擦除0扇区 2.读出page48内容并将其写到第0扇区的page 0 3.读出page49内容并将其写到第0扇区的page 0 4.擦除 6-38扇区 即 48page 到 304 page 5.以后有数据过来就直接写入,不需要再擦除了 */ SST25V_SectorErase_4KByte(0x0); DF_delay_ms(5); WatchDog_Feed(); DF_ReadFlash(48,0,SST25Temp,PageSIZE); //DF_delay_ms(1); DF_WriteFlashDirect(0,0,SST25Temp,PageSIZE); DF_delay_ms(1); WatchDog_Feed(); DF_ReadFlash(49,0,SST25Temp,PageSIZE); DF_WriteFlashDirect(1,0,SST25Temp,PageSIZE); DF_delay_ms(1); for(i=6;i<134;i++) // 要求是512K -> 128 erase sector 6-134 128K -> 32 { WatchDog_Feed(); SST25V_SectorErase_4KByte(((u32)i*4096)); DF_delay_ms(5); WatchDog_Feed(); } DF_ReadFlash(0,0,SST25Temp,PageSIZE); DF_WriteFlashDirect(48,0,SST25Temp,PageSIZE); WatchDog_Feed(); DF_delay_ms(1); DF_ReadFlash(1,0,SST25Temp,PageSIZE); WatchDog_Feed(); DF_WriteFlashDirect(49,0,SST25Temp,PageSIZE); rt_kprintf("\r\nSST25Ready\r\n"); }
void DwinLCD_Send(void) { u8 i=0; u8 send[300]; memset(DwinLCD.Txinfo,0,sizeof(DwinLCD.Txinfo)); DwinLCD.TxInfolen=0; DwinLCD.Txinfo[0]=0xAA; DwinLCD.Txinfo[1]=0x55; switch (DwinLCD.Type) { case LCD_SETTIME: // 授时 /* AA 55 0A 80 1F 5A 12 09 01 03 11 53 01 -----授时 注: 12 09 01 03 11 53 01 表示 12年 09月01日 星期3 11:53:01 */ DwinLCD.Txinfo[2]=0x0A; DwinLCD.Txinfo[3]=0x80; DwinLCD.Txinfo[4]=0x1F; // 寄存器 DwinLCD.Txinfo[5]=0x5A; DwinLCD.Txinfo[6]=((((time_now.year))/10)<<4)+(((time_now.year))%10); DwinLCD.Txinfo[7]=((time_now.month/10)<<4)+(time_now.month%10); DwinLCD.Txinfo[8]=((time_now.day/10)<<4)+(time_now.day%10); DwinLCD.Txinfo[9]=0x01; DwinLCD.Txinfo[10]=((time_now.hour/10)<<4)+(time_now.hour%10); DwinLCD.Txinfo[11]=((time_now.min/10)<<4)+(time_now.min%10); DwinLCD.Txinfo[12]=((time_now.sec/10)<<4)+(time_now.sec%10); rt_device_write(&Device_485,0,( const char*)DwinLCD.Txinfo,13); // rt_kprintf("\r\n 授时\r\n"); // printf(":"); // for(i=0;i<13;i++) // printf(" %02X",DwinLCD.Txinfo[i]); // printf("\r\n"); break; case LCD_SETSPD: // 速度方向 // AA 55 07 82 00 01 01 30 00 F3 DwinLCD.Txinfo[2]=0x05; DwinLCD.Txinfo[3]=0x82; DwinLCD.Txinfo[4]=0x10; DwinLCD.Txinfo[5]=0x00; DwinLCD.Txinfo[6]=((Speed_gps/10)>>8); // 速度 DwinLCD.Txinfo[7]=(u8)(Speed_gps/10); // DwinLCD.Txinfo[8]=(GPS_direction>>8); ; // 方向 // DwinLCD.Txinfo[9]=GPS_direction; rt_device_write(&Device_485,0,( const char*)DwinLCD.Txinfo,8); break; case LCD_SDTXT: // UART4_output_LongData("\xAA\x55\x05\x82\x10\x00\xFF\xFF",8 ); // clear screen WatchDog_Feed(); DwinLCD.Txinfo[2]=5+DwinLCD.TXT_contentLen; // 长度 DwinLCD.Txinfo[3]=0x82; DwinLCD.Txinfo[4]=0x00; // LCD ID DwinLCD.Txinfo[5]=0x05; memcpy(DwinLCD.Txinfo+6,DwinLCD.TXT_content,DwinLCD.TXT_contentLen); DwinLCD.Txinfo[DwinLCD.TXT_contentLen+6]=0xFF; DwinLCD.Txinfo[DwinLCD.TXT_contentLen+7]=0xFF; //UART4_output_LongData((const char*)DwinLCD.Txinfo,8+DwinLCD.TxInfolen); DwinLCD.TxInfolen=DwinLCD.TXT_contentLen; rt_device_write(&Device_485,0,( const char*)DwinLCD.Txinfo,8+DwinLCD.TxInfolen); WatchDog_Feed(); delay_ms(30); rt_kprintf("\r\n 5 inch LCD:"); for(i=0;i<6+DwinLCD.TxInfolen;i++) rt_kprintf(" %02X",DwinLCD.TXT_content[i]); rt_kprintf("\r\n"); break; case LCD_GPSNUM: // GPS 信息 AA 55 05 82 10 01 00 03 最大为20 DwinLCD.Txinfo[2]=5; // 长度 DwinLCD.Txinfo[3]=0x82; DwinLCD.Txinfo[4]=0x10; // LCD ID DwinLCD.Txinfo[5]=0x01; DwinLCD.Txinfo[6]=0x00; //Data DwinLCD.Txinfo[7]=Satelite_num; rt_device_write(&Device_485,0,( const char*)DwinLCD.Txinfo,8); break; case LCD_GSMNUM:// GSM 信息 AA 55 05 82 10 02 00 09 最大为31 DwinLCD.Txinfo[2]=5; // 长度 DwinLCD.Txinfo[3]=0x82; DwinLCD.Txinfo[4]=0x10; // LCD ID DwinLCD.Txinfo[5]=0x02; DwinLCD.Txinfo[6]=0x00; //Data DwinLCD.Txinfo[7]=ModuleSQ; rt_device_write(&Device_485,0,( const char*)DwinLCD.Txinfo,8); break; case LCD_VechInfo:// 发送车辆信息要拼文本信息 DwinLCD.Txinfo[2]=5; // 长度 DwinLCD.Txinfo[3]=0x82; DwinLCD.Txinfo[4]=0x37; // LCD ID DwinLCD.Txinfo[5]=0x00; //Data memset(send,0,sizeof((const char*)send)); sprintf(send,"\r\nSocket: %d.%d.%d.%d : %d\r\n",RemoteIP_main[0],RemoteIP_main[1],RemoteIP_main[2],RemoteIP_main[3],RemotePort_main); memcpy(DwinLCD.Txinfo+6,send,strlen((const char*)send)); DwinLCD.TxInfolen=6+strlen((const char*)send); memset(send,0,sizeof((const char*)send)); sprintf(send,"\r\nAPN: %s\r\n",APN_String); memcpy(DwinLCD.Txinfo+ DwinLCD.TxInfolen,send,strlen((const char*)send)); DwinLCD.TxInfolen+=strlen((const char*)send); memset(send,0,sizeof((const char*)send)); sprintf(send,"\r\n车辆入网ID: "); memcpy(DwinLCD.Txinfo+ DwinLCD.TxInfolen,send,strlen((const char*)send)); DwinLCD.TxInfolen+=strlen((const char*)send); memcpy(DwinLCD.Txinfo+ DwinLCD.TxInfolen,SimID_12D,12); //---- DwinLCD.TxInfolen+=12; memset(send,0,sizeof((const char*)send)); sprintf(send,"\r\n\r\n车牌号: %s",Vechicle_Info.Vech_Num,strlen((const char*)(Vechicle_Info.Vech_Num))); memcpy(DwinLCD.Txinfo+ DwinLCD.TxInfolen,send,strlen((const char*)send)); DwinLCD.TxInfolen+=strlen(send); // memset(send,0,sizeof((const char*)send)); //sprintf(send,"\r\n车辆类型: %s",Vechicle_Info.Vech_Type,strlen((const char*)(const char*)(Vechicle_Info.Vech_Type))); // memcpy(DwinLCD.Txinfo+ DwinLCD.TxInfolen,send,strlen((const char*)send)); // DwinLCD.TxInfolen+=strlen((const char*)send); DwinLCD.Txinfo[2]=DwinLCD.TxInfolen-3; // 补填 rt_device_write(&Device_485,0,( const char*)DwinLCD.Txinfo,DwinLCD.TxInfolen); rt_kprintf("\r\n Dwin:"); for(i=0;i<DwinLCD.TxInfolen;i++) rt_kprintf(" %02X",DwinLCD.Txinfo[i]); rt_kprintf("\r\n"); break; default : return; } //------------------------- DwinLCD.Type=LCD_IDLE; DwinLCD.TxInfolen=0; // 信息长度 //------------------------ }
static void HMI_thread_entry(void* parameter) { u8 counter_printer=0; // finsh_init(&shell->parser); rt_kprintf("\r\n ---> HMI thread start !\r\n"); //------------ lcd related -------------- Init_lcdkey(); lcd_init(); rt_kprintf("\r\nJT808Conf_struct.password_flag=%d\r\n",JT808Conf_struct.password_flag); if(JT808Conf_struct.password_flag==0) { JT808Conf_struct.Regsiter_Status=0; //需要重新注册 pMenuItem=&Menu_0_0_password; pMenuItem->show(); } else { pMenuItem=&Menu_1_Idle; pMenuItem->show(); } while (1) { KeyCheckFun(); pMenuItem->timetick( 10 ); pMenuItem->keypress( 10 ); if(print_rec_flag==1) { counter_printer++; if(counter_printer>=20)//加电后1s开始打印,打印间隔必须>300ms { counter_printer=0; if(TiredDrv_write>0) { ReadPiLao(1); Dis_pilao(data_tirexps); } if(ExpSpdRec_write>0) { ReadEXspeed(1); Dis_chaosu(data_tirexps); } if(0==Fetch_15minSpeed(15)) { print_rec_flag=2; DaYin=1;//开始打印 } else { DaYin=0; print_rec_flag=0; } WatchDog_Feed(); rt_kprintf("\r\n----------开始打印"); } } else if(print_rec_flag==2) { counter_printer++; if(counter_printer>=7)//打印间隔必须>300ms 7 { counter_printer=0; if(ModuleStatus&Status_GPS) Dayin_Fun(1); else Dayin_Fun(0); } } //-------------------------------------------- if(ASK_Centre.ASK_disp_Enable==1) { ASK_Centre.ASK_disp_Enable=0; pMenuItem=&Menu_3_1_CenterQuesSend; pMenuItem->show(); } else if(TextInfo.TEXT_SD_FLAG==1) { TextInfo.TEXT_SD_FLAG=0; pMenuItem=&Menu_7_CentreTextDisplay; pMenuItem->show(); } //-------------------------------------------- rt_thread_delay(5); } }
//------- ¹Ì¶¨Î»Öà ÐòºÅ¼Ç¼ ----------- u8 Api_RecordNum_Write( u8 *name,u8 Rec_Num,u8 *buffer, u16 len) // Rec_Num<128 Len<128 { WatchDog_Feed(); if(strcmp((const char*)name,event_808)==0) { DF_WriteFlash(DF_Event_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,msg_broadcast)==0) { DF_WriteFlash(DF_Broadcast_offset+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,phonebook)==0) { DF_WriteFlash(DF_PhoneBook_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,Rail_cycle)==0) { DF_WriteFlash(DF_Event_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,Rail_rect)==0) { DF_WriteFlash(DF_RectangleRail_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,Rail_polygen)==0) { DF_WriteFlash(DF_PolygenRail_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,turn_point)==0) { DF_WriteFlash(DF_turnPoint_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,route_line)==0) { DF_WriteFlash(DF_Route_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,ask_quesstion)==0) { DF_WriteFlash(DF_AskQuestion_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,text_msg)==0) { DF_WriteFlash(DF_Msg_Page+Rec_Num, 0,buffer, len); return true; } //------------------------------- if(strcmp((const char*)name,pic_index)==0) { DF_WriteFlash(DF_PicIndex_Page+Rec_Num, 0,buffer, len); return true; } if(strcmp((const char*)name,voice_index)==0) { DF_WriteFlash(DF_SoundIndex_Page+Rec_Num, 0,buffer, len); return true; } return false; }
void Pic_Data_Process(void) { u8 tmp[40]; u8 pic_buf[600]; u16 i=0; // 1. Judge last package PackageLen=_485_content_wr; if(PackageLen<PageSIZE) last_package=1; else if((last_package==0)&&(_485_content[510]==0xFF)&&(_485_content[511]==0xD9)) { last_package=1; } // 2. Block ++ CameraState.block_counter++; // 3. Check first packet if(CameraState.create_Flag==1) // 如果是第一包则创建文件 hhmmss_x.jpg { CameraState.create_Flag=0; // clear memset(tmp,0,sizeof(tmp)); memset(PictureName,0,sizeof(PictureName)); //----------- 创建图片文件处理 ------------- /* 每张图片占32个page 其中第1个page 为图片索引,后边127个Page为图片内容 SST25 开辟个区域做图片缓存 */ DF_Read_RecordAdd(pic_write,pic_read,TYPE_PhotoAdd); //pic_current_page=(pic_write<<5)+PicStart_offset; //计算图片起始page if(Camera_Number==1) { pic_current_page=PicStart_offset; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_1); } else if(Camera_Number==2) { pic_current_page=PicStart_offset2; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_2); ; } else if(Camera_Number==3) { pic_current_page=PicStart_offset3; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_3); } else if(Camera_Number==4) { pic_current_page=PicStart_offset4; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_4); } DF_delay_ms(150); WatchDog_Feed(); pic_current_page++; // 图片内容从 第二个page 开始 第一个Page 存储的是图片索引 pic_PageIn_offset=0; // 页内偏移清空 pic_size=0; // 清除图片大小 //------------------------------------------ memset(PictureName,0,sizeof(PictureName)); sprintf((char*)PictureName,"%d%d%d-%d.jpg",time_now.hour,time_now.min,time_now.sec,Camera_Number); rt_kprintf("\r\n 创建图片名称: %s \r\n 图片地址: %d ",PictureName,pic_write); WatchDog_Feed(); //----- TF ------- /*if(Udisk_Test_workState==1) { // creat_file(PictureName); //TF卡创建文件 rt_kprintf("\r\n udisk 创建文件成功!"); udisk_fd=open((const char*)PictureName, O_RDWR|O_CREAT, 0); // 创建U 盘文件 rt_kprintf(" \r\n udiskfile: %s open res=%d \r\n",PictureName, udisk_fd); } */ WatchDog_Feed(); // ----- 写图片索引 ------- Save_MediaIndex(0,PictureName,Camera_Number,0); } // 4. 填写存储图片内容数据 -------------------- WatchDog_Feed(); DF_WriteFlashDirect(pic_current_page,0,_485_content, PackageLen);// 写一次一个Page 512Bytes delay_ms(90); //rt_kprintf(" \r\n ---- write pic_current_page=%d \r\n",pic_current_page); rt_kprintf(" \r\n ---- packet=%d \r\n",CameraState.block_counter); //--- read compare memset(pic_buf,0,600); DF_ReadFlash(pic_current_page,0,pic_buf, PackageLen); delay_ms(30); for(i=0;i<PackageLen;i++) { if(pic_buf[i]!=_485_content[i]) { rt_kprintf(" \r\n ----read not equal write where i=%d Rd[i]=%2X WR[i]=%2X \r\n",i,pic_buf[i],_485_content[i]); DF_WriteFlashDirect(pic_current_page,0,_485_content, PackageLen);// 再写一次一个Page 512Bytes delay_ms(85); break; } } //----- TF ------- /* if((Udisk_Test_workState==1)&&(udisk_fd)) { fd_res=write(udisk_fd,_485_content, PackageLen); rt_kprintf("\r\n wr--1 :%s resualt=%d\r\n",PictureName,fd_res); if(fd_res<=0) close(udisk_fd); } */ pic_size+=PackageLen;// 图片大小累加 pic_current_page++; //写一页加一 // pic_PageIn_offset+=PackageLen; DF_delay_ms(50); // 5. 最后一包 ,即拍照结束 if(last_package==1) { //f_close(&FileCameraIn); // 拍照完成关闭图片文件 memset(_485_content,0,sizeof(_485_content)); _485_content_wr=0; //------------- 图片拍照结束 相关处理 ------------------------------------ // 1. 写图片索引 if(Camera_Number==1) pic_current_page=PicStart_offset; //计算图片起始page else if(Camera_Number==2) pic_current_page=PicStart_offset2; //计算图片起始page else if(Camera_Number==3) pic_current_page=PicStart_offset3; //计算图片起始page else if(Camera_Number==4) pic_current_page=PicStart_offset4; //计算图片起始page PictureName[18]=Camera_Number; memcpy(PictureName+19,(u8*)&pic_size,4); DF_WriteFlashDirect(pic_current_page,0,PictureName, 23); DF_delay_ms(8); // 5.1 更新图片读写记录 pic_write++; if(pic_write>=Max_PicNum) pic_write=0; DF_Write_RecordAdd(pic_write,pic_read,TYPE_PhotoAdd); //-------------------------------------------------------------------------- rt_kprintf("\r\n PicSize: %d Bytes\r\n Camera %d End\r\n",pic_size,Camera_Number); SingleCamra_TakeResualt_BD=0; // 单路摄像头拍照 SD_ACKflag.f_BD_CentreTakeAck_0805H=1; // 发送中心拍照命令应答 //---------- Normal process --------------------- End_Camera(); // 5.2 拍照完成后检查有没有多路 拍-----------Multi Take process-------------------- if(1==MultiTake.Taking) { switch(Camera_Number) { case 1: //-------- old process--------------- MultiTake.TakeResult[0]=Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; //----------拍照下一路摄像头----------- Camera_Number=2; //------------------------- Start_Camera(Camera_Number); break; case 2: //-------- old process--------------- MultiTake.TakeResult[1]=Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; //----------拍照下一路摄像头----------- Camera_Number=3; //------------------------- Start_Camera(Camera_Number); break; case 3: //-------- old process--------------- MultiTake.TakeResult[2]=Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; //----------拍照下一路摄像头----------- Camera_Number=4; //------------------------- Start_Camera(Camera_Number); break; case 4: //-------- old process--------------- MultiTake.TakeResult[3]=Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; break; default: MultiTake_End(); break; } } else if((0==MultiTake.Taking)&&(0==MultiTake.Transfering)) { //------ 判断车门开关拍照是否上传状态 ------ if((OpenDoor_StartTakeFlag==1)&&(Opendoor_transFLAG==0)) { MultiTake_End(); // 车门开关不上传 OpenDoor_StartTakeFlag=0; } else { rt_kprintf("\r\n Single Camera !\r\n"); if(Camera_Take_not_trans==0) Photo_send_start(Camera_Number); //在不是多路拍照的情况下拍完就可以上传了 else Camera_Take_not_trans=0; } } // 拍照结束 } else { //------- change state ------- CameraState.status=transfer; CameraState.OperateFlag=0; // clear TX_485const_Enable=1; // 发送485 命令 _485_RXstatus._485_receiveflag=IDLE_485; //rt_kprintf("\r\n Head info_len : %d\r\n",_485_content_wr); memset(_485_content,0,sizeof(_485_content)); _485_content_wr=0; //rt_kprintf("\r\n One Packet Over!\r\n"); } }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: if(comfirmation_flag==4) { pMenuItem=&Menu_1_Idle; pMenuItem->show(); } else { pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } col_screen=0; CarBrandCol_Cou=1; comfirmation_flag=0; break; case KeyValueOk: if(col_screen==1) { if(MENU_set_carinfor_flag==1) { comfirmation_flag=0; lcd_fill(0); lcd_text12(12,3,"车牌颜色设置完成",16,LCD_MODE_SET); lcd_text12(24,18,"按菜单键返回",12,LCD_MODE_SET); lcd_update_all(); rt_kprintf("\r\n车牌颜色设置完成,按菜单键返回,%d",Vechicle_Info.Dev_Color); // 车牌颜色 if(License_Not_SetEnable==1) Vechicle_Info.Dev_Color=0; else Vechicle_Info.Dev_Color=Menu_color_num; DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } else { col_screen=2; CarSet_0_counter=0;// menu_color_flag=1;//车牌颜色设置完成 lcd_fill(0); lcd_text12(20,3,(char *)car_col,13,LCD_MODE_SET); lcd_text12(12,18,"按确认键查看信息",16,LCD_MODE_SET); lcd_update_all(); } } else if(col_screen==2) { menu_color_flag=0; col_screen=3; comfirmation_flag=1;//保存设置信息标志 lcd_fill(0); if(License_Not_SetEnable==1) lcd_text12(0,0,"无牌照",6,LCD_MODE_SET); else lcd_text12(0,0,(char *)Menu_Car_license,8,LCD_MODE_SET); lcd_text12(54,0,(char *)Menu_VechileType,6,LCD_MODE_SET); //==== 车牌号未设置===== if(License_Not_SetEnable==1) lcd_text12(96,0,(char *)"0",1,LCD_MODE_SET); else lcd_text12(96,0,(char *)Menu_VecLogoColor,4,LCD_MODE_SET); lcd_text12(0,12,"SIM卡号",7,LCD_MODE_SET); lcd_text12(43,12,(char *)Menu_sim_Code,11,LCD_MODE_SET); lcd_text12(24,23,"确定",4,LCD_MODE_INVERT); lcd_text12(72,23,"取消",4,LCD_MODE_SET); lcd_update_all(); } else if(comfirmation_flag==1) { col_screen=0; comfirmation_flag=4; //保存设置的信息 lcd_fill(0); lcd_text12(18,3,"保存已设置信息",14,LCD_MODE_SET); lcd_text12(0,18,"按菜单键进入待机界面",20,LCD_MODE_SET); lcd_update_all(); // 保存速度类型 // gps速度JT808Conf_struct.Speed_GetType= 0: 传感器速度 JT808Conf_struct.Speed_GetType=1 spd_type(JT808Conf_struct.Speed_GetType); //车牌号 //rt_kprintf("\r\n(保存信息)Menu_Car_license=%s",Menu_Car_license); memset(Vechicle_Info.Vech_Num,0,sizeof(Vechicle_Info.Vech_Num)); memcpy(Vechicle_Info.Vech_Num,Menu_Car_license,strlen((const char*)Menu_Car_license)); //rt_kprintf("\r\n(保存信息)Vechicle_Info.Vech_Num=%s",Vechicle_Info.Vech_Num); // 车辆类型 memset(Vechicle_Info.Vech_Type,0,sizeof(Vechicle_Info.Vech_Type)); memcpy(Vechicle_Info.Vech_Type,Menu_VechileType,10); //rt_kprintf("\r\n(保存1 )Vechicle_Info.Vech_Num=%s",Vechicle_Info.Vech_Num); /////// //车辆VIN memset(Vechicle_Info.Vech_VIN,0,sizeof(Vechicle_Info.Vech_VIN)); memcpy(Vechicle_Info.Vech_VIN,Menu_Vin_Code,17); //rt_kprintf("\r\n(保存2 )Vechicle_Info.Vech_Num=%s",Vechicle_Info.Vech_Num); // SIM卡号码 //memset(JT808Conf_struct.Vech_sim,0,sizeof(JT808Conf_struct.Vech_sim)); //memcpy(JT808Conf_struct.Vech_sim,Menu_sim_Code,11); //----------------------------------------------------------------------------- memset(SimID_12D,0,sizeof(SimID_12D)); SimID_12D[0]='0'; memcpy(SimID_12D+1,Menu_sim_Code,11); DF_WriteFlashSector(DF_SIMID_12D,0,SimID_12D,13); delay_ms(80); //rt_kprintf("\r\n 显示屏设备SIM_ID设置为 : %s", SimID_12D); DF_ReadFlash(DF_SIMID_12D,0,SimID_12D,13); SIMID_Convert_SIMCODE(); // 转换 //---------------------------------------------------------------------------- //rt_kprintf("\r\n(保存3 )Vechicle_Info.Vech_Num=%s",Vechicle_Info.Vech_Num); // 车牌颜色 if(License_Not_SetEnable==1) Vechicle_Info.Dev_Color=0; else Vechicle_Info.Dev_Color=Menu_color_num; //车辆设置完成 Login_Menu_Flag=1; // 输入界面为0 DF_WriteFlashSector(DF_LOGIIN_Flag_offset,0,&Login_Menu_Flag,1); // 存储 //rt_kprintf("\r\n(保存4 )Vechicle_Info.Vech_Num=%s",Vechicle_Info.Vech_Num); DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); delay_ms(3); DF_ReadFlash(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } else if(comfirmation_flag==2) { col_screen=0; comfirmation_flag=3; lcd_fill(0); lcd_text12(6, 3,"请确认是否重新设置",18,LCD_MODE_SET); lcd_text12(12,18,"按确认键重新设置",16,LCD_MODE_SET); lcd_update_all(); } else if(comfirmation_flag==3) { col_screen=0; comfirmation_flag=0; //重新设置 pMenuItem=&Menu_0_loggingin; pMenuItem->show(); comfirmation_flag=0; col_screen=0; CarBrandCol_Cou=1; } break; case KeyValueUP: if(col_screen==1) { CarBrandCol_Cou--; if(CarBrandCol_Cou<1) CarBrandCol_Cou=5; car_col_fun(CarBrandCol_Cou); } else if(col_screen==3) { comfirmation_flag=1; lcd_fill(0); if(License_Not_SetEnable==1) lcd_text12(0,0,"无牌照",6,LCD_MODE_SET); else lcd_text12(0,0,(char *)Menu_Car_license,8,LCD_MODE_SET); lcd_text12(54,0,(char *)Menu_VechileType,6,LCD_MODE_SET); //==== 车牌号未设置===== if(License_Not_SetEnable==1) lcd_text12(96,0,(char *)"0",1,LCD_MODE_SET); else lcd_text12(96,0,(char *)Menu_VecLogoColor,4,LCD_MODE_SET); lcd_text12(0,12,"SIM卡号",7,LCD_MODE_SET); lcd_text12(43,12,(char *)Menu_sim_Code,11,LCD_MODE_SET); lcd_text12(24,23,"确定",4,LCD_MODE_INVERT); lcd_text12(72,23,"取消",4,LCD_MODE_SET); lcd_update_all(); } break; case KeyValueDown: if(col_screen==1) { CarBrandCol_Cou++; if(CarBrandCol_Cou>5) CarBrandCol_Cou=1; car_col_fun(CarBrandCol_Cou); } else if(col_screen==3) { comfirmation_flag=2; lcd_fill(0); if(License_Not_SetEnable==1) lcd_text12(0,0,"无牌照",6,LCD_MODE_SET); else lcd_text12(0,0,(char *)Menu_Car_license,8,LCD_MODE_SET); lcd_text12(54,0,(char *)Menu_VechileType,6,LCD_MODE_SET); //==== 车牌号未设置===== if(License_Not_SetEnable==1) lcd_text12(96,0,(char *)"0",1,LCD_MODE_SET); else lcd_text12(96,0,(char *)Menu_VecLogoColor,4,LCD_MODE_SET); lcd_text12(0,12,"SIM卡号",7,LCD_MODE_SET); lcd_text12(43,12,(char *)Menu_sim_Code,11,LCD_MODE_SET); lcd_text12(24,23,"确定",4,LCD_MODE_SET); lcd_text12(72,23,"取消",4,LCD_MODE_INVERT); lcd_update_all(); } break; } KeyValue=0; }
void Pic_Data_Process(void) { u8 tmp[40]; u8 pic_buf[600]; u16 i = 0; DF_TAKE; // 1. Judge last package PackageLen = _485_content_wr; if(PackageLen < PageSIZE) CameraState.last_package = 1; else if((CameraState.last_package == 0) && (_485_content[510] == 0xFF) && (_485_content[511] == 0xD9)) { CameraState.last_package = 1; } // 2. Block ++ CameraState.block_counter++; // 3. Check first packet if(CameraState.create_Flag == 1) // 如果是第一包则创建文件 hhmmss_x.jpg { CameraState.create_Flag = 0; // clear memset(tmp, 0, sizeof(tmp)); memset(PictureName, 0, sizeof(PictureName)); //----------- 创建图片文件处理 ------------- /* 每张图片占32个page 其中第1个page 为图片索引,后边127个Page为图片内容 SST25 开辟个区域做图片缓存 */ if(CameraState.Camera_Number == 1) { pic_current_page = PicStart_offset; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_1); } else if(CameraState.Camera_Number == 2) { pic_current_page = PicStart_offset2; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_2); ; } else if(CameraState.Camera_Number == 3) { pic_current_page = PicStart_offset3; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_3); } else if(CameraState.Camera_Number == 4) { pic_current_page = PicStart_offset4; //起始page 固定为缓存起始地址 //擦除一个64K的区域用于图片存储 Api_DFdirectory_Delete(camera_4); } DF_delay_ms(150); WatchDog_Feed(); pic_current_page++; // 图片内容从 第二个page 开始 第一个Page 存储的是图片索引 pic_PageIn_offset = 0; // 页内偏移清空 pic_size = 0; // 清除图片大小 //------------------------------------------ memset(PictureName, 0, sizeof(PictureName)); // sprintf((char*)PictureName,"0:%02d%02d%02d%02d%02d%02d-%d.jpg",time_now.year,time_now.month,time_now.day,time_now.hour,time_now.min,time_now.sec,CameraState.Camera_Number); sprintf((char*)PictureName,"%02d%02d%02d%02d%02d%02d-%d.jpg",time_now.year,time_now.month,time_now.day,time_now.hour,time_now.min,time_now.sec,CameraState.Camera_Number); if(GB19056.workstate == 0) rt_kprintf("\r\n 创建图片名称: %s \r\n ", PictureName); WatchDog_Feed(); WatchDog_Feed(); // ----- 写图片索引 ------- Save_MediaIndex(0, PictureName, CameraState.Camera_Number, 0); } // 4. 填写存储图片内容数据 -------------------- WatchDog_Feed(); DF_WriteFlashDirect(pic_current_page, 0, _485_content, PackageLen); // 写一次一个Page 512Bytes delay_ms(150); #ifdef TFCARD if(sd_ok) sd_writefile(PictureName, _485_content, PackageLen); #endif // rt_kprintf(" \r\n ---- pkg=%d \r\n",CameraState.block_counter); //--- read compare memset(pic_buf, 0, 600); DF_ReadFlash(pic_current_page, 0, pic_buf, PackageLen); delay_ms(10); for(i = 0; i < PackageLen; i++) { if(pic_buf[i] != _485_content[i]) { if(GB19056.workstate == 0) rt_kprintf(" \r\n write--read Error"); // rt_kprintf(" \r\n ----read not equal write where i=%d Rd[i]=%2X WR[i]=%2X \r\n",i,pic_buf[i],_485_content[i]); DF_WriteFlashDirect(pic_current_page, 0, _485_content, PackageLen); // 再写一次一个Page 512Bytes delay_ms(100); break; } } pic_size += PackageLen; // 图片大小累加 pic_current_page++; //写一页加一 // pic_PageIn_offset+=PackageLen; // DF_delay_ms(50); // 5. 最后一包 ,即拍照结束 if(CameraState.last_package == 1) { memset(_485_content, 0, sizeof(_485_content)); _485_content_wr = 0; //------------- 图片拍照结束 相关处理 ------------------------------------ // 1. 写图片索引 if(CameraState.Camera_Number == 1) pic_current_page = PicStart_offset; //计算图片起始page else if(CameraState.Camera_Number == 2) pic_current_page = PicStart_offset2; //计算图片起始page else if(CameraState.Camera_Number == 3) pic_current_page = PicStart_offset3; //计算图片起始page else if(CameraState.Camera_Number == 4) pic_current_page = PicStart_offset4; //计算图片起始page PictureName[18] = CameraState.Camera_Number; memcpy(PictureName + 19, (u8 *)&pic_size, 4); DF_WriteFlashDirect(pic_current_page, 0, PictureName, 23); DF_delay_ms(8); // 5.1 更新图片读写记录 //-------------------------------------------------------------------------- if(GB19056.workstate == 0) rt_kprintf("\r\n PicSize: %d Bytes\r\n Camera %d End\r\n", pic_size, CameraState.Camera_Number); CameraState.SingleCamra_TakeResualt_BD = 0; // 单路摄像头拍照 SD_ACKflag.f_BD_CentreTakeAck_0805H = 1; // 发送中心拍照命令应答 //---------- Normal process --------------------- Camera_End(MultiTake.Taking); // 5.2 拍照完成后检查有没有多路 拍-----------Multi Take process-------------------- if(1 == MultiTake.Taking) { switch(CameraState.Camera_Number) { case 1: //-------- old process--------------- MultiTake.TakeResult[0] = Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry = 0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; //----------拍照下一路摄像头----------- CameraState.Camera_Number = 2; //------------------------- Camera_Start(CameraState.Camera_Number); break; case 2: //-------- old process--------------- MultiTake.TakeResult[1] = Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry = 0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; //----------拍照下一路摄像头----------- CameraState.Camera_Number = 3; //------------------------- Camera_Start(CameraState.Camera_Number); break; case 3: //-------- old process--------------- MultiTake.TakeResult[2] = Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry = 0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; //----------拍照下一路摄像头----------- CameraState.Camera_Number = 4; //------------------------- Camera_Start(CameraState.Camera_Number); break; case 4: //-------- old process--------------- MultiTake.TakeResult[3] = Take_Success; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry = 0; //------------------------------------------- if(CHKendTake_ReadyToSend())// 检查是否是最后的拍照线路 break; break; default: MultiTake_End(); break; } } else if((0 == MultiTake.Taking) && (0 == MultiTake.Transfering)) { //------ 判断车门开关拍照是否上传状态 ------ if((OpenDoor_StartTakeFlag == 1) && (Opendoor_transFLAG == 0)) { MultiTake_End(); // 车门开关不上传 OpenDoor_StartTakeFlag = 0; } else { //rt_kprintf("\r\n Single Camera !\r\n"); if(CameraState.Camera_Take_not_trans == 0) Photo_send_start(CameraState.Camera_Number); //在不是多路拍照的情况下拍完就可以上传了 else CameraState.Camera_Take_not_trans = 0; } } // 拍照结束 } else { //------- change state ------- CameraState.status = transfer; CameraState.OperateFlag = 0; // clear CameraState.TX_485const_Enable = 1; // 发送485 命令 _485_RXstatus._485_receiveflag = IDLE_485; memset(_485_content, 0, sizeof(_485_content)); _485_content_wr = 0; //rt_kprintf("\r\n One Packet Over!\r\n"); } DF_RELEASE; }
static void HMI_thread_entry(void* parameter) { u8 counter_printer=0; // finsh_init(&shell->parser); rt_kprintf("\r\n ---> HMI thread start !\r\n"); //------------ lcd related -------------- // Init_lcdkey(); // delay_ms(400); // 屏rst 拉低 维持一段时间 //lcd_init(); //-------- IC card related --------------- Init_4442(); rt_kprintf("\r\nVechicle_Info.loginpassword_flag=%d\r\n",Login_Menu_Flag); if(Login_Menu_Flag==0) { JT808Conf_struct.Regsiter_Status=0; //需要重新注册 pMenuItem=&Menu_0_0_password; pMenuItem->show(); } else { pMenuItem=&Menu_1_Idle; pMenuItem->show(); } while (1) { KeyCheckFun(); pMenuItem->timetick( 10 ); pMenuItem->keypress( 10 ); if(print_rec_flag==1) { counter_printer++; if(counter_printer>=10)//加电后1s开始打印,打印间隔必须>300ms { counter_printer=0; if(TiredDrv_write>0) { ReadPiLao(1); Dis_pilao(data_tirexps); } if(ExpSpdRec_write>0) { ReadEXspeed(1); Dis_chaosu(data_tirexps); } Fetch_15minSpeed(15); print_rec_flag=2; DaYin=1;//开始打印 /*if(0==Fetch_15minSpeed(15)) { print_rec_flag=2; DaYin=1;//开始打印 } else { DaYin=0; print_rec_flag=0; //----------------------------------------------------- gps_onoff(1); //开启GPS 模块的点 print_workingFlag=0; // 打印状态进行中 Power_485CH1_ON; // 开启485 //Speak_ON; // 开启音频功放 //----------------------------------------------------- }*/ WatchDog_Feed(); rt_kprintf("\r\n----------开始打印"); } } else if(print_rec_flag==2) { counter_printer++; if(counter_printer>=4)//打印间隔必须>300ms 7 { counter_printer=0; //if(ModuleStatus&Status_GPS) Dayin_Fun(1); /*else Dayin_Fun(0);*/ } } //---------- IC card insert -------------------------- // if(GSM_PWR.GSM_power_over==1) CheckICInsert(); //------- Buzzer ----------------------------------- KeyBuzzer(IC_CardInsert); //-------------------------------------------- if(ASK_Centre.ASK_disp_Enable==1) { ASK_Centre.ASK_disp_Enable=0; pMenuItem=&Menu_3_1_CenterQuesSend; pMenuItem->show(); } else if(TextInfo.TEXT_SD_FLAG==1) { TextInfo.TEXT_SD_FLAG=0; pMenuItem=&Menu_7_CentreTextDisplay; pMenuItem->show(); } //-------------------------------------------- rt_thread_delay(10); } }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: break; case KeyValueOk: if(type_selc_screen==1) { type_selc_screen=2; if(type_selc_flag==1) { lcd_fill(0); lcd_text12(9,3,"车辆类型:两客一危",17,LCD_MODE_SET); lcd_text12(6,18,"按确认键设置下一项",18,LCD_MODE_SET); lcd_update_all(); Vechicle_Info.Vech_Type_Mark=1; } else { lcd_fill(0); lcd_text12(15,3,"车辆类型:货运车",15,LCD_MODE_SET); lcd_text12(6,18,"按确认键设置下一项",18,LCD_MODE_SET); lcd_update_all(); Vechicle_Info.Vech_Type_Mark=2; } } else if(type_selc_screen==2) { if(MENU_set_carinfor_flag==1) { //-------------------------------------------------------------------------------- // select mode if(Vechicle_Info.Vech_Type_Mark==1) //两客一危 { Vechicle_Info.Link_Frist_Mode=1; Socket_main_Set("60.28.50.210:9131"); //-------- 清除鉴权码 ------------------- idip("clear"); } else if(Vechicle_Info.Vech_Type_Mark==2) // 公共货运平台 { Vechicle_Info.Link_Frist_Mode=0; port_main("7008"); //-------- 清除鉴权码 ------------------- idip("clear"); } //------------------------------------------------------------------------------------ DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } type_selc_screen=0; type_selc_flag=0; CarSet_0_counter=1; pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueUP: if(type_selc_screen==1) { type_selc_flag=1; lcd_fill(0); lcd_text12(0, 3,"两客一危",8,LCD_MODE_INVERT); lcd_text12(0,18,"货运",4,LCD_MODE_SET); lcd_update_all(); } break; case KeyValueDown: if(type_selc_screen==1) { type_selc_flag=2; lcd_fill(0); lcd_text12(0, 3,"两客一危",8,LCD_MODE_SET); lcd_text12(0,18,"货运",4,LCD_MODE_INVERT); lcd_update_all(); } break; } KeyValue=0; }
/******************************************************************************** * FunctionName: TaskSet * * Description : 设置任务,设置完删除任务 * * Parameters : None. * * Returns : None. *******************************************************************************/ void TaskSet(void *p_arg) { unsigned char k, data_flash_temp[208]={0xAE, 0x35, 0x24, 0x70, 0x80, 0xB7, 0x80, 0xBA, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x5C, 0x1B, 0x5E, 0x02, 0x77, 0x02, 0xED, 0xEF, 0x80, 0xB8, 0x80, 0xB9, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1F, 0x80, 0x9B, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x80, 0x9A, 0x1E, 0x80, 0xF5, 0x1E, 0x8F, 0x70, 0x02, 0xEA, 0x8C, 0x80, 0xB8, 0x80, 0xB9, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9A, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x80, 0x9A, 0x1E, 0x80, 0xF5, 0x1E, 0x85, 0x88, 0x80, 0xB8, 0x80, 0xB8, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9A, 0x1E, 0x5C, 0x1E, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1F, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x15, 0x80, 0xA4, 0x02, 0x86, 0xB7, 0x04, 0x81, 0x6D, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0xAF, 0xFB, 0x02, 0x77, 0x1F, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7}; // INT8U i; u32 seed; u8 random_data,i; //INT32U msg = 0; //INT8U err = 0; OS_CPU_SR cpu_sr = 0; p_arg = p_arg; DelayMs(30); OS_ENTER_CRITICAL(); BSP_Init(); Flash_Read(RFIR_ID_ADDR, MY_ID, 4); //读取FLASH ID存入BUF #if 0 SendString("\n\rMY ID:"); for(i=0;i<4;i++)//sizeof(ID) { SendString(";"); Outint(MY_ID[i]); } #endif /******************************************************************************** * Description : 任务建立 共9个任务 *******************************************************************************/ CT361SndErrSemp = OSSemCreate(0);//creat sem //创建协议解析任务 OSTaskCreate(TaskProtocol, (void*)0, &TaskProtocolStk[TASK_PROTOCOL_STKSIZE-1], TASK_PROTOCOL_PRIO); //创建串口发送任务 OSTaskCreate(TaskProtoSend, (void*)0, &TaskProtoSendStk[TASK_PROTO_SEND_STKSIZE-1], TASK_PROTO_SEND_PRIO ); //创建量产测试任务 OSTaskCreate(TaskTest, (void*)0, &TaskTestStk[TASK_TEST_STKSIZE-1], TASK_TEST_PRIO ); //创建4432接收任务 OSTaskCreate(TaskSi4432Read, (void*)0, &TaskSi4432ReadStk[TASK_SET_STKSIZE-1], TASK_Si4432_READ_PRIO ); //创建返回码接收任务 OSTaskCreate(TaskCT361SndErr,\ (void*)0,\ &TaskCT361SndErrStk[TASK_CT361_SND_ERR_STKSIZE-1],\ TASK_CT361_SND_ERR_PRIO); /******************************************************************************** * Description : 创建消息队列 *******************************************************************************/ // SetMBox = OSQCreate(&SetQBuff[0], TASK_SET_QSIZE); ProtocolMBox = OSQCreate(&ProtocolQBuff[0], TASK_PROTOCOL_QSIZE); ProtoSendMBox = OSQCreate(&ProtoSendQBuff[0], TASK_PROTOSEND_QSIZE); TestMBox = OSQCreate(&TestQBuff[0], TASK_TEST_QSIZE); Si4432ReadMBox = OSQCreate(&Si4432ReadQBuff[0], TASK_Si4432READ_QSIZE); OS_EXIT_CRITICAL(); SysTickInit(); //自我删除 // OSTaskDel(OS_PRIO_SELF); /*自我删除函数会自动进行任务的调度,因此此处不需要添加延时*/ Flash_Write(0x800D678,data_flash_temp,208); for (;;) { /**********学习状态指示灯********/ if(learn_cmd==1) //学习开始标志位 { LED_Send(0);// 绿灯关闭 LED_Learn(1);//红灯闪烁 WatchDog_Feed(); //喂狗 OSTimeDly(4); WatchDog_Feed(); //喂狗 LED_Learn(0); WatchDog_Feed(); //喂狗 OSTimeDly(4); WatchDog_Feed(); //喂狗 Timout_Count--; if(Timout_Count==0) { Timout_Count=TIMOUT_20s; OSQPost(TestMBox, (void*)Stu_Fail); //学习失败信号 learn_cmd=0; //清空学习成功标志位 } } if(learn_cmd==0) //学习成功标志位 { LED_Learn(0);//红灯关闭 LED_Send(1); //绿灯开启 } /**********生成随机滚动序列*********/ seed+=23; if(seed>65000) seed=0; srand(seed); random_data=rand(); test_roll_list=random_data^0x29; if(learn_cmd==0) { Timout_Count2--; if((Timout_Count2>=40)&&(Timout_Count2<=200)) { LED_Send(0); } else if((Timout_Count2<40)&&(Timout_Count2>=1)) { LED_Send(1); // Timout_Count2=200; } else if(Timout_Count2<=0) Timout_Count2=200; } WatchDog_Feed(); //喂狗 OSTimeDly(1); } }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: //从组内退出到组选择 if(License_Type_flag==2) { License_Type_flag=1; if(License_SetFlag==1)//需要退出到设置类型选择,没有需要再删除的了 License_Modify_Flag=1; License_Type_Sel(License_Type_Counter,0); } //组选择按" 菜单" 选择需要修改的字符 else if((License_Type_flag==1)&&(License_Modify_Flag==0))//反向选择最后一项 { if(License_SetFlag>1)//未设置退出 { License_Modify_Flag=1;//??? //选中将要修改的字符 License_SetFlag_temp=License_SetFlag; License_Type_Sel(License_Type_Counter,1); } else { License_SetFlag=1; License_SetCounter_0=0; License_SetCounter_1=0; License_SetCounter_2=0; License_SetCounter_3=0; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; memset(Menu_Car_license,0,sizeof(Menu_Car_license)); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } } //选择要修改再次按" 菜单 "退出设置项选择 else if(License_Modify_Flag==1) { License_Modify_Flag=0; License_SetFlag=1; License_SetCounter_0=0; License_SetCounter_1=0; License_SetCounter_2=0; License_SetCounter_3=0; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; memset(Menu_Car_license,0,sizeof(Menu_Car_license)); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueOk: //选择是否设置车牌号 if(License_Type_flag==0) { if(License_set_noeffect==2) { License_SetFlag=1; License_SetCounter_0=0; License_SetCounter_1=0; License_SetCounter_2=0; License_SetCounter_3=0; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; //==================================================== // 没设置车牌号时为 1 License_Not_SetEnable=1; //=================================================== //写入车牌号是否设置标志 DF_WriteFlashSector(DF_License_effect,0,&License_Not_SetEnable,1); //设置下一项 CarSet_0_counter=2;//设置第2项 //rt_kprintf("\r\n设置下一项"); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } else if(License_set_noeffect==1)//开始设置车牌号 { License_set_noeffect=0;//退出到设置选项选择 License_Not_SetEnable=0; //写入车牌号是否设置标志 DF_WriteFlashSector(DF_License_effect,0,&License_Not_SetEnable,1); CounterBack=0; License_Type_Counter=0; License_Type_Sel(License_Type_Counter,0); License_Type_flag=1; //rt_kprintf("\r\n开始设置车牌号"); } } //设置车牌号开始 else if(License_Modify_Flag==1) { License_Modify_Flag=2; License_Type_Sel(License_Type_Counter,2); //rt_kprintf("\r\n 修改选组 License_Modif_Flag=%d ",License_Modify_Flag); } else if(License_Modify_Flag==2) { License_Type_flag=2;//进入组内 License_Modify_Flag=3; //rt_kprintf("\r\n 进入组内 License_Modif_Flag=%d ",License_Modify_Flag); //------替换要修改的字符--------------------------------- if((License_SetFlag>=1)&&(License_SetFlag<=17)) { if(License_Type_Counter==0) License_Set(License_SetCounter_0,1); else if(License_Type_Counter==1) License_Set(License_SetCounter_1,2); else if(License_Type_Counter==2) License_Set(License_SetCounter_2,3); else if(License_Type_Counter==3) License_Set(License_SetCounter_3,4); //rt_kprintf("\r\n License_SetFlag_temp=%d Menu_Vin_Code=%s",License_SetFlag_temp,Menu_Car_license); } } else if(License_Type_flag==1) { License_Type_flag=2; if(License_Type_flag==1) License_Type_flag=2; if(License_Modify_Flag==1) License_Modify_Flag=3; if((License_SetFlag>=1)&&(License_SetFlag<=9)) { if(License_Type_Counter==0) License_Set(License_SetCounter_0,1); else if(License_Type_Counter==1) License_Set(License_SetCounter_1,2); else if(License_Type_Counter==2) License_Set(License_SetCounter_2,3); else if(License_Type_Counter==3) License_Set(License_SetCounter_3,4); //rt_kprintf("\r\n第%d组",License_Type_Counter); } } else if(License_Type_flag==2) { //rt_kprintf("\r\n填充数据"); License_Type_flag=3; if((License_SetFlag>=1)&&(License_SetFlag<=8)) { if(License_Type_Counter==0) { if(License_Modify_Flag==3) { Menu_Car_license[License_SetFlag_temp-2]=ABC_License_0_9[License_SetCounter_0][0]; License_Modify_Flag=0; } else { Menu_Car_license[License_SetFlag-1]=ABC_License_0_9[License_SetCounter_0][0]; License_SetFlag++; } License_Set(License_SetCounter_0,1); //rt_kprintf("\r\n(0_9选择)=%d,%s",License_SetCounter_0,Menu_Car_license); } else if(License_Type_Counter==1) { if(License_Modify_Flag==3) { Menu_Car_license[License_SetFlag_temp-2]=ABC_License_A_M[License_SetCounter_1][0]; License_Modify_Flag=0; } else { Menu_Car_license[License_SetFlag-1]=ABC_License_A_M[License_SetCounter_1][0]; License_SetFlag++; } License_Set(License_SetCounter_1,2); //rt_kprintf("\r\n(A_M选择)=%d,%s",License_SetCounter_1,Menu_Car_license); } else if(License_Type_Counter==2) { if(License_Modify_Flag==3) { Menu_Car_license[License_SetFlag_temp-2]=ABC_License_N_Z[License_SetCounter_2][0]; License_Modify_Flag=0; } else { Menu_Car_license[License_SetFlag-1]=ABC_License_N_Z[License_SetCounter_2][0]; License_SetFlag++; } License_Set(License_SetCounter_2,3); //rt_kprintf("\r\n(N_Z选择)=%d,%s",License_SetCounter_2,Menu_Car_license); } else if(License_Type_Counter==3) { if(License_Modify_Flag==3) { memcpy(Menu_Car_license,(char *)Car_HZ_code[License_SetCounter_3],2); License_Modify_Flag=0; } else { memcpy(Menu_Car_license,(char *)Car_HZ_code[License_SetCounter_3],2); License_SetFlag++; License_SetFlag++; } License_Set(License_SetCounter_3,4); //rt_kprintf("\r\n(汉字选择)=%d,%s",License_SetCounter_3,Menu_Car_license); } if((License_Type_flag==3)&&(License_SetFlag<=8)) { License_Type_flag=1; License_SetCounter_0=0; License_SetCounter_1=0; License_SetCounter_2=0; License_SetCounter_3=0; License_Type_Sel(License_Type_Counter,0); //rt_kprintf("\r\n重新选组(1_2_3)=%d",License_Type_Counter); } } if((License_Type_flag==3)&&(License_SetFlag==9)) { if(MENU_set_carinfor_flag==1) { //rt_kprintf("\r\n车牌号设置完成,按菜单键返回,%s",Menu_Car_license); //车牌号 memset(Vechicle_Info.Vech_Num,0,sizeof(Vechicle_Info.Vech_Num)); memcpy(Vechicle_Info.Vech_Num,Menu_Car_license,strlen((const char*)Menu_Car_license)); DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } //License_Type_flag=0; License_SetFlag=10; lcd_fill(0); lcd_text12(18,3,"车牌号设置完成",14,LCD_MODE_SET); lcd_text12(6,18,"按确认键设置下一项",18,LCD_MODE_SET); lcd_update_all(); } } else if(License_SetFlag==10) { rt_kprintf("\r\n设置下一项"); License_SetFlag=1; License_SetCounter_0=0; License_SetCounter_1=0; License_SetCounter_2=0; License_SetCounter_3=0; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; CarSet_0_counter=2;//设置第2项 //rt_kprintf("\r\n设置下一项"); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } //} break; case KeyValueUP: if(License_Type_flag==0) { License_set_noeffect=1; lcd_fill(0); lcd_text12(0,3,"设置车牌号",10,LCD_MODE_INVERT); lcd_text12(0,18,"无牌照车辆",10,LCD_MODE_SET); lcd_update_all(); } else if(License_Modify_Flag==1) { if(License_SetFlag_temp>3) License_SetFlag_temp--; License_Type_Sel(0,1); //rt_kprintf("\r\nVIN_SetFlag_temp=%d",License_SetFlag_temp); } else if(License_Modify_Flag==2) { if(License_Type_Counter==0) License_Type_Counter=3; else License_Type_Counter--; License_Type_Sel(License_Type_Counter,2); //rt_kprintf("\r\n( up)修改选组"); } else { if(License_Type_flag==1)//选择是0-9 A-M N-Z {// if(License_Type_Counter==0) License_Type_Counter=3; else if(License_Type_Counter>=1) License_Type_Counter--; if(License_Modify_Flag==3) License_Type_Sel(License_Type_Counter,2); else License_Type_Sel(License_Type_Counter,0); //rt_kprintf("\r\n( up)License_Type_Counter=%d",License_Type_Counter); } else if(License_Type_flag==2)//组内选择 { if((License_SetFlag>=1)&&(License_SetFlag<=20)) { if(License_Type_Counter==0)//数字 { if(License_SetCounter_0==0) License_SetCounter_0=9; else License_SetCounter_0--; License_Set(License_SetCounter_0,1); } else if(License_Type_Counter==1)//A-M { if(License_SetCounter_1==0) License_SetCounter_1=12; else License_SetCounter_1--; License_Set(License_SetCounter_1,2); } else if(License_Type_Counter==2)//N-Z { if(License_SetCounter_2==0) License_SetCounter_2=12; else License_SetCounter_2--; License_Set(License_SetCounter_2,3); } else if(License_Type_Counter==3)//汉字选择 { if(License_SetCounter_3==0) License_SetCounter_3=30; else License_SetCounter_3--; License_Set(License_SetCounter_3,4); } } } } break; case KeyValueDown: if(License_Type_flag==0) { License_set_noeffect=2; lcd_fill(0); lcd_text12(0,3,"设置车牌号",10,LCD_MODE_SET); lcd_text12(0,18,"无牌照车辆",10,LCD_MODE_INVERT); lcd_update_all(); } else if(License_Modify_Flag==1) { if(License_SetFlag_temp<License_SetFlag) License_SetFlag_temp++; License_Type_Sel(0,1); //rt_kprintf("\r\nLicense_SetFlag_temp=%d",License_SetFlag_temp); } else if(License_Modify_Flag==2) { if(License_Type_Counter==3) License_Type_Counter=0; else License_Type_Counter++; License_Type_Sel(License_Type_Counter,2); //rt_kprintf("\r\n(down)修改选组"); } else { if(License_Type_flag==1)//选择是0-9 A-M N-Z { License_Type_Counter++; if(License_Type_Counter>3) License_Type_Counter=0; if(License_Modify_Flag==3) License_Type_Sel(License_Type_Counter,2); else License_Type_Sel(License_Type_Counter,0); //rt_kprintf("\r\n(down)License_Type_Counter=%d",License_Type_Counter); } else if(License_Type_flag==2)//组内选择 { if((License_SetFlag>=1)&&(License_SetFlag<=20)) { if(License_Type_Counter==0) { License_SetCounter_0++; if(License_SetCounter_0>9) License_SetCounter_0=0; License_Set(License_SetCounter_0,1); } else if(License_Type_Counter==1) { License_SetCounter_1++; if(License_SetCounter_1>12) License_SetCounter_1=0; License_Set(License_SetCounter_1,2); } else if(License_Type_Counter==2) { License_SetCounter_2++; if(License_SetCounter_2>12) License_SetCounter_2=0; License_Set(License_SetCounter_2,3); } else if(License_Type_Counter==3)//汉字选择 { License_SetCounter_3++; if(License_SetCounter_3>30) License_SetCounter_3=0; License_Set(License_SetCounter_3,4); } } } } break; } KeyValue=0; }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: pMenuItem = &Menu_0_loggingin; pMenuItem->show(); CarType_counter = 0; CarType_Type = 0; break; case KeyValueOk: if(CarType_Type == 1) { CarType_Type = 2; CarType(CarType_counter, 1); //printf("\r\nCarType_Type = %d",CarType_Type); } else if(CarType_Type == 2) { //写入车辆类型 if((CarType_counter >= 1) && (CarType_counter <= 8)) memset(Menu_VechileType, 0, sizeof(Menu_VechileType)); if(CarType_counter == 1) memcpy(Menu_VechileType, "货运车", 6); else if(CarType_counter == 2) memcpy(Menu_VechileType, "客运车", 6); else if(CarType_counter == 3) memcpy(Menu_VechileType, "危品车", 6); else if(CarType_counter == 4) memcpy(Menu_VechileType, "大型车", 6); else if(CarType_counter == 5) memcpy(Menu_VechileType, "中型车", 6); else if(CarType_counter == 6) memcpy(Menu_VechileType, "小型车", 6); else if(CarType_counter == 7) memcpy(Menu_VechileType, "微型车", 6); else if(CarType_counter == 8) memcpy(Menu_VechileType, "出租车", 6); CarType_Type = 3; // 车辆类型 if(MENU_set_carinfor_flag == 1) { //rt_kprintf("\r\n车辆类型设置完成,按菜单键返回,%s",Menu_VechileType); memset(Vechicle_Info.Vech_Type, 0, sizeof(Vechicle_Info.Vech_Type)); memcpy(Vechicle_Info.Vech_Type, Menu_VechileType, 10); DF_WriteFlashSector(DF_Vehicle_Struct_offset, 0, (u8 *)&Vechicle_Info, sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset, 0, (u8 *)&Vechicle_Info, sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset, 0, (u8 *)&Vechicle_Info, sizeof(Vechicle_Info)); } lcd_fill(0); lcd_text12(12, 3, "车辆类型选择完毕", 16, LCD_MODE_SET); lcd_text12(6, 18, "按确认键设置下一项", 18, LCD_MODE_SET); lcd_update_all(); } else if(CarType_Type == 3) { CarSet_0_counter = 4; //设置第4项 pMenuItem = &Menu_0_loggingin; pMenuItem->show(); CarType_counter = 0; CarType_Type = 0; } break; case KeyValueUP: if( CarType_Type == 1) { if(CarType_counter == 1) CarType_counter = 8; else CarType_counter--; //printf("\r\n up 车辆类型选择 = %d",CarType_counter); CarType(CarType_counter, 0); } break; case KeyValueDown: if( CarType_Type == 1) { if(CarType_counter >= 8) CarType_counter = 1; else CarType_counter++; //printf("\r\n down 车辆类型选择 = %d",CarType_counter); CarType(CarType_counter, 0); } break; } KeyValue = 0; }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: pMenuItem=&Menu_0_loggingin; pMenuItem->show(); break; case KeyValueOk: if(type_selc_screen==1) { type_selc_screen=2; if(type_selc_flag==1) { lcd_fill(0); lcd_text12(9,3,"模式:货运模式",13,LCD_MODE_SET); lcd_text12(6,18,"按确认键设置下一项",18,LCD_MODE_SET); lcd_update_all(); Vechicle_Info.Vech_Type_Mark=2; } else { lcd_fill(0); lcd_text12(15,3,"模式:两客一危模式",17,LCD_MODE_SET); lcd_text12(6,18,"按确认键设置下一项",18,LCD_MODE_SET); lcd_update_all(); Vechicle_Info.Vech_Type_Mark=1; } } else if(type_selc_screen==2) { if(Vechicle_Info.Vech_Type_Mark==1) // 两客一危 { dnsr_main("www.tianyuxintong.com"); //Socket_main_Set("125.208.9.110:9131"); if(DataLink_Status()==0) DataLink_EndFlag=0; port_main("9131"); link_mode("0"); } else if(Vechicle_Info.Vech_Type_Mark==2) //货运 { dnsr_main("jt1.gghypt.net"); if(DataLink_Status()==0) DataLink_EndFlag=0; port_main("7008"); if(DataLink_Status()==0) DataLink_EndFlag=0; link_mode("0"); } if(MENU_set_carinfor_flag==1) // 二次单项设置时 { //-------------------------------------------------------------------------------- // select mode if(Vechicle_Info.Vech_Type_Mark==1) // 两客一危 { link_mode("0"); idip("clear"); } else if(Vechicle_Info.Vech_Type_Mark==2) //货运 { link_mode("0"); //-------- 清除鉴权码 ------------------- idip("clear"); } //------------------------------------------------------------------------------------ DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } type_selc_screen=0; type_selc_flag=0; CarSet_0_counter=1; pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueUP: if(type_selc_screen==1) { type_selc_flag=1; lcd_fill(0); lcd_text12(0, 3,"货运模式",8,LCD_MODE_INVERT); lcd_text12(0,18,"两客一危模式",12,LCD_MODE_SET); lcd_update_all(); } break; case KeyValueDown: if(type_selc_screen==1) { type_selc_flag=2; lcd_fill(0); lcd_text12(0, 3,"货运模式",8,LCD_MODE_SET); lcd_text12(0,18,"两客一危模式",12,LCD_MODE_INVERT); lcd_update_all(); } break; } KeyValue=0; }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: //组选择按" 菜单" 选择需要修改的字符 if((License_Type_flag==1)&&(License_Modify_Flag==0))//反向选择最后一项 { if(License_SetFlag>1)//未设置退出 { License_Modify_Flag=1;//??? //选中将要修改的字符 License_SetFlag_temp=License_SetFlag; if(License_SetFlag==3) License_Type_Sel(0,License_Type_Counter,1); else License_Type_Sel(1,License_Type_Counter,1); } else { License_SetFlag=1; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; memset(Menu_Car_license,0,sizeof(Menu_Car_license)); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } } //选择要修改再次按" 菜单 "退出设置项选择 else if(License_Modify_Flag==1) { License_Modify_Flag=0; License_SetFlag=1; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; memset(Menu_Car_license,0,sizeof(Menu_Car_license)); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueOk: //选择是否设置车牌号 if(License_Type_flag==0) { if(License_set_noeffect==2) { License_SetFlag=1; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; //==================================================== // 没设置车牌号时为 1 License_Not_SetEnable=1; //=================================================== //写入车牌号是否设置标志 DF_WriteFlashSector(DF_License_effect,0,&License_Not_SetEnable,1); //设置下一项 CarSet_0_counter=2;//设置第2项 //rt_kprintf("\r\n设置下一项"); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } else if(License_set_noeffect==1)//开始设置车牌号 { License_set_noeffect=0;//退出到设置选项选择 License_Not_SetEnable=0; //写入车牌号是否设置标志 DF_WriteFlashSector(DF_License_effect,0,&License_Not_SetEnable,1); CounterBack=0; License_Type_Counter=0; License_Type_Sel(0,License_Type_Counter,0); License_Type_flag=1; //rt_kprintf("\r\n开始设置车牌号"); } } //设置车牌号开始 else if(License_Modify_Flag==1) { License_Modify_Flag=2; if(License_SetFlag_temp>3) License_Type_Sel(1,License_Type_Counter,2); else License_Type_Sel(0,License_Type_Counter,2); } else if(License_Modify_Flag==2) { License_Modify_Flag=1; if(License_SetFlag_temp==3) { memcpy(&Menu_Car_license[License_SetFlag_temp-3],Car_HZ_code[License_Type_Counter],2); License_Modify_Flag=0; License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0);//修改完汉字显示字符 //License_SetFlag_temp=License_SetFlag;//===== //rt_kprintf("\r\n 修改 汉字"); } else { Menu_Car_license[License_SetFlag_temp-2]=ABC_License_0_Z[License_Type_Counter][0]; License_Modify_Flag=0; License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); //rt_kprintf("\r\n 修改 字符"); } } else if(License_Type_flag==1) { if(License_SetFlag==1) { memcpy(Menu_Car_license,Car_HZ_code[License_Type_Counter],2); License_SetFlag++; License_SetFlag++; //rt_kprintf("\r\n填充 汉字"); License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); } else if((License_SetFlag>=3)&&(License_SetFlag<=8)) { Menu_Car_license[License_SetFlag-1]=ABC_License_0_Z[License_Type_Counter][0]; License_SetFlag++; //rt_kprintf("\r\n填充 字符"); License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); } else if(License_SetFlag==9) { //License_Type_flag=10;//====== if(MENU_set_carinfor_flag==1) { //rt_kprintf("\r\n车牌号设置完成,按菜单键返回,%s",Menu_Car_license); //车牌号 memset(Vechicle_Info.Vech_Num,0,sizeof(Vechicle_Info.Vech_Num)); memcpy(Vechicle_Info.Vech_Num,Menu_Car_license,strlen((const char*)Menu_Car_license)); DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } License_Type_flag=2; License_SetFlag=10; lcd_fill(0); lcd_text12(18,3,"车牌号设置完成",14,LCD_MODE_SET); lcd_text12(6,18,"按确认键设置下一项",18,LCD_MODE_SET); lcd_update_all(); } } else if(License_SetFlag==10) { //rt_kprintf("\r\n设置下一项"); License_SetFlag=1; License_Type_flag=0;//区分组的选择和组内选择 License_Type_Counter=0;// 0: 数字 1:A-M 2:N-Z License_set_noeffect=0; CarSet_0_counter=3;//设置第2项 //rt_kprintf("\r\n设置下一项"); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueUP: if(License_Type_flag==0) { License_set_noeffect=1; lcd_fill(0); lcd_text12(0,3,"设置车牌号",10,LCD_MODE_INVERT); lcd_text12(0,18,"无牌照车辆",10,LCD_MODE_SET); lcd_update_all(); } else if(License_Modify_Flag==1) { if(License_SetFlag_temp>3) License_SetFlag_temp--; License_Type_Sel(1,0,1); rt_kprintf("\r\nLicense_SetFlag_temp=%d",License_SetFlag_temp); } else if(License_Modify_Flag==2) { if(License_SetFlag>=3) { if(License_Type_Counter==0) License_Type_Counter=35; else if(License_Type_Counter>=1) License_Type_Counter--; if(License_SetFlag_temp>3) License_Type_Sel(1,License_Type_Counter,2); else License_Type_Sel(0,License_Type_Counter,2); } else { if(License_Type_Counter==0) License_Type_Counter=30; else if(License_Type_Counter>=1) License_Type_Counter--; License_Type_Sel(0,License_Type_Counter,2); } } else { if(License_SetFlag>=3) { if(License_Type_Counter==0) License_Type_Counter=35; else if(License_Type_Counter>=1) License_Type_Counter--; License_Type_Sel(1,License_Type_Counter,0); } else { if(License_Type_Counter==0) License_Type_Counter=30; else if(License_Type_Counter>=1) License_Type_Counter--; License_Type_Sel(0,License_Type_Counter,0); } } break; case KeyValueDown: if(License_Type_flag==0) { License_set_noeffect=2; lcd_fill(0); lcd_text12(0,3,"设置车牌号",10,LCD_MODE_SET); lcd_text12(0,18,"无牌照车辆",10,LCD_MODE_INVERT); lcd_update_all(); } else if(License_Modify_Flag==1) { if(License_SetFlag_temp<License_SetFlag) License_SetFlag_temp++; License_Type_Sel(1,0,1); rt_kprintf("\r\nLicense_SetFlag_temp=%d",License_SetFlag_temp); } else if(License_Modify_Flag==2) { if(License_SetFlag>=3) { License_Type_Counter++; if(License_Type_Counter>35) License_Type_Counter=0; if(License_SetFlag_temp>3) License_Type_Sel(1,License_Type_Counter,2); else License_Type_Sel(0,License_Type_Counter,2); } else { License_Type_Counter++; if(License_Type_Counter>30) License_Type_Counter=0; License_Type_Sel(0,License_Type_Counter,2); } } else { if(License_Type_flag==1)//选择是0-9 A-M N-Z { if(License_SetFlag>=3) { License_Type_Counter++; if(License_Type_Counter>35) License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); } else { License_Type_Counter++; if(License_Type_Counter>30) License_Type_Counter=0; License_Type_Sel(0,License_Type_Counter,0); } //rt_kprintf("\r\n(down)License_Type_Counter=%d",License_Type_Counter); } } break; } KeyValue=0; }
static void keypress(unsigned int key) { switch(KeyValue) { case KeyValueMenu: //��ѡ��" �˵�" ѡ����Ҫ�ĵ��ַ� if((License_Type_flag==1)&&(License_Modify_Flag==0))//����ѡ�����һ�� { if(License_SetFlag>1)//δ�����˳� { License_Modify_Flag=1;//??? //ѡ�н�Ҫ�ĵ��ַ� License_SetFlag_temp=License_SetFlag; if(License_SetFlag==3) License_Type_Sel(0,License_Type_Counter,1); else License_Type_Sel(1,License_Type_Counter,1); } else { License_SetFlag=1; License_Type_flag=0;//�������ѡ�������ѡ�� License_Type_Counter=0;// 0: ���� 1:A-M 2:N-Z License_set_noeffect=0; memset(Menu_Car_license,0,sizeof(Menu_Car_license)); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } } //ѡ��Ҫ���ٴΰ�" �˵� "�˳�������ѡ�� else if(License_Modify_Flag==1) { License_Modify_Flag=0; License_SetFlag=1; License_Type_flag=0;//�������ѡ�������ѡ�� License_Type_Counter=0;// 0: ���� 1:A-M 2:N-Z License_set_noeffect=0; memset(Menu_Car_license,0,sizeof(Menu_Car_license)); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueOk: //ѡ���Ƿ����ó��ƺ� if(License_Type_flag==0) { if(License_set_noeffect==2) { License_SetFlag=1; License_Type_flag=0;//�������ѡ�������ѡ�� License_Type_Counter=0;// 0: ���� 1:A-M 2:N-Z License_set_noeffect=0; //==================================================== // û���ó��ƺ�ʱΪ 1 License_Not_SetEnable=1; //=================================================== //д�복�ƺ��Ƿ����ñ�־ DF_WriteFlashSector(DF_License_effect,0,&License_Not_SetEnable,1); //������һ�� CarSet_0_counter=2;//���õ�2�� //rt_kprintf("\r\n������һ��"); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } else if(License_set_noeffect==1)//��ʼ���ó��ƺ� { License_set_noeffect=0;//�˳�������ѡ��ѡ�� License_Not_SetEnable=0; //д�복�ƺ��Ƿ����ñ�־ DF_WriteFlashSector(DF_License_effect,0,&License_Not_SetEnable,1); CounterBack=0; License_Type_Counter=0; License_Type_Sel(0,License_Type_Counter,0); License_Type_flag=1; //rt_kprintf("\r\n��ʼ���ó��ƺ�"); } } //���ó��ƺſ�ʼ else if(License_Modify_Flag==1) { License_Modify_Flag=2; if(License_SetFlag_temp>3) License_Type_Sel(1,License_Type_Counter,2); else License_Type_Sel(0,License_Type_Counter,2); } else if(License_Modify_Flag==2) { License_Modify_Flag=1; if(License_SetFlag_temp==3) { memcpy(&Menu_Car_license[License_SetFlag_temp-3],Car_HZ_code[License_Type_Counter],2); License_Modify_Flag=0; License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0);//���꺺����ʾ�ַ� //License_SetFlag_temp=License_SetFlag;//===== //rt_kprintf("\r\n �� ����"); } else { Menu_Car_license[License_SetFlag_temp-2]=ABC_License_0_Z[License_Type_Counter][0]; License_Modify_Flag=0; License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); //rt_kprintf("\r\n �� �ַ�"); } } else if(License_Type_flag==1) { if(License_SetFlag==1) { memcpy(Menu_Car_license,Car_HZ_code[License_Type_Counter],2); License_SetFlag++; License_SetFlag++; //rt_kprintf("\r\n��� ����"); License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); } else if((License_SetFlag>=3)&&(License_SetFlag<=8)) { Menu_Car_license[License_SetFlag-1]=ABC_License_0_Z[License_Type_Counter][0]; License_SetFlag++; //rt_kprintf("\r\n��� �ַ�"); License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); } else if(License_SetFlag==9) { //License_Type_flag=10;//====== if(MENU_set_carinfor_flag==1) { //rt_kprintf("\r\n���ƺ�������ɣ����˵������أ�%s",Menu_Car_license); //���ƺ� memset(Vechicle_Info.Vech_Num,0,sizeof(Vechicle_Info.Vech_Num)); memcpy(Vechicle_Info.Vech_Num,Menu_Car_license,strlen((const char*)Menu_Car_license)); DF_WriteFlashSector(DF_Vehicle_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); WatchDog_Feed(); DF_WriteFlashSector(DF_VehicleBAK2_Struct_offset,0,(u8*)&Vechicle_Info,sizeof(Vechicle_Info)); } License_Type_flag=2; License_SetFlag=10; lcd_fill(0); lcd_text12(18,3,"���ƺ��������",14,LCD_MODE_SET); lcd_text12(6,18,"��ȷ�ϼ�������һ��",18,LCD_MODE_SET); lcd_update_all(); } } else if(License_SetFlag==10) { //rt_kprintf("\r\n������һ��"); License_SetFlag=1; License_Type_flag=0;//�������ѡ�������ѡ�� License_Type_Counter=0;// 0: ���� 1:A-M 2:N-Z License_set_noeffect=0; CarSet_0_counter=2;//���õ�2�� //rt_kprintf("\r\n������һ��"); pMenuItem=&Menu_0_loggingin; pMenuItem->show(); } break; case KeyValueUP: if(License_Type_flag==0) { License_set_noeffect=1; lcd_fill(0); lcd_text12(0,3,"���ó��ƺ�",10,LCD_MODE_INVERT); lcd_text12(0,18,"�����ճ���",10,LCD_MODE_SET); lcd_update_all(); } else if(License_Modify_Flag==1) { if(License_SetFlag_temp>3) License_SetFlag_temp--; License_Type_Sel(1,0,1); rt_kprintf("\r\nLicense_SetFlag_temp=%d",License_SetFlag_temp); } else if(License_Modify_Flag==2) { if(License_SetFlag>=3) { if(License_Type_Counter==0) License_Type_Counter=35; else if(License_Type_Counter>=1) License_Type_Counter--; if(License_SetFlag_temp>3) License_Type_Sel(1,License_Type_Counter,2); else License_Type_Sel(0,License_Type_Counter,2); } else { if(License_Type_Counter==0) License_Type_Counter=30; else if(License_Type_Counter>=1) License_Type_Counter--; License_Type_Sel(0,License_Type_Counter,2); } } else { if(License_SetFlag>=3) { if(License_Type_Counter==0) License_Type_Counter=35; else if(License_Type_Counter>=1) License_Type_Counter--; License_Type_Sel(1,License_Type_Counter,0); } else { if(License_Type_Counter==0) License_Type_Counter=30; else if(License_Type_Counter>=1) License_Type_Counter--; License_Type_Sel(0,License_Type_Counter,0); } } break; case KeyValueDown: if(License_Type_flag==0) { License_set_noeffect=2; lcd_fill(0); lcd_text12(0,3,"���ó��ƺ�",10,LCD_MODE_SET); lcd_text12(0,18,"�����ճ���",10,LCD_MODE_INVERT); lcd_update_all(); } else if(License_Modify_Flag==1) { if(License_SetFlag_temp<License_SetFlag) License_SetFlag_temp++; License_Type_Sel(1,0,1); rt_kprintf("\r\nLicense_SetFlag_temp=%d",License_SetFlag_temp); } else if(License_Modify_Flag==2) { if(License_SetFlag>=3) { License_Type_Counter++; if(License_Type_Counter>35) License_Type_Counter=0; if(License_SetFlag_temp>3) License_Type_Sel(1,License_Type_Counter,2); else License_Type_Sel(0,License_Type_Counter,2); } else { License_Type_Counter++; if(License_Type_Counter>30) License_Type_Counter=0; License_Type_Sel(0,License_Type_Counter,2); } } else { if(License_Type_flag==1)//ѡ����0-9 A-M N-Z { if(License_SetFlag>=3) { License_Type_Counter++; if(License_Type_Counter>35) License_Type_Counter=0; License_Type_Sel(1,License_Type_Counter,0); } else { License_Type_Counter++; if(License_Type_Counter>30) License_Type_Counter=0; License_Type_Sel(0,License_Type_Counter,0); } //rt_kprintf("\r\n(down)License_Type_Counter=%d",License_Type_Counter); } } break; } KeyValue=0; }
/*更新北斗线程,接收调试串口来的数据,透传到gps串口中*/ void thread_usb_update( void* parameter ) { rt_uint16_t i=0; #define READ_PACKET_SIZE 1012 void ( *msg )( void *p ); int fd = -1, count = 0; //rt_uint8_t *pdata; /*数据*/ rt_err_t res; rt_uint8_t file_infor[20]; rt_uint32_t file_datalen; /*升级文件长度*/ rt_uint16_t page,j; msg =(void (*)(void*)) parameter; ptr_read_packet= rt_malloc( 520 ); if( ptr_read_packet == RT_NULL ) { Exit_updata=0; check_error=1; msg( "E内存不足" ); return; } // 1. Lock DF and Erase File Area DF_LOCK=1; rt_thread_delay(2); DF_EraseAppFile_Area(); /*查找U盘*/ //-------------------------------------------------------------------------------- while( 1 ) { if( rt_device_find( "udisk" ) == RT_NULL ) /*没有找到*/ { count++; if( count <= 10 ) { msg( "I等待U盘插入" ); }else { msg( "EU盘不存在" ); /*指示U盘不存在*/ check_error=1; goto end_upgrade_usb_0; } rt_thread_delay( RT_TICK_PER_SECOND ); }else { msg( "I查找升级文件" ); break; } } /*查找指定文件*/ fd = open( "/udisk/UPDATE.TCB", O_RDONLY, 0 ); if( fd >= 0 ) msg( "I读取文件升级" ); else { msg( "E升级文件不存在" ); check_error=1; goto end_upgrade_usb_0; } file_datalen=0;//文件长度统计 Updata_PacketNum=0;//升级进度指示 //------------------------------------------------------------------------------- while( 1 ) { rt_thread_delay(RT_TICK_PER_SECOND/2); res=0; res = read( fd, ptr_read_packet,514 ); memcpy(fetch_data_514,ptr_read_packet,514); if(res<0) { msg("E读取文件出错"); check_error=1; goto end_upgrade_usb_1; } else if( res == 514 ) /*判断是否为最后一包*/ { Updata_PacketNum++; page=(((u16)fetch_data_514[0])<<8)+((u16)fetch_data_514[1]); file_datalen+=res; rt_kprintf("\r\n读取的数据page=%d,file_datalen=%d ",page,file_datalen); for(j=0;j<10;j++) rt_kprintf(" %2X",fetch_data_514[j]); rt_kprintf("\r\n"); WatchDog_Feed(); if(page==50) { //-------- Version Type judge------ if(Update_HardSoft_Version_Judge(fetch_data_514+2)==false) // +2 是内容 { msg( "E固件类型不匹配" ); goto end_upgrade_usb_1; } DF_WriteFlashDirect(50,0,&fetch_data_514[2],512); DF_ReadFlash(50,0,read_data_514,512); for(i=0;i<512;i++) { if(read_data_514[i]!=fetch_data_514[i+2]) rt_kprintf("\r\n page=%d,i=%d,write=%X,read=%X",page,i,fetch_data_514[i+2],read_data_514[i]); } msg( "I文件升级完成" ); rt_kprintf("文件长度 = %d",file_datalen); DF_LOCK=0; goto end_upgrade_usb_1; } else { if(page%8==0) DF_WriteFlashSector(page,0,&fetch_data_514[2],512); else DF_WriteFlashDirect(page,0,&fetch_data_514[2],512); rt_thread_delay(3); //---------- 下载内容比较判断 ----------------------------------------------- DF_ReadFlash(page,0,read_data_514,512); for(i=0;i<512;i++) { if(read_data_514[i]!=fetch_data_514[i+2]) { rt_kprintf("\r\n page=%d,i=%d,write=%X,read=%X",page,i,fetch_data_514[i+2],read_data_514[i]); msg( "E写入文件错误" ); check_error=1; goto end_upgrade_usb_1; } } //-------------------------------------------------------------------------- sprintf((char *)file_infor,"I升级第%d包",Updata_PacketNum); msg(file_infor); } } else { msg( "EU盘读取错误" ); check_error=1; goto end_upgrade_usb_1; } } //-------------------------------------------------------------------- end_upgrade_usb_1: if( fd >= 0 ) { close( fd ); } end_upgrade_usb_0: Exit_updata=0; rt_free( ptr_read_packet); ptr_read_packet= RT_NULL; }
void thread_gps_upgrade_udisk( void* parameter ) { #define READ_PACKET_SIZE 1012 void ( *msg )( void *p ); int fd = -1, size; u32 count = 0; rt_uint8_t *pdata; /*数据*/ rt_uint8_t buf[32]; rt_uint8_t ch_h, ch_l; rt_err_t res; LENGTH_BUF uart_buf; rt_uint32_t file_datalen; /*升级文件长度*/ rt_uint8_t file_matchcode[2]; /*文件匹配码*/ rt_uint16_t packet_num; rt_uint16_t crc; msg = parameter; ptr_mem_packet = rt_malloc( READ_PACKET_SIZE+20 ); if( ptr_mem_packet == RT_NULL ) { msg( "E内存不足" ); return; } /*查找U盘*/ while( 1 ) { if( rt_device_find( "udisk" ) == RT_NULL ) /*没有找到*/ { count++; if( count <= 10 ) { msg( "I等待U盘插入" ); BD_upgrad_contr=1; }else { msg( "EU盘不存在" ); /*指示U盘不存在*/ BD_upgrad_contr=1; goto end_upgrade_usb_0; } rt_thread_delay( RT_TICK_PER_SECOND ); }else { msg( "I查找升级文件" ); break; } WatchDog_Feed(); } /*查找指定文件BEIDOU.IMG*/ fd = open( "/udisk/BEIDOU.IMG", O_RDONLY, 0 ); if( fd >= 0 ) { msg( "I分析文件" ); }else { msg( "E升级文件不存在" ); goto end_upgrade_usb_0; } size = read( fd, ptr_mem_packet, 16 ); pdata = ptr_mem_packet; if( ( *pdata != 0x54 ) || ( *( pdata + 1 ) != 0x44 ) ) { msg( "E文件头错误" ); goto end_upgrade_usb_1; } ch_h = ( *( pdata + 9 ) & 0xf0 ) >> 4; ch_l = ( *( pdata + 9 ) & 0xf ); sprintf( buf, "I版本:%d.%d.%d", ch_h, ch_l, *( pdata + 10 ) ); msg( buf ); /*升级数据长度*/ file_datalen =0; file_datalen = ( *( pdata + 11 ) ) << 24; file_datalen |= ( *( pdata + 12 ) ) << 16; file_datalen |= ( *( pdata + 13 ) ) << 8; file_datalen |= *( pdata + 14 ); rt_kprintf("file_datalen=%x",file_datalen); /*文件匹配码在尾部*/ count = 0; ch_h = 0; do{ res = read( fd, ptr_mem_packet,READ_PACKET_SIZE ); if(res) count = res; WatchDog_Feed(); }while(res>0); //rt_kprintf("res=%02x\r\n",res); //if(res==0) res=READ_PACKET_SIZE; if( ( ptr_mem_packet[count - 1] != 0x54 ) || ( ptr_mem_packet[count - 2] != 0x44 ) ) { msg( "E文件尾错误" ); goto end_upgrade_usb_1; } file_matchcode[0] = ptr_mem_packet[count - 6]; file_matchcode[1] = ptr_mem_packet[count - 5]; rt_kprintf("file datalen=%x matchcode=%02x%02x",file_datalen,file_matchcode[0],file_matchcode[1]); close( fd ); msg( "I配置端口" ); fd = open( "/udisk/BEIDOU.IMG", O_RDONLY, 0 ); if( fd < 0 ) { msg( "E升级文件不存在" ); goto end_upgrade_usb_0; } /*开始升级*/ /*停止gps线程*/ rt_thread_suspend( &thread_gps ); /*进入升级状态*/ memcpy( buf, "\x40\x30\xC0\x00\x03\x00\x01\x34\x21\x0D\x0A", 11 ); dev_gps_write( &dev_gps, 0, buf, 11 ); rt_thread_delay( RT_TICK_PER_SECOND ); /*版本查询*/ count = 0; dev_gps_write( &dev_gps, 0, "\x40\x10\xC0\x00\x10\x00\x01\xC2\x84\x0D\x0A", 11 ); while( 1 ) { rt_thread_delay(RT_TICK_PER_SECOND/10); res = rt_mq_recv( &mq_gps, (void*)&uart_buf, 124, 5 ); if( res == RT_EOK ) //收到一包数据 { count=0; // clear rt_kprintf("\r\n版本查询\r\n"); for( ch_h = 0; ch_h < uart_buf.wr; ch_h++ ) { rt_kprintf( "%02x ", uart_buf.body[ch_h] ); } rt_kprintf( "\r\n" ); if( ( uart_buf.wr == 15 ) && ( uart_buf.body[4] == 0x02 ) ) /*进入升级状态*/ { ch_h = ( uart_buf.body[7] & 0xf0 ) >> 4; ch_l = ( uart_buf.body[7] & 0xf ); sprintf( buf, "I版本:%d.%d.%d", ch_h, ch_l, uart_buf.body[8] ); msg( buf ); break; } }else /*超时*/
/******************************************************************************** * FunctionName: Tasktest * * Description : 协议发送任务 * * Parameters : * * Returns : None. *******************************************************************************/ void TaskTest(void *p_arg) { INT8U err ; // u16 i; // unsigned char buf[]="0123456789abcdefghijklmnopqrstuvwxyz"; INT32U msg; u8 send_sig=0; //发送信号 标志位 1:学习成功 2:学习失败 3:正在学习中 p_arg = p_arg; for (;;) { /********发射4432数据********/ msg = (INT32U)OSQPend(TestMBox, 0, &err); send_sig= msg; if(send_sig!=0) { WatchDog_Feed(); //喂狗 if(send_sig==1) { if (Learn_State==1)//空调学习成功 { WatchDog_Feed(); //喂狗 Send_LenStop(USART2);//停止学习 WatchDog_Feed(); //喂狗 Flash_Write(ARC_ADDR,u2p->data,208);//读取buf存入FLASH 存入固定器件地址的键值上ARC1_ADDR+learn_DeviceName*2080+learn_KeyCode*208 learn_cmd=0;//清空开始学习标志? Learn_State=0; // SendString(" 空调学习成功!"); } else if(Learn_State==2)//电视学习成功 { WatchDog_Feed(); //喂狗 Send_LenStop(USART2);//停止学习 WatchDog_Feed(); //喂狗 Flash_Write(URC_ADDR,u2p->data,208);//读取buf存入FLASH learn_cmd=0;//清空开始学习标志? Learn_State=0; // SendString(" 电视学习成功!"); } Send_4432ID0 = MY_ID[0];// my id Send_4432ID1 = MY_ID[1]; Send_4432ID2 = MY_ID[2]; Send_4432ID3 = MY_ID[3]; Send_4432DIR = 0x82 ;//方向 Send_4432CMD = 0x34 ;//反馈指令 Send_4432LENGTH= 3; //数据长度 Send_4432DATA0 = send_sig;//学习成功 Send_4432DATA1 = learn_DeviceName;// Send_4432DATA2 = learn_KeyCode;// Data_Encrypt(si4432cmd_senddata,18); // WatchDog_Feed(); //喂狗 sending(send_data,Send_Legth); WatchDog_Feed(); //喂狗 OSTimeDly(8); WatchDog_Feed(); //喂狗 sending(send_data,Send_Legth); WatchDog_Feed(); //喂狗 } else if(send_sig==2) { learn_cmd=0;//清空开始学习标志? SendString(" 学习失败!"); Send_4432ID0 = MY_ID[0];// my id Send_4432ID1 = MY_ID[1]; Send_4432ID2 = MY_ID[2]; Send_4432ID3 = MY_ID[3]; Send_4432DIR = 0x82 ;//方向 Send_4432CMD = 0x34 ;//反馈指令 Send_4432LENGTH= 3; //数据长度 Send_4432DATA0 = send_sig;//学习成功 Send_4432DATA1 = learn_DeviceName;// Send_4432DATA2 = learn_KeyCode;// Data_Encrypt(si4432cmd_senddata,18); // WatchDog_Feed(); //喂狗 sending(send_data,Send_Legth); WatchDog_Feed(); //喂狗 OSTimeDly(5); WatchDog_Feed(); //喂狗 sending(send_data,Send_Legth); WatchDog_Feed(); //喂狗 } else if(send_sig==3) SendString(" 正在学习!"); else { learn_cmd=0;//清空开始学习标志? SendString(" 其他错误= "); Send_4432ID0 = MY_ID[0];// my id Send_4432ID1 = MY_ID[1]; Send_4432ID2 = MY_ID[2]; Send_4432ID3 = MY_ID[3]; Send_4432DIR = 0x82 ;//方向 Send_4432CMD = 0x34 ;//反馈指令 Send_4432LENGTH= 3; //数据长度 Send_4432DATA0 = send_sig;//学习成功 Send_4432DATA1 = learn_DeviceName;// Send_4432DATA2 = learn_KeyCode;// Data_Encrypt(si4432cmd_senddata,18); // WatchDog_Feed(); //喂狗 sending(send_data,Send_Legth); WatchDog_Feed(); //喂狗 OSTimeDly(5); WatchDog_Feed(); //喂狗 sending(send_data,Send_Legth); WatchDog_Feed(); //喂狗 // Outint(send_sig); } //if((send_sig==1)||(send_sig==2))//如果学习成功或失败 清空设备号和 键值 发送学习停止信号 if (send_sig!=3) { //Send_LenStop(USART2); learn_DeviceName = 0; learn_KeyCode = 0; learn_cmd=0;//清空开始学习标志位 } send_sig=0; } //else //接收4432信号send_sig==0 } }
static void HMI_thread_entry(void *parameter) { u8 counter_printer = 0; TIRED_DoorValue_Init(); Init_4442(); IC_info_default(); while(1) { pMenuItem = &Menu_0_0_self_Checking; pMenuItem->show(); pMenuItem->timetick(10); pMenuItem->keypress(10); if(self_checking_result == 10) //自检正常 { //rt_kprintf("\r\n------------------自检正常,退出-------"); break; } if(self_checking_result == 30) //自检异常2,按 确认 后为3 { //rt_kprintf("\r\n------------------自检异常,退出-------"); break; } rt_thread_delay(25); } //--------自检过后操作DF 读取----- DF_init(); SysConfiguration(); // system config total_ergotic(); DF_initOver = 1; Gsm_RegisterInit(); // init register states ,then it will power on the module SIMID_Convert_SIMCODE(); // translate //----------------------------------------------------------------- if(Login_Menu_Flag == 0) { JT808Conf_struct.Regsiter_Status = 0; //需要重新注册 pMenuItem = &Menu_0_0_password; pMenuItem->show(); } else { pMenuItem = &Menu_1_Idle; pMenuItem->show(); } while (1) { // 6. ACC 状态检测 ACC_status_Check(); #if 1 pMenuItem->timetick( 10 ); pMenuItem->keypress( 10 ); //------- if((print_rec_flag == 1) && (TTS_Var.Playing == 0)) // 为了避开大电流 播报时候不打印 { counter_printer++; if(counter_printer >= 5) //加电后1s开始打印,打印间隔必须>300ms { counter_printer = 0; #ifdef SPD_WARN_SAVE if(ExpSpdRec_write > 0) { ReadEXspeed(1); WatchDog_Feed(); Dis_chaosu(data_tirexps); } #endif print_rec_flag = 2; DaYin = 1; //开始打印 WatchDog_Feed(); } } else if(print_rec_flag == 2) { counter_printer++; if(counter_printer >= 2) //打印间隔必须>300ms 7 { counter_printer = 0; Dayin_Fun(1); } } if(ASK_Centre.ASK_disp_Enable == 1) { ASK_Centre.ASK_disp_Enable = 0; pMenuItem = &Menu_3_1_CenterQuesSend; pMenuItem->show(); } else if(TextInfo.TEXT_SD_FLAG == 1) { TextInfo.TEXT_SD_FLAG = 0; pMenuItem = &Menu_7_CentreTextDisplay; pMenuItem->show(); } #endif //-------------------------------------------- rt_thread_delay(25); //25 } }
void Camra_Take_Exception(void) { if(CameraState.camera_running==1) { if((CameraState.timeoutCounter++)>=3) // 每发送一包,清除,只有单包发送超过3秒没返回才认为失败 { //------------ Normal Process -------------- //FeedDog; End_Camera(); // Power_485CH1_OFF; // 第一路485的电 关电工作 rt_kprintf("\r\n Camera %d Error\r\n",Camera_Number); WatchDog_Feed(); delay_ms(20); // end--duration--new start WatchDog_Feed(); //Power_485CH1_ON; // 第一路485的电 关电工作 //------------ Multi Take Process ------------ if(1==MultiTake.Taking) { switch(Camera_Number) { case 1: MultiTake.Take_retry++; if(MultiTake.Take_retry>=3) { //-------- old process--------------- MultiTake.TakeResult[0]=Take_Fail; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //----------拍照下一路摄像头----------- Camera_Number=2; //------------------------- Start_Camera(Camera_Number); } else { // continue operate this camera Start_Camera(Camera_Number); } break; case 2: MultiTake.Take_retry++; if(MultiTake.Take_retry>=3) { //-------- old process--------------- MultiTake.TakeResult[1]=Take_Fail; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //----------拍照下一路摄像头----------- Camera_Number=3; //------------------------- Start_Camera(Camera_Number); } else { // continue operate this camera Start_Camera(Camera_Number); } break; case 3: MultiTake.Take_retry++; if(MultiTake.Take_retry>=3) { //-------- old process--------------- MultiTake.TakeResult[2]=Take_Fail; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; //----------拍照下一路摄像头----------- Camera_Number=4; //------------------------- Start_Camera(Camera_Number); } else { // continue operate this camera Start_Camera(Camera_Number); } break; case 4: MultiTake.Take_retry++; if(MultiTake.Take_retry>=3) { //-------- old process--------------- MultiTake.TakeResult[3]=Take_Fail; // 表示第一路摄像头拍照失败 //--------- new process------------- MultiTake.Take_retry=0; /* Taking End, Start Transfering */ MultiTake.Taking=0; // Taking State Over Check_MultiTakeResult_b4Trans(); } else { // continue operate this camera Start_Camera(Camera_Number); } break; default: MultiTake_End(); // clear and exit Mutitake state break; } } else { // 单次拍照 SingleCamera_TakeRetry++; if(SingleCamera_TakeRetry>=3) { SingleCamera_TakeRetry=0;//clear rt_kprintf("\r\n 单路拍照超过最大次数!\r\n"); } else { // continue operate this camera Start_Camera(Camera_Number); //printf("\r\n 重新拍 %d \r\n",Camera_Number); } } } } }