| 365 | */ |
| 366 | |
| 367 | SdStatus decodeSdStatus(const std::array<uint8_t, 64>& buffer) |
| 368 | { |
| 369 | SdStatus sdStatus {}; |
| 370 | sdStatus.datBusWidth = extractBits(ConstUint8Range{buffer}, 510, 511 - 510 + 1); |
| 371 | sdStatus.securedMode = extractBits(ConstUint8Range{buffer}, 509, 509 - 509 + 1); |
| 372 | sdStatus.sdCardType = extractBits(ConstUint8Range{buffer}, 480, 495 - 480 + 1); |
| 373 | sdStatus.sizeOfProtectedArea = extractBits(ConstUint8Range{buffer}, 448, 479 - 448 + 1); |
| 374 | sdStatus.speedClass = extractBits(ConstUint8Range{buffer}, 440, 447 - 440 + 1); |
| 375 | sdStatus.performanceMove = extractBits(ConstUint8Range{buffer}, 432, 439 - 432 + 1); |
| 376 | sdStatus.auSize = extractBits(ConstUint8Range{buffer}, 428, 431 - 428 + 1); |
| 377 | sdStatus.eraseSize = extractBits(ConstUint8Range{buffer}, 408, 423 - 408 + 1); |
| 378 | sdStatus.eraseTimeout = extractBits(ConstUint8Range{buffer}, 402, 407 - 402 + 1); |
| 379 | sdStatus.eraseOffset = extractBits(ConstUint8Range{buffer}, 400, 401 - 400 + 1); |
| 380 | sdStatus.uhsSpeedGrade = extractBits(ConstUint8Range{buffer}, 396, 399 - 396 + 1); |
| 381 | sdStatus.uhsAuSize = extractBits(ConstUint8Range{buffer}, 392, 395 - 392 + 1); |
| 382 | sdStatus.videoSpeedClass = extractBits(ConstUint8Range{buffer}, 384, 391 - 384 + 1); |
| 383 | sdStatus.vscAuSize = extractBits(ConstUint8Range{buffer}, 368, 377 - 368 + 1); |
| 384 | sdStatus.susAddr = extractBits(ConstUint8Range{buffer}, 346, 367 - 346 + 1); |
| 385 | sdStatus.appPerfClass = extractBits(ConstUint8Range{buffer}, 336, 339 - 336 + 1); |
| 386 | sdStatus.performanceEnhance = extractBits(ConstUint8Range{buffer}, 328, 335 - 328 + 1); |
| 387 | sdStatus.discardSupport = extractBits(ConstUint8Range{buffer}, 313, 313 - 313 + 1); |
| 388 | sdStatus.fuleSupport = extractBits(ConstUint8Range{buffer}, 312, 312 - 312 + 1); |
| 389 | return sdStatus; |
| 390 | } |
| 391 | |
| 392 | /** |
| 393 | * \brief Waits while byte received via SPI satisfies predicate. |
no test coverage detected