Ejemplo n.º 1
0
       u8      Api_Config_read(u8 *name,u16 ID,u8* buffer, u16 Rd_len)    //  ¶ÁÈ¡Media area ID ÊDZ¨Êý
       {
               if(strcmp((const char*)name,config)==0)
           	{
                     DF_ReadFlash(ConfigStart_offset, 0, buffer, Rd_len); 
			DF_delay_ms(10); 	// large content delay	
			return true;		
           	}
              if(strcmp((const char*)name,jt808)==0) 
             	{
                     DF_ReadFlash(JT808Start_offset, 0, buffer, Rd_len); 
			DF_delay_ms(10); // 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;
			
       }
Ejemplo n.º 2
0
/******************************************************************************
 * Function: Read_save_data () 
 * DESCRIPTION: - 读取存储数据 
 * Input: str存储电文内容  input第几条的电文 length电文长度
 * Input: mode 显示模式
 * Output: 
 * Returns: 
 * 
 * -----------------------------------
* Created By wxg 16-jan-2014
* -------------------------------
 ******************************************************************************/
 u8 Read_save_data(u8*str,u8 input,u8 mode)
 {
  #if 1
	u8 temp[10];
	u8 data[256];//自己定义的存储格式
	u16  Addre_offset=0;//存储的偏移地址
	u8 data_len =0;//
	memset(temp,0,10);
	memset(data,0,256);
	memset(str,0,210);//纯信息内容
	
	Addre_offset =Sort_ID(DF_BD_data_rx, Addre_offset,input);
	rt_kprintf("Addre_offset--%d\r\n",Addre_offset);
    if(Addre_offset==RT_ERROR)
    {
		lcd_fill(0);
		lcd_text12(0,10,"无内容可显示...",15,LCD_MODE_SET);
		lcd_update_all();
		return RT_ERROR;
    }
	
	//首先读出个数和长度的数据
	DF_ReadFlash(DF_BD_data_rx,Addre_offset,temp,5);
	//根据长度再读出真实的数据
	DF_ReadFlash(DF_BD_data_rx,Addre_offset,data,temp[4]);
	//这是自己定义的格式17,和18存储着接收电文的长度信息//接收的存储长度除以8
	data_len = ((data[17]<<8) +data[18])/8;
	rt_kprintf("du chu shu ju len-- %d\r\n",temp[4]);
	OutPrint_HEX("Read", data,temp[4]);
	//length =data_len;
	//data_len=data_len/8;
	if(data[11]==0x60)//如果是混发的话
	{
		
		memcpy(str,data+20,data_len-1);
		index_txt(str,data_len-1);
		OutPrint_HEX("Read DATA ", str,data_len);
		OutPrint_HEX("index_addre",index_addre,12);
		OutPrint_HEX("index_len",index_len,12);
	}
	else
	{
		//数组拷贝到这个str数组
		memcpy(str,data+19,data_len);
		
		index_txt(str,data_len);
		OutPrint_HEX("Read DATA1 ", str,data_len);
		OutPrint_HEX("index_addre",index_addre,12);
		OutPrint_HEX("index_len",index_len,12);
	}
	
	//从电文长度中
	First_show(data ,input,mode);
	return data_len;
	#endif
 }
Ejemplo n.º 3
0
u8 ReadCycleGPS(u32 cycleread,u8 *content ,u16 ReadLen)
{
  /*
     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  i=0,FCS=0;;

  /*
      上报的每一包数据位31个字节, 每条记录为32个字节,用每条记录的最后一个字节来作为是否上报过的标志位。没有上报该标志为0xFF
      上报过后该标志为被写为0x01
  */
  //----------------------------------------------------------------------------------------------
  //   1. caculate address 
     pageoffset=(u32)(cycle_read>>4);                // 计算出 Page 偏移  除以16 
     InPageoffset=cycle_read-(u32)(pageoffset<<4);   // 计算出 页内偏移地址 
     InPageAddr=(u16)(InPageoffset<<5);            // 计算出页内 字节   乘以 32 (每个记录32个字节)
  //   2. Write Record Content 
     DF_ReadFlash(pageoffset+CycleStart_offset,InPageAddr,content,ReadLen); 
     DF_delay_us(20);
  if(DispContent==2)
  {
     rt_kprintf("\r\n  读取CycleGPS 内容为 :\r\n ");   
	  for(i=0;i<ReadLen;i++)
	  	rt_kprintf("%2X ",content[i]);  
	 rt_kprintf("\r\n"); 
  }	 
  //  3. Judge FCS	
	//--------------- 过滤已经发送过的信息 -------
	  FCS = 0;
	   for ( i = 0; i < ReadLen-1; i++ )   //计算读取信息的异或和
	   {
			   FCS ^= *( content + i );  
	   }			  
	  if(((content[ReadLen-1]!=FCS)&&(content[0]!=0xFF))||(content[0]==0xFF))  // 判断异或和   
	    { 	      
		  if(content[0]==0xFF)
		  {
			 rt_kprintf("\r\n  content[0]==0xFF   read=%d,  write=%d  \r\n",cycle_read,cycle_write);   
			 //cycle_read=cycle_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。
                       
			  cycle_read++;	
		        if(cycle_read>=Max_CycleNum)
		  	      cycle_read=0; 
			 ReadCycle_status=RdCycle_Idle;  
			 return false;	
		  }  
		  //------------------------------------------------
          cycle_read++;	
		  if(cycle_read>=Max_CycleNum)
		  	cycle_read=0;
		  ReadCycle_status=RdCycle_Idle; 
		  return false; 
     	}	  
	//------------------------------------------------------------------------------------------   	 
	    return true;     
  //-------------------------------------------------------------------------------------------- 
} 
Ejemplo n.º 4
0
/******************************************************************************
 * Function: find_max_id () 
 * DESCRIPTION: - 找到最大的ID值 
 * Input: 
 * Input: 
 * Output: 
 * Returns: 
 * 
 * -----------------------------------
* Created By wxg 15-jan-2014
* -------------------------------
 ******************************************************************************/
u32  find_max_id(u16 addre)
{
#if 1
	u8 temp[4];
	u32 tmp_id=0;
	u32 tran_id=0;
	u32 i=0;
	memset(temp,0,4);
	for(i=0;i<16*512;i=i+256)
	{
		DF_ReadFlash(addre,i,temp,4);
		tmp_id = (temp[0]<<24)+(temp[1]<<16)+(temp[2]<<8)+temp[3];
		if(tmp_id!=Max_value)
		{
		    if(tmp_id>tran_id)
			{
				tran_id = tmp_id;
			}
			else
			{
				tran_id = 0;
			}
		}
		
		//tran_id =tran_id +1;
	}
	rt_kprintf("the max ID --%d\r\n",tran_id);
	return tran_id ;
	#endif
}
Ejemplo n.º 5
0
/******************************************************************************
 * Function: Sort_ID () 
 * DESCRIPTION: - 可以搜索当前存储区域的任意的ID和地址 
 * Input: addre存储起始地址 offset返回偏移量
 * Input: rank:查询ID的排名倒序
 * Output: 
 * Returns: 
 * 
 * -----------------------------------
* Created By wxg 16-jan-2014
* -------------------------------
 ******************************************************************************/
u16 Sort_ID(u16 addre,u16 offset,u8 rank)
{
#if 1
	u8 temp[4];
	u32 i;
	u32 max_addre =0;
	u32 tmp_addre =0;
	memset(temp,0,4);
	max_addre = find_max_id(DF_BD_data_rx);
	if(max_addre==0)
	{
		return RT_ERROR;	
	}
	for(i=0;i<16*512;i=i+256)
	{
		DF_ReadFlash(addre,i,temp,4);
		tmp_addre= (temp[0]<<24)+(temp[1]<<16)+(temp[2]<<8)+temp[3];
		if(tmp_addre==(max_addre-rank))
		{
			offset =i;
			//rt_kprintf("the offset is ---%d\r\n",offset);
			return offset;
		}
	}
	return RT_ERROR;
	#endif
}
Ejemplo n.º 6
0
void DF_WriteFlash(u16 page_counter, u16 page_offset, u8 *p, u16 length) //512bytes 一个单位
{
    u16 i = 0, j = 0, k = 0; //写补报

    for(i = 0; i < 8; i++)
    {
        DF_ReadFlash((8 * (page_counter / 8)) + i, 0, SectorBuf_save[i], DFBakSize); //PageSIZE
    }

    SST25V_SectorErase_4KByte((8 * ((u32)page_counter / 8))*PageSIZE);
    DF_delay_ms(100);
    for(j = 0; j < 8; j++)
    {
        if(j == (page_counter % 8))
        {
            for(i = 0; i < length; i++)
            {
                SectorBuf_save[j][page_offset + i] = *p;
                p++;
            }
        }
        for(k = 0; k < DFBakSize; k++)
        {
            SST25V_ByteWrite(SectorBuf_save[j][k], ((8 * (page_counter / 8)) + j)*PageSIZE + k);
        }
    }
    DF_delay_ms(20);
}
Ejemplo n.º 7
0
u8 Read_DrvRecoder(u32 In_read,u8 *content ,u16 ReadLen)
{
	/*
	   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   FCS=0;
	u16  i=0;    

  /*
      上报的每一包数据位31个字节, 每条记录为32个字节,用每条记录的最后一个字节来作为是否上报过的标志位。没有上报该标志为0xFF
      上报过后该标志为被写为0x01
  */
  //----------------------------------------------------------------------------------------------
  //   1. caculate address 
  pageoffset=(u32)(In_read>>1);				// 计算出 Page 偏移  除以2	
  InPageoffset=In_read-(u32)(pageoffset<<1);	// 计算出 页内偏移地址 
  InPageAddr=(u16)(InPageoffset<<8);		   // 计算出页内 字节	乘以 256 (每个记录256个字节)  238(content)+1(FCS)
  //   2. Write Record Content 
     DF_ReadFlash(pageoffset+VehicleRecStart_offset,InPageAddr,content,ReadLen); 
    DF_delay_us(10);
	// rt_kprintf("\r\n  ReadRecoder Starpageoffset=%d  PageOffset= %d ,  InPageAddr= %d  \r\n",VehicleRecStart_offset,pageoffset,InPageoffset); 
    // rt_kprintf("\r\n  读取  Records 内容为 :\r\n"); 
	// for(i=0;i<ReadLen;i++)
	//  	rt_kprintf("%2X ",content[i]);   
	// rt_kprintf("\r\n");             
     
  //  3.  Judge FCS	
	//--------------- 过滤已经发送过的信息 -------
	  FCS = 0;
	   for ( i = 0; i < ReadLen-1; i++ )   //计算读取信息的异或和
	   {
			   FCS ^= *( content + i );  
	   }			  
	   if(((content[ReadLen-1]!=FCS)&&(content[0]!=0xFF))||(content[0]==0xFF))	// 判断异或和 
	    { 	      
		  if(content[0]==0xFF)
		  {
			 Recorder_Read=Recorder_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。			
			 return false;
		  }
          Recorder_Read++;	
		  if(Recorder_Read>=Max_RecoderNum) 
		  	Recorder_Read=0; 
		//  rt_kprintf("\r\n   *******  DrvRecoder 该条记录内容不对 *******  \r\n"); 
		  return false;
     	} 
	   	if(content[0]==0xFF)
	   	{
           Recorder_Read=Recorder_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。           
		   return false;
	   	}
	//--------------------------------------------------------------  	
		 return true; 
  //-------------------------------------------------------------------------------------------- 
}
Ejemplo n.º 8
0
u8 Read_MintPosition(u32 In_read,u8 *content ,u16 ReadLen)
{  // 读取单位小时内每分钟的位置信息
	/*
	   NOTE : Flash  1 page = 512 Bytes  ; 1 Record = 32 Bytes ;  1page= 16 Records   1Sector=8Page=128Records
	*/
    u32  pageoffset=0;   //Page 偏移 
	u8   FCS=0;
	u16  i=0;    

  /*
      上报的每一包数据位31个字节, 每条记录为32个字节,用每条记录的最后一个字节来作为是否上报过的标志位。没有上报该标志为0xFF
      上报过后该标志为被写为0x01
  */
  //----------------------------------------------------------------------------------------------
  //   1. caculate address 
  pageoffset=In_read;				// 计算出 Page 偏移  除以1	
  	// 计算出 页内偏移地址 
    // 计算出页内 字节	乘以 512 (每个记录512个字节)  485(content)+1(FCS)
  //   2. Write Record Content 
    DF_ReadFlash(pageoffset+AvrgMintPosit_offset,0,content,ReadLen);	  
    DF_delay_us(10);
	// rt_kprintf("\r\n  ReadRecoder Starpageoffset=%d  PageOffset= %d  \r\n",VehicleRecStart_offset,pageoffset);   
    // rt_kprintf("\r\n  单位小时每分钟位置读取  Position 内容为 :\r\n");   
	//  for(i=0;i<ReadLen;i++)
	//	rt_kprintf("%2X ",content[i]);   
	//  rt_kprintf("\r\n");         
    
  //  3.  Judge FCS	
	//--------------- 过滤已经发送过的信息 -------
	  FCS = 0;
	   for ( i = 0; i < ReadLen-1; i++ )   //计算读取信息的异或和
	   {
			   FCS ^= *( content + i );  
	   }			  
	   if(((content[ReadLen-1]!=FCS)&&(content[0]!=0xFF))||(content[0]==0xFF))	// 判断异或和 
	    { 	      
		  if(content[0]==0xFF)
		  {
			 AvrgMintPosit_Read=AvrgMintPosit_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。			
			 return false;
		  }
          AvrgMintPosit_Read++;	
		  if(AvrgMintPosit_Read>=Max_MintPos)    
		  	AvrgMintPosit_Read=0; 
		//  rt_kprintf("\r\n   *******  DrvRecoder 该条记录内容不对 *******  \r\n"); 
		  return false;
     	} 
	   	if(content[0]==0xFF)
	   	{
           AvrgMintPosit_Read=AvrgMintPosit_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。           
		   return false;
	   	}
	//--------------------------------------------------------------  	
		 return true; 		    
  //-------------------------------------------------------------------------------------------- 
}
Ejemplo n.º 9
0
u32  Api_DFdirectory_Query(u8 *name, u8  returnType)
{   //  returnType=0  返回记录数目     returnType=1 时返回改目录文件大小
    u8   flag=0;
    u32  pic_current_page=0;

    if(strcmp((const char*)name,spdpermin)==0)
    {
        return AvrgSpdPerMin_write;
    }
    if(strcmp((const char*)name,tired_warn)==0)
    {
        return TiredDrv_write ;
    }
    if(strcmp((const char*)name,camera_1)==0)
    {   pic_current_page=PicStart_offset;
        flag=1;
    }
    if(strcmp((const char*)name,camera_2)==0)
    {   pic_current_page=PicStart_offset2;
        flag=1;
    }
    if(strcmp((const char*)name,camera_3)==0)
    {   pic_current_page=PicStart_offset3;
        flag=1;
    }
    if(strcmp((const char*)name,camera_4)==0)
    {   pic_current_page=PicStart_offset4;
        flag=1;
    }
    if(strcmp((const char*)name,voice)==0)
    {   DF_ReadFlash(SoundStart_offdet,0,(u8*)&SrcFileSize,4);
        return SrcFileSize;
    }
    if(flag)
    {
        DF_delay_ms(5);
        DF_ReadFlash(pic_current_page, 0,PictureName, 23);
        memcpy((u8*)&PicFileSize,PictureName+19,4);
        return   PicFileSize	;
    }
    return  0;
}
Ejemplo n.º 10
0
void BD_MODULE_Read(void)
{
   DF_ReadFlash(DF_GPS_MODULE_offset,0,&GPS_MODULE_TYPE,1);  
   if(Module_3017A==GPS_MODULE_TYPE)
     rt_kprintf("\r\n	北斗定位模块: 3017A");
  else
  if(Module_3020C==GPS_MODULE_TYPE)
     rt_kprintf("\r\n	北斗定位模块: 3020C");
 // else
  //	rt_kprintf("\r\n	北斗定位模块: 尚未自动检测");
   
}
Ejemplo n.º 11
0
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"); 

}
Ejemplo n.º 12
0
static Look_data(u8 *str,u8 input)
{
	u32 temp_usr=0;
	u32 temp_addr=0;
	memset(str,0,sizeof(str));
	DF_ReadFlash(DF_BD_first_target,0,str,3);
	temp_addr = (BD1_control.data_user_addr[0]<<16)+(BD1_control.data_user_addr[1]<<8)+(BD1_control.data_user_addr[2]);
	temp_usr = (BD1_struct.UserAddr[0]<<16)+(BD1_struct.UserAddr[1]<<8)+BD1_struct.UserAddr[2];
	rt_kprintf("temp_addr:%d---temp_usr:%d\r\n",temp_addr,temp_usr);
	sprintf((char*)str, "%7d", temp_addr);//通信地址
	sprintf(((char*)str)+15, "%7d", temp_usr);//用户地址

	lcd_fill(0);
	lcd_text12(0, 5,"通信地址:",9,LCD_MODE_SET);
	lcd_text12(60, 5,((char*)str),7,LCD_MODE_SET);
	lcd_text12(0, 19,"用户地址:",9,LCD_MODE_SET);
	lcd_text12(60, 19,((char*)str)+15,7,LCD_MODE_SET);
	lcd_update_all();
	AddreorFre_screen =input;	
}
Ejemplo n.º 13
0
u8 Save_PerSecContent(u32 In_wr,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};
  //----------------------------------------------------------------------------------------------
  //   1. Judge  Whether  needs to Erase page 
  
     pageoffset=(u32)(In_wr/7);                // 计算出 Page 偏移  除以7 
     InPageoffset=In_wr-(u32)(pageoffset*7);   // 计算出 页内偏移地址 
     InPageAddr=(u16)(InPageoffset*70);           // 计算出页内 字节   乘以 70 (每个记录70个字节)    
     if(((pageoffset%8)==0)&&(InPageoffset==0))  // 判断是否需要擦除Block  被移除到下一个Block  1Block=8Page  
     {
	  SST25V_SectorErase_4KByte((pageoffset+AvrgSpdSec_offset)*PageSIZE);	  // erase Sector 
	  mDelaymS(50);   
	  // rt_kprintf("\r\n Erase Cycle Block : %d\r\n",(pageoffset>>6));   
	 }
  //	   2. Filter write  area    
      DF_ReadFlash(pageoffset+AvrgSpdSec_offset,InPageAddr,reg,1);
      DF_delay_us(10);
	   if(reg[0]!=0xff)  // 如果要写入的区域 dirty  ,则地址增然后从新开始寻找知道找到为止
	   	{
	   	  In_wr++; 
		  AvrgSpdPerSec_write++;		  
		  if(AvrgSpdPerSec_write>=Max_SPDerSec) 
			   AvrgSpdPerSec_write=0;   
//		  rt_kprintf("\r\n    *******  每秒钟速度 写区域 Write area : %d  In_wr=%d  is   Dirity!  \r\n",AvrgSpdPerSec_write,In_wr);  
          //--------------------------
		  	 return false;
	   	}       
  //   3. Write Record Content 
     DF_WriteFlashDirect(pageoffset+AvrgSpdSec_offset,InPageAddr,content,saveLen);  //   写入信息
     DF_delay_ms(10);
	// rt_kprintf("\r\n Write PerMit Starpageoffset=%d  PageOffset= %d ,  InPageAddr= %d \r\n",AverageSpdStart_offset,pageoffset,InPageoffset); 
     return true; 
  //-------------------------------------------------------------------------------------------- 
}
Ejemplo n.º 14
0
//-----------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------
u8 Save_DrvRecoder(u32 In_write,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};
  //----------------------------------------------------------------------------------------------
  //   1. Judge  Whether  needs to Erase page 
  
     pageoffset=(u32)(In_write>>1);                // 计算出 Page 偏移  除以2  
     InPageoffset=In_write-(u32)(pageoffset<<1);   // 计算出 页内偏移地址 
     InPageAddr=(u16)(InPageoffset<<8);           // 计算出页内 字节   乘以 256 (每个记录256个字节)  206(content)+1(FCS)
     if(((pageoffset%8)==0)&&(InPageoffset==0))  // 判断是否需要擦除Block  被移除到下一个Sector  1Sector=8 Page  
     {
        SST25V_SectorErase_4KByte((pageoffset+VehicleRecStart_offset)*PageSIZE);      // erase Sector	
        DF_delay_ms(70);
		// rt_kprintf("\r\n Erase Cycle Block : %d\r\n",(pageoffset>>6));   
	 }
  //	   2. Filter write  area    
        DF_ReadFlash(pageoffset+VehicleRecStart_offset,InPageAddr,reg,1); 
	   if(reg[0]!=0xff)  // 如果要写入的区域 dirty  ,则地址跳到下一个
	   	{
          In_write++;
		  Recorder_write++;		  
		  if(Recorder_write>=Max_RecoderNum)  
			   Recorder_write=0;  
		 // rt_kprintf("\r\n    *******   行车记录仪写区域 Write area : %d   is   Dirity!  \r\n",In_write);  
		  return false;
	   	}       
  //   3. Write Record Content 
     DF_WriteFlashDirect(pageoffset+VehicleRecStart_offset,InPageAddr,content,saveLen);  //   写入信息
     DF_delay_ms(8); 
	// rt_kprintf("\r\n DrvRec Starpageoffset=%d  PageOffset= %d ,  InPageAddr= %d \r\n",VehicleRecStart_offset,pageoffset,InPageoffset); 
		return true; 
  //-------------------------------------------------------------------------------------------- 
}
Ejemplo n.º 15
0
u8 Save_MintPosition(u32 In_write,u8 *content ,u16 saveLen)
{    // 记录单位小时内每分钟的位置信息
	/*
	   NOTE : Flash  1 page = 512 Bytes  ; 1 Record = 32 Bytes ;  1page= 16 Records   1Sector=8Page=128Records
	*/
    u32  pageoffset=0;   //Page 偏移
	u8   reg[1]={0};
  //----------------------------------------------------------------------------------------------
  //   1. Judge  Whether  needs to Erase page     每条记录512个字节
  
     pageoffset=In_write;                // 计算出 Page 偏移  除以4  
        // 计算出 页内偏移地址 0
        // 计算出页内 字节   乘以 512 (每个记录512个字节)  485(content)+1(FCS)
     if((pageoffset%8)==0)  // 判断是否需要擦除Block  被移除到下一个Block  1Block=8 Page  
     {
	  SST25V_SectorErase_4KByte((pageoffset+AvrgMintPosit_offset)*PageSIZE);	  // erase Sector 
	  DF_delay_ms(50);
	  // rt_kprintf("\r\n Erase Cycle Block : %d\r\n",(pageoffset>>6));   
	 }
  //	   2. Filter write  area    
       DF_ReadFlash(pageoffset+AvrgMintPosit_offset,0,reg,1); 
	   if(reg[0]!=0xff)  // 如果要写入的区域 dirty  ,则地址增然后从新开始寻找知道找到为止
	   	{
          In_write++;
		  AvrgMintPosit_write++;		  
		  if(AvrgMintPosit_write>=Max_MintPos) 
			   AvrgMintPosit_write=0;  
		 // rt_kprintf("\r\n    *******   行车记录仪写区域 Write area : %d   is   Dirity!  \r\n",In_write);  
		  //----------------------------
		  	return  false;
	   	}       
  //   3. Write Record Content 
       DF_WriteFlashDirect(pageoffset+AvrgMintPosit_offset,0,content,saveLen);  //   写入信息
       DF_delay_ms(10);
	// rt_kprintf("\r\n DrvRec Starpageoffset=%d  PageOffset= %d ,  InPageAddr= %d \r\n",VehicleRecStart_offset,pageoffset,InPageoffset); 
     return true; 
  //-------------------------------------------------------------------------------------------- 
}
Ejemplo n.º 16
0
//-----------------------------------------------------------------------------------------------------------
u8  Common_WriteContent(u32 In_write, u8 *content , u16 saveLen, u8 Type)
{
    //-----------------------------------------------------
    u8     reg[1];
    //u8   regStr[25];
    //-----------------------------------------------------
    u32  pageoffset = 0; //Page 偏移
    u32  InPageoffset;   //页内Record偏移
    u16  InPageAddr = 0; //页内 地址偏移
    u32  Start_offset = 0;

    //--------------------------------------------------
    //memset(regStr,0,sizeof(regStr));
    //  1.   Classify
    switch(Type)
    {

    case TYPE_ExpSpdAdd:
        Start_offset = ExpSpdStart_offset;
        // memcpy(regStr,"超速报警",25);
        break;
    default :
        return false;
    }
    //----------------------------------------------------------------------------------------------
    //	 2. caculate address

    pageoffset = (u32)(In_write >> 4);				 // 计算出 Page 偏移  除以16
    InPageoffset = In_write - (u32)(pageoffset << 4);	 // 计算出 页内偏移地址
    InPageAddr = (u16)(InPageoffset << 5);			 // 计算出页内 字节   乘以 32 (每个记录32个字节)
    if(((pageoffset % 8) == 0) && (InPageoffset == 0)) // 判断是否需要擦除Block  被移除到下一个Block	1Block=8Page
    {
        SST25V_SectorErase_4KByte((pageoffset + Start_offset)*PageSIZE);    // erase Sector
        DF_delay_ms(70);
    }
    // 	  2. Filter write  area
    DF_ReadFlash(pageoffset + Start_offset, InPageAddr, reg, 1);
    if(reg[0] != 0xff)	// 如果要写入的区域 dirty  ,则地址增然后从新开始寻找知道找到为止
    {
        In_write++;
        if(In_write >= Max_CommonNum)
            In_write = 0;
        return false;
    }
    //   3. Write Record Content
    DF_WriteFlashDirect(pageoffset + Start_offset, InPageAddr, content, saveLen); //   写入信息
    DF_delay_ms(10);

    //   4. end
    switch(Type)
    {

    case TYPE_ExpSpdAdd:
        ExpSpdRec_write = In_write;
        break;
    default :
        return false;
    }

    return true;

}
Ejemplo n.º 17
0
u8  Common_ReadContent(u32 In_read, u8 *content , u16 ReadLen, u8 Type)
{
    //-----------------------------------------------------
    //u8    regStr[25];
    //-----------------------------------------------------
    u32  pageoffset = 0; //Page 偏移
    u32  InPageoffset;   //页内Record偏移
    u16  InPageAddr = 0; //页内 地址偏移
    u32  Start_offset = 0;
    u8   i = 0, FCS = 0;;
    //--------------------------------------------------

    // memset(regStr,0,sizeof(regStr));
    //  1.	Classify
    switch(Type)
    {

    case TYPE_ExpSpdAdd:
        Start_offset = ExpSpdStart_offset;
        //  memcpy(regStr,"超速报警",25);
        break;
    default :
        return false;
    }

    //----------------------------------------------------------------------------------------------
    //	 2. caculate address

    pageoffset = (u32)(In_read >> 4);				 // 计算出 Page 偏移  除以64
    InPageoffset = In_read - (u32)(pageoffset << 4); // 计算出 页内偏移地址
    InPageAddr = (u16)(InPageoffset << 5);			 // 计算出页内 字节   乘以 32 (每个记录32个字节)
    //	 2. Write Record Content
    DF_ReadFlash(pageoffset + Start_offset, InPageAddr, content, ReadLen);
    DF_delay_us(10);
    if(DispContent)
    {
        OutPrint_HEX("读取Common 内容为 ", content, ReadLen);
    }
    //	3. Judge FCS
    //--------------- 过滤已经发送过的信息 -------
    FCS = 0;
    for ( i = 0; i < ReadLen - 1; i++ )	 //计算读取信息的异或和
    {
        FCS ^= *( content + i );
    }
    if(((content[ReadLen - 1] != FCS) && (content[0] != 0xFF)) || (content[0] == 0xFF)) // 判断异或和
    {

        if(content[0] == 0xFF)
        {
            //如果是内容是0xFF ,读指针和写指针相等,不再触发上报。
            switch(Type)
            {

            case TYPE_ExpSpdAdd:
                ExpSpdRec_read = ExpSpdRec_write;
                break;
            default :
                return false;

            }
            return false;
        }
        In_read++;
        if(In_read >= Max_CommonNum)
            In_read = 0;
        //rt_kprintf("\r\n   record info error  \r\n");
        return false;
    }
    if(content[0] == 0xFF)
    {
        // rt_kprintf("\r\n  read  0xFF \r\n");
        switch(Type)
        {

        case TYPE_ExpSpdAdd:
            ExpSpdRec_read = ExpSpdRec_write;
            break;
        default :
            return false;

        }
        return false;
    }


    //   4. end
    switch(Type)
    {

    case TYPE_ExpSpdAdd:
        ExpSpdRec_read = In_read;
        break;
    default :
        return false;
    }

    return true;

}
Ejemplo n.º 18
0
          u8  Api_DFdirectory_Read(u8 *name,u8 *buffer, u16 len, u8  style ,u16 numPacket)  // style  1. old-->new   0 : new-->old 
         {   /*  Á¬Ðøµ÷Óü¸´Î £¬ÒÀ´Î°´style ·½Ê½µÝÔö*/
               // style  1. old-->new   0 : new-->old 
               //   numPacket    : °²×° style  ·½Ê½¶ÁÈ¡¿ªÊ¼ µÚ¼¸ÌõÊý¾Ý°ü  from: 0
               u16   read_addr=0;
			   
              if(strcmp((const char*)name,spdpermin)==0)
		  {
		        if(style==1)
					read_addr=0+numPacket;
			 else
			 { 
			      if(AvrgSpdPerMin_write==0)
				  	    return   false; 
				else  
			      if(AvrgSpdPerMin_write>=(numPacket+1))		
			            read_addr=AvrgSpdPerMin_write-1-numPacket;
				else
					 return false;
			 }  
		            Read_PerMinContent(read_addr,buffer, len);
			     //----------------------	 
			return true;	 
               }
		 if(strcmp((const char*)name,spd_warn)==0) 
		{
			 if(style==1)
					read_addr=0+numPacket;
			 else
			 { 
			      if(ExpSpdRec_write==0)
				  	    return   false; 
				else  
			      if(ExpSpdRec_write>=(numPacket+1))		
			            read_addr=ExpSpdRec_write-1-numPacket;
				else
					 return false;
			 }  	
			   Common_ReadContent( read_addr, buffer, len, TYPE_ExpSpdAdd);    
			   return true;
               }
                if(strcmp((const char*)name,tired_warn)==0) 
		 {
			   if(style==1)
					read_addr=0+numPacket;
			 else
			 { 
			      if(TiredDrv_write==0)
				  	    return   false; 
				else  
			      if(TiredDrv_write>=(numPacket+1))		
			            read_addr=TiredDrv_write-1-numPacket;
				else
					 return false;
			 } 
			   Common_ReadContent( read_addr, buffer, len,  TYPE_TiredDrvAdd);      

			  //-------------------------
			  return  true;
                }
				
		 if(strcmp((const char*)name,doubt_data)==0)
		{ 
		        if(style==1)
					read_addr=0+numPacket;
			 else
			 { 
			      if(Recorder_write==0)
				  	    return   false; 
				else  
			      if(Recorder_write>=(numPacket+1))		
			            read_addr=Recorder_write-1-numPacket;
				else
					 return false;
			 }  
		       Read_DrvRecoder(read_addr, buffer, len );   
	
		       //-------------------------		   
			return true;
               }	
		 //------- MultiMedia   RAW  data  ---------
		 if(strcmp((const char*)name,voice)==0)
		{
		     if(style==0)
					return  false;  //  Ö»ÔÊÐí´Óold  -> new
	            DF_ReadFlash(SoundStart_offdet+numPacket,0, buffer, len);  
                   return true;
		 }
		if(strcmp((const char*)name,camera_1)==0)
		{
                     DF_ReadFlash(PicStart_offset+numPacket,0,buffer, len);
			return true;		 
               }
		if(strcmp((const char*)name,camera_2)==0)
		{
                     DF_ReadFlash(PicStart_offset2+numPacket,0,buffer, len);
			return true;		 
               }
		if(strcmp((const char*)name,camera_3)==0)
		{
                      DF_ReadFlash(PicStart_offset3+numPacket,0,buffer, len);
			return true;		  
               }
	       if(strcmp((const char*)name,camera_4)==0)
		{
                      DF_ReadFlash(PicStart_offset4+numPacket,0,buffer, len); 
			return true;		  
               }	 
		
              return false;
         }
