# Evidenční mapa protokolu CFL-605RT

## Výsledek

Ovladač 1.60 potvrzuje minimální spoolovací proud pro omezený řez: `IN;`, explicitní profil (`SP`, `VS`, `ZF`, `ZO`), absolutní pohyby `PU`/`PD` + `PA` a epilog `PUSP0;`. Hloubkový rozbor uzavřel dřívější mezery obsahu: pro `CFLJJ.PCD` je tlakový příkaz `ZF` (řízeno klíčem `CUTTING`, E38), driver souřadnice nezaokrouhluje (E39), zápisová cesta je jednosměrná (E29) a softwarové stropy jsou rychlost 50 cm/s a tlak 5000 g (E20/E22).

Transport: rozbor `mpmserv_1.dll` vyloučil delegaci legacy monitoru (E36). Aktuální ovladač 5.12.3 má dvě potvrzené pro řez relevantní app-vrstvové cesty: `CDeviceEtherData` používá TCP/8002 pro konfiguraci a TCP/11110 pro data; `CDeviceIDCut` používá TCP/48153 a rámec `Register_Cutdata_Binary` (E40, E41). Samostatný `CDeviceEtherMdl` otevírá TCP/50002; jeho role je neověřená (E42). Tyto endpointy neurčují životní cyklus ani první bajt legacy RAW TCP/11110. Tyto body zůstávají otevřené pro síťový záznam legacy cesty (Q01, Q02).

Stav má právě jednu z hodnot:

- `potvrzeno`: primární zdroj nebo cílová modelová větev vlastnost uvádí přímo;
- `odvozeno`: závěr skládá více potvrzených faktů;
- `rozpor`: primární zdroje uvádějí různé hodnoty pro stejnou implementační otázku;
- `neověřeno`: chybí důkaz potřebný pro implementaci.

