forked from Ivasoft/DSView
Update sdcard_sd decoder (fix issue #296)
This commit is contained in:
@@ -144,42 +144,8 @@ accepted_voltages = {
|
||||
# All other values: "not defined".
|
||||
}
|
||||
|
||||
card_status = {
|
||||
0: 'Reserved for manufacturer test mode',
|
||||
1: 'Reserved for manufacturer test mode',
|
||||
2: 'Reserved for application specific commands',
|
||||
3: 'AKE_SEQ_ERROR',
|
||||
4: 'Reserved for SDIO card',
|
||||
5: 'APP_CMD',
|
||||
6: 'Unknown',
|
||||
7: 'Unknown',
|
||||
8: 'READY_FOR_DATA',
|
||||
9: 'CURRENT_STATE', # CURRENT_STATE is a 4-bit value (decimal: 0..15).
|
||||
10: 'CURRENT_STATE',
|
||||
11: 'CURRENT_STATE',
|
||||
12: 'CURRENT_STATE',
|
||||
13: 'ERASE_RESET',
|
||||
14: 'CARD_ECC_DISABLED',
|
||||
15: 'WP_ERASE_SKIP',
|
||||
16: 'CSD_OVERWRITE',
|
||||
17: 'Reserved for DEFERRED_RESPONSE', # See eSD addendum
|
||||
18: 'Reserved',
|
||||
19: 'ERROR',
|
||||
20: 'CC_ERROR',
|
||||
21: 'CARD_ECC_FAILED',
|
||||
22: 'ILLEGAL_COMMAND',
|
||||
23: 'COM_CRC_ERROR',
|
||||
24: 'LOCK_UNLOCK_FAILED',
|
||||
25: 'CARD_IS_LOCKED',
|
||||
26: 'WP_VIOLATION',
|
||||
27: 'ERASE_PARAM',
|
||||
28: 'ERASE_SEQ_ERROR',
|
||||
29: 'BLOCK_LEN_ERROR',
|
||||
30: 'ADDRESS_ERROR',
|
||||
31: 'OUT_OF_RANGE',
|
||||
}
|
||||
|
||||
sd_status = {
|
||||
# 311:0: Reserved for manufacturer
|
||||
# 391:312: Reserved
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
##
|
||||
## This file is part of the libsigrokdecode project.
|
||||
##
|
||||
## Copyright (C) 2012-2014 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
## Copyright (C) 2012-2020 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
@@ -17,6 +17,10 @@
|
||||
## along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
from enum import Enum, IntEnum, unique
|
||||
from itertools import chain
|
||||
import re
|
||||
|
||||
# Return the specified BCD number (max. 8 bits) as integer.
|
||||
def bcd2int(b):
|
||||
return (b & 0x0f) + ((b >> 4) * 10)
|
||||
@@ -34,3 +38,47 @@ def bitunpack(num, minbits=0):
|
||||
num >>= 1
|
||||
minbits -= 1
|
||||
return tuple(res)
|
||||
|
||||
@unique
|
||||
class SrdStrEnum(Enum):
|
||||
@classmethod
|
||||
def from_list(cls, name, l):
|
||||
# Keys are limited/converted to [A-Z0-9_], values can be any string.
|
||||
items = [(re.sub('[^A-Z0-9_]', '_', l[i]), l[i]) for i in range(len(l))]
|
||||
return cls(name, items)
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, name, s):
|
||||
return cls.from_list(name, s.split())
|
||||
|
||||
@unique
|
||||
class SrdIntEnum(IntEnum):
|
||||
@classmethod
|
||||
def _prefix(cls, p):
|
||||
return tuple([a.value for a in cls if a.name.startswith(p)])
|
||||
|
||||
@classmethod
|
||||
def prefixes(cls, prefix_list):
|
||||
if isinstance(prefix_list, str):
|
||||
prefix_list = prefix_list.split()
|
||||
return tuple(chain(*[cls._prefix(p) for p in prefix_list]))
|
||||
|
||||
@classmethod
|
||||
def _suffix(cls, s):
|
||||
return tuple([a.value for a in cls if a.name.endswith(s)])
|
||||
|
||||
@classmethod
|
||||
def suffixes(cls, suffix_list):
|
||||
if isinstance(suffix_list, str):
|
||||
suffix_list = suffix_list.split()
|
||||
return tuple(chain(*[cls._suffix(s) for s in suffix_list]))
|
||||
|
||||
@classmethod
|
||||
def from_list(cls, name, l):
|
||||
# Manually construct (Python 3.4 is missing the 'start' argument).
|
||||
# Python defaults to start=1, but we want start=0.
|
||||
return cls(name, [(l[i], i) for i in range(len(l))])
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, name, s):
|
||||
return cls.from_list(name, s.split())
|
||||
|
||||
Reference in New Issue
Block a user