58#define SCI_MAJOR_VERSION 3
67#define SCI_MINOR_VERSION 0
73#define SCI_VER (SCI_MAJOR_VERSION*100+SCI_MINOR_VERSION)
91#define SCI_IDENTIFIER "LINUX,SOCAN"
106#define SCI_PLUGPORT_START 128
114#define SCI_MAX_PLUGPORTS 16
117#define sci_object_type sci_Object_Type
120#define sci_return sci_Return
123#define sci_bitrate sci_Bitrate
126#define sci_errcode sci_Errcode
129#define sci_object sci_Object
132#define sci_struc sci_Struc
135#define SCI_M(err,str) {err,#err}
141 "no error has occurred"), \
142 SCI_M(SCI_PORT_ERR, \
143 "the port-parameter was wrong"), \
145 "the CAN-ID was wrong"), \
146 SCI_M(SCI_TYPE_ERR, \
147 "the object-type is unknown"), \
148 SCI_M(SCI_BITRATE_ERR, \
149 "a wrong bit-rate was chosen"), \
150 SCI_M(SCI_SET_CALLB_ERR, \
151 "callback was already defined"), \
152 SCI_M(SCI_MODE_ERR, \
153 "an operation was performed on an object of a type that doesn't " \
154 "support that operation"), \
155 SCI_M(SCI_LENGTH_ERR, \
156 "an object was read or written to with a wrong length"), \
157 SCI_M(SCI_ACCESS_ERR, \
158 "tried to access an already owned object"), \
159 SCI_M(SCI_TIMEOUT_ERR, \
160 "a timeout has occurred"), \
161 SCI_M(SCI_TIMEOUT_VAL_ERR, \
162 "the timeout-value is out of range"), \
163 SCI_M(SCI_OFF_BUS_ERR, \
164 "the CAN-controller is in an off-bus state"), SCI_M(SCI_BUS_ERR, \
165 "a CAN-bus error was recognized"), \
166 SCI_M(SCI_AUTHORIZE_ERR, \
167 "Only the first process that accesses sci is allowed to initialize " \
169 SCI_M(SCI_DVR_OPEN_ERR, \
170 "the CAN-Driver couldn't be opened"), \
171 SCI_M(SCI_DVR_ACCESS_ERR, \
172 "the driver couldn't be accessed, this is an internal error"), \
173 SCI_M(SCI_HW_INIT_ERR, \
174 "general hardware initialization error"), \
175 SCI_M(SCI_RESET_ERR, \
176 "hardware reset failed"), \
177 SCI_M(SCI_CHIP_CONF_ERR, \
178 "wrong placement of CAN chip (only for certain implementations of " \
181 "missing environment variable (only for certain implementations of " \
183 SCI_M(SCI_PLUGPORT_ERR, \
184 "plug-port number is out of range (must be between " \
185 "SCI_PLUGPORT_START and SCI_PLUGPORT_START+SCI_MAX_PLUGPORTS-1"), \
186 SCI_M(SCI_PLUG_DEF_ERR, \
187 "the plug-port was already defined or should have been defined " \
189 SCI_M(SCI_OBJ_UNDEF_ERR, \
190 "for sci_get_object(), the CAN object is not defined"), \
191 SCI_M(SCI_ERR_GENERAL, \
284typedef int sci_Return;
346#define SCI_NUM_ERRCODES (SCI_ERR_GENERAL+1)
354#define SCI_ERRCODE(sci_ret) (((sci_ret) & ~SCI_ERROR) >> 16)
362#define SCI_ERR(errcode) (SCI_ERROR | ((errcode)<<16))
400 int h_len,
char *h_data);
518extern sci_Return sci_init(
sci_Struc *s_struc,
520extern sci_Return sci_reset(
sci_Struc *s_struc,
unsigned short port);
571 unsigned short port,
int id);
612 unsigned short *port,
int *
id,
int *length,
652 unsigned long long *pstamp,
int *pvalid,
653 unsigned char *mode,
unsigned char *irq_cnt);
681extern sci_Return sci_link_object(
sci_Struc *s_struc,
682 unsigned short read_port ,
int read_id,
683 unsigned short write_port,
int write_id,
684 int length,
int timeout,
685 void *read_user,
void *write_user);
750 unsigned short port,
int id,
int length,
810 unsigned long inhibit_time);
984 char *data,
unsigned long *rest_time);
1114 unsigned short real_port,
1120extern int sci_predef_dump(
void);
1121extern void sci_monitor_enable(
void);
1122extern void sci_monitor_disable(
void);
1123extern void sci_monitor_wait_enable(
void);
1124extern void sci_monitor_wait_disable(
void);
1125extern int sci_set_monitor(
int id,
int port,
int do_monitor);
1131extern void sci_print_bitrate(
sci_Bitrate bitrate);
1132extern void sci_print_obj_struc(
sci_Object *
object);
1133extern void sci_print_thread_struc(
sci_Struc *s_struc);
1134extern void sci_print_thread_strucs(
void);
1135extern sci_Struc *get_sci_Struc(
int index);
1136extern int sci_show_dbg(
void);
1137extern int sci_help(
void);
1138extern void sci_dbg_out(
char *str);
1139extern void sci_dbg_assert(
int i);
1140extern void sci_dbg_flush(
int i);
1141extern void sci_dbg_tracelevel(
int i);
sci_Return sci_get_errcode(sci_Struc *s_struc, sci_Errcode *errcode)
void(* sci_Plug_Func)(int l_len, char *l_data, int h_len, char *h_data)
void sci_print_status(sci_Return flag)
sci_Return sci_open(sci_Struc **s_struc, const char *app_name, sci_Errcode *err)
char * sci_str_err(sci_Errcode err)
sci_Return sci_get_timestamp(sci_Struc *s_struc, sci_Object *object, unsigned long long *pstamp, int *pvalid, unsigned char *mode, unsigned char *irq_cnt)
sci_Return sci_obj_dump_buf(char *buf, sci_Struc *s_struc, sci_Object *object)
sci_Return sci_read(sci_Struc *s_struc, sci_Object *object, char *data)
enum sci_Errcode_Constants sci_Errcode
void * sci_get_user(sci_Object *object)
sci_Return sci_get_bitrate(sci_Struc *s_struc, unsigned short port, sci_Bitrate *bitrate)
sci_Return sci_set_inhibit(sci_Struc *s_struc, sci_Object *object, unsigned long inhibit_time)
int(* sci_Plug_Lencalc)(int h_len, int *l_len)
sci_Return sci_write(sci_Struc *s_struc, sci_Object *object, char *data)
char * sci_str_status(sci_Return flag)
sci_Return sci_set_callback(sci_Struc *s_struc, sci_Object *object, void *f)
sci_Return sci_read_now(sci_Struc *s_struc, sci_Object *object, char *data)
enum sci_Bitrate_Constants sci_Bitrate
sci_Return sci_close(sci_Struc **s_struc)
sci_Return sci_queue_read(sci_Struc *s_struc, sci_Object **object, char *data)
sci_Return sci_write_inhibit(sci_Struc *s_struc, sci_Object *object, char *data, unsigned long *rest_time)
sci_Return sci_get_object(sci_Struc *s_struc, sci_Object **object, unsigned short port, int id)
sci_Return sci_init_object(sci_Struc *s_struc, sci_Object **object, unsigned short port, int id, int length, int timeout, sci_Object_Type type, void *userp)
sci_Return sci_delete_object(sci_Struc *s_struc, sci_Object **object)
void sci_print_err(sci_Errcode err)
sci_Return sci_def_plug_in(unsigned short plug_port, unsigned short real_port, sci_Plug_Func h2l, sci_Plug_Func l2h, sci_Plug_Lencalc lcalc, sci_Errcode *err)
sci_Return sci_get_info(sci_Struc *s_struc, sci_Object *object, unsigned short *port, int *id, int *length, int *timeout, sci_Object_Type *type)