Example #1
0
def test_fw_3():
    cc = AvrGcc(mcu=mcu)
    cc.build('int main(){}')
    fw = Firmware(cc.output)

    avr = Avr(mcu=mcu, f_cpu=8000000)
    avr.load_firmware(fw)
    eq_(avr.f_cpu, 8000000)
    eq_(avr.mcu, 'atmega48')
Example #2
0
    def simulate(self):
        elf = self.cc.output

        # run
        firmware = Firmware(elf)
        avr = Avr(mcu=self.cc.mcu, f_cpu=self.cc.f_cpu)
        avr.load_firmware(firmware)
#        udpReader = UdpReader()
#        udp = Udp(avr)
#        udp.connect()
#        udpReader.start()

        simvcd = None
        if self.vcd:
            simvcd = VcdFile(avr, period=1000, filename=self.vcd)
            connect_pins_by_rule('''
                                avr.D0 ==> vcd
                                avr.D1 ==> vcd
                                avr.D2 ==> vcd
                                avr.D3 ==> vcd
                                avr.D4 ==> vcd
                                avr.D5 ==> vcd
                                avr.D6 ==> vcd
                                avr.D7 ==> vcd

                                avr.B0 ==> vcd
                                avr.B1 ==> vcd
                                avr.B2 ==> vcd
                                avr.B3 ==> vcd
                                avr.B4 ==> vcd
                                avr.B5 ==> vcd
                                ''',
                                 dict(
                                 avr=avr,
                                 ),
                                 vcd=simvcd,
                                 )
            simvcd.start()

# not working
#        if self.serial_in:
#            avr.uart.send_string(self.serial_in)
        avr.move_time_marker(self.timespan)

        while avr.time_passed() < self.timespan * 0.99:
            time.sleep(0.05)

        if simvcd:
            simvcd.terminate()
#        udpReader.terminate()

        log.debug('cycles=%s' % avr.cycle)
        log.debug('mcu time=%s' % avr.time_passed())
#        time.sleep(1)
        self.serial_data = avr.uart.buffer
        self.serial = ''.join(self.serial_data)
        avr.terminate()
Example #3
0
def test_fw_3():
    cc = AvrGcc(mcu=mcu)
    cc.build('int main(){}')
    fw = Firmware(cc.output)

    avr = Avr(mcu=mcu, f_cpu=8000000)
    avr.load_firmware(fw)
    eq_(avr.f_cpu, 8000000)
    eq_(avr.frequency, avr.f_cpu)
    eq_(avr.mcu, 'atmega48')
    avr.terminate()
Example #4
0
def run_test(f_cpu, mcu, timeout, gdb, testfile):
    avr = Avr(mcu=mcu, f_cpu=f_cpu)
    fw = Firmware(testfile)
    avr.load_firmware(fw)

    if gdb:
        avr.gdb_port = 1234
        avr_gdb_init(avr.backend)
        avr.state = cpu_Stopped

    t_start = time.time()
    while not avr.peek(GPIOR0) & TEST_COMPLETE:
        if timeout and time.time() - t_start > timeout:
            raise click.ClickException('Timeout')
        avr.step(100)

    if avr.uart.buffer:
        print(''.join(avr.uart.buffer))

    sys.exit(0 if avr.peek(GPIOR0) & TEST_SUCCESS else 1)
Example #5
0
    def simulate(self):
        if not self.external_elf:
            elf = self.cc.output
        else:
            elf = self.external_elf

        # run
        firmware = Firmware(elf)
        avr = Avr(mcu=self.cc.mcu, f_cpu=self.cc.f_cpu)
        avr.uart.char_logger = self.serial_char_logger
        avr.uart.line_logger = self.serial_line_logger
        avr.load_firmware(firmware)
#        udpReader = UdpReader()
#        udp = Udp(avr)
#        udp.connect()
#        udpReader.start()

        simvcd = None
        if self.vcd:
            simvcd = VcdFile(avr, period=1000, filename=self.vcd)
            connect_pins_by_rule('''
                                avr.D0 ==> vcd
                                avr.D1 ==> vcd
                                avr.D2 ==> vcd
                                avr.D3 ==> vcd
                                avr.D4 ==> vcd
                                avr.D5 ==> vcd
                                avr.D6 ==> vcd
                                avr.D7 ==> vcd

                                avr.B0 ==> vcd
                                avr.B1 ==> vcd
                                avr.B2 ==> vcd
                                avr.B3 ==> vcd
                                avr.B4 ==> vcd
                                avr.B5 ==> vcd
                                ''',
                                 dict(
                                 avr=avr,
                                 ),
                                 vcd=simvcd,
                                 )
            simvcd.start()

