1# Based on MCAN.robot
2
3*** Variables ***
4${UART}                                            sysbus.usart3
5${CAN}                                             sysbus.utcan
6${CAN_HUB}                                         canHub
7${PROMPT}                                          \#${SPACE}
8${UT32_CAN_REPL}                                   SEPARATOR=\n
9...                                                """
10...                                                utcan: CAN.UT32_CAN @ sysbus 0x40cccc00
11...                                                ${SPACE*4}-> nvic@19
12...                                                """
13# All Zephyr tests work in loopback mode
14${TESTS_NET_SOCKET_CAN_BIN}                        @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-net-socket-can-ut32_can.elf-s_730196-c52d44ada96c6b31de3a0d158d015b73292b40da
15${TESTS_DRIVERS_CAN_API_BIN}                       @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-api-ut32_can.elf-s_1906268-a5504a6579baa2a4ec54631d64c9f21337b91379
16${TESTS_DRIVERS_CAN_TIMING_BIN}                    @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-timing-ut32_can.elf-s_1734652-3eb1047cd81cc11f72613746aee01d5278d0bcc8
17${TESTS_DRIVERS_CAN_SHELL_BIN}                     @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-shell-ut32_can.elf-s_1510120-b2056800cb2907c73a4bd42b49417e4a09db5b99
18# Zephyr samples can be configured to work in either normal or loopback mode
19${SAMPLES_NET_SOCKETS_CAN_LOOPBACK_BIN}            @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-net-sockets-can--loopback-ut32_can.elf-s_2059904-50e9744c770ea67909a0951ab30650f0c0246f13
20${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN}         @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-net-sockets-can-ut32_can.elf-s_2056976-efbc0327c5433fde0fa166ab3b652602c9c5ae0b
21${SAMPLES_DRIVERS_CAN_COUNTER_LOOPBACK_BIN}        @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-drivers-can-counter--loopback-ut32_can.elf-s_1272296-cfc7a216ae8f087a89e79c211442a80347888017
22${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN}     @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-drivers-can-counter-ut32_can.elf-s_1271844-3366c77a9b0c4c7ca234a445644ae89ef8b73ad7
23
24*** Keywords ***
25Create CAN Hub
26    Execute Command           emulation CreateCANHub "${CAN_HUB}"
27
28Create STM32H7 Machine
29    [Arguments]               ${bin}  ${name}=machine-0
30    Execute Command           $bin=${bin}
31    Execute Command           mach create "${name}"
32    Execute Command           machine LoadPlatformDescription @platforms/cpus/stm32h753.repl
33    # The Zephyr binaries used here would not work on a real STM32H753 as they expect a UT32-compatible CAN controller
34    # to be present at 0x40cccc00. Add it to the platform
35    Execute Command           machine LoadPlatformDescriptionFromString ${UT32_CAN_REPL}
36    Execute Command           macro reset "sysbus LoadELF ${bin}"
37    Execute Command           runMacro $reset
38    Execute Command           connector Connect ${CAN} ${CAN_HUB}
39    Execute Command           showAnalyzer ${UART}
40
41Set Emulation Parameters For Better Synchronization Between Machines
42    Execute Command           emulation SetGlobalQuantum "0.000025"
43    Execute Command           emulation SetGlobalSerialExecution True
44
45*** Test Cases ***
46Should Pass Zephyr CAN Net Socket Test
47    Create CAN Hub
48    Create STM32H7 Machine    ${TESTS_NET_SOCKET_CAN_BIN}
49    Create Terminal Tester    ${UART}
50
51    Wait For Line On Uart     PROJECT EXECUTION SUCCESSFUL
52
53Should Pass Zephyr CAN API Test
54    Create CAN Hub
55    Create STM32H7 Machine    ${TESTS_DRIVERS_CAN_API_BIN}
56    Create Terminal Tester    ${UART}
57
58    Wait For Line On Uart     PROJECT EXECUTION SUCCESSFUL
59
60Should Pass Zephyr CAN Timing Test
61    Create CAN Hub
62    Create STM32H7 Machine    ${TESTS_DRIVERS_CAN_TIMING_BIN}
63    Create Terminal Tester    ${UART}
64
65    Wait For Line On Uart     PROJECT EXECUTION SUCCESSFUL
66
67Should Pass Zephyr CAN Shell Test
68    Create CAN Hub
69    Create STM32H7 Machine    ${TESTS_DRIVERS_CAN_SHELL_BIN}
70    Create Terminal Tester    ${UART}
71
72    Wait For Line On Uart     PROJECT EXECUTION SUCCESSFUL
73
74Should Use CAN Socket API To Exchange Messages In Loopback Mode
75    Create CAN Hub
76    Create STM32H7 Machine    ${SAMPLES_NET_SOCKETS_CAN_LOOPBACK_BIN}
77    Create Terminal Tester    ${UART}
78
79    # Wait for several successful transmissions
80    ${cnt}=                   Set Variable  40
81    FOR  ${i}  IN RANGE  0  ${cnt}
82        Wait For Line On Uart     net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8
83        Wait For Line On Uart     f0 f1 f2 f3 f4 f5 f6 f7
84    END
85
86Should Use CAN Socket API To Exchange Messages Between Machines
87    Create CAN Hub
88    Create STM32H7 Machine    ${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN}  machine-0
89    ${tester-0}=              Create Terminal Tester  ${UART}  machine=machine-0
90
91    Create STM32H7 Machine    ${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN}  machine-1
92    ${tester-1}=              Create Terminal Tester  ${UART}  machine=machine-1
93
94    Set Emulation Parameters For Better Synchronization Between Machines
95
96    # Wait for several successful transmissions
97    ${cnt}=                   Set Variable  40
98    FOR  ${i}  IN RANGE  0  ${cnt}
99        Wait For Line On Uart     net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8  testerId=${tester-0}
100        Wait For Line On Uart     net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8  testerId=${tester-1}
101        Wait For Line On Uart     f0 f1 f2 f3 f4 f5 f6 f7  testerId=${tester-0}
102        Wait For Line On Uart     f0 f1 f2 f3 f4 f5 f6 f7  testerId=${tester-1}
103    END
104
105Should Run Zephyr CAN Counter Sample In Loopback Mode
106    Create CAN Hub
107    Create STM32H7 Machine    ${SAMPLES_DRIVERS_CAN_COUNTER_LOOPBACK_BIN}
108    Create Terminal Tester    ${UART}
109
110    # Wait for several successful transmissions
111    ${cnt}=                   Set Variable  40
112    FOR  ${i}  IN RANGE  0  ${cnt}
113        Wait For Line On Uart     Counter received: ${i}
114    END
115
116Should Run Zephyr CAN Counter Sample To Exchange Messages Between Machines
117    Create CAN Hub
118    Create STM32H7 Machine    ${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN}  machine-0
119    ${tester-0}=              Create Terminal Tester  ${UART}  machine=machine-0
120
121    Create STM32H7 Machine    ${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN}  machine-1
122    ${tester-1}=              Create Terminal Tester  ${UART}  machine=machine-1
123
124    Set Emulation Parameters For Better Synchronization Between Machines
125
126    # Wait for several successful transmissions
127    ${cnt}=                   Set Variable  40
128    FOR  ${i}  IN RANGE  0  ${cnt}
129        Wait For Line On Uart     Counter received: ${i}  testerId=${tester-0}
130        Wait For Line On Uart     Counter received: ${i}  testerId=${tester-1}
131    END
132