@@ -158,24 +158,29 @@ class Adns9800 : public adns9800, public modm::SpiDevice<SpiMaster> {
158158 // / @endcond
159159 };
160160
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+ }
169171 };
170172
171- void
173+ Verification
172174 initialize () {
173175 powerUp ();
174- const VerificationResult result = verifyIdentity ();
175- if (result.value == VerificationResult::Ok) {
176+
177+ const Verification verification = verify ();
178+ if (verification) {
176179 writeFirmware ();
177180 laserEnable ();
178181 }
182+
183+ return verification;
179184 }
180185
181186 // / @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> {
201206 /* *
202207 * @brief Verify presence of the device by validating various id registers.
203208 */
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 )
210215 };
211216 }
212217
0 commit comments