Exemple #1
0
/***********************************************************
* Function:
* Description:
* Input:
* Input:
* Output:
* Return:
* Others:
***********************************************************/
static void rt_thread_entry_sd_test( void* parameter )
{
	FRESULT res;
	char tempbuf[64];
	rt_sem_take( &sem_dataflash, RT_TICK_PER_SECOND * FLASH_SEM_DELAY );
	SPI_Configuration();
	res = SD_Init();
	if(0 == res)
		{
		rt_kprintf("\r\n SD CARD INIT OK!");
		memset(tempbuf,0,sizeof(tempbuf));
		SD_GetCID(tempbuf);
		rt_kprintf("\r\n CID=");
		printf_hex_data(tempbuf, 16);
		SD_GetCSD(tempbuf);
		rt_kprintf("\r\n SID=");
		printf_hex_data(tempbuf, 16);
		
		rt_kprintf("\r\n SD 容量=%d",SD_GetCapacity());			
		}
	else
		{
		rt_kprintf("\r\n SD CARD INIT ERR = %d",res);
		}
	if(0 == f_mount(MMC, &fs))
		{
		rt_kprintf("\r\n f_mount SD OK!");
		}
	rt_sem_release(&sem_dataflash);
	while( 1 )
	{
		
		rt_thread_delay( RT_TICK_PER_SECOND / 20 );
	}
}
/*********************************************************************************
  *函数名称:void param_out_ex(char * sect, char * id )
  *功能描述:将ini文件参数输出到标准输出设备,如果参数id为空则输出所有参数
  *输	入: section	:ini文件参数对应的的section
  			id		:要输出的参数名称,不包含前面的"id_"
  *输	出: 从标准输出输出参数
  *返 回 值:none
  *---------------------------------------------------------------------------------
  * @修改人		修改时间   	修改内容
  * 白养民		2015-06-08	创建
*********************************************************************************/
void param_out_ex(char * section, char * id )
{
	int		i,i_sect;
	uint32_t u32data;
	uint8_t *p;
	char buffer[64];
	
	//param_load_addr(&jt808_param,ADDR_DF_PARAM_MAIN);
	for( i_sect = 0; i_sect < sizeof( tbl_ini_lookup ) / sizeof( struct _st_tbl_ini_lookup ); i_sect++ )
	{
		if((strlen(section) == 0)||(strncmp(section,tbl_ini_lookup[i_sect].section,strlen(tbl_ini_lookup[i_sect].section)) == 0))
		{
			for( i = 0; i < tbl_ini_lookup[i_sect].param_size / sizeof( st_tbl_id_lookup ); i++ )
			{
				//if(( id == tbl_id_lookup[i].id ) ||( 0 == id ))
				if((strncmp( id ,tbl_ini_lookup[i_sect].param[i].id, strlen(tbl_ini_lookup[i_sect].param[i].id) ) == 0) ||( 0 == strlen(id) ))
				{
				printf("\r\n %s.id_%s = ", tbl_ini_lookup[i_sect].section, tbl_ini_lookup[i_sect].param[i].id );
				switch(tbl_ini_lookup[i_sect].param[i].type)
					{
					case TYPE_BYTE:
					case TYPE_WORD:
					case TYPE_DWORD:
						if(tbl_ini_lookup[i_sect].param[i].type == TYPE_BYTE)
							{
							u32data=*tbl_ini_lookup[i_sect].param[i].val;
							}
						else if(tbl_ini_lookup[i_sect].param[i].type == TYPE_WORD)
							{
							u32data=*(uint16_t *)tbl_ini_lookup[i_sect].param[i].val;
							}
						else
							{
							u32data=*(uint32_t *)tbl_ini_lookup[i_sect].param[i].val;
							}
						printf("%u;",u32data);
						break;
					case TYPE_CAN:
						p = tbl_ini_lookup[i_sect].param[i].val;
						printf_hex_data(p, 8);
						break;
					/*
					case TYPE_STR:
						memset(buffer,0,sizeof(buffer));
						memcpy(buffer,tbl_id_lookup[i].val,32);
						rt_kprintf("\"%s\";",buffer);
						break;
					*/
					default :
						memset(buffer,0,sizeof(buffer));
						memcpy(buffer,tbl_ini_lookup[i_sect].param[i].val,tbl_ini_lookup[i_sect].param[i].type);
						printf("\"%s\";",buffer);
						break;
					}
				}
			}
		}
	}
	printf("\r\n" );
}
Exemple #3
0
/*
   补报数据更新原先的并读取新纪录
   每次收到中心应答后调用
   每次重新拨号成功后都要从新确认一下
   区分首次读还是上报中的读记录

   使用0704上报,要拼包
 */
