From 80d96b08cfb595cb7247e01194d3730c7f3fe988 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 5 Aug 2017 12:02:14 -0700 Subject: [PATCH 01/15] CPLD: Temporarily remove HackRF bitstream check UI. It was poorly implemented and was confusing the hell out of people when their CPLD was showing "BAD", even though it was fine... --- firmware/application/ui_setup.cpp | 7 ++++--- firmware/application/ui_setup.hpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/firmware/application/ui_setup.cpp b/firmware/application/ui_setup.cpp index d0a8650a..1bd58857 100644 --- a/firmware/application/ui_setup.cpp +++ b/firmware/application/ui_setup.cpp @@ -175,18 +175,19 @@ AboutView::AboutView(NavigationView& nav) { add_children({ &text_title, &text_firmware, - &text_cpld_hackrf, - &text_cpld_hackrf_status, + // &text_cpld_hackrf, + // &text_cpld_hackrf_status, &button_ok, }); button_ok.on_select = [&nav](Button&){ nav.pop(); }; - +/* if( hackrf::cpld::verify_eeprom() ) { text_cpld_hackrf_status.set(" OK"); } else { text_cpld_hackrf_status.set("BAD"); } +*/ } void AboutView::focus() { diff --git a/firmware/application/ui_setup.hpp b/firmware/application/ui_setup.hpp index d65592c4..580a437b 100644 --- a/firmware/application/ui_setup.hpp +++ b/firmware/application/ui_setup.hpp @@ -233,7 +233,7 @@ private: { 0, 128, 240, 16 }, "Git Commit Hash " GIT_REVISION, }; - +/* Text text_cpld_hackrf { { 0, 144, 11*8, 16 }, "HackRF CPLD", @@ -243,7 +243,7 @@ private: { 240 - 3*8, 144, 3*8, 16 }, "???" }; - +*/ Button button_ok { { 72, 192, 96, 24 }, "OK" From 49252dc1bc20ba8ed51b19365da5f0598a0d6f57 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 11:16:57 -0700 Subject: [PATCH 02/15] LPC43xx: Add CREG6 struct definition. Add I2S CREG6 configuration. --- firmware/application/audio.cpp | 2 ++ .../os/hal/platforms/LPC43xx/lpc43xx.inc | 15 ++++++++++++++- firmware/common/i2s.hpp | 18 ++++++------------ 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/firmware/application/audio.cpp b/firmware/application/audio.cpp index 67dfee76..19022434 100644 --- a/firmware/application/audio.cpp +++ b/firmware/application/audio.cpp @@ -55,6 +55,7 @@ constexpr i2s::ConfigTX i2s0_config_tx { .four_pin = 0, .mclk_out_en = 1, }, + .sck_in_sel = 1, }; constexpr i2s::ConfigRX i2s0_config_rx { @@ -78,6 +79,7 @@ constexpr i2s::ConfigRX i2s0_config_rx { .four_pin = 1, .mclk_out_en = 0, }, + .sck_in_sel = 0, }; constexpr i2s::ConfigDMA i2s0_config_dma { diff --git a/firmware/chibios-portapack/os/hal/platforms/LPC43xx/lpc43xx.inc b/firmware/chibios-portapack/os/hal/platforms/LPC43xx/lpc43xx.inc index fb09b782..94ea0812 100644 --- a/firmware/chibios-portapack/os/hal/platforms/LPC43xx/lpc43xx.inc +++ b/firmware/chibios-portapack/os/hal/platforms/LPC43xx/lpc43xx.inc @@ -41,6 +41,19 @@ extern "C" { * @brief Product name title=UM10503 Chapter title=LPC43xx Configuration Registers (CREG) Modification date=1/28/2014 Major revision=1 Minor revision=8 */ +typedef struct { + __IO uint32_t ETHMODE : 3; + uint32_t RESERVED0 : 1; + __IO uint32_t CTOUTCTRL : 1; + uint32_t RESERVED1 : 7; + __IO uint32_t I2S0_TX_SCK_IN_SEL : 1; + __IO uint32_t I2S0_RX_SCK_IN_SEL : 1; + __IO uint32_t I2S1_TX_SCK_IN_SEL : 1; + __IO uint32_t I2S1_RX_SCK_IN_SEL : 1; + __IO uint32_t EMC_CLK_SEL : 1; + uint32_t RESERVED2 : 15; +} LPC_CREG_CREG6_Type; + typedef struct { uint32_t RESERVED0; __IO uint32_t CREG0; @@ -52,7 +65,7 @@ typedef struct { __IO uint32_t FLASHCFGA; __IO uint32_t FLASHCFGB; __IO uint32_t ETBCFG; - __IO uint32_t CREG6; + LPC_CREG_CREG6_Type CREG6; __IO uint32_t M4TXEVENT; uint32_t RESERVED3[51]; __I uint32_t CHIPID; diff --git a/firmware/common/i2s.hpp b/firmware/common/i2s.hpp index 0ddaa966..d715146d 100644 --- a/firmware/common/i2s.hpp +++ b/firmware/common/i2s.hpp @@ -138,6 +138,7 @@ struct ConfigTX { uint32_t txrate; uint32_t txbitrate; uint32_t txmode; + uint32_t sck_in_sel; }; struct ConfigRX { @@ -145,6 +146,7 @@ struct ConfigRX { uint32_t rxrate; uint32_t rxbitrate; uint32_t rxmode; + uint32_t sck_in_sel; }; struct ConfigDMA { @@ -161,21 +163,13 @@ public: ) { reset(); - /* I2S operates in master mode, use PLL0AUDIO as MCLK source for TX. */ - /* NOTE: Documentation of CREG6 is quite confusing. Refer to "I2S clocking and - * pin connections" and other I2S diagrams for more clarity. - */ if( &p() == LPC_I2S0 ) { - LPC_CREG->CREG6 |= - (1U << 12) - | (1U << 13) - ; + LPC_CREG->CREG6.I2S0_TX_SCK_IN_SEL = config_tx.sck_in_sel; + LPC_CREG->CREG6.I2S0_RX_SCK_IN_SEL = config_rx.sck_in_sel; } if( &p() == LPC_I2S1 ) { - LPC_CREG->CREG6 |= - (1U << 14) - | (1U << 15) - ; + LPC_CREG->CREG6.I2S1_TX_SCK_IN_SEL = config_tx.sck_in_sel; + LPC_CREG->CREG6.I2S1_RX_SCK_IN_SEL = config_rx.sck_in_sel; } p().DAO = config_tx.dao; From e59e983e2945630d706cef45406b75d49692beda Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 11:17:38 -0700 Subject: [PATCH 03/15] I2S: Rename configuration structs to reflect interface modes. --- firmware/application/audio.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/application/audio.cpp b/firmware/application/audio.cpp index 19022434..af9e5392 100644 --- a/firmware/application/audio.cpp +++ b/firmware/application/audio.cpp @@ -33,7 +33,7 @@ namespace audio { namespace { -constexpr i2s::ConfigTX i2s0_config_tx { +constexpr i2s::ConfigTX i2s0_config_tx_master_base_clk { .dao = i2s::DAO { .wordwidth = i2s::WordWidth::Bits16, .mono = 0, @@ -58,7 +58,7 @@ constexpr i2s::ConfigTX i2s0_config_tx { .sck_in_sel = 1, }; -constexpr i2s::ConfigRX i2s0_config_rx { +constexpr i2s::ConfigRX i2s0_config_rx_four_wire { .dai = i2s::DAI { .wordwidth = i2s::WordWidth::Bits16, .mono = 0, @@ -178,8 +178,8 @@ void init(audio::Codec* const codec) { audio_codec->init(); i2s::i2s0::configure( - i2s0_config_tx, - i2s0_config_rx, + i2s0_config_tx_master_base_clk, + i2s0_config_rx_four_wire, i2s0_config_dma ); From f0fb4cb3693f38342b636158b769245bacf53946 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 11:20:51 -0700 Subject: [PATCH 04/15] I2S: Change RXMODE[1:0] to idle bit rate divider. No change in function, but *may* result in tiny reduction in power and noise? Not tested. --- firmware/application/audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/application/audio.cpp b/firmware/application/audio.cpp index af9e5392..c7aaa739 100644 --- a/firmware/application/audio.cpp +++ b/firmware/application/audio.cpp @@ -75,7 +75,7 @@ constexpr i2s::ConfigRX i2s0_config_rx_four_wire { .bitrate = 7, }, .rxmode = i2s::Mode { - .clksel = i2s::ClockSelect::BaseAudioClkOrExternalMCLK, + .clksel = i2s::ClockSelect::FractionalDivider, .four_pin = 1, .mclk_out_en = 0, }, From f0947a491711ec455058cf22531d8c78555f4cbd Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 12:02:38 -0700 Subject: [PATCH 05/15] AK4951: Separate/rename codec interface mode config methods. --- firmware/common/ak4951.cpp | 10 +++++----- firmware/common/ak4951.hpp | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/firmware/common/ak4951.cpp b/firmware/common/ak4951.cpp index 0567bf0b..94f8f430 100644 --- a/firmware/common/ak4951.cpp +++ b/firmware/common/ak4951.cpp @@ -29,7 +29,7 @@ using namespace portapack; namespace asahi_kasei { namespace ak4951 { -void AK4951::configure_digital_interface() { +void AK4951::configure_digital_interface_i2s() { // Configure for external slave mode. map.r.mode_control_1.DIF = 0b11; // I2S compatible map.r.mode_control_1.BCKO = 0; // BICK = 32fs @@ -38,10 +38,9 @@ void AK4951::configure_digital_interface() { map.r.mode_control_2.CM = 0b00; // MCKI = 256fs map.r.mode_control_2.FS = 0b1011; // fs = 48kHz update(Register::ModeControl2); +} - // map.r.mode_control_3.DVOLC = 1; // Control L/R channels with DVL (LchDigitalVolumeControl) - // update(Register::ModeControl3); - +void AK4951::configure_digital_interface_external_slave() { map.r.power_management_2.MS = 0; // Slave mode map.r.power_management_2.PMPLL = 0; // EXT mode update(Register::PowerManagement2); @@ -53,7 +52,8 @@ void AK4951::init() { // Write dummy address to "release" the reset. write(0x00, 0x00); - configure_digital_interface(); + configure_digital_interface_i2s(); + configure_digital_interface_external_slave(); map.r.power_management_1.PMVCM = 1; update(Register::PowerManagement1); diff --git a/firmware/common/ak4951.hpp b/firmware/common/ak4951.hpp index 54115481..a1f4254b 100644 --- a/firmware/common/ak4951.hpp +++ b/firmware/common/ak4951.hpp @@ -864,7 +864,8 @@ private: Line, }; - void configure_digital_interface(); + void configure_digital_interface_i2s(); + void configure_digital_interface_external_slave(); void set_digtal_volume_control(const reg_t value); void set_dac_power(const bool enable); void set_headphone_power(const bool enable); From 6c3a1384fb49f9bca1d702088aeb5a6d45293511 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 12:08:12 -0700 Subject: [PATCH 06/15] WM8731: Extract interface configuration method. --- firmware/common/wm8731.cpp | 22 +++++++++++++--------- firmware/common/wm8731.hpp | 2 ++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/firmware/common/wm8731.cpp b/firmware/common/wm8731.cpp index 68086d66..2965ad26 100644 --- a/firmware/common/wm8731.cpp +++ b/firmware/common/wm8731.cpp @@ -25,6 +25,18 @@ namespace wolfson { namespace wm8731 { +void WM8731::configure_interface_i2s_slave() { + write(DigitalAudioInterfaceFormat { + .format = 2, + .iwl = 0, + .lrp = 0, + .lrswap = 0, + .ms = 0, + .bclkinv = 0, + .reserved0 = 0, + }); +} + void WM8731::init() { reset(); @@ -49,15 +61,7 @@ void WM8731::init() { // .reserved0 = 0, // }); - write(DigitalAudioInterfaceFormat { - .format = 2, - .iwl = 0, - .lrp = 0, - .lrswap = 0, - .ms = 0, - .bclkinv = 0, - .reserved0 = 0, - }); + configure_interface_i2s_slave(); write(DigitalAudioPathControl { .adchpd = 0, diff --git a/firmware/common/wm8731.hpp b/firmware/common/wm8731.hpp index b2c52778..f4128658 100644 --- a/firmware/common/wm8731.hpp +++ b/firmware/common/wm8731.hpp @@ -375,6 +375,8 @@ private: RegisterMap map { default_after_reset }; volume_t headphone_volume = -60.0_dB; + void configure_interface_i2s_slave(); + bool write(const Register reg); bool write(const address_t reg_address, const reg_t value); From ac423ee76949d5e7068c197d8d4c1ca25e3b9412 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 12:43:39 -0700 Subject: [PATCH 07/15] Audio: Add codec config methods for external I2S master. --- firmware/common/ak4951.cpp | 6 ++++++ firmware/common/ak4951.hpp | 1 + firmware/common/wm8731.cpp | 12 ++++++++++++ firmware/common/wm8731.hpp | 1 + 4 files changed, 20 insertions(+) diff --git a/firmware/common/ak4951.cpp b/firmware/common/ak4951.cpp index 94f8f430..3556e0a5 100644 --- a/firmware/common/ak4951.cpp +++ b/firmware/common/ak4951.cpp @@ -46,6 +46,12 @@ void AK4951::configure_digital_interface_external_slave() { update(Register::PowerManagement2); } +void AK4951::configure_digital_interface_external_master() { + map.r.power_management_2.MS = 1; // Master mode + map.r.power_management_2.PMPLL = 0; // EXT mode + update(Register::PowerManagement2); +} + void AK4951::init() { reset(); diff --git a/firmware/common/ak4951.hpp b/firmware/common/ak4951.hpp index a1f4254b..ab7d3b81 100644 --- a/firmware/common/ak4951.hpp +++ b/firmware/common/ak4951.hpp @@ -866,6 +866,7 @@ private: void configure_digital_interface_i2s(); void configure_digital_interface_external_slave(); + void configure_digital_interface_external_master(); void set_digtal_volume_control(const reg_t value); void set_dac_power(const bool enable); void set_headphone_power(const bool enable); diff --git a/firmware/common/wm8731.cpp b/firmware/common/wm8731.cpp index 2965ad26..9bd73977 100644 --- a/firmware/common/wm8731.cpp +++ b/firmware/common/wm8731.cpp @@ -37,6 +37,18 @@ void WM8731::configure_interface_i2s_slave() { }); } +void WM8731::configure_interface_i2s_master() { + write(DigitalAudioInterfaceFormat { + .format = 2, + .iwl = 0, + .lrp = 0, + .lrswap = 0, + .ms = 1, + .bclkinv = 0, + .reserved0 = 0, + }); +} + void WM8731::init() { reset(); diff --git a/firmware/common/wm8731.hpp b/firmware/common/wm8731.hpp index f4128658..0d1b15b7 100644 --- a/firmware/common/wm8731.hpp +++ b/firmware/common/wm8731.hpp @@ -376,6 +376,7 @@ private: volume_t headphone_volume = -60.0_dB; void configure_interface_i2s_slave(); + void configure_interface_i2s_master(); bool write(const Register reg); From 58e0432b56d57611829703a208ce758b14e1f107 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 12:44:27 -0700 Subject: [PATCH 08/15] I2S: Enable input buffer on SCK for LPC43xx slave mode. --- firmware/common/pins.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/common/pins.hpp b/firmware/common/pins.hpp index a2b706ab..a8d611e3 100644 --- a/firmware/common/pins.hpp +++ b/firmware/common/pins.hpp @@ -78,7 +78,7 @@ constexpr Pin pins[] = { [P2_11] = { 2, 11, { .mode=0, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* RX_AMP/P49: U12.V1(I), U14.V3(I) */ [P2_12] = { 2, 12, { .mode=0, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* !RX_AMP_PWR/P52: 10K PU, Q1.G(I), power to U13 (RX amp) */ [P2_13] = { 2, 13, { .mode=0, .pd=0, .pu=0, .fast=0, .input=1, .ifilt=1 } }, /* P2_13: PortaPack P2_13/DIR */ - [P3_0] = { 3, 0, { .mode=2, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* I2S0_TX_SCK: PortaPack I2S0_TX_SCK(I) */ + [P3_0] = { 3, 0, { .mode=2, .pd=0, .pu=1, .fast=0, .input=1, .ifilt=1 } }, /* I2S0_TX_SCK: PortaPack I2S0_TX_SCK(I) */ [P3_1] = { 3, 1, { .mode=0, .pd=0, .pu=1, .fast=0, .input=1, .ifilt=1 } }, /* I2S0_RX_WS: PortaPack I2S0_TX_WS(I). Input enabled to fold back into RX. */ [P3_2] = { 3, 2, { .mode=0, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* I2S0_RX_SDA: PortaPack I2S0_TX_SDA(I) */ //[P3_3] = { 3, 3, { .mode=3, .pd=1, .pu=0, .fast=1, .input=1, .ifilt=0 } }, /* SPIFI_SCK: W25Q80BV.CLK(I), enable input buffer for timing feedback */ From fe7cc1e23f076a2f2730c35718bf744bbc0f573c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 14:23:19 -0700 Subject: [PATCH 09/15] Audio: Add I2S mode for TX external SCK/WS. --- firmware/application/audio.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/firmware/application/audio.cpp b/firmware/application/audio.cpp index c7aaa739..c0c0eaf3 100644 --- a/firmware/application/audio.cpp +++ b/firmware/application/audio.cpp @@ -33,6 +33,8 @@ namespace audio { namespace { +// "Master": I2S peripheral generates SCK/WS, transmits to audio codec. + constexpr i2s::ConfigTX i2s0_config_tx_master_base_clk { .dao = i2s::DAO { .wordwidth = i2s::WordWidth::Bits16, @@ -82,6 +84,33 @@ constexpr i2s::ConfigRX i2s0_config_rx_four_wire { .sck_in_sel = 0, }; +// "Slave": I2S controlled by external SCK/WS, received from audio codec. + +constexpr i2s::ConfigTX i2s0_config_tx_slave_base_clk { + .dao = i2s::DAO { + .wordwidth = i2s::WordWidth::Bits16, + .mono = 0, + .stop = 1, + .reset = 0, + .ws_sel = 1, + .ws_halfperiod = 0x0f, + .mute = 1, + }, + .txrate = i2s::MCLKRate { + .x_divider = 0, + .y_divider = 0, + }, + .txbitrate = i2s::BitRate { + .bitrate = 0, + }, + .txmode = i2s::Mode { + .clksel = i2s::ClockSelect::FractionalDivider, + .four_pin = 0, + .mclk_out_en = 1, + }, + .sck_in_sel = 1, +}; + constexpr i2s::ConfigDMA i2s0_config_dma { .dma1 = i2s::DMA { .rx_enable = 1, From 22fc6756c6039c8f6cf9cbefe374bdb5f0478151 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 14:24:25 -0700 Subject: [PATCH 10/15] Audio: Init codec after initializing I2S interface. --- firmware/application/audio.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/firmware/application/audio.cpp b/firmware/application/audio.cpp index c0c0eaf3..ffbac8b3 100644 --- a/firmware/application/audio.cpp +++ b/firmware/application/audio.cpp @@ -201,17 +201,18 @@ size_t reg_bits() { } /* namespace debug */ void init(audio::Codec* const codec) { - audio_codec = codec; - clock_manager.start_audio_pll(); - audio_codec->init(); + // Configure I2S before activating codec interface. i2s::i2s0::configure( i2s0_config_tx_master_base_clk, i2s0_config_rx_four_wire, i2s0_config_dma ); + audio_codec = codec; + audio_codec->init(); + // Set pin mode, since it's likely GPIO (as left after CPLD JTAG interactions). portapack::pin_i2s0_rx_sda.mode(3); } From 245dad6b0504935417530d023e7759775f99e57d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 6 Aug 2017 22:49:05 -0700 Subject: [PATCH 11/15] Travis: Use GCC ARM Embedded PPA. --- .travis.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 93b3c15b..ba791a7c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,12 +13,10 @@ notifications: # TODO: The "build_number.1" in this URL is almost certainly wrong, but correct value not available from Travis? - "Firmware download : https://portapack-h1-builds.s3.amazonaws.com/%{repository_slug}/%{build_number}/%{build_number}.1/build/firmware/portapack-h1-firmware-%{commit}.tar.bz2" -before_script: - - wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 -O /tmp/gcc-arm.tar.bz2 - - tar -xf /tmp/gcc-arm.tar.bz2 - - export PATH=$PWD/gcc-arm-none-eabi-6-2017-q2-update/bin:$PATH - - export CC="arm-none-eabi-gcc" - - export CXX="arm-none-eabi-g++" +before_install: + - sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa -y + - sudo apt-get update -q + - sudo apt-get install gcc-arm-embedded -y script: # TODO: Introduce top-level Makefile, this is lame. From 74ecff13ad3f2dcf13be5816369969fefbe85d99 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 8 Aug 2017 10:24:49 -0700 Subject: [PATCH 12/15] GCC: Fixed __SIMD32 type punning warnings. With help from https://github.com/ARM-software/CMSIS_5/issues/98 Using void* makes me really queasy though! --- firmware/baseband/channel_stats_collector.hpp | 2 +- firmware/baseband/dsp_decimate.cpp | 20 +++++++++---------- firmware/baseband/dsp_demodulate.cpp | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/firmware/baseband/channel_stats_collector.hpp b/firmware/baseband/channel_stats_collector.hpp index daab0822..783807fd 100644 --- a/firmware/baseband/channel_stats_collector.hpp +++ b/firmware/baseband/channel_stats_collector.hpp @@ -59,7 +59,7 @@ private: const buffer_c16_t& src, uint32_t max_squared ) { - auto src_p = src.p; + void* src_p = src.p; while(src_p < &src.p[src.count]) { const uint32_t sample = *__SIMD32(src_p)++; const uint32_t mag_sq = __SMUAD(sample, sample); diff --git a/firmware/baseband/dsp_decimate.cpp b/firmware/baseband/dsp_decimate.cpp index 93dbc602..12ed083f 100644 --- a/firmware/baseband/dsp_decimate.cpp +++ b/firmware/baseband/dsp_decimate.cpp @@ -566,8 +566,8 @@ buffer_c16_t DecimateBy2CIC3::execute( uint32_t t1 = _iq0; uint32_t t2 = _iq1; const uint32_t taps = 0x00000003; - auto s = src.p; - auto d = dst.p; + void* s = src.p; + void* d = dst.p; const auto d_end = &dst.p[src.count / 2]; while(d < d_end) { uint32_t i = __SXTH(t1, 0); /* 1: I0 */ @@ -665,21 +665,21 @@ buffer_c16_t FIRAndDecimateComplex::execute( const auto output_sampling_rate = src.sampling_rate / decimation_factor_; const size_t output_samples = src.count / decimation_factor_; - sample_t* dst_p = dst.p; + void* dst_p = dst.p; const buffer_c16_t result { dst.p, output_samples, output_sampling_rate }; - const sample_t* src_p = src.p; + const void* src_p = src.p; size_t outer_count = output_samples; while(outer_count > 0) { /* Put new samples into delay buffer */ - auto z_new_p = &samples_[taps_count_ - decimation_factor_]; + void* z_new_p = &samples_[taps_count_ - decimation_factor_]; for(size_t i=0; i 0) { *__SIMD32(t)++ = *__SIMD32(s)++; @@ -754,7 +754,7 @@ buffer_c16_t FIRAndDecimateComplex::execute( shift_count = (taps_count_ - decimation_factor_) % unroll_factor; while(shift_count > 0) { - *(t++) = *(s++); + *__SIMD32(t)++ = *__SIMD32(s)++; shift_count--; } diff --git a/firmware/baseband/dsp_demodulate.cpp b/firmware/baseband/dsp_demodulate.cpp index cf79d0d0..9e96998a 100644 --- a/firmware/baseband/dsp_demodulate.cpp +++ b/firmware/baseband/dsp_demodulate.cpp @@ -34,7 +34,7 @@ buffer_f32_t AM::execute( const buffer_c16_t& src, const buffer_f32_t& dst ) { - const auto src_p = src.p; + const void* src_p = src.p; const auto src_end = &src.p[src.count]; auto dst_p = dst.p; while(src_p < src_end) { @@ -90,7 +90,7 @@ buffer_f32_t FM::execute( ) { auto z = z_; - const auto src_p = src.p; + const void* src_p = src.p; const auto src_end = &src.p[src.count]; auto dst_p = dst.p; while(src_p < src_end) { @@ -113,9 +113,9 @@ buffer_s16_t FM::execute( ) { auto z = z_; - const auto src_p = src.p; + const void* src_p = src.p; const auto src_end = &src.p[src.count]; - auto dst_p = dst.p; + void* dst_p = dst.p; while(src_p < src_end) { const auto s0 = *__SIMD32(src_p)++; const auto s1 = *__SIMD32(src_p)++; From 2033967dc61ddbb0aa68dde699c8b182050560a1 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 8 Aug 2017 10:33:55 -0700 Subject: [PATCH 13/15] RegistersWidget: Fix type warnings. --- firmware/application/ui_debug.cpp | 10 +++++----- firmware/application/ui_debug.hpp | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/firmware/application/ui_debug.cpp b/firmware/application/ui_debug.cpp index 3e439367..621933e5 100644 --- a/firmware/application/ui_debug.cpp +++ b/firmware/application/ui_debug.cpp @@ -173,9 +173,9 @@ void RegistersWidget::paint(Painter& painter) { void RegistersWidget::draw_legend(const Coord left, Painter& painter) { const auto pos = screen_pos(); - for(int i=0; i((i / config.registers_per_row()) * row_height) }; const auto text = to_string_hex(i, config.legend_length()); @@ -193,10 +193,10 @@ void RegistersWidget::draw_values( ) { const auto pos = screen_pos(); - for(int i=0; i(left + config.legend_width() + 8 + (i % config.registers_per_row()) * (config.value_width() + 8)), + static_cast((i / config.registers_per_row()) * row_height) }; const auto value = reader(i); diff --git a/firmware/application/ui_debug.hpp b/firmware/application/ui_debug.hpp index 67251ce3..04b9bbe0 100644 --- a/firmware/application/ui_debug.hpp +++ b/firmware/application/ui_debug.hpp @@ -130,42 +130,42 @@ private: }; struct RegistersWidgetConfig { - int registers_count; - int register_bits; + size_t registers_count; + size_t register_bits; - constexpr int legend_length() const { + constexpr size_t legend_length() const { return (registers_count >= 0x10) ? 2 : 1; } - constexpr int legend_width() const { + constexpr size_t legend_width() const { return legend_length() * 8; } - constexpr int value_length() const { + constexpr size_t value_length() const { return (register_bits + 3) / 4; } - constexpr int value_width() const { + constexpr size_t value_width() const { return value_length() * 8; } - constexpr int registers_per_row() const { + constexpr size_t registers_per_row() const { return (value_length() >= 3) ? 4 : 8; } - constexpr int registers_row_length() const { + constexpr size_t registers_row_length() const { return (registers_per_row() * (value_length() + 1)) - 1; } - constexpr int registers_row_width() const { + constexpr size_t registers_row_width() const { return registers_row_length() * 8; } - constexpr int row_width() const { + constexpr size_t row_width() const { return legend_width() + 8 + registers_row_width(); } - constexpr int rows() const { + constexpr size_t rows() const { return registers_count / registers_per_row(); } }; @@ -185,7 +185,7 @@ private: const RegistersWidgetConfig config; const std::function reader; - static constexpr int row_height = 16; + static constexpr size_t row_height = 16; void draw_legend(const Coord left, Painter& painter); void draw_values(const Coord left, Painter& painter); From 39617f38bf2575c79706ce616e4f2fdfba8fb53d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 8 Aug 2017 10:36:17 -0700 Subject: [PATCH 14/15] TPMS: Remove unused variable. May use again, so commented out. --- firmware/common/tpms_packet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/common/tpms_packet.cpp b/firmware/common/tpms_packet.cpp index 8cca23f2..decc2361 100644 --- a/firmware/common/tpms_packet.cpp +++ b/firmware/common/tpms_packet.cpp @@ -108,7 +108,7 @@ Optional Packet::reading_ook_8k4_schrader() const { * Those bits assumed to be 0b0100", which may not be entirely true... */ constexpr uint8_t first_nibble = 0x4; - const auto system_id = (first_nibble << 20) | reader_.read(0, 20); + // const auto system_id = (first_nibble << 20) | reader_.read(0, 20); const auto id = reader_.read(20, 32); const auto value_0 = reader_.read(52, 8); const auto value_1 = reader_.read(60, 8); From f030b163de99120e0523838cddafa650b46759f1 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 8 Aug 2017 17:58:39 -0700 Subject: [PATCH 15/15] Travis: Remove old CMake package installation. Left over from Ubuntu Precise? --- .travis.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index ba791a7c..a973642f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,14 +27,6 @@ script: - popd addons: - apt: - packages: - - lib32bz2-1.0 - - lib32ncurses5 - - lib32z1 - - cmake - sources: - - kalakris-cmake artifacts: paths: - $(ls build/firmware/portapack-h1-firmware-*.tar.bz2 | tr "\n" ":")