# not working
#        if self.serial_in:
#            avr.uart.send_string(self.serial_in)

        if self.fps:
            dt_real = 1. / self.fps
            dt_mcu = dt_real * self.speed
            count = int(self.timespan * self.fps / self.speed)
            for _ in range(count):
                time.sleep(dt_real)

        avr.goto_time(self.timespan)
        while avr.time_passed() < self.timespan * 0.99:
            time.sleep(0.05)

        if simvcd:
            simvcd.terminate()
#        udpReader.terminate()

        log.debug('cycles=%s' % avr.cycle)
        log.debug('mcu time=%s' % avr.time_passed())
#        time.sleep(1)
        self.serial_data = avr.uart.buffer
        self.serial = ''.join(self.serial_data)
        avr.terminate()
Example #6
0
    def simulate(self):
        if not self.external_elf:
            elf = self.cc.output
        else:
            elf = self.external_elf

        # run
        firmware = Firmware(elf)
        avr = Avr(mcu=self.cc.mcu, f_cpu=self.cc.f_cpu)
        avr.uart.char_logger = self.serial_char_logger
        avr.uart.line_logger = self.serial_line_logger
        avr.load_firmware(firmware)
        #        udpReader = UdpReader()
        #        udp = Udp(avr)
        #        udp.connect()
        #        udpReader.start()

        simvcd = None
        if self.vcd:
            simvcd = VcdFile(avr, period=1000, filename=self.vcd)
            connect_pins_by_rule(
                '''
                                avr.D0 ==> vcd
                                avr.D1 ==> vcd
                                avr.D2 ==> vcd
                                avr.D3 ==> vcd
                                avr.D4 ==> vcd
                                avr.D5 ==> vcd
                                avr.D6 ==> vcd
                                avr.D7 ==> vcd

                                avr.B0 ==> vcd
                                avr.B1 ==> vcd
                                avr.B2 ==> vcd
                                avr.B3 ==> vcd
                                avr.B4 ==> vcd
                                avr.B5 ==> vcd
                                ''',
                dict(avr=avr, ),
                vcd=simvcd,
            )
            simvcd.start()

# not working
#        if self.serial_in:
#            avr.uart.send_string(self.serial_in)

        if self.fps:
            dt_real = 1. / self.fps
            dt_mcu = dt_real * self.speed
            count = int(self.timespan * self.fps / self.speed)
            for _ in range(count):
                time.sleep(dt_real)

        avr.goto_time(self.timespan)
        while avr.time_passed() < self.timespan * 0.99:
            time.sleep(0.05)

        if simvcd:
            simvcd.terminate()
#        udpReader.terminate()

        log.debug('cycles=%s' % avr.cycle)
        log.debug('mcu time=%s' % avr.time_passed())
        #        time.sleep(1)
        self.serial_data = avr.uart.buffer
        self.serial = ''.join(self.serial_data)
        avr.terminate()
Example #7
0
class Controller:
    def __init__(self, sock, mcu_name, freq=16000000, version=1):
        self.mcu_name = mcu_name
        self.mcu = Avr(mcu=mcu_name, f_cpu=freq)
        self.socket = sock
        self.fw_path = None
        self.version = version
        self.bind_callback_for_digit_pins(atmega_328_digit_pin_table)
        self.vcd = None
        self.connect_vcd()

    def upload_firmware(self, fw_path):
        self.fw_path = fw_path
        fw = Firmware(fw_path)
        self.mcu.load_firmware(fw)

    def connect_vcd(self):
        self.vcd = VcdFile(self.mcu, filename='out' + str(self.version))
        connect_pins_by_rule('''
                            avr.D0 ==> vcd
                            avr.D1 ==> vcd
                            avr.D2 ==> vcd
                            avr.D3 ==> vcd
                            avr.D4 ==> vcd
                            avr.D5 ==> vcd
                            avr.D6 ==> vcd
                            avr.D7 ==> vcd

                            avr.B0 ==> vcd
                            avr.B1 ==> vcd
                            avr.B2 ==> vcd
                            avr.B3 ==> vcd
                            avr.B4 ==> vcd
                            avr.B5 ==> vcd
                            ''',
                             dict(avr=self.mcu),
                             vcd=self.vcd)

    def bind_callback_for_digit_pins(self, ports):
        def port_callback(irq, new_val):
            msg = "change " + self.mcu_name + ' ' + irq.name[
                0] + " " + irq.name[1] + " " + str(new_val)
            self.socket.send_msg(msg)

        callback = Mock(side_effect=port_callback)

        for port in ports:
            p = self.mcu.irq.ioport_register_notify(callback,
                                                    (port[0], int(port[1:])))
            p.get_irq().name = port

    def new_pin_val(self, port_pin, new_val):
        # type: ((str, int), int) -> None

        irq = self.mcu.irq.getioport(port_pin)
        avr_raise_irq(irq, new_val)

    def run(self):
        self.vcd.start()
        self.mcu.run()

    def pause(self):
        self.vcd.stop()
        self.mcu.pause()

    def terminate(self):
        if self.vcd:
            self.vcd.terminate()
        self.mcu.terminate()
