# 久正逢甲產學合作案 - 主機方(PC)主動與採取方(PI)溝通方式 - 此次我們使用protobuf作為溝通格式 - Protobuf 格式定義為附檔中的 **types.proto** 檔 - 目前設計方式為由主機方( PC )主動與採取方( PI )溝通 - 因此使用方法為 - **Step 1** : 主機方 ( PC )會組織一個 Command 封包傳送至採取方( PI ) - **Step 2** : 採取方將會依照 Command 封包執行指令動作,並將回一個 Result 封包 - **Step 3** : Result 封包資料暫定為: - 如有錯誤,**status** 應填入非 **0** 值,並可在 result 中填入錯誤相關資料 - 反之,正常執行,**status** 應填入 **0** - 詳細可看以下範例情境 - 目前定義的 Command 有以下幾種 | | Command | Feature | | --- |:----------------------:|:----------------------------------:| | 1 | CMD_UNKNOWN | 代表此欄位未初始化 | | 2 | CMD_START_SAMPLING | 告知**採取方**開始採取,並開始回傳資料 | | 3 | CMD_STOP_SAMPLING | 告知**採取方**停止採取,並停止回傳資料 | | 4 | CMD_GET_FEATURES | 待討論 | | 5 | CMD_GET_SAMPLE_RATE | 取得**採取方**的採樣頻率 | | 6 | CMD_GET_CHANNELS | 取得**採取方**的採樣欄位數 | | 7 | CMD_GET_CHANNEL_FORMAT | 取得**採取方**的採樣欄位型態 | | 8 | CMD_GET_ROTATION_SPEED | 取得**採取方**的採樣平台轉速 | | 9 | CMD_GET_NORMAL_FORCE | 取得**採取方**的採樣平台探針下壓力 | ## 範例情境 ### 與採取方取得採樣頻率 1. 主機方送出以下封包 ``` Command { kind = MSG_CMD, seq = 0, cmd = CMD_GET_SAMPLE_RATE, args = <ignored>, } ``` 2. 採取方回應 ``` Result { kind = MSG_RET, seq = 0, status = 0, result = <1000 in bytes, 4bytes, little endian>, } ``` ### 與採取方取得平臺轉速 1. 主機方送出以下封包 ``` Command { kind = MSG_CMD, seq = 1, cmd = CMD_GET_ROTATION_SPEED, args = <ignored>, } ``` 2. 採取方回應 ``` Result { kind = MSG_RET, seq = 1, status = 0, result = <100 in bytes, 4bytes, little endian>, } ``` ### 請求採取方開始採集資料並回傳至主機方,直到主機方送出停止採集的指令 1. 主機方送出以下封包 ``` Command { kind = MSG_CMD, seq = 2, cmd = CMD_START_SAMPLING, args = <ignored>, } ``` 2. 採取方回應 ``` Result { kind = MSG_RET, seq = 2, status = 0, result = <ignored>, } ``` 3. 開始持續回傳採樣資料 ``` Sample { kind = MSG_SAMPLES, count = 1, value = <sampled values> } ``` > 如上格式持續送出 4. 主機方送出以下封包 ``` Command { kind = MSG_CMD, seq = 3, cmd = CMD_STOP_SAMPLING, args = <ignored>, } ``` 5. 採取方停止回傳採樣資料並回應 > 續 3 ``` Sample { kind = MSG_SAMPLES, count = 1, value = <sampled values> } ``` ``` Result { kind = MSG_RET, seq = 3, status = 0, result = <ignored>, } ``` > 停止