@@ -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