Raspberry PI で Lepton3.x を使う（その５）

# はじめに
簡単に温度測定をしようと Lepton 3.5 を使っています。
当初思っていたほど『簡単』ではなかったことについて
いろいろ書いている記事の５回目です。

とりあえず、このシリーズは今回で最後。
なにかあれば、別シリーズとして書きます。

# 再利用性の向上
- 前回の記事の追記として書いたように、[[Lepton3.5 対応](https://github.com/groupgets/LeptonModule/pull/66)]はマージされました
- ただ、Qt 依存コードなので再利用性が最悪 orz
- そういうわけで構成変更した PullRequest ([PR reduce qt dependencies #71](https://github.com/groupgets/LeptonModule/pull/71))を出しました

## 修正内容の概要
- １行で書くと「raspberrypi_video から再利用可能と考える部分を raspberrypi_libs/leptonSPI に分離」

## 修正内容の詳細
- ３ブロックで書くと、この↓ような感じ

### 基本動作は、使いまわす
- データ読み込みのための条件（オプション）を指定可能とし
- SPI からのデータ読み込み
- １画面分のデータを読み込んだら「何らかの処理」を実行

### 「何らかの処理」は差し替えたい
- raspberrypi_video であれば、Qt を使い描画
- ほかの処理では「別のこと」がある

### 多態性（polymorphism ポリモーフィズム）での実装
- せっかく c++ を使っているのだからクラス継承
  - 基底クラスを定義して、派生クラスで実装
- raspberrypi_video であれば、この↓ような継承関係
    1. LeptonAction ← 基底クラス
        1. LeptonActionQt ← 派生クラス

# 画像で保存(raspberrypi_capture)
- raspberrypi_video を修正した PullRequest を出したのが年末（2019/12/25)
- 年が明けても何のリアクションもないし、こちらからも何もできない状態がつづく
- 以前に作成した「画像ファイル保存」コマンドをどうしようか迷っているとき、何気なく見たraspberrypi_capture がその類似コマンドと知る
- raspberrypi_capture も自分好みの仕様に修正して **Commit & Push** (2020/02/06)
  - raspberrypi_libs/leptonSPI を使う
  - オプションもいくつか追加

## 修正内容の詳細

### 基本動作は、使いまわす

### 「何らかの処理」は差し替えたい
- raspberrypi_capture であれば、ファイルに保存(png/pmg/cvs形式)

### 多態性（polymorphism ポリモーフィズム）での実装
- せっかく c++ を使っているのだからクラス継承
- raspberrypi_capture であれば、この↓ような継承関係
    1. LeptonAction ← 基底クラス
        1. LeptonActionFile ← 派生クラス（中間、ファイル取り扱いの共通メソッド create/saveなど）
            1. LeptonActionFilePng ← 派生クラス（実際の画像形式に合わせた処理）
            1. LeptonActionFilePgm ← 派生クラス（同上）
            1. LeptonActionFileCsv ← 派生クラス（同上）


# 失念されていた orz
- push したことでリアクションありました (2020/02/11)
  - Thanks for the PR! I apologize for letting this slip through the cracks over the holidays, and then I forgot about it until you updated it a couple days ago. I'll take a close look as soon as I can.[[翻訳](https://translate.google.co.jp/?hl=ja#view=home&op=translate&sl=en&tl=ja&text=Thanks%20for%20the%20PR!%20I%20apologize%20for%20letting%20this%20slip%20through%20the%20cracks%20over%20the%20holidays%2C%20and%20then%20I%20forgot%20about%20it%20until%20you%20updated%20it%20a%20couple%20days%20ago.%20I'll%20take%20a%20close%20look%20as%20soon%20as%20I%20can.)]
  - しかし、2020/04/08時点で**放置継続中**

# V4L2対応(v4l2lepton)
- V4L2 とは Video4Linux2 のこと
  - Linux でビデオキャプチャ機器を使いやすくするためのナニからしい（これは自分の理解不足が原因）
  - https://en.wikipedia.org/wiki/Video4Linux
- [Issue-73](https://github.com/groupgets/LeptonModule/issues/73) で、V4L2でのLepton3.5サポートが期待されていることを知りました (2020/03上旬だったかな？)
- おまけで V4L2 対応しようかな？って気持ちになった
- V4L2のことは、よくわかっていないけどコード読みました
- そんなに難しくなさそうなので、空き時間で修正しました
- 自分には、無駄に threadやsemaphore使っているように見えるので、原形がわからないほどバッサリカット (笑)
  - 派生クラス LeptonActionV4l2 を実装
- 簡単に動作確認して **Commit & Push** (2020/04/08)
  - commit ログを見たら３週間ほどで修正したように見えるかもしれないけど、ひま見つけて人前に出せる最低限のレベルに整理しなおしたのがその期間なだけ

# ソースコードの整形
- OSS に協力していると、コードの記述の細かな違いが気になりませんか？
  - できるだけ、プロジェクトの書き方を保とうと思うけど、整形漏れしてしまいます
- 最近、**コーディング規約を決めるのもプロジェクトの責任**と思うようになりました
  -  c言語系を使うなら [clang-format](https://www.google.com/search?q=clang-format) とかいいのかな？


# 最後に
- 提案のデモプログラムとして Lepton をさわり始めて、いつのまにか半年ほど経過
- 「プログラムが動けばOK」のはずが、いつの間にか Edit/Commit/PullRequest までしていた
  - やっぱり Merge とかされるとチョットうれしい
- merge されるか reject かわからないけど、PullRequest ([PR reduce qt dependencies #71](https://github.com/groupgets/LeptonModule/pull/71))がcloseされるまでは、細々と続けます
- それでは、今回の PullRequest でひと区切りなので、この連載記事も終了とします

---
# 記事リスト
- [Raspberry PI で Lepton3.x を使う](https://qiita.com/higuchi-toshio-intec/items/da4f12e3e09426f45812)
- [Raspberry PI で Lepton3.x を使う（その２）](https://qiita.com/higuchi-toshio-intec/items/c20470abbf9a18971bec)
- [Raspberry PI で Lepton3.x を使う（その３）](https://qiita.com/higuchi-toshio-intec/items/fd7d8641313afe53a12f)
- [Raspberry PI で Lepton3.x を使う（その４）](https://qiita.com/higuchi-toshio-intec/items/d72448e3e473c8968d40)
- [Raspberry PI で Lepton3.x を使う（その５）](https://qiita.com/higuchi-toshio-intec/items/7961cd2e51de0d582cac)（← 今回の記事）

<!-- eof -->