mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
tools: add litex_crossover to be able to use lxterm (and serialboot) over a crossover UART (bridged over UART/Ethernet/PCIe/USB, etc...).
This is still a proof of concept but can be used/tested with: lxsim --with-etherbone --uart-name=crossover --csr-csv=csr.csv lxserver --udp --udp-ip=192.168.1.51 lxcrossover (will indicate the virtual_tty) lxterm virtual_tty
This commit is contained in:
parent
3833bc3ec3
commit
bed5aafd6c
2 changed files with 42 additions and 0 deletions
40
litex/tools/litex_crossover.py
Executable file
40
litex/tools/litex_crossover.py
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# This file is Copyright (c) 2020 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||||
|
# License: BSD
|
||||||
|
|
||||||
|
# Proof of Concept to use the crossover UART with lxterm over a bridge.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pty
|
||||||
|
import threading
|
||||||
|
|
||||||
|
from litex import RemoteClient
|
||||||
|
|
||||||
|
wb = RemoteClient()
|
||||||
|
wb.open()
|
||||||
|
|
||||||
|
# # #
|
||||||
|
|
||||||
|
def pty2crossover(m):
|
||||||
|
while True:
|
||||||
|
r = os.read(m, 1)
|
||||||
|
wb.regs.uart_xover_rxtx.write(ord(r))
|
||||||
|
|
||||||
|
def crossover2pty(m):
|
||||||
|
while True:
|
||||||
|
if wb.regs.uart_xover_rxempty.read() == 0:
|
||||||
|
r = wb.regs.uart_xover_rxtx.read()
|
||||||
|
os.write(m, bytes(chr(r).encode("utf-8")))
|
||||||
|
|
||||||
|
m, s = pty.openpty()
|
||||||
|
print("LiteX Crossover UART created: {}".format(os.ttyname(s)))
|
||||||
|
|
||||||
|
pty2crossover_thread = threading.Thread(target=pty2crossover, args=[m])
|
||||||
|
pty2crossover_thread.start()
|
||||||
|
|
||||||
|
crossover2pty(m)
|
||||||
|
|
||||||
|
# # #
|
||||||
|
|
||||||
|
wb.close()
|
2
setup.py
2
setup.py
|
@ -39,12 +39,14 @@ setup(
|
||||||
"litex_term=litex.tools.litex_term:main",
|
"litex_term=litex.tools.litex_term:main",
|
||||||
"litex_server=litex.tools.litex_server:main",
|
"litex_server=litex.tools.litex_server:main",
|
||||||
"litex_sim=litex.tools.litex_sim:main",
|
"litex_sim=litex.tools.litex_sim:main",
|
||||||
|
"litex_crossover=litex.tools.litex_crossover:main"
|
||||||
"litex_read_verilog=litex.tools.litex_read_verilog:main",
|
"litex_read_verilog=litex.tools.litex_read_verilog:main",
|
||||||
"litex_simple=litex.boards.targets.simple:main",
|
"litex_simple=litex.boards.targets.simple:main",
|
||||||
# short names
|
# short names
|
||||||
"lxterm=litex.tools.litex_term:main",
|
"lxterm=litex.tools.litex_term:main",
|
||||||
"lxserver=litex.tools.litex_server:main",
|
"lxserver=litex.tools.litex_server:main",
|
||||||
"lxsim=litex.tools.litex_sim:main",
|
"lxsim=litex.tools.litex_sim:main",
|
||||||
|
"lxcrossover=litex.tools.litex_crossover:main",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue