include/ectty.h
author Patrick Bruenn <p.bruenn@beckhoff.com>
Tue, 12 Apr 2016 11:17:36 +0200
branchstable-1.5
changeset 2654 b3f6b3e5ef29
parent 2421 bc2d4bf9cbe5
permissions -rw-r--r--
devices/ccat: revert "limit rx processing to one frame per poll"

revert "limit rx processing to one frame per poll", which caused etherlab
frame timeouts in setups with more than one frame per cycle.
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/******************************************************************************
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
 *  $Id$
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     5
 *  Copyright (C) 2006-2008  Florian Pose, Ingenieurgemeinschaft IgH
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
 *  This file is part of the IgH EtherCAT master userspace library.
2421
bc2d4bf9cbe5 Removed trailing spaces.
Florian Pose <fp@igh-essen.com>
parents: 1903
diff changeset
     8
 *
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     9
 *  The IgH EtherCAT master userspace library is free software; you can
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    10
 *  redistribute it and/or modify it under the terms of the GNU Lesser General
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    11
 *  Public License as published by the Free Software Foundation; version 2.1
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    12
 *  of the License.
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    13
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    14
 *  The IgH EtherCAT master userspace library is distributed in the hope that
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    15
 *  it will be useful, but WITHOUT ANY WARRANTY; without even the implied
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    16
 *  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    17
 *  GNU Lesser General Public License for more details.
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    18
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    19
 *  You should have received a copy of the GNU Lesser General Public License
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
 *  along with the IgH EtherCAT master userspace library. If not, see
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
 *  <http://www.gnu.org/licenses/>.
2421
bc2d4bf9cbe5 Removed trailing spaces.
Florian Pose <fp@igh-essen.com>
parents: 1903
diff changeset
    22
 *
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    23
 *  ---
2421
bc2d4bf9cbe5 Removed trailing spaces.
Florian Pose <fp@igh-essen.com>
parents: 1903
diff changeset
    24
 *
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    25
 *  The license mentioned above concerns the source code only. Using the
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    26
 *  EtherCAT technology and brand is only permitted in compliance with the
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
 *  industrial property and similar rights of Beckhoff Automation GmbH.
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
 *****************************************************************************/
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
/** \file
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
 * EtherCAT virtual TTY interface.
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
 * \defgroup TTYInterface EtherCAT Virtual TTY Interface
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
 *
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
 * @{
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
 */
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
/*****************************************************************************/
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
#ifndef __ECTTY_H__
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
#define __ECTTY_H__
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
1795
16c9640493fa Include termios.h from ectty.h.
Florian Pose <fp@igh-essen.com>
parents: 1787
diff changeset
    45
#include <linux/termios.h>
16c9640493fa Include termios.h from ectty.h.
Florian Pose <fp@igh-essen.com>
parents: 1787
diff changeset
    46
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
/******************************************************************************
2421
bc2d4bf9cbe5 Removed trailing spaces.
Florian Pose <fp@igh-essen.com>
parents: 1903
diff changeset
    48
 * Data types
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
 *****************************************************************************/
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
struct ec_tty;
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
typedef struct ec_tty ec_tty_t; /**< \see ec_tty */
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
1903
5b526d0f5a5d Completed code documentation for ectty.
Florian Pose <fp@igh-essen.com>
parents: 1795
diff changeset
    54
/** Operations on the virtual TTY interface.
1787
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    55
 */
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    56
typedef struct {
1903
5b526d0f5a5d Completed code documentation for ectty.
Florian Pose <fp@igh-essen.com>
parents: 1795
diff changeset
    57
    int (*cflag_changed)(void *, tcflag_t); /**< Called when the serial
5b526d0f5a5d Completed code documentation for ectty.
Florian Pose <fp@igh-essen.com>
parents: 1795
diff changeset
    58
                                              * settings shall be changed. The
5b526d0f5a5d Completed code documentation for ectty.
Florian Pose <fp@igh-essen.com>
parents: 1795
diff changeset
    59
                                              * \a cflag argument contains the
5b526d0f5a5d Completed code documentation for ectty.
Florian Pose <fp@igh-essen.com>
parents: 1795
diff changeset
    60
                                              * new settings. */
1787
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    61
} ec_tty_operations_t;
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    62
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    63
/******************************************************************************
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
 * Global functions
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
 *****************************************************************************/
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
/** Create a virtual TTY interface.
1779
9fab229d6ca9 Passing tty cflag to serial implementation.
Florian Pose <fp@igh-essen.com>
parents: 1577
diff changeset
    68
 *
1787
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    69
 * \param ops Set of callbacks.
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    70
 * \param cb_data Arbitrary data, that is passed to any callback.
1779
9fab229d6ca9 Passing tty cflag to serial implementation.
Florian Pose <fp@igh-essen.com>
parents: 1577
diff changeset
    71
 *
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    72
 * \return Pointer to the interface object, otherwise an ERR_PTR value.
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
 */
1779
9fab229d6ca9 Passing tty cflag to serial implementation.
Florian Pose <fp@igh-essen.com>
parents: 1577
diff changeset
    74
ec_tty_t *ectty_create(
1787
439f186185be Callback set via own structure.
Florian Pose <fp@igh-essen.com>
parents: 1782
diff changeset
    75
        const ec_tty_operations_t *ops,
1779
9fab229d6ca9 Passing tty cflag to serial implementation.
Florian Pose <fp@igh-essen.com>
parents: 1577
diff changeset
    76
        void *cb_data
9fab229d6ca9 Passing tty cflag to serial implementation.
Florian Pose <fp@igh-essen.com>
parents: 1577
diff changeset
    77
        );
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    78
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    79
/******************************************************************************
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
 * TTY interface methods
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    81
 *****************************************************************************/
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    82
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    83
/** Releases a virtual TTY interface.
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
 */
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
void ectty_free(
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
        ec_tty_t *tty /**< TTY interface. */
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    87
        );
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    88
1575
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    89
/** Reads data to send from the TTY interface.
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    90
 *
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    91
 * If there are data to send, they are copied into the \a buffer. At maximum,
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    92
 * \a size bytes are copied. The actual number of bytes copied is returned.
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    93
 *
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    94
 * \return Number of bytes copied.
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    95
 */
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    96
unsigned int ectty_tx_data(
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    97
        ec_tty_t *tty, /**< TTY interface. */
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    98
        uint8_t *buffer, /**< Buffer for data to transmit. */
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
    99
        size_t size /**< Available space in \a buffer. */
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
   100
        );
17598f2332b6 Send direction works!
Florian Pose <fp@igh-essen.com>
parents: 1569
diff changeset
   101
1577
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   102
/** Pushes received data to the TTY interface.
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   103
 */
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   104
void ectty_rx_data(
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   105
        ec_tty_t *tty, /**< TTY interface. */
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   106
        const uint8_t *buffer, /**< Buffer with received data. */
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   107
        size_t size /**< Number of bytes in \a buffer. */
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   108
        );
fa3f66b783c1 Implemented reading direction of tty driver.
Florian Pose <fp@igh-essen.com>
parents: 1575
diff changeset
   109
1569
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
/*****************************************************************************/
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   111
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
/** @} */
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
61f5f4c35883 Interface management.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   114
#endif