diff --git a/src/configuration.h b/src/configuration.h
index be483b924..cbadedf3f 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -176,7 +176,8 @@ along with this program. If not, see .
#define SSD1306_ADDRESS 0x3D
#define USE_SH1106
#else
-#define SSD1306_ADDRESS 0x3C
+#define SSD1306_ADDRESS_L 0x3C //Addr = 0
+#define SSD1306_ADDRESS_H 0x3D //Addr = 1
#endif
#define ST7567_ADDRESS 0x3F
@@ -205,7 +206,7 @@ along with this program. If not, see .
#define INA_ADDR_WAVESHARE_UPS 0x43
#define INA3221_ADDR 0x42
#define MAX1704X_ADDR 0x36
-#define QMC6310_ADDR 0x1C
+#define QMC6310U_ADDR 0x1C
#define QMI8658_ADDR 0x6B
#define QMC5883L_ADDR 0x0D
#define HMC5883L_ADDR 0x1E
diff --git a/src/detect/ScanI2C.h b/src/detect/ScanI2C.h
index ceb894304..dffcd8fb6 100644
--- a/src/detect/ScanI2C.h
+++ b/src/detect/ScanI2C.h
@@ -35,7 +35,8 @@ class ScanI2C
SHT4X,
SHTC3,
LPS22HB,
- QMC6310,
+ QMC6310U,
+ QMC6310N,
QMI8658,
QMC5883L,
HMC5883L,
diff --git a/src/detect/ScanI2CTwoWire.cpp b/src/detect/ScanI2CTwoWire.cpp
index a6579902a..7a263cd52 100644
--- a/src/detect/ScanI2CTwoWire.cpp
+++ b/src/detect/ScanI2CTwoWire.cpp
@@ -63,6 +63,10 @@ ScanI2C::DeviceType ScanI2CTwoWire::probeOLED(ScanI2C::DeviceAddress addr) const
if (i2cBus->available()) {
r = i2cBus->read();
}
+ if(r == 0x80){
+ LOG_INFO("QMC6310N found at address 0x%02X", addr.address);
+ return ScanI2C::DeviceType::QMC6310N;
+ }
r &= 0x0f;
if (r == 0x08 || r == 0x00) {
@@ -175,7 +179,8 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize)
type = NONE;
if (err == 0) {
switch (addr.address) {
- case SSD1306_ADDRESS:
+ case SSD1306_ADDRESS_H:
+ case SSD1306_ADDRESS_L:
type = probeOLED(addr);
break;
@@ -411,7 +416,7 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize)
case LPS22HB_ADDR_ALT:
SCAN_SIMPLE_CASE(LPS22HB_ADDR, LPS22HB, "LPS22HB", (uint8_t)addr.address)
- SCAN_SIMPLE_CASE(QMC6310_ADDR, QMC6310, "QMC6310", (uint8_t)addr.address)
+ SCAN_SIMPLE_CASE(QMC6310U_ADDR, QMC6310U, "QMC6310U", (uint8_t)addr.address)
case QMI8658_ADDR:
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x0A), 1); // get ID
diff --git a/src/main.cpp b/src/main.cpp
index cdaf1ce37..2961f6041 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -759,7 +759,9 @@ void setup()
scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::INA219, meshtastic_TelemetrySensorType_INA219);
scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::INA3221, meshtastic_TelemetrySensorType_INA3221);
scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::MAX17048, meshtastic_TelemetrySensorType_MAX17048);
- scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::QMC6310, meshtastic_TelemetrySensorType_QMC6310);
+ scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::QMC6310U, meshtastic_TelemetrySensorType_QMC6310);
+ //TODO: Types need to be added meshtastic_TelemetrySensorType_QMC6310N
+ // scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::QMC6310N, meshtastic_TelemetrySensorType_QMC6310N);
scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::QMI8658, meshtastic_TelemetrySensorType_QMI8658);
scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::QMC5883L, meshtastic_TelemetrySensorType_QMC5883L);
scannerToSensorsMap(i2cScanner, ScanI2C::DeviceType::HMC5883L, meshtastic_TelemetrySensorType_QMC5883L);