<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PC SDK on TiJet</title><link>https://www.tainuohc.com/zh/docs/sdk/</link><description>Recent content in PC SDK on TiJet</description><generator>Hugo</generator><language>zh</language><atom:link href="https://www.tainuohc.com/zh/docs/sdk/index.xml" rel="self" type="application/rss+xml"/><item><title>当前开启打印流程</title><link>https://www.tainuohc.com/zh/docs/sdk/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.tainuohc.com/zh/docs/sdk/quickstart/</guid><description>&lt;h1 id="当前开启打印流程">当前开启打印流程&lt;/h1>
&lt;p>本文档记录当前 C 客户端、C SDK 和 &lt;code>tijet_1/tincore&lt;/code> gRPC 服务端的实际开启打印流程。&lt;/p>
&lt;p>本文档只描述当前代码和当前客户端行为，不包含未来改造方案。&lt;/p>
&lt;h2 id="源码基准">源码基准&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>模块&lt;/th>
 &lt;th>代码库&lt;/th>
 &lt;th>分支&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Proto 契约与 C SDK&lt;/td>
 &lt;td>&lt;code>tijet_1/sw-grpc-libraries&lt;/code>&lt;/td>
 &lt;td>&lt;code>master&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>tincore gRPC 服务端&lt;/td>
 &lt;td>&lt;code>tijet_1/tincore&lt;/code>&lt;/td>
 &lt;td>&lt;code>feature-grpc-cpp&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="参与者">参与者&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>参与者&lt;/th>
 &lt;th>职责&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Qt 客户端业务层&lt;/td>
 &lt;td>注册事件回调、上传打印数据、重试 &lt;code>START_PRINT&lt;/code>、等待最终结果&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>C SDK 调用线程&lt;/td>
 &lt;td>封装 &lt;code>SetPrintData&lt;/code> 和 &lt;code>StartPrint&lt;/code> RPC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>C SDK 事件线程&lt;/td>
 &lt;td>持续读取 &lt;code>SubscribeEvents&lt;/code> 服务端流，并调用客户注册的事件回调&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>TinCoreServiceImpl&lt;/code>&lt;/td>
 &lt;td>gRPC 协议层，将 RPC 请求转交给服务端 Handler&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>DefaultTinCoreHandlers&lt;/code>&lt;/td>
 &lt;td>执行打印数据接收、数据就绪校验和异步开启打印逻辑&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>gAFBridge&lt;/code> / 喷头硬件&lt;/td>
 &lt;td>后台处理打印数据、控制驱动板电源、与喷头通信并开启高压&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="当前调用时序">当前调用时序&lt;/h2>
&lt;pre class="mermaid">sequenceDiagram
 autonumber
 participant Caller as 调用端
 participant Callee as 被调用端

 Caller-&amp;gt;&amp;gt;Callee: tijet_client_set_event_callback(callback, user_data)
 Callee--&amp;gt;&amp;gt;Caller: 回调注册完成

 Caller-&amp;gt;&amp;gt;Callee: tijet_client_start_event_subscription()
 Callee--&amp;gt;&amp;gt;Caller: TIJET_OK
 Note over Callee: 后台创建事件线程
 Note over Callee: SubscribeEvents() 持续读取

 Caller-&amp;gt;&amp;gt;Callee: tijet_client_set_print_data(data, index, is_static)
 Callee--&amp;gt;&amp;gt;Caller: SetPrintDataResponse{success=true}
 Note over Callee: 打印数据进入后台处理
 Note over Callee: 返回时 DATA_READY 可能仍为 0

 loop START_PRINT 重试，总超时 10 秒
 Caller-&amp;gt;&amp;gt;Callee: tijet_client_print_control(START_PRINT)
 alt DATA_READY == 0
 Callee--&amp;gt;&amp;gt;Caller: TIJET_ERR_SERVER
 Note over Caller: 等待 1 秒后重试
 else DATA_READY != 0
 Callee--&amp;gt;&amp;gt;Caller: TIJET_OK
 Note over Callee: 创建高压启动线程
 end
 end

 Note over Caller: START_PRINT 成功后，等待 PrintStarted

 alt 高压开启成功
 Callee--&amp;gt;&amp;gt;Caller: PrintStarted{success=true}
 Note over Caller: 可进入喷印状态
 else 高压开启失败
 Callee--&amp;gt;&amp;gt;Caller: PrintStarted{success=false}
 Note over Caller: 失败，message 含未就绪喷头数
 else 10 秒未收到 PrintStarted
 Note over Caller: 等待超时
 end&lt;/pre>