Example #8
0
def arduino_sim(
    elf='',
    mcu='atmega328',
    f_cpu=16000000,
    vcdfile='arduino.vcd',
    speed=0.5,
    fps=20,
    timeout=0.0,
    visible=1,
    image_file='',
    rate=11025,
    buttons_enable=1,
    vcd_enable=0,
    spk_enable=0,
    #            udp_enable=1,
    avcc=5000,
    vcc=5000,
    code=None,
):
    '''

    MCU:
     - atmega168 OK
     - atmega328p OK
     - atmega2560 NO
     - atmega1280 NO

    :param mcu:
    :param avcc: AVcc  in mV
    :param vcc: Vcc  in mV

    '''

    if code and pyavrutils:
        cc = pyavrutils.Arduino()
        cc.build(code)
        elf = cc.output

    if not elf:
        elf = find_elf()
    firmware = Firmware(elf)
    avr = Avr(mcu=mcu, f_cpu=f_cpu, vcc=vcc / 1000.0, avcc=avcc / 1000.0)
    avr.load_firmware(firmware)

    #    udpReader = UdpReader()

    #    if udp_enable:
    #        udp = Udp(avr)
    #        udp.connect()
    #        udpReader.start()

    lcd = Lcd(avr)

    vcd = VcdFile(avr, period=1000, filename=vcdfile) if vcd_enable else None
    ledrow = LedRow(avr, size=14)
    buttons = [Button(avr, pullup=0)
               for x in range(14)] if buttons_enable else 14 * [None]
    spk = Spk(avr, rate=rate, speed=speed) if spk_enable else None

    connect_pins_by_rule(
        '''
                        but0 .OUT ==> avr.D0 ==> dig.0  -> vcd
                        but1 .OUT ==> avr.D1 ==> dig.1  -> vcd
                        but2 .OUT ==> avr.D2 ==> dig.2  -> vcd
                        but3 .OUT ==> avr.D3 ==> dig.3  -> vcd
                        but4 .OUT ==> avr.D4 ==> dig.4  -> vcd
                        but5 .OUT ==> avr.D5 ==> dig.5  -> vcd
                        but6 .OUT ==> avr.D6 ==> dig.6  -> vcd
                        but7 .OUT ==> avr.D7 ==> dig.7  -> vcd

                        but8 .OUT ==> avr.B0 ==> dig.8  -> vcd
                        but9 .OUT ==> avr.B1 ==> dig.9  -> vcd
                        but10.OUT ==> avr.B2 ==> dig.10 -> vcd
                        but11.OUT ==> avr.B3 ==> dig.11 -> vcd
                        but12.OUT ==> avr.B4 ==> dig.12 -> vcd
                        but13.OUT ==> avr.B5 ==> dig.13 -> vcd

                        dig.13 --> spk.IN -> vcd

                        dig.5 <=> lcd.D4 -> vcd
                        dig.4 <=> lcd.D5 -> vcd
                        dig.3 <=> lcd.D6 -> vcd
                        dig.2 <=> lcd.D7 -> vcd

                        dig.12 ==> lcd.RS -> vcd
                        dig.11 ==> lcd.RW -> vcd
                        dig.10 ==> lcd.E  -> vcd
                        ''',
        dict(avr=avr,
             dig=ledrow,
             lcd=lcd,
             spk=spk,
             **dict([('but' + str(i), b) for i, b in enumerate(buttons)])),
        vcd=vcd,
    )
    #################
    # GUI
    #################
    if spk_enable:

        def spk_func(size):
            return spk.read()

        spk_game = SpkGame(spk_func, rate=rate)

    def state_func(i):
        return (ledrow.pinstate(i), ledrow.reset_dirty(i))

    led_game = LedRowGame(
        state_func=state_func,
        labels=[str(x) for x in range(14)],
        align=1,
    )

    but_guis = [
        ButtonGame(
            label=label,
            shortcut=shortcut,
            hook=dict(up=x.up, down=x.down) if x else {},
            size=(50, 30),
        ) for x, label, shortcut in zip(
            buttons,
            '0 1 2 3 4 5 6 7 8 9 10 11 12 13'.split(),
            '0 1 2 3 4 5 6 7 8 9 a b c d'.split(),
        )
    ]
    info = InfoGame(avr)

    def reload_firmware():
        firmware = Firmware(find_elf())
        avr.load_firmware(firmware)
        lcd.reset()
        info.reload()

    class MyFloat(object):
        def __init__(self, value=0.0):
            self.value = value

        def __float__(self):
            return float(self.value)

        def inc(self):
            self.value *= 10.0

        def dec(self):
            self.value /= 10.0

    speed = MyFloat(speed)

    #    def udp_read():
    #        if not hasattr(udp_read, 'display'):
    #            udp_read.display = ''
    #        if not hasattr(udp_read, 'lastline'):
    #            udp_read.lastline = ''
    #        s = udpReader.read()
    #        if s:
    #            sys.stdout.write(s)
    #            udp_read.lastline += s
    #            udp_read.lastline = lastline(udp_read.lastline)
    #            udp_read.display = udp_read.lastline.replace(
    #                '\n', '\\n').replace('\r', '\\r')
    #        return  udp_read.display
    def uart_read():
        return avr.uart.last_line.replace('\n', '\\n').replace('\r', '\\r')

    dev = CompositeGame([
        CompositeGame([
            led_game,
            CompositeGame(but_guis, align=1),
        ], align=0), info,
        CompositeGame([
            CompositeGame([
                ButtonGame(label='reload',
                           shortcut='r',
                           hook=dict(down=reload_firmware)),
                ButtonGame(
                    label='speed up', shortcut='+', hook=dict(down=speed.inc)),
                ButtonGame(label='speed down',
                           shortcut='-',
                           hook=dict(down=speed.dec)),
                TextGame((lambda: "speed set= %fx" % float(speed))),
            ],
                          align=1),
            LcdGame(lambda x, y: lcd.get_char(x, y), (16, 2)),
            TextGame((lambda: 'ser=' + uart_read())),
        ],
                      align=1)
    ])

    scrshot_by_exit = [(dev, image_file)] if image_file else None

    class ArduinoMain(AvrSimMain):
        bufpos = 0

        def cb_loop(self):
            AvrSimMain.cb_loop(self)
