Skip to content

Commit ce4dd01

Browse files
committed
first wack at removing the use of bitWrite() for setting multiple bits - impossible to follow or debug. Moved to using the already defined bitmaps and some good old fashioned BIT FROBBING - thank you
1 parent dd24079 commit ce4dd01

File tree

2 files changed

+11
-91
lines changed

2 files changed

+11
-91
lines changed

src/SparkFun_TMAG5273_Arduino_Library.cpp

Lines changed: 8 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -557,103 +557,20 @@ int8_t TMAG5273::setOperatingMode(uint8_t opMode)
557557
/// @return Error code (0 is success, negative is failure, positive is warning)
558558
int8_t TMAG5273::setMagneticChannel(uint8_t channelMode)
559559
{
560+
// validate the channelMode input ( valid <= TMAG5273_XZX_ENABLE (0xB) )
561+
if (channelMode > TMAG5273_XZX_ENABLE)
562+
return -1; // invalid channelMode
563+
560564
uint8_t mode = 0;
561565

562566
sfTkError_t rc = _theI2CBus.readRegister(TMAG5273_REG_SENSOR_CONFIG_1, mode);
563567
if (rc != ksfTkErrOk)
564568
return -1;
565569

566-
// If-Else statement for writing values to the register, bit by bit
567-
if (channelMode == 0X0) // 0b0000
568-
{
569-
// Writes 0 to bit 4 of the register
570-
bitWrite(mode, 4, 0);
571-
// Writes 0 to bit 5 of the register
572-
bitWrite(mode, 5, 0);
573-
// Writes 0 to bit 6 of the register
574-
bitWrite(mode, 6, 0);
575-
// Writes 0 to bit 7 of the register
576-
bitWrite(mode, 7, 0);
577-
}
578-
else if (channelMode == 0X1) // 0x0001
579-
{
580-
bitWrite(mode, 4, 1);
581-
bitWrite(mode, 5, 0);
582-
bitWrite(mode, 6, 0);
583-
bitWrite(mode, 7, 0);
584-
}
585-
else if (channelMode == 0X2) // 0x0010
586-
{
587-
bitWrite(mode, 4, 0);
588-
bitWrite(mode, 5, 1);
589-
bitWrite(mode, 6, 0);
590-
bitWrite(mode, 7, 0);
591-
}
592-
else if (channelMode == 0X3) // 0x0011
593-
{
594-
bitWrite(mode, 4, 1);
595-
bitWrite(mode, 5, 1);
596-
bitWrite(mode, 6, 0);
597-
bitWrite(mode, 7, 0);
598-
}
599-
else if (channelMode == 0X4) // 0x0100
600-
{
601-
bitWrite(mode, 4, 0);
602-
bitWrite(mode, 5, 0);
603-
bitWrite(mode, 6, 1);
604-
bitWrite(mode, 7, 0);
605-
}
606-
else if (channelMode == 0X5) // 0x0101
607-
{
608-
bitWrite(mode, 4, 1);
609-
bitWrite(mode, 5, 0);
610-
bitWrite(mode, 6, 1);
611-
bitWrite(mode, 7, 0);
612-
}
613-
else if (channelMode == 0X6) // 0x0110
614-
{
615-
bitWrite(mode, 4, 0);
616-
bitWrite(mode, 5, 1);
617-
bitWrite(mode, 6, 1);
618-
bitWrite(mode, 7, 0);
619-
}
620-
else if (channelMode == 0X7) // 0x0111
621-
{
622-
bitWrite(mode, 4, 1);
623-
bitWrite(mode, 5, 1);
624-
bitWrite(mode, 6, 1);
625-
bitWrite(mode, 7, 0);
626-
}
627-
else if (channelMode == 0X8) // 0x1000
628-
{
629-
bitWrite(mode, 4, 0);
630-
bitWrite(mode, 5, 0);
631-
bitWrite(mode, 6, 0);
632-
bitWrite(mode, 7, 1);
633-
}
634-
else if (channelMode == 0X9) // 0x1001
635-
{
636-
bitWrite(mode, 4, 1);
637-
bitWrite(mode, 5, 0);
638-
bitWrite(mode, 6, 0);
639-
bitWrite(mode, 7, 1);
640-
}
641-
else if (channelMode == 0XA) // 0x1010
642-
{
643-
bitWrite(mode, 4, 0);
644-
bitWrite(mode, 5, 1);
645-
bitWrite(mode, 6, 0);
646-
bitWrite(mode, 7, 1);
647-
}
648-
else if (channelMode == 0XB) // 0x1011
649-
{
650-
bitWrite(mode, 4, 1);
651-
bitWrite(mode, 5, 1);
652-
bitWrite(mode, 6, 0);
653-
bitWrite(mode, 7, 1);
654-
}
655-
else
656-
return -1; // invalid channelMode
570+
mode &= ~TMAG5273_CHANNEL_MODE_BITS; // clear our bits
571+
572+
// Since channelMode passed in is the same as the bit pattern we want, just use that to set the bit
573+
mode |= (channelMode << TMAG5273_CHANNEL_MODE_LSB);
657574

658575
rc = _theI2CBus.writeRegister(TMAG5273_REG_SENSOR_CONFIG_1, mode);
659576
if (rc != ksfTkErrOk)

src/SparkFun_TMAG5273_Arduino_Library_Defs.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ Features as per datasheet
6060
#define TMAG5273_CONTINUOUS_MEASURE_MODE 0X2 // Continous measure mode
6161
#define TMAG5273_WAKE_UP_AND_SLEEP_MODE 0X3 // Wake-up and sleep mode
6262

63+
// Sensor Channel Modes
64+
#define TMAG5273_CHANNEL_MODE_BITS 0xF0 // Bits 7-4
65+
#define TMAG5273_CHANNEL_MODE_LSB 4
6366
#define TMAG5273_CHANNELS_OFF 0X0 // Turn all the magnetic channels off
6467
#define TMAG5273_X_ENABLE 0X1 // X Channel enabled
6568
#define TMAG5273_Y_ENABLE 0X2 // Y Channel enabled

0 commit comments

Comments
 (0)