master/mailbox.h
changeset 2589 2b9c78543663
parent 2094 83e9160319ec
child 2591 23b360e4a530
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
    35 /*****************************************************************************/
    35 /*****************************************************************************/
    36 
    36 
    37 #ifndef __EC_MAILBOX_H__
    37 #ifndef __EC_MAILBOX_H__
    38 #define __EC_MAILBOX_H__
    38 #define __EC_MAILBOX_H__
    39 
    39 
    40 #include "globals.h"
    40 #include "slave.h"
    41 #include "datagram.h"
       
    42 
    41 
    43 /*****************************************************************************/
    42 /*****************************************************************************/
    44 
    43 
    45 /** Size of the mailbox header.
    44 /** Size of the mailbox header.
    46  */
    45  */
    47 #define EC_MBOX_HEADER_SIZE 6
    46 #define EC_MBOX_HEADER_SIZE 6
    48 
    47 
    49 /*****************************************************************************/
    48 /*****************************************************************************/
    50 
    49 
    51 /** EtherCAT slave mailbox.
    50 uint8_t *ec_slave_mbox_prepare_send(const ec_slave_t *, ec_datagram_t *,
    52  */
       
    53 struct ec_mailbox
       
    54 {
       
    55     ec_datagram_t *datagram; /**< Datagram used for the mailbox content. */
       
    56 #ifdef EC_REDUCE_MBOXFRAMESIZE
       
    57     ec_datagram_t end_datagram; /**< Datagram used for writing the end byte to
       
    58                                   the mailbox. */
       
    59 #endif
       
    60 };
       
    61 typedef struct ec_mailbox ec_mailbox_t; /**< \see ec_mailbox. */
       
    62 
       
    63 /*****************************************************************************/
       
    64 
       
    65 void ec_mbox_init(ec_mailbox_t *, ec_datagram_t *);
       
    66 void ec_mbox_clear(ec_mailbox_t *);
       
    67 
       
    68 /**
       
    69    Checks the datagrams states.
       
    70 */
       
    71 static inline int ec_mbox_is_datagram_state(
       
    72         ec_mailbox_t *mbox,
       
    73         ec_datagram_state_t state
       
    74         )
       
    75 {
       
    76     return (mbox->datagram->state == state)
       
    77 #ifdef EC_REDUCE_MBOXFRAMESIZE
       
    78          && (mbox->end_datagram.type == EC_DATAGRAM_NONE
       
    79                  || mbox->end_datagram.state == state)
       
    80 #endif
       
    81          ;
       
    82 }
       
    83 
       
    84 /**
       
    85    Checks the datagrams working counter.
       
    86 */
       
    87 static inline int ec_mbox_is_datagram_wc(
       
    88         ec_mailbox_t *mbox,
       
    89         size_t wc
       
    90         )
       
    91 {
       
    92     return (mbox->datagram->working_counter == wc)
       
    93 #ifdef EC_REDUCE_MBOXFRAMESIZE
       
    94          && (mbox->end_datagram.type == EC_DATAGRAM_NONE
       
    95                  || mbox->end_datagram.working_counter == wc)
       
    96 #endif
       
    97          ;
       
    98 }
       
    99 
       
   100 void ec_slave_mbox_queue_datagrams(const ec_slave_t *, ec_mailbox_t *);
       
   101 void ec_master_mbox_queue_datagrams(ec_master_t *, ec_mailbox_t *);
       
   102 uint8_t *ec_slave_mbox_prepare_send(const ec_slave_t *, ec_mailbox_t *,
       
   103                                     uint8_t, size_t);
    51                                     uint8_t, size_t);
   104 int ec_slave_mbox_prepare_check(const ec_slave_t *, ec_mailbox_t *);
    52 int      ec_slave_mbox_prepare_check(const ec_slave_t *, ec_datagram_t *);
   105 int ec_slave_mbox_check(ec_mailbox_t *);
    53 int      ec_slave_mbox_check(const ec_datagram_t *);
   106 int ec_slave_mbox_prepare_fetch(const ec_slave_t *, ec_mailbox_t *);
    54 int      ec_slave_mbox_prepare_fetch(const ec_slave_t *, ec_datagram_t *);
   107 uint8_t *ec_slave_mbox_fetch(const ec_slave_t *, ec_mailbox_t *,
    55 uint8_t *ec_slave_mbox_fetch(const ec_slave_t *, const ec_datagram_t *,
   108                              uint8_t *, size_t *);
    56                              uint8_t *, size_t *);
   109 
    57 
   110 /*****************************************************************************/
    58 /*****************************************************************************/
   111 
    59 
   112 #endif
    60 #endif