gangslab
6/18/2015 - 11:24 AM

read riding stream binary data

read riding stream binary data

<?

	error_reporting(E_ALL);
	ini_set("display_errors", 1);	

/*
	$data = file_get_contents("php://input");
	
	print $data;	
*/
	
	$stream = fopen('php://input', 'rb');
	
	$header_format = 
			'N2magic_number/' .
			'N2riding_id/' .
			'N2array_count/' .
			'n1is_time/' .
			'n1is_latlon/' .
			'n1is_distance/' .
			'n1is_elevation/' .
			'n1is_cadence/' .
			'n1is_heart/';
			
	$header = unpack($header_format, fread($stream, 36));
	$header['magic_number'] = $header['magic_number1'] << 32 | $header['magic_number2'];
	$header['riding_id'] = $header['riding_id1'] << 32 | $header['riding_id2'];
	$header['array_count'] = $header['array_count1'] << 32 | $header['array_count2'];
	
	$array_count = $header['array_count'];
	
//	print_r($header);

	
	$time_streams = array();
	
	if ($header['is_time'] > 0)
	{
		for ($i = 0; $i < $array_count; $i++)
		{
			$value = unpack("N2value/", fread($stream, 8));
			$time_streams[] = $value['value1'] << 32 | $value['value2'];
		}
		
	}
	
	$result_stream['time'] = $time_streams;

	$latlon_streams = array();
	
	if ($header['is_latlon'] > 0)
	{
		for ($i = 0; $i < $array_count; $i++)
		{
/*
			$value = unpack("d2value/", fread($stream, 8));
			$latlon["lat"] = $value['value1'] << 32 | $value['value2'];
			
			$value = unpack("d2value/", fread($stream, 8));
			$latlon["lon"] = $value['value1'] << 32 | $value['value2'];
*/
			$latlon["lat"] = current(unpack("d", strrev(fread($stream, 8))));
			$latlon["lon"] = current(unpack("d", strrev(fread($stream, 8))));
			$latlon_streams[] = $latlon;
			
		}
		
	}
	
	$result_stream['latlon'] = $latlon_streams;

	$distance_streams = array();
	
	if ($header['is_distance'] > 0)
	{
		for ($i = 0; $i < $array_count; $i++)
		{
			$distance_streams[] = current(unpack("d", strrev(fread($stream, 8))));
		}
		
	}
	
	$result_stream['distance'] = $distance_streams;

	$elevation_streams = array();
	
	if ($header['is_elevation'] > 0)
	{
		for ($i = 0; $i < $array_count; $i++)
		{
			$elevation_streams[] = current(unpack("f", strrev(fread($stream, 4))));
		}
		
	}
	
	$result_stream['elevation'] = $elevation_streams;

	$cadence_streams = array();
	
	if ($header['is_cadence'] > 0)
	{
		for ($i = 0; $i < $array_count; $i++)
		{
			$cadence_streams[] = current(unpack("f", strrev(fread($stream, 4))));
		}
		
	}
	
	$result_stream['cadence'] = $cadence_streams;

	$heart_streams = array();
	
	if ($header['is_heart'] > 0)
	{
		for ($i = 0; $i < $array_count; $i++)
		{
			$heart_streams[] = current(unpack("i", strrev(fread($stream, 4))));
		}
		
	}
	
	$result_stream['heart'] = $heart_streams;
	
	$result['magic_number'] = $header['magic_number'];
	$result['riding_id'] = $header['riding_id'];
	$result['array_count'] = $header['array_count'];
	
	$result['is_time'] = $header['is_time'];
	$result['is_latlon'] = $header['is_latlon'];
	$result['is_distance'] = $header['is_distance'];
	$result['is_elevation'] = $header['is_elevation'];
	$result['is_cadence'] = $header['is_cadence'];
	$result['is_heart'] = $header['is_heart'];	
	
	$result['stream'] = $result_stream;
	
//	print_r($result);
	print json_encode($result);
	
?>