Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ESP32S3 tests #2690

Merged
merged 8 commits into from
Jan 14, 2025
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1316,11 +1316,13 @@ jobs:
- name: Unpack the ESP32 firmware
run: |
gunzip firmware-esp32.gz
gunzip firmware-esp32s3.gz

- name: Test Raspberry Pi
env:
TOIT_EXE_HW: ${{ github.workspace }}/rpi/toit/bin/toit
ESP32_ENVELOPE: ${{ github.workspace }}/firmware-esp32
ESP32S3_ENVELOPE: ${{ github.workspace }}/firmware-esp32s3
run: |
# Get the pin configuration from the file in the runner's home.
source $HOME/pi-test.env
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ project(hw NONE) # No need for compilers.

add_custom_target(
check_hw
COMMAND ${CMAKE_CTEST_COMMAND} -j1 -T test -C hw --output-on-failure
# The current Raspberry Pi can't run more than 2 tests in parallel.
COMMAND ${CMAKE_CTEST_COMMAND} -j2 -T test -C hw --output-on-failure
USES_TERMINAL
)

Expand Down
6 changes: 3 additions & 3 deletions tests/hw/esp-tester/tester.toit
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,13 @@ class TestDevice:

finally:
read-task = null
if port:
port.close
port = null

close:
if read-task:
read-task.cancel
if port:
port.close
port = null
if file.is-directory tmp-dir:
directory.rmdir --recursive tmp-dir

Expand Down
167 changes: 107 additions & 60 deletions tests/hw/esp32/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,70 +20,117 @@ set(TESTER ${CMAKE_CURRENT_SOURCE_DIR}/../esp-tester/tester.toit)

add_custom_target(
check_esp32
COMMAND ${CMAKE_CTEST_COMMAND} -j1 -T test -C esp32 --output-on-failure
COMMAND ${CMAKE_CTEST_COMMAND} -j2 -T test -C esp32 --output-on-failure
USES_TERMINAL
)

foreach(board board1 board2)
if (board STREQUAL "board1")
set(port "$ENV{ESP32_BOARD1_PORT}")
else()
set(port "$ENV{ESP32_BOARD2_PORT}")
endif()
add_test(
NAME "setup-${board}"
COMMAND "${TOIT_EXE_HW}" "${TESTER}" setup
--verbose
--toit-exe "${TOIT_EXE_HW}"
--port "${port}"
--envelope "$ENV{ESP32_ENVELOPE}"
--wifi-ssid "$ENV{ESP32_WIFI_SSID}"
--wifi-password "$ENV{ESP32_WIFI_PASSWORD}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURATIONS esp32 hw
)

set_tests_properties("setup-${board}" PROPERTIES TIMEOUT 80)
set_tests_properties("setup-${board}" PROPERTIES FIXTURES_SETUP "setup-boards")
endforeach()
add_custom_target(
check_esp32s3
COMMAND ${CMAKE_CTEST_COMMAND} -j2 -T test -C esp32s3 --output-on-failure
USES_TERMINAL
)

include(fail.cmake OPTIONAL)

set(VARIANTS
esp32
esp32s3
)

foreach(esp_variant ${VARIANTS})
string(TOUPPER ${esp_variant} ESP_VARIANT)
foreach(board board1 board2)
string(TOUPPER ${board} BOARD)
set(port "$ENV{${ESP_VARIANT}_${BOARD}_PORT}")
set(test_name "setup-${board}-${esp_variant}")
add_test(
NAME ${test_name}
COMMAND "${TOIT_EXE_HW}" "${TESTER}" setup
--verbose
--toit-exe "${TOIT_EXE_HW}"
--port "${port}"
--envelope "$ENV{${ESP_VARIANT}_ENVELOPE}"
# Typically the SSID and password are the same for all variants, but
# this makes it more consistent.
--wifi-ssid "$ENV{${ESP_VARIANT}_WIFI_SSID}"
--wifi-password "$ENV{${ESP_VARIANT}_WIFI_PASSWORD}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURATIONS ${esp_variant} hw
)

foreach(file ${SINGLE_TESTS})
get_filename_component(name ${file} NAME_WE)
set(toit_file ${CMAKE_CURRENT_SOURCE_DIR}/${file})
set(test_name ${name})

add_test(
NAME ${file}
COMMAND ${TOIT_EXE_HW} "${TESTER}" run ${toit_file}
--verbose
--toit-exe "${TOIT_EXE_HW}"
--port-board1 "$ENV{ESP32_BOARD1_PORT}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURATIONS esp32
)

set_tests_properties(${file} PROPERTIES TIMEOUT 120)
set_tests_properties(${file} PROPERTIES FIXTURES_REQUIRED "setup-boards")
set_tests_properties("${test_name}" PROPERTIES TIMEOUT 80)
set_tests_properties("${test_name}" PROPERTIES FIXTURES_SETUP "setup-boards-${esp_variant}")
endforeach()
endforeach()

foreach(file ${MULTI_TESTS})
get_filename_component(name ${file} NAME_WE)
set(toit_file ${CMAKE_CURRENT_SOURCE_DIR}/${file})
set(test_name ${name})

