同時打鍵ステートマシンの説明 | 目次に戻る |
名称 | 説明および用途 |
moji | 文字キーを記憶するための変数 |
repeat_moji | リピートする文字キーを記憶するための変数 |
oyayubi | 親指キー記憶するための変数 |
repeat_oyayubi | リピートする親指キー記憶するための変数 |
time1 | イベント発生時刻を記憶するための変数 |
time2 | イベント発生時刻を記憶するための変数 |
event_timer | 時刻の経過に伴ってリニアにデクリメントされるタイマ変数。値が0になった時点で、ステートマシンに対してタイマイベントを発生する(ワンショット)。なお、ステートマシンに対して簡易ロジックを指定している場合、event_timerへの値のセットは行われません。 |
current_time | 現在時刻をもつ変数 |
ステートマシンの制御用に外部から与える定数
名称 | 説明および用途 |
e_charTime | 文字->親指同時打鍵検出許容期間(簡易ロジックでは無効) |
e_oyaTime | 親指->文字同時打鍵検出許容期間(簡易ロジックでは無効) |
e_nicolaTime | 親指単独打鍵みなし期間 |
簡易ロジックとは、ステートマシンを駆動するためのイベントタイマを使わない動作モードです。イベントタイマを使わないことで、タイマ資源が不安定な環境での実装を容易にします。イベントタイマを用いる代わりに、キーボードハードウェアがもつタイパマチック遅延時間によって、同時打鍵を許容する期間が決まります。PC互換機やHHPCの場合は最小値が約250msecであり、キーボード入力時にほとんど違和感を感じることはありません。
初期状態
イベントコード | イベントの説明 | 処理 |
E11 | 文字キーの押下を検出。 | 検出した文字キーをmojiにセット。time1に時刻を記憶。event_timerにe_charTimeをセット。 |
E12 | 親指キーの押下を検出。 | 検出した親指キーをoyayubiにセット。time2に時刻を記憶。event_timerにe_oyaTimeをセット。 |
イベントコード | イベントの説明 | 処理 |
E21 | 文字キーのリリースを検出。または、対象外のキー入力を検出 | mojiを出力。初期状態に遷移 |
E22 | キーボードリピートを検出 | mojiを出力。mojiをrepeat_mojiにセット。リピート状態に遷移 |
E23 | タイマイベントを検出 | mojiを出力。mojiをrepeatmojiにセット。リピート状態に遷移。 簡易ロジックでは、このイベントは発生しません。 |
E24 | 親指キーの押下を検出 | 検出した親指キーをoyayubiにセット。time2に時刻を記憶。event_timerにe-oyaTimeをセット。文字キー親指キー押下中状態に遷移 |
E25 | 文字キーの押下を検出 | mojiを出力。検出した文字キーをmojiにセット。time1に時刻を記憶。event_timerにe-charTimeをセット。文字キー押下中状態に遷移 |
イベントコード | イベントの説明 | 処理 |
E31 | 親指キーのリピートを検出。 | oyayubiをrepeat_oyayubiにセット。リピート状態に遷移 |
E32 | タイマイベントを検出 | oyayubiを出力。oyayubiをrepeat_oyayubiにセット。リピート状態に遷移。 簡易ロジックでは、このイベントは発生しません。 |
E33 | 文字キーの押下を検出 | 検出した文字キーをmojiにセット。moji+oyayubiを出力。oyayubiをrepeat_oyayubiにセット。mojiをrepeat_mojiにセット。リピート状態に遷移 |
E34 | 親指キーの押下を検出 | oyayubiを出力。検出した親指キーをoyayubiにセット。time2に時刻を記憶。event_timerにe-oyaTimeをセット。文字キー親指キー押下中状態に遷移 |
E35 | 親指キーのリリースを検出。または、対象外のキーの押下を検出 | oyayubiを出力。初期状態に遷移 |
イベントコード | イベントの説明 | 処理 |
E41 | キーのリピートを検出(親指キーのみしかあり得ない) | moji+oyayubiを出力。mojiをrepeat_mojiにセット。oyayubiをrepeat_oyayubiにセット。リピート状態に遷移 |
E42 | タイマイベントを検出 | moji+oyayubiを出力。oyayubiをrepeat_oyayubiにセット。mojiをrepeat_mojiにセット。リピート状態に遷移。 簡易ロジックでは、このイベントは発生しません。 |
E43 | 文字キーの押下を検出し、current_time - time2 < time2 - time1を満たす場合。 | mojiを出力。oyayubi+検出した文字を出力。oyayubiをrepeat_oyayubiにセット。検出した文字キーをrepeat_mojiにセット。リピート状態に遷移 |
E44 | 親指キーの押下を検出 | moji+oyayubiを出力。検出した親指キーをoyayubiにセット。time2に時刻を記憶。event_timerにe-oyaTimeをセット。親指キー押下中状態に遷移 |
E45 | 親指キーのリリースを検出。または、対象外のキーの押下を検出 | moji+oyayubiを出力。初期状態に遷移 |
E46 | 文字キーのリリースを検出し、(current_time - time2 <= e_nicolaTime) && (time2 - time1 > current_time - time2 ) を満たす場合。 | mojiを出力。親指キー押下中状態に遷移。oyayubiが維持されていることに注意 |
E47 | 文字キーのリリースを検出。E46の条件を満たさない場合 | moji+oyayubiを出力。初期状態に遷移 |
E48 | 文字キーの押下を検出し、current_time - time2 >= time2 - time1を満たす場合。 | moji+oyayubiを出力。検出した文字キーをmojiにセット。event_timerにe-charTimeをセット。文字キー押下中状態に遷移 |
イベントコード | イベントの説明 | 処理 |
E51 | リピートを検出 | repeat_oyayubi+repeat_mojiを出力。リピート中状態に遷移。repeat_oyayubiまたはrepeat_mojiのいずれかがセットされていない場合は、セットされている側の単独出力となる |
E52 | 親指キーのリリースを検出。または対象外のキー入力を検出 | 初期状態に遷移 |
E53 | 文字キーのリリースを検出 | 初期状態に遷移 |
E54 | 親指キーの押下を検出(リピート中以外のキーしか発生しない) | 検出した親指キーをoyayubiにセット。time2に時刻を記憶。event_timerにe-oyaTimeをセット。親指キー押下中状態に遷移 |
E55 | 文字キーの押下を検出(リピート中以外のキーしか発生しない) | 検出した文字キーをmojiにセット。time1に時刻を記憶。event_timerにe-charTimeをセット。文字キー押下中状態に遷移 |