---
# System prepended metadata

title: 久正逢甲產學合作案 - 主機方(PC)主動與採取方(PI)溝通方式

---

# 久正逢甲產學合作案 - 主機方(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>,
}
```
> 停止

