socan 1.2.1
Linux SocketCAN higher level library
Loading...
Searching...
No Matches
sci.h
Go to the documentation of this file.
1
32/*
33summary:
34 This is the Simple CAN Interface, a library that provides types and
35 functions to work with a CAN bus interface in a hardware independent way.
36*/
37
38#ifndef SCI_H
39#define SCI_H
40
41/* ----------------------------------------------
42 * includes
43 * ---------------------------------------------- */
44
45#include <limits.h>
46
47/* ----------------------------------------------
48 * macros
49 * ---------------------------------------------- */
50
58#define SCI_MAJOR_VERSION 3
59
67#define SCI_MINOR_VERSION 0
68
73#define SCI_VER (SCI_MAJOR_VERSION*100+SCI_MINOR_VERSION)
74
91#define SCI_IDENTIFIER "LINUX,SOCAN"
92
106#define SCI_PLUGPORT_START 128
107/* This must be a power of 2.*/
108
114#define SCI_MAX_PLUGPORTS 16
115
117#define sci_object_type sci_Object_Type
118
120#define sci_return sci_Return
121
123#define sci_bitrate sci_Bitrate
124
126#define sci_errcode sci_Errcode
127
129#define sci_object sci_Object
130
132#define sci_struc sci_Struc
133
135#define SCI_M(err,str) {err,#err}
136
138#define SCI_ERRS \
139 { \
140 SCI_M(SCI_NO_ERR, \
141 "no error has occurred"), \
142 SCI_M(SCI_PORT_ERR, \
143 "the port-parameter was wrong"), \
144 SCI_M(SCI_ID_ERR, \
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 " \
168 "ports"), \
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 " \
179 "sci)"), \
180 SCI_M(SCI_ENV_ERR, \
181 "missing environment variable (only for certain implementations of " \
182 "sci)"), \
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 " \
188 "but wasn't"), \
189 SCI_M(SCI_OBJ_UNDEF_ERR, \
190 "for sci_get_object(), the CAN object is not defined"), \
191 SCI_M(SCI_ERR_GENERAL, \
192 "general error") \
193 }
194
195/* ----------------------------------------------
196 * types
197 * ---------------------------------------------- */
198
230
280
281/* bits above 15 except highest (SCI_ERROR) reserved for sci_Errcode */
282/* INT_MIN is defined in limits.h */
283
284typedef int sci_Return;
285/* when an error occurred, the following conditions apply (be "ret" the return-
286 value):
287 (ret<0) and (ret & SCI_ERROR)
288*/
289
302
303
342/* comprehensive list of error-codes, SCI_ERR_GENERAL is a general (not
343 further specified) error */
344
346#define SCI_NUM_ERRCODES (SCI_ERR_GENERAL+1)
347/* this should be adapted if error codes are added after SCI_ERR_GENERAL */
348
354#define SCI_ERRCODE(sci_ret) (((sci_ret) & ~SCI_ERROR) >> 16)
355/* can now be used instead of sci_get_errcode */
356
362#define SCI_ERR(errcode) (SCI_ERROR | ((errcode)<<16))
363/* create sci_return from SCI_ERROR and an sci_errcode */
364
385
399typedef void (*sci_Plug_Func)(int l_len, char *l_data,
400 int h_len, char *h_data);
401
407typedef int (*sci_Plug_Lencalc)(int h_len, int *l_len);
408
422typedef struct sci_struc_s sci_Struc;
423
424/*____________________________________________________________*/
425/* Functions */
426/*____________________________________________________________*/
427
438extern char *sci_str_status(sci_Return flag);
439
444extern void sci_print_status(sci_Return flag);
445
456extern char *sci_str_err(sci_Errcode err);
457
462extern void sci_print_err(sci_Errcode err);
463
493extern sci_Return sci_open(sci_Struc **s_struc, const char *app_name,
494 sci_Errcode *err);
495
512extern sci_Return sci_close(sci_Struc **s_struc);
513
514#if 0
515
516/* Legacy functions not implemented here: */
517
518extern sci_Return sci_init(sci_Struc *s_struc,
519 unsigned short port, sci_Bitrate bitrate);
520extern sci_Return sci_reset(sci_Struc *s_struc, unsigned short port);
521#endif
522
538extern sci_Return sci_get_bitrate(sci_Struc *s_struc,
539 unsigned short port, sci_Bitrate *bitrate);
540
554extern sci_Return sci_get_errcode(sci_Struc *s_struc, sci_Errcode *errcode);
555
570extern sci_Return sci_get_object(sci_Struc *s_struc, sci_Object **object,
571 unsigned short port, int id);
572
581extern void *sci_get_user(sci_Object *object);
582
611extern sci_Return sci_get_info(sci_Struc *s_struc, sci_Object *object,
612 unsigned short *port, int *id, int *length,
613 int *timeout, sci_Object_Type *type);
614
651extern sci_Return sci_get_timestamp(sci_Struc *s_struc, sci_Object *object,
652 unsigned long long *pstamp, int *pvalid,
653 unsigned char *mode, unsigned char *irq_cnt);
654
676extern sci_Return sci_obj_dump_buf(char *buf,
677 sci_Struc *s_struc, sci_Object *object);
678#if 0
679extern sci_Return sci_obj_dump(sci_Struc *s_struc, sci_Object *object);
680 /* object-initialization */
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);
686#endif
687
749extern sci_Return sci_init_object(sci_Struc *s_struc, sci_Object **object,
750 unsigned short port, int id, int length,
751 int timeout, sci_Object_Type type, void *userp);
752#if 0
753extern sci_Return sci_dup_object(sci_Struc *s_struc, sci_Object **dup_object,
754 sci_Object *object, void *userp);
755#endif
756
778extern sci_Return sci_delete_object(sci_Struc *s_struc, sci_Object **object);
779
809extern sci_Return sci_set_inhibit(sci_Struc *s_struc, sci_Object *object,
810 unsigned long inhibit_time);
811
836extern sci_Return sci_read_now(sci_Struc *s_struc, sci_Object *object,
837 char *data);
838#if 0
839extern sci_Return sci_read_new(sci_Struc *s_struc, sci_Object *object,
840 char *data);
841#endif
842
885extern sci_Return sci_read(sci_Struc *s_struc, sci_Object *object,
886 char *data);
887
924extern sci_Return sci_write(sci_Struc *s_struc, sci_Object *object,
925 char *data);
926
983extern sci_Return sci_write_inhibit(sci_Struc *s_struc, sci_Object *object,
984 char *data, unsigned long *rest_time);
985
1008extern sci_Return sci_set_callback(sci_Struc *s_struc, sci_Object *object,
1009 void *f);
1010
1054extern sci_Return sci_queue_read(sci_Struc *s_struc, sci_Object **object,
1055 char *data);
1056
1113extern sci_Return sci_def_plug_in(unsigned short plug_port,
1114 unsigned short real_port,
1116 sci_Plug_Lencalc lcalc,
1117 sci_Errcode *err);
1118
1119#if 0
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);
1126extern char *sci_str_status(sci_Return flag);
1127extern void sci_print_status(sci_Return flag);
1128extern char *sci_str_err(sci_Errcode err);
1129extern void sci_print_err(sci_Errcode err);
1130extern char *sci_str_bitrate(sci_Bitrate bitrate);
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);
1142#endif
1143
1144#endif
sci_Return sci_get_errcode(sci_Struc *s_struc, sci_Errcode *errcode)
Definition sci.c:602
void(* sci_Plug_Func)(int l_len, char *l_data, int h_len, char *h_data)
Definition sci.h:399
void sci_print_status(sci_Return flag)
Definition sci.c:342
sci_Return sci_open(sci_Struc **s_struc, const char *app_name, sci_Errcode *err)
Definition sci.c:470
sci_Return_Constants
Definition sci.h:267
@ SCI_EXISTS
Definition sci.h:275
@ SCI_NOTHING
Definition sci.h:268
@ SCI_WAIT
Definition sci.h:276
@ SCI_INCONSISTENT
Definition sci.h:274
@ SCI_OLD_DATA
Definition sci.h:269
@ SCI_ERROR
Definition sci.h:278
@ SCI_LOST
Definition sci.h:270
@ SCI_RESETTED
Definition sci.h:273
@ SCI_TMOUT
Definition sci.h:272
char * sci_str_err(sci_Errcode err)
Definition sci.c:347
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)
Definition sci.c:691
sci_Return sci_obj_dump_buf(char *buf, sci_Struc *s_struc, sci_Object *object)
Definition sci.c:717
sci_Return sci_read(sci_Struc *s_struc, sci_Object *object, char *data)
Definition sci.c:1089
enum sci_Errcode_Constants sci_Errcode
void * sci_get_user(sci_Object *object)
Definition sci.c:649
sci_Return sci_get_bitrate(sci_Struc *s_struc, unsigned short port, sci_Bitrate *bitrate)
Definition sci.c:539
sci_Bitrate_Constants
Definition sci.h:293
@ SCI_1000KB
Definition sci.h:293
@ SCI_125KB
Definition sci.h:296
@ SCI_100KB
Definition sci.h:297
@ SCI_50KB
Definition sci.h:299
@ SCI_250KB
Definition sci.h:295
@ SCI_66KB
Definition sci.h:298
@ SCI_20KB
Definition sci.h:300
@ SCI_500KB
Definition sci.h:294
sci_Return sci_set_inhibit(sci_Struc *s_struc, sci_Object *object, unsigned long inhibit_time)
Definition sci.c:949
sci_Object_Type
Definition sci.h:225
@ SCI_READ
Definition sci.h:225
@ SCI_REMOTE_READ
Definition sci.h:227
@ SCI_REMOTE_WRITE
Definition sci.h:228
@ SCI_WRITE
Definition sci.h:226
int(* sci_Plug_Lencalc)(int h_len, int *l_len)
Definition sci.h:407
sci_Return sci_write(sci_Struc *s_struc, sci_Object *object, char *data)
Definition sci.c:1027
char * sci_str_status(sci_Return flag)
Definition sci.c:327
sci_Return sci_set_callback(sci_Struc *s_struc, sci_Object *object, void *f)
Definition sci.c:969
sci_Return sci_read_now(sci_Struc *s_struc, sci_Object *object, char *data)
Definition sci.c:1078
enum sci_Bitrate_Constants sci_Bitrate
sci_Return sci_close(sci_Struc **s_struc)
Definition sci.c:505
sci_Return sci_queue_read(sci_Struc *s_struc, sci_Object **object, char *data)
Definition sci.c:1099
sci_Return sci_write_inhibit(sci_Struc *s_struc, sci_Object *object, char *data, unsigned long *rest_time)
Definition sci.c:1033
sci_Return sci_get_object(sci_Struc *s_struc, sci_Object **object, unsigned short port, int id)
Definition sci.c:613
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)
Definition sci.c:754
sci_Return sci_delete_object(sci_Struc *s_struc, sci_Object **object)
Definition sci.c:861
void sci_print_err(sci_Errcode err)
Definition sci.c:377
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)
Definition sci.c:431
sci_Errcode_Constants
Definition sci.h:311
@ SCI_ID_ERR
Definition sci.h:313
@ SCI_AUTHORIZE_ERR
Definition sci.h:327
@ SCI_PORT_ERR
Definition sci.h:312
@ SCI_ERR_GENERAL
Definition sci.h:340
@ SCI_MODE_ERR
Definition sci.h:317
@ SCI_ACCESS_ERR
Definition sci.h:321
@ SCI_PLUGPORT_ERR
Definition sci.h:334
@ SCI_BITRATE_ERR
Definition sci.h:315
@ SCI_TYPE_ERR
Definition sci.h:314
@ SCI_NO_ERR
Definition sci.h:311
@ SCI_HW_INIT_ERR
Definition sci.h:330
@ SCI_TIMEOUT_ERR
Definition sci.h:323
@ SCI_CHIP_CONF_ERR
Definition sci.h:332
@ SCI_BUS_ERR
Definition sci.h:326
@ SCI_DVR_OPEN_ERR
Definition sci.h:328
@ SCI_ENV_ERR
Definition sci.h:333
@ SCI_LENGTH_ERR
Definition sci.h:319
@ SCI_TIMEOUT_VAL_ERR
Definition sci.h:324
@ SCI_PLUG_DEF_ERR
Definition sci.h:337
@ SCI_OBJ_UNDEF_ERR
Definition sci.h:339
@ SCI_DVR_ACCESS_ERR
Definition sci.h:329
@ SCI_RESET_ERR
Definition sci.h:331
@ SCI_SET_CALLB_ERR
Definition sci.h:316
@ SCI_OFF_BUS_ERR
Definition sci.h:325
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)
Definition sci.c:658