Skip to content
leico edited this page Aug 6, 2019 · 10 revisions

SimpleControl

背景

  • MIDI
    • 解像度が足りない、速度が遅い、古すぎる
    • 命令と機能が厳密に決められすぎていて足かせになることがある
  • CVによる操作はモジュラーシンセ周りだけでしか扱われていない
  • 照明関係もDMXで閉じてしまっている
  • OSCではEthernet, IPv4/v6, TCP/UDP という部分の実装コストが高い、送信先を指定するアドレスが文字列で扱いにくい

異なる領域同士の連携を行う時のコストが高い。規格が古くて現在求められている情報量を扱いきれていない。 高機能過ぎて実装や設定が煩雑になる。

SimpleControlの仕様

メッセージの種類

4byte の整数型アドレス

```
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
+----+----+----+----+----+----+----+----+

|--------address(32bit int)-------------|
```
  • アドレスメッセージによって送信先が切り替わる
    • 別のアドレスメッセージが送られてくるまでの間に到着したデータメッセージは全て同じ宛先に送られる
  • 1byte ずつシリアルで送る場合、各byte の先頭ビットを 1 、残りの7bitを実データとする 5byte を用いて転送を行う
    • 最上位 byte の MSB 3bit は 111 とする
                                               +----+----+----+----+----+----+----+----+
                                               |    |    |    |    |    |    |    |    |
                                               +----+----+----+----+----+----+----+----+
      
                             +----     +----+---     -+----+--    --+----+-    ---+----+ 
                             |         |    |         |    |        |    |        |    |  split per 7bit
                             +----     +----+---     -+----+--    --+----+-    ---+----+
      
       +-+---|+----|     +-|+----+---|    +-|-+----+--|    +-|--+----+-|    +-|---+----+ 
       |1|111||    |     |1||    |   |    |1| |    |  |    |1|  |    | |    |1|   |    |  add head bit
       +-+---|+----|     +-|+----+---|    +-|-+----+--|    +-|--+----+-|    +-|---+----+
      
  • 他のプロトコルに含める場合
    • 梱包するプロトコルにアドレスのデータであることを示すものを一緒に含める
    • または先頭4 byte がアドレス、残りをデータとして解釈する
      • SimpleControl のデータ長は必ず4の倍数になる

4byte のfloat型データ

```
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
+----+----+----+----+----+----+----+----+
                                          
|--------data(32bit float)--------------| 
```
  • アドレスメッセージが指定した先に送られるデータ
    • 同じアドレスに複数のデータを送りたい場合は連続してデータを送ることができる
  • 1byte ずつシリアルで送る場合、各byte の先頭ビットを 0 、残りの7bitを実データとする 5byte を用いて転送を行う
    • 最上位 byte の MSB 3bit は 111 とする
                                               +----+----+----+----+----+----+----+----+
                                               |    |    |    |    |    |    |    |    |
                                               +----+----+----+----+----+----+----+----+
      
                             +----     +----+---     -+----+--    --+----+-    ---+----+ 
                             |         |    |         |    |        |    |        |    |  split per 7bit
                             +----     +----+---     -+----+--    --+----+-    ---+----+
      
       +-+---|+----|     +-|+----+---|    +-|-+----+--|    +-|--+----+-|    +-|---+----+ 
       |0|111||    |     |0||    |   |    |0| |    |  |    |0|  |    | |    |0|   |    |  add head bit
       +-+---|+----|     +-|+----+---|    +-|-+----+--|    +-|--+----+-|    +-|---+----+
      
  • 他のプロトコルに含める場合
    • 梱包するプロトコルにアドレスのデータであることを示すものを一緒に含める
    • または先頭4 byte がアドレス、残りをデータとして解釈する
      • SimpleControl のデータ長は必ず4の倍数になる

