X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fsdcard_sd%2Fpd.py;h=b544b374a86f9744da3c37d07ba58c296b61655e;hb=ee390f6741427244a43de56e6254e487eecbc530;hp=838222424c6363e5757839e12668e723a9ca047d;hpb=ada4c3a342cdfc40bb83a927ece536cc984e27be;p=libsigrokdecode.git diff --git a/decoders/sdcard_sd/pd.py b/decoders/sdcard_sd/pd.py index 8382224..b544b37 100644 --- a/decoders/sdcard_sd/pd.py +++ b/decoders/sdcard_sd/pd.py @@ -14,15 +14,14 @@ ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## along with this program; if not, see . ## import sigrokdecode as srd -from sdcard import (cmd_names, acmd_names, accepted_voltages, card_status, sd_status) +from common.sdcard import (cmd_names, acmd_names, accepted_voltages, card_status, sd_status) class Decoder(srd.Decoder): - api_version = 2 + api_version = 3 id = 'sdcard_sd' name = 'SD card (SD mode)' longname = 'Secure Digital card (SD mode)' @@ -61,11 +60,9 @@ class Decoder(srd.Decoder): ('cmd', 'Commands', tuple(range(128))), ) - def __init__(self, **kwargs): + def __init__(self): self.state = 'GET COMMAND TOKEN' self.token = [] - self.oldpins = None - self.oldclk = 0 self.is_acmd = False # Indicates CMD vs. ACMD self.cmd = None self.arg = None @@ -167,7 +164,7 @@ class Decoder(srd.Decoder): # Handle command. s = 'ACMD' if self.is_acmd else 'CMD' self.cmd_str = '%s%d (%s)' % (s, self.cmd, self.cmd_name(self.cmd)) - if self.cmd in (0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 41, 51, 55): + if self.cmd in (0, 2, 3, 6, 7, 8, 9, 10, 13, 41, 51, 55): self.state = 'HANDLE CMD%d' % self.cmd else: self.state = 'HANDLE CMD999' @@ -404,19 +401,10 @@ class Decoder(srd.Decoder): self.token, self.state = [], 'GET COMMAND TOKEN' - def decode(self, ss, es, data): - for (self.samplenum, pins) in data: - - # Ignore identical samples early on (for performance reasons). - if self.oldpins == pins: - continue - self.oldpins, (cmd, clk, dat0, dat1, dat2, dat3) = pins, pins - + def decode(self): + while True: # Wait for a rising CLK edge. - if not (self.oldclk == 0 and clk == 1): - self.oldclk = clk - continue - self.oldclk = clk + (cmd, clk, dat0, dat1, dat2, dat3) = self.wait({1: 'r'}) # State machine. if self.state == 'GET COMMAND TOKEN':