Skip to content

Commit 874e531

Browse files
committed
fix: IMUキャリブレーション値をユーザーと工場出荷時のどちらも読み出すように修正
1 parent 2a56eba commit 874e531

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

Packages/com.tuatmcc.unityjoycon/Runtime/Conection.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,9 @@ private async ValueTask<Calibration> ReadCalibrationAsync(CancellationToken ct)
147147
var stickCalibration = await ReadStickCalibrationAsync(ct);
148148
var stickParameters = await ReadSpiAsync(SpiFlashAddresses.GetStickParametersAddress(_side), 18, ct);
149149

150-
// こちらもユーザーと工場出荷時の両方が存在するが、とりあえずユーザーデータのみを読むようにする。
151-
var imuCalibration = await ReadSpiAsync(SpiFlashAddresses.ImuUserCalibration, 24, ct);
150+
var imuCalibration = await ReadImuCalibrationAsync(ct);
152151
var imuParameters = await ReadSpiAsync(SpiFlashAddresses.ImuParameters, 6, ct);
153-
152+
154153
return CalibrationParser.Parse(stickCalibration, stickParameters, imuCalibration, imuParameters,
155154
_side);
156155
}
@@ -163,6 +162,15 @@ private async ValueTask<byte[]> ReadStickCalibrationAsync(CancellationToken ct)
163162

164163
return await ReadSpiAsync(SpiFlashAddresses.GetStickFactoryCalibrationAddress(_side), 9, ct);
165164
}
165+
166+
private async ValueTask<byte[]> ReadImuCalibrationAsync(CancellationToken ct)
167+
{
168+
var userData = await ReadSpiAsync(SpiFlashAddresses.ImuUserCalibration, 24, ct);
169+
var hasUserData = userData.Any(b => b != 0xff);
170+
if (hasUserData) return userData;
171+
172+
return await ReadSpiAsync(SpiFlashAddresses.ImuFactoryCalibration, 24, ct);
173+
}
166174

167175
private async ValueTask<byte[]> ReadSpiAsync(uint address, byte length, CancellationToken ct)
168176
{

0 commit comments

Comments
 (0)