&lt;h2 id="重试与超时流程">重试与超时流程&lt;/h2>
&lt;pre class="mermaid">flowchart TD
 A[&amp;#34;调用端: 连接服务端&amp;#34;] --&amp;gt; B[&amp;#34;调用端: 注册事件回调&amp;lt;br/&amp;gt;启动事件订阅&amp;#34;]
 B --&amp;gt; C[&amp;#34;调用端: set_print_data() 上传打印数据&amp;#34;]
 C --&amp;gt; D{&amp;#34;被调用端: 上传 RPC 成功？&amp;#34;}

 D --&amp;gt;|&amp;#34;否&amp;#34;| D1[&amp;#34;失败，流程结束&amp;#34;]
 D --&amp;gt;|&amp;#34;是&amp;#34;| E[&amp;#34;被调用端: 数据进入后台处理&amp;lt;br/&amp;gt;DATA_READY 可能仍为 0&amp;#34;]

 E --&amp;gt; F[&amp;#34;调用端: 开始 START_PRINT 重试计时&amp;#34;]
 F --&amp;gt; G[&amp;#34;调用端: print_control(START_PRINT)&amp;#34;]
 G --&amp;gt; H{&amp;#34;被调用端: DATA_READY 是否为 0？&amp;#34;}

 H --&amp;gt;|&amp;#34;是：数据未就绪&amp;#34;| I{&amp;#34;重试总时间达 10 秒？&amp;#34;}
 I --&amp;gt;|&amp;#34;否&amp;#34;| J[&amp;#34;调用端: 等待 1 秒&amp;#34;]
 J --&amp;gt; G
 I --&amp;gt;|&amp;#34;是&amp;#34;| K[&amp;#34;失败：打印数据准备超时&amp;#34;]

 H --&amp;gt;|&amp;#34;否：数据已就绪&amp;#34;| L[&amp;#34;被调用端: 创建高压启动线程&amp;lt;br/&amp;gt;返回 TIJET_OK&amp;#34;]
 L --&amp;gt; M[&amp;#34;调用端: 等待 PrintStarted 事件&amp;lt;br/&amp;gt;超时 10 秒&amp;#34;]
 M --&amp;gt; N{&amp;#34;结果&amp;#34;}

 N --&amp;gt;|&amp;#34;success=true&amp;#34;| O[&amp;#34;成功：高压开启完成&amp;lt;br/&amp;gt;进入可喷印状态&amp;#34;]
 N --&amp;gt;|&amp;#34;success=false&amp;#34;| P[&amp;#34;失败：高压开启失败&amp;#34;]
 N --&amp;gt;|&amp;#34;超时&amp;#34;| Q[&amp;#34;失败：等待高压结果超时&amp;#34;]&lt;/pre>
&lt;h2 id="返回值的当前含义">返回值的当前含义&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>位置&lt;/th>
 &lt;th>返回值&lt;/th>
 &lt;th>当前实际含义&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>tijet_client_set_print_data()&lt;/code>&lt;/td>
 &lt;td>&lt;code>TIJET_OK&lt;/code>&lt;/td>
 &lt;td>打印数据上传 RPC 已完成；不表示后台数据处理完成，也不表示 &lt;code>DATA_READY=1&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>tijet_client_print_control(..., &amp;quot;START_PRINT&amp;quot;)&lt;/code>&lt;/td>
 &lt;td>&lt;code>TIJET_ERR_SERVER&lt;/code>&lt;/td>
 &lt;td>gRPC 调用失败，或服务端返回 &lt;code>success=false&lt;/code>；当前客户端不区分原因，统一等待 1 秒后重试&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>tijet_client_print_control(..., &amp;quot;START_PRINT&amp;quot;)&lt;/code>&lt;/td>
 &lt;td>&lt;code>TIJET_OK&lt;/code>&lt;/td>
 &lt;td>服务端同步校验通过并创建了高压启动线程；不表示高压已经开启&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>PrintStarted.success&lt;/code>&lt;/td>
 &lt;td>&lt;code>true&lt;/code>&lt;/td>
 &lt;td>高压开启成功，并已调用 &lt;code>setDataParamReady(true)&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>PrintStarted.success&lt;/code>&lt;/td>
 &lt;td>&lt;code>false&lt;/code>&lt;/td>
 &lt;td>高压开启失败，&lt;code>message&lt;/code> 包含未就绪喷头数量&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="源码索引">源码索引&lt;/h2>
&lt;h3 id="c-sdk">C SDK&lt;/h3>
&lt;ul>
&lt;li>&lt;code>sdk/c/src/tijet_core.cpp:342&lt;/code>：&lt;code>tijet_client_set_print_data()&lt;/code>。&lt;/li>
&lt;li>&lt;code>sdk/c/src/tijet_core.cpp:396&lt;/code>：注册事件回调。&lt;/li>
&lt;li>&lt;code>sdk/c/src/tijet_core.cpp:408&lt;/code>：启动事件订阅和创建事件线程。&lt;/li>
&lt;li>&lt;code>sdk/c/src/tijet_core.cpp:641&lt;/code>：&lt;code>tijet_client_print_control()&lt;/code>。&lt;/li>
&lt;li>&lt;code>sdk/c/src/tijet_core.cpp:655&lt;/code>：匹配 &lt;code>START_PRINT&lt;/code> 并调用 &lt;code>StartPrint&lt;/code> RPC。&lt;/li>
&lt;li>&lt;code>sdk/c/include/tijet_core.h:441&lt;/code>：打印数据上传 C API 声明。&lt;/li>
&lt;li>&lt;code>sdk/c/include/tijet_core.h:480&lt;/code>：事件回调注册 C API 声明。&lt;/li>
&lt;li>&lt;code>sdk/c/include/tijet_core.h:500&lt;/code>：事件订阅 C API 声明。&lt;/li>
&lt;li>&lt;code>sdk/c/include/tijet_core.h:650&lt;/code>：打印控制 C API 声明。&lt;/li>
&lt;/ul>
&lt;h3 id="proto-契约">Proto 契约&lt;/h3>
&lt;ul>
&lt;li>&lt;code>proto/print.proto:7&lt;/code>：&lt;code>SetPrintDataRequest&lt;/code>。&lt;/li>
&lt;li>&lt;code>proto/print.proto:19&lt;/code>：&lt;code>StartPrintRequest&lt;/code>。&lt;/li>
&lt;li>&lt;code>proto/print.proto:22&lt;/code>：&lt;code>StartPrintResponse&lt;/code>。&lt;/li>
&lt;li>&lt;code>proto/event.proto:48&lt;/code>：&lt;code>PrintDataStatus&lt;/code>。&lt;/li>
&lt;li>&lt;code>proto/event.proto:53&lt;/code>：&lt;code>PrintStarted&lt;/code>。&lt;/li>
&lt;li>&lt;code>proto/tincore.proto:27&lt;/code>：&lt;code>SetPrintData&lt;/code> RPC。&lt;/li>
&lt;li>&lt;code>proto/tincore.proto:28&lt;/code>：&lt;code>StartPrint&lt;/code> RPC。&lt;/li>
&lt;li>&lt;code>proto/tincore.proto:33&lt;/code>：&lt;code>SubscribeEvents&lt;/code> RPC。&lt;/li>
&lt;/ul>
&lt;h3 id="tijet_1tincore-grpc-服务端">&lt;code>tijet_1/tincore&lt;/code> gRPC 服务端&lt;/h3>
&lt;p>以下路径相对于 &lt;code>tijet_1/tincore&lt;/code> 代码库的 &lt;code>feature-grpc-cpp&lt;/code> 分支：&lt;/p></description></item></channel></rss>