#include "btnMgr.h"
#define u32PortInputMask ((1UL << 11) | (1UL << 12) | (1UL << 13))
static tsBTM_Config sBTM_Config; //!< ボタン入力(連照により状態確定する)管理構造体
static PR_BTM_HANDLER pr_BTM_handler; //!< ボタン入力用のイベントハンドラ (TickTimer 起点で呼び出す)
...
// 初期化
memset(&sBTM_Config, 0, sizeof(tsBTM_Config));
sBTM_Config.bmPortMask = u32PortInputMask;
sBTM_Config.u16Tick_ms = 8; // 判定周期
sBTM_Config.u8MaxHistory = 5; // 5回同じ値で確定
sBTM_Config.u8DeviceTimer = 0xFF; // TickTimer を流用する。
pr_BTM_handler = prBTM_InitExternal(&sBTM_Config);
// BTM 処理開始
vBTM_Enable();
PUBLIC uint8 cbToCoNet_u8HwInt(uint32 u32DeviceId, uint32 u32ItemBitmap) {
uint8 u8handled = FALSE;
switch (u32DeviceId) {
case E_AHI_DEVICE_TICK_TIMER:
// ボタンハンドラの駆動
if (pr_BTM_handler) {
// ハンドラを稼働させる
(*pr_BTM_handler)(4); // TickTimer の周期[ms]を入れる。
}
break;
}
bBTM_GetState()
呼び出し後、内部状態が読み出し済みに変化します。連続して呼び出しても2回目は FALSE
(変化なし)と返します。
void cbToCoNet_vHwEvent(uint32 u32DeviceId, uint32 u32ItemBitmap) {
case E_AHI_DEVICE_TICK_TIMER: //比較的頻繁な処理
// ボタンの判定を行う。
_C {
uint32 bmPorts, bmChanged, i;
if (bBTM_GetState(&bmPorts, &bmChanged)) {
// bmPorts がポートの値
// bmChanged が変化があったポート
if (bmChanged & (1UL << 11)) {
if (bmPorts & (1UL << 11)) {
// DIO11 に変化があり Lo と判定された場合
// 例えば、ここで無線送信要求を行う。
}
}
}
}
break;