ここのところ注力しているSTM32マイコン用のクラスライブラリ『紫』v1.0.0をリリースしました。
紫はSDRで使うことを想定して開発したペリフェラル操作ライブラリで、以下のような特徴を持っています。
- RTOSベースのスレッドセーフ設計
- UART, SPI, I2Cなどの基本的なペリフェラルをクラス化
- 網羅的なAPIリファレンスと十分なユーザーズガイド
今回のリリースはオーディオ操作クラスであるDuplexAudioを追加したことが目玉です。このクラスはシリアル・ペリフェラルをアダプタ・パターンとして分離しています。v1.0.0ではSAIのみをサポートしていますが、次のマイルストーンではI2SおよびSTM32のDuplex I2Sに対応を予定します。
紫では機能の実装をクラスのメンバー関数に閉じ込めたため名前空間の管理が細かく、IDEの入力補完機能を駆使して容易にプログラムを書くことができます。また、主要な引数にはenum型を使っているので、整数定数を使った引数の曖昧さがありません。適当な整数を与えようとしてもエラーが返ります。ペリフェラル機能のカプセル化と定数の型付けは以前からあたためていたアイデアで、ようやく形になってきたという実感が有ります。
紫は本来私一人が使うことを目的として開発しています。ですからどのように開発しようが自由です。しかし、以下のようなツール、機能、方針を積極的に取り入れて開発しています。
- githubによるバージョン管理
- github issuesを使った案件管理
- github projectのカンバン機能によるプロジェクト管理
- assertion / syslogの積極利用
- DoxygenコメントによるAPIリファレンス
- use caseを元にしたユーザーズ・ガイド
こういった方針で開発しているため、私以外の人も使いうる品質になっています。
特にドキュメントには力を入れています。私は常々「複雑な製品は機能を百科事典的に説明するリファレンスと、ユースケースを元に書かれたユーザーズガイドを備えるべきだ」と主張しています。ですから、自分が作るものがそういうものを備えていないのでは書生論のそしりを免れません。一つくらいはきちんとしたものを作ろうという気持ちで今回のライブラリを作りました。
紫のドキュメントは「どこかに書いてあるかもしれないし、いずれにせよソースを読めばわかる」というスタンスではなく、「主体的なプログラマが合理的にアクセスすれば必要な情報にたやすく到達できる」ことを目指して書いています。
紫はSDRのプラットホームとしては7割がた機能がそろったと言える状態です。次のリリースでは
- I2Sへの対応
- ロータリーエンコーダーへの対応
- I2Cのリファクタリング
- I2C, SPIのテストの徹底化
を図り、SDR開発に進むことができるようにする予定です。