diff options
Diffstat (limited to 'src/drivers/samd.cpp')
| -rw-r--r-- | src/drivers/samd.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/drivers/samd.cpp b/src/drivers/samd.cpp index f361513e..cf3b9c18 100644 --- a/src/drivers/samd.cpp +++ b/src/drivers/samd.cpp @@ -143,4 +143,30 @@ auto Samd::PowerDown() -> void { ESP_ERROR_CHECK(transaction.Execute(3)); } +auto Samd::UsbMassStorage(bool en) -> void { + I2CTransaction transaction; + transaction.start() + .write_addr(kAddress, I2C_MASTER_WRITE) + .write_ack(Registers::kUsbControl, en) + .stop(); + ESP_ERROR_CHECK(transaction.Execute(3)); +} + +auto Samd::UsbMassStorage() -> bool { + uint8_t raw_res; + I2CTransaction transaction; + transaction.start() + .write_addr(kAddress, I2C_MASTER_WRITE) + .write_ack(Registers::kUsbControl) + .start() + .write_addr(kAddress, I2C_MASTER_READ) + .read(&raw_res, I2C_MASTER_NACK) + .stop(); + esp_err_t res = transaction.Execute(1); + if (res != ESP_OK) { + return false; + } + return raw_res & 1; +} + } // namespace drivers |
