ErgoDox로 모스 입력해주세요.
8407 단어 ergodox
하다
ErgoDox에 모스 코드 입력 버튼 설치pic.twitter.com/8nbV07FLi4-미야(@miyaoka)2016년 12월 27일.
a에서 z까지 숫자와 공간을 표시할 수 있습니다.
CapsLock을 더하면 대문자, 일본어 IME로 설정하면 로마자를 입력할 수 있습니다.
할 수 있다고는 하지만 실용성이 없다는 것도 안다.
무엇 때문에
ErgoDox는 펌웨어를 가지고 놀았기 때문에 펌웨어 소재를 좀 더 쓰고 싶어요.
어떠하다
Merge branch 'morse' · miyaoka/qmk_firmware@9f2dcde
keymap.c
#define MORSE_TERM_SHORT 120
#define MORSE_TERM_CHARA MORSE_TERM_SHORT * 3
#define MORSE_TERM_WORD MORSE_TERM_SHORT * 7
단점 길이 120ms, 문자 간의 3배, 단어 간의 7배.이 간격이 조금 더 짧으면 더 멋지게 쿵쿵 할 수 있을 것 같아요.
keymap.c
case MORSE:
if (record->event.pressed) {
last_morse_timer = 0;
return false;
break;
}
if (!hold_timers[record->event.key.row][record->event.key.col]) {
return false;
break;
}
morse_el = timer_elapsed (hold_timers[record->event.key.row][record->event.key.col]) < MORSE_TERM_SHORT
? morse_short
: morse_long;
strcat(morse_buffer, morse_el);
last_morse_timer = timer_read();
dprintf("%s", morse_el);
return false;
break;
여기는 모드 입력에 사용할 벨을 처리하고 있습니다.hold_타임즈라는 곳에는 전체 키를 저장한 타이머가 부호적으로 저장되어 있으며, 그곳에서 발표될 때 유지 시간으로 짧은지 길은지 판단한 후 입력 버퍼에 추가된다.
마지막으로 발표된 시기는 여기에 기록한다.
keymap.c
void process_morse(void) {
if (last_morse_timer == 0){
return;
}
uint16_t t = timer_elapsed (last_morse_timer);
// type space
if (MORSE_TERM_WORD < t){
type_code(KC_SPC);
dprint("\n");
last_morse_timer = 0;
return;
}
if (t < MORSE_TERM_CHARA || morse_buffer[0] == '\0'){
return;
}
// type chara
int i;
for(i = 0; i < 36; i++) {
if (strcmp(morse_codes[i], morse_buffer) == 0) {
dprint(" ");
type_code(KC_A + i);
break;
}
}
dprint("\n");
morse_buffer[0] = '\0';
}
그리고 프레임마다 호출되는 처리가 바로 여기입니다.(말은 그렇게 하지만 제대로 조사하지 않아서 키보드가 어떤 업데이트 주파수로 돌아가는지 모르겠다.)마지막 발표 시간부터 경과된 시간을 보면 단어 사이의 길이가 지나면 출력 빈칸이 끝난다.
문자 사이의 길이가 지나면 버퍼링 코드에서 문자를 출력합니다.
어떠하다
짧은 점에 비해 긴 점의 길이는 3배인데, 마치 모스 신호의 규격과 같다
그리고 코드의 판정은 문자 배열로 하는 것이 비교적 느리다.양갈래라서 바이너리로 하면 될 것 같은데 실제로는 양갈래라서 2보 못 들어갈 것 같은데 어떻게 하면 좋을까.
Reference
이 문제에 관하여(ErgoDox로 모스 입력해주세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miyaoka/items/51a2c1c15533dc7f0a39텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)