master/mailbox.c
branchstable-1.2
changeset 1739 5fcbd29151d2
parent 1732 1cc865ba17c2
equal deleted inserted replaced
1738:bc89e3fba1a5 1739:5fcbd29151d2
    87 
    87 
    88 /*****************************************************************************/
    88 /*****************************************************************************/
    89 
    89 
    90 /**
    90 /**
    91    Prepares a datagram for checking the mailbox state.
    91    Prepares a datagram for checking the mailbox state.
       
    92    \todo: Determine sync manager used for receive mailbox
    92    \return 0 in case of success, else < 0
    93    \return 0 in case of success, else < 0
    93 */
    94 */
    94 
    95 
    95 int ec_slave_mbox_prepare_check(const ec_slave_t *slave, /**< slave */
    96 int ec_slave_mbox_prepare_check(const ec_slave_t *slave, /**< slave */
    96                                 ec_datagram_t *datagram /**< datagram */
    97                                 ec_datagram_t *datagram /**< datagram */
    97                                 )
    98                                 )
    98 {
    99 {
    99     // FIXME: second sync manager?
       
   100     if (ec_datagram_nprd(datagram, slave->station_address, 0x808, 8))
   100     if (ec_datagram_nprd(datagram, slave->station_address, 0x808, 8))
   101         return -1;
   101         return -1;
   102 
   102 
   103     return 0;
   103     return 0;
   104 }
   104 }
   166     size_t data_size;
   166     size_t data_size;
   167 
   167 
   168     data_size = EC_READ_U16(datagram->data);
   168     data_size = EC_READ_U16(datagram->data);
   169 
   169 
   170     if (data_size > slave->sii_tx_mailbox_size - 6) {
   170     if (data_size > slave->sii_tx_mailbox_size - 6) {
   171         EC_ERR("Corrupt mailbox response detected!\n");
   171         EC_ERR("Corrupt mailbox response received from slave %i!\n",
       
   172                slave->ring_position);
   172         ec_print_data(datagram->data, slave->sii_tx_mailbox_size);
   173         ec_print_data(datagram->data, slave->sii_tx_mailbox_size);
   173         return NULL;
   174         return NULL;
   174     }
   175     }
   175 
   176 
   176     *type = EC_READ_U8(datagram->data + 5) & 0x0F;
   177     *type = EC_READ_U8(datagram->data + 5) & 0x0F;
   178 
   179 
   179     if (*type == 0x00) {
   180     if (*type == 0x00) {
   180         const ec_code_msg_t *mbox_msg;
   181         const ec_code_msg_t *mbox_msg;
   181 	uint16_t code = EC_READ_U16(datagram->data + 8);
   182 	uint16_t code = EC_READ_U16(datagram->data + 8);
   182 
   183 
   183         EC_ERR("Mailbox error response received - ");
   184         EC_ERR("Mailbox error response received from slave %i - ",
       
   185                slave->ring_position);
   184 
   186 
   185 	for (mbox_msg = mbox_error_messages; mbox_msg->code; mbox_msg++) {
   187 	for (mbox_msg = mbox_error_messages; mbox_msg->code; mbox_msg++) {
   186             if (mbox_msg->code != code) continue;
   188             if (mbox_msg->code != code) continue;
   187             printk("Code 0x%04X: \"%s\".\n",
   189             printk("Code 0x%04X: \"%s\".\n",
   188                    mbox_msg->code, mbox_msg->message);
   190                    mbox_msg->code, mbox_msg->message);