我正在开展一个项目,我需要来自Band的传感器数据读数和连接的智能手机进行同步。因此,我需要能够找出两个设备之间的时钟差异。事件包含一个时间戳,我可以用它来进行同步,但这需要一种方法可靠地强制Band根据请求发送传感器直接。
t1
s1
t2
收到回复。现在,智能手机可以近似连接延迟d = (t2 - t1)/2
,并可以将其本地时间设置为s1 + d
,以便与乐队大致同步。如果Band在合理的时间内响应,该协议只能正常工作。
getSensorManager().registerXXXEventListener()
是否有这样的行为,或者是否有可能延迟响应(f.e。以节省能量)?如果它可能引入延迟,还有其他方法来获得乐队的当前时间吗?
答案 0 :(得分:1)
似乎有自动同步。如果您将频段的时钟设置为其他时间并打印SDK的时间戳,您会注意到它对应于电话时间,而不是频段时间。 所以我猜电话和乐队之间不需要时间同步。
答案 1 :(得分:0)
抓住传感器并挂钩相应的时间戳?不要带乐队,但我相信ISensorReading :: Timestamp来自设备?
按照定义,退出对象浏览器......
如果有效,请告诉我们......
namespace Microsoft.Band.Sensors
{
public class BandSensorReadingEventArgs<T> : EventArgs where T : IBandSensorReading
{
public BandSensorReadingEventArgs(T reading);
public T SensorReading { get; }
}
}
System.DateTimeOffset 时间戳 {get; Microsoft.Band.Sensors.IBandSensorReading
的成员 private async void HeartRate_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandHeartRateReading> e)
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
TextBlock_HeartBeatStatus.Text = e.SensorReading.HeartRate.ToString();
DateTimeOffset timestamp = e.SensorReading.Timestamp;
});
}
private async void Accelerometer_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandAccelerometerReading> e)
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
string status =
$"x:{e.SensorReading.AccelerationX.ToString("F1")} y:{e.SensorReading.AccelerationY.ToString("F1")} z:{e.SensorReading.AccelerationZ.ToString("F1")}";
TextBlock_AccelStatus.Text = status;
});
DateTimeOffset timestamp = e.SensorReading.Timestamp();
}