Example #1
0
    def __init__( self, core, args ):
        self.job_init( core )


        self.cid = self.can_connect( args[0] )

        if len(args[1])>2 and args[1][:2] == "0x":
            self.nodeid = int( args[1], 16 )
        else:
            self.nodeid = int( args[1] )

        self.mode = { \
            "app":   self.MODE_APP,   \
            "bios":  self.MODE_BIOS,  \
            "start": self.MODE_START, \
            "reset": self.MODE_RESET, \
            }[args[2]]

        if self.mode == self.MODE_APP or self.mode == self.MODE_BIOS:
            self.hexfile = Hexfile( args[3] )
            self.finished = False
            self.programming = True
            self.dosend_file()
        elif self.mode == self.MODE_RESET:
            self.finished = True
            canp = can.CanPacket( can.nmt_id( can.CAN_NMT_RESET, self.nodeid, self.mynodeid ), [] )
            self.can_send( self.cid, canp )
        elif self.mode == self.MODE_START:
            self.finished = True
            canp = can.CanPacket( can.nmt_id( can.CAN_NMT_START_APP, self.nodeid, self.mynodeid ), [] )
            self.can_send( self.cid, canp )
            self.close()
Example #2
0
 def can_recieve( self, cid, canp ):
     if canp.id == can.nmt_id( can.CAN_NMT_PGM_ACK, self.mynodeid, self.nodeid ):
         self.dosend_file()
     elif canp.id == can.nmt_id( can.CAN_NMT_PGM_NACK, self.mynodeid, self.nodeid ):
         self.core.term.write( "Error programming" )
     elif canp.id == can.nmt_id( can.CAN_NMT_BIOS_START, self.mynodeid, self.nodeid ):
         self.core.term.write( "Node resetted, bios 0x%02x%02x, application: %d" % (canp.data[1], canp.data[0], canp.data[2]) )
         if not self.finished:
             self.core.term.write( "WARNING: Programming not finished" )
         self.close()
Example #3
0
    def dosend_file( self ):
        if self.programming:
            rec = self.hexfile.pop( 6 )

            if rec[0] == Hexfile.TYPE_DATA:
                type, offset, data = rec
                self.cnt += 1
                canp = can.CanPacket( can.nmt_id( can.CAN_NMT_PGM_DATA, self.nodeid, self.mynodeid ), [(offset) & 0xFF, (offset>>8) & 0xFF] + data )
                self.can_send( self.cid, canp )
            elif rec[0] == Hexfile.TYPE_OFFSET:
                type, offset = rec
                self.cnt += 1
                canp = can.CanPacket( can.nmt_id( can.CAN_NMT_PGM_START, self.nodeid, self.mynodeid ), [ (offset>>24) & 0xFF, (offset>>16) & 0xFF, (offset>>8 ) & 0xFF, (offset    ) & 0xFF ] )
                self.can_send( self.cid, canp )
            elif rec[0] == Hexfile.TYPE_EOF:
                self.finished = True
                canp = can.CanPacket( can.nmt_id( can.CAN_NMT_PGM_END, self.nodeid, self.mynodeid ), [] )
                self.programming=False
                self.can_send( self.cid, canp )
        else:
            canp = can.CanPacket( can.nmt_id( can.CAN_NMT_RESET, self.nodeid, self.mynodeid ), [] )
            self.can_send( self.cid, canp )