Skip to content

Commit

Permalink
replace modm_asserts with bitfield return
Browse files Browse the repository at this point in the history
  • Loading branch information
TomSaw committed Jul 18, 2024
1 parent c5d44ee commit 6dffb85
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions src/modm/driver/motion/adns9800.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ struct adns9800 {
// Time periods as ticks of Adns9800 running at 50MHz
using PeriodType = uint16_t;
using Duration = std::chrono::duration<PeriodType, std::ratio<1, 50_MHz>>;

// forward declarations
struct Data;
struct Data_Fails;
Expand Down Expand Up @@ -153,10 +153,21 @@ class Adns9800 : public adns9800, public modm::SpiDevice<SpiMaster> {
/// @endcond
};

union VerificationResult {
uint8_t value;
struct {
bool ProductId: 1;
bool ProductIdInverse: 1;
bool RevisionId: 1;
};
static constexpr uint8_t Ok = 0b111;
};

void
initialize() {
powerUp();
if(verifyIdentity()) {
const VerificationResult result = verifyIdentity();
if(result.value == VerificationResult::Ok) {
writeFirmware();
laserEnable();
}
Expand Down Expand Up @@ -185,20 +196,13 @@ class Adns9800 : public adns9800, public modm::SpiDevice<SpiMaster> {
/**
* @brief Verify presence of the device by validating various id registers.
*/
bool
VerificationResult
verifyIdentity() {
bool isValid = true;

const uint8_t product_id = readRegister(Register::Product_ID);
isValid &= modm_assert_continue_fail(product_id == uint8_t(0x33), "adns9800.id", "Unexpected Product Id", product_id);

const uint8_t inverse_product_id = readRegister(Register::Inverse_Product_ID);
isValid &= modm_assert_continue_fail(inverse_product_id == uint8_t(~0x33), "adns9800.iid", "Unexpected Inverse Product Id", inverse_product_id);

const uint8_t revision_id = readRegister(Register::Revision_ID);
isValid &= modm_assert_continue_fail(revision_id == uint8_t(0x03), "adns9800.rid", "Unexpected Revision Id", revision_id);

return isValid;
return VerificationResult{
ProductId: readRegister(Register::Product_ID) == uint8_t(0x33),
ProductIdInverse: readRegister(Register::Inverse_Product_ID) == uint8_t(~0x33),
RevisionId: readRegister(Register::Revision_ID) == uint8_t(0x03)
};
}

void
Expand Down

0 comments on commit 6dffb85

Please sign in to comment.