annotate packages/devs/can/loop/current/src/loop_can.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 c6f0c6300d8b
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
1 //==========================================================================
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
2 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
3 // loop_can.c
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
4 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
5 // Loopback CAN device driver
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
6 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
7 //==========================================================================
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
9 // -------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
12 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
14 // the terms of the GNU General Public License as published by the Free
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
16 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
20 // for more details.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
21 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
22 // You should have received a copy of the GNU General Public License along
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
25 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
27 // or inline functions from this file, or you compile this file and link it
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
28 // with other works to produce a work based on this file, this file does not
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
30 // License. However the source code for this file must still be made available
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
32 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
34 // this file might be covered by the GNU General Public License.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
35 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license/
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
38 // -------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
40 //==========================================================================
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
41 //#####DESCRIPTIONBEGIN####
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
42 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
43 // Author(s): Uwe Kindler
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
44 // Contributors: Uwe Kindler
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
45 // Date: 2005-07-10
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
46 // Purpose: Loopback CAN device driver
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
47 // Description: This device driver implements a pair of CAN lines that are
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
48 // connected back-to-back. Data output to one will appear as
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
49 // input on the other. This process in part driven by an alarm
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
50 // object which provides a degree of separation between the two
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
51 // channels.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
52 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
53 //####DESCRIPTIONEND####
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
54 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
55 //==========================================================================
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
56
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
57 #include <pkgconf/hal.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
58 #include <pkgconf/io_can.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
59 #include <pkgconf/devs_can_loop.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
60 #include <cyg/hal/hal_io.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
61
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
62 #include <cyg/io/io.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
63 #include <cyg/io/devtab.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
64 #include <cyg/io/can.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
65 #include <cyg/hal/hal_intr.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
66 #include <cyg/kernel/kapi.h>
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
67
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
68 #ifdef CYGPKG_DEVS_CAN_LOOP
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
69
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
70 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
71
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
72 extern void diag_printf(const char *fmt, ...);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
73
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
74 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
75 // Forward definitions
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
76
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
77 static bool loop_can_init(struct cyg_devtab_entry *devtab_entry);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
78 static bool loop_can_putmsg(can_channel *priv, cyg_can_message *pmsg, void *pdata);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
79 static Cyg_ErrNo loop_can_lookup(struct cyg_devtab_entry **tab,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
80 struct cyg_devtab_entry *sub_tab,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
81 const char *name);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
82 static bool loop_can_getevent(can_channel *priv, cyg_can_event *pevent, void *pdata);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
83 static Cyg_ErrNo loop_can_set_config(can_channel *chan, cyg_uint32 key,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
84 const void *xbuf, cyg_uint32 *len);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
85 static Cyg_ErrNo loop_can_get_config(can_channel *chan, cyg_uint32 key,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
86 const void* buf, cyg_uint32* len);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
87 static void loop_can_start_xmit(can_channel *chan);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
88 static void loop_can_stop_xmit(can_channel *chan);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
89
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
90 static void alarm_handler(cyg_handle_t alarm, cyg_addrword_t data);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
91
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
92
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
93 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
94 // Alarm object for feeding data back into CAN channels
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
95
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
96 static cyg_alarm alarm_obj;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
97
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
98 static cyg_handle_t alarm_handle;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
99
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
100 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
101 // Transfer FIFOs
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
102
2424
4c366bd69cd5 * tests/can_overrun1.c (can0_thread): Fix the length of the data
asl
parents: 2414
diff changeset
103 #define FIFO_SIZE 33
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
104
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
105 struct fifo
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
106 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
107 cyg_bool tx_enable;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
108 volatile int head;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
109 volatile int tail;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
110 volatile int num;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
111 volatile cyg_can_event buf[FIFO_SIZE+1];
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
112 };
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
113
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
114 static struct fifo fifo0 = { false, 0, 0, 0 }; // from CAN0 to CAN1
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
115 static struct fifo fifo1 = { false, 0, 0, 0 }; // from CAN1 to CAN0
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
116
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
117 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
118
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
119 #define BUFSIZE 128
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
120
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
121 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
122 // Info for each serial device controlled
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
123
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
124 typedef struct loop_can_info {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
125 struct fifo *write_fifo;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
126 struct fifo *read_fifo;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
127 } loop_can_info;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
128
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
129 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
130 // Callback functions exported by this driver
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
131 CAN_LOWLEVEL_FUNS(loop_can_lowlevel_funs,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
132 loop_can_putmsg,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
133 loop_can_getevent,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
134 loop_can_get_config,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
135 loop_can_set_config,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
136 loop_can_start_xmit,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
137 loop_can_stop_xmit
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
138 );
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
139
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
140 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
141 // Hardware info for each serial line
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
142
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
143 #ifdef CYGPKG_DEVS_CAN_LOOP_CAN0
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
144 static loop_can_info loop_can_info0 = {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
145 &fifo0,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
146 &fifo1
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
147 };
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
148
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
149 static cyg_can_message loop_can_txbuf0[CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_TX];
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
150 static cyg_can_event loop_can_rxbuf0[CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_RX];
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
151 #endif // CYGPKG_IO_SERIAL_LOOP_SERIAL0
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
152
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
153 #ifdef CYGPKG_DEVS_CAN_LOOP_CAN1
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
154 static loop_can_info loop_can_info1 = {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
155 &fifo1,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
156 &fifo0
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
157 };
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
158
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
159 static cyg_can_message loop_can_txbuf1[CYGNUM_DEVS_CAN_LOOP_CAN1_QUEUESIZE_TX];
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
160 static cyg_can_event loop_can_rxbuf1[CYGNUM_DEVS_CAN_LOOP_CAN1_QUEUESIZE_RX];
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
161 #endif // CYGPKG_IO_SERIAL_LOOP_SERIAL1
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
162
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
163
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
164
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
165 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
166 // Channel descriptions:
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
167 //
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
168 #ifdef CYGPKG_DEVS_CAN_LOOP_CAN0
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
169 CAN_CHANNEL_USING_INTERRUPTS(loop_can0_chan,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
170 loop_can_lowlevel_funs,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
171 loop_can_info0,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
172 CYG_CAN_BAUD_RATE(CYGNUM_DEVS_CAN_LOOP_CAN0_KBAUD),
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
173 loop_can_txbuf0, CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_TX,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
174 loop_can_rxbuf0, CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_RX
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
175 );
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
176 #endif // CYGPKG_DEVS_CAN_LOOP_CAN1
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
177
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
178 #ifdef CYGPKG_DEVS_CAN_LOOP_CAN1
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
179 CAN_CHANNEL_USING_INTERRUPTS(loop_can1_chan,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
180 loop_can_lowlevel_funs,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
181 loop_can_info1,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
182 CYG_CAN_BAUD_RATE(CYGNUM_DEVS_CAN_LOOP_CAN1_KBAUD),
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
183 loop_can_txbuf1, CYGNUM_DEVS_CAN_LOOP_CAN1_QUEUESIZE_TX,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
184 loop_can_rxbuf1, CYGNUM_DEVS_CAN_LOOP_CAN1_QUEUESIZE_RX
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
185 );
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
186 #endif // CYGPKG_DEVS_CAN_LOOP_CAN1
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
187
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
188
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
189
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
190 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
191 // And finally, the device table entries:
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
192 //
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
193 #ifdef CYGPKG_DEVS_CAN_LOOP_CAN0
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
194 DEVTAB_ENTRY(loop_can_io0,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
195 CYGDAT_DEVS_CAN_LOOP_CAN0_NAME,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
196 0, // Does not depend on a lower level interface
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
197 &cyg_io_can_devio,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
198 loop_can_init,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
199 loop_can_lookup, // CAN driver may need initializing
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
200 &loop_can0_chan
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
201 );
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
202 #endif // CYGPKG_DEVS_CAN_LOOP_CAN0
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
203
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
204 #ifdef CYGPKG_DEVS_CAN_LOOP_CAN1
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
205 DEVTAB_ENTRY(loop_can_io1,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
206 CYGDAT_DEVS_CAN_LOOP_CAN1_NAME,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
207 0, // Does not depend on a lower level interface
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
208 &cyg_io_can_devio,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
209 loop_can_init,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
210 loop_can_lookup, // CAN driver may need initializing
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
211 &loop_can1_chan
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
212 );
2414
c6f0c6300d8b * src/loop_can.c: Change all CYGPKG_IO_CAN_* to CYGPKG_DEVS_CAN_*
asl
parents: 2405
diff changeset
213 #endif // CYGPKG_DEVS_CAN_LOOP_CAN1
2405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
214
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
215 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
216
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
217 static bool
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
218 loop_can_config_channel(can_channel *chan, cyg_can_info_t *new_config, bool init)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
219 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
220 if (new_config != &chan->config) {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
221 chan->config = *new_config;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
222 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
223 return true;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
224 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
225
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
226 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
227 // Function to initialize the device. Called at bootstrap time.
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
228
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
229 bool loop_can_init(struct cyg_devtab_entry *tab)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
230 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
231 can_channel *chan = (can_channel *)tab->priv;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
232
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
233 (chan->callbacks->can_init)(chan);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
234
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
235 // Set up alarm for feeding data back into channels
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
236
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
237 cyg_alarm_create( cyg_real_time_clock(),
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
238 alarm_handler,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
239 0,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
240 &alarm_handle,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
241 &alarm_obj);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
242
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
243 cyg_alarm_initialize( alarm_handle, 1, 1 );
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
244
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
245 loop_can_config_channel(chan, &chan->config, true);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
246
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
247 return true;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
248 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
249
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
250 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
251 // This routine is called when the device is "looked" up (i.e. attached)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
252
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
253 static Cyg_ErrNo
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
254 loop_can_lookup(struct cyg_devtab_entry **tab,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
255 struct cyg_devtab_entry *sub_tab,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
256 const char *name)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
257 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
258 can_channel *chan = (can_channel *)(*tab)->priv;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
259 (chan->callbacks->can_init)(chan);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
260 return ENOERR;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
261 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
262
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
263 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
264 // Return 'true' if message is sent to device
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
265
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
266 bool
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
267 loop_can_putmsg(can_channel *chan, cyg_can_message *pmsg, void *pdata)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
268 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
269 loop_can_info *loop_chan = (loop_can_info *)chan->dev_priv;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
270
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
271 struct fifo *fwr = loop_chan->write_fifo;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
272 #ifdef CYGOPT_IO_CAN_TX_EVENT_SUPPORT
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
273 struct fifo *frd = loop_chan->read_fifo;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
274 #endif
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
275
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
276 if( fwr->num == FIFO_SIZE )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
277 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
278 return false;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
279 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
280
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
281 fwr->buf[fwr->tail].msg = *pmsg;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
282 fwr->buf[fwr->tail].flags = CYGNUM_CAN_EVENT_RX;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
283 fwr->num++;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
284 fwr->tail = (fwr->tail + 1) % FIFO_SIZE;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
285
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
286 #ifdef CYGOPT_IO_CAN_TX_EVENT_SUPPORT
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
287 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
288 // if TX events are supported we insert a TX event into read fifo
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
289 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
290 if( frd->num < FIFO_SIZE )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
291 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
292 frd->buf[frd->tail].msg = *pmsg;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
293 frd->buf[frd->tail].flags = CYGNUM_CAN_EVENT_TX;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
294 frd->num++;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
295 frd->tail = (frd->tail + 1) % FIFO_SIZE;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
296 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
297 #endif
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
298
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
299 return true;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
300 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
301
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
302 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
303
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
304 bool loop_can_getevent(can_channel *chan, cyg_can_event *pevent, void *pdata)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
305 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
306 loop_can_info *loop_chan = (loop_can_info *)chan->dev_priv;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
307
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
308 struct fifo *frd = loop_chan->read_fifo;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
309
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
310 while( frd->num == 0 )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
311 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
312 continue;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
313 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
314
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
315 *pevent = frd->buf[frd->head];
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
316
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
317
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
318 #ifdef CYGOPT_IO_CAN_SUPPORT_TIMESTAMP
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
319 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
320 // if timestamps are supported then we store a actual timestamp into
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
321 // CAN event
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
322 //
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
323 pevent->timestamp = cyg_current_time();
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
324 #endif // CYGOPT_IO_CAN_SUPPORT_TIMESTAMP
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
325
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
326 frd->num--;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
327 frd->head = (frd->head + 1) % FIFO_SIZE;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
328
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
329 return true;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
330 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
331
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
332 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
333
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
334 static Cyg_ErrNo
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
335 loop_can_set_config(can_channel *chan, cyg_uint32 key,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
336 const void *xbuf, cyg_uint32 *len)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
337 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
338 return ENOERR;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
339 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
340
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
341 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
342 // Query device configuration
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
343
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
344 static Cyg_ErrNo
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
345 loop_can_get_config(can_channel *chan, cyg_uint32 key,
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
346 const void* buf, cyg_uint32* len)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
347 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
348 return ENOERR;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
349 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
350
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
351
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
352 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
353 // Enable the transmitter on the device
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
354
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
355 static void
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
356 loop_can_start_xmit(can_channel *chan)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
357 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
358 loop_can_info *loop_chan = (loop_can_info *)chan->dev_priv;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
359
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
360 loop_chan->write_fifo->tx_enable = true;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
361
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
362 (chan->callbacks->xmt_msg)(chan, 0);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
363 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
364
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
365 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
366 // Disable the transmitter on the device
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
367
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
368 static void
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
369 loop_can_stop_xmit(can_channel *chan)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
370 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
371 loop_can_info *loop_chan = (loop_can_info *)chan->dev_priv;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
372
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
373 loop_chan->write_fifo->tx_enable = false;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
374 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
375
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
376 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
377
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
378 static void alarm_handler(cyg_handle_t alarm, cyg_addrword_t data)
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
379 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
380 can_channel *chan0 = &loop_can0_chan;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
381 can_channel *chan1 = &loop_can1_chan;
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
382
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
383
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
384 while(fifo0.num )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
385 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
386 (chan1->callbacks->rcv_event)(chan1, 0);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
387
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
388 if(fifo0.tx_enable )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
389 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
390 (chan0->callbacks->xmt_msg)(chan0, 0);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
391 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
392 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
393
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
394 while(fifo1.num )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
395 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
396 (chan0->callbacks->rcv_event)(chan0, 0);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
397
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
398 if(fifo1.tx_enable )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
399 {
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
400 (chan1->callbacks->xmt_msg)(chan1, 0);
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
401 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
402 } // while( fifo1.num )
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
403 }
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
404
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
405
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
406 #endif // CYGPKG_IO_CAN_LOOP
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
407
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
408 //-------------------------------------------------------------------------
9486e0f8136d CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents: 2377
diff changeset
409 // EOF loop_can.c