バッテリーサービス0000180f-0000-1000-8000-00805f9b34fbバッテリー情報キャラクタリスティック00002a19-0000-1000-8000-00805f9b34fb
ヘッドセット(HFP)0000111e-0000-1000-8000-00805f9b34fb
Bluetooth Battery Gadget
バッテリーサービス0000180f-0000-1000-8000-00805f9b34fbバッテリー情報キャラクタリスティック00002a19-0000-1000-8000-00805f9b34fb
ヘッドセット(HFP)0000111e-0000-1000-8000-00805f9b34fb
Bluetooth Battery Gadget
Webpの画像はWin10ならWIC経由で取得可能だったけど、各フレームのディレイの取得方法がわからなかったので自作。
下記のWebPのファイルフォーマットを参照した。
developers.google.com
List<int> delay = new List<int>(); byte[] buff = new byte[stream.Length]; stream.Read(buff, 0, buff.Length); // WEBP if (System.Text.Encoding.ASCII.GetString(buff, 0, 4).Equals("RIFF")) { for (int i = 12; i < buff.Length - 8; i += 8) { string chname = System.Text.Encoding.ASCII.GetString(buff, i, 4); int chsize = BitConverter.ToInt32(buff, i + 4); if (chname.Equals("ANMF")) { int offset = i + 8 + 12; byte[] dbuff = { buff[offset], buff[offset + 1], buff[offset + 2], 0 }; delay.Add(BitConverter.ToInt32(dbuff, 0)); } i += chsize; } } return delay.ToArray();
これで自分用ツールのビューワをAnimatedWebPに対応。
Apple Keyboard Bridge
//ProductHexId = "0xA052"//VendorHexId = "0x04D9"HidDevice deviceList = HidDevices.Enumerate().ToArray();HidDevice co2miniList = deviceList.Where(x =>x.Attributes.ProductHexId == "0xA052" && x.Attributes.VendorHexId =="0x04D9").ToArray();HidDevice co2mini = co2miniList.Length > 0 ? co2miniList[0] : null;if(co2mini != null){co2mini.OpenDevice();co2mini.WriteFeatureData(feature_data);……HidDeviceData data = co2mini.Read();……}
①決定ボタン連打機能自動戦闘によるレベルあげ用スライムやロアリングナイトにロアリングナイト先生では先に進むのをキャンセルしてくれる②なんちゃってソフトリセット機能手元ソフトリセットがなくなっていて超不便なので作ったPS4コンだとPSボタンを押すとアプリを強制再起動ウィンドウ位置を覚えておいて再配置してくれる③HPチェック機能プロセスメモリ開いてHPを見るラスボスのHPがどうにもおかしいので確認したくなったバグなのか仕様なのかわからんけど、真破壊するものでターン毎に1万以上回復することがあった
PCの消費電力が気になってしょうがない。
ワットチェッカーは持っているんだけど、いつも見える位置に配置しようとすると電源ケーブルをかなり延長する必要がある。Bluetoothで飛ばす製品もあるみたいだけど、結構なお値段する。
ということで、ありものの明暗センサLEDライト+ワットチェッカー+Webカメラを使ったソリューション。Webカメラにマグネットシールを張り付けて、PCケース背面に設置、ワットチェッカーを監視。フレキシブルなUSBケーブルとかあればそっちのほうが便利かもしれない。暗くても見えるように近くに明暗センサLEDライトも設置しとく。
OpenCvSharpを使えばWebカメラからキャプチャできるらしい。NuGetしてきて適当にプログラムを書く。PictureBoxIplというコンポーネントがあったので、これを使えば表示できそうな気がする。
namespace WattCheck { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { timer1.Interval = 1000; timer1.Start(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { CloseCaptureDevice(); } private void timer1_Tick(object sender, EventArgs e) { UpdateCapture(); } VideoCapture cap = null; private void UpdateCapture() { if(cap != null && cap.IsOpened()) { pictureBoxIpl1.ImageIpl = cap.RetrieveMat(); System.GC.Collect(); } else { OpenCaptureDevice(); } } private void OpenCaptureDevice() { for (int i = 0; i < 0x8; i++) { cap = new OpenCvSharp.VideoCapture(i); if (cap.IsOpened()) { break; } else { CloseCaptureDevice(); } } } private void CloseCaptureDevice() { if (cap != null) { cap.Release(); cap.Dispose(); } } } }
やったー。
PC+ディスプレイの消費電力。
LEDライトは0.2ワットだから気にしない。
あとは文字認識させてロギングしたいけど適当なOCRのライブラリってあるんだろうか。
探してみるとtesseract-ocrというものを使うと良いらしい。
適当に画像を2値化して食わせてみたけど……。
反射光やら影やらのせいでうまく認識しない。
7セグ数字くらいなら自前でテンプレートマッチングしたほうが手っ取り早そうな気がしないでもない。そのうちなんとかしよ。