Ejemplo n.º 1
0
/******************************************************************************
 * Function: First_show () 
 * DESCRIPTION: - 每一次带有信息条号的显示 
 * Input: str 条号
 * Input: str2 信息内容
 * Output: 
 * Returns: 
 * 
 * -----------------------------------
* Created By wxg 15-jan-2014
* -------------------------------
 ******************************************************************************/
void  First_show(u8* str2 ,u8 Screen,u8 mode)
{
#if 1
    u32   addre=0;
	u8  show_buf[20];
	//Dis_date[22]={"2000/00/00  00:00:00"};
	char T_date[22]={"00/00/00 00:00:00"};
	u8 i=0;
	memset(show_buf,0,20);
	lcd_fill(0);
	lcd_text12(0,5,number[Screen],strlen(number[Screen]),mode);
	for(i=0;i<3;i++)
		T_date[i*3]=str2[i+5]/10+'0';
	for(i=0;i<3;i++)
		T_date[1+i*3]=str2[i+5]%10+'0';

	for(i=0;i<3;i++)
		T_date[9+i*3]=str2[i+5+3]/10+'0';
	for(i=0;i<3;i++)
		T_date[10+i*3]=str2[i+5+3]%10+'0';
	lcd_text12(strlen(number[Screen])*6,5,T_date,17,mode);
	//rt_kprintf("mian_screen --%d---%d\r\n",strlen(number[Screen]),Screen);
	lcd_text12(0,19,"发信地址:",8,mode);
	OutPrint_HEX("addre", str2+12, 3);
	addre=(str2[12]<<16)+(str2[13]<<8)+str2[14];
	sprintf((char*)show_buf,"%d",addre);
	lcd_text12(60,19,(char*)show_buf,strlen((char*)show_buf),mode);
	lcd_update_all();
	#endif
}
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 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.º 4
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.º 5
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;

}