#include <pkgconf/hal.h>
#include <pkgconf/io_can.h>
-#include <pkgconf/io_can_loop.h>
+#include <pkgconf/devs_can_loop.h>
#include <cyg/hal/hal_io.h>
#include <cyg/io/io.h>
#include <cyg/hal/hal_intr.h>
#include <cyg/kernel/kapi.h>
-#ifdef CYGPKG_IO_CAN_LOOP
+#ifdef CYGPKG_DEVS_CAN_LOOP
//-------------------------------------------------------------------------
static bool loop_can_getevent(can_channel *priv, cyg_can_event *pevent, void *pdata);
static Cyg_ErrNo loop_can_set_config(can_channel *chan, cyg_uint32 key,
const void *xbuf, cyg_uint32 *len);
+static Cyg_ErrNo loop_can_get_config(can_channel *chan, cyg_uint32 key,
+ const void* buf, cyg_uint32* len);
static void loop_can_start_xmit(can_channel *chan);
static void loop_can_stop_xmit(can_channel *chan);
//-------------------------------------------------------------------------
// Transfer FIFOs
-#define FIFO_SIZE 16
+#define FIFO_SIZE 33
struct fifo
{
CAN_LOWLEVEL_FUNS(loop_can_lowlevel_funs,
loop_can_putmsg,
loop_can_getevent,
+ loop_can_get_config,
loop_can_set_config,
loop_can_start_xmit,
loop_can_stop_xmit
//-------------------------------------------------------------------------
// Hardware info for each serial line
-#ifdef CYGPKG_IO_CAN_LOOP_CAN0
+#ifdef CYGPKG_DEVS_CAN_LOOP_CAN0
static loop_can_info loop_can_info0 = {
&fifo0,
&fifo1
static cyg_can_event loop_can_rxbuf0[CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_RX];
#endif // CYGPKG_IO_SERIAL_LOOP_SERIAL0
-#ifdef CYGPKG_IO_CAN_LOOP_CAN1
+#ifdef CYGPKG_DEVS_CAN_LOOP_CAN1
static loop_can_info loop_can_info1 = {
&fifo1,
&fifo0
//-------------------------------------------------------------------------
// Channel descriptions:
//
-#ifdef CYGPKG_IO_CAN_LOOP_CAN0
+#ifdef CYGPKG_DEVS_CAN_LOOP_CAN0
CAN_CHANNEL_USING_INTERRUPTS(loop_can0_chan,
loop_can_lowlevel_funs,
loop_can_info0,
loop_can_txbuf0, CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_TX,
loop_can_rxbuf0, CYGNUM_DEVS_CAN_LOOP_CAN0_QUEUESIZE_RX
);
-#endif // CYGPKG_IO_CAN_LOOP_CAN1
+#endif // CYGPKG_DEVS_CAN_LOOP_CAN1
-#ifdef CYGPKG_IO_CAN_LOOP_CAN1
+#ifdef CYGPKG_DEVS_CAN_LOOP_CAN1
CAN_CHANNEL_USING_INTERRUPTS(loop_can1_chan,
loop_can_lowlevel_funs,
loop_can_info1,
loop_can_txbuf1, CYGNUM_DEVS_CAN_LOOP_CAN1_QUEUESIZE_TX,
loop_can_rxbuf1, CYGNUM_DEVS_CAN_LOOP_CAN1_QUEUESIZE_RX
);
-#endif // CYGPKG_IO_CAN_LOOP_CAN1
+#endif // CYGPKG_DEVS_CAN_LOOP_CAN1
//-------------------------------------------------------------------------
// And finally, the device table entries:
//
-#ifdef CYGPKG_IO_CAN_LOOP_CAN0
+#ifdef CYGPKG_DEVS_CAN_LOOP_CAN0
DEVTAB_ENTRY(loop_can_io0,
CYGDAT_DEVS_CAN_LOOP_CAN0_NAME,
0, // Does not depend on a lower level interface
loop_can_lookup, // CAN driver may need initializing
&loop_can0_chan
);
-#endif // CYGPKG_IO_CAN_LOOP_CAN0
+#endif // CYGPKG_DEVS_CAN_LOOP_CAN0
-#ifdef CYGPKG_IO_CAN_LOOP_CAN1
+#ifdef CYGPKG_DEVS_CAN_LOOP_CAN1
DEVTAB_ENTRY(loop_can_io1,
CYGDAT_DEVS_CAN_LOOP_CAN1_NAME,
0, // Does not depend on a lower level interface
loop_can_lookup, // CAN driver may need initializing
&loop_can1_chan
);
-#endif // CYGPKG_IO_CAN_LOOP_CAN1
+#endif // CYGPKG_DEVS_CAN_LOOP_CAN1
//-------------------------------------------------------------------------
loop_can_info *loop_chan = (loop_can_info *)chan->dev_priv;
struct fifo *fwr = loop_chan->write_fifo;
+#ifdef CYGOPT_IO_CAN_TX_EVENT_SUPPORT
struct fifo *frd = loop_chan->read_fifo;
+#endif
if( fwr->num == FIFO_SIZE )
{
return ENOERR;
}
+//-------------------------------------------------------------------------
+// Query device configuration
+
+static Cyg_ErrNo
+loop_can_get_config(can_channel *chan, cyg_uint32 key,
+ const void* buf, cyg_uint32* len)
+{
+ return ENOERR;
+}
+
//-------------------------------------------------------------------------
// Enable the transmitter on the device