include/can_driver.h
author Robert Lehmann <robert.lehmann@sitec-systems.de>
Tue, 28 Jul 2015 16:36:55 +0200
changeset 793 72e9e1064432
parent 774 91d708a2cb4e
permissions -rwxr-xr-x
timers_unix: Fix termination problem of WaitReceiveTaskEnd

The function pthread_kill sends the Signal thread and to the own process.
If you use this construct than the application which calls uses the
canfestival api will terminate at the call of canClose. To avoid that
use pthread_cancel instead of pthread_kill. To use the pthread_cancel call
you need to set the cancel ability in the thread function. That means
you need to call pthread_setcancelstate and pthread_setcanceltype.
For the termination of the thread at any time it is important to set the
cancel type to PTHREAD_CANCEL_ASYNCHRONOUS.
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
774
91d708a2cb4e Fixed DLL calling convention when build with mingw32 + some re-indenting in can_tcp_win32
Edouard Tisserant
parents: 728
diff changeset
    49
#if !defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
91d708a2cb4e Fixed DLL calling convention when build with mingw32 + some re-indenting in can_tcp_win32
Edouard Tisserant
parents: 728
diff changeset
    50
#define LIBAPI
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    51
#define DLL_CALL(funcname) funcname##_driver
629
b9274b595650 CosateQ contribution.
edouard
parents: 561
diff changeset
    52
#else
728
92b7c9f85aad Win32 fixes:
Christian Taedcke <hacking@taedcke.com>
parents: 644
diff changeset
    53
#define LIBAPI __stdcall
629
b9274b595650 CosateQ contribution.
edouard
parents: 561
diff changeset
    54
//Windows was missing the definition of the calling convention
728
92b7c9f85aad Win32 fixes:
Christian Taedcke <hacking@taedcke.com>
parents: 644
diff changeset
    55
#define DLL_CALL(funcname) LIBAPI funcname##_driver
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    56
#endif
644
11b21e9a92f6 FIXED: - added missing endif
Christian Taedcke <hacking@taedcke.com>
parents: 631
diff changeset
    57
#endif //DLL_CALL
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    58
728
92b7c9f85aad Win32 fixes:
Christian Taedcke <hacking@taedcke.com>
parents: 644
diff changeset
    59
#define LIBPUBLIC
92b7c9f85aad Win32 fixes:
Christian Taedcke <hacking@taedcke.com>
parents: 644
diff changeset
    60
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    61
#ifndef FCT_PTR_INIT
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    62
#define FCT_PTR_INIT
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    63
#endif
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    64
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    65
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
    66
UNS8 DLL_CALL(canReceive)(CAN_HANDLE, Message *)FCT_PTR_INIT;
631
08b6b903f84a Piotr Trojanek (ptroja) cleanup patche. Thanks.
edouard
parents: 629
diff changeset
    67
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
    68
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
    69
int DLL_CALL(canClose)(CAN_HANDLE)FCT_PTR_INIT;
384
83793fc7ce48 added canChangeBaudRate to the driver interface
groke6
parents: 381
diff changeset
    70
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
    71
341
7ff01f109bbc Windows related enhancements
etisserant
parents: 319
diff changeset
    72
#if defined DEBUG_MSG_CONSOLE_ON || defined NEED_PRINT_MESSAGE
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    73
#include "def.h"
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    74
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    75
#define _P(fc) case fc: MSG(#fc" ");break;
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    76
631
08b6b903f84a Piotr Trojanek (ptroja) cleanup patche. Thanks.
edouard
parents: 629
diff changeset
    77
static inline void print_message(Message const *m)
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    78
{
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    79
    int i;
319
4b331759169a There was a variable declaration after a statement
luis
parents: 314
diff changeset
    80
    UNS8 fc;
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    81
    MSG("id:%02x ", m->cob_id & 0x7F);
365
9b76e0881beb Changed cob_id from struct{UNS32} to UNS16
etisserant
parents: 341
diff changeset
    82
    fc = m->cob_id >> 7;
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    83
    switch(fc)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    84
    {
561
f9be4262c68d Add doxygen comments in headers file
greg
parents: 528
diff changeset
    85
        case SYNC:
365
9b76e0881beb Changed cob_id from struct{UNS32} to UNS16
etisserant
parents: 341
diff changeset
    86
            if(m->cob_id == 0x080)
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    87
                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
    88
            else
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    89
                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
    90
        break;
381
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    91
#ifdef CO_ENABLE_LSS
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    92
        case LSS:
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    93
        	if(m->cob_id == 0x7E5)
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    94
                MSG("MLSS ");
381
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    95
            else
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
    96
                MSG("SLSS ");
381
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    97
        break;
854c43cdc24a added TestMasterSlaveLSS. LSS protocol revised.
groke6
parents: 365
diff changeset
    98
#endif
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
    99
        _P(TIME_STAMP)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   100
        _P(PDO1tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   101
        _P(PDO1rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   102
        _P(PDO2tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   103
        _P(PDO2rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   104
        _P(PDO3tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   105
        _P(PDO3rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   106
        _P(PDO4tx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   107
        _P(PDO4rx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   108
        _P(SDOtx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   109
        _P(SDOrx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   110
        _P(NODE_GUARD)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   111
        _P(NMT)
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
    if( fc == SDOtx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   114
    {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   115
        switch(m->data[0] >> 5)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   116
        {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   117
            /* scs: server command specifier */
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   118
            _P(UPLOAD_SEGMENT_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   119
            _P(DOWNLOAD_SEGMENT_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   120
            _P(INITIATE_DOWNLOAD_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   121
            _P(INITIATE_UPLOAD_RESPONSE)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   122
            _P(ABORT_TRANSFER_REQUEST)
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
    }else if( fc == SDOrx)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   125
    {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   126
        switch(m->data[0] >> 5)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   127
        {
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   128
            /* ccs: client command specifier */
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   129
            _P(DOWNLOAD_SEGMENT_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   130
            _P(INITIATE_DOWNLOAD_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   131
            _P(INITIATE_UPLOAD_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   132
            _P(UPLOAD_SEGMENT_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   133
            _P(ABORT_TRANSFER_REQUEST)
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   134
        }
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   135
    }
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   136
    MSG(" rtr:%d", m->rtr);
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   137
    MSG(" len:%d", m->len);
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   138
    for (i = 0 ; i < m->len ; i++)
391
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   139
        MSG(" %02x", m->data[i]);
7802a7d5584f Accepted Vladimir Chren linux kernelspace port patch.
etisserant
parents: 384
diff changeset
   140
    MSG("\n");
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   141
}
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   142
145
e747d2e26af0 Win32 Native support and dynamicaly loaded CAN drivers for Linux, Cygwin and Win32.
etisserant
parents: 24
diff changeset
   143
#endif
301
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   144
f4b64aa848e1 more fancy print_message for debug
etisserant
parents: 145
diff changeset
   145
#endif