DT5215 firmware emulator
A DT5215 control API on localhost. It answers every endpoint of spec/dt5215-api.yaml with
plausible, consistent data, so the SDKs of all seven languages — and your own program — can be
tested with no instrument in the loop.
pip install dt5215-emulator
dt5215-emulator --port 8080
curl -s -X POST http://127.0.0.1:8080/api-v1.0/login \
-H 'Content-Type: application/json' -d '{"username":"user","password":"user"}'
from dt5215_emulator import Emulator
import dt5215
with Emulator() as emu: # a free port
with dt5215.connect(emu.url, username="user", password="user") as dev:
print(dev.info().hostname) # dt5215-emu
What it reproduces on purpose
Three behaviours of the real firmware that a client has to get right, and that a hand-written mock usually gets wrong:
- a refusal is HTTP 200 with
result: false, not a 4xx; /rebootand/restart_appanswer nothing and drop the connection;- a bearer token is required everywhere except
/loginand/alive, and/alivereports whether the token it was given is valid (so a client can tell "instrument down" from "token expired").
It is also stateful: switching HV off changes what the next /get_hv_status says, disabling
a chain empties it, writing a register reads back, an enumeration walks its phases (in about a
second, not minutes), and a board firmware upgrade progresses board by board.
Driving it from a test
Emulator(state=...) takes a prepared State, and every field of it can be changed while the
emulator runs:
from dt5215_emulator import Emulator, State
state = State()
state.chains[0].los = True # a chain with loss of signal
state.client["control"] = True # Janus attached: a board upgrade must be refused
with Emulator(state=state) as emu:
...
Options
| Option | Meaning |
|---|---|
--port N |
TCP port (default 8080; Emulator(port=0) takes a free one) |
--host H |
interface to bind (default 127.0.0.1) |
--no-auth |
answer everything without a token, like the instrument's /caen/config/nologin |
--hostname NAME |
the hostname the emulator reports |
-v |
log every request |
Default users: user/user and caen/caen.
What it is not
It does not pretend to be the instrument's data path: there is no event streaming, no FPGA, no real timing. It answers the control API, and that is all the SDK needs.
Metadata
Release files for dt5215-emulator 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dt5215_emulator-1.0.2.tar.gz | 18.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dt5215_emulator-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.6 kB
Release files / dt5215_emulator-1.0.2.tar.gz
| Download URL | dt5215_emulator-1.0.2.tar.gz |
|---|---|
| Size | 18.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
03496891f622d151be3f8d9b1744e339590aab7c593f22075b929694115e3fb4
|
|
BLAKE2b-256 checksum How to use checksums |
264939c3f3d806ba1cea4429ce718e5749a01bee00ac67d81bea9106d048db36
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Release files / dt5215_emulator-1.0.2-py3-none-any.whl
| Download URL | dt5215_emulator-1.0.2-py3-none-any.whl |
|---|---|
| Size | 18.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
04fa6dadcdd87de23b9ef7e4641328b233fa2c93b1fc16132ffcd1e2f6461a87
|
|
BLAKE2b-256 checksum How to use checksums |
62f2904116800cc3b0da0df8b1a0d5f164bb1e844de4d2d97e7fe8d510f421f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|