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);
?>