string(REPLACE "board1" "board2" toit_file_board2 ${toit_file})

add_test(
NAME ${file}
COMMAND ${TOIT_EXE_HW} "${TESTER}" run ${toit_file} ${toit_file_board2}
--verbose
--toit-exe "${TOIT_EXE_HW}"
--port-board1 "$ENV{ESP32_BOARD1_PORT}"
--port-board2 "$ENV{ESP32_BOARD2_PORT}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURATIONS esp32 hw
)

set_tests_properties(${file} PROPERTIES TIMEOUT 120)
set_tests_properties(${file} PROPERTIES FIXTURES_REQUIRED "setup-boards")
foreach(esp_variant ${VARIANTS})
string(TOUPPER ${esp_variant} ESP_VARIANT)
foreach(file ${SINGLE_TESTS})
set(toit_file ${CMAKE_CURRENT_SOURCE_DIR}/${file})
set(test_name ${file}-${esp_variant})

if ("${test_name}" IN_LIST TOIT_SKIP_TESTS)
continue()
endif()

set(failing FALSE)
if ("${test_name}" IN_LIST TOIT_FAILING_TESTS)
set(test_name "${test_name}-failing")
set(failing TRUE)
endif()

add_test(
NAME ${test_name}
COMMAND ${TOIT_EXE_HW} "${TESTER}" run ${toit_file}
--verbose
--toit-exe "${TOIT_EXE_HW}"
--port-board1 "$ENV{${ESP_VARIANT}_BOARD1_PORT}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURATIONS ${esp_variant} hw
)

set_tests_properties(${test_name} PROPERTIES TIMEOUT 120)
set_tests_properties(${test_name} PROPERTIES FIXTURES_REQUIRED "setup-boards-${esp_variant}")
set_tests_properties(${test_name} PROPERTIES RESOURCE_LOCK ${esp_variant})

if (${failing})
set_tests_properties(${test_name} PROPERTIES WILL_FAIL TRUE)
endif()
endforeach()

foreach(file ${MULTI_TESTS})
set(toit_file ${CMAKE_CURRENT_SOURCE_DIR}/${file})
set(test_name ${file}-${esp_variant})

if ("${test_name}" IN_LIST TOIT_SKIP_TESTS)
continue()
endif()

set(failing FALSE)
if ("${test_name}" IN_LIST TOIT_FAILING_TESTS)
set(test_name "${test_name}-failing")
set(failing TRUE)
endif()

string(REPLACE "board1" "board2" toit_file_board2 ${toit_file})

add_test(
NAME "${test_name}"
COMMAND ${TOIT_EXE_HW} "${TESTER}" run ${toit_file} ${toit_file_board2}
--verbose
--toit-exe "${TOIT_EXE_HW}"
--port-board1 "$ENV{${ESP_VARIANT}_BOARD1_PORT}"
--port-board2 "$ENV{${ESP_VARIANT}_BOARD2_PORT}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURATIONS ${esp_variant} hw
)

set_tests_properties("${test_name}" PROPERTIES TIMEOUT 120)
set_tests_properties("${test_name}" PROPERTIES FIXTURES_REQUIRED "setup-boards-${esp_variant}")
set_tests_properties("${test_name}" PROPERTIES RESOURCE_LOCK ${esp_variant})

if (${failing})
set_tests_properties("${test_name}" PROPERTIES WILL_FAIL TRUE)
endif()
endforeach()
endforeach()
38 changes: 25 additions & 13 deletions tests/hw/esp32/adc-test.toit
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,51 @@ On Jaguar use:
`jag container install -D jag.disabled -D jag.timeout=1m adc adc.toit`


Setup:
Connect pin 12 to pin 14 with a 330 Ohm resistor.
Connect pin 14 to pin 32 with a 330 Ohm resistor.
Connect pin 32 to pin 25 with a 330 Ohm resistor.
For the setup, see the documentation at $Variant.adc1-pin.
*/

import gpio.adc as gpio
import gpio
import system
import expect show *

import .test

ADC1-PIN ::= 32
ADC2-PIN ::= 14
CONTROL-PIN ::= 25
V33-PIN ::= 12
import .variants

main:
run-test: test

test:
test-restricted := true

v33-pin := gpio.Pin V33-PIN --output
v33-pin := gpio.Pin Variant.CURRENT.adc-v33-pin --output
v33-pin.set 1
print "pin v33 set"
sleep --ms=2000
print "off"
v33-pin.set 0
sleep --ms=2000
print "on"
v33-pin.set 1

adc1-pin := gpio.Pin ADC1-PIN
control-pin := gpio.Pin CONTROL-PIN --output
adc1-pin := gpio.Pin Variant.CURRENT.adc1-pin
control-pin := gpio.Pin Variant.CURRENT.adc-control-pin --output

adc := gpio.Adc adc1-pin
control-pin.set 0
print "control pin set to 0"
sleep --ms=1000
print "1"
control-pin.set 1
sleep --ms=1000
print "off"
control-pin.set 0

