From 9aa2d314661dc97188681572e8cde662acf52a9b Mon Sep 17 00:00:00 2001 From: Sergey Spivak Date: Sun, 7 Aug 2022 20:51:15 +0400 Subject: [PATCH] i2c_packet: decoder for forming packets from i2c data i2c_packet protocol decoder stacks with i2c PD and allows to combine several data bytes from "START" i2c condition until "STOP" and puts this data in a dedicated annotation. Possible data formats for data output are hex, ascii, dec, bin and oct. --- decoders/i2c_packet/__init__.py | 28 +++++ decoders/i2c_packet/pd.py | 198 ++++++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 decoders/i2c_packet/__init__.py create mode 100644 decoders/i2c_packet/pd.py diff --git a/decoders/i2c_packet/__init__.py b/decoders/i2c_packet/__init__.py new file mode 100644 index 00000000..41fa2511 --- /dev/null +++ b/decoders/i2c_packet/__init__.py @@ -0,0 +1,28 @@ +## +## This file is part of the libsigrokdecode project. +## +## Copyright (C) 2022 Sergey Spivak +## +## Permission is hereby granted, free of charge, to any person obtaining a copy +## of this software and associated documentation files (the "Software"), to deal +## in the Software without restriction, including without limitation the rights +## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +## copies of the Software, and to permit persons to whom the Software is +## furnished to do so, subject to the following conditions: +## +## The above copyright notice and this permission notice shall be included in all +## copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +## SOFTWARE. + +''' +Make data packets from I²C decoder data. +''' + +from .pd import Decoder diff --git a/decoders/i2c_packet/pd.py b/decoders/i2c_packet/pd.py new file mode 100644 index 00000000..5c299c7f --- /dev/null +++ b/decoders/i2c_packet/pd.py @@ -0,0 +1,198 @@ +## +## This file is part of the libsigrokdecode project. +## +## Copyright (C) 2022 Sergey Spivak +## +## Permission is hereby granted, free of charge, to any person obtaining a copy +## of this software and associated documentation files (the "Software"), to deal +## in the Software without restriction, including without limitation the rights +## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +## copies of the Software, and to permit persons to whom the Software is +## furnished to do so, subject to the following conditions: +## +## The above copyright notice and this permission notice shall be included in all +## copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +## SOFTWARE. + +from collections import deque +import sigrokdecode as srd + +''' +OUTPUT_PYTHON format: + +Packet: +[, ] + +: + - 'PACKET READ' (ADDRESS READ followed by one or several + DATA bytes until STOP or START REPEAT) + - 'PACKET WRITE' (ADDRESS WRITE followed by one or several + DATA bytes until STOP or START REPEAT) + - 'TRANSACTION END' (End of transaction, due toi STOP bus condition) + + is the tuple with slave address byte and tuple with data bytes +if ptype is 'PACKET READ' or 'PACKET WRITE'. +Slave addresses do not include bit 0 (the READ/WRITE indication bit). +