chirimen-oh / any-issues

CHIRIMEN Open HardwareのISSUESを検討するために用意されています。 従って、issuesの議論の目的のみで利用されます。Messaging board (Forum) to discuss several CHIRIMEN issues.
3 stars 3 forks source link

Web I2C APIの仕様で定義されているAPIが足りない #156

Open tadfmac opened 7 years ago

tadfmac commented 7 years ago

現在のWeb I2C APIで定義されているSlave Deviceとのデータ送受信に利用可能なAPI(read8、write8など)は、SMBus Spec 3.0で定義されている下記プロトコルに対応したものになっている認識です。(※1)

(※1) Specの比較と現状のCHIRIMEN実装から個人的に読み解いたもので、Spec上で対応が示唆されているわけではありません

これらのAPIにより、上記SMBus Spec 6.5.4、6.5.5に対応したSlave Deviceとの通信は可能となりますが、言い換えると、上記以外の下記のようなデバイスへの対応が行えていない認識です。

  1. SMBus ProtocolをサポートしないI2Cデバイス全般
  2. SMBus の 6.5.2 Send Byte や、6.5.3 Receive byte 以外のプロトコルを期待するI2Cデバイス全般

CHIRIMENではGroveなど市販のI2Cセンサー等を中心とした対応を期待している認識ですが、より広いデバイスに対応するために最低限下記のようなAPIの追加が必要と認識しています。

tadfmac commented 7 years ago

下記のように進めるべきかと思い、CHIRIMENのissueに登録させていただきました。

  1. CHIRIMENとCHIRIMENに接続することを期待するI2C Deviceなどのユースケースを考慮し追加するAPIを検討する
  2. CHIRIMENへの実装方法を検討、実装、テストを行う
  3. Web I2C APIへのSpecへの提案をおこなう
tadfmac commented 7 years ago

164 終了後に検討実施予定です。

tadfmac commented 7 years ago

下記変更を検討中です。 ツッコミお待ちしております!

interface I2CSlaveDevice { readonly attribute unsigned short slaveAddress;

Promise  read8(octet registerNumber);       // registerNumberを unsigned shortから octetに変更
Promise  read16(octet registerNumber);     // registerNumberを unsigned shortから octetに変更
Promise  write8(octet registerNumber, octet value);     // registerNumberを unsigned shortから octetに変更
Promise  write16(octet registerNumber, unsigned short value);   // registerNumberを unsigned shortから octetに変更
Promise  readBytes(octet readLength);              // 追加
Promise  writeBytes(sequence<octet> buffer);  // 追加
Promise  readByte();                                             // 追加
Promise  writeByte(octet value);                          // 追加

};

readBytes(octet readLength)

readLengthに指定したoctet数読み込みを行う。 読み込み成功したデータを sequence で返す

writeBytes(sequence buffer)

指定したbufferの書き込みを行う。

readByte()

1byteだけ読み込みを行う。

writeByte(octet value)

1byteだけ書き込みを行う。

tadfmac commented 7 years ago

TODO:

tadfmac commented 7 years ago
gurezo commented 7 years ago

@satakagi さん、お時間ある時にコメント下さい

tadfmac commented 7 years ago

https://github.com/chirimen-oh/chirimen-raspi3 こちらで下記追加提案の APIを実装しています。

Promise  readBytes(octet readLength);              // 追加
Promise  writeBytes(sequence<octet> buffer);  // 追加
Promise  readByte();                                             // 追加
Promise  writeByte(octet value);                          // 追加

しかし、使ってみて、さらに下記のようなAPIも追加したくなりました。

Promise  readRegisterBytes(octet registerNumber, octet readLength);              // さらに追加

これがあれば、S11059のカラー読み出しのような要求が1度に行えるようになると思います。 http://akizukidenshi.com/download/ds/hamamatsu/s11059-02dt.pdf

kou029w commented 4 years ago

CHIRIMEN for Raspberry Pi同様にnode-web-i2c(npmパッケージとしてのWeb I2C APIの実装)のほうにも加えました