// The resistors create a voltage divider of ration 2/3.
value := adc.get
print (adc.get --raw)
sleep --ms=5000
print "ADC value: $value"
expect 1.0 < value < 1.2

raw-value := adc.get --raw
Expand Down Expand Up @@ -79,7 +91,7 @@ test:
print "This only works if no WiFi is running"
print "There are other restrictings."

adc2-pin := gpio.Pin ADC2-PIN
adc2-pin := gpio.Pin Variant.CURRENT.adc2-pin

expect-throw "OUT_OF_RANGE":
adc = gpio.Adc adc2-pin
Expand Down
5 changes: 3 additions & 2 deletions tests/hw/esp32/ble1-shared.toit
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ import monitor

import .ble-util
import .test
import .variants

SERVICE-TEST ::= BleUuid "df451d2d-e899-4346-a8fd-bca9cbfebc0b"
SERVICE-TEST2 ::= BleUuid "94a11d6a-fa23-4a09-aa6f-2ca0b7cdbb70"
SERVICE-TEST ::= BleUuid Variant.CURRENT.ble1-service
SERVICE-TEST2 ::= BleUuid Variant.CURRENT.ble1-service2

CHARACTERISTIC-READ-ONLY ::= BleUuid "77d0b04e-bf49-4048-a4cd-fb46be32ebd0"
CHARACTERISTIC-READ-ONLY-CALLBACK ::= BleUuid "9e9f578c-745b-41ec-b0f6-7773157bb5a9"
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/esp32/ble2-shared.toit
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import monitor

import .ble-util
import .test
import .variants

SERVICE-TEST ::= BleUuid "a1bcf0ba-7557-4968-91f8-6b0f187af2b5"
SERVICE-TEST ::= BleUuid Variant.CURRENT.ble2-service

CHARACTERISTIC-WRITE-ONLY ::= BleUuid "c8aa5ee4-f93e-48cd-b32c-703965a8798f"
CHARACTERISTIC-WRITE-ONLY-WITH-RESPONSE ::= BleUuid "a59d8140-9e81-4a87-aa40-e9c6cab3ed52"
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/esp32/ble3-shared.toit
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ import monitor

import .ble-util
import .test
import .variants

ITERATIONS ::= 100

UUIDS ::= [
"ffe21239-d8a2-4536-b751-0881a9f2e3de",
Variant.CURRENT.ble3-first-service,
"9e3d1c10-9421-499e-851d-8e6bf2bd8808",
"f626e5c8-1551-4e64-861c-25705f35f8c2",
"417b7728-8ccf-4b78-b18b-4719326dc61b",
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/esp32/ble4-shared.toit
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import monitor

import .ble-util
import .test
import .variants

TEST-SERVICE ::= BleUuid "650a73d3-d7fd-4d08-b734-d11e25b0856d"
TEST-SERVICE ::= BleUuid Variant.CURRENT.ble4-service

TEST-CHARACTERISTIC ::= BleUuid "77d0b04e-bf49-4048-a4cd-fb46be32ebd0"
TEST-CHARACTERISTIC-CALLBACK ::= BleUuid "1a1bb179-c006-4217-a57b-342e24eca694"
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/esp32/ble5-shared.toit
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import monitor

import .ble-util
import .test
import .variants

TEST-SERVICE ::= BleUuid "e5c245a3-1b7e-44cf-bc37-7040b719fe46"
TEST-SERVICE ::= BleUuid Variant.CURRENT.ble5-service
TEST-CHARACTERISTIC ::= BleUuid "77d0b04e-bf49-4048-a4cd-fb46be32ebd0"

main-peripheral:
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/esp32/ble6-advertise-shared.toit
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ import monitor

import .ble-util
import .test
import .variants

TEST-SERVICE ::= BleUuid "eede145e-b6a6-4d61-8156-ed10d5b75903"
TEST-SERVICE ::= BleUuid Variant.CURRENT.ble6-service
TEST-CHARACTERISTIC ::= BleUuid "6b50d82f-ae33-4e0e-b161-50db92c49ad2"

COMPANY-ID ::= #[0x12, 0x34]
Expand Down
5 changes: 3 additions & 2 deletions tests/hw/esp32/bme280-board2.toit
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ import gpio
import i2c

import .test
import .variants

main:
run-test: test

test:
scl := gpio.Pin 32
sda := gpio.Pin 33
scl := gpio.Pin Variant.CURRENT.i2c-scl-pin
sda := gpio.Pin Variant.CURRENT.i2c-sda-pin
bus := i2c.Bus --scl=scl --sda=sda
device := bus.device bme280.I2C-ADDRESS-ALT
driver := bme280.Driver device
Expand Down
3 changes: 2 additions & 1 deletion tests/hw/esp32/ds18b20-board2.toit
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ import expect show *
import gpio

import .test
import .variants

main:
run-test: test

test:
data := gpio.Pin 15
data := gpio.Pin Variant.CURRENT.ds18b20-pin
driver := ds18b20.Ds18b20 data

2.repeat:
Expand Down
Loading
Loading