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 {
8  uint8_t mid;
9  char oid[2];
10  char pnm[5];
11  uint8_t prv;
12  uint32_t psn;
13  uint16_t mdt;
14  uint8_t not_used : 1;
15  uint8_t crc : 7;
16 
17  void bswap()
18  {
19  psn = __builtin_bswap32(psn);
20  mdt = __builtin_bswap16(mdt);
21  }
22 
23  uint16_t mdt_year() const
24  {
25  return 2000 + ((mdt >> 4) & 0xff);
26  }
27 
28  uint8_t mdt_month() const
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
Provides formatted output to stream.
Definition: Print.h:37
Definition: Card.h:16
Definition: CID.h:7
uint8_t crc
7-bit checksum
Definition: CID.h:15
uint8_t prv
Product revision.
Definition: CID.h:11
uint8_t mdt_month() const
Definition: CID.h:28
void bswap()
Definition: CID.h:17
uint16_t mdt
Manufacturing date.
Definition: CID.h:13
uint16_t mdt_year() const
Definition: CID.h:23
uint8_t not_used
Always 1.
Definition: CID.h:14
size_t printTo(Print &p) const
uint8_t major() const
Definition: CID.h:33
uint32_t psn
Product serial number.
Definition: CID.h:12
uint8_t mid
Manufacturer ID.
Definition: CID.h:8
uint8_t minor() const
Definition: CID.h:38