Ejemplo n.º 19
0
u8 ReadCycleGPS(u32 cycleread, u8 *content , u16 ReadLen)
{
    /*
       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  i = 0, FCS = 0;
    u8  Len_read = 0; // 信息长度

    /*
        上报的每一包数第一个字节是有效信息的长度,从第二个字节是信息内容,
        信息内容的后边是一个字节额校验(校验从长度开始到内容最后一个字节)
    */
    //----------------------------------------------------------------------------------------------
    //   1. caculate address
    pageoffset = (u32)(cycle_read >> 2);             // 计算出 Page 偏移  除以4 (每个page能放4条记录)
    InPageoffset = cycle_read - (u32)(pageoffset << 2); // 计算出 页内偏移地址
    InPageAddr = (u16)(InPageoffset << 7);        // 计算出页内 字节   乘以 128 (每个记录128个字节)
    //   2. Write Record Content
    DF_TAKE;
    DF_ReadFlash(pageoffset + CycleStart_offset, InPageAddr, content, ReadLen);
    DF_delay_ms(10);
    DF_RELEASE;
    //  获取信息长度
    Len_read = content[0];

    if(DispContent == 2)
    {
        OutPrint_HEX("读取CycleGPS 内容为 ", content, Len_read + 1);
    }
    //  3. Judge FCS
    //--------------- 过滤已经发送过的信息 -------
    FCS = 0;
    for ( i = 0; i < Len_read; i++ )   //计算读取信息的异或和
    {
        FCS ^= *( content + i );
    }
    if(((content[Len_read] != FCS) && (content[0] != 0xFF)) || (content[0] == 0xFF)) // 判断异或和
    {
        if(content[0] == 0xFF)
        {
            // rt_kprintf("\r\n  content[0]==0xFF   read=%d,  write=%d  \r\n",cycle_read,cycle_write);

            cycle_read++;
            if(cycle_read >= Max_CycleNum)
                cycle_read = 0;
            ReadCycle_status = RdCycle_Idle;
            return false;
        }
        //------------------------------------------------
        cycle_read++;
        if(cycle_read >= Max_CycleNum)
            cycle_read = 0;
        ReadCycle_status = RdCycle_Idle;
        return false;
    }
    //------------------------------------------------------------------------------------------
    return true;
    //--------------------------------------------------------------------------------------------
}
Ejemplo n.º 20
0
//---------------------------------------------------
  u8    ISP_Read( u32  Addr, u8*  Instr, u16 len)
{
       DF_ReadFlash(Addr,0,Instr,len);   
       return 1;	
}
Ejemplo n.º 21
0
    u16  Api_RecordNum_Query(u8 *name) 
       {
       #if 0
             if(strcmp((const char*)name,event_808)==0)
           	{
                       
		     return event;		   
           	}
           if(strcmp((const char*)name,msg_broadcast)==0)
		{
                   DF_ReadFlash(DF_Broadcast_offset+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}   	
	    if(strcmp((const char*)name,phonebook)==0)
		{
                   DF_ReadFlash(DF_PhoneBook_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}	
	    if(strcmp((const char*)name,Rail_cycle)==0)
		{
                   DF_ReadFlash(DF_Event_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}	
           if(strcmp((const char*)name,Rail_rect)==0)
	        {
                   DF_ReadFlash(DF_RectangleRail_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}		   	
	    if(strcmp((const char*)name,Rail_polygen)==0)	
	     {
                   DF_ReadFlash(DF_PolygenRail_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}			
	    if(strcmp((const char*)name,turn_point)==0)
		{
                   DF_ReadFlash(DF_turnPoint_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}		
           if(strcmp((const char*)name,route_line)==0)
		{
                   DF_ReadFlash(DF_Route_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}	   	
	    if(strcmp((const char*)name,ask_quesstion)==0)	
		{
                   DF_ReadFlash(DF_AskQuestion_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}		
	    if(strcmp((const char*)name,text_msg)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}



 // 3.  ¼Ç¼ 
                if(strcmp((const char*)name,spd_warn)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
		    if(strcmp((const char*)name,tired_warn)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
		    if(strcmp((const char*)name,doubt_data)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
		    if(strcmp((const char*)name,spdpermin)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
		    if(strcmp((const char*)name,pospermin)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
		    if(strcmp((const char*)name,pic_index)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
		    if(strcmp((const char*)name,voice_index)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}
              return  false;
	  #endif		  
						return 1;
       }
Ejemplo n.º 22
0
u8  Common_ReadContent(u32 In_read,u8 *content ,u16 ReadLen, u8 Type) 
{
  //-----------------------------------------------------
  //u8    regStr[25];   
  //-----------------------------------------------------
    u32  pageoffset=0;   //Page 偏移
    u32  InPageoffset;   //页内Record偏移
    u16  InPageAddr=0;   //页内 地址偏移 
	u32  Start_offset=0;     
	u8   i=0,FCS=0;;
   //--------------------------------------------------	
 
	// memset(regStr,0,sizeof(regStr)); 
   //  1.	Classify
	 switch(Type)
	 {
	 
		 case TYPE_TiredDrvAdd:
							  Start_offset=TiredDrvStart_offset;
							//  memcpy(regStr,"疲劳驾驶",25);
							  break;
		 case TYPE_ExpSpdAdd:
							  Start_offset=ExpSpdStart_offset;
							//  memcpy(regStr,"超速报警",25);
							  break;					  
		 case TYPE_ErrorLogAdd:
							  Start_offset=AbNormalStart_offset;
							//  memcpy(regStr,"异常LOG",25); 
							  break; 
		  case TYPE_LogInAdd:
							   Start_offset=LogIn_offset; 
							//   memcpy(regStr,"登录记录",25);   
							   break; 
		  case TYPE_SettingChgAdd:
							   Start_offset=SettingChg_offset;	  
							 //  memcpy(regStr,"参数修改",25);	   
							   break;					   
		 					  
		 default :
							  return false; 						  
	 } 
 
	//----------------------------------------------------------------------------------------------
	//	 2. caculate address 
	 
		   pageoffset=(u32)(In_read>>4);				  // 计算出 Page 偏移  除以64  
		   InPageoffset=In_read-(u32)(pageoffset<<4);   // 计算出 页内偏移地址 
		   InPageAddr=(u16)(InPageoffset<<5);			 // 计算出页内 字节   乘以 32 (每个记录32个字节)
		  //	 2. Write Record Content 
		   DF_ReadFlash(pageoffset+Start_offset,InPageAddr,content,ReadLen);    
		   DF_delay_us(10);
		 //  rt_kprintf("\r\n  Common Starpageoffset=%d	PageOffset= %d ,  InPageAddr= %d  TYPE= %s\r\n",Start_offset,pageoffset,InPageoffset,regStr);  
		 if(DispContent)
		 {
			   rt_kprintf("\r\n  读取Common 内容为 :\r\n");  
				for(i=0;i<ReadLen;i++)
				  rt_kprintf("%2X ",content[i]);  
			   rt_kprintf("\r\n");   
		 }   
		//	3. Judge FCS  
		  //--------------- 过滤已经发送过的信息 -------
			FCS = 0;
			 for ( i = 0; i < ReadLen-1; i++ )	 //计算读取信息的异或和
			 {
					 FCS ^= *( content + i );  
			 }				
			 if(((content[ReadLen-1]!=FCS)&&(content[0]!=0xFF))||(content[0]==0xFF))  // 判断异或和 
			  { 
			   
			   if(content[0]==0xFF)
			   {
				  //如果是内容是0xFF ,读指针和写指针相等,不再触发上报。	
				         switch(Type)
					    {
						
							case TYPE_TiredDrvAdd:							 
												 TiredDrv_read=TiredDrv_write;
												 break;
							case TYPE_ExpSpdAdd:
												 ExpSpdRec_read=ExpSpdRec_write;
												 break; 					 
							case TYPE_AvrgSpdAdd:
												 AvrgSpdPerMin_Read=AvrgSpdPerMin_write;
												 break;
							case TYPE_ErrorLogAdd:
												 ErrorLog_Read=ErrorLog_write;        
												 break; 
							 case TYPE_LogInAdd:
												 Login_Read=Login_write;
												  break; 
							 case TYPE_SettingChgAdd:
							 	                 Settingchg_read=Settingchg_write;
												  break;					  
												 
							default :
												 return false;							 
					    
				         	}	
						return false; 
			   }
				In_read++; 
				if(In_read>=Max_CycleNum)
				  In_read=0;
				rt_kprintf("\r\n   *******	该条记录内容不对 *******  \r\n");  
				return false;
			  }
			 if(content[0]==0xFF)
			 {
               rt_kprintf("\r\n  读取内容为 0xFF \r\n");
			        switch(Type)
					    {
						
							case TYPE_TiredDrvAdd:							 
												 TiredDrv_read=TiredDrv_write;
												 break;
							case TYPE_ExpSpdAdd:
												 ExpSpdRec_read=ExpSpdRec_write;
												 break; 					 
							case TYPE_AvrgSpdAdd:
												 AvrgSpdPerMin_Read=AvrgSpdPerMin_write;
												 break;
							case TYPE_ErrorLogAdd:
												 ErrorLog_Read=ErrorLog_write;        
												 break; 
							 case TYPE_LogInAdd:
												 Login_Read=Login_write;
												  break; 
							 case TYPE_SettingChgAdd:
												 Settingchg_read=Settingchg_write;
												  break;					  
												 
							default :
												 return false;							 
					    
				         	}	
               return false;
			 } 
			 
			 	
     //   4. end  
        switch(Type)
    {
	
		case TYPE_TiredDrvAdd:							 
							 TiredDrv_read=In_read;
							 break;
		case TYPE_ExpSpdAdd:
							 ExpSpdRec_read=In_read;
							 break; 					 
		case TYPE_AvrgSpdAdd:
							 AvrgSpdPerMin_Read=In_read;
							 break;
		case TYPE_ErrorLogAdd:
							 ErrorLog_Read=In_read;        
							 break; 
		 case TYPE_LogInAdd:
							 Login_Read=In_read;
							  break; 
		 case TYPE_SettingChgAdd:
		 	                 Settingchg_read=In_read; 
							  break;					  
							 
		default :
							 return false;							 
    }

	return true; 
	     	     
}
Ejemplo n.º 23
0
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;
}
Ejemplo n.º 24
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; 
}
Ejemplo n.º 25
0
u8  Api_DFdirectory_Read(u8 *name,u8 *buffer, u16 len, u8  style ,u16 numPacket)  // style  1. old-->new   0 : new-->old
{   /*  连续调用几次 ,依次按style 方式递增*/
    // style  1. old-->new   0 : new-->old
    //   numPacket    : 安装 style  方式读取开始 第几条数据包  from: 0
    u16   read_addr=0;

    DF_delay_ms(1);
    if(strcmp((const char*)name,spdpermin)==0)
    {
        if(style==1)
            read_addr=0+numPacket;
        else
        {
            if(AvrgSpdPerMin_write==0)
                return   false;
            else if(AvrgSpdPerMin_write>=(numPacket+1))
                read_addr=AvrgSpdPerMin_write-1-numPacket;
            else
                return false;
        }
        Read_PerMinContent(read_addr,buffer, len);
        //----------------------
        return true;
    }
    if(strcmp((const char*)name,spd_warn)==0)
    {
        if(style==1)
            read_addr=0+numPacket;
        else
        {
            if(ExpSpdRec_write==0)
                return   false;
            else if(ExpSpdRec_write>=(numPacket+1))
                read_addr=ExpSpdRec_write-1-numPacket;
            else
                return false;
        }
        Common_ReadContent( read_addr, buffer, len, TYPE_ExpSpdAdd);
        return true;
    }
    if(strcmp((const char*)name,tired_warn)==0)
    {
        if(style==1)
            read_addr=0+numPacket;
        else
        {
            if(TiredDrv_write==0)
                return   false;
            else if(TiredDrv_write>=(numPacket+1))
                read_addr=TiredDrv_write-1-numPacket;
            else
                return false;
        }
        Common_ReadContent( read_addr, buffer, len,  TYPE_TiredDrvAdd);

        //-------------------------
        return  true;
    }

    if(strcmp((const char*)name,doubt_data)==0)
    {
        if(style==1)
            read_addr=0+numPacket;
        else
        {
            if(Recorder_write==0)
                return   false;
            else if(Recorder_write>=(numPacket+1))
                read_addr=Recorder_write-1-numPacket;
            else
                return false;
        }
        Read_DrvRecoder(read_addr, buffer, len );

        //-------------------------
        return true;
    }
    //------- MultiMedia   RAW  data  ---------
    if(strcmp((const char*)name,voice)==0)
    {
        if(style==0)
            return  false;  //  只允许从old  -> new
        DF_ReadFlash(SoundStart_offdet+numPacket,0, buffer, len);
        return true;
    }
    if(strcmp((const char*)name,camera_1)==0)
    {
        DF_ReadFlash(PicStart_offset+numPacket,0,buffer, len);
        return true;
    }
    if(strcmp((const char*)name,camera_2)==0)
    {
        DF_ReadFlash(PicStart_offset2+numPacket,0,buffer, len);
        return true;
    }
    if(strcmp((const char*)name,camera_3)==0)
    {
        DF_ReadFlash(PicStart_offset3+numPacket,0,buffer, len);
        return true;
    }
    if(strcmp((const char*)name,camera_4)==0)
    {
        DF_ReadFlash(PicStart_offset4+numPacket,0,buffer, len);
        return true;
    }

    return false;
}
Ejemplo n.º 26
0
u8 Read_PerSecContent(u32 In_read,u8 *content ,u16 ReadLen)   
{
	/*
	   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   FCS=0;
	u16  i=0;   

  /* 
      上报的每一包数据位31个字节, 每条记录为32个字节,用每条记录的最后一个字节来作为是否上报过的标志位。没有上报该标志为0xFF
      上报过后该标志为被写为0x01     
   */
  //----------------------------------------------------------------------------------------------
  //   1. caculate address 
  pageoffset=(u32)(In_read/7);				 // 计算出 Page 偏移  除以7  
  InPageoffset=In_read-(u32)(pageoffset*7);	 // 计算出 页内偏移地址 
  InPageAddr=(u16)(InPageoffset*70);		   // 计算出页内 字节	乘以 70 (每个记录70个字节)	  
  //   2. Write Record Content 
 
  DF_ReadFlash(pageoffset+AvrgSpdSec_offset,InPageAddr,content,ReadLen);	  
  DF_delay_us(10);
	// rt_kprintf("\r\n   Read PerMintSPD  Starpageoffset=%d  PageOffset= %d ,  InPageAddr= %d   每分钟平均速度 \r\n",AverageSpdStart_offset,pageoffset,InPageoffset);  
	if(DispContent==2)  
		{
			  rt_kprintf("\r\n  读取每秒PerSecSPD 内容为 :\r\n");    
			  for(i=0;i<ReadLen;i++) 
				  	rt_kprintf("%2X ",content[i]);          
			  rt_kprintf("\r\n");    
		}
  //  3. Judge FCS	
	//--------------- 过滤已经发送过的信息 -------
	  FCS = 0;
	   for ( i = 0; i < ReadLen-1; i++ )   //计算读取信息的异或和 
	   {
			   FCS ^= *(content + i );  
	   }			  
	   if(((content[ReadLen-1]!=FCS)&&(content[0]!=0xFF))||(content[0]==0xFF))	// 判断异或和 
	    { 	    
		    if(content[0]==0xFF)
	 		{             
	 		       rt_kprintf("\r\n  读取内容为0xFF \r\n"); 	 		    
				   AvrgSpdPerSec_Read=AvrgSpdPerSec_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。   		  
	               return false;     
			}     
          AvrgSpdPerSec_Read++;	 
		  if(AvrgSpdPerSec_Read>=Max_SPDerSec)      
		  	AvrgSpdPerSec_Read=0;  
		  //rt_kprintf("\r\n   ******* PerMit  该条记录内容不对 *******  \r\n");    
		  return false; 
     	}  
	    if(content[0]==0xFF)
 		{             
 		       rt_kprintf("\r\n  读取内容为0xFF \r\n"); 	 		    
			   AvrgSpdPerSec_Read=AvrgSpdPerSec_write;//如果是内容是0xFF ,读指针和写指针相等,不再触发上报。			  
               return false;      
		}     
	//----------------------------------------------------------------------------------------------------- 	
		return true; 
    //----------------------------------------------------------------------------------------------------- 
}
Ejemplo n.º 27
0
/******************************************************************************
 * Function: show_text () 
 * DESCRIPTION: - 显示函数 
 * Input: n_screen 是第几条内容
 * Input: n_sub_screen  当前内容可显示屏数
 * Output: 
 * Returns: 
 * 
 * -----------------------------------
* Created By wxg 15-jan-2014
* -------------------------------
 ******************************************************************************/
show_text(u8 n_screen,u8 n_sub_screen)
{
	u8 temp[2];//读出计数和长度
	u8 tmp[256];//读出全部内容
	u8 timer[6];//时间buffer
	u8 text_data[210];//信息内容
	u16 len_txt;//文本长度

	//读出flash数据
	if(mainshow==show_first)
	{
		memset(temp,0,10);
		memset(tmp,0,256);
		memset(timer,0,6);
		memset(text_data,0,210);
		mainshow=0;
		now_show=0;
		subshow=0;
		wait_show=0;
		len_txt=0;
		if(Erase_flag ==Top_15)
		{
			DF_ReadFlash(DF_BD_data_rx,n_screen*256,temp,2);
		}
		if(Erase_flag ==After_15)
		{
			DF_ReadFlash(DF_BD_data_rx+8,n_screen*256,temp,2);
		}
		if(1<=temp[0]<=15)
		{
			if(mainshow==show_first)
			{
				DF_ReadFlash(DF_BD_data_rx,n_screen*256,tmp,temp[1]);
				memcpy(timer,tmp+2,6);//时间
				//计算出内容长度
				len_txt = tmp[14]<<8+tmp[15];
				len_txt=len_txt/8;
				memcpy( text_data,tmp+16,len_txt);
				now_show =len_txt;
			}
		}
		else
		{
			lcd_fill(0);
			lcd_text12(0,10,"无内容可显示...",15,LCD_MODE_SET);
			lcd_update_all();	
		}
	}	
	//开始显示
			
				if(mainshow==show_first )
				{
					First_show(tmp ,n_screen);//显示时间和条数
					mainshow=show_end;//如果showing==show_end主屏号++,等到Auto_line_show返回值为0 则可以++;
					subshow=show_first;//子屏显示++;
				}
				wait_show =Auto_line_show(text_data, now_show);
				if(wait_show!=0)
				{
					now_show= wait_show;
				}
				else
				{
					mainshow=show_first ;//主屏可以显示
					subshow=show_end;//子屏不可以显示
				}
		

	
}
Ejemplo n.º 28
0
  u8   Api_RecordNum_Read( u8 *name,u8 Rec_Num,u8 *buffer, u16 len)    //  Rec_Num<128  Len<128
  	{

             if(strcmp((const char*)name,event_808)==0)
           	{
                   DF_ReadFlash(DF_Event_Page+Rec_Num, 0,buffer, len);    
		    // DF_delay_ms(10);   		   
		     return true;		   
           	}
           if(strcmp((const char*)name,msg_broadcast)==0)
		{
                   DF_ReadFlash(DF_Broadcast_offset+Rec_Num, 0,buffer, len);    
                   //DF_delay_ms(10);   				   
		     return true;		   
           	}   	
	    if(strcmp((const char*)name,phonebook)==0)
		{
                 DF_ReadFlash(DF_PhoneBook_Page+Rec_Num, 0,buffer, len);   
		   //DF_delay_ms(10);   		   
		     return true;		   
           	}	
	    if(strcmp((const char*)name,Rail_cycle)==0)
		{
                   DF_ReadFlash(DF_Event_Page+Rec_Num, 0,buffer, len);   
		    // DF_delay_ms(10);   		   
		     return true;		   
           	}	
           if(strcmp((const char*)name,Rail_rect)==0)
	        {
                   DF_ReadFlash(DF_RectangleRail_Page+Rec_Num, 0,buffer, len);   
		    // DF_delay_ms(10);   		   
		     return true;		   
           	}		   	
	    if(strcmp((const char*)name,Rail_polygen)==0)	
	     {
                   DF_ReadFlash(DF_PolygenRail_Page+Rec_Num, 0,buffer, len);   
		     //DF_delay_ms(10);   		   
		     return true;		   
           	}			
	    if(strcmp((const char*)name,turn_point)==0)
		{
                   DF_ReadFlash(DF_turnPoint_Page+Rec_Num, 0,buffer, len);   
		    // DF_delay_ms(10);   		   
		     return true;		   
           	}		
           if(strcmp((const char*)name,route_line)==0)
		{
                   DF_ReadFlash(DF_Route_Page+Rec_Num, 0,buffer, len);   
		    DF_delay_ms(10); 		   
		     return true;		   
           	}	   	
	    if(strcmp((const char*)name,ask_quesstion)==0)	
		{
                   DF_ReadFlash(DF_AskQuestion_Page+Rec_Num, 0,buffer, len);   
		     return true;		   
           	}		
	    if(strcmp((const char*)name,text_msg)==0)
	      {
                   DF_ReadFlash(DF_Msg_Page+Rec_Num, 0,buffer, len);   
		     //DF_delay_ms(10); 		   
		     return true;		   
           	}
  	      if(strcmp((const char*)name,pic_index)==0)
                {
                            DF_ReadFlash(DF_PicIndex_Page+Rec_Num, 0,buffer, len);  
				return true;			
                }
		 if(strcmp((const char*)name,voice_index)==0)
		{
                            DF_ReadFlash(DF_SoundIndex_Page+Rec_Num, 0,buffer, len);
				//DF_delay_ms(10); 			
				return  true;			
              }
		 return false;

  	}
Ejemplo n.º 29
0
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;
		}
			
	}
Ejemplo n.º 30
0
u8  Common_WriteContent(u32 In_write,u8 *content ,u16 saveLen, u8 Type) 
{
  //-----------------------------------------------------
  u8     reg[1];
  //u8   regStr[25];   
  //-----------------------------------------------------
    u32  pageoffset=0;   //Page 偏移
    u32  InPageoffset;   //页内Record偏移
    u16  InPageAddr=0;   //页内 地址偏移 
	u32  Start_offset=0; 

   //--------------------------------------------------	
    //memset(regStr,0,sizeof(regStr)); 
  //  1.   Classify
    switch(Type)
    {
	
		case TYPE_TiredDrvAdd:
							 Start_offset=TiredDrvStart_offset;
							// memcpy(regStr,"疲劳驾驶",25);
							 break;
		case TYPE_ExpSpdAdd:
							 Start_offset=ExpSpdStart_offset;
							// memcpy(regStr,"超速报警",25);
							 break; 					 
		case TYPE_ErrorLogAdd:
							 Start_offset=AbNormalStart_offset;
							 //memcpy(regStr,"异常LOG",25); 
							 break; 
		case TYPE_LogInAdd:
							 Start_offset=LogIn_offset; 
							// memcpy(regStr,"登录记录",25);   
							 break; 
		case TYPE_SettingChgAdd:
							 Start_offset=SettingChg_offset;    
							 //memcpy(regStr,"参数修改",25);       
							 break; 					 
		default :
							 return false;		  					 
    }
	//----------------------------------------------------------------------------------------------
	//	 2. caculate address 
	 
		pageoffset=(u32)(In_write>>4);				 // 计算出 Page 偏移  除以16  
		InPageoffset=In_write-(u32)(pageoffset<<4);	 // 计算出 页内偏移地址 
		InPageAddr=(u16)(InPageoffset<<5);			 // 计算出页内 字节   乘以 32 (每个记录32个字节)
		if(((pageoffset%8)==0)&&(InPageoffset==0))  // 判断是否需要擦除Block  被移除到下一个Block	1Block=8Page  
		{
        SST25V_SectorErase_4KByte((pageoffset+Start_offset)*PageSIZE);      // erase Sector	
        DF_delay_ms(70);
		//  rt_kprintf("\r\n Common --- Erase Cycle Block : %d\r\n",(pageoffset>>6));    
		}
	 // 	  2. Filter write  area    
		DF_ReadFlash(pageoffset+Start_offset,InPageAddr,reg,1); 
		  if(reg[0]!=0xff)	// 如果要写入的区域 dirty  ,则地址增然后从新开始寻找知道找到为止
		   {
			 In_write++;
			 if(In_write>=Max_CommonNum)
				  In_write=0;  
			         // rt_kprintf("\r\n	 *******   Common 写区域 Write area : %d	is	 Dirity!  \r\n",In_write);  
				 return false;
		   }	   
	 //   3. Write Record Content 
        DF_WriteFlashDirect(pageoffset+Start_offset,InPageAddr,content,saveLen);  //   写入信息
		DF_delay_ms(10);
		//rt_kprintf("\r\n Common Starpageoffset=%d	PageOffset= %d ,  InPageAddr= %d  TYPE= %s \r\n",CycleStart_offset,pageoffset,InPageoffset,regStr);  

     //   4. end  
        switch(Type) 
    {
	
		case TYPE_TiredDrvAdd:							 
							 TiredDrv_write=In_write;
							 break;
		case TYPE_ExpSpdAdd:
							 ExpSpdRec_write=In_write;
							 break; 					 
		case TYPE_AvrgSpdAdd:
							 AvrgSpdPerMin_write=In_write;
							 break;
		case TYPE_ErrorLogAdd:
							 ErrorLog_write=In_write;  
							 break; 
		case TYPE_LogInAdd:
							 Login_write=In_write;
							 break; 
		case TYPE_SettingChgAdd:
							 Settingchg_write=In_write;     
							 break; 					 
		default :
							 return false;	 						 
    }

	return true; 
	     	     
}