Zdroje S01 až S06 definuje [`internet-research.md`](internet-research.md#archivované-primární-zdroje). D01 je inventura [`driver-1.60.md`](driver-1.60.md). D02 je cílená [`static-analysis.md`](static-analysis.md). D03 je porovnání [`driver-current.md`](driver-current.md).

| ID | Vlastnost | Hodnota | Stav | Důkaz | Dopad | Podmínka uzavření |
| --- | --- | --- | --- | --- | --- | --- |
| E01 | Síťový port | `11110` | `potvrzeno` | S02, PDF str. 30 | Pevný cílový port POC. | Uzavřeno volbou portu 11110 v S02 na PDF str. 30. Další podmínka pro omezený POC není potřebná. |
| E02 | Transport | RAW TCP | `potvrzeno` | S02 vybírá `Raw`; S06 definuje RAW systémového monitoru jako TCP | POC nepotřebuje UDP ani LPR. | Uzavřeno volbou `Raw` v S02 a popisem TCP v S06. Další podmínka pro omezený POC není potřebná. |
| E03 | Oficiální síťová cesta | CFL-605RT: síťové plotrování pouze přes FineCut | `potvrzeno` | S03, PDF str. 1 | Veřejná podpora nepotvrzuje vlastní odesílatel. | Uzavřeno tabulkou kompatibility S03 na PDF str. 1. Další podmínka pro omezený POC není potřebná. |
| E04 | Počet spojení na úlohu | Legacy systémová cesta: nepopsán. `tcpmon.dll` není v podkladech. Cesty 5.12.3 se nepřenášejí na legacy RAW. | `neověřeno` (legacy) | D02, Q01; D03 | Sender pro legacy RAW používá pracovní hypotézu, ne ověřený model spojení. | Dvojice Q01: jedna úloha a dvě bezprostřední úlohy. Záznam určí počet spojení a FIN/RST legacy cesty. |
| E05 | První bajt a předehra legacy RAW | Legacy `MPMSERV_1.dll` před vlastním zápisem nečte, ale neobsluhuje systémový RAW monitor. `CDeviceEtherData` a `CDeviceIDCut` jsou jiné app-vrstvové cesty. | `neověřeno` (legacy) | D02, D03, Q02 | Legacy RAW encoder nesmí odvozovat předehru z DeviceIO. | Capture Q02 určí první klientský bajt a případný rámec legacy proudu. |
| E06 | Rámování proudu | `IN;` a epilog obsahují `;`. Profilové a geometrické mnemoniky ovladač řetězí bez mezer a bez vloženého středníku. | `potvrzeno` | D02, Q03–Q07 | Encoder nesmí vkládat nepodložené oddělovače. | Uzavřeno dosažitelnými větvemi Q03 až Q07 v D02. Další podmínka pro omezený POC není potřebná. |
| E07 | Rozpoznání konce dat strojem | `CLOSE TIME` 3 až 30 s spouští následné operace po době bez dalších dat. | `potvrzeno` | S01, PDF str. 88 | Jde o strojový časovač, ne důkaz ukončení TCP. | Uzavřeno popisem `CLOSE TIME` v S01 na PDF str. 88. Další podmínka pro omezený POC není potřebná. |
| E08 | Epilog spoolovací úlohy | Omezená větev `MODEL=11` emituje `PUSP0;` a flush. | `potvrzeno` | D02, Q03, `DrvSendPage` `0x6a909a9c` | Uzavírá obsah proudu, ne socket. | Uzavřeno větví `DrvSendPage` na `0x6a909a9c` v D02. Další podmínka pro omezený POC není potřebná. |
| E09 | MGL dialekt | CFL-605RT přijímá pouze MGL-IIc3. | `potvrzeno` | S01, PDF str. 37 a 170 | Encoder cílí jediný dialekt. | Uzavřeno specifikací MGL-IIc3 v S01 na PDF str. 37 a 170. Další podmínka pro omezený POC není potřebná. |
| E10 | Vztah k veřejným jazykům | MGL-IIc3 je proprietární příkaz kompatibilní s HP-GL a CAM-GLII Mode 2. | `potvrzeno` | S05, archivovaný řádek 504 | Podobnost není důkaz konkrétního příkazu. | Uzavřeno primárním popisem S05 na archivovaném řádku 504. Další podmínka pro omezený POC není potřebná. |
| E11 | Minimální geometrické příkazy | Model 11 používá `PU`, `PD`, `PA` a volitelně `PR`. | `potvrzeno` | D02, Q04, `0x6a911f38` | Uzavírá minimální absolutní geometrii. | Uzavřeno dosažitelnou větví modelu 11 na `0x6a911f38` v D02. Další podmínka pro omezený POC není potřebná. |
| E12 | Proprietární příkazy | Omezená první větev nepotřebuje `!PG0;`, `;JE;` ani jiné nalezené rozšíření. | `odvozeno` | D02, Q03 a omezení první úlohy | POC je nesmí emitovat. | Uzavřeno tokem Q03 v D02 a omezením na model 11 bez posunu stránky. Další podmínka pro omezený POC není potřebná. |
| E13 | Jednotka souřadnic | Přepínatelně 0,025 mm nebo 0,010 mm; panelový výchozí stav je 0,025 mm. | `potvrzeno` | S01, PDF str. 99 a 170 | Profil musí jednotku uvést explicitně. | Uzavřeno hodnotami v S01 na PDF str. 99 a 170. Další podmínka pro omezený POC není potřebná. |
| E14 | Příkazový počátek | Stroj podporuje vlevo dole nebo střed; tiskový ovladač vyžaduje vlevo dole. | `potvrzeno` | S01, PDF str. 36; S02, PDF str. 5 | POC vyžaduje vlevo dole. | Uzavřeno volbami počátku v S01 na PDF str. 36 a požadavkem S02 na PDF str. 5. Další podmínka pro omezený POC není potřebná. |
| E15 | Orientace os | Bez rotace je `x_cmd=x_gdi`, `y_cmd=page_height-y_gdi`; přímý host v soustavě vlevo dole použije kladné X doprava a Y nahoru. | `potvrzeno` | D02, Q05, `0x6a911f38` | POC musí zakázat rotaci. | Uzavřeno transformací Q05 na `0x6a911f38` v D02. Další podmínka pro omezený POC není potřebná. |
| E16 | Výběr nástroje | `SPn` vybírá logický slot. | `potvrzeno` | D02, Q06; S01 | Profil musí uvést slot. | Uzavřeno serializací Q06 v D02 a příkazem `SP` v S01. Další podmínka pro omezený POC není potřebná. |
| E17 | Mapa `SP` | Sloty 1 až 6 jsou panelově konfigurovatelné; S01 uvádí tovární mapu. | `potvrzeno` | D02, Q06; S01, manuál str. 3-10 | Obsluha musí potvrdit aktuální mapu. | Uzavřeno Q06 v D02 a panelovým `PEN ASSIGN` v S01 na manuálové str. 3-10. Další podmínka pro omezený POC není potřebná; obsluha musí před řezem potvrdit mapu panelu. |
| E18 | Zdvih a spuštění nástroje | `PU` nastaví pohyb bez řezu, `PD` pohyb s řezem. | `potvrzeno` | D02, Q04, `0x6a911f38` | Uzavírá převod kontury. | Uzavřeno větvemi `PU` a `PD` Q04 na `0x6a911f38` v D02. Další podmínka pro omezený POC není potřebná. |
| E19 | Příkazy rychlosti | Model 11 emituje `VS`; `ZA` v profilové větvi neemituje. | `potvrzeno` | D02, Q07; S01 potvrzuje sémantiku obou příkazů | POC nastaví jen rychlost při řezu a zdvižený pohyb ponechá panelu. | Uzavřeno emisí Q07 v D02 a sémantikou v S01. Další podmínka pro omezený POC není potřebná. |
| E20 | Rozsah rychlosti | Spor vyřešen: `MMKPLT` při serializaci neclampuje (jen `!=0` a delta-suprese); softwarový strop vynucuje `MMK_UI` a pro model 11 je to 0–50 cm/s, pro ostatní modely 0–40. Stroj fyzicky 0,2 až 30 cm/s. | `potvrzeno` | D02, Q07; `MMK_UI.dll` `0x6a912fe1` (model 11 → `mov eax,0x32` = 50) vs. `0x6a912fb9` (jiné → `0x28` = 40) přes `UDM_SETRANGE`; S01 pro fyzický limit | UI hodnota 50 je softwarový strop, ne strojní. | Uzavřeno konstantami `0x32`/`0x28` v `MMK_UI`. Omezený POC drží celé 1 až 30 cm/s podle fyzického limitu S01; software vyšší hodnotu nezakáže. |
| E21 | Příkazy tlaku | Model 11 emituje variantu podle příznaku řezacího režimu; pro `CFLJJ.PCD` je to `ZF` (viz E38). | `potvrzeno` | D02, Q07; disassembly `0x6a914617` | Profil emituje doloženou variantu. | Uzavřeno vazbou na E38: `CUTTING=1` vede na `ZF`. Další podmínka pro omezený POC není potřebná. |
| E22 | Rozsah tlaku | Oprava a vyřešení: softwarový strop `MMK_UI` je 0–5000 g, **ne 10000** jako uváděla dřívější poznámka. `MMKPLT` při serializaci neclampuje. Fyzický rozsah závisí na nástroji a končí na 1000 nebo 1500 g. | `potvrzeno` | D02, Q07; `MMK_UI.dll` `0x6a912ff5` (`mov r15d,0x1388` = 5000) přes `UDM_SETRANGE`; S01 pro fyzický limit | Profil validuje konkrétní nástroj, ne softwarový strop 5000. | Uzavřeno konstantou `0x1388` v `MMK_UI`. Omezený POC odmítá tlak nad fyzickým limitem zvoleného nástroje (např. 1000/1500 g), ne až na 5000. |
| E23 | Offset ostří | `ZO` používá mm; fyzicky 0,00 až 2,50 mm v kroku 0,05 mm. | `potvrzeno` | D02, Q07; S01 | Profil může hodnotu validovat před odesláním. | Uzavřeno formátem `ZO` v Q07 v D02 a rozsahem v S01. Další podmínka pro omezený POC není potřebná. |
| E24 | Serializace profilu | `SP`, volitelně `VS`, `FS`/`ZF`, `ZO` se dvěma desetinnými místy; nula příkaz vynechá. | `potvrzeno` | D02, Q07, `0x6a9143b4` a `0x6a914264` | Uzavírá omezený profil POC. | Uzavřeno profilovou větví `0x6a9143b4` a formátovačem `0x6a914264` v D02. Další podmínka pro omezený POC není potřebná. |
| E25 | Počet průchodů stroje | Stroj podporuje 2 až 9 průchodů a FineCut je může řídit také. | `potvrzeno` | S01, PDF str. 80–81 | POC použije jeden hostitelský průchod. | Uzavřeno schopností stroje v S01 na PDF str. 80–81. Další podmínka pro jednopróchodový POC není potřebná. |
| E26 | Hostitelská realizace průchodů | Neanalyzována; třída D. | `neověřeno` | D02, hranice rozsahu | Neblokuje první jednopróchodový řez. | Q08 uzavře dvojice spoolovacích záznamů stejné kontury s jedním a dvěma hostitelskými průchody při `SORTING=OFF`; rozdíl musí určit opakování geometrie nebo samostatný příkaz. |
| E27 | Pořadí kontur | Stroj může řadit bloky; `SORTING` je výchozí `OFF`. | `potvrzeno` | S01, PDF str. 82 | POC vyžaduje `SORTING=OFF`. | Uzavřeno chováním `SORTING` v S01 na PDF str. 82. Další podmínka pro omezený POC není potřebná. |
| E28 | Dotaz plochy `OH` | `MMKPLT` žádný status dotaz (`OH`/`OS`/`OA`/`OI`/`!`) neemituje a žádnou odpověď neparsuje — tokeny v kódu nejsou. Přesný formát `OH` proto z binárky doložit nelze; POC jej nepoužije. | `neověřeno` | D02: `MMKPLT` bez status-opkódů, bez `ReadPrinter`; S01, manuál str. 3-30 | Třída D. | Q09 pro `OH` uzavře obousměrný záznam přesného požadavku a surové odpovědi CFL. Omezený POC dotaz neposílá. |
| E29 | Stavové odpovědi RAW TCP | Zápisová cesta legacy ovladače je staticky doloženě jednosměrná: `MMKPLT` importuje `WritePrinter`/`WriteFile`, ne `ReadPrinter`; vlastní `MPMSERV_1.dll` `ReadPort` vrací nula bajtů. Stav jde jen out-of-band (SNMP / Event Mail). Aktuální ovladač 5.12.3 čte status samostatnou metodou (`getDeviceStatus`), ne v rámci odeslání dat. | `potvrzeno` (jednosměrnost zápisu); `neověřeno` (formát odpovědi) | D02 (import tabulka `MMKPLT`, `MPMSERV_1.dll` `ReadPort`); D03 (`readData`/`getDeviceStatus` oddělené od `sendData`); S06 (SNMP oddělený) | POC nesmí záviset na odpovědi po datovém socketu. | Jednosměrnost potvrzena. Formát případné app-vrstvové odpovědi uzavře jen síťový záznam. |
| E30 | Registrační značky | Stroj podporuje Type 1, Type 2 a Square a 1 až 4 body TP1–TP4. | `potvrzeno` | S01, PDF str. 124–125 | Neblokuje samostatný první řez. | Uzavřeno typy a body značek v S01 na PDF str. 124–125. Další podmínka pro samostatný POC není potřebná. |
| E31 | Korekce čtyř bodů | TP1–TP4 korigují náklon a měřítko; rotace je při detekci vypnutá. | `potvrzeno` | S01, PDF str. 124 | Důležité pro pozdější print-and-cut. | Uzavřeno modelem korekce v S01 na PDF str. 124. Další podmínka pro samostatný POC není potřebná. |
| E32 | Spuštění detekce značek z hosta | `MMKPLT` neemituje žádný mnemonik čtení značek (žádný `TP`/mark-read opkód). Detekci provádí senzor stroje; host jen nastaví režim přes UI (dialog 608 „Recognize register mark", `[RegMark] 0/1`). Emitovaný příkaz z hosta staticky neexistuje. | `neověřeno` (emitovaný příkaz); `odvozeno` (řízeno UI flagem + senzorem stroje) | D02: `MMKPLT` bez TP/mark opkódů; `MMK_UI` dialog 608 | Neblokuje samostatný první řez. | Q10 uzavřou spoolovací záznamy stejného plata z FineCut pro detekci jednoho a čtyř bodů; artefakt musí přiřadit rozměry, pořadí TP a příkazy k oběma režimům. |
| E33 | Provozní stav stroje | Přijatá data se řežou v režimu `REMOTE`; výchozí start je `LOCAL`. | `potvrzeno` | S01, manuál str. 1-20 a 3-2 | Pilot musí potvrdit `REMOTE`. | Uzavřeno stavy `LOCAL` a `REMOTE` v S01 na manuálových str. 1-20 a 3-2. Další podmínka pro omezený POC není potřebná. |
| E34 | Generátor proudu | `MMKPLT.dll` je vektorový generátor MGL pro CFL. | `potvrzeno` | D01; D02 | Statická analýza cílila správný modul. | Uzavřeno vazbou INF a tokem generátoru v D01 a D02. Další podmínka pro omezený POC není potřebná. |
| E35 | Modelová konfigurace | `MODEL=11`, `CUTTING=1`, `PENNOMAX=6`, `PAGEINIT=IN;`, `COMMAND MGL-IIc=1`. | `potvrzeno` | D01; `CFLJJ.PCD` SHA-256 `15e8fe9037d518f09dee5f12e928def5f3deb04da662731e58cb905ccd723d51` | Určuje omezenou modelovou větev. | Uzavřeno obsahem hashovaného `CFLJJ.PCD` v D01. Další podmínka pro omezený POC není potřebná. |
| E36 | Delegace legacy monitoru | Delegace `MPMSERV_1.dll` na systémový monitor je architektonicky vyloučená: modul nemá Winsock importy, ani `LoadLibrary`/`GetProcAddress`, a všech 194 nepřímých volání míří do vlastní IAT. `OpenPortEx=NULL` tedy není skrytá delegace. RAW cesta na 11110 běží výhradně přes systémový `tcpmon.dll`, který v podkladech není. | `potvrzeno` (neexistence delegace) | D02: `mpmserv_1.dll` import/export parse, žádný `ws2_32`/dynamická resoluce; S06 pro systémový monitor | Legacy transport = oddělený systémový monitor. | Uzavřeno rozborem `mpmserv_1.dll`. Bajtový protokol systémového monitoru uzavře jen capture nebo rozbor `tcpmon.dll` mimo tyto podklady. |
| E40 | `CDeviceEtherData` v 5.12.3 | TCP/8002: `netconfig:inf:GigaBitEther?`; případně `netconfig:set:RIP IP:`. Následuje TCP/11110 pro data. | `potvrzeno` (8002, 11110) | D03: `prtMdcDeviceIO` cílené funkce `0x1800082d0`, `0x180005c80`, `0x1800043d0`, `0x1800017e0` | Popisuje pouze moderní `CDeviceEtherData`. | Uzavřeno pro tuto cestu. |
| E41 | `CDeviceIDCut` v 5.12.3 | TCP/48153 → `Register_Cutdata_Binary?<id>?<name>?<Base64>\n` → `True\n`. | `potvrzeno` | D03: `unitDeviceIOCtrl` `IDCutIOCtrl::sendCutData` `0x180016470`, Base64 `0x18001b7d0`; `prtMdcDeviceIO` výběr typu `0x200` | Řezová data jsou app-vrstvově rámovaná. Nejde o legacy RAW MGL. | Přenos na legacy RAW není platný. |
| E42 | `CDeviceEtherMdl` v 5.12.3 | Samostatná funkce `0x180004420` po konfiguraci otevírá TCP/50002 (`0xC352`). | `potvrzeno` (50002); `neověřeno` (role) | D03: `prtMdcDeviceIO` `0x180004420`; RTTI `CDeviceEtherMdl` | Nejde o `CDeviceEtherData`. | Síťový záznam nebo další rozbor určí roli portu. |
| E37 | Pořadí a kardinalita proudu | Jeden list emituje právě jednou `IN;` na začátku, poté tělo v pořadí profil → geometrie a právě jednou `PUSP0;` na konci; profil předchází prvnímu `PD`. | `odvozeno` | E35 `PAGEINIT=IN;`; E08 epilog `DrvSendPage`; D02 tabulka `DRVFN` `0x6a92fe50` a pořadí DDI `DrvStartDoc`→`DrvStartPage`→kreslení→`DrvSendPage` z `winddi.h` | Určuje kostru payloadu jednoho listu. | Uzavřeno pro platný řez kontraktem DDI, `PAGEINIT` a epilogem; poloha profilového bloku je host řízená a musí předcházet prvnímu `PD`. Bajtovou identitu těla vůči původnímu ovladači uzavře až capture Q02. |
| E38 | Volba `FS` vs. `ZF` | Vyřešeno bajtovým řetězcem: pro `CFLJJ.PCD` driver emituje **`ZF`**, ne `FS`. Příznak `[pdev+0xa70]+0x104` neřídí klíč `COMMAND`, ale PCD klíč **`CUTTING`**. V `CFLJJ.PCD` je `CUTTING=1` → `+0x104=1` → větev `jne` ponechá `ZF`. `FS` by padlo jen při `CUTTING=0` nebo chybějícím klíči (default `+0x104=0`). | `potvrzeno` | D02, Q07; parser `MMKPLT.dll`: keyword tabulka `0x6a92a6b0` (`CUTTING`→handler `0x6a926e80`, `add rcx,0x104`), setter atoi `0x6a9264b8`, default-nula `0x6a925f82`; emise `0x6a914617`–`0x6a91463b`; `COMMAND` handler `0x6a926e98` cílí `+0x118`, ne `+0x104` | Určuje bajtovou identitu tlakového příkazu. | Uzavřeno kompletním byte-chainem `CUTTING`→`+0x104`→`ZF`. Další podmínka není potřebná. |
| E39 | Kvantování souřadnic | Ovladač neprovádí žádné zaokrouhlení mm → jednotka: geometrie `0x6a911f38` počítá jen celočíselně a serializer `0x6a9051e0` volá `msvcrt!_ltoa` (báze 10) na už celé číslo. `MulDiv` je na dráze rozlišení/DPI, ne per-vertex. Zaokrouhlení je tedy plně na hostovi. | `potvrzeno` | D02, Q05; disassembly `0x6a911f38` (celočíselné `sub`), `0x6a9051e0` (`_ltoa`, IAT `0x6a901488`); jediné `MulDiv` na `0x6a91ac8a` mimo per-vertex | Host volí pravidlo; driver žádné nevnucuje. | Uzavřeno: driver nezaokrouhluje. Host stanoví a zdokumentuje vlastní pravidlo (např. round-half-up). Bajtovou shodu s původním ovladačem pro konkrétní bod potvrdí až capture. |

## Minimální specifikace omezeného protokolu

Tato specifikace popisuje jediný list, jeden hostitelský průchod, absolutní geometrii, nulovou rotaci a žádné registrační značky. Neznámá hodnota je výslovně `neověřeno`; žádná taková hodnota nemá skrytou výchozí volbu.

### 1. Navázání TCP spojení

- **Syntaxe:** spojení TCP na IPv4 adresu plotru a port `11110`.
- **Jednotka a rozsah:** port je přesně 11110. Počet spojení, ukončení a opětovné použití socketu legacy systémové cesty zůstávají `neověřeno`.
- **Důkaz:** S02 vybírá `Raw` a 11110. S06 potvrzuje TCP systémového monitoru. D02 dokládá, že vlastní `MPMSERV_1.dll` tuto cestu nerealizuje ani nedeleguje (E36).
- **Jistota:** vysoká pro cílový port; nízká pro životní cyklus legacy cesty.

### 2. Případný handshake

- **Syntaxe:** předehra legacy RAW cesty je `neověřeno`.
- **Jednotka a rozsah:** Neznámý je první bajt i případné app-vrstvové rámování legacy proudu. Budoucí test používá pro první klientský bajt observační deadline 35 s; tato hodnota není timeout Windows.
- **Důkaz:** D02 dokládá nulové čtení jen ve vlastní cestě `MPMSERV_1.dll`. D03 dokládá odlišné rámce `CDeviceEtherData` a `CDeviceIDCut`.
- **Rozhodovací hranice:** Dva běhy musí odeslat tentýž předem hashovaný RAW payload. Tichý server A neodešle nic. Server B po `accept` provede pouze `shutdown(SHUT_WR)` a dál čte. Q02 se pro omezený POC uzavře jen tehdy, když A i B do 35 s odešlou bajtově shodný stream začínající `IN;`. Každý jiný výsledek ponechá Q02 otevřenou a vyžádá skutečný síťový záznam nebo doloženou konkrétní odpověď.
- **Omezení pozorování:** Mock server vidí síťový provoz a časování, nikoli interní volání `recv`. Ticho do deadline nedokazuje absenci čtení. Rámce 5.12.3 nejsou totožné s legacy MGL proudem.
- **Jistota:** nízká; bajtová identita legacy proudu čeká na capture.

### 3. Začátek úlohy

- **Syntaxe:** ASCII `IN;`.
- **Jednotka a rozsah:** žádná; povolená je přesně tato tříbajtová modelová inicializace.
- **Důkaz:** `CFLJJ.PCD`, `PAGEINIT=IN;`, SHA-256 `15e8fe9037d518f09dee5f12e928def5f3deb04da662731e58cb905ccd723d51`.
- **Jistota:** vysoká jako začátek spoolovacího payloadu; zda jde o první síťové bajty, je `neověřeno`.

### 4. Nastavení jednotek a souřadnic

- **Syntaxe:** absolutně `PAx,y`; relativně `PRdx,dy`. `x`, `y`, `dx` a `dy` jsou podepsaná desítková celá čísla bez mezery.
- **Jednotka:** explicitní panelový profil `gdp_unit_mm` musí být `0.025` nebo `0.010` mm. Pro vstup v soustavě vlevo dole platí `x_cmd=x_mm/gdp_unit_mm`, `y_cmd=y_mm/gdp_unit_mm` po hostitelském kvantování.
- **Rozsah:** odvozeně pro 610 × 510 mm: `0…24400`, `0…20400` při 0,025 mm; `0…61000`, `0…51000` při 0,010 mm. POC nepoužije záporný absolutní bod ani rotaci.
- **Důkaz:** D02, Q05, `MMKPLT.dll` `0x6a911f38`; S01 pro jednotku a plochu; S02 pro počátek vlevo dole.
- **Jistota:** vysoká pro syntaxi, osy a jednotky; střední pro odvozené numerické meze.

### 5. Výběr nástroje a profilové hodnoty

- **Syntaxe:** `SPn`, volitelně `VSv`, pro `CFLJJ.PCD` tlak jako `ZFf` (ne `FSf`; E38), a volitelně `ZOo.oo`. Ovladač je řetězí bez mezery a bez vloženého středníku, například `SP1VS10ZF100ZO0.30`.
- **Jednotky:** `n` je logický panelový slot; `v` je celé cm/s; `f` je celé g; `o.oo` je mm se dvěma desetinnými místy (`_fcvt(...,2,...)`). Pořadí polí v 28bajtovém profilovém recordu: `SP` na `+0x04`, `VS` na `+0x0c`, `ZF`/`FS` na `+0x0e`, `AS` na `+0x10`, `ZO` na `+0x14` (float).
- **Rozsah:** `n=1…6`; softwarový strop rychlosti modelu 11 je 50 cm/s, pro omezený POC ale `v=1…30` podle fyzického limitu stroje; softwarový strop tlaku je 5000 g (E22), POC drží fyzický limit nástroje, například swivel `30…1000` g a tangenciální nůž nebo roller `500…1500` g; offset `0.00…2.50` mm po 0,05 mm. Nulová hodnota příkaz vynechá a ponechá prioritu panelu.
- **Důkaz:** D02, Q06–Q07, `MMKPLT.dll` `0x6a9143b4` a `0x6a914264`; parser `CUTTING` (E38); clampy `MMK_UI` (E20/E22); S01 pro fyzické rozsahy.
- **Jistota:** vysoká pro serializaci i volbu `ZF`. Desetinná rychlost je pro tento POC `neověřeno` a nesmí se emitovat; `AS` (akcelerace v řezacím režimu) je volitelná a POC ji ponechá panelu.

### 6. Pohyb bez řezu

- **Syntaxe:** `PUPAx,y` pro absolutní bod; další absolutní bod bez řezu používá stejný tvar.
- **Jednotka a rozsah:** podle bodu 4.
- **Důkaz:** D02, Q04, `MMKPLT.dll` `0x6a911f38`, řetězce `PU` `0x6a901c44` a `PA` `0x6a901c50`.
- **Jistota:** vysoká.

### 7. Pohyb s řezem

- **Syntaxe:** `PDPAx,y` pro absolutní řezný bod. Relativní větev je `PDPRdx,dy`, ale omezený POC ji nepoužije.
- **Jednotka a rozsah:** podle bodu 4.
- **Důkaz:** D02, Q04, `MMKPLT.dll` `0x6a911f38`, řetězce `PD` `0x6a901c4c`, `PA` `0x6a901c50` a `PR` `0x6a901c54`.
- **Jistota:** vysoká.

### 8. Průchody a pořadí kontur

- **Syntaxe:** žádný hostitelský příkaz není pro více průchodů doložen. POC pošle každou konturu právě jednou v pořadí hosta.
- **Jednotka a rozsah:** právě jeden průchod; panelové `SORTING=OFF`.
- **Důkaz:** S01 potvrzuje možnosti stroje; D02 klasifikuje hostitelskou realizaci jako třídu D bez další analýzy.
- **Jistota:** vysoká pro omezení POC; vlastní víceprůchodový protokol je `neověřeno`.

### 9. Ukončení úlohy

- **Syntaxe:** ASCII `PUSP0;`, potom flush spoolovacího bufferu.
- **Jednotka a rozsah:** žádná; platí pro model 11 bez rozšířeného posunu a podávání stránky.
- **Důkaz:** D02, Q03, `MMKPLT.dll` `DrvSendPage` `0x6a909a9c`, řetězec `0x6a901908`, délka 6, následný flush `0x6a90533c(...,9)`.
- **Jistota:** vysoká pro poslední bajty payloadu; okamžik ukončení TCP je `neověřeno`.

### 10. Odpovědi a chyby zařízení

- **Syntaxe:** `neověřeno`; omezený POC neposílá `OH` ani jiný stavový dotaz.
- **Jednotka a rozsah:** odpověď, timeout a chybový rámec jsou `neověřeno`.
- **Důkaz:** D02 dokládá, že vlastní `ReadPort` na `0x180002468` vrací nula bajtů. Tento callback nepatří prokázaně do ručně zvolené systémové RAW cesty. Kontrolní TCP EOF plánovaný pro Q02 není odpověď plotru a neurčuje její bajtový formát.
- **Jistota:** vysoká pro vlastní callback; nízká pro zařízení přes RAW TCP.

### 11. Pořadí a kardinalita proudu

- **Syntaxe:** `IN;` <profil> <geometrie> `PUSP0;`. Profil je jeden řetězec z bodu 5; geometrie je posloupnost bloků z bodů 6 a 7.
- **Kardinalita:** `IN;` právě jednou na začátku listu; profilový řetězec právě jednou před první geometrií; `PUSP0;` právě jednou na konci. Jeden list je jeden hostitelský průchod.
- **Pořadí:** profil musí předcházet prvnímu `PD`, aby řez použil zvolený nástroj a hodnoty. Mezi profilem a geometrií ovladač nevkládá oddělovač; pouze `IN;` a `PUSP0;` končí středníkem.
- **Důkaz:** `PAGEINIT=IN;` vkládá `IN;` na začátek listu (E35); `PUSP0;` je epilog `DrvSendPage` (E08); pořadí kroků úlohy odpovídá kontraktu DDI `DrvStartDoc`→`DrvStartPage`→kreslení→`DrvSendPage`→`DrvEndDoc` z `winddi.h`, který dokládá tabulka `DRVFN` v D02. Poloha profilového bloku uvnitř těla je host řízená; její bajtová shoda s původním ovladačem je `neověřeno` do capture Q02.
- **Jistota:** vysoká pro `IN;` na začátku a `PUSP0;` na konci; střední pro polohu profilového bloku uvnitř těla.

## Implementační hranice

Specifikace je úplná pro **obsah** omezeného MGL payloadu jednoho listu, který stroj přijme jako platný řez: rámec `IN;` … `PUSP0;`, profil (`SP`, `VS`, `ZF`, `ZO`), absolutní geometrii a jejich pořadí. Po hloubkovém rozboru zůstávají otevřené už jen dva body legacy transportu; body bajtové identity obsahu jsou z velké části uzavřené.

- **Transport:** přesné bajtové rámování a počet spojení **legacy** systémové cesty RAW TCP/11110 (E04; Q01) a bajtová identita jejího prvního proudu (E05; Q02) jsou `neověřeno`. `CDeviceEtherData` a `CDeviceIDCut` tyto body nedokládají. Delegace legacy monitoru je vyloučena (E36).
- **Bajtová identita obsahu (uzavřeno, neblokuje řez):** volba `FS`/`ZF` je vyřešena na `ZF` (E38, `potvrzeno`), kvantování driver neprovádí (E39, `potvrzeno` — host volí pravidlo), pořadí a kardinalita jsou doloženy (E37). Zbývá jen bajtová poloha profilového bloku vůči původnímu ovladači, kterou potvrdí capture; pro platný řez není potřebná.

Encoder pro platný řez lze na základě této specifikace sestavit hned. RAW TCP odesílatel je pracovní hypotéza, dokud capture Q01 a Q02 nepopíše legacy přenos. App-vrstvové cesty 5.12.3 nejsou jeho náhradou. Další nejmenší krok určuje [`open-questions.md`](open-questions.md).