#            if len(udpReader.buffer) > self.bufpos:
#                sys.stdout.write(''.join(udpReader.buffer[self.bufpos:]))
#                self.bufpos = len(udpReader.buffer)

    sim = ArduinoMain(avr,
                      dev,
                      vcd,
                      speed=speed,
                      fps=fps,
                      visible=visible,
                      timeout=timeout,
                      scrshot_by_exit=scrshot_by_exit)
    sim.run_game()

    time.sleep(1)
    if spk_enable:
        spk_game.terminate()
Example #9
0
#!/usr/bin/env python

DIR = '/tmp/build5444690825086055604.tmp'

from pysimavr.avr import Avr, Firmware
avr = Avr(mcu='atmega48', f_cpu=8000000)
firmware = Firmware(DIR + '/PaleoSolarCharger.cpp.elf')
avr.load_firmware(firmware)
Example #10
0
def arduino_sim(
    elf='',
    mcu='atmega328',
    f_cpu=16000000,
    vcdfile='arduino.vcd',
            speed=0.5,
            fps=20,
            timeout=0.0,
            visible=1,
            image_file='',
            rate=11025,
            buttons_enable=1,
            vcd_enable=0,
            spk_enable=0,
#            udp_enable=1,
            avcc=5000,
            vcc=5000,
            code=None,
):
    '''

    MCU:
     - atmega168 OK
     - atmega328p OK
     - atmega2560 NO
     - atmega1280 NO

    :param mcu:
    :param avcc: AVcc  in mV
    :param vcc: Vcc  in mV

    '''

    if code and pyavrutils:
        cc = pyavrutils.Arduino()
        cc.build(code)
        elf = cc.output

    if not elf:
        elf = find_elf()
    firmware = Firmware(elf)
    avr = Avr(mcu=mcu, f_cpu=f_cpu, vcc=vcc / 1000.0, avcc=avcc / 1000.0)
    avr.load_firmware(firmware)

