From 89e378bbf737845ab608a20c813b58a082ab79a7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 16:39:23 +0000 Subject: [PATCH 1/7] Use I2CHandle::ReadDataAtAddress for reading registers in mpr121.h --- src/dev/mpr121.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index 1a20868ca..df58cd535 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -73,6 +73,11 @@ class Mpr121I2CTransport != i2c_.ReceiveBlocking(config_.dev_addr, data, size, 10); } + bool ReadDataAtAddress(uint16_t address, uint8_t *data, uint16_t size) { + return I2CHandle::Result::OK + != i2c_.ReadDataAtAddress(config_.dev_addr, address, 1, data, size, 10); + } + private: I2CHandle i2c_; Config config_; @@ -231,8 +236,7 @@ class Mpr121 uint8_t ReadRegister8(uint8_t reg) { uint8_t buff; - SetTransportErr(transport_.Write(®, 1)); - SetTransportErr(transport_.Read(&buff, 1)); + SetTransportErr(transport_.ReadDataAtAddress(reg, &buff, 1)); return buff; } @@ -244,8 +248,7 @@ class Mpr121 uint16_t ReadRegister16(uint8_t reg) { uint16_t buff; - SetTransportErr(transport_.Write(®, 1)); - SetTransportErr(transport_.Read((uint8_t *)&buff, 2)); + SetTransportErr(transport_.ReadDataAtAddress(reg, (uint8_t *)(&buff), 2)); return buff; } From 1311501ff54ee402126516967423d314a3e03b74 Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 16:51:06 +0000 Subject: [PATCH 2/7] Formatting --- src/dev/mpr121.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index df58cd535..eb11de666 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -75,7 +75,7 @@ class Mpr121I2CTransport bool ReadDataAtAddress(uint16_t address, uint8_t *data, uint16_t size) { return I2CHandle::Result::OK - != i2c_.ReadDataAtAddress(config_.dev_addr, address, 1, data, size, 10); + != i2c_.ReadDataAtAddress(config_.dev_addr, address, 1, data, size, 10); } private: From 0393080d77b1fcb0c55e2ff35a0a3d77283c8808 Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 17:07:00 +0000 Subject: [PATCH 3/7] Formatting --- src/dev/mpr121.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index eb11de666..28d1a9f08 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -73,9 +73,11 @@ class Mpr121I2CTransport != i2c_.ReceiveBlocking(config_.dev_addr, data, size, 10); } - bool ReadDataAtAddress(uint16_t address, uint8_t *data, uint16_t size) { + bool ReadDataAtAddress(uint16_t address, uint8_t *data, uint16_t size) + { return I2CHandle::Result::OK - != i2c_.ReadDataAtAddress(config_.dev_addr, address, 1, data, size, 10); + != i2c_.ReadDataAtAddress( + config_.dev_addr, address, 1, data, size, 10); } private: @@ -248,7 +250,8 @@ class Mpr121 uint16_t ReadRegister16(uint8_t reg) { uint16_t buff; - SetTransportErr(transport_.ReadDataAtAddress(reg, (uint8_t *)(&buff), 2)); + SetTransportErr( + transport_.ReadDataAtAddress(reg, (uint8_t *)(&buff), 2)); return buff; } From ce584a834580d808b24c5b1a3f3fa1a63c9c1ea6 Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 18:05:09 +0000 Subject: [PATCH 4/7] Update comments --- src/dev/mpr121.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index 28d1a9f08..d222c5701 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -131,11 +131,9 @@ class Mpr121 WriteRegister(MPR121_ECR, 0x0); - // this doesn't work for some reason... - // uint8_t c = ReadRegister8(MPR121_CONFIG2); + uint8_t c = ReadRegister8(MPR121_CONFIG2); - // if(c != 0x24) - // return ERR; + if (c != 0x24) return ERR; SetThresholds(config_.touch_threshold, config_.release_threshold); WriteRegister(MPR121_MHDR, 0x01); @@ -168,7 +166,7 @@ class Mpr121 // enable X electrodes and start MPR121 uint8_t ECR_SETTING = 0x80 - + 12; // 5 bits for baseline tracking & proximity disabled + X + + 12; // enable baseline tracking (10) & disable proximity (00) + X // amount of electrodes running (12) WriteRegister(MPR121_ECR, ECR_SETTING); // start with above ECR setting From 793102d9b237abbe4886ff92136293354da66568 Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 20:54:32 +0000 Subject: [PATCH 5/7] Fix WriteRegister --- src/dev/mpr121.h | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index d222c5701..4bd05832e 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -60,23 +60,18 @@ class Mpr121I2CTransport } /** \return Did the transaction error? i.e. Return true if error, false if ok */ - bool Write(uint8_t *data, uint16_t size) + bool ReadDataAtAddress(uint8_t address, uint8_t *data, uint16_t size) { return I2CHandle::Result::OK - != i2c_.TransmitBlocking(config_.dev_addr, data, size, 10); + != i2c_.ReadDataAtAddress( + config_.dev_addr, address, 1, data, size, 10); } /** \return Did the transaction error? i.e. Return true if error, false if ok */ - bool Read(uint8_t *data, uint16_t size) + bool WriteDataAtAddress(uint8_t address, uint8_t *data, uint16_t size) { return I2CHandle::Result::OK - != i2c_.ReceiveBlocking(config_.dev_addr, data, size, 10); - } - - bool ReadDataAtAddress(uint16_t address, uint8_t *data, uint16_t size) - { - return I2CHandle::Result::OK - != i2c_.ReadDataAtAddress( + != i2c_.WriteDataAtAddress( config_.dev_addr, address, 1, data, size, 10); } @@ -262,36 +257,27 @@ class Mpr121 { // MPR121 must be put in Stop Mode to write to most registers bool stop_required = true; - - // first get the current set value of the MPR121_ECR register - uint8_t ecr_reg = MPR121_ECR; - uint8_t buff[2] = {ecr_reg, 0x00}; - - SetTransportErr(transport_.Write(buff, 1)); - - uint8_t ecr_backup; - SetTransportErr(transport_.Read(&ecr_backup, 1)); if((reg == MPR121_ECR) || ((0x73 <= reg) && (reg <= 0x7A))) { stop_required = false; } + uint8_t ecr_backup; + if(stop_required) { + ecr_backup = ReadRegister8(MPR121_ECR); + uint8_t zero = 0x00; // clear this register to set stop mode - SetTransportErr(transport_.Write(buff, 2)); + SetTransportErr(transport_.WriteDataAtAddress(MPR121_ECR, &zero, 1)); } - buff[0] = reg; - buff[1] = value; - SetTransportErr(transport_.Write(buff, 2)); + SetTransportErr(transport_.WriteDataAtAddress(reg, &value, 1)); if(stop_required) { // write back the previous set ECR settings - buff[0] = ecr_reg; - buff[1] = ecr_backup; - SetTransportErr(transport_.Write(buff, 2)); + SetTransportErr(transport_.WriteDataAtAddress(MPR121_ECR, &ecr_backup, 1)); } } From a9be4e83d6e29430674e98206287823ed951f6fa Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 22:44:20 +0000 Subject: [PATCH 6/7] Formatting --- src/dev/mpr121.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index 4bd05832e..20f038523 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -128,7 +128,8 @@ class Mpr121 uint8_t c = ReadRegister8(MPR121_CONFIG2); - if (c != 0x24) return ERR; + if (c != 0x24) + return ERR; SetThresholds(config_.touch_threshold, config_.release_threshold); WriteRegister(MPR121_MHDR, 0x01); From 9b7812da1f7d60d67bc2cc04e76c933c6141d48c Mon Sep 17 00:00:00 2001 From: Svyatoslav Usachev Date: Thu, 19 Feb 2026 22:47:20 +0000 Subject: [PATCH 7/7] Formatting --- src/dev/mpr121.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/dev/mpr121.h b/src/dev/mpr121.h index 20f038523..a29809505 100644 --- a/src/dev/mpr121.h +++ b/src/dev/mpr121.h @@ -128,7 +128,7 @@ class Mpr121 uint8_t c = ReadRegister8(MPR121_CONFIG2); - if (c != 0x24) + if(c != 0x24) return ERR; SetThresholds(config_.touch_threshold, config_.release_threshold); @@ -267,10 +267,11 @@ class Mpr121 if(stop_required) { - ecr_backup = ReadRegister8(MPR121_ECR); + ecr_backup = ReadRegister8(MPR121_ECR); uint8_t zero = 0x00; // clear this register to set stop mode - SetTransportErr(transport_.WriteDataAtAddress(MPR121_ECR, &zero, 1)); + SetTransportErr( + transport_.WriteDataAtAddress(MPR121_ECR, &zero, 1)); } SetTransportErr(transport_.WriteDataAtAddress(reg, &value, 1)); @@ -278,7 +279,8 @@ class Mpr121 if(stop_required) { // write back the previous set ECR settings - SetTransportErr(transport_.WriteDataAtAddress(MPR121_ECR, &ecr_backup, 1)); + SetTransportErr( + transport_.WriteDataAtAddress(MPR121_ECR, &ecr_backup, 1)); } }