MLU M1 매뉴얼을 보면 실제 F-16의 FLCS에는 버튼을 누르고 있는 시간에 따라서 기능이 변환되는 버튼이 있습니다. 이를테면 TMS-R 버튼같은 경우 1초 미만으로 누르고 있을 때는 버깅된 타겟 순환 기능을 하지만, 1초 이상 누르고 있으면 이전 레이더 모드로 되돌아가게 됩니다. 그렇지만, 수퍼팩에서 제공하는 HOTAS용 키맵이나 쿠거의 기본 키맵 지정 기능으로는 그러한 기능을 재현할 수가 없죠.



다른 분들이 사용하시는 쿠거 프로파일중에서 버튼 홀딩 시간에 따라서 기능이 달라지는 프로파일이 있다는 말씀을 들은것 같아서, 몇개의 샘플을 찾아보았습니다. 두 개정도를 찾아보았는데, 하나는 버튼을 일정시간 이상 누르고 있어야 이젝션이 되는 기능이었고, 다른 하나는 pinky 스위치를 짧게 누르면 지정된 키맵이 활성화되고 길게 누르고 있으면 아무 키값이 출력되지 않아서 pinky 스위치를 쿠거의 쉬프트 버튼 기능으로 쓸 수 있게끔 하는 것이었습니다. 두가지 기능의 묘사방법은 서로 달랐는데, 이젝션 기능을 재현한 프로파일은 팰콘 고유의 키맵 특성을 반영해서 만들어져있더군요.



제가 원한 기능은 일정한 홀딩 시간을 기준으로 그보다 짧게 홀딩할 때와 길게 홀딩할 때 다른 키값이 출력되게끔 하는 것이라서, 길게 누르고 있을 때에는 키맵이 지정되지 않는 아무 키 기능이 없는 pinky 버튼으로 쓰이는 프로파일은 제가 원했던 기능과 조금 차이가 있었습니다. 대신, 그 프로파일을 조금 수정하여 홀딩 시간이 길거나 짧을 때 모두 각각 지정된 키값이 출력되게끔 할 수 있었습니다.



이쯤에서 예문으로 설명하는게 좋을것 같네요.



---------------------------------------------

BTN S3 KD(X1) DLY(150) KU(X1)

DEF X2 X1 AND (NOT S3)

DEF X3 DELAY(250) AND S3

BTN X2 ALT v

BTN X3 l

---------------------------------------------



위 예문은 S3키를 0.2초 미만으로 누르고 있을 때는 ALT V(MFD FOV 변경)의 키맵이 출력되고, 그 이상 길게 누르고 있을 때는 L (시야 확대/축소) 키맵이 출력되는 내용입니다.

이 예문에서는 logical flag이라는 가상 버튼 기능이 사용되었고, 조건문 형식으로 명령구문이 짜여져 있습니다. 라인별로 설명하면 이렇습니다.



"BTN S3 KD(X1) DLY(150) KU(X1)"

이것은 S3 버튼(pinky 스위치)를 누르면 X1이라는 가상의 버튼이 0.15초(150 millisecond)동안 On 상태에 있다가 그 후에 Off 상태가 된다는 뜻입니다.



"DEF X2 X1 AND (NOT S3)"

이것은 조건문 형식으로 X2라는 가상의 버튼의 On/Off를 정하는 내용으로, X1이 On 상태이면서 실제의 버튼인 S3 버튼이 눌려있지 않은 상태라면 가상의 X2 버튼이 On 상태가 된다는 뜻입니다. 다시 말하면, S3 버튼을 누르고 난 후 0.15초 이내에 S3 버튼을 떼면 X2가 On 상태가 됩니다. 이 라인은 "S3 버튼을 0.15초 이내로 짧게 누른 상태"이라는 조건을 만들어내는 명령라인입니다.



"DEF X3 DELAY(250) AND S3"

이 조건문은 X3이라는 가상의 버튼의 On/Off를 정하는 것으로, S3 버튼을 누른 다음 0.25초를 세고 나서 그때 S3 버튼을 누르고 있는 상태이면 X3이 On이 된다는 것입니다. 즉, 이 라인은 "S3 버튼을 0.25초 이상 누르고 있는 상태"라는 조건을 만들어냅니다.



"BTN X2 ALT v"

이 라인은 X2가 On 상태일 때 어떤 값이 출력되는지를 정합니다. 보통의 버튼 키맵 지정과 같은 형식이죠. S3 버튼을 0.15초 이하로 누르고 있는 동안에는 X2가 On 상태가 되므로, 이 때 가상의 X2 버튼에 지정된 Alt V라는 값이 출력됩니다.



"BTN X3 l"

이 라인은 가상의 X3 버튼에 키값을 지정합니다. 여기서는 L이 지정되었으므로, S3 버튼을 0.25초 이상 누르고 있으면 L이라는 값이 출력됩니다.



원래 의도는 0.2초를 기준으로 구분하려 했는데, 프로그래밍에는 0.15초 미만과 0.25초 이상으로 구분되어 있습니다. 0.2초를 기준으로 두가지 키맵을 지정했더니, 버튼을 누르는 것에서부터 키값이 출력될 때까지 딜레이 시간이 생겨서 그 딜레이 시간동안 양쪽 값이 중복되어 출력되더군요. 그래서 버튼을 누르는데서 값이 출력될 때까지의 딜레이 시간을 감안하여 두 값 사이에 간격을 넣어서 두 값이 한꺼번에 출력되지 않도록 했습니다.



이 예문을 응용하면 홀딩 시간에 따른 키값 변화 기능을 여러가지로 만들어낼 수 있을 것 같아서 설명드려보았습니다. (생각하기에 따라서는 다른 프로그래밍 방법으로도 같은 기능을 재현할 수 있을 것이라 생각됩니다.) 또한, Logical flag 기능을 이용하면 기본 키맵 지정 형식으로 재현할 수 없는 여러가지 복잡한 기능들도 만들 수 있습니다. Logical programming에 대한 자세한 설명은 쿠거 매뉴얼 159P부터 나와있습니다.