IDENTIFY DRIVE
(&mut self, drive: u8)
| 198 | |
| 199 | // IDENTIFY DRIVE |
| 200 | fn id_drive(&mut self, drive: u8) -> Result<IDResponse, ()> |
| 201 | { |
| 202 | if self.check_floating_bus().is_err() |
| 203 | { |
| 204 | return Ok(IDResponse::None); |
| 205 | } |
| 206 | |
| 207 | self.drivesel(drive)?; |
| 208 | self.write_cmd_params(drive, 0)?; |
| 209 | |
| 210 | if self.writecmd(Command::ID).is_err() |
| 211 | { |
| 212 | if self.status() == 0 |
| 213 | { |
| 214 | return Ok(IDResponse::None); |
| 215 | } |
| 216 | else |
| 217 | { |
| 218 | return Err(()); |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | match (self.lba1(), self.lba2()) |
| 223 | { |
| 224 | (0x00, 0x00) => Ok(IDResponse::ATA([(); 256].map(|_| |
| 225 | { |
| 226 | self.data_read() |
| 227 | }))), |
| 228 | |
| 229 | (0x14, 0xEB) => Ok(IDResponse::ATAPI), |
| 230 | (0x3C, 0x3C) => Ok(IDResponse::SATA), |
| 231 | (_, _) => Err(()), |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | |
| 236 |