chirimen-oh / chirimen

CHIRIMEN for Raspberry Pi
https://chirimen.org/chirimen/
13 stars 17 forks source link

I2C ポートを開放したい #75

Open dynamis opened 5 years ago

dynamis commented 5 years ago

現在の API と polyfill 実装では同一ポートの GPIO/I2C アクセスは競合が発生して最初に接続したアプリ (ページ) だけが利用可能になる。GPIO は unexport() が用意されており占有する必要が無くなったら解放できるが I2C ではポート (の配下の I2CSlaveDevice との通信) を開放する為の手段が用意されていないように思う。そのアプリを終了して WebSocket 接続を切断するしかなさそう。

特に i2c-detect などはスキャン時以外は占有せずにすぐに解放する実装にしたいが現状ではできなさそうに思う。

ちなみに単純に unexport() 的なもの以外には、使われなくなったら自動的に解放するという設計も本来はアリ (実装できるかはともかく)。

ハードデバイスを占有するという類似性のある getUserMedia では取得した Stream の track を全て停止した上で videoElem.srcObject への stream の関連付けを切ることで解放できるというちょっと面白挙動:

https://developer.mozilla.org/ja/docs/Web/API/MediaStreamTrack/stop

function stopStreamedVideo(videoElem) {
  let stream = videoElem.srcObject;
  let tracks = stream.getTracks();

  tracks.forEach(function(track) {
    track.stop();
  });

  videoElem.srcObject = null;
}