OpenCores
URL https://opencores.org/ocsvn/riscv_vhdl/riscv_vhdl/trunk

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [scripts/] [rpc/] [__init__.py] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 sergeykhbr
"""
2
 @copyright  Copyright 2017 GNSS Sensor Ltd. All right reserved.
3
 @author     Sergey Khabarov - sergeykhbr@gmail.com
4
 @brief      Simulator's Python API implementation.
5
"""
6
 
7
import threading
8
import client
9
from events import ConsoleSubStringEvent
10
 
11
class Simulator(object):
12
    def __init__(self):
13
        self.client = None
14
        self.eventDone = threading.Event()
15
 
16
    def connect(self):
17
        self.eventDone.clear()
18
        self.client = client.TcpClient("rpcclient", self.eventDone)
19
        self.client.start()
20
        self.eventDone.wait()
21
 
22
    def disconnect(self):
23
        self.client.stop()
24
        self.client.join()
25
 
26
    def log(self, file):
27
        req = ["Command","log {0}".format(file)]
28
        return self.client.send(req)
29
 
30
    def loadsrec(self, file):
31
        req = ["Command","loadsrec {0}".format(file)]
32
        return self.client.send(req)
33
 
34
    def loadmap(self, file):
35
        req = ["Command","loadmap {0}".format(file)]
36
        return self.client.send(req)
37
 
38
    def pressButton(self, btn):
39
        req = ["Button",["Press",btn]]
40
        return self.client.send(req)
41
 
42
    def releaseButton(self, btn):
43
        req = ["Button",["Release",btn]]
44
        return self.client.send(req)
45
 
46
    def clickButton(self, btn):
47
        self.pressButton(btn)
48
        self.go_msec(50.0)
49
        self.releaseButton(btn)
50
        self.go_msec(50.0)
51
 
52
    def symb2addr(self, symb):
53
        req = ["Symbol",["ToAddr",symb]]
54
        return self.client.send(req)
55
 
56
    def br_add(self, location):
57
        req = ["Breakpoint",["Add",location]]
58
        return self.client.send(req)
59
 
60
    def br_rm(self, location):
61
        req = ["Breakpoint",["Remove",location]]
62
        return self.client.send(req)
63
 
64
    def go(self):
65
        req = ["Command","c"]
66
        return self.client.send(req)
67
 
68
    def go_until(self, location):
69
        req = ["Control",["GoUntil",location]]
70
        return self.client.send(req)
71
 
72
    def go_msec(self, ms):
73
        req = ["Control",["GoMsec",float(ms)]]
74
        return self.client.send(req)
75
 
76
    def go_substr(self, template, timeout=None):
77
        """
78
        Run simulation until debug console output doesn't print string
79
        containting 'template' substring or timeout happened.
80
        In a case of timeout exception will be generated.
81
        """
82
        ev1 = ConsoleSubStringEvent(template)
83
        self.client.registerConsoleListener(ev1)
84
        if not self.isON():
85
            self.power_on()
86
        elif self.isHalt():
87
            self.go()
88
        ev1.wait(timeout)
89
        self.halt()
90
        self.client.unregisterConsoleListener(ev1)
91
 
92
    def halt(self):
93
        req = ["Command","s"]
94
        return self.client.send(req)
95
 
96
    def step(self, count):
97
        req = ["Control",["Step",count]]
98
        return self.client.send(req)
99
 
100
    def power_on(self):
101
        req = ["Control",["PowerOn"]]
102
        return self.client.send(req)
103
 
104
    def power_off(self):
105
        req = ["Control",["PowerOff"]]
106
        return self.client.send(req)
107
 
108
    def setSyringe(self, diam, k1, k2):
109
        req = ["Syringe",[float(diam),k1,k2]]
110
        return self.client.send(req)
111
 
112
    def isON(self):
113
        req = ["Status","IsON"]
114
        return self.client.send(req)
115
 
116
    def isHalt(self):
117
        req = ["Status","IsHalt"]
118
        return self.client.send(req)
119
 
120
    def simSteps(self):
121
        """
122
        Get simulated number of steps. One step equals to one CPU instruction.
123
        """
124
        req = ["Status","Steps"]
125
        return self.client.send(req)
126
 
127
    def simTimeSec(self):
128
        """
129
        Get simulated time in seconds. It's computed as number of steps
130
        multiplied on Bus frequency in Hz.
131
        """
132
        req = ["Status","TimeSec"]
133
        return self.client.send(req)
134
 
135
    def microphone(self, ena):
136
        """
137
        Enable\Disable integrated microphone.
138
        """
139
        req = ["Control",["Microphone",bool(ena)]]
140
        return self.client.send(req)
141
 
142
    def battery(self, voltage=None):
143
        """
144
        Request battery level when voltage equals to None or
145
        Change battery level in Volts
146
        """
147
        if voltage:
148
            req = ["Control",["Battery",float(voltage)]]
149
        else:
150
            req = ["Control",["Battery"]]
151
        return self.client.send(req)
152
 
153
    def getIndicator(self):
154
        """
155
        Read state of the User's indicator
156
        """
157
        req = ["Attribute",["userindicator","State"]]
158
        resp = self.client.send(req)
159
        if resp in [0,1,2,3]:
160
             Colors = ["OFF", "RED", "GREEN", "YELLOW"]
161
             return Colors[resp]
162
        else:
163
             return resp

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.