uint8_t jt808_report_get( void )
{
	GPS_REPORT_HEAD head;
	uint8_t			buf[1024];              /*单包上报的字节不大于256*/
	uint32_t		i;
	uint32_t		addr;
	uint16_t		get_size;               /*获取记录的大小*/
	uint16_t		pos;
	uint8_t			read_count;             /*要读取的记录数*/
	uint32_t 		*p_addr;
	
	if( report_count == 0 )                 /*没有有未上报记录*/
	{
		return 0;
	}

	if(( gsm_socket[0].state != CONNECTED )||(jt808_state != JT808_REPORT))  /*不在线*/
	{
		return 0;
	}

	rt_sem_take( &sem_dataflash, RT_TICK_PER_SECOND * FLASH_SEM_DELAY );

/*批量查找记录*/
	addr				= report_get_addr;
	report_get_count	= 0;
	get_size			= 3;
	pos					= 3;                            /*0x0704数据包,开始的偏移*/
	read_count			= report_count;                 /*还没有报的记录总数*/
	if( report_count > sizeof(report_addr)/sizeof(uint32_t) )                             /*最多1次上报10条记录 303字节*/
	{
		read_count = sizeof(report_addr)/sizeof(uint32_t);
	}
	for( i = 0; i < ADDR_DF_POSTREPORT_SECT * 64; i++ )   /*每记录64字节,每sector(4096Byte)有64记录*/
	{
		sst25_read( addr, (uint8_t*)&head, sizeof( GPS_REPORT_HEAD ) );
		if( head.mn == 0x474E5353 )                     /*有效记录*/
		{
			if( head.attr >= ATTR_ONNET_NOREPORT )      /*还没有发送*/
			{
				rt_kprintf("\r\njt808_report_get addr=%X",addr);
				rt_kprintf("   head=");
				printf_hex_data((const u8 *)&head,sizeof(head));
				///盲区补报数据用命令0x0704,但是只有公共货运平台支持该命令
				//判断需要发送的总长度是否超过单包发送的最大长度
				if( ( pos + head.len + 2 ) >= JT808_PACKAGE_MAX )
				{
					break;
				}
				buf[pos++]	= head.len >> 8;
				buf[pos++]	= head.len;
				sst25_read( addr + 12, buf + pos, head.len );
				pos								+= ( head.len );
				report_addr[report_get_count]	= addr;
				report_get_count++;
				if( report_get_count == read_count ) /*收到指定条数数据*/
				{
					break;
				}
				#ifndef GPS_GGHYPT
				break;
				#endif
				if( report_trans_normal )		///正常发送数据用命令0x0200
				{
					break;
				}
			}
			addr	+= ( 12 + head.len + 63 );	//加63是为了取一个比较大的值
			addr	&= 0xFFFFFFC0;  			//指向下一个地址
		}
		else
		{
Exemple #4
0
/*
   上报信息收到响应,通用应答 0x8001
 */
static JT808_MSG_STATE jt808_report_response( JT808_TX_NODEDATA * nodedata, uint8_t *pmsg )
{
	uint8_t			* msg = pmsg + 12;
	uint16_t		ack_id;
	uint16_t		ack_seq;
	uint8_t			ack_res;
	uint32_t		addr;

	GPS_REPORT_HEAD head;
	uint32_t		i;

	ack_seq = ( msg[0] << 8 ) | msg[1];
	ack_id	= ( msg[2] << 8 ) | msg[3];
	ack_res = *( msg + 4 );
	rt_kprintf("\r\n JT808 TX 0x0200 RESPONSE_1");
	if( ack_res == 0 )
	{
		rt_kprintf("_2");
		rt_sem_take( &sem_dataflash, RT_TICK_PER_SECOND * FLASH_SEM_DELAY );
		if( ack_id == 0x0200 )              /*在线上报*/
		{
			rt_kprintf("_3");
			addr = *( (uint32_t*)( nodedata->user_para ) );
			sst25_read( addr, (uint8_t*)&head, sizeof( GPS_REPORT_HEAD ) );
			rt_kprintf("   write addr=%X",addr);
			rt_kprintf("   head=");
			printf_hex_data((const u8 *)&head,sizeof(head));
			if(( head.mn == 0x474E5353 )&&(head.attr >= ATTR_ONNET_NOREPORT))
			{
				head.attr &= 0x7F;          /*最高位置0*/
				sst25_write_through( addr, (uint8_t*)&head, sizeof( GPS_REPORT_HEAD ) );
				report_get_addr = addr;
				if( report_count )
				{
					report_count--;
				}
			}
			//nodedata->user_para = RT_NULL;  /*传递进来只是指明flash地址,并不是要释放*/
		}
		else if( ack_id == 0x0704 )              /*批量上报*/
		{
			for( i = 0; i < report_get_count; i++ )
			{
				sst25_read( report_addr[i], (uint8_t*)&head, sizeof( GPS_REPORT_HEAD ) );
				if(( head.mn == 0x474E5353 )&&(head.attr >= ATTR_ONNET_NOREPORT))
				{
					head.attr &= 0x7F;      /*最高位置0*/
					sst25_write_through( report_addr[i], (uint8_t*)&head, sizeof( GPS_REPORT_HEAD ) );
					report_get_addr = report_addr[i];
					if( report_count )
					{
						report_count--;
					}
				}
			}
		}
		rt_sem_release( &sem_dataflash );
	}

	return ACK_OK;
}
/******************************************************************************
* function    : main()
* Description : video venc sample
******************************************************************************/
int disk_pro_test01(int argc, char *argv[])
{
    s32 s32Ret;
   	int i, strt, ch_out;
	int cmd = 4;  
	long long sector = 0;  
    char buf[512];  
    int fd,size,len;
	char *buf_wr="Hello! I'm writing to this file!";
	
    cmd = atoi(argv[1]);
    sector = atoi(argv[2]);
	printf("sector=%d",sector);
	sector *= 512;
	//getchar();
    /*0:成功,-1:失败*/  
    ////////////////////////////////////////
 
	if(cmd&& (argc<4))
	{
    	printf("Please input param3( write string data. )!\n");
        return FALSE;
    }
	
	fd = open("/dev/sda2", O_RDWR );
	if(fd < 0)
	{
		printf("open: ERROR!");
		 return FALSE;
	}
	else
		printf("open file OK: %d\n",fd);
	/*
	while(sector)
	{
		if(sector>0xFFFFFFFF)
		{
			lseek64(fd,0xFFFFFFFF,SEEK_CUR);
			sector -= 0xFFFFFFFF;
		}
		else
		{
			lseek64(fd,sector,SEEK_CUR);
			sector = 0;
		}
	}
	*/
	lseek64(fd,sector,SEEK_SET);
	if(cmd)
	{
		size=write(fd,argv[3],strlen(argv[3]));
		if(size < 0)
		{
			printf("wtrite: ERROR!");
			close(fd);
			return FALSE;	
		}
	}
	else
	{
		memset(buf,0,sizeof(buf));
		size=read(fd,buf,128);
		if(size < 0)
		{
			printf("read: ERROR!");
			close(fd);
			return FALSE;
		}
		printf("Read OK\n");  
		printf_hex_data(buf,128);
	    printf("STRING=%s",buf);
	}
	//len = strlen(buf_wr);
	//buf_wr[10] = '\0';
	//if((size = write( fd, buf_wr, len)) < 0)
	//perror("write:");
	//exit(1);
	close(fd);
    ////////////////////////////////////////
    return FALSE;
}