Enhanced Debug -> Peripherals app to allow direct register modification (#1584)

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Clang

* Clang

* Tweak position of field on screen

* Reverted text on Write button per reviewer feedback
This commit is contained in:
Mark Thompson
2023-11-17 12:10:11 -06:00
committed by GitHub
parent 10f6600f52
commit ef92c5bc0a
15 changed files with 178 additions and 79 deletions

View File

@@ -862,6 +862,10 @@ class AK4951 : public audio::Codec {
return read(reg_address);
}
void reg_write(const size_t reg_address, const uint32_t value) override {
write(reg_address, value);
}
private:
I2C& bus;
const I2C::address_t bus_address;

View File

@@ -345,6 +345,19 @@ struct backup_ram_t {
check_value = compute_check_value();
copy(*this, dst);
}
/* Access functions for DebugPmemView */
uint32_t pmem_data_word(uint32_t index) {
return (index > sizeof(regfile) / sizeof(uint32_t)) ? 0xFFFFFFFF : regfile[index];
}
uint32_t pmem_stored_checksum(void) {
return check_value;
}
uint32_t pmem_calculated_checksum(void) {
return compute_check_value();
}
};
static_assert(sizeof(backup_ram_t) == memory::map::backup_ram.size());
@@ -413,6 +426,18 @@ void persist() {
} /* namespace cache */
uint32_t pmem_data_word(uint32_t index) {
return backup_ram->pmem_data_word(index);
}
uint32_t pmem_stored_checksum(void) {
return backup_ram->pmem_stored_checksum();
}
uint32_t pmem_calculated_checksum(void) {
return backup_ram->pmem_calculated_checksum();
}
rf::Frequency target_frequency() {
rf::tuning_range.reset_if_outside(data->target_frequency, target_frequency_reset_value);
return data->target_frequency;

View File

@@ -281,6 +281,10 @@ bool should_use_sdcard_for_pmem();
int save_persistent_settings_to_file();
int load_persistent_settings_from_file();
uint32_t pmem_data_word(uint32_t index);
uint32_t pmem_stored_checksum(void);
uint32_t pmem_calculated_checksum(void);
size_t data_size();
bool debug_dump();

View File

@@ -116,6 +116,8 @@ bool WM8731::write(const Register reg) {
}
bool WM8731::write(const address_t reg_address, const reg_t value) {
map.w[reg_address] = value; // Save data written in case this fn is called from Debug->Peripherals app
const uint16_t word = (reg_address << 9) | value;
const std::array<uint8_t, 2> values{
static_cast<uint8_t>(word >> 8),
@@ -124,10 +126,15 @@ bool WM8731::write(const address_t reg_address, const reg_t value) {
return bus.transmit(bus_address, values.data(), values.size());
}
/* WM8731 is a write-only device; the read function only returns the value we last wrote */
uint32_t WM8731::reg_read(const size_t reg_address) {
return map.w[reg_address];
}
void WM8731::reg_write(const size_t reg_address, uint32_t value) {
write(reg_address, value);
}
void WM8731::write(const LeftLineIn value) {
map.r.left_line_in = value;
write(Register::LeftLineIn);

View File

@@ -405,6 +405,7 @@ class WM8731 : public audio::Codec {
}
uint32_t reg_read(const size_t reg_address) override;
void reg_write(const size_t reg_address, uint32_t value) override;
private:
I2C& bus;