mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 10:38:41 +00:00
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package sdcard
|
|
|
|
import "fmt"
|
|
|
|
type CID struct {
|
|
//// byte 0
|
|
ManufacturerID byte
|
|
//uint8_t mid; // Manufacturer ID
|
|
//// byte 1-2
|
|
OEMApplicationID uint16
|
|
//char oid[2]; // OEM/Application ID
|
|
//// byte 3-7
|
|
ProductName string
|
|
//char pnm[5]; // Product name
|
|
//// byte 8
|
|
ProductVersion string
|
|
//unsigned prv_m : 4; // Product revision n.m
|
|
//unsigned prv_n : 4;
|
|
//// byte 9-12
|
|
ProductSerialNumber uint32
|
|
//uint32_t psn; // Product serial number
|
|
//// byte 13
|
|
ManufacturingYear byte
|
|
ManufacturingMonth byte
|
|
//unsigned mdt_year_high : 4; // Manufacturing date
|
|
//unsigned reserved : 4;
|
|
//// byte 14
|
|
//unsigned mdt_month : 4;
|
|
//unsigned mdt_year_low : 4;
|
|
//// byte 15
|
|
Always1 byte
|
|
//unsigned always1 : 1;
|
|
CRC byte
|
|
//unsigned crc : 7;
|
|
}
|
|
|
|
func NewCID(buf []byte) *CID {
|
|
return &CID{
|
|
ManufacturerID: buf[0],
|
|
OEMApplicationID: (uint16(buf[0]) << 8) | uint16(buf[1]),
|
|
ProductName: string(buf[3:8]),
|
|
ProductVersion: fmt.Sprintf("%d.%d", (buf[8]&0xF0)>>4, buf[8]&0x0F),
|
|
ProductSerialNumber: (uint32(buf[9]) << 24) | (uint32(buf[10]) << 16) | (uint32(buf[11]) << 8) | uint32(buf[12]),
|
|
ManufacturingYear: (buf[13] & 0xF0) | (buf[14] & 0x0F),
|
|
ManufacturingMonth: (buf[14] & 0xF0) >> 4,
|
|
Always1: (buf[15] & 0x80) >> 7,
|
|
CRC: buf[15] & 0x7F,
|
|
}
|
|
}
|