#    udpReader = UdpReader()

#    if udp_enable:
#        udp = Udp(avr)
#        udp.connect()
#        udpReader.start()

    lcd = Lcd(avr)

    vcd = VcdFile(avr, period=1000, filename=vcdfile) if vcd_enable else None
    ledrow = LedRow(avr, size=14)
    buttons = [Button(
        avr, pullup=0) for x in range(14)] if buttons_enable else 14 * [None]
    spk = Spk(avr, rate=rate, speed=speed) if spk_enable else None

    connect_pins_by_rule('''
                        but0 .OUT ==> avr.D0 ==> dig.0  -> vcd
                        but1 .OUT ==> avr.D1 ==> dig.1  -> vcd
                        but2 .OUT ==> avr.D2 ==> dig.2  -> vcd
                        but3 .OUT ==> avr.D3 ==> dig.3  -> vcd
                        but4 .OUT ==> avr.D4 ==> dig.4  -> vcd
                        but5 .OUT ==> avr.D5 ==> dig.5  -> vcd
                        but6 .OUT ==> avr.D6 ==> dig.6  -> vcd
                        but7 .OUT ==> avr.D7 ==> dig.7  -> vcd

                        but8 .OUT ==> avr.B0 ==> dig.8  -> vcd
                        but9 .OUT ==> avr.B1 ==> dig.9  -> vcd
                        but10.OUT ==> avr.B2 ==> dig.10 -> vcd
                        but11.OUT ==> avr.B3 ==> dig.11 -> vcd
                        but12.OUT ==> avr.B4 ==> dig.12 -> vcd
                        but13.OUT ==> avr.B5 ==> dig.13 -> vcd

                        dig.13 --> spk.IN -> vcd

                        dig.5 <=> lcd.D4 -> vcd
                        dig.4 <=> lcd.D5 -> vcd
                        dig.3 <=> lcd.D6 -> vcd
                        dig.2 <=> lcd.D7 -> vcd

                        dig.12 ==> lcd.RS -> vcd
                        dig.11 ==> lcd.RW -> vcd
                        dig.10 ==> lcd.E  -> vcd
                        ''',
                         dict(
                             avr=avr,
                             dig=ledrow,
                             lcd=lcd,
                             spk=spk,
                             **dict([('but' + str(i), b) for i, b in enumerate(buttons)])
                         ),
                         vcd=vcd,
                         )
    #################
    # GUI
    #################
    if spk_enable:
        def spk_func(size):
            return spk.read()
        spk_game = SpkGame(spk_func, rate=rate)

    def state_func(i):
        return (ledrow.pinstate(i), ledrow.reset_dirty(i))
    led_game = LedRowGame(state_func=state_func,
                          labels=[str(x) for x in range(14)],
                          align=1,)

    but_guis = [ButtonGame(
                label=label,
                shortcut=shortcut,
                hook=dict(up=x.up, down=x.down) if x else {},
                size=(50, 30),
                ) for x, label, shortcut in zip(
                buttons,
                '0 1 2 3 4 5 6 7 8 9 10 11 12 13'.split(),
                '0 1 2 3 4 5 6 7 8 9 a b c d'.split(),
                )
                ]
    info = InfoGame(avr)

    def reload_firmware():
        firmware = Firmware(find_elf())
        avr.load_firmware(firmware)
        lcd.reset()
        info.reload()

    class MyFloat(object):
        def __init__(self, value=0.0):
            self.value = value

        def __float__(self):
            return float(self.value)

        def inc(self):
            self.value *= 10.0

        def dec(self):
            self.value /= 10.0
    speed = MyFloat(speed)

