設定ファイルとライブラリ定義ファイル¶
PyFIE の設定ファイル pyfie_config.json およびライブラリ定義ファイル pyfie_decl.json について説明します。 通常はこれらのファイルの構成を知る必要はありませんが、 PyFIE の動作を細かく制御したり、 FIE とは別の C 言語ライブラリへのバインディングを利用する際に有用です。
設定ファイル¶
PyFIE の実行時に読み込まれ PyFIE の挙動を制御する JSON 形式のファイルです。 この設定ファイルは PyFIE のモジュール内部に配置されます。 [1]
設定項目は以下のようになっています。
{
"DEBUG": false,
"auto_init": true,
"lib_decl_file": "./pyfie_decl.json",
"patches": {
"patch_arm_vfp_cprc" : true
},
"platform" : {
// Windows 環境に対する設定.
"Windows" : {
"lib_bin_path" : [
"%WIL3_1_0X64%/fvalgmt.x64.3.1.0.dll",
"%WIL3_1_0X64%/fvalg_oss_mt.x64.3.1.0.dll",
"%WIL3_1_0X64%/fvalg_camcalib_mt.x64.3.1.0.dll"
]
},
// Linux 環境に対する設定.
"Linux" : {
"lib_bin_path" : [
"/opt/FAST/fvalg-1/lib/libiomp5.so",
"/opt/FAST/fvalg-1/lib/libfvalg.so",
"/opt/FAST/fvalg-1/lib/libfvalg_oss.so",
"/opt/FAST/fvalg-1/lib/libfvalg_camcalib.so"
]
}
}
}
- DEBUG
デバッグモードの有効無効を true または false で設定します。 true を設定した場合デバッグモードが有効となります。 デバッグモードは主に PyFIE 内部のログを出力するためのものなので 通常は false を設定してください。
- auto_init
自動初期化の有効無効を true または false で設定します。
true を設定した場合、 PyFIE のインポート時に自動で初期化が行われます。 PyFIE の初期化では主に下記が行われます。
FIE バイナリのロード.
FIE ライブラリへのバインド.
fnFIE_setup() による FIE ライブラリの初期化.
false を設定した場合には自動初期化は行われません。 自動初期化を行わない場合には PyFIE のインポート後に
init()
メソッドを使用した手動初期化を行う必要があります。 このinit()
メソッドではロード対象となる FIE バイナリのパスを引数にて指定することが可能ですので、 PyFIE をインポートする時点で FIE バイナリのパスを決定できないような状況で利用することができます。
- patches
特定環境向けのパッチの設定です。 通常は初期設定から変更する必要はありません。
- lib_decl_file
ライブラリ定義ファイル pyfie_decl.json のパスを文字列により設定します。 複数のライブラリ定義ファイルを設定する場合には文字列の配列を使って設定を行います。 [2]
- lib_bin_path
バインド対象となる FIE バイナリのパスを文字列により設定します。 複数のバイナリを設定する場合には文字列の配列を使って設定を行います。 [2]
パスの設定には絶対パスと相対パスのどちらも使用することができます。 相対パスにて設定を行う場合には PyFIE モジュールが配置されているディレクトリをカレントディレクトリとします。 またパスの設定文字列には "$name" または "${name}" (Windows 環境ではさらに "%name%") のような形式で環境変数を含めることが可能です。
設定のカスタマイズ¶
PyFIE の設定をカスタマイズしたい場合は、 前述の設定ファイル pyfie_config.json に対して変更を加えることになります。 (PyFIE モジュール内部に置かれたこのファイルのことを、以降の説明では "デフォルト設定ファイル" と呼ぶことにします)
それ以外の方法として、 ユーザーディレクトリに独自に作成した設定ファイル(以降の説明では "ユーザー設定ファイル" と呼ぶことにします) を使用してカスタマイズを行うことも可能です。
注釈
デフォルト設定ファイルを元の状態に戻せなくなってしまうといった状況を防ぐためにも、 PyFIE のカスタマイズにはユーザー設定ファイルを使用することを推奨します。
"ユーザーディレクトリ" に pyfie_config.json という名前のファイルを作成すると、
それがユーザー設定ファイルとなります。
ここで "ユーザーディレクトリ" は Python 標準ライブラリ os.path.expanduser()
により取得される
ホームディレクトリとなります。
注釈
使用される実行環境においてユーザーディレクトリは、 下記のようなコードにより確認することができます。
import os
print( os.path.expanduser("~") )
大抵の場合 Windows 環境では、 "C:/Users/<user name>" のようなユーザーディレクトリとなります。
大抵の場合 Linux 環境では、 "/home/<user name>" のようなユーザーディレクトリとなります。
ユーザー設定ファイルには、 カスタマイズを行いたい設定項目のみを記述します。 例えばデバッグモードを有効にする場合のユーザー設定ファイルは下記のようになります。
{
"DEBUG": true
}
注釈
PyFIE の実行時には下記の流れによって設定内容の決定が行われます。
PyFIE モジュール内部に置かれた pyfie_config.json というファイル(デフォルト設定ファイル)を読み込み、 記述されている内容で設定を行う。
さらにユーザーディレクトリに pyfie_config.json というファイル(ユーザー設定ファイル)があればそれを読み込み、 記述されている内容で設定を上書きする。
ライブラリ定義ファイル¶
C 言語ライブラリの関数や型の情報等が記された JSON 形式のファイルです。 PyFIE はモジュール内部に FIE ライブラリ用のライブラリ定義ファイル pyfie_decl.json を持ちます。 PyFIE の初期化時にこの情報を使用して、 FIE ライブラリへのバインドを行います。
pyfie_decl.json をユーザーが直接編集することはありません。 一方で、次の2つのいずれかの方法により、 pyfie_decl.json とは別のライブラリ定義ファイルを追加することにより、 ユーザーが独自のライブラリを追加することができます。
設定ファイル の lib_decl_file と lib_bin_path の値を変更する。
add_library()
関数を使用する。
ライブラリ定義ファイルの内容は例えば次のようになります。
{
"DECL": {
"DEFINE": [
{
"name": "MY_VALUE",
"val": 42
}
],
"ENUM": [
{
"name": "MY_ENUM",
"contents": [
{
"name": "MYENUM_1",
"val": 1
},
{
"name": "MYENUM_MINUS1",
"val": -1
}
]
}
],
"FUNCTIONS": [
{
"name": "a_square_function",
"args": [
{
"name": "x",
"type": "C_int"
}
],
"restype": "C_int"
}
],
"STRUCT": [
{
"name": "MY_STRUCT",
"members": [
{
"name": "field",
"type": "C_int"
}
]
}
],
"UNION": [
{
"name": "MY_UNION",
"members": [
{
"name": "value_int",
"type": "C_int"
},
{
"name": "value_dbl",
"type": "C_double"
}
]
}
]
}
}
注釈
このライブラリ定義ファイルは ユーザー定義の C 言語ライブラリの使用 のサンプルで使用されているものです。
ルート直下の "DECL"
プロパティ以下にライブラリ定義が記載されます。
以下のプロパティによりライブラリ定義を行います。
"DEFINE"
: #defineディレクティブにて設定される定数群を定義します。 各定義について、定数名を"name"
, 値を"val"
で設定します。"ENUM"
: 列挙型群を定義します。 各定義について、列挙型名を"name"
で指定します。 その列挙型に属する定数群を"contents"
以下に定義します。 定数名は"name"
, 値を"val"
で設定します。"FUNCTIONS"
: 関数群を定義します。 各定義について"name"
に関数名を、"args"
に引数を、"restype"
に戻り値の型を指定します。 各引数には"name"
に引数名を、"val"
に型を指定します。 型の指定法は 型名の記述方法 を参照してください。"STRUCT"
: 構造体群を定義します。 各定義について、"name"
に構造体名を、構造体メンバーを"members"
に指定します。"UNION"
: 共用体群を定義します。共用体名とメンバーの設定方法は構造体と同様です。
型名の記述方法¶
ライブラリ定義ファイルにおける型名には以下が使用できます。
C 言語の基本型の一部
FIE(C 言語) で使用される算術型(
UCHAR
やINT
など)構造体/共用体
ポインタ
C 言語の基本型は特殊形式で記述する必要があります。 使用可能な C 言語の基本型と記述形式は下表の通りです。
C 言語基本型 |
ライブラリ定義ファイルでの記述 |
---|---|
char |
C_char |
unsigned char |
C_unsigned_char |
short |
C_short |
unsigned short |
C_unsigned_short |
int |
C_int |
unsigned int |
C_unsigned_int |
long |
C_long [3] |
unsigned long |
C_unsigned_long [3] |
long long |
C_long_long |
unsigned long long |
C_unsigned_long_long |
float |
C_float |
double |
C_double |
long double |
C_long_double |
long 型と unsigned long 型はアーキテクチャによってサイズが変更するため使用しないことをおすすめします。
FIE(C 言語) で使用される算術型、および構造体/共用体はそのままの名称を使用できます。
ポインタ型は元の型名の後に .*
を付与することで記述します。
例えば、 C 言語における int 型のポインタ( int*
)は C_int.*
と記述します。
int 型のダブルポインタ( int**
)は C_int.*.*
と記述します。