master/mailbox.c
changeset 431 47e7f99005c0
parent 424 b792665b2dba
child 504 63d11bdfe3df
equal deleted inserted replaced
430:74754f45d5fa 431:47e7f99005c0
   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;