@@ -158,24 +158,29 @@ class Adns9800 : public adns9800, public modm::SpiDevice<SpiMaster> {
158
158
// / @endcond
159
159
};
160
160
161
- union VerificationResult {
162
- uint8_t value;
163
- struct {
164
- bool ProductId: 1 ;
165
- bool ProductIdInverse: 1 ;
166
- bool RevisionId: 1 ;
167
- };
168
- static constexpr uint8_t Ok = 0b111 ;
161
+ struct Verification {
162
+ bool ProductId: 1 ;
163
+ bool ProductIdInverse: 1 ;
164
+ bool RevisionId: 1 ;
165
+
166
+ // @todo allFine() maybe a better name
167
+ // bool allFine() const {
168
+ operator bool () const {
169
+ return ProductId and ProductIdInverse and RevisionId;
170
+ }
169
171
};
170
172
171
- void
173
+ Verification
172
174
initialize () {
173
175
powerUp ();
174
- const VerificationResult result = verifyIdentity ();
175
- if (result.value == VerificationResult::Ok) {
176
+
177
+ const Verification verification = verify ();
178
+ if (verification) {
176
179
writeFirmware ();
177
180
laserEnable ();
178
181
}
182
+
183
+ return verification;
179
184
}
180
185
181
186
// / @brief Reset the device's internal state after power-loss or user invoked shutdown().
@@ -201,12 +206,12 @@ class Adns9800 : public adns9800, public modm::SpiDevice<SpiMaster> {
201
206
/* *
202
207
* @brief Verify presence of the device by validating various id registers.
203
208
*/
204
- VerificationResult
205
- verifyIdentity () {
206
- return VerificationResult {
207
- ProductId: readRegister (Register::Product_ID) == uint8_t (0x33 ),
208
- ProductIdInverse: readRegister (Register::Inverse_Product_ID) == uint8_t (~0x33 ),
209
- RevisionId: readRegister (Register::Revision_ID) == uint8_t (0x03 )
209
+ Verification
210
+ verify () {
211
+ return {
212
+ ProductId: readRegister (Register::Product_ID) == static_cast < uint8_t > (0x33 ),
213
+ ProductIdInverse: readRegister (Register::Inverse_Product_ID) == static_cast < uint8_t > (~0x33 ),
214
+ RevisionId: readRegister (Register::Revision_ID) == static_cast < uint8_t > (0x03 )
210
215
};
211
216
}
212
217
0 commit comments