#    def udp_read():
#        if not hasattr(udp_read, 'display'):
#            udp_read.display = ''
#        if not hasattr(udp_read, 'lastline'):
#            udp_read.lastline = ''
#        s = udpReader.read()
#        if s:
#            sys.stdout.write(s)
#            udp_read.lastline += s
#            udp_read.lastline = lastline(udp_read.lastline)
#            udp_read.display = udp_read.lastline.replace(
#                '\n', '\\n').replace('\r', '\\r')
#        return  udp_read.display
    def uart_read():
        return avr.uart.last_line.replace('\n', '\\n').replace('\r', '\\r')

    dev = CompositeGame([
                        CompositeGame([led_game,
                                       CompositeGame(but_guis, align=1),
                                       ], align=0),
                        info,
                        CompositeGame([
                            CompositeGame([
                                ButtonGame(label='reload',
                                           shortcut='r',
                                           hook=dict(down=reload_firmware)),
                                ButtonGame(label='speed up',
                                           shortcut='+',
                                           hook=dict(down=speed.inc)),
                                ButtonGame(label='speed down',
                                           shortcut='-',
                                           hook=dict(down=speed.dec)),
                                TextGame((lambda:
                                         "speed set= %fx" % float(speed))),
                            ], align=1),

        LcdGame(
        lambda x, y:lcd.get_char(x, y), (16, 2)),
                            TextGame((lambda: 'ser=' + uart_read())),
                        ], align=1)
    ])

    scrshot_by_exit = [(dev, image_file)] if image_file else None

    class ArduinoMain(AvrSimMain):
        bufpos = 0

        def cb_loop(self):
            AvrSimMain.cb_loop(self)
#            if len(udpReader.buffer) > self.bufpos:
#                sys.stdout.write(''.join(udpReader.buffer[self.bufpos:]))
#                self.bufpos = len(udpReader.buffer)

    sim = ArduinoMain(
        avr, dev, vcd, speed=speed, fps=fps, visible=visible, timeout=timeout,
        scrshot_by_exit=scrshot_by_exit)
    sim.run_game()

    time.sleep(1)
    if spk_enable:
        spk_game.terminate()
Example #11
0
class TestBase(unittest.TestCase):

    def setUp(self):
        self.first = True
        self.startAvr();
        pass

    def tearDown(self):
        self.uartBridge.terminate()        
        self.avr.terminate()
        pass

    def messageSanityCheck(self, bytes, commandId, expectedSize, first):
        '''
        Check that the response has correct size, message Id, checksum 
        @param bytes: list of bytes
        @param commandId: message identifier
        @param expectedSize: expected size of the response
        @param first: is is a first response  
        @raise exception: unittest.TestCase.assertEqual 
        @return: None
        '''
        if (expectedSize != None):
            self.assertEqual(len(bytes), expectedSize, "Message length "+str(len(bytes))+", expected size "+str(expectedSize));
        self.assertEqual(bytes[0], 0x7f, "1st sync byte is "+str(bytes[0]));                             
        self.assertEqual(bytes[1], 0xef, "2nd sync byte is "+str(bytes[1]));                             
        if (first):                                                                                      
            self.assertEqual(bytes[2], commandId, "Message id "+str(bytes[2]));                               
        else:                                                                                            
            self.assertEqual(bytes[2], commandId | 0x80, "Message id "+str(bytes[2]));                               
        self.assertEqual(bytes[3], expectedSize-4, "Payload size is "+str(bytes[3]));                              
                                                                                                         
        bytesWithoutChecksum = bytes[:-1]                                                                
        csExpected = calculateChecksum(bytesWithoutChecksum)                                             
        csActual = bytes[len(bytes)-1]                                                                              
        self.assertEqual(csActual, csExpected, "Checksum is "+hex(csActual)+" instead "+hex(csExpected));

    def startAvr(self):
        self.avr = Avr(mcu='atmega88',f_cpu=8000000)
        
        self.udp = Udp(self.avr)
        self.udp.connect()

        self.uartBridge = UartBridge()
        
        firmware = Firmware(ELFNAME)
        self.avr.load_firmware(firmware);

        self.uartBridge.start();
        self.avr.run()
        #self.time_passed();
        
    def time_passed(self, timeout=0.99):
        while self.avr.time_passed() < 0.1 * timeout:
            time.sleep(0.05)
    

    def sendCommand(self, command, payload):
        syncBytes = [0x7f, 0xef];
        command = syncBytes + command + [len(payload)+1] + payload;
        cs = calculateChecksum(command)
        command = command + [cs];
        
        s = str(bytearray(command))
        self.uartBridge.send_str(s);
        self.time_passed(0.05*len(s))
Example #12
0
#!/usr/bin/env python

DIR = '/tmp/build5444690825086055604.tmp'

from pysimavr.avr import Avr, Firmware
avr=Avr(mcu='atmega48',f_cpu=8000000)
firmware = Firmware(DIR + '/PaleoSolarCharger.cpp.elf')
avr.load_firmware(firmware)