From b45ed50a316a8e510a711ed8d3f7cd6e73a769c9 Mon Sep 17 00:00:00 2001 From: Christian Sueltrop Date: Wed, 8 Aug 2012 10:30:00 +0200 Subject: [PATCH] Bugfix: Decomposing messages * Fixed a bug in the CanMessage.decomposeData --- CANLibrary/CanMessage.py | 8 ++++---- CANLibrary/CanMessage.pyc | Bin 4680 -> 4680 bytes CANLibrary/CanSignal.pyc | Bin 2201 -> 2160 bytes CANLibrary/PCan.py | 31 ++++++++++++++++++------------- CANLibrary/PCan.pyc | Bin 4591 -> 4662 bytes 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/CANLibrary/CanMessage.py b/CANLibrary/CanMessage.py index 886f312..0ff18a6 100644 --- a/CANLibrary/CanMessage.py +++ b/CANLibrary/CanMessage.py @@ -123,7 +123,7 @@ class CanMessage(object): This method is basically the reversion of the method composeData. ''' def decomposeData(self): - for sigKey in self.Signals: + for sigKey in self.Signals: sig = self.Signals[sigKey] tgtBegin = 0 # writing the target data (to the signal) always starts at the first byte srcBegin = sig.Begin # where the target data is in the message is defined in the Begin field of the CanSignal object. Unit: bits @@ -139,8 +139,8 @@ class CanMessage(object): if srcByteNo >= self.Length: sys.exit('Signal data not in message (message too short)') - tmp = (self.Data[srcByteNo] & (1< 0: # the bit shall be set sig.Data[tgtByteNo] |= (1<= 8: tgtBitNo = 0 tgtByteNo += 1 - + self.Signals[sigKey] = sig ''' diff --git a/CANLibrary/CanMessage.pyc b/CANLibrary/CanMessage.pyc index 49de3ae7af5c8cccdd063bfe9382db653de4beb0..eee5133b2e915d3da9e5b39e806d37cdd04fe9aa 100644 GIT binary patch delta 69 zcmV-L0J{IkB*-KO1M>|Er6MA+2VV^j2mn4neF^}43IJpQ0BZ!Zbq%Hg0ezDk45+q0<%;PiU9$qliv`@12G9IldBP(dV>=B delta 86 zcmX@1azcfj`7L~S}ukfE`}6FhHU1|rM$}+8LKDD@GFY5@Gwd- mNicIU@-VV7@-jhaL6*%S{9TNUt0vzUILWNfsXuwO;9LM3sS-2* diff --git a/CANLibrary/CanSignal.pyc b/CANLibrary/CanSignal.pyc index a00b8a279166777f9ba7c6b473130d9ccaf91dee..c203f40fcf88b514b3ff14cef1bba7b0784aa19d 100644 GIT binary patch delta 166 zcmbO!_(8yx`7-{%DGUrzK$4Lmm60Khks*bNp@o5=nSmiP ziishGnITw%1*FnsVyud=b4F2SaY<%koh4;2Pt3zDPRKtC9WN) delta 207 zcmew$FjFv=`7&` zm>E);8Pb3vEDS9S49yG-kx?ulrNJ7kAQQAEx~lLOm!{^F6y+CiW&Q^Ozl}99%#1>t zZ!%jjF{*49Vl!Z5G@R_rK2Mh$q=N%Uu(7f+aSCzrg3Sn$0E(1=+*DjyTmmvRv8X7q Ua`IpH41Ta3Y#<#>Jd8Zd06U!~1^@s6 diff --git a/CANLibrary/PCan.py b/CANLibrary/PCan.py index be118ef..b27c906 100644 --- a/CANLibrary/PCan.py +++ b/CANLibrary/PCan.py @@ -110,16 +110,21 @@ class PcanAdapter (object): Tries to receive a CAN message and puts its data into the according CanMessage object's Data field. This method should be called frequently. ''' - result, msg, timestamp = self.Pcan.Read(self.Channel) - - if result == PCANBasic.PCAN_ERROR_OK: - # loop through the messages and look for one that matches the received message: - for msgKey in self.Messages: - if self.Messages[msgKey].Id == msg.ID: - if msg.LEN != self.Messages[msgKey].Length: - # an error message could be posted at this point - pass - else: - for i in range(0, self.Messages[msgKey].Length): - self.Messages[msgKey].Data[i] = msg.DATA[i] - self.Messages[msgKey].decomposeData() \ No newline at end of file + + while True: # do this while messages are read from the bus + result, msg, timestamp = self.Pcan.Read(self.Channel) + + if result == PCANBasic.PCAN_ERROR_OK: + # loop through the messages and look for one that matches the received message: + for msgKey in self.Messages: + if self.Messages[msgKey].Id == msg.ID: + if msg.LEN != self.Messages[msgKey].Length: + # an error message could be posted at this point + pass + else: + #print msgKey + for i in range(0, self.Messages[msgKey].Length): + self.Messages[msgKey].Data[i] = msg.DATA[i] + self.Messages[msgKey].decomposeData() + elif result == PCANBasic.PCAN_ERROR_QRCVEMPTY: + break diff --git a/CANLibrary/PCan.pyc b/CANLibrary/PCan.pyc index 54e79cfe2c2a76c7f360e140adfbc77f9aca746e..2cc8dcbf58bdb786d6f79488b96fba620b306fdd 100644 GIT binary patch delta 419 zcmY*UOG^S#6#mY=&iE)Bg@Oi2?Xid!ty;7Y(#%DRN~ebii3n~QTcl1PG{Y=h1VMpa zf__1phzKG4743rlLbND|T6Y~H3=W6yan9j8@3W6{e*PH_@%T*Fze`Kq@&X+^oSqXM ziV0RwldIL^TC!)dZ-rW-8knM1&kZayN&2CLBrl;a=6(QZzrq5VZ?FNAU@{MIbO`$# z4#8n?IBbIDgQ=j-(0oSw-WyY~R=$Aa`z5vyy6K0_UbtmF)1%cvBL>|Smozf%%@?J_ngO{hVNGmS+^ dC!KMgqy)uC6P3s{rNmiuU1Xw*v?7k8?hjStSn~h? delta 356 zcmYk1ze~e#5XIkJ64OT8rh-Bi+p3d;i$evg;E%;c>>yn%Qm8{xZD|^zgoL79I;c>; zi-WVf6m;m~;^v^Ue}sc5xcO~xD7@kB-RItMkBgrRy7HAU*5`A5{eV{b<)w$-6_F!m zxu|Yc&Z>h`{?Rgi#j_jr?6K=M+?EMoe|vK;Yu9bhuAJEZ;3BrlpE zY6@Hz%@?!_@C;N5#nEjI(Rv(RmZ>>}(vU%u2sBt@z|_bnG%ryaGZW|n)XYPwR0qU! ua!5&Wo;ni0shgQ;`5&}7PO(WAS*&oDGUDF6r8V)M-W9#{GHr;bbmtFiJW+T6