第4章 リファレンス
5. CanSetFifoTrigger
●Visual C# .NET(x86 専用)
[DllImport(“IFCan.dll”)]
public static extern uint CanSetFifoTrigger(
uint DeviceHandle, uint FifoKind, uint TriggerValue, uint FifoTimeout );
●Visual Basic .NET(x86、x64 共用)
Declare Function CanSetFifoTrigger Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _
ByVal FifoKind As Integer, _ ByVal TriggerValue As Integer, _ ByVal FifoTimeout As Integer _ ) As Integer
●Visual Basic .NET(x86 専用)
Declare Function CanSetFifoTrigger Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _
ByVal FifoKind As Integer, _ ByVal TriggerValue As Integer, _ ByVal FifoTimeout As Integer _ ) As Integer
【パラメータ】
hDeviceHandle
CanOpenPort 関数で取得したデバイスハンドルを指定してください。
dwFifoKind
設定する FIFO を選択します。下記の中から選択してください。
識別子 値 内容
CAN_RECEIVE_FIFO 0 受信 FIFO(※1) CAN_ERROR_FIFO 1 エラーFIFO
CAN_SEND_FIFO 2 送信 FIFO(※1, 2)
※1 高機能版、CAN FD 版 CAN 製品のみ有効です。
※2 FIFO 送信モードに設定していない場合はエラーとなります。
dwTriggerValue
トリガ値を下記の値で指定します。デフォルトは 0 です。
識別子 値 内容
CAN_TRIGGER_1 0 受信/エラーFIFO 内のデータ数が 0→1 で割り込み発生。
送信 FIFO の場合、FIFO 内のデータ数が 1→0 で割り込み発生。
CAN_TRIGGER_16 1 受信/エラーFIFO 内のデータ数が 15→16 で割り込み発生。
送信 FIFO の場合、FIFO 内のデータ数が 16→15 で割り込み発生。
CAN_TRIGGER_32 2 受信/エラーFIFO 内のデータ数が 31→32 で割り込み発生。
送信 FIFO の場合、FIFO 内のデータ数が 32→31 で割り込み発生。
CAN_TRIGGER_48 3 受信/エラーFIFO 内のデータ数が 47→48 で割り込み発生。
送信 FIFO の場合、FIFO 内のデータ数が 48→47 で割り込み発生。
dwFifoTimeout
受信 FIFO、エラーFIFO 内のタイムアウト時間を設定します。単位は 100μs です。
新しく FIFO 内にデータが挿入されてから、dwFifoTimeout 時間の間にトリガが発生しない 場合、割り込みが発生するようになります。
例えば、受信 FIFO のトリガ設定を行うために、dwFifoKind に CAN_RECEIVE_FIFO を設定 し、dwTriggerValue に CAN_TRIGGER_48、dwFifoTimeout に 5 を設定した場合、受信 FIFO 内のデータ数が 48 になれば、トリガ条件が満たされたことになり、(ドライバ内で)割り 込みが発生します。また、受信 FIFO 内のデータ数が 48 より少ない場合、受信データが受 信 FIFO に挿入されてから、次のデータが受信 FIFO に挿入される前に、500μs(5×100μ
s)が経過すると、タイムアウトとみなされ、(ドライバ内で)割り込みが発生します。
デフォルトは、エラーFIFO、受信 FIFO いずれも 4 です。
設定可能範囲は 1~255 です。
送信 FIFO 設定時は、設定値は無効となります。
【戻り値】
正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。
IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。
【備考】
本関数は、スタンダード版 CAN 製品では使用することはできません。
【使用例】
●C 言語 INT nRet;
HANDLE hDeviceHandle;
DWORD dwTrigger;
DWORD dwTimeout;
hDeviceHandle = CanOpenPort(“IFCAN1”);
: :
// 受信 FIFO トリガを設定します dwTrigger = CAN_TRIGGER_16;
dwTimeout = 8;
nRet = CanSetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwTrigger, dwTimeout);
●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim nRet As Long
Dim dwTrigger As Long Dim dwTimeout As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) :
:
‘ 受信 FIFO トリガを設定します dwTrigger = CAN_TRIGGER_16 dwTimeout = 8
nRet = CanSetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwTrigger, dwTimeout)
●Delphi var
lpszName: String;
hDeviceHandle: THandle;
nRet: Integer;
dwTrigger: DWORD;
dwTimeout: DWORD;
lpszName := ‘IFCAN1’;
hDeviceHandle := CanOpenPort(lpszName);
: :
// 受信 FIFO トリガを設定します dwTrigger := CAN_TRIGGER_16;
dwTimeout := 8;
nRet := CanSetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwTrigger, dwTimeout);
●Visual C# .NET uint Ret;
IntPtr DeviceHandle;
uint Trigger;
uint Timeout;
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”);
:
// 受信 FIFO トリガを設定します Trigger = IFCCAN_ANY.CAN_TRIGGER_16;
Timeout = 8;
Ret = IFCCAN_ANY.CanSetFifoTrigger(DeviceHandle, IFCCAN_ANY.CAN_RECEIVE_FIFO, Trigger, Timeout);
●Visual Basic .NET
Dim DeviceHandle As Integer Dim Ret As Integer
Dim Trigger As Integer Dim Timeout As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
‘ 受信 FIFO トリガを設定します
Trigger = IFCCAN_ANY.CAN_TRIGGER_16 Timeout = 8
Ret = IFCCAN_ANY.CanSetFifoTrigger(DeviceHandle, IFCCAN_ANY.CAN_RECEIVE_FIFO, _ Trigger, Timeout)
●Visual C++ CLR プロジェクト unsigned int Ret;
IntPtr DeviceHandle;
unsigned int Trigger;
unsigned int Timeout;
DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”);
:
// 受信 FIFO トリガを設定します
Trigger = IFCCAN_ANY::CAN_TRIGGER_16;
Timeout = 8;
Ret = IFCCAN_ANY::CanSetFifoTrigger(DeviceHandle, IFCCAN_ANY::CAN_RECEIVE_FIFO, Trigger, Timeout);
デバイス名「IFCAN1」の CAN インタフェースの受信 FIFO トリガを設定します。