バックライトのUSB Web通知機能





残念なことに、私は風邪をひいて、3日間自宅で立ち往生し、無制限の楽しみから「長い箱」を整理し始める機会がありました。 このボックスには、CBRからの「usb notifier」が見つかりました。 このデバイスは、配色を変更することで、受信メールメッセージを警告するように設計されています。

運が良かったのか、その逆だったのかはわかりませんが、デバイスはすぐに機能することを拒否しました。 HID互換デバイスとして定義されていましたが、奇跡のソフトウェアは動作したくありませんでした。







最初は、宣言された機能を繰り返すソフトウェアを書くことを考えましたが、慎重に考えた後、犬の5番目の足として「通知機能」が必要であることに気付きました。 一方で、液滴内のLEDの外観が気に入ったため、デバイスから通常の夜間照明を作ることにしました。

そもそも、色の変化の原因となっているバイトを見つける必要がありました(同じHIDを忘れないでください)。 わかりやすい文書は見つからず、経験的に行動する必要がありました(「空への指」の科学的方法)。 そのような研究のために、素晴らしいソフトウェアSimpleHIDWriteがあります。 チームの選択にはかなりの時間がかかると思いましたが、すべてが非常にシンプルであることがわかりました。 ReportID 00を設定し、01 00 00 00 00を送信すると、奇跡のデバイスが赤に変わります。 色を変更するための他の制御バイトのリストを以下に示します。









さて、デバイスを制御する小さなシェルを作成するのはあなた次第です。 GUIが予測されていないため、c#でWindowsサービスの形式でデバイス管理を行うことにしました。 HidLibraryを使用したホストとHIDデバイス間のデータ交換の実装は次のとおりです。



// vendor id,  ,       . private int vid = 0x1294; //     vid' var devs = HidDevices.Enumerate(vid).ToList(); // , num_devices.   .config var dev = devs[device_num]; if(dev != null) { //     var data = new byte[5]; // obj      data[0] = (byte)(int)obj; // Report, ..    HID_SET_REPORT var report = dev.CreateReport(); // Report report.Data = data; //  dev.WriteReport(report); }
      
      





今、色を変更する方法と時期を決定する必要があります、最初にタイマーで実装したかったのですが、退屈に思えたので、オーディオ入力からサウンドレベルの色を変更することにしました(マイクまたはマイク付きのWebカメラがあることを意味します)。 このためにNAudioを使用しました 。 このライブラリの管理方法については、 ここで説明しますが 、ピークサウンドレベルの決定を担当するハンドラーを指定するだけです。 原則として、コードは参照により記事の大部分を借用しています。



 // - 0,   8000   - var dev = new WaveIn(WaveCallbackInfo.FunctionCallback()); dev.DeviceNumber = 0; //      - dev.DataAvailable += dev_DataAvailable; dev.WaveFormat = new WaveFormat(8000, 1); dev.StartRecording(); void dev_DataAvailable(object sender, WaveInEventArgs e) { //      var max = getValueMax(e.Buffer, e.BytesRecorded); //    if(max > _trigger) { if(ChangeLevelVolumeMax != null) { // ,    ChangeLevelVolumeMax(this, e); } } } private float getValueMax(byte[] buffer, int lenght) { //  List<float> l_sample32 = new List<float>(); // ,     for (int index = 0; index < lenght; index += 2) { float sample32 = (float)(short)((buffer[index + 1] << 8) | buffer[index + 0]) / 32768f; l_sample32.Add(sample32); } //  var max = l_sample32.Max(); return max; }
      
      





さて、上記のコードはWindowsサービスシェルにパッケージ化されています



 protected override void OnStart(string[] args) { //USB Notifier device = new cApi(cSettings.Usb); //Audio audio = new cAudio(cSettings.Audio, cSettings.Rate, cSettings.Chanel, cSettings.Trigger); audio.ChangeLevelVolumeMax += audio_ChangeLevelVolumeMax; base.OnStart(args); } void audio_ChangeLevelVolumeMax(object sender, NAudio.Wave.WaveInEventArgs e) { //  device.setNextColor(); } protected override void OnStop() { device.Off(); device.Dispose(); audio.Dispose(); base.OnStop(); }
      
      





残りはWixを使用してサービス展開を作成することです。 詳細については、 gitをご覧ください。 そして最後に、ビデオ:






All Articles