3.6.1 PICSimLab Python rcontrol Wrapper Library

The PICSimLab python rcontrol wrapper library is a Python library for controlling the PICSimLab simulator using the rcontrol remote control protocol.

They can be installed using pip:

pip install PICSimlab_rcontrol

Python code example:

#use python -u hardware_list.py | tee hardware.md 
 
import time,re 
import subprocess 
from pathlib import Path 
from PICSimLab_rcontrol import PICSimLab_rcontrol 
 
 
def run_picsimlab(board="", processor="", file_path=""): 
    exe_path = r"/usr/bin/picsimlab" 
    if len(board)  > 0: 
        if len(processor) > 0: 
            if len(file_path) > 0: 
                if not file_path.is_file(): 
                    raise  print(f"File not found {file_path}") 
                return subprocess.Popen([exe_path, board, processor, str(file_path)], stdout=subprocess.DEVNULL) 
            else: 
                return subprocess.Popen([exe_path, board, processor], stdout=subprocess.DEVNULL) 
        else: 
            return subprocess.Popen([exe_path, board], stdout=subprocess.DEVNULL) 
    else: 
        return subprocess.Popen(exe_path, stdout=subprocess.DEVNULL) 
 
process= run_picsimlab() 
try: 
    time.sleep(2) 
    with PICSimLab_rcontrol(5000) as rc: 
        rc.cmd_blist() 
        line = rc.get_cmd_response().splitlines()[1] 
        boards = [item.strip() for item in line.split(",") if item.strip()] 
        rc.cmd_exit() 
        process.wait() 
 
    for board in boards: 
        print(f"## {board}") 
        process= run_picsimlab(board) 
        time.sleep(2) 
        with PICSimLab_rcontrol(5000) as rc: 
            rc.cmd_buclist() 
            line = rc.get_cmd_response().splitlines()[1].split(",") 
            processors = [item for item in line if item] 
            print(" - Processors:",end="") 
            for proc in processors: 
                print(f" {proc}",end=", ") 
            print("") 
 
            rc.cmd_bblist() 
            line = rc.get_cmd_response().splitlines()[1].split(",") 
            backends = [item for item in line if item] 
            print(" - Backends:",end="") 
            for proc in backends: 
                print(f" {proc}",end=", ") 
            print("") 
 
            rc.cmd_bdlist() 
            line = rc.get_cmd_response().splitlines()[1].split(",") 
            debuggers = [item for item in line if item] 
            print(" - Debuggers:",end="") 
            for proc in debuggers: 
                print(f" {proc}",end=", ") 
            print("") 
 
            rc.cmd_bilist() 
            line = rc.get_cmd_response().splitlines()[1].split(",") 
            ides = [item for item in line if item] 
            print(" - IDEs:",end="") 
            for proc in ides: 
                print(f" {proc}",end=", ") 
            print("") 
 
            rc.cmd_exit() 
            process.wait() 
 
except ConnectionError as e: 
    print(f"ConnectionError: {e}")