equal
deleted
inserted
replaced
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); |