<feed xmlns='http://www.w3.org/2005/Atom'>
<title>QtXpl2/mock-server, branch master</title>
<subtitle>High-level C++/QML library for Alchemie's Jetting Controller Protocol</subtitle>
<id>http://git.tvcloud.fr/cgit.cgi/QtXpl2/atom?h=master</id>
<link rel='self' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/'/>
<updated>2026-03-23T15:48:32Z</updated>
<entry>
<title>Rename demo/ → jetting-interface/, mock-server/ → mock-jetting-controller/</title>
<updated>2026-03-23T15:48:32Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-23T15:48:32Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=8bcf948b76c9564cb38d3611228ccaf73890a548'/>
<id>urn:sha1:8bcf948b76c9564cb38d3611228ccaf73890a548</id>
<content type='text'>
Executables: QtXpl2Demo → JettingInterfaceDemo, Xpl2MockServer → MockJettingController.
Dev log prefixes: "Demo" → "JI", "MockServer" → "MockJC". Window title → "Jetting Interface".
</content>
</entry>
<entry>
<title>Invert TCP connection model: client listens, server connects</title>
<updated>2026-03-23T15:39:33Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-23T15:39:33Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=61debe99a269bf7e87f6ba2f8d2a376e619fcf12'/>
<id>urn:sha1:61debe99a269bf7e87f6ba2f8d2a376e619fcf12</id>
<content type='text'>
The XPL2 protocol specifies that the JI2 controller initiates connections
to the client, not the other way around. Xpl2Client now listens on 3 ports
via QTcpServer and accepts inbound connections; MockServer connects out
with auto-retry on the 1s KA_PING tick.

QML API: startListening/stopListening, listening+connected properties,
host property removed. Mock server gains --host CLI arg.
</content>
</entry>
<entry>
<title>Imaging (m/n) commands: start/stop, masks, image count, n reply</title>
<updated>2026-03-16T15:48:34Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-16T15:48:34Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=f2251311a8523b6c24839ccd1e6834ef065c679f'/>
<id>urn:sha1:f2251311a8523b6c24839ccd1e6834ef065c679f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>EV_ events with Q_GADGET status types, mock periodic emission, tabbed demo UI</title>
<updated>2026-03-16T15:19:49Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-16T15:19:49Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=fa095de6cc8ec5a5b5c14091f2b3179ad7071876'/>
<id>urn:sha1:fa095de6cc8ec5a5b5c14091f2b3179ad7071876</id>
<content type='text'>
</content>
</entry>
<entry>
<title>CF_ configuration commands with JettingParamsResult and SetterResult enums</title>
<updated>2026-03-16T14:40:22Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-16T14:40:22Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=7830f0ae98d742467b948ed93c85e122be38fb83'/>
<id>urn:sha1:7830f0ae98d742467b948ed93c85e122be38fb83</id>
<content type='text'>
</content>
</entry>
<entry>
<title>CN_ control commands: typed API, dispatch, mock responses, demo UI</title>
<updated>2026-03-16T14:14:13Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-16T14:14:13Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=50034b142dc851da7118032f7218cb1d25ea98e4'/>
<id>urn:sha1:50034b142dc851da7118032f7218cb1d25ea98e4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>GS_PH_VERSION command, per-printhead demo UI with --printheads CLI arg</title>
<updated>2026-03-16T10:04:21Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-16T10:04:21Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=9ac64169720fb2b9852589b74f7300bcfebcaf62'/>
<id>urn:sha1:9ac64169720fb2b9852589b74f7300bcfebcaf62</id>
<content type='text'>
Add getPhVersion(printheadId) to Xpl2Client with phVersionReceived signal
carrying all 8 response fields. Mock server echoes canned version data for
any requested printhead ID.

Demo app accepts --printheads N (default 10) to simulate N printheads.
The UI shows a scrollable per-PH list with individual and bulk version
query buttons, updating each row's version info on response.
</content>
</entry>
<entry>
<title>Unified socket slots, --wire-debug CLI flag, fix mock TX and disconnect logging</title>
<updated>2026-03-13T17:20:35Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-13T17:20:35Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=87169e10cb7ebe732ef388552bb0c057c09767ef'/>
<id>urn:sha1:87169e10cb7ebe732ef388552bb0c057c09767ef</id>
<content type='text'>
Collapse 12 per-socket slots into 4 sender()-based slots. Replace runtime
wireDebug QML property with static --wire-debug CLI flag on both demo and
mock server. Route MockServer::sendKaPing through sendReply so KA_PING TX
shows wire bytes. Simplify sendReply to deduce command token from wire data.
Fix Xpl2Client disconnect logging (logTag takes pointer, null-sender fallback).
</content>
</entry>
<entry>
<title>Coalesce mock server into single MockServer class</title>
<updated>2026-03-13T10:58:45Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-13T10:58:45Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=02fe86ab2a04a02b114d7ca8ce4374a29a1d5f45'/>
<id>urn:sha1:02fe86ab2a04a02b114d7ca8ce4374a29a1d5f45</id>
<content type='text'>
Replace three independent EchoServer instances with one MockServer
that owns three QTcpServers, shares a single KA_PING timer, and
uses a flat client list with localPort() for port resolution.
</content>
</entry>
<entry>
<title>XPL2 protocol foundation: wire framing, typed API, KA_PING, GS_JC_VERSION</title>
<updated>2026-03-13T10:47:00Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-03-13T10:47:00Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/cgit.cgi/QtXpl2/commit/?id=a2b1ccf17845e55caef7f69a5e68f49a55b6a166'/>
<id>urn:sha1:a2b1ccf17845e55caef7f69a5e68f49a55b6a166</id>
<content type='text'>
Add Xpl2Protocol namespace with buildMessage/parseMessage for wire
serialization. Replace raw send/receive API on Xpl2Client with typed
protocol methods and internal dispatch. Auto-reply to KA_PING on all
sockets (qDebug only). Add GS_JC_VERSION as first typed command with
controllerId, firmwareVersion, hardwareVersion, printheadCount properties.

Upgrade mock server from echo to line-based command dispatch with 1s
KA_PING timer and canned GS_JC_VERSION response. Unknown commands
produce qWarning instead of echo.

Overhaul demo: remove raw send UI and port config, add wireDebug
toggle and Get JC Version button.
</content>
</entry>
</feed>
