include/can_driver.h
author fbeaulier
Tue, 16 Aug 2011 14:15:52 +0200
changeset 663 70fc3603e36f
parent 644 11b21e9a92f6
child 728 92b7c9f85aad
permissions -rwxr-xr-x
timers_unix.c : remove sigint and sigterm catch
sdo : Allow multiple servers
The sdo transfer struct is not anymore referenced by server's node id but by
client or server number in the OD. Node id is not relevant in SDO transfert.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     1
/*
561
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
     2
This file is part of CanFestival, a library implementing CanOpen Stack.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     3
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     4
Copyright (C): Edouard TISSERANT and Francis DUPIN
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     5
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     6
See COPYING file for copyrights details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     7
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     8
This library is free software; you can redistribute it and/or
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     9
modify it under the terms of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    10
License as published by the Free Software Foundation; either
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    11
version 2.1 of the License, or (at your option) any later version.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    12
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    13
This library is distributed in the hope that it will be useful,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    14
but WITHOUT ANY WARRANTY; without even the implied warranty of
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    16
Lesser General Public License for more details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    17
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    18
You should have received a copy of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    19
License along with this library; if not, write to the Free Software
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    20
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    21
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    22
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    23
#ifndef __can_driver_h__
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    24
#define __can_driver_h__
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    25
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    26
struct struct_s_BOARD;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    27
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    28
typedef struct struct_s_BOARD s_BOARD;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    29
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    30
#include "applicfg.h"
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    31
#include "can.h"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    32
561
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    33
/**
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    34
 * @brief The CAN board configuration
528
0a30e161d63c Re-write doxygen tags in headers files to generate User API documentation
greg
parents: 391
diff changeset
    35
 * @ingroup can
0a30e161d63c Re-write doxygen tags in headers files to generate User API documentation
greg
parents: 391
diff changeset
    36
 */
561
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    37
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    38
//struct struct_s_BOARD {
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    39
//  char busname[100]; /**< The bus name on which the CAN board is connected */
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    40
//  char baudrate[4]; /**< The board baudrate */
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    41
//};
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    42
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    43
struct struct_s_BOARD {
561
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    44
  char * busname;  /**< The bus name on which the CAN board is connected */
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    45
  char * baudrate; /**< The board baudrate */
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    46
};
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    47
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    48
#ifndef DLL_CALL
629
b9274b595650 CosateQ contribution.
edouard
parents: 561
diff changeset
    49
#if !defined(WIN32) || defined(__CYGWIN__)
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    50
#define DLL_CALL(funcname) funcname##_driver
629
b9274b595650 CosateQ contribution.
edouard
parents: 561
diff changeset
    51
#else
b9274b595650 CosateQ contribution.
edouard
parents: 561
diff changeset
    52
//Windows was missing the definition of the calling convention
b9274b595650 CosateQ contribution.
edouard
parents: 561
diff changeset
    53
#define DLL_CALL(funcname) __stdcall funcname##_driver
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    54
#endif
644
11b21e9a92f6 FIXED: - added missing endif
Christian Taedcke <hacking@taedcke.com>
parents: 631
diff changeset
    55
#endif //DLL_CALL
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    56
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    57
#ifndef FCT_PTR_INIT
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    58
#define FCT_PTR_INIT
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    59
#endif
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    60
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    61
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    62
UNS8 DLL_CALL(canReceive)(CAN_HANDLE, Message *)FCT_PTR_INIT;
631
08b6b903f84a Piotr Trojanek (ptroja) cleanup patche. Thanks.
edouard
parents: 629
diff changeset
    63
UNS8 DLL_CALL(canSend)(CAN_HANDLE, Message const *)FCT_PTR_INIT;
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    64
CAN_HANDLE DLL_CALL(canOpen)(s_BOARD *)FCT_PTR_INIT;
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    65
int DLL_CALL(canClose)(CAN_HANDLE)FCT_PTR_INIT;
384
83793fc7ce48 added canChangeBaudRate to the driver interface
groke6
parents: 381
diff changeset
    66
UNS8 DLL_CALL(canChangeBaudRate)(CAN_HANDLE, char *)FCT_PTR_INIT;
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    67
341
7ff01f109bbc Windows related enhancements
etisserant
parents: 319
diff changeset
    68
#if defined DEBUG_MSG_CONSOLE_ON || defined NEED_PRINT_MESSAGE
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    69
#include "def.h"
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    70
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    71
#define _P(fc) case fc: MSG(#fc" ");break;
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    72
631
08b6b903f84a Piotr Trojanek (ptroja) cleanup patche. Thanks.
edouard
parents: 629
diff changeset
    73
static inline void print_message(Message const *m)
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    74
{
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    75
    int i;
319
4b331759169a There was a variable declaration after a statement
luis
parents: 314
diff changeset
    76
    UNS8 fc;
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    77
    MSG("id:%02x ", m->cob_id & 0x7F);
365
9b76e0881beb Changed cob_id from struct{UNS32} to UNS16
etisserant
parents: 341
diff changeset
    78
    fc = m->cob_id >> 7;
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    79
    switch(fc)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    80
    {
561
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    81
        case SYNC:
365
9b76e0881beb Changed cob_id from struct{UNS32} to UNS16
etisserant
parents: 341
diff changeset
    82
            if(m->cob_id == 0x080)
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    83
                MSG("SYNC ");
314
68e83c3ffbb5 Better EMCY support. Now EMCY COB-ID depend on OD 1014h entry, as told in DS-301.
etisserant
parents: 301
diff changeset
    84
            else
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    85
                MSG("EMCY ");
314
68e83c3ffbb5 Better EMCY support. Now EMCY COB-ID depend on OD 1014h entry, as told in DS-301.
etisserant
parents: 301
diff changeset
    86
        break;
381
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    87
#ifdef CO_ENABLE_LSS
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    88
        case LSS:
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    89
        	if(m->cob_id == 0x7E5)
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    90
                MSG("MLSS ");
381
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    91
            else
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    92
                MSG("SLSS ");
381
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    93
        break;
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    94
#endif
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    95
        _P(TIME_STAMP)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    96
        _P(PDO1tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    97
        _P(PDO1rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    98
        _P(PDO2tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    99
        _P(PDO2rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   100
        _P(PDO3tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   101
        _P(PDO3rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   102
        _P(PDO4tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   103
        _P(PDO4rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   104
        _P(SDOtx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   105
        _P(SDOrx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   106
        _P(NODE_GUARD)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   107
        _P(NMT)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   108
    }
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   109
    if( fc == SDOtx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   110
    {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   111
        switch(m->data[0] >> 5)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   112
        {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   113
            /* scs: server command specifier */
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   114
            _P(UPLOAD_SEGMENT_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   115
            _P(DOWNLOAD_SEGMENT_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   116
            _P(INITIATE_DOWNLOAD_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   117
            _P(INITIATE_UPLOAD_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   118
            _P(ABORT_TRANSFER_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   119
        }
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   120
    }else if( fc == SDOrx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   121
    {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   122
        switch(m->data[0] >> 5)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   123
        {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   124
            /* ccs: client command specifier */
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   125
            _P(DOWNLOAD_SEGMENT_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   126
            _P(INITIATE_DOWNLOAD_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   127
            _P(INITIATE_UPLOAD_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   128
            _P(UPLOAD_SEGMENT_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   129
            _P(ABORT_TRANSFER_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   130
        }
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   131
    }
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   132
    MSG(" rtr:%d", m->rtr);
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   133
    MSG(" len:%d", m->len);
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   134
    for (i = 0 ; i < m->len ; i++)
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   135
        MSG(" %02x", m->data[i]);
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   136
    MSG("\n");
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   137
}
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   138
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
   139
#endif
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   140
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   141
#endif