vcan_errcodes¶
Here is the definition:
typedef enum
{ VCAN_NO_ERROR = 0,
VCAN_PORT_ERR = 1, /* port-number out of range */
VCAN_ID_ERR = 2, /* (message-) id out of range */
VCAN_NOT_OWNER_ERR = 3, /* thread is not owner of the object */
VCAN_INUSE_ERR = 4, /* the CAN object is "in use by the same thread"*/
VCAN_TID_ERR = 5, /* invalid thread-id (tid) */
VCAN_TX_TM_OUT = 6, /* timeout during transmission or remote-
transfers */
VCAN_UNKNOWN_TX_ERR = 7, /* unknown transmission error */
VCAN_OFF_BUS_ERR = 8, /* can card is off-bus */
VCAN_BUSY_ERR = 9, /* the mysterious "busy" error */
VCAN_NO_NET_ERR =10, /* tried to access a non-existing net */
VCAN_SIZE_ERR =11, /* datasize>8 or datasize <0 in call to a
write-function */
VCAN_WRONG_MODE_ERR =12, /* read on a write-object, write on a
read-object and so on ... */
VCAN_WRONG_SIGNAL_ERR=13, /* only SIGUSR1 and SIGUSR2 are allowed as
signals */
VCAN_OBJECT_OWNED_ERR=14, /* tried an operation on an owned object that
is only allowed on unowned objects */
VCAN_COMMAND_ERR =15, /* general command error (signaled from
hardware, no special reason known) */
VCAN_UNKNOWN_MODE_ERR=16, /* tried to set an unknown mode for an
object */
VCAN_BITRATE_ERR =17, /* tried to set an unsupported bitrate */
VCAN_AUTHORIZE_ERR =18, /* authorization error, tried to initialize
the card with the tid!=0 */
VCAN_STATUS_TAG_ERR =19, /* unknown status-tag */
VCAN_SET_IRQ_ERR =20, /* internal error, returned by
set_interrupt() */
VCAN_R_OFFSET_ERR =21, /* offset error during pbuffer-dump (see
VCAN_READ_PBUFFER) */
VCAN_R_SIZE_ERR =22, /* size-error during pbuffer-dump (see
VCAN_READ_PBUFFER) */
VCAN_CHK_STATUS_ERR =23, /* internal error in the check_status-
function */
VCAN_CANCMD_ERR =24, /* internal error in the can_command-
function */
VCAN_TOO_MANY_IDS_ERR=25, /* too many object-id's given in
vcan_read_many() */
VCAN_WRONG_TMOUT_ERR =26, /* timeout-value is out of range (0..32767) */
VCAN_RESET_ERR =27, /* reset of the VME-CAN2 card failed */
/* error codes from other modules follow: */
VCAN_TAG_ERR =28, /* in module UI: wrong tag has been used for
reading or writing */
VCAN_SEM_POOL_ERR =29, /* internal semaphore-pool is exhausted */
VCAN_Q_EMPTY_ERR =30, /* internal event-queue is empty
(vcan_queue_read)*/
VCAN_LAST_ERRCODE =30 /* !!Attention!!
this should be the last used errorcode,
this is needed by applications that create
an array for all error-codes */
} vcan_errcodes;
This is the data type of the driver’s error-codes. Driver calls usually
return flags, if the VCAN_ACCESS_ERR
- flag is set, there is also an
error-code. Both, the vcan_request
- structure and the
vcan_status_data
- structure contain a field of the type
vcan_errcodes
. Short explanation of the error-codes:
- VCAN_NO_ERROR
no error occurred
- VCAN_PORT_ERR
the given port-number was out of range. Port-numbers begin with 0 and may range to 7. During initialization, the VCAN driver searches for up to 4 cards and creates an internal list of valid ports. Each VME-CAN2 card in a system is jumpered for a unique card-number that ranges from 0 to 3. The port-numbers for a specific card are (card_number)*2 and (card_number)*2+1. A port-number is invalid if it is outside the range of 0 to 7 or of the corresponding card was not found during driver-initialization.
- VCAN_ID_ERR
The CAN object ID was out of range, only numbers between 0 and 2047 are valid.
- VCAN_NOT_OWNER_ERR
An attempt was made to access a CAN object which is not owned by the thread.
- VCAN_INUSE_ERR
There was an access to a remote-read object although this object is currently accessed by another task. This can only happen when 2 tasks use the same driver-handle since vcan distinguishes tasks by their driver-handles. Accessing vcan by 2 tasks which use the same driver-handle is done by the LowCAL CAN-bus protocol (a BESSY development). Note that the driver currently makes the in-use-check only for remote-read objects due to performance considerations.
- VCAN_TID_ERR
The thread-Id is invalid. The thread-Id is an internal number that identifies a user-thread. It is stored within the file-handle that the
open
function returns. This error should only happens when an invalid file-handle was used or when the file-handle structure was patched.- VCAN_TX_TM_OUT
A timeout occured while writing to the CAN bus. This error can also occur with remote-transfers (remote-read) since there is a sending of a remote-frame involved.
- VCAN_UNKNOWN_TX_ERR
unknown transmission error (shouldn’t happen)
- VCAN_OFF_BUS_ERR
the CAN controller is in the off-bus state.
- VCAN_BUSY_ERR
the CAN chip on the card is busy. This usually happens when a CAN-write failed and an attempt is made to write a second time. The CAN chip is then busy trying to finish the first writing.
- VCAN_NO_NET_ERR
an attempt was made to write to a non-existent net
- VCAN_SIZE_ERR
the size of the data (length) was not within the range of 0 to 8.
- VCAN_WRONG_MODE_ERR
An object was used with a function that is incompatible to it’s type, e.g a CAN-write was applied to a read-object.
- VCAN_WRONG_SIGNAL_ERR
A wrong signal-number (this concerns only event-objects) was given. The signal-number must be 0 or 1.
- VCAN_OBJECT_OWNED_ERR
An attempt was made to perform a function on an owned object that is only allowed on unowned object, e.g
VCAN_INIT
was tried with an object that is already initialized.- VCAN_COMMAND_ERR
A command to the VME-CAN2 could not be performed, this is an error detected by the VME-CAN2 card.
- VCAN_UNKNOWN_MODE_ERR
An attempt was made to define an object with an unknown mode.
- VCAN_BITRATE_ERR
An attempt was made to set a bitrate for the CAN bus that is not supported by the VME-CAN2 card.
- VCAN_AUTHORIZE_ERR
A thread tried to initialize or reset the CAN card whose (driver-)thread id is unequal to 0. Only the first thread that opened the vcan-driver has thread id 0 and is authorized to initialize or reset the card.
- VCAN_STATUS_TAG_ERR
The status-tag is of an unknown value.
- VCAN_SET_IRQ_ERR
This is an internal error, the internal function
set_interrupt
failed.- VCAN_R_OFFSET_ERR
The offset for the p-buffer dump was wrong.
- VCAN_R_SIZE_ERR
The size for the p-buffer dump was wrong.
- VCAN_CHK_STATUS_ERR
This is an internal error in the internal check-status function.
- VCAN_CANCMD_ERR
This is an internal error in the internal can-command function.
- VCAN_TOO_MANY_IDS_ERR
Too many object-id’s were given to the
VCAN_READ_MANY
- function.- VCAN_WRONG_TMOUT_ERR
The given timeout is out of range, valid timeouts are between 0 and 32767.
- VCAN_RESET_ERR
The reset of the VME-CAN2 card failed.
- VCAN_TAG_ERR
A wrong tag has been used for reading or writing.
- VCAN_SEM_POOL_ERR
The internal semaphore-pool is exhausted, this happens when many threads (more than 32) access the driver at a time.
- VCAN_Q_EMPTY_ERR
The internal event queue is empty, this is an internal error and should not happen.
- VCAN_LAST_ERRCODE
This is no error but the last element of the
vcan_errcodes
- type. This is needed by applications that need to know how what the number of the last error-code of the vcan driver is.