.NET DataGridViewで行ドラッグ移動を簡潔に行う

.NET DataGridViewですが行ドラッグ移動くらい標準でできるのかなと思っていましたができないんですね。IAWスキャンツールも面倒そうなのかやってない。以下のようにすると割とスマートにできました。説明はコメントをみてください。

       this.dgvParameters = new System.Windows.Forms.DataGridView();

        // For row drag
        private bool duringDrag = false;  // ドラック中かのフラグ
        private int dragFromRow = 0;      // ドラック開始行

        /* マウスボタンDownイベント / Start Row drag */
        private void dgvParameters_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) {
            // Remark: top of data row is 0
            if ( e.RowIndex < 0 && dgvParameters.RowCount < e.RowIndex ) {
                return;
            }
            duringDrag = true;
            dragFromRow = e.RowIndex;
        }

        /* マウス移動イベント Evrey Row drag */
        private void dgvParameters_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e) {
            if ( duringDrag == false ) {    // Not dragging
                return;
            }

            /* マウスイベントはたくさん発生するので、ここで時間でイベント間引きするとベスト */

            // Remark: top of data row is 0
            if ( e.RowIndex < 0 && dgvParameters.RowCount < e.RowIndex ) {
                duringDrag = false;     // Cancel dragging.
                dragFromRow = 0;
                return;
            }

            int dragToRow = e.RowIndex;
            if ( dragFromRow == dragToRow ) {
                return;             // 同じ行内ならスルー
            }

            // Delect and insert target row.
            DataGridViewRow from = dgvParameters.Rows[ dragFromRow ]; // 移動元行を取り出す
            dgvParameters.Rows.RemoveAt( dragFromRow );               // 移動元行をGridから削除
            dgvParameters.Rows.Insert( dragToRow, from );             // 移動元行をGridの指定行に追加
            dgvParameters.Rows[dragToRow].Selected = true;            // 行選択を移動

            dragFromRow = dragToRow;    // Set next drag row. 移動元行を現在行に切替え
        }
        
        /*  マウスボタンUPイベント / End Row drag */
        private void dgvParameters_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) {
            if ( duringDrag == false ) {    // Not dragging
                return;
            }

            duringDrag = false ;    // End dragging
            dragFromRow = 0;
        }

このロジックだと、移動中動きを見せつつ、上方向の移動と下方向の移動も同じロジックで両立できます。実行結果は以下のとおりです。

LinageOSで画像編集がしたい( F-Droidを試す )

LinageOSでプレインストールされる画像編集ソフトは機能が少なすぎです。手書きメモは欲しいところです。いいものはないか探しました。

Google Playでは、広告や一部課金などよいものがみつかりません。そういえば F-Droid というアプリインストーラがデフォルトで入っていました。

開いて画像編集アプリを探します。

数は少ないですが多分広告はないでしょう。「好ましくない機能」が何なのでしょうか? その中から Image Tool BOX を選択しました。以下使ってみた様子です。

フォント入力 や 直線引きができると最高ですが、まずまず使えます。

F-Droid とはAndoridでも使えるらしいです。URLはこちら 無償で審査が緩めでアプリ公開したい場合によさそうですね。

SGP611でAndroidでSDカードに取得したバックアップを、LinageOS上で復元することは可能か?

ユーザさんより質問がありましたので記載しておきます。2つの意味があると解釈しました。


SGP611 の場合、ブートローダ から カスタムリカバリを起動できないため、ブート領域 に一旦 カスタムリカバリを書いて起動させ、OSをインストールしています。
OSによって、ブート領域 にブートローダに上書きされ、カスタムリカバリは消えます。

まずカスタムリカバリ を ブート領域 に書込む必要があります。
カスタムリカバリ から バックアップとリストアは可能なはず。
その後、ブート領域 に ブートローダ を再書き込みが必要だと思います。

ただし、弊方では試したことはないため、実際うまくいくかはわかりません。


Copilot に聞くと「ある程度の互換性があると」答えてくれました。

詳細や実際のところは不明です。

試すには、まず まずカスタムリカバリ を ブート領域に書込む必要があるでしょう。

カスタムROMセットアップ一覧INDEX【随時更新中】

弊方用に一覧をまとめました。元々、アプリデバック用に、余った端末のOSバージョンを自由に変更できないか?と始めたものです。

機種掲載URL備考
SC-02Dhttps://motoplus4.com/blog/?p=5655Android6相当、執筆中
SM-T800 / Galaxy Tab s 10.5 Wifihttps://motoplus4.com/blog/?p=6116Android13相当、要スクリプト修正
SC-03G / Galaxy Tab S 8.4https://motoplus4.com/blog/?p=1041Android10相当
SGP312 / Xperia Tablet Z Wi-Fi 32GBhttps://motoplus4.com/blog/?p=6914Android13相当
D2105 / Xperia E1 Dual https://motoplus4.com/blog/?p=5650Android7.1.2相当
※1
SGP611 / Xperia Z3 tablet Compact Wi-Fi 16GBhttps://motoplus4.com/blog/?p=6698Android11相当、リカバリ常時使用不可、GPS不可
※1
SGP612 / Xperia Z3 tablet Compact Wi-Fi 32GBhttps://motoplus4.com/blog/?p=3488Android11相当、GPS不可
※1
SGP621 / Xperia Z3 tablet Compact LTE国際版https://motoplus4.com/blog/?p=1157Android11相当
※1
SGP712 / Xperia Z4 Tablet Wi-Fihttps://motoplus4.com/blog/?p=6703Android11/12相当、要スクリプト修正
※1
SGP771 / Xperia Z4 Tablet LTE国際版https://motoplus4.com/blog/?p=4170Android11相当
※1
SO-05G / Xperia Z4 Tablet LTE docomo版https://motoplus4.com/blog/?p=1093‘24.4月以降セットアップ不能

※1 FMラジオは起動できないか日本の周波数帯を指定できない。

2000年以前用FIATダイアグツールを日本語化+αを試す5: L-Lineは必要?とまとめ

前記事では7812bpsという特殊な通信速度が正しく生成できているかを検証しました。結果問題ありませんでした。

何か根本的な間違いがあるのかもしれません。使用しているFIAT用ケーブルは L-Line の導通がありませんでした。これは仕様ではなく故障不具合では? 本件2記事目の時は断線した瞬間だったのかもしれません。 本件一記事目に立ち戻ってケーブルを修正すると、ISOコード以降の受信ができるようになりました。( ただし一度通信切断した後は、3分程度時間を空けたないとECUは応答を返さないようです )

なるほど! K-Line のみのシステムもあるため、この IAWシステムL-Line は必須なようです。配線上、K-Line L-Line も同じ信号が流れ 、送信信号と受信信号は合成されるため、ECU側で分ける必要はないと推察していましたが間違いでした。通信仕様書には「L-Lineは受信」書いてありましたが便宜上だけと思っていました。

古巣3のシステムも、とあるイタリアのオートバイメーカさんのマレリシステムも K-Line のみだった気がします。IAWシステム は少々特殊なのかも。図にすると以下のような感じです。


因みに弊方がそもそも確認したかったスロットル開度は、全閉から前回までのグラフは以下の通りでした。全閉時は 0% ではなく6%半ば。普通のECUは全閉時が 0% なので 6% は異常です。(当初は11%でしたが少し絞りました) ECUはスロットルを踏んでいない時が 0% になるよう少しづつ学習しているためです。スロットル開度はメカなのでずれてくるという思想です。

併せてスロットルやセンサ交換すると、スロットル全閉時の電圧の学習値と実値に差が生じます。そこでECUにはその学習値のリセット機能を用意します。未学習の場合、急速学習するようにソフトを組みます。IAWシステムの通信仕様書にはそれっぽいものはあるようですが詳しい説明はないです。

以上のことからIAWシステムはスロットルセンサの最小値を 0% として固定し、IDLE時のスロットル開度を学習しているのかもしれません。

しかし整備書は 0~4% とに合わせるようにと記載あります。逆算すると 0.25V 程度、整備書のスロットルセンサ特性に記載されているTYP値は0.2~0.3V。その辺りにスロットルのアイドルストッパスクリュー を調整すると、スロットルバルブが完全に閉じてしまいます。( そもそもスロットルメーカが空気量を測って調整して出荷しているので本来はいじっていけない )

更に整備書にはアイドル時スロットル開度 は 14% まで許容と記載も見られます。IDLEスロットル開度がこんなにずれたら大変です。急なスロットルセンサの劣化による抵抗値上昇なのか? 日々モニタして観察するしかなさそうです。


このアプリにはインストーラがなかったので作成しました。Visual studio の Setup Project を利用します。それについては詳しくはこちら。外部.dll も含むのでコピペでなくインストーラ化したほうが利用されやすいでしょう。


AIとはニュアンスが違いますが、遥か昔からエンジンコントロールユニットは、機械の個体差、メカ部品やセンサーの劣化を日々少しづつ学習をしています。整備によってコンディションが大きく変わった場合は、学習をリセットする必要があります。それらも同アプリは用意されています。これらの市場用メンテナンス機能は、自分で整備される方にとってはモニタリングよりも重要です。

アイドル制御モータはいわゆるISC(Idle Speed Control)で、IAWシステムはソレノイドでなくよりなぜか高級なステッパーモータです。今回はヘッドO/Hしたので初期化(リセット)します。 CO調整 は排ガス計測機が必要な可能性もあるので実施せず。アイドル制御補正は、アイドル時は特にストイキ(AF値14.7)に燃料を補正をします。他の回転領域とは別で学習しているのかもしれません。しかし失敗です。


ダイアグツールの整備用機能は、個々のエンジン制御コンポーネントが正しく動作するかのテスト機能があります。当アプリでも用意されています。業界的には「アクティブテスト」といいます。(当アプリの日本語訳は部品テストとしましたが) 実施結果は以下のとおりです。ECU内でFET駆動のフィードバック回路で判定しているのかなと思います。

以上、なかなか使えるツールです。あとイモビの設定、エアバッグ、CVTコントローラもありますが、そこまでは対応していないようでね。


以上、GWの趣味も兼ねた実習でした。出来たことは、

  • オープンソースのダイアグツールの日本語化。
  • 通信内容の検証機能の作成。
  • USBケーブル抜き差し検出。
  • 同ツールのタイミング精度向上。
  • 同ツールの実通信速度の検証と精度向上。
  • 通信不調のトラブルシューティングと改善。
  • インストーラも無かったので作成

成果物は追ってGPLライセンスに基づき本流にコミットし、公開したいと思います。はやく欲しい方はこちらから催促してください。オープンソースのダイアグツールの日本語化や通信不調でお困りの方、整備事業者さん、ご相談、依頼はこちらから。