u16 mip_system_com_mode(mip_interface *device_interface, u8 function_selector, u8 *com_mode) { u8 *response_data; u16 response_data_size; u16 return_code; u8 command_data[2]; mip_field_header *field_header_ptr; //Fill-in the command data command_data[0] = function_selector; command_data[1] = *com_mode; return_code = mip_interface_send_command_with_response(device_interface, MIP_SYSTEM_COMMAND_SET, MIP_SYSTEM_CMD_COM_MODE, command_data, 2, &response_data, &response_data_size, MIP_INTERFACE_DEFAULT_COMMAND_RESPONSE_TIMEOUT_MS); //Copy the data to the provided buffer on success if present if((return_code == MIP_INTERFACE_OK) && (response_data != NULL)) { field_header_ptr = (mip_field_header*)response_data; if((field_header_ptr->descriptor == MIP_SYSTEM_REPLY_COM_MODE) && (field_header_ptr->size >= sizeof(mip_field_header) + sizeof(u8))) { memcpy(com_mode, response_data + sizeof(mip_field_header), sizeof(u8)); } else return_code = MIP_INTERFACE_ERROR; } return return_code; }
u16 mip_base_cmd_built_in_test(mip_interface *device_interface, u32 *bit_result) { u8 *response_data; u16 response_data_size; u16 return_code; mip_field_header *field_header_ptr; return_code = mip_interface_send_command_with_response(device_interface, MIP_BASE_COMMAND_DESC_SET, MIP_CMD_DESC_BASE_BUILT_IN_TEST, NULL, 0, &response_data, &response_data_size, MIP_INTERFACE_LONG_COMMAND_RESPONSE_TIMEOUT_MS); //Copy the data to the provided buffer on success if(return_code == MIP_INTERFACE_OK) { field_header_ptr = (mip_field_header*) response_data; if((field_header_ptr->descriptor == MIP_REPLY_DESC_BASE_BUILT_IN_TEST) && (field_header_ptr->size >= sizeof(mip_field_header) + sizeof(u32))) { memcpy(bit_result, response_data + sizeof(mip_field_header), response_data_size - sizeof(mip_field_header)); } else return_code = MIP_INTERFACE_ERROR; } return return_code; }
u16 mip_base_cmd_get_device_info(mip_interface *device_interface, base_device_info_field *device_info) { u8 *response_data; u16 response_data_size; u16 return_code; mip_field_header *field_header_ptr; memset(device_info, 0, sizeof(base_device_info_field)); return_code = mip_interface_send_command_with_response(device_interface, MIP_BASE_COMMAND_DESC_SET, MIP_CMD_DESC_BASE_GET_DEVICE_INFO, NULL, 0, &response_data, &response_data_size, MIP_INTERFACE_DEFAULT_COMMAND_RESPONSE_TIMEOUT_MS); //Copy the data to the provided buffer on success if(return_code == MIP_INTERFACE_OK) { field_header_ptr = (mip_field_header*) response_data; if((field_header_ptr->descriptor == MIP_REPLY_DESC_BASE_DEVICE_INFO) && (field_header_ptr->size >= sizeof(mip_field_header) + sizeof(base_device_info_field))) { memcpy(device_info, response_data + sizeof(mip_field_header), response_data_size - sizeof(mip_field_header)); //Byteswap if enabled if(MIP_SDK_CONFIG_BYTESWAP) { byteswap_inplace(&device_info->firmware_version, 2); } } else return_code = MIP_INTERFACE_ERROR; } return return_code; }
u16 mip_base_cmd_get_device_supported_descriptors(mip_interface *device_interface, u8 *response_buffer, u16 *response_size) { u8 *response_data; u16 response_data_size; u16 return_code; mip_field_header *field_header_ptr; u16 *short_ptr; u16 user_buffer_size = *response_size; u16 i; //Initialize the response size *response_size = 0; return_code = mip_interface_send_command_with_response(device_interface, MIP_BASE_COMMAND_DESC_SET, MIP_CMD_DESC_BASE_GET_DEVICE_DESCRIPTORS, NULL, 0, &response_data, &response_data_size, MIP_INTERFACE_DEFAULT_COMMAND_RESPONSE_TIMEOUT_MS); //Copy the data to the provided buffer on success if present if((return_code == MIP_INTERFACE_OK) && (response_data != NULL)) { field_header_ptr = (mip_field_header*) response_data; if((field_header_ptr->size - sizeof(mip_field_header)) <= user_buffer_size) { memcpy(response_buffer, response_data + sizeof(mip_field_header), field_header_ptr->size - sizeof(mip_field_header)); *response_size = field_header_ptr->size - sizeof(mip_field_header); //Byteswap the descriptors if enabled if(MIP_SDK_CONFIG_BYTESWAP) { short_ptr = (u16*)response_buffer; for(i=0; i<*response_size/2; i++) byteswap_inplace(&short_ptr[i], sizeof(u16)); } } else { *response_size = 0; return_code = MIP_INTERFACE_ERROR; } } return return_code; }