| 1 | /*----------------------------------------------------------------------------- | 
|---|
| 2 | can_lib.h -- Interface to CAN library | 
|---|
| 3 |  | 
|---|
| 4 | Copyright (c) 1994 JANZ Computer AG | 
|---|
| 5 | All Rights Reserved | 
|---|
| 6 |  | 
|---|
| 7 |  | 
|---|
| 8 | Created 96/01/23 by Stefan Althoefer | 
|---|
| 9 | Version 1.8 of 96/10/31 | 
|---|
| 10 | -----------------------------------------------------------------------------*/ | 
|---|
| 11 |  | 
|---|
| 12 |  | 
|---|
| 13 | #ifndef can_lib_DEFINED | 
|---|
| 14 | #define can_lib_DEFINED | 
|---|
| 15 |  | 
|---|
| 16 | #ifdef __cplusplus | 
|---|
| 17 | extern "C" { | 
|---|
| 18 | #endif | 
|---|
| 19 |  | 
|---|
| 20 | #ifdef VXWORKS | 
|---|
| 21 | #include "semLib.h" | 
|---|
| 22 | #endif | 
|---|
| 23 |  | 
|---|
| 24 | #include "defs.h" | 
|---|
| 25 | #include "mican.h" | 
|---|
| 26 | #include "dpm.h" | 
|---|
| 27 | #include "vmod.h" | 
|---|
| 28 |  | 
|---|
| 29 | /*------- Function Declarations ---------------------------------------------*/ | 
|---|
| 30 |  | 
|---|
| 31 | /* Open the device and return a descriptor. Only one process may | 
|---|
| 32 | hold the the device open at a time. */ | 
|---|
| 33 | extern int can_open _PARAMS((char  *)); | 
|---|
| 34 | extern int can_alt_open _PARAMS((char *)); | 
|---|
| 35 |  | 
|---|
| 36 | /* Close a device */ | 
|---|
| 37 | extern void can_close _PARAMS((int fd)); | 
|---|
| 38 |  | 
|---|
| 39 | /* Reset a device */ | 
|---|
| 40 | extern void can_reset _PARAMS((int fd)); | 
|---|
| 41 |  | 
|---|
| 42 | /* Declare a signal (for OS-9 systems only) */ | 
|---|
| 43 | extern int can_sigdcl _PARAMS((int fd, int pid, int sig)); | 
|---|
| 44 |  | 
|---|
| 45 | /* Undeclare a signal (for OS-9 systems only) */ | 
|---|
| 46 | extern void can_sigdel _PARAMS((int fd)); | 
|---|
| 47 |  | 
|---|
| 48 | #ifdef VXWORKS | 
|---|
| 49 | /* Declare a semaphore (for VxWorks systems only) */ | 
|---|
| 50 | extern SEM_ID can_semdcl _PARAMS((int fd)); | 
|---|
| 51 |  | 
|---|
| 52 | /* Delete a semaphore (for VxWorks systems only) */ | 
|---|
| 53 | extern void can_semdel _PARAMS((int fd)); | 
|---|
| 54 | #endif | 
|---|
| 55 |  | 
|---|
| 56 | /* Receive a message from a module */ | 
|---|
| 57 | extern int can_recv _PARAMS((int fd, Message *pm)); | 
|---|
| 58 |  | 
|---|
| 59 | /* Receive a fast message from a module */ | 
|---|
| 60 | extern int can_recv_fast _PARAMS((int fd, FastMessage *pm)); | 
|---|
| 61 |  | 
|---|
| 62 | /* Send a middle prior message to a module */ | 
|---|
| 63 | extern int can_send _PARAMS((int fd, Message *pm)); | 
|---|
| 64 |  | 
|---|
| 65 | /* Send a high prior message to a module */ | 
|---|
| 66 | extern int can_send_hi  _PARAMS((int fd, Message *pm)); | 
|---|
| 67 |  | 
|---|
| 68 | /* Send a low_prior message to a module */ | 
|---|
| 69 | extern int can_send_low _PARAMS((int fd, Message *pm)); | 
|---|
| 70 |  | 
|---|
| 71 | /* Send a fast message to a module */ | 
|---|
| 72 | extern int can_fast_send _PARAMS((int fd, FastMessage *pm)); | 
|---|
| 73 |  | 
|---|
| 74 | /* Send a fast message to a module */ | 
|---|
| 75 | extern int can_fast_send_prio _PARAMS((int fd, int prioQueue, FastMessage *pm)); | 
|---|
| 76 |  | 
|---|
| 77 | /* One communication step (MS-DOS systems only) */ | 
|---|
| 78 | extern void can_comm _PARAMS((int fd)); | 
|---|
| 79 |  | 
|---|
| 80 | /* Switch to new stylish hostinterface */ | 
|---|
| 81 | extern void ican2_select_hostif _PARAMS((int fd, int rbuffers, int wbuffers)); | 
|---|
| 82 |  | 
|---|
| 83 | /* Switch to new stylish hostinterface with dedicated priorized-messsage- */ | 
|---|
| 84 | /* buffer-size */ | 
|---|
| 85 | extern void ican2_select_hostif_prio _PARAMS((int fd, int rbuffers, | 
|---|
| 86 | int wbuffers, int wbuffers_hi, int wbuffers_low)); | 
|---|
| 87 |  | 
|---|
| 88 | /* Init fast CANbus access */ | 
|---|
| 89 | extern int ican2_init_fast_can _PARAMS((int fd, int rbuffers, int wbuffers)); | 
|---|
| 90 |  | 
|---|
| 91 | /* Init fast CANbus access */ | 
|---|
| 92 | extern int ican2_init_fast_can_prio _PARAMS((int fd, int rbuffers, int wbuffers, | 
|---|
| 93 | int numOfPrioQueues)); | 
|---|
| 94 |  | 
|---|
| 95 | /* Copy a block of data to the DPM */ | 
|---|
| 96 | extern void ican2_todpmcpy _PARAMS((int fd, unsigned int d, | 
|---|
| 97 | unsigned char *s, int n)); | 
|---|
| 98 |  | 
|---|
| 99 | /* Copy a block of data from the DPM */ | 
|---|
| 100 | extern void ican2_fromdpmcpy _PARAMS((int fd, unsigned char *d, | 
|---|
| 101 | unsigned int s, int n)); | 
|---|
| 102 |  | 
|---|
| 103 | /* Initialize table; holds Id-specific message-queue-ids, where */ | 
|---|
| 104 | /* fast messages with the corresponding ID should be routed to  are stored */ | 
|---|
| 105 | extern int init_id_msg_q_table(int fd); | 
|---|
| 106 |  | 
|---|
| 107 | /* Deinitialize above described table */ | 
|---|
| 108 | extern int deinit_id_msg_q_table(int fd); | 
|---|
| 109 |  | 
|---|
| 110 | /* Enter one message-queue-id into the above described table. */ | 
|---|
| 111 | /* this entry causes a message-sending not to the default, common queue */ | 
|---|
| 112 | /* but to a user defined queue */ | 
|---|
| 113 | int add_msg_q_to_id_table( | 
|---|
| 114 | #ifdef VXWORKS | 
|---|
| 115 | int             fd, | 
|---|
| 116 | unsigned short  id, | 
|---|
| 117 | MSG_Q_ID        target_queue | 
|---|
| 118 | #endif | 
|---|
| 119 | #ifdef LINUX | 
|---|
| 120 | int             fd, | 
|---|
| 121 | unsigned short  id | 
|---|
| 122 | #endif | 
|---|
| 123 | ); | 
|---|
| 124 |  | 
|---|
| 125 | /* removes one entry like above described */ | 
|---|
| 126 | int rem_msg_q_from_id_table( | 
|---|
| 127 | int             fd, | 
|---|
| 128 | unsigned short  id | 
|---|
| 129 | ); | 
|---|
| 130 |  | 
|---|
| 131 | /* Initialize table; holds device and ID where messages from this device */ | 
|---|
| 132 | /* and with a certain CAN-ID should be routed to. */ | 
|---|
| 133 | extern int can_init_layer_2_routing _PARAMS((int fd)); | 
|---|
| 134 |  | 
|---|
| 135 | /* Deinitialize above described table */ | 
|---|
| 136 | extern int can_deinit_layer_2_routing _PARAMS((int fd)); | 
|---|
| 137 |  | 
|---|
| 138 | /* */ | 
|---|
| 139 | extern int can_init_route_id _PARAMS(( | 
|---|
| 140 | int             fd, | 
|---|
| 141 | int             Id, | 
|---|
| 142 | int             max_routes | 
|---|
| 143 | )); | 
|---|
| 144 |  | 
|---|
| 145 | /* */ | 
|---|
| 146 | extern int can_add_route_to_id _PARAMS(( | 
|---|
| 147 | int             fd, | 
|---|
| 148 | int             source_Id, | 
|---|
| 149 | int             dest_fd, | 
|---|
| 150 | int             dest_Id | 
|---|
| 151 | )); | 
|---|
| 152 |  | 
|---|
| 153 | /* */ | 
|---|
| 154 | extern unsigned int can_drv_idvers _PARAMS(( | 
|---|
| 155 | int             fd | 
|---|
| 156 | )); | 
|---|
| 157 |  | 
|---|
| 158 | /* initiate a tpu request */ | 
|---|
| 159 | extern void ican2_tpurequest _PARAMS((int fd)); | 
|---|
| 160 |  | 
|---|
| 161 | extern void ican_objdic _PARAMS(( | 
|---|
| 162 | int fd, | 
|---|
| 163 | int objdic_index, | 
|---|
| 164 | int objdic_subindex, | 
|---|
| 165 | int access_type, | 
|---|
| 166 | void *entry_structure | 
|---|
| 167 | )); | 
|---|
| 168 |  | 
|---|
| 169 | extern int ican_read_pp _PARAMS(( | 
|---|
| 170 | int     fd, | 
|---|
| 171 | int     dataSize, | 
|---|
| 172 | int     offset, | 
|---|
| 173 | char    *buffer | 
|---|
| 174 | )); | 
|---|
| 175 |  | 
|---|
| 176 | extern void ican_write_pp _PARAMS(( | 
|---|
| 177 | int     fd, | 
|---|
| 178 | int     dataSize, | 
|---|
| 179 | int     offset, | 
|---|
| 180 | char     *buffer | 
|---|
| 181 | )); | 
|---|
| 182 |  | 
|---|
| 183 | #ifdef __cplusplus | 
|---|
| 184 | } | 
|---|
| 185 | #endif | 
|---|
| 186 |  | 
|---|
| 187 | #endif /* !can_lib_DEFINED */ | 
|---|