diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-12-22 16:48:24 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-12-22 16:48:24 +1100 |
| commit | 5f0e16e97a773480a3b09c5312c98742e7049f1d (patch) | |
| tree | facd2b44740516cfb317ccdde63ac3dc36151b06 /src/drivers/samd.cpp | |
| parent | d4a0085753b9397ac4a1452520decbeb994bb30c (diff) | |
| download | tangara-fw-5f0e16e97a773480a3b09c5312c98742e7049f1d.tar.gz | |
Support changing the usb msc state
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 |
