original files of m241
This commit is contained in:
@@ -0,0 +1,345 @@
|
||||
/* wncanDevIO.h - WIND NET CAN Device I/O Interface header file. */
|
||||
|
||||
/* Copyright 2002-2003 Wind River Systems, Inc. */
|
||||
#include "copyright_wrs.h"
|
||||
|
||||
/*
|
||||
modification history
|
||||
--------------------
|
||||
01e,20sep04,lsg Gave enum to setFuncSwitch an identifier
|
||||
01d,17jul04,lsg Modified _wncan_ctlrconfig to access multiple ctrlSetConfig
|
||||
functions for FlexCAN
|
||||
01c,08apr04,lsg Added FlexCAN related info to WNCAN_CTLRCONFIG
|
||||
01b,21apr04,bjn Added WNCAN_REG, WNCAN_REG_SET and WNCAN_REG_GET
|
||||
01a,19Dec02,emcw created
|
||||
*/
|
||||
|
||||
/*
|
||||
DESCRIPTION
|
||||
|
||||
This file contains the type and function definitions of the Device I/O Interface feature
|
||||
of WIND NET CAN.
|
||||
|
||||
NOTE
|
||||
|
||||
RESTRICTIONS
|
||||
|
||||
INCLUDE FILES
|
||||
|
||||
CAN/wnCAN.h
|
||||
*/
|
||||
|
||||
#ifndef __INCwncanDevIOh
|
||||
#define __INCwncanDevIOh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* ==== Include files ==== */
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <iosLib.h>
|
||||
#include <rngLib.h>
|
||||
#include <semLib.h>
|
||||
#include <selectLib.h>
|
||||
#include <string.h>
|
||||
#include <CAN/wnCAN.h>
|
||||
|
||||
|
||||
/* ==== Constants ==== */
|
||||
|
||||
#define WNCAN_LG_BUF_SIZE 200
|
||||
#define WNCAN_MAX_DATA_LEN 8 /* max #bytes in CAN message data */
|
||||
#define WNCAN_DEFAULT_RINGBUF_SIZE 4 /* default #CAN msgs in internal buffers */
|
||||
|
||||
|
||||
/* ==== WNCAN DevIO interface ioctl() commands ==== */
|
||||
|
||||
/* Base command code */
|
||||
|
||||
#define DEVIO_CANCMD_BASE 100
|
||||
|
||||
/* Device commands */
|
||||
|
||||
#define WNCAN_HALT (DEVIO_CANCMD_BASE + 1)
|
||||
#define WNCAN_SLEEP (DEVIO_CANCMD_BASE + 2)
|
||||
#define WNCAN_WAKE (DEVIO_CANCMD_BASE + 3)
|
||||
#define WNCAN_TX_ABORT (DEVIO_CANCMD_BASE + 4)
|
||||
#define WNCAN_RXCHAN_GET (DEVIO_CANCMD_BASE + 5)
|
||||
#define WNCAN_TXCHAN_GET (DEVIO_CANCMD_BASE + 6)
|
||||
#define WNCAN_RTRREQCHAN_GET (DEVIO_CANCMD_BASE + 7)
|
||||
#define WNCAN_RTRRESPCHAN_GET (DEVIO_CANCMD_BASE + 8)
|
||||
#define WNCAN_BUSINFO_GET (DEVIO_CANCMD_BASE + 9)
|
||||
#define WNCAN_CONFIG_SET (DEVIO_CANCMD_BASE + 10)
|
||||
#define WNCAN_CONFIG_GET (DEVIO_CANCMD_BASE + 11)
|
||||
|
||||
/* Channel commands */
|
||||
|
||||
#define WNCAN_CHNCONFIG_SET (DEVIO_CANCMD_BASE + 12)
|
||||
#define WNCAN_CHNCONFIG_GET (DEVIO_CANCMD_BASE + 13)
|
||||
#define WNCAN_CHN_ENABLE (DEVIO_CANCMD_BASE + 14)
|
||||
#define WNCAN_CHN_TX (DEVIO_CANCMD_BASE + 15)
|
||||
#define WNCAN_CHNMSGLOST_GET (DEVIO_CANCMD_BASE + 16)
|
||||
#define WNCAN_CHNMSGLOST_CLEAR (DEVIO_CANCMD_BASE + 17)
|
||||
|
||||
/* Controller-specific commands */
|
||||
|
||||
#define WNCAN_CTLRCONFIG_SET (DEVIO_CANCMD_BASE + 18)
|
||||
#define WNCAN_CTLRCONFIG_GET (DEVIO_CANCMD_BASE + 19)
|
||||
/* Additinal Device commands */
|
||||
|
||||
#define WNCAN_REG_SET (DEVIO_CANCMD_BASE + 20)
|
||||
#define WNCAN_REG_GET (DEVIO_CANCMD_BASE + 21)
|
||||
|
||||
/* ==== CAN configuration access options ==== */
|
||||
|
||||
/*
|
||||
CAN device options
|
||||
Used in flags field of WNCAN_CONFIG struct
|
||||
*/
|
||||
|
||||
#define WNCAN_CFG_NONE 0 /* selects no elements */
|
||||
#define WNCAN_CFG_INFO 0x1 /* selects information elements only */
|
||||
#define WNCAN_CFG_GBLFILTER 0x2 /* selects global filter only */
|
||||
#define WNCAN_CFG_BITTIMING 0x4 /* selects bit timing only */
|
||||
#define WNCAN_CFG_ALL 0x7 /* selects all elements */
|
||||
|
||||
/*
|
||||
CAN channel options
|
||||
Used in flags field of WNCAN_CHNCONFIG struct
|
||||
*/
|
||||
|
||||
#define WNCAN_CHNCFG_NONE 0x000 /* selects no elements */
|
||||
#define WNCAN_CHNCFG_CHANNEL 0x100 /* selects channel information only */
|
||||
#define WNCAN_CHNCFG_LCLFILTER 0x200 /* selects local filter only */
|
||||
#define WNCAN_CHNCFG_RTR 0x400 /* selects RTR bit only */
|
||||
#define WNCAN_CHNCFG_MODE 0x800 /* selects channel mode only */
|
||||
#define WNCAN_CHNCFG_ALL 0xF00 /* selects all elements */
|
||||
|
||||
|
||||
/* ==== Structures used for setting/getting CAN configuration ==== */
|
||||
|
||||
/* CAN bus information */
|
||||
|
||||
typedef struct _wncan_businfo
|
||||
{
|
||||
WNCAN_BusStatus busStatus; /* bus status */
|
||||
WNCAN_BusError busError; /* bus error */
|
||||
} WNCAN_BUSINFO;
|
||||
|
||||
|
||||
/* CAN device configuration options */
|
||||
|
||||
typedef struct _wncan_config
|
||||
{
|
||||
UINT flags; /* access options */
|
||||
|
||||
/* read-only items */
|
||||
struct
|
||||
{
|
||||
WNCAN_VersionInfo version; /* WNC version */
|
||||
WNCAN_ControllerType ctrlType; /* CAN controller type */
|
||||
XtalFreq xtalfreq; /* crystal frequency */
|
||||
UCHAR numChannels; /* total # of channels */
|
||||
UINT baudRate; /* computed baudrate bits/sec */
|
||||
UINT samplePoint; /* percentage of bit time at
|
||||
which the bit is sampled.*/
|
||||
} info;
|
||||
|
||||
/* read/write items */
|
||||
struct
|
||||
{
|
||||
ULONG mask; /* filter mask */
|
||||
BOOL extended; /* extended flag */
|
||||
} filter;
|
||||
|
||||
struct
|
||||
{
|
||||
UCHAR tseg1; /* time quanta for segment 1 */
|
||||
UCHAR tseg2; /* time quanta for segment 2 */
|
||||
UCHAR brp; /* baud rate prescaler */
|
||||
UCHAR sjw; /* syncro jump width */
|
||||
BOOL oversample; /* normal or over-sampling option */
|
||||
} bittiming;
|
||||
|
||||
} WNCAN_CONFIG;
|
||||
|
||||
|
||||
/* CAN device register get/set configuration */
|
||||
|
||||
typedef struct _wncan_reg
|
||||
{
|
||||
UINT offset; /* Register offset from base to access */
|
||||
UCHAR * pData; /* Pointer to data buffer for read/write */
|
||||
UINT length; /* Length of data in bytes to read/write */
|
||||
} WNCAN_REG;
|
||||
|
||||
|
||||
/* CAN channel configuration options */
|
||||
|
||||
typedef struct _wncan_chnconfig
|
||||
{
|
||||
UINT flags; /* access options */
|
||||
|
||||
/* local filter mask */
|
||||
struct
|
||||
{
|
||||
ULONG mask; /* filter mask */
|
||||
BOOL extended; /* extended flag */
|
||||
} filter;
|
||||
|
||||
struct
|
||||
{
|
||||
ULONG id; /* CAN ID */
|
||||
BOOL extId; /* is ID extended or not? */
|
||||
UCHAR len; /* length */
|
||||
UCHAR data[WNCAN_MAX_DATA_LEN]; /* message data */
|
||||
} channel;
|
||||
|
||||
BOOL rtr; /* RTR bit setting */
|
||||
WNCAN_ChannelMode mode; /* channel mode */
|
||||
|
||||
} WNCAN_CHNCONFIG;
|
||||
|
||||
|
||||
/* CAN controller-specific configuration options */
|
||||
|
||||
typedef struct _wncan_ctlrconfig
|
||||
{
|
||||
WNCAN_ControllerType ctlrType;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR propseg; /* propagation segment */
|
||||
} toucanData;
|
||||
|
||||
struct
|
||||
{
|
||||
struct intLevelInfo_t{
|
||||
UCHAR intSrcNum; /*flexcan interrupt source number, always an input for WNCAN_CTLRCONFIG_SET
|
||||
and WNCAN_CTLRCONFIG_GET */
|
||||
UCHAR intLevel; /*flexcan interrupt level, for WNCAN_CTLRCONFIG_SET: input,
|
||||
for WNCAN_CTLRCONFIG_GET: output */
|
||||
UCHAR intPrioLevel;/* priority within interrupt level, for WNCAN_CTLRCONFIG_SET: input,
|
||||
for WNCAN_CTLRCONFIG_GET: output */
|
||||
} intLevelInfo;
|
||||
|
||||
UCHAR propseg;
|
||||
|
||||
enum setFuncSwitch_t{
|
||||
WNCAN_FLEXCAN_DEVIO_SET_INTLEVEL=0,
|
||||
WNCAN_FLEXCAN_DEVIO_SET_PROPSEG
|
||||
}setFuncSwitch;
|
||||
|
||||
} flexcanData;
|
||||
|
||||
/* Other controller-specific structs can be defined here */
|
||||
ULONG dummy; /* placeholder for future defs */
|
||||
|
||||
} ctlrData;
|
||||
|
||||
} WNCAN_CTLRCONFIG;
|
||||
|
||||
/* CAN message */
|
||||
|
||||
typedef struct _wncan_chnmsg
|
||||
{
|
||||
ULONG id; /* CAN ID */
|
||||
BOOL extId; /* is ID extended or not? */
|
||||
BOOL rtr; /* remote frame transmit request */
|
||||
UCHAR len; /* message length */
|
||||
UCHAR data[WNCAN_MAX_DATA_LEN]; /* message data */
|
||||
} WNCAN_CHNMSG;
|
||||
|
||||
|
||||
|
||||
/* ==== Internal Device I/O Structures (maybe move to private header file?) ==== */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FD_WNCAN_NONE,
|
||||
FD_WNCAN_DEVICE,
|
||||
FD_WNCAN_CHANNEL
|
||||
} WNCAN_FD_TYPE;
|
||||
|
||||
|
||||
typedef STATUS (*CTRLRCONFIGFNTYPE)(void*, void*);
|
||||
|
||||
typedef struct /* DevIO driver information */
|
||||
{
|
||||
DEV_HDR devHdr; /* standard I/O System device header */
|
||||
WNCAN_BoardType boardType; /* CAN board type */
|
||||
int boardIdx; /* CAN board index */
|
||||
int ctlrIdx; /* CAN controller index */
|
||||
int numOpenChans; /* number of open CAN channels */
|
||||
BOOL isDeviceOpen; /* whether CAN device has been init'ed;
|
||||
set after CAN_Init() called */
|
||||
SEM_ID mutex; /* mutex semaphore for memory access */
|
||||
WNCAN_DEVICE *wncDevice; /* WNCAN device data structure */
|
||||
|
||||
CTRLRCONFIGFNTYPE ctrlSetConfig; /* controller-specific functions */
|
||||
CTRLRCONFIGFNTYPE ctrlGetConfig;
|
||||
|
||||
} WNCAN_DEVIO_DRVINFO;
|
||||
|
||||
|
||||
typedef struct _devio_fdinfo /* DevIO file descriptor table info */
|
||||
{
|
||||
WNCAN_DEVIO_DRVINFO* wnDevIODrv; /* pointer to WNCAN_DEVIO_DRVINFO struct */
|
||||
WNCAN_FD_TYPE devType; /* indicates which type of data stored here,
|
||||
device or channel */
|
||||
SEL_WAKEUP_LIST selWakeupList; /* wakeup select list */
|
||||
|
||||
union
|
||||
{
|
||||
/* CAN device info */
|
||||
struct {
|
||||
struct _devio_fdinfo **chnInfo; /* allocated channel infos */
|
||||
} device;
|
||||
|
||||
/* CAN channel info */
|
||||
struct {
|
||||
BOOL enabled; /* channel up and running flag */
|
||||
int flag; /* channel access flag */
|
||||
ULONG channel; /* channel identifier */
|
||||
WNCAN_IntType intType; /* interrupt status type, WNCAN_INT_TX
|
||||
or WNCAN_INT_RX */
|
||||
RING_ID inputBuf; /* input data buffer */
|
||||
RING_ID outputBuf; /* output data buffer */
|
||||
} channel;
|
||||
} fdtype;
|
||||
|
||||
} WNCAN_DEVIO_FDINFO;
|
||||
|
||||
|
||||
/* ==== Function Prototypes ==== */
|
||||
|
||||
#if defined(__STDC__)
|
||||
extern STATUS wncDevIODevCreate(char*,int,int,int,WNCAN_DEVIO_DRVINFO**);
|
||||
extern int wncDevIOCreate(WNCAN_DEVIO_DRVINFO*, char*, int);
|
||||
extern int wncDevIODelete(WNCAN_DEVIO_DRVINFO*, char*);
|
||||
extern int wncDevIOOpen(WNCAN_DEVIO_DRVINFO*, char*, int, int);
|
||||
extern STATUS wncDevIOClose(WNCAN_DEVIO_FDINFO*);
|
||||
extern int wncDevIOReadBuf(WNCAN_DEVIO_FDINFO*, char*, size_t);
|
||||
extern int wncDevIOWriteBuf(WNCAN_DEVIO_FDINFO*, char*, size_t);
|
||||
STATUS wncDevIOIoctl(WNCAN_DEVIO_FDINFO*, int, int);
|
||||
#else
|
||||
extern STATUS wncDevIODevCreate();
|
||||
extern int wncDevIOCreate();
|
||||
extern int wncDevIODelete();
|
||||
extern int wncDevIOOpen();
|
||||
extern STATUS wncDevIOClose();
|
||||
extern int wncDevIOReadBuf();
|
||||
extern int wncDevIOWriteBuf();
|
||||
STATUS wncDevIOIoctl();
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCwncanDevIOh */
|
||||
Reference in New Issue
Block a user