163 size_t *size /**< size of the received data */ |
163 size_t *size /**< size of the received data */ |
164 ) |
164 ) |
165 { |
165 { |
166 size_t data_size; |
166 size_t data_size; |
167 |
167 |
168 if ((data_size = EC_READ_U16(datagram->data)) > |
168 data_size = EC_READ_U16(datagram->data); |
169 slave->sii_tx_mailbox_size - 6) { |
169 |
|
170 if (data_size > slave->sii_tx_mailbox_size - 6) { |
170 EC_ERR("Corrupt mailbox response detected!\n"); |
171 EC_ERR("Corrupt mailbox response detected!\n"); |
|
172 ec_print_data(datagram->data, slave->sii_tx_mailbox_size); |
171 return NULL; |
173 return NULL; |
172 } |
174 } |
173 |
175 |
174 *type = EC_READ_U8(datagram->data + 5) & 0x0F; |
176 *type = EC_READ_U8(datagram->data + 5) & 0x0F; |
175 *size = data_size; |
177 *size = data_size; |
176 |
178 |
177 if (*type == 0x00) { |
179 if (*type == 0x00) { |
178 const ec_code_msg_t *mbox_msg; |
180 const ec_code_msg_t *mbox_msg; |
179 uint16_t code = EC_READ_U16(datagram->data + 8); |
181 uint16_t code = EC_READ_U16(datagram->data + 8); |
180 |
182 |
181 EC_ERR("Mailbox error response received.\n"); |
183 EC_ERR("Mailbox error response received - "); |
182 |
|
183 if (slave->master->debug_level) |
|
184 ec_print_data(datagram->data + 6, data_size); |
|
185 |
184 |
186 for (mbox_msg = mbox_error_messages; mbox_msg->code; mbox_msg++) { |
185 for (mbox_msg = mbox_error_messages; mbox_msg->code; mbox_msg++) { |
187 if (mbox_msg->code != code) continue; |
186 if (mbox_msg->code != code) continue; |
188 EC_ERR("Error reply code: 0x%04X: \"%s\".\n", |
187 printk("Code 0x%04X: \"%s\".\n", |
189 mbox_msg->code, mbox_msg->message); |
188 mbox_msg->code, mbox_msg->message); |
190 break; |
189 break; |
191 } |
190 } |
192 |
191 |
193 if (!mbox_msg->code) |
192 if (!mbox_msg->code) |
194 EC_ERR("Unknown error reply code 0x%04X.\n", code); |
193 printk("Unknown error reply code 0x%04X.\n", code); |
|
194 |
|
195 if (slave->master->debug_level) |
|
196 ec_print_data(datagram->data + 6, data_size); |
195 |
197 |
196 return NULL; |
198 return NULL; |
197 } |
199 } |
198 |
200 |
199 return datagram->data + 6; |
201 return datagram->data + 6; |