CID.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Print.h>
4 
5 namespace Storage::SD
6 {
7 struct __attribute__((packed)) CID {
9  char oid[2];
10  char pnm[5];
12  uint32_t psn;
15  uint8_t crc : 7;
16 
17  void bswap()
18  {
19  psn = __builtin_bswap32(psn);
20  mdt = __builtin_bswap16(mdt);
21  }
22 
24  {
25  return 2000 + ((mdt >> 4) & 0xff);
26  }
27 
29  {
30  return mdt & 0x0f;
31  }
32 
33  uint8_t major() const
34  {
35  return prv >> 4;
36  }
37 
38  uint8_t minor() const
39  {
40  return prv & 0x0f;
41  }
42 
43  size_t printTo(Print& p) const;
44 };
45 static_assert(sizeof(CID) == 16, "Bad CID struct");
46 
47 } // namespace Storage::SD
uint8_t crc
7-bit checksum
Definition: CID.h:15
uint8_t prv
Product revision.
Definition: CID.h:11
uint16_t mdt
Manufacturing date.
Definition: CID.h:13
uint8_t not_used
Always 1.
Definition: CID.h:14
void bswap()
Definition: CID.h:17
Definition: CID.h:7
uint8_t minor() const
Definition: CID.h:38
uint8_t mid
Manufacturer ID.
Definition: CID.h:8
Definition: Card.h:15
Provides formatted output to stream.
Definition: Print.h:36
uint16_t mdt_year() const
Definition: CID.h:23
uint32_t psn
Product serial number.
Definition: CID.h:12
uint8_t major() const
Definition: CID.h:33
uint8_t mdt_month() const
Definition: CID.h:28