Raspberry Pi 2のI2Cデバイスを、C#から使ってみる。
C標準のopen
やread/write
といった低レベル関数を、
DllImport
することでC#から使えるようにしている。
こういうとき、C#だとCとの相互運用性が
意外と考えられていて、なかなか役に立つ。
DllImportでは、Cの関数に整数などのプリミティブはもちろん、
プリミティブの配列や文字列やポインタも渡して戻せる。
構造体も、多少手間がかかるがやりとりできる。
(ただし、ポインタを使うときは、unsafe
キーワードが必要。
ちょっと特殊なので注意)
また、Cのヘッダ内の定数などはC#に自動で取り込んでくれないので、 自分で調べてC#コードに直打ちした。 RasPiのlibcの型とC#の型の対応も、 自力で調べればわかる。
- Cの
unsigned char
-> C#のbyte
(Byte
) - Cの
int
-> C#のint
(Int32
) - Cの
unsigned long
-> C#のuint
(UInt32
)
.Net FrameworkはWindows向けなので、 Raspbianでは使えないが、代わりにMonoが使える。 コンパイラのコマンドはmcs。
aptitude install mono-mcs
mcs I2CController.cs I2CReader.cs
./I2CController.exe
で実行できる。