Exemple #1
0
    def doFrame(self, frame):
        """Function that handles incoming frames for the node"""
        if frame.id > 0x700 and frame.data[0] == self.nodeID:
            # We start a response frame in case we need it
            f = canbus.Frame(self.nodeID + 0x700,
                             [frame.id - 0x700, frame.data[1]])
            cmd = frame.data[1]
            if cmd == 0:  # Node identification
                # TODO: Fix the model number part
                f.data.extend([0x01, self.deviceType % 255, 1, 0, 0, 0])
            elif cmd == 1:  # Bitrate Set Command
                return None
            elif cmd == 2:  # Node Set Command
                self.nodeID = frame.data[2]
                f.data.append(0x00)
            # TODO: Fix these so they work??
            elif cmd == 3:  # Disable Parameter
                return None
            elif cmd == 4:  # Enable Parameter
                return None
            elif cmd == 5:  # Node Report
                return None
            elif cmd == 7:  # Firmware Update
                FCode = frame.data[3] << 8 | frame.data[2]
                if FCode == self.FWVCode:
                    FWChannel = frame.data[4]
                    f.data.append(0x00)
            return f

        return None
Exemple #2
0
 def getFrame(self):
     f = canbus.Frame(self.sendNode + 1792)
     f.data.append(self.destNode)
     f.data.append(self.controlCode)
     for each in self.data:
         f.data.append(each)
     return f
Exemple #3
0
def __func_airdata(node):
    global airdata
    t = time.time()
    frame = canbus.Frame()
    if t > airdata['lasttime'] + 1:
        if airdata['n'] == 0:
            o = (int(time.time() * 1000.0) % 40) - 20
            x = struct.pack('<H', (airdata['airspeed'] * 10 + o))
            frame.id = 0x183  # Indicated Airspeed
            frame.data = [node, 0, 0, ord(x[0]), ord(x[1])]
            airdata['n'] += 1
        elif airdata['n'] == 1:
            o = (int(time.time() * 1000.0) % 20) - 10
            x = struct.pack('<l', (airdata['altitude'] + o))
            frame.id = 0x184  # Indicated Altitude
            frame.data = [
                node, 0, 0,
                ord(x[0]),
                ord(x[1]),
                ord(x[2]),
                ord(x[3])
            ]
            airdata['n'] += 1
        elif airdata['n'] == 2:
            o = (int(time.time() * 1000.0) % 100) - 50
            x = struct.pack('<H', airdata['oat'] * 100 + o)
            frame.id = 0x407  # OAT
            frame.data = [node, 0, 0, ord(x[0]), ord(x[1])]
            airdata['n'] += 1
        else:
            airdata['n'] = 0
            airdata['lasttime'] = t
            return None
        return frame
Exemple #4
0
 def getFrame(self):
     frame = canbus.Frame()
     frame.id = self.channel*2 + 1760
     if self.type == "Response":
         frame.id += 1
     frame.data = self.data
     return frame
Exemple #5
0
 def getFrame(self):
     frame = canbus.Frame()
     frame.id = self.node
     frame.data.append(self.alarm % 256)
     frame.data.append(self.alarm / 256)
     for each in self.data:
         frame.data.append(each)
     return frame
Exemple #6
0
 def setName(self, name):
     s = name.upper()
     for i in parameters:
         if parameters[i].name.upper() == s:
             self.__frame = canbus.Frame(i)
             self.__identifier = i
             self.__parameterData(self.__frame.id)
             return
     raise ValueError("Unknown Parameter Name")
Exemple #7
0
    def recvFrame(self):
        result = self.__readResponse("R")

        if result[0] != 'r':
            raise BusReadError("Unknown response from Adapter")
        data = []
        for n in range((len(result) - 5) / 2):
            data.append(int(result[5 + n * 2:7 + n * 2], 16))
        frame = canbus.Frame(int(result[1:4], 16), data)
        return frame
Exemple #8
0
 def setIdentifier(self, identifier):
     """Set the identifier of the Parameter, identifier can be either
     the actual integer identifier or the name of the parameter"""
     if identifier in parameters:
         self.frame = canbus.Frame(identifier)
     else:
         raise ValueError("Bad Parameter Identifier Given")
         
     self.__identifier = self.frame.id
     self.__parameterData(self.frame.id)
Exemple #9
0
def __func_engine(node):
    global engine
    t = time.time()
    frame = canbus.Frame()
    if t > engine['lasttime'] + 1:
        if engine['n'] == 0:
            o = (int(time.time() * 100) % 10) - 5
            x = struct.pack('<H', (engine['cht'] + o) * 10)
            frame.id = 0x500  # Cylinder Head Temperature
            frame.data = [node, engine['i'], 0, ord(x[0]), ord(x[1])]
            engine['i'] += 1
            if engine['i'] == 4:
                engine['i'] = 0
                engine['n'] += 1
        else:
            engine['n'] = 0
            engine['lasttime'] = t
            return None
        return frame
Exemple #10
0
    if args.print_info == True:
        print("CANFIX Protocol Version " + version)
        print("Groups:")
        for each in groups:
            print("  %s %d-%d" %
                  (each["name"], each["startid"], each["endid"]))

        print("Parameters:")
        for each in parameters:
            print(parameters[each])

    if args.test:
        import canbus

        frames = []
        frames.append(canbus.Frame(0x023, [0x01, 0x02, 1, 2, 3, 4, 5]))
        frames.append(canbus.Frame(0x183, [2, 0, 0, 44, 5]))
        frames.append(canbus.Frame(0x183, [2, 0, 0x10, 0, 0]))
        frames.append(canbus.Frame(0x183, [2, 0, 0x20, 0xD0, 0x7]))
        frames.append(canbus.Frame(0x183, [2, 0, 0x30, 44, 2]))
        frames.append(canbus.Frame(0x184, [2, 0, 0, 0xd0, 0x7, 0, 0]))
        frames.append(canbus.Frame(0x184, [2, 0, 0, 0xff, 0xff, 255, 255]))
        frames.append(canbus.Frame(0x102, [3, 0, 0, 0x55, 0xAA]))
        frames.append(canbus.Frame(0x10E, [3, 1, 0, 0x02]))
        frames.append(
            canbus.Frame(
                0x587,
                [1, 0, 0,
                 ord('7'),
                 ord('2'),
                 ord('7'),