X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/11132ea490f9e860744ee4f851c67e7fb4444231..04ac67cc3cac14cd601daacd0592121ec0b84012:/lincan/include/can.h diff --git a/lincan/include/can.h b/lincan/include/can.h index e310732..c758e5e 100644 --- a/lincan/include/can.h +++ b/lincan/include/can.h @@ -1,35 +1,60 @@ -#ifndef _CANMSG_T_H -#define _CANMSG_T_H +/**************************************************************************/ +/* File: can.h - CAN driver IOCTL and messages interface */ +/* */ +/* LinCAN - (Not only) Linux CAN bus driver */ +/* Copyright (C) 2002-2009 DCE FEE CTU Prague */ +/* Copyright (C) 2002-2009 Pavel Pisa */ +/* Funded by OCERA and FRESCOR IST projects */ +/* Based on CAN driver code by Arnaud Westenberg */ +/* */ +/* LinCAN is free software; you can redistribute it and/or modify it */ +/* under terms of the GNU General Public License as published by the */ +/* Free Software Foundation; either version 2, or (at your option) any */ +/* later version. LinCAN is distributed in the hope that it will be */ +/* useful, but WITHOUT ANY WARRANTY; without even the implied warranty */ +/* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ +/* General Public License for more details. You should have received a */ +/* copy of the GNU General Public License along with LinCAN; see file */ +/* COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, */ +/* Cambridge, MA 02139, USA. */ +/* */ +/* To allow use of LinCAN in the compact embedded systems firmware */ +/* and RT-executives (RTEMS for example), main authors agree with next */ +/* special exception: */ +/* */ +/* Including LinCAN header files in a file, instantiating LinCAN generics */ +/* or templates, or linking other files with LinCAN objects to produce */ +/* an application image/executable, does not by itself cause the */ +/* resulting application image/executable to be covered by */ +/* the GNU General Public License. */ +/* This exception does not however invalidate any other reasons */ +/* why the executable file might be covered by the GNU Public License. */ +/* Publication of enhanced or derived LinCAN files is required although. */ +/**************************************************************************/ +#ifndef _CAN_DRVAPI_T_H +#define _CAN_DRVAPI_T_H + +#ifdef __KERNEL__ + +#include #include #include -#ifndef PACKED -#define PACKED __attribute__((packed)) -#endif +#else /* __KERNEL__ */ -#define CAN_MSG_LENGTH 8 - -struct canmsg_t { - short flags; - int cob; - unsigned long id; - unsigned long timestamp; - unsigned int length; - unsigned char data[CAN_MSG_LENGTH]; -} PACKED; - -struct canfilt_t { - int flags; - int cob; - unsigned long id; - unsigned long mask; -}; +#include +#include +#include +#include + +#endif /* __KERNEL__ */ + +#include "./canmsg.h" -/* Definitions to use for canmsg_t flags */ -#define MSG_RTR (1<<0) -#define MSG_OVR (1<<1) -#define MSG_EXT (1<<2) +#ifdef __cplusplus +extern "C" { +#endif /* CAN ioctl magic number */ #define CAN_IOC_MAGIC 'd' @@ -37,7 +62,29 @@ struct canfilt_t { typedef unsigned long bittiming_t; typedef unsigned short channel_t; +/** + * struct can_baudparams_t - datatype for calling CONF_BAUDPARAMS IOCTL + * @flags: reserved for additional flags for chip configuration, should be written -1 or 0 + * @baudrate: baud rate in Hz + * @sjw: synchronization jump width (0-3) prescaled clock cycles + * @sampl_pt: sample point in % (0-100) sets (TSEG1+1)/(TSEG1+TSEG2+2) ratio + * + * The structure is used to configure new set of parameters into CAN controller chip. + * If default value of some field should be preserved, fill field by value -1. + */ +struct can_baudparams_t { + long flags; + long baudrate; + long sjw; + long sample_pt; +}; + /* CAN ioctl functions */ +#define CAN_DRV_QUERY _IO(CAN_IOC_MAGIC, 0) +#define CAN_DRV_QRY_BRANCH 0 /* returns driver branch value - "LINC" for LinCAN driver */ +#define CAN_DRV_QRY_VERSION 1 /* returns driver version as (major<<16) | (minor<<8) | patch */ +#define CAN_DRV_QRY_MSGFORMAT 2 /* format of canmsg_t structure */ + #define CMD_START _IOW(CAN_IOC_MAGIC, 1, channel_t) #define CMD_STOP _IOW(CAN_IOC_MAGIC, 2, channel_t) //#define CMD_RESET 3 @@ -53,6 +100,13 @@ typedef unsigned short channel_t; //#define CONF_FDISABLE #define STAT _IO(CAN_IOC_MAGIC, 9) -#define CONF_FILTER_QUE0 _IOW(CAN_IOC_MAGIC, 10, struct canfilt_t) +#define CANQUE_FILTER _IOW(CAN_IOC_MAGIC, 10, struct canfilt_t) +#define CANQUE_FLUSH _IO(CAN_IOC_MAGIC, 11) +#define CONF_BAUDPARAMS _IOW(CAN_IOC_MAGIC, 11, struct can_baudparams_t) +#define CANRTR_READ _IOWR(CAN_IOC_MAGIC, 12, struct canmsg_t) + +#ifdef __cplusplus +} /* extern "C"*/ +#endif -#endif /*_CANMSG_T_H*/ +#endif /*_CAN_DRVAPI_T_H*/