diff --git a/.github/workflows/codeql_intech.yml b/.github/workflows/codeql_intech.yml deleted file mode 100644 index 871d217ed..000000000 --- a/.github/workflows/codeql_intech.yml +++ /dev/null @@ -1,120 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - workflow_dispatch: - -jobs: - analyze: - name: Analyze - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners - # Consider using larger runners for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-20.04' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'cpp' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ] - # Use only 'java' to analyze code written in Java, Kotlin or both - # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: recursive - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - queries: security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). - # If this step fails, then you should remove it and run the build manually (see below) - #- name: Autobuild - # uses: github/codeql-action/autobuild@v2 - - # â„šī¸ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - run: | - docker build -t my-image . - docker run -v $PWD:/project -w /project/ my-image sh -c "\ - codeql database create /project/codeql-db --language=cpp --command='./pico_build_firmware.sh && ./esp_build_firmware.sh' \ - && codeql database analyze /project/codeql-db --format=sarif-latest --sarif-category=true --output=/project/codeql-db/codeql-sarif" - - - run: | - ls - ls codeql-db - - # Filter out rules with low severity or high false positive rate - # Also filter out warnings in third-party code - # - name: Filter out unwanted errors and warnings - # uses: advanced-security/filter-sarif@v1 - # with: - # patterns: | - # -**:cpp/path-injection - # -**:cpp/world-writable-file-creation - # -**:cpp/poorly-documented-function - # -**:cpp/potentially-dangerous-function - # -**:cpp/use-of-goto - # -**:cpp/integer-multiplication-cast-to-long - # -**:cpp/comparison-with-wider-type - # -**:cpp/leap-year/* - # -**:cpp/ambiguously-signed-bit-field - # -**:cpp/suspicious-pointer-scaling - # -**:cpp/suspicious-pointer-scaling-void - # -**:cpp/unsigned-comparison-zero - # -**/cmake*/Modules/** - # input: codeql-db/codeql-sarif - # output: codeql-sarif - - - name: Copy file - run: | - cp codeql-db/codeql-sarif codeql-sarif - cat codeql-sarif - - - name: Upload CodeQL results to code scanning - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: codeql-sarif - category: "/language:${{matrix.language}}" - - - name: Upload CodeQL results as an artifact - if: success() || failure() - uses: actions/upload-artifact@v4 - with: - name: codeql-results - path: codeql-sarif - retention-days: 5 diff --git a/.github/workflows/fail_on_error.py b/.github/workflows/fail_on_error.py deleted file mode 100644 index 29791742b..000000000 --- a/.github/workflows/fail_on_error.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 - -import json -import sys - -# Return whether SARIF file contains error-level results -def codeql_sarif_contain_error(filename): - with open(filename, 'r') as f: - s = json.load(f) - - for run in s.get('runs', []): - rules_metadata = run['tool']['driver']['rules'] - if not rules_metadata: - rules_metadata = run['tool']['extensions'][0]['rules'] - - for res in run.get('results', []): - if 'ruleIndex' in res: - rule_index = res['ruleIndex'] - elif 'rule' in res and 'index' in res['rule']: - rule_index = res['rule']['index'] - else: - continue - try: - rule_level = rules_metadata[rule_index]['defaultConfiguration']['level'] - except IndexError as e: - print(e, rule_index, len(rules_metadata)) - else: - if rule_level == 'error': - return True - return False - -if __name__ == "__main__": - if codeql_sarif_contain_error(sys.argv[1]): - sys.exit(1) diff --git a/.gitignore b/.gitignore index 4fbb027a6..275ec5e69 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ binary grid_esp/dependencies.lock lists.py out.json -codeql-db iperf vmp/build tags diff --git a/Dockerfile b/Dockerfile index 7f2567f9d..007040303 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,44 @@ -# Use the base image -FROM docker.io/espressif/idf:v5.5 +FROM debian:trixie -# Install pico sdk required dependencies -RUN apt update && \ - apt install -y git python3 python3-pip cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential xxd && \ - mkdir -p pico && \ +RUN apt-get update + +# Dependencies of esp-idf +RUN apt -y install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 + +# Clone esp-idf +RUN git clone -b v5.5 --recursive https://github.com/espressif/esp-idf.git + +# Install tools used by esp-idf for esp32s3 +WORKDIR /esp-idf +RUN ./install.sh esp32s3 > install-sh.log 2>&1 +WORKDIR / + +ENV IDF_PATH=/esp-idf +ENTRYPOINT ["/esp-idf/tools/docker/entrypoint.sh"] + +# Install pico sdk and build dependencies +RUN apt-get update && \ + apt-get install -y git python3 python3-pip cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential xxd + +# Clone pico sdk +RUN mkdir -p pico && \ cd pico && \ git clone https://github.com/raspberrypi/pico-sdk.git --branch 2.1.1 && \ cd pico-sdk/ && \ - git submodule update --init && \ - cd ../.. && \ - \ - git clone https://github.com/emscripten-core/emsdk.git && \ + git submodule update --init + +# Install emscripten sdk +RUN git clone https://github.com/emscripten-core/emsdk.git && \ cd emsdk && \ - git pull && \ ./emsdk install latest && \ - ./emsdk activate latest && \ - . ./emsdk_env.sh && \ - cd .. + ./emsdk activate latest WORKDIR / ENV PICO_SDK_PATH=/pico/pico-sdk # Install picotool -RUN apt install libusb-1.0-0-dev +RUN apt-get install -y libusb-1.0-0-dev RUN git clone --depth 1 --branch 2.1.1 https://github.com/raspberrypi/picotool.git RUN mkdir -p picotool/build WORKDIR /picotool @@ -36,24 +50,11 @@ WORKDIR / ENV EMSDK=/emsdk EM_CONFIG=/emsdk/.emscripten EMSDK_NODE=/emsdk/node/14.18.2_64bit/bin/node PATH=/emsdk:/emsdk/upstream/emscripten:/emsdk/upstream/bin:/emsdk/node/14.18.2_64bit/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -# Set up environment variables -ENV CODEQL_HOME=/opt/codeql -ENV PATH="${CODEQL_HOME}/codeql:${PATH}" - -# Install CodeQL CLI tools -RUN mkdir -p ${CODEQL_HOME} && \ - curl -L https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql-linux64.zip -o ${CODEQL_HOME}/codeql.zip && \ - unzip ${CODEQL_HOME}/codeql.zip -d ${CODEQL_HOME} && \ - rm ${CODEQL_HOME}/codeql.zip && \ - codeql --version - -RUN cd ${CODEQL_HOME} && git clone --recursive https://github.com/github/codeql.git codeql-repo - -RUN apt update && \ - apt install -y socat +RUN apt-get update && \ + apt-get install -y socat # Install pre-commit from pip -RUN apt install -y pre-commit +RUN python3 -m pip install --break-system-packages pre-commit RUN pre-commit --version # Copy pre-commit hooks and create a git directory, @@ -65,10 +66,6 @@ RUN pre-commit install-hooks # Add /project as a safe git repository RUN git config --global --add safe.directory /project -# Patch esp_efuse_startup.c -COPY ./patch_esp_efuse_startup.sh / -RUN ./patch_esp_efuse_startup.sh - # Patch FreeRTOSConfig.h COPY ./patch_esp_trace_include.sh / RUN ./patch_esp_trace_include.sh diff --git a/grid_common/grid_ain.c b/grid_common/grid_ain.c index b75527a3c..6f920e513 100644 --- a/grid_common/grid_ain.c +++ b/grid_common/grid_ain.c @@ -7,6 +7,7 @@ #include "grid_ain.h" +#include #include #include #include diff --git a/grid_common/grid_asc.c b/grid_common/grid_asc.c index 277408f71..ca8b0b851 100644 --- a/grid_common/grid_asc.c +++ b/grid_common/grid_asc.c @@ -1,5 +1,7 @@ #include "grid_asc.h" +#include + void grid_asc_array_set_factors(struct grid_asc* asc, size_t capacity, uint8_t start, uint8_t length, uint8_t factor) { assert(start < capacity); diff --git a/grid_common/grid_cal.c b/grid_common/grid_cal.c index b1e8754e2..ce1f06c64 100644 --- a/grid_common/grid_cal.c +++ b/grid_common/grid_cal.c @@ -7,6 +7,7 @@ #include "grid_cal.h" +#include #include struct grid_cal_model grid_cal_state = {0}; @@ -233,4 +234,5 @@ uint16_t grid_cal_next(struct grid_cal_model* cal, uint8_t channel, uint16_t in) } assert(0); + return 0; } diff --git a/grid_common/grid_config.c b/grid_common/grid_config.c index 48bf2d13c..0a0b7cf9c 100644 --- a/grid_common/grid_config.c +++ b/grid_common/grid_config.c @@ -8,6 +8,7 @@ #include "grid_config.h" #include +#include #include #include "tomlc99/toml.h" diff --git a/grid_common/grid_led.c b/grid_common/grid_led.c index 33a398b03..f435308a4 100644 --- a/grid_common/grid_led.c +++ b/grid_common/grid_led.c @@ -20,6 +20,7 @@ #include "grid_led.h" +#include #include #include diff --git a/grid_common/grid_littlefs.c b/grid_common/grid_littlefs.c index fafd593bb..654e5fa13 100644 --- a/grid_common/grid_littlefs.c +++ b/grid_common/grid_littlefs.c @@ -1,5 +1,6 @@ #include "grid_littlefs.h" +#include #include #include "grid_platform.h" diff --git a/grid_common/grid_lua_api.c b/grid_common/grid_lua_api.c index a5b109a2f..3dd10dda5 100644 --- a/grid_common/grid_lua_api.c +++ b/grid_common/grid_lua_api.c @@ -1,5 +1,6 @@ #include "grid_lua_api.h" +#include #include #include diff --git a/grid_common/grid_module.c b/grid_common/grid_module.c index 62b262c9c..32651647f 100644 --- a/grid_common/grid_module.c +++ b/grid_common/grid_module.c @@ -1,5 +1,6 @@ #include "grid_module.h" +#include #include #include #include diff --git a/grid_common/grid_port.c b/grid_common/grid_port.c index 71156627f..3fa9f00f0 100644 --- a/grid_common/grid_port.c +++ b/grid_common/grid_port.c @@ -2,6 +2,7 @@ #include #include +#include #include #include "grid_decode.h" diff --git a/grid_common/grid_transport.c b/grid_common/grid_transport.c index ba5b445ef..ba99d3b61 100644 --- a/grid_common/grid_transport.c +++ b/grid_common/grid_transport.c @@ -2,6 +2,7 @@ #include #include +#include #include struct grid_transport grid_transport_state; diff --git a/grid_common/grid_ui_button.c b/grid_common/grid_ui_button.c index f066a2ad9..21bf7057b 100644 --- a/grid_common/grid_ui_button.c +++ b/grid_common/grid_ui_button.c @@ -1,5 +1,6 @@ #include "grid_ui_button.h" +#include #include #include #include diff --git a/grid_common/grid_ui_endless.c b/grid_common/grid_ui_endless.c index 6fe4b5960..829e27103 100644 --- a/grid_common/grid_ui_endless.c +++ b/grid_common/grid_ui_endless.c @@ -1,5 +1,6 @@ #include "grid_ui_endless.h" +#include #include #include #include diff --git a/grid_common/grid_ui_potmeter.c b/grid_common/grid_ui_potmeter.c index 45fa09635..3e3b715c0 100644 --- a/grid_common/grid_ui_potmeter.c +++ b/grid_common/grid_ui_potmeter.c @@ -1,5 +1,6 @@ #include "grid_ui_potmeter.h" +#include #include #include diff --git a/grid_esp/bootloader/apps/blinky.uf2 b/grid_esp/bootloader/apps/blinky.uf2 new file mode 100644 index 000000000..92c34a12d Binary files /dev/null and b/grid_esp/bootloader/apps/blinky.uf2 differ diff --git a/grid_esp/bootloader/apps/update-tinyuf2.uf2 b/grid_esp/bootloader/apps/update-tinyuf2.uf2 new file mode 100644 index 000000000..e4cfac353 Binary files /dev/null and b/grid_esp/bootloader/apps/update-tinyuf2.uf2 differ diff --git a/grid_esp/bootloader/bootloader.bin b/grid_esp/bootloader/bootloader.bin index b726580ec..4b9027364 100644 Binary files a/grid_esp/bootloader/bootloader.bin and b/grid_esp/bootloader/bootloader.bin differ diff --git a/grid_esp/bootloader/combined.bin b/grid_esp/bootloader/combined.bin index 75f08d70f..394fd78dd 100644 Binary files a/grid_esp/bootloader/combined.bin and b/grid_esp/bootloader/combined.bin differ diff --git a/grid_esp/bootloader/flash_args b/grid_esp/bootloader/flash_args new file mode 100644 index 000000000..ef562d35f --- /dev/null +++ b/grid_esp/bootloader/flash_args @@ -0,0 +1,5 @@ +--flash_mode dio --flash_freq 80m --flash_size 8MB +0x0 bootloader/bootloader.bin +0x410000 tinyuf2.bin +0x8000 partition_table/partition-table.bin +0xe000 ota_data_initial.bin diff --git a/grid_esp/bootloader/tinyuf2.bin b/grid_esp/bootloader/tinyuf2.bin index 45ede8e96..7f40bd7ee 100644 Binary files a/grid_esp/bootloader/tinyuf2.bin and b/grid_esp/bootloader/tinyuf2.bin differ diff --git a/grid_esp/main/grid_esp32.c b/grid_esp/main/grid_esp32.c index c47b7c144..e758336c3 100644 --- a/grid_esp/main/grid_esp32.c +++ b/grid_esp/main/grid_esp32.c @@ -8,6 +8,34 @@ static const char* TAG = "grid_esp32"; +void grid_esp32_setup_rom_log_scheme(void) { + // Configure ROM bootloader to only log when GPIO is high. + // This speeds up boot by suppressing ROM logs on normal boots. + // We handle this in firmware instead of via CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH + // to avoid ESP-IDF bug: https://github.com/espressif/esp-idf/issues/12894 + // The fix was supposedly merged but never actually made it to the main branch. + // IMPORTANT: sdkconfig must have CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y (the default). + // Do NOT set CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH in sdkconfig - it will crash. + esp_err_t err = esp_efuse_set_rom_log_scheme(ESP_EFUSE_ROM_LOG_ON_GPIO_HIGH); + + switch (err) { + case ESP_OK: + ESP_LOGI(TAG, "ROM log scheme set to GPIO_HIGH"); + break; + case ESP_ERR_INVALID_STATE: + // eFuse already burned - this is expected after first boot + ESP_LOGD(TAG, "ROM log eFuse already configured"); + break; + case ESP_ERR_NOT_SUPPORTED: + // Chip doesn't support this feature (e.g., ESP32) + ESP_LOGD(TAG, "ROM log scheme not supported on this chip"); + break; + default: + ESP_LOGW(TAG, "Unexpected error setting ROM log scheme: %s", esp_err_to_name(err)); + break; + } +} + void vTaskGetRunTimeStats2(char* pcWriteBuffer) { TaskStatus_t* pxTaskStatusArray; diff --git a/grid_esp/main/grid_esp32.h b/grid_esp/main/grid_esp32.h index 474fad8eb..2ed2b5032 100644 --- a/grid_esp/main/grid_esp32.h +++ b/grid_esp/main/grid_esp32.h @@ -70,6 +70,8 @@ void grid_platform_nvm_defrag(); uint8_t grid_platform_get_adc_bit_depth(); +void grid_esp32_setup_rom_log_scheme(void); + #ifdef __cplusplus } #endif diff --git a/grid_esp/main/grid_fw.c b/grid_esp/main/grid_fw.c index f6d8eb619..13668a93f 100644 --- a/grid_esp/main/grid_fw.c +++ b/grid_esp/main/grid_fw.c @@ -359,6 +359,8 @@ void app_main(void) { esp_log_level_set("*", ESP_LOG_INFO); + grid_esp32_setup_rom_log_scheme(); + TaskHandle_t core2_task_hdl; xTaskCreatePinnedToCore(system_init_core_2_task, "swd_init", 1024 * 3, NULL, 4, &core2_task_hdl, 1); diff --git a/grid_esp/sdkconfig b/grid_esp/sdkconfig index a2eabfe9f..5cd6f9024 100644 --- a/grid_esp/sdkconfig +++ b/grid_esp/sdkconfig @@ -536,9 +536,9 @@ CONFIG_ESP_ROM_CONSOLE_OUTPUT_SECONDARY=y # # Boot ROM Behavior # -# CONFIG_BOOT_ROM_LOG_ALWAYS_ON is not set +CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y # CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH=y +# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set # CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set # end of Boot ROM Behavior diff --git a/grid_make/grid/d51/grid_d51.c b/grid_make/grid/d51/grid_d51.c index b12d93ddc..ce316e418 100644 --- a/grid_make/grid/d51/grid_d51.c +++ b/grid_make/grid/d51/grid_d51.c @@ -514,7 +514,7 @@ uint8_t grid_fusb302_read_id(struct io_descriptor* i2c_io) { msg.buffer = buffer; /* start transfer then return */ - ret = i2c_m_async_transfer(&i2c->device, &msg); + ret = i2c_m_async_transfer(i2c, &msg); if (ret != 0) { printf("I2C error\r\n"); @@ -527,7 +527,7 @@ uint8_t grid_fusb302_read_id(struct io_descriptor* i2c_io) { } msg.flags = I2C_M_RD | I2C_M_STOP; - ret = i2c_m_async_transfer(&i2c->device, &msg); + ret = i2c_m_async_transfer(i2c, &msg); if (ret != 0) { printf("I2C error\r\n"); @@ -561,7 +561,7 @@ uint8_t grid_mxt144u_read_id(struct io_descriptor* i2c_io) { msg.buffer = buffer; /* start transfer then return */ - ret = i2c_m_async_transfer(&i2c->device, &msg); + ret = i2c_m_async_transfer(i2c, &msg); if (ret != 0) { printf("I2C error\r\n"); @@ -573,7 +573,7 @@ uint8_t grid_mxt144u_read_id(struct io_descriptor* i2c_io) { msg.len = 7; msg.flags = I2C_M_RD | I2C_M_STOP; - ret = i2c_m_async_transfer(&i2c->device, &msg); + ret = i2c_m_async_transfer(i2c, &msg); if (ret != 0) { printf("I2C error\r\n"); diff --git a/grid_make/grid/d51/grid_d51.h b/grid_make/grid/d51/grid_d51.h index 2ea2116a0..2b0e48500 100644 --- a/grid_make/grid/d51/grid_d51.h +++ b/grid_make/grid/d51/grid_d51.h @@ -17,7 +17,7 @@ #include "grid_d51_nvm.h" #include "grid_d51_uart.h" -#define GRID_D51_USER_ROW_BASE 0x804000 +#define GRID_D51_USER_ROW_BASE ((void*)0x804000) #define GRID_D51_DEMCR (*(uint32_t*)0xE000EDFC) #define GRID_D51_DWT_CTRL (*(uint32_t*)0xE0001000) diff --git a/grid_make/grid/d51/grid_d51_led.c b/grid_make/grid/d51/grid_d51_led.c index 47847c8f9..69b363e41 100644 --- a/grid_make/grid/d51/grid_d51_led.c +++ b/grid_make/grid/d51/grid_d51_led.c @@ -74,7 +74,7 @@ void grid_d51_led_init(struct grid_d51_led_model* d51_mod, struct grid_led_model grid_d51_led_set_color(d51_mod, i, 0, 0, 0); } - grid_led_startup_animation(&d51_mod); + grid_led_startup_animation(d51_mod); } void grid_d51_led_set_color(struct grid_d51_led_model* mod, uint32_t led_index, uint8_t r, uint8_t g, uint8_t b) { diff --git a/grid_make/grid/d51/grid_d51_module.c b/grid_make/grid/d51/grid_d51_module.c index 3e9efae64..64bde68ca 100644 --- a/grid_make/grid/d51/grid_d51_module.c +++ b/grid_make/grid/d51/grid_d51_module.c @@ -1,6 +1,8 @@ #include "grid_d51_module.h" +#include "grid_d51.h" #include "grid_d51_nvm.h" +#include "grid_d51_uart.h" // Define all of the peripheral interrupt callbacks diff --git a/grid_make/grid/d51/grid_d51_uart.c b/grid_make/grid/d51/grid_d51_uart.c index 48f85adae..c1e763e2d 100644 --- a/grid_make/grid/d51/grid_d51_uart.c +++ b/grid_make/grid/d51/grid_d51_uart.c @@ -19,6 +19,9 @@ struct io_descriptor* grid_sys_east_io; struct io_descriptor* grid_sys_south_io; struct io_descriptor* grid_sys_west_io; +static void dma_transfer_complete(struct grid_port* port); +void tx_cb_USART_GRID(uint8_t dir); + static void tx_cb_USART_GRID_N(const struct usart_async_descriptor* const descr) { tx_cb_USART_GRID(0); } static void tx_cb_USART_GRID_E(const struct usart_async_descriptor* const descr) { tx_cb_USART_GRID(1); } static void tx_cb_USART_GRID_S(const struct usart_async_descriptor* const descr) { tx_cb_USART_GRID(2); } @@ -31,7 +34,7 @@ static void rx_cb_USART_GRID_E(const struct usart_async_descriptor* const descr) static void rx_cb_USART_GRID_S(const struct usart_async_descriptor* const descr) {} static void rx_cb_USART_GRID_W(const struct usart_async_descriptor* const descr) {} -volatile dmatest = 0; +volatile int dmatest = 0; static void dma_transfer_complete_n_cb(struct _dma_resource* resource) { dma_transfer_complete(usart_ports[0]); } static void dma_transfer_complete_e_cb(struct _dma_resource* resource) { dma_transfer_complete(usart_ports[1]); } @@ -140,12 +143,12 @@ void grid_d51_uart_init() { grid_d51_uart_dma_rx_init(); } -void grid_d51_uart_dma_rx_init_one(struct usart_async_descriptor* usart, uint8_t channel, uint8_t* buffer, uint32_t length, void* transfer_done_cb()) { +void grid_d51_uart_dma_rx_init_one(struct usart_async_descriptor* usart, uint8_t channel, uint8_t* buffer, uint32_t length, void (*transfer_done_cb)(struct _dma_resource*)) { uint8_t dma_rx_channel = channel; - _dma_set_source_address(dma_rx_channel, (uint32_t) & (((Sercom*)((*usart).device.hw))->USART.DATA.reg)); - _dma_set_destination_address(dma_rx_channel, (uint32_t*)buffer); + _dma_set_source_address(dma_rx_channel, (const void*)&(((Sercom*)((*usart).device.hw))->USART.DATA.reg)); + _dma_set_destination_address(dma_rx_channel, (const void*)buffer); _dma_set_data_amount(dma_rx_channel, (uint32_t)length); struct _dma_resource* resource_rx; diff --git a/grid_make/grid/d51/grid_d51_uart.h b/grid_make/grid/d51/grid_d51_uart.h index 91187aada..aa331f64f 100644 --- a/grid_make/grid/d51/grid_d51_uart.h +++ b/grid_make/grid/d51/grid_d51_uart.h @@ -55,7 +55,7 @@ static void dma_transfer_complete_s_cb(struct _dma_resource* resource); static void dma_transfer_complete_w_cb(struct _dma_resource* resource); static void dma_transfer_complete(struct grid_port* por); -void grid_d51_uart_dma_rx_init_one(struct usart_async_descriptor* usart, uint8_t channel, uint8_t* buffer, uint32_t length, void* transfer_done_cb()); +void grid_d51_uart_dma_rx_init_one(struct usart_async_descriptor* usart, uint8_t channel, uint8_t* buffer, uint32_t length, void (*transfer_done_cb)(struct _dma_resource*)); static void grid_d51_uart_dma_rx_init(); #endif /* GRID_D51_UART_H_ */ diff --git a/grid_make/grid/d51/grid_d51_usb.c b/grid_make/grid/d51/grid_d51_usb.c index c26290baf..15b07475b 100644 --- a/grid_make/grid/d51/grid_d51_usb.c +++ b/grid_make/grid/d51/grid_d51_usb.c @@ -8,6 +8,7 @@ #include "grid_d51_usb.h" #include +#include volatile uint8_t grid_usb_serial_rx_buffer[CONF_USB_COMPOSITE_CDC_ACM_DATA_BULKIN_MAXPKSZ]; @@ -204,5 +205,5 @@ int32_t grid_platform_usb_keyboard_keys_state_change(struct grid_usb_keyboard_ev hid_key_array[i].state = active_key_list[i].ispressed; } - return hiddf_keyboard_keys_state_change(hid_key_array, keys_count); + return hiddf_keyboard_keys_state_change((struct hiddf_kb_key_descriptors*)hid_key_array, keys_count); } diff --git a/grid_make/grid/d51/grid_d51_usb.h b/grid_make/grid/d51/grid_d51_usb.h index 671e257a5..6faf29d03 100644 --- a/grid_make/grid/d51/grid_d51_usb.h +++ b/grid_make/grid/d51/grid_d51_usb.h @@ -16,6 +16,7 @@ #include "config/usbd_config.h" +#include "../../usb_start.h" #include "grid_port.h" #include "grid_usb.h" diff --git a/grid_make/grid/grid_d51_module_bu16.c b/grid_make/grid/grid_d51_module_bu16.c index 394e13b43..2df71ad69 100644 --- a/grid_make/grid/grid_d51_module_bu16.c +++ b/grid_make/grid/grid_d51_module_bu16.c @@ -1,5 +1,6 @@ #include "grid_d51_module_bu16.h" +#include "grid_module.h" #include "grid_ui_button.h" #include "grid_ui_system.h" @@ -19,7 +20,7 @@ static void hardware_start_transfer(void) { adc_async_start_conversion(&ADC_1); } -static void adc_transfer_complete_cb(void) { +static void adc_transfer_complete_cb(const struct adc_async_descriptor* const descr, const uint8_t channel) { if (adc_complete_count == 0) { adc_complete_count++; @@ -34,8 +35,8 @@ static void adc_transfer_complete_cb(void) { uint8_t adc_index_0 = multiplexer_lookup[multiplexer_index + 8]; uint8_t adc_index_1 = multiplexer_lookup[multiplexer_index + 0]; - adc_async_read_channel(&ADC_0, 0, &adcresult_0, 2); - adc_async_read_channel(&ADC_1, 0, &adcresult_1, 2); + adc_async_read_channel(&ADC_0, 0, (uint8_t*)&adcresult_0, 2); + adc_async_read_channel(&ADC_1, 0, (uint8_t*)&adcresult_1, 2); /* Update the multiplexer */ diff --git a/grid_make/grid/grid_d51_module_ef44.c b/grid_make/grid/grid_d51_module_ef44.c index 0de178f4f..7e27447f6 100644 --- a/grid_make/grid/grid_d51_module_ef44.c +++ b/grid_make/grid/grid_d51_module_ef44.c @@ -1,5 +1,6 @@ #include "grid_d51_module_ef44.h" +#include "grid_module.h" #include "grid_ui_button.h" #include "grid_ui_encoder.h" #include "grid_ui_potmeter.h" @@ -40,7 +41,7 @@ static void hardware_adc_start_transfer(void) { adc_async_start_conversion(&ADC_1); } -static void spi_transfer_complete_cb(void) { +static void spi_transfer_complete_cb(struct spi_m_async_descriptor* descr) { /* Transfer completed */ @@ -69,7 +70,7 @@ static void spi_transfer_complete_cb(void) { hardware_spi_start_transfer(); } -static void adc_transfer_complete_cb(void) { +static void adc_transfer_complete_cb(const struct adc_async_descriptor* const descr, const uint8_t channel) { if (adc_complete_count == 0) { adc_complete_count++; @@ -84,8 +85,8 @@ static void adc_transfer_complete_cb(void) { uint8_t adc_index_0 = multiplexer_index + 2; uint8_t adc_index_1 = multiplexer_index; - adc_async_read_channel(&ADC_0, 0, &adcresult_0, 2); - adc_async_read_channel(&ADC_1, 0, &adcresult_1, 2); + adc_async_read_channel(&ADC_0, 0, (uint8_t*)&adcresult_0, 2); + adc_async_read_channel(&ADC_1, 0, (uint8_t*)&adcresult_1, 2); /* Update the multiplexer */ @@ -117,7 +118,7 @@ static void hardware_init(void) { spi_m_async_set_baudrate(&UI_SPI, 100000); // was 400000 check clock div setting - spi_m_async_register_callback(&UI_SPI, SPI_M_ASYNC_CB_XFER, spi_transfer_complete_cb); + spi_m_async_register_callback(&UI_SPI, SPI_M_ASYNC_CB_XFER, (FUNC_PTR)spi_transfer_complete_cb); adc_async_register_callback(&ADC_0, 0, ADC_ASYNC_CONVERT_CB, adc_transfer_complete_cb); adc_async_register_callback(&ADC_1, 0, ADC_ASYNC_CONVERT_CB, adc_transfer_complete_cb); diff --git a/grid_make/grid/grid_d51_module_en16.c b/grid_make/grid/grid_d51_module_en16.c index 23294faae..92cf3378c 100644 --- a/grid_make/grid/grid_d51_module_en16.c +++ b/grid_make/grid/grid_d51_module_en16.c @@ -1,5 +1,6 @@ #include "grid_d51_module_en16.h" +#include "grid_module.h" #include "grid_ui_button.h" #include "grid_ui_encoder.h" #include "grid_ui_system.h" @@ -22,7 +23,7 @@ static void hardware_start_transfer(void) { spi_m_async_transfer(&UI_SPI, UI_SPI_TX_BUFFER, UI_SPI_RX_BUFFER, 8); } -static void spi_transfer_complete_cb(void) { +static void spi_transfer_complete_cb(struct spi_m_async_descriptor* descr) { /* Transfer completed */ @@ -62,7 +63,7 @@ static void hardware_init(void) { spi_m_async_set_baudrate(&UI_SPI, 100000); // was 400000 check clock div setting - spi_m_async_register_callback(&UI_SPI, SPI_M_ASYNC_CB_XFER, spi_transfer_complete_cb); + spi_m_async_register_callback(&UI_SPI, SPI_M_ASYNC_CB_XFER, (FUNC_PTR)spi_transfer_complete_cb); } void grid_module_en16_init() { diff --git a/grid_make/grid/grid_d51_module_pbf4.c b/grid_make/grid/grid_d51_module_pbf4.c index 2570d41de..6b227a8f1 100644 --- a/grid_make/grid/grid_d51_module_pbf4.c +++ b/grid_make/grid/grid_d51_module_pbf4.c @@ -1,5 +1,6 @@ #include "grid_d51_module_pbf4.h" +#include "grid_module.h" #include "grid_ui_button.h" #include "grid_ui_potmeter.h" #include "grid_ui_system.h" @@ -26,7 +27,7 @@ static void hardware_start_transfer(void) { adc_async_start_conversion(&ADC_1); } -static void adc_transfer_complete_cb(void) { +static void adc_transfer_complete_cb(const struct adc_async_descriptor* const descr, const uint8_t channel) { if (adc_complete_count == 0) { adc_complete_count++; @@ -41,8 +42,8 @@ static void adc_transfer_complete_cb(void) { uint8_t adc_index_0 = multiplexer_lookup[multiplexer_index + 8]; uint8_t adc_index_1 = multiplexer_lookup[multiplexer_index + 0]; - adc_async_read_channel(&ADC_0, 0, &adcresult_0, 2); - adc_async_read_channel(&ADC_1, 0, &adcresult_1, 2); + adc_async_read_channel(&ADC_0, 0, (uint8_t*)&adcresult_0, 2); + adc_async_read_channel(&ADC_1, 0, (uint8_t*)&adcresult_1, 2); /* Update the multiplexer */ diff --git a/grid_make/grid/grid_d51_module_po16.c b/grid_make/grid/grid_d51_module_po16.c index c27657485..8030bc27b 100644 --- a/grid_make/grid/grid_d51_module_po16.c +++ b/grid_make/grid/grid_d51_module_po16.c @@ -1,5 +1,6 @@ #include "grid_d51_module_po16.h" +#include "grid_module.h" #include "grid_ui_potmeter.h" #include "grid_ui_system.h" @@ -22,7 +23,7 @@ static void hardware_start_transfer(void) { adc_async_start_conversion(&ADC_1); } -static void adc_transfer_complete_cb(void) { +static void adc_transfer_complete_cb(const struct adc_async_descriptor* const descr, const uint8_t channel) { if (adc_complete_count == 0) { adc_complete_count++; @@ -37,8 +38,8 @@ static void adc_transfer_complete_cb(void) { uint8_t adc_index_0 = multiplexer_lookup[multiplexer_index + 8]; uint8_t adc_index_1 = multiplexer_lookup[multiplexer_index + 0]; - adc_async_read_channel(&ADC_0, 0, &adcresult_0, 2); - adc_async_read_channel(&ADC_1, 0, &adcresult_1, 2); + adc_async_read_channel(&ADC_0, 0, (uint8_t*)&adcresult_0, 2); + adc_async_read_channel(&ADC_1, 0, (uint8_t*)&adcresult_1, 2); /* Update the multiplexer */ diff --git a/grid_make/main.c b/grid_make/main.c index 4a254a033..37b91f247 100644 --- a/grid_make/main.c +++ b/grid_make/main.c @@ -1,8 +1,10 @@ #include "grid_d51_module.h" +#include "grid_d51.h" #include "grid_d51_led.h" #include "grid_d51_nvm.h" #include "grid_d51_uart.h" +#include "grid_d51_usb.h" #include "atmel_start_pins.h" #include @@ -25,7 +27,7 @@ #include "usb/class/midi/device/audiodf_midi.h" extern const struct luaL_Reg* grid_lua_api_generic_lib_reference; -const struct luaL_Reg grid_lua_api_gui_lib_reference[] = {NULL, NULL}; +const struct luaL_Reg grid_lua_api_gui_lib_reference[] = {{NULL, NULL}}; #include #include diff --git a/grid_make/samd51a/gcc/gcc/startup_samd51.c b/grid_make/samd51a/gcc/gcc/startup_samd51.c index ca33d3908..93dac63bb 100644 --- a/grid_make/samd51a/gcc/gcc/startup_samd51.c +++ b/grid_make/samd51a/gcc/gcc/startup_samd51.c @@ -28,6 +28,7 @@ */ #include "samd51.h" +#include /* Initialize segments */ extern uint32_t _sfixed; diff --git a/grid_make/usb/class/midi/device/audiodf_midi.c b/grid_make/usb/class/midi/device/audiodf_midi.c index c99e2bd2d..c575d0fe7 100644 --- a/grid_make/usb/class/midi/device/audiodf_midi.c +++ b/grid_make/usb/class/midi/device/audiodf_midi.c @@ -1,4 +1,5 @@ #include "audiodf_midi.h" +#include #define AUDIODF_MIDI_VERSION 0x00000001u @@ -125,8 +126,8 @@ static int32_t audio_midi_enable(struct usbdf_driver *drv, struct usbd_descripto printf("MIDI TEST %d %d \r\n", _audiodf_midi_funcd.func_ep_in, _audiodf_midi_funcd.func_ep_out); - usb_d_ep_register_callback(_audiodf_midi_funcd.func_ep_in, USB_D_EP_CB_XFER, midi_in_cb); - usb_d_ep_register_callback(_audiodf_midi_funcd.func_ep_out, USB_D_EP_CB_XFER, midi_out_cb); + usb_d_ep_register_callback(_audiodf_midi_funcd.func_ep_in, USB_D_EP_CB_XFER, (FUNC_PTR)midi_in_cb); + usb_d_ep_register_callback(_audiodf_midi_funcd.func_ep_out, USB_D_EP_CB_XFER, (FUNC_PTR)midi_out_cb); if (midi_installed_cb){ midi_installed_cb(0, 0, 0); @@ -149,7 +150,6 @@ static int32_t audio_midi_disable(struct usbdf_driver *drv, struct usbd_descript struct audiodf_midi_func_data *func_data = (struct audiodf_midi_func_data *)(drv->func_data); usb_iface_desc_t ifc_desc; - uint8_t i; if (desc) { ifc_desc.bInterfaceClass = desc->sod[5]; @@ -347,13 +347,13 @@ int32_t audiodf_midi_register_callback(enum audiodf_midi_cb_type cb_type, FUNC_P { switch (cb_type) { case AUDIODF_MIDI_CB_READ: - midi_in_cb = func; + midi_in_cb = (midi_xfer_cb_t)func; break; case AUDIODF_MIDI_CB_WRITE: - midi_out_cb = func; + midi_out_cb = (midi_xfer_cb_t)func; break; case AUDIODF_MIDI_CB_INSTALLED: - midi_installed_cb = func; + midi_installed_cb = (midi_xfer_cb_t)func; break; default: return ERR_INVALID_ARG; diff --git a/gui_build.sh b/gui_build.sh index 4e1557413..26183c1d9 100755 --- a/gui_build.sh +++ b/gui_build.sh @@ -1,3 +1,3 @@ mkdir -p ./grid_gui/build -cmake -S ./grid_gui -B ./grid_gui/build +emcmake cmake -S ./grid_gui -B ./grid_gui/build cmake --build ./grid_gui/build diff --git a/patch_esp_efuse_startup.sh b/patch_esp_efuse_startup.sh deleted file mode 100755 index 643651fa9..000000000 --- a/patch_esp_efuse_startup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -FILEPATH=/opt/esp/idf/components/efuse/src/esp_efuse_startup.c -LINENO=$(grep -n "ROM log scheme" "$FILEPATH") -LINENO=${LINENO%:*} -sed -i "$((LINENO))d" "$FILEPATH" diff --git a/patch_esp_trace_include.sh b/patch_esp_trace_include.sh index a3fba645e..869aabcbe 100755 --- a/patch_esp_trace_include.sh +++ b/patch_esp_trace_include.sh @@ -1,6 +1,13 @@ #!/bin/sh -FILEPATH=/opt/esp/idf/components/freertos/config/include/freertos/FreeRTOSConfig.h +set -e + +if [ -z "$IDF_PATH" ]; then + echo "Error: IDF_PATH is not set" >&2 + exit 1 +fi + +FILEPATH=$IDF_PATH/components/freertos/config/include/freertos/FreeRTOSConfig.h LINENO="10" DIRECTIVE="#include \"../../../../../../../../../project/grid_esp/components/grid_esp32_trace/trace_hooks.h\"" sed -i "${LINENO}i ${DIRECTIVE}" "$FILEPATH"