annotate packages/devs/can/loop/current/tests/can_txevent.c @ 2424:4c366bd69cd5

* tests/can_overrun1.c (can0_thread): Fix the length of the data in the message. Add a delay to allow the CAN device to process the packets. * test/can_txcevent.c: (can0_thread): Add a delay to allow the CAN device to process the packet.s * src/loop_can.c (FIFO_SIZE): Changed to one more than the TX queue size. If it is less, the loopback tests don't pass because packets don't get transmitted.
author asl
date Tue, 28 Aug 2007 15:56:03 +0000
parents 1ca46bebd705
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2059
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
1 //==========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
2 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
3 // can_txevent.c
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
4 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
5 // Test CAN device driver timeouts
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
6 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
7 //==========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
9 // -------------------------------------------
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
12 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
14 // the terms of the GNU General Public License as published by the Free
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
16 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
20 // for more details.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
21 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
22 // You should have received a copy of the GNU General Public License along
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
25 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
27 // or inline functions from this file, or you compile this file and link it
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
28 // with other works to produce a work based on this file, this file does not
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
30 // License. However the source code for this file must still be made available
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
32 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
34 // this file might be covered by the GNU General Public License.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
35 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license/
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
38 // -------------------------------------------
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
40 //==========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
41 //#####DESCRIPTIONBEGIN####
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
42 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
43 // Author(s): Uwe Kindler
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
44 // Contributors: Uwe Kindler
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
45 // Date: 2005-08-07
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
46 // Description: Timeout test of CAN device driver
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
47 //####DESCRIPTIONEND####
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
48
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
49
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
50 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
51 // INCLUDES
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
52 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
53 #include <pkgconf/system.h>
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
54
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
55 #include <cyg/infra/testcase.h> // test macros
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
56 #include <cyg/infra/cyg_ass.h> // assertion macros
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
57 #include <cyg/infra/diag.h>
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
58
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
59 // Package requirements
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
60 #if defined(CYGPKG_IO_CAN) && defined(CYGPKG_KERNEL)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
61
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
62 #include <pkgconf/kernel.h>
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
63 #include <cyg/io/io.h>
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
64 #include <cyg/io/canio.h>
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
65
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
66 // Package option requirements
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
67 #if defined(CYGFUN_KERNEL_API_C)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
68
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
69 #include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
70 #include <cyg/kernel/kapi.h>
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
71
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
72 // tx event support required
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
73 #if defined(CYGOPT_IO_CAN_TX_EVENT_SUPPORT)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
74
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
75
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
76 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
77 // DATA TYPES
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
78 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
79 typedef struct st_thread_data
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
80 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
81 cyg_thread obj;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
82 long stack[CYGNUM_HAL_STACK_SIZE_TYPICAL];
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
83 cyg_handle_t hdl;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
84 } thread_data_t;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
85
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
86
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
87 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
88 // LOCAL DATA
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
89 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
90 cyg_thread_entry_t can0_thread;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
91 thread_data_t can0_thread_data;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
92
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
93
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
94 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
95 // LOCAL FUNCTIONS
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
96 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
97 #include "can_test_aux.inl" // include CAN test auxiliary functions
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
98
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
99
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
100 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
101 // WRITER THREAD
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
102 //===========================================================================
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
103 void can0_thread(cyg_addrword_t data)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
104 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
105 cyg_io_handle_t hCAN0;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
106 cyg_uint32 len;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
107 cyg_can_buf_info_t buf_info;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
108 cyg_uint16 i;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
109 cyg_can_event rx_event;
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
110 cyg_can_message tx_msg =
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
111 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
112 0x000, // CAN identifier
2377
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
113 data :
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
114 {
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
115 {0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7 }// 8 data bytes
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
116 },
2059
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
117 CYGNUM_CAN_ID_STD, // standard frame
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
118 CYGNUM_CAN_FRAME_DATA, // data frame
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
119 4, // data length code
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
120 };
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
121
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
122
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
123 if (ENOERR != cyg_io_lookup("/dev/can0", &hCAN0))
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
124 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
125 CYG_TEST_FAIL_FINISH("Error opening /dev/can0");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
126 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
127
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
128 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
129 // first we read the buffer info
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
130 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
131 len = sizeof(buf_info);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
132 if (ENOERR != cyg_io_get_config(hCAN0, CYG_IO_GET_CONFIG_CAN_BUFFER_INFO ,&buf_info, &len))
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
133 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
134 CYG_TEST_FAIL_FINISH("Error reading config of /dev/can0");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
135 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
136
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
137 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
138 // check if buffer is really empty
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
139 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
140 if (buf_info.rx_count != 0)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
141 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
142 CYG_TEST_FAIL_FINISH("Receive buffer of /dev/can0 is not empty.");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
143 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
144
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
145 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
146 // now send messages - because TX events are supported each transmitted CAN message
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
147 // will cause a TX event that is filled into receive queue
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
148 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
149 diag_printf("Sending %d CAN messages to /dev/can0 \n", buf_info.rx_bufsize);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
150 for (i = 0; i < buf_info.rx_bufsize; ++i)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
151 {
2377
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
152 CYG_CAN_MSG_SET_STD_ID(tx_msg, 0x000 + i);
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
153 CYG_CAN_MSG_SET_DATA(tx_msg, 0, i);
2059
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
154 len = sizeof(tx_msg);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
155
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
156 if (ENOERR != cyg_io_write(hCAN0, &tx_msg, &len))
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
157 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
158 CYG_TEST_FAIL_FINISH("Error writing to /dev/can0");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
159 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
160 else
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
161 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
162 print_can_msg(&tx_msg, "");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
163 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
164 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
165
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
166 //
2424
4c366bd69cd5 * tests/can_overrun1.c (can0_thread): Fix the length of the data
asl
parents: 2377
diff changeset
167 // Give the loop back driver time to process all those messages.
4c366bd69cd5 * tests/can_overrun1.c (can0_thread): Fix the length of the data
asl
parents: 2377
diff changeset
168 //
4c366bd69cd5 * tests/can_overrun1.c (can0_thread): Fix the length of the data
asl
parents: 2377
diff changeset
169 cyg_thread_delay(10);
4c366bd69cd5 * tests/can_overrun1.c (can0_thread): Fix the length of the data
asl
parents: 2377
diff changeset
170
4c366bd69cd5 * tests/can_overrun1.c (can0_thread): Fix the length of the data
asl
parents: 2377
diff changeset
171 //
2059
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
172 // now we read the buffer info - we expect a completely filled recieve queue
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
173 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
174 len = sizeof(buf_info);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
175 if (ENOERR != cyg_io_get_config(hCAN0, CYG_IO_GET_CONFIG_CAN_BUFFER_INFO ,&buf_info, &len))
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
176 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
177 CYG_TEST_FAIL_FINISH("Error reading config of /dev/can0");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
178 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
179
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
180 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
181 // if receive queue is not completely filled, then we have an error here
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
182 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
183 if (buf_info.rx_bufsize != buf_info.rx_count)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
184 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
185 diag_printf("RX bufsize: %d events in RX buffer: %d\n", buf_info.rx_bufsize, buf_info.rx_count);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
186 CYG_TEST_FAIL_FINISH("Receive queue of /dev/can0 not completely filled.");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
187 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
188
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
189 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
190 // now we read the receive queue
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
191 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
192 diag_printf("Receiving %d TX events from /dev/can0 \n", buf_info.rx_count);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
193 for (i = 0; i < buf_info.rx_count; ++i)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
194 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
195 len = sizeof(rx_event);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
196
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
197 if (ENOERR != cyg_io_read(hCAN0, &rx_event, &len))
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
198 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
199 CYG_TEST_FAIL_FINISH("Error reading from /dev/can0");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
200 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
201
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
202 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
203 // we expect only a set TX flag because no other events may arrive for the
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
204 // loopback driver
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
205 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
206 if (!(rx_event.flags & CYGNUM_CAN_EVENT_TX) || (rx_event.flags & !CYGNUM_CAN_EVENT_TX))
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
207 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
208 CYG_TEST_FAIL_FINISH("Unexpected receive event flags.");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
209 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
210
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
211 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
212 // Now check if TX events contain valid data - we know that the ID and the first
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
213 // data byte contain the message number
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
214 //
2377
1ca46bebd705 * AT91SAM7 CAN driver package created
asl
parents: 2059
diff changeset
215 if ((rx_event.msg.id != i) || (rx_event.msg.data.bytes[0] != i))
2059
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
216 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
217 CYG_TEST_FAIL_FINISH("Received invalid data in TX event");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
218 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
219 else
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
220 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
221 print_can_msg(&rx_event.msg, "");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
222 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
223 } // for (i = 0; i < buf_info.rx_count; ++i)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
224
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
225 CYG_TEST_PASS_FINISH("can_txevent test OK");
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
226 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
227
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
228
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
229
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
230 void
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
231 cyg_start(void)
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
232 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
233 CYG_TEST_INIT();
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
234
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
235 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
236 // create the thread which access the CAN device driver
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
237 //
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
238 cyg_thread_create(4, can0_thread,
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
239 (cyg_addrword_t) 0,
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
240 "can0_thread",
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
241 (void *) can0_thread_data.stack,
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
242 1024 * sizeof(long),
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
243 &can0_thread_data.hdl,
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
244 &can0_thread_data.obj);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
245
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
246 cyg_thread_resume(can0_thread_data.hdl);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
247
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
248 cyg_scheduler_start();
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
249 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
250
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
251 #else // CYGOPT_IO_CAN_TX_EVENT_SUPPORT
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
252 #define N_A_MSG "TX event support required for IO/CAN"
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
253 #endif
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
254
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
255 #else // CYGFUN_KERNEL_API_C
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
256 #define N_A_MSG "Needs kernel C API"
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
257 #endif
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
258
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
259 #else // CYGPKG_IO_CAN && CYGPKG_KERNEL
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
260 #define N_A_MSG "Needs IO/CAN and Kernel"
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
261 #endif
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
262
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
263 #ifdef N_A_MSG
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
264 void
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
265 cyg_start( void )
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
266 {
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
267 CYG_TEST_INIT();
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
268 CYG_TEST_NA( N_A_MSG);
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
269 }
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
270 #endif // N_A_MSG
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
271
f929becf4af2 CAN driver, from Uwe Kindler
gthomas
parents:
diff changeset
272 // EOF serial4.c