複数組のデータと別のデータを区別する方法について

  • 同一のアドレスを再度送信することで区別する
    • 3つ1組のデータを送る例
      | address |~| data |~| data |~| data |~| address |~| data |~| data |~| data |~~~ 
      
  • データの途中でアドレスデータが来た場合、途中のデータは破棄する
  • ただし、受信したところまでの動作が定義されている場合は、その動作を実行する
    | address |~| data |~~~| address |~| data |~| data |~| data |~~~~
                           |<- discard or execute 
    
  • アドレスの動作とタイムアウトの動作を組み合わせると強固になる
  • 指定した数のデータが到着し次第、規定された動作を実行する
    • 3つのデータで動作する場合
      | address |~| data |~| data |~| data |~| data |~| data |~| data |~~~~
                                           |<- execute                |<- execute
      
      
  • プロトコルによってはタイムアウトを作成する
    • 2メッセージ程度の空白を想定
      | address | data | data |~~~~|~~~~|~~~~| data | data | ...
                                        |<- timeout
                                            execute or discard data 
      

通信規格について(推奨設定)

  • 規定しない

    • TCP/UDP、USBシリアル、Blutooth、HTTP(S)、I2C、どれであろうとこの形式で送受信できれば利用できる
    • 既存の規格に送受信できそうな余白があれば積極的に利用する
    • アドレスとデータが同時に送れそうな場合は同時に送る
      +----------------------------------------------------------------+
      | +------------------------------+                               |
      | | address | data | data | data |           other protocol      |
      | +--------SimpleControl---------+                               |
      +----------------------------------------------------------------+
      
      • アドレスとデータの区別はプロトコル毎に考える
  • パラレルで送る場合に1メッセージの形式は崩さない

    • 4回線の場合の例
      route :                              read order :
      -------------| address |--------->   1
      -------------|    data |--------->   2
      -------------| address |--------->   3
      -------------|    data |--------->   4
      
    • 別プロトコルで梱包して送る場合は梱包したプロトコルを1つずつ送る
      route :                                        read order :
      -------------| wrapped protocol | ---------->  1
      -------------| wrapped protocol | ---------->  2
      -------------| wrapped protocol | ---------->  3
      -------------| wrapped protocol | ---------->  4
      
  • エンディアン

    • メッセージを乗せる規格に従う
  • 通信速度について

    • メッセージを乗せる規格に従う
  • エラー処理について

    • メッセージを乗せる規格に従う
    • 規格にエラー検出が存在しない場合、エラー検出用CRCを追加したものも検討中
  • メッセージ以外の送受信

    • メッセージを乗せる規格に従う
    • Ethernetを利用するのであればPoEで電源供給なども考えられる

アドレス割当について(推奨設定)

  • IPv4のようなサブネットマスクの方式を利用して、各種パラメータへのアサインを振り分ける使い方が想定できる
    • ホスト最大値はブロードキャストになる

データ形式について(推奨設定)

  • 基本は -1.0 - 1.0 の間でデータ送信を行う
    • bipolar 型のパラメータに対応するため

利用規約について

  • 商用、非商用問わずこの規格を利用することができる
  • 商用、非商用問わずこの規格を改変することはできない
    • 自由にこの規格を他の規格でラップすることはできる
      • +----------------------------------------------------------------+
        | +--------------------------------------+                       |
        | |  Simple Control                      |   other protocol      |
        | +--------------------------------------+                       |
        +----------------------------------------------------------------+
        
    • ラップする規格の利用規約に注意すること
  • この規格そのものによって利益を得ることはできない
    • この規格に何らかの拡張をしたものに関してはその限りではないが、誰もが自由に利用できることが望ましい
  • この規格の内部に別の規格を含ませてはならない
    • SimpleControl
      +-----------address--------------+---------------data------------------+
      | +------------------------+     | +--------------------------------+  |
      | |  other protocol A      |     | | other protocol B               |  |
      | +------------------------+     | +--------------------------------+  |
      +--------------------------------+-------------------------------------+