f8058686e112eb04be6de0cca1fbc501ecde36e1
5 from litex
.soc
.tools
.remote
.etherbone
import EtherbonePacket
, EtherboneRecord
, EtherboneWrites
6 from litex
.soc
.tools
.remote
.etherbone
import EtherboneIPC
9 class RemoteServer(EtherboneIPC
):
10 def __init__(self
, comm
, port
=1234):
15 if hasattr(self
, "socket"):
17 self
.socket
= socket
.socket(socket
.AF_INET
, socket
.SOCK_STREAM
)
18 self
.socket
.bind(("localhost", self
.port
))
24 if not hasattr(self
, "socket"):
29 def _serve_thread(self
):
31 client_socket
, addr
= self
.socket
.accept()
32 print("Connected with " + addr
[0] + ":" + str(addr
[1]))
35 packet
= self
.receive_packet(client_socket
)
38 packet
= EtherbonePacket(packet
)
41 record
= packet
.records
.pop()
44 if record
.writes
!= None:
45 self
.comm
.write(record
.writes
.base_addr
, record
.writes
.get_datas())
48 if record
.reads
!= None:
50 for addr
in record
.reads
.get_addrs():
51 reads
.append(self
.comm
.read(addr
))
53 record
= EtherboneRecord()
54 record
.writes
= EtherboneWrites(datas
=reads
)
55 record
.wcount
= len(record
.writes
)
57 packet
= EtherbonePacket()
58 packet
.records
= [record
]
60 self
.send_packet(client_socket
, packet
)
66 self
.serve_thread
= threading
.Thread(target
=self
._serve
_thread
)
67 self
.serve_thread
.setDaemon(True)
68 self
.serve_thread
.start()
70 def join(self
, writer_only
=False):
71 if not hasattr(self
, "serve_thread"):
73 self
.serve_thread
.join()
76 parser
= argparse
.ArgumentParser()
77 parser
.add_argument("--comm", default
="uart", help="comm interface")
78 parser
.add_argument("--port", default
="2", help="UART port")
79 parser
.add_argument("--baudrate", default
=115200, help="UART baudrate")
80 return parser
.parse_args()
83 print("LiteX remote server")
85 if args
.comm
== "uart":
86 from litex
.soc
.tools
.remote
import CommUART
87 print("Using CommUART, port: {} / baudrate: {}".format(args
.port
, args
.baudrate
))
88 comm
= CommUART(args
.port
if not args
.port
.isdigit() else int(args
.port
),
92 raise NotImplementedError
94 server
= RemoteServer(comm
)
99 except KeyboardInterrupt: # FIXME
102 if __name__
== "__main__":