## 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 <http://www.gnu.org/licenses/>.
##
import sigrokdecode as srd
return reduce(lambda i, v: (i >> 1) | (v << (len(bits) - 1)), bits, 0)
class Decoder(srd.Decoder):
- api_version = 2
+ api_version = 3
id = 'qi'
name = 'Qi'
longname = 'Qi charger protocol'
- desc = 'Protocol used by Qi receiver'
+ desc = 'Protocol used by Qi receiver.'
license = 'gplv2+'
inputs = ['logic']
- outputs = ['qi']
+ outputs = []
+ tags = ['Embedded/industrial', 'Wireless/RF']
channels = (
{'id': 'qi', 'name': 'Qi', 'desc': 'Demodulated Qi data line'},
)
annotations = (
- ('bits', 'Bits'),
- ('bytes-errors', 'Bit errors'),
- ('bytes-start', 'Start bits'),
- ('bytes-info', 'Info bits'),
- ('bytes-data', 'Data bytes'),
- ('packets-data', 'Packet data'),
- ('packets-checksum-ok', 'Packet checksum'),
- ('packets-checksum-err', 'Packet checksum'),
+ ('bit', 'Bit'),
+ ('byte-error', 'Bit error'),
+ ('byte-start', 'Start bit'),
+ ('byte-info', 'Info bit'),
+ ('byte-data', 'Data byte'),
+ ('packet-data', 'Packet data'),
+ ('packet-checksum-ok', 'Packet checksum OK'),
+ ('packet-checksum-err', 'Packet checksum error'),
)
annotation_rows = (
('bits', 'Bits', (0,)),
)
def __init__(self):
+ self.reset()
+
+ def reset(self):
self.samplerate = None
self.reset_variables()
'C: PC = %d MP = %d P = %d C = %d WS = %d WO = %d' %
(powerclass, maxpower, prop, count, winsize, winoff),
'Configuration', 'C'])
- elif self.packet[0] == 0x71: # Identification
+ elif self.packet[0] == 0x71: # Identification
version = '%d.%d' % ((self.packet[1] & 0xf0) >> 4, self.packet[1] & 0x0f)
mancode = '%02x%02x' % (self.packet[2], self.packet[3])
devid = '%02x%02x%02x%02x' % (self.packet[4] & ~0x80,
self.bits.clear()
self.bitsi.clear()
- def next_sample(self, s):
- if s == self.prev:
- self.counter += 1
- else:
- self.handle_transition(self.counter, s == 0)
- self.prev = s
- self.counter = 1
-
- def decode(self, ss, es, data):
+ def decode(self):
if not self.samplerate:
raise SamplerateError('Cannot decode without samplerate.')
- for (self.samplenum, (qi,)) in data:
- self.next_sample(qi)
+
+ (qi,) = self.wait()
+ self.handle_transition(self.samplenum, qi == 0)
+ while True:
+ prev = self.samplenum
+ (qi,) = self.wait({0: 'e'})
+ self.handle_transition(self.samplenum - prev, qi == 0)