Rtos API example

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "test_env.h"
00003 
00004 #if !DEVICE_CAN
00005   #error [NOT_SUPPORTED] CAN not supported
00006 #endif
00007 
00008 #if defined(TARGET_LPC1549)
00009 CAN can1(D9, D8);
00010 #elif defined(TARGET_LPC1768) || defined(TARGET_LPC4088)
00011 CAN can1(p9, p10);
00012 #elif defined(TARGET_B96B_F446VE)
00013 CAN can1(PD_0, PD_1);
00014 #elif defined(TARGET_VK_RZ_A1H)
00015 CAN can1(P5_9, P5_10);
00016 #elif defined(TARGET_NUCLEO_F091RC) || defined(TARGET_NUCLEO_F072RB) || \
00017       defined(TARGET_NUCLEO_F042K6) || defined(TARGET_NUCLEO_F334R8) || \
00018       defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8) || \
00019       defined(TARGET_NUCLEO_F302R8) || defined(TARGET_NUCLEO_F446RE) || \
00020       defined(TARGET_DISCO_F429ZI)  || \
00021       defined(TARGET_NUCLEO_F746ZG) || defined(TARGET_DISCO_L476VG)  || defined(TARGET_DISCO_L475VG_IOT01A) || \
00022       defined(TARGET_NUCLEO_F412ZG) || defined(TARGET_DISCO_F413ZH) || \
00023       defined(TARGET_NUCLEO_L476RG) || defined(TARGET_NUCLEO_L432KC)
00024 CAN can1(PA_11, PA_12);
00025 #elif defined(TARGET_DISCO_F469NI)  || defined(TARGET_DISCO_F746NG)  || \
00026       defined(TARGET_NUCLEO_F446ZE) || defined(TARGET_NUCLEO_F103RB) || \
00027       defined(TARGET_NUCLEO_F207ZG) || defined(TARGET_NUCLEO_F303ZE) || \
00028       defined(TARGET_DISCO_F769NI) || defined(TARGET_NUCLEO_F767ZI)  || \
00029       defined(TARGET_DISCO_F303VC)
00030 CAN can1(PB_8, PB_9);
00031 #endif
00032 
00033 #define TEST_ITERATIONS     127
00034 
00035 int main() {
00036     MBED_HOSTTEST_TIMEOUT(20);
00037     MBED_HOSTTEST_SELECT(dev_null);
00038     MBED_HOSTTEST_DESCRIPTION(CAN Loopback);
00039     MBED_HOSTTEST_START("MBED_A27");
00040 
00041 #if !defined(TARGET_VK_RZ_A1H)
00042     can1.mode(CAN::Reset);
00043 #endif
00044 
00045     if (!can1.mode(CAN::LocalTest)) {
00046         printf("Mode change failed\n");
00047     }
00048 
00049     char success_count = 0;
00050     for (char i=0; i < TEST_ITERATIONS; i++) {
00051         unsigned int id = 1337;
00052         CANMessage tx_msg(id, &i, sizeof(i));
00053         bool sent = false;
00054         if (can1.write(tx_msg)) {
00055             printf("Sent %u: %d\n", id, i);
00056             sent = true;
00057         }
00058         wait_ms(50);
00059 
00060         bool read = false;
00061         CANMessage rx_msg;
00062         if (can1.read(rx_msg)) {
00063             printf("Read %u: %d\n", rx_msg.id, rx_msg.data[0]);
00064             read = (rx_msg.id == id) && (rx_msg.data[0] == i);
00065         }
00066 
00067         bool success = sent && read;
00068 
00069         if (success) {
00070             success_count++;
00071         }
00072     }
00073 
00074     MBED_HOSTTEST_RESULT(success_count == TEST_ITERATIONS);
00075 }