2 #include <drv/beeper.h>
4 #include <gui/basics.h>
6 #include <lib/string.h>
7 #include <drv/input/keyboard.h>
13 char keys_black[] =
"we tyu o";
14 char keys_white[] =
"asdfghjk";
21 char keystates[2][8] = {
22 {0, 0, 0, 0, 0, 0, 0, 0},
23 {0, 0, 0, 0, 0, 0, 0, 0}
44 void draw_key(
size_t x,
size_t y,
char* letter,
bool pressed) {
45 draw_filled_rectangle(x, y, KEY_SIZE, KEY_SIZE, pressed?0xaaaaaa:0x303030);
46 draw_vga_str(letter, 1, x+16, y+16, pressed?0x303030:0xaaaaaa);
49 void play_key(
char key) {
50 for(
char i = 0; i < 14; i++) {
51 if(keyboard_notes[i].key == key) {
59 size_t dispw = getScreenWidth();
60 size_t disph = getScreenHeight();
62 size_t starth = (disph - (KEY_SIZE*2)+PADDING)/2;
63 size_t startbw = (dispw - (KEY_SIZE+PADDING)*(
strlen(keys_black)+1))/2;
66 for(
size_t bi = 0; bi <
strlen(keys_black); bi++) {
67 if(keys_black[bi] ==
' ')
continue;
68 draw_key(PADDING + startbw + (bi*(KEY_SIZE+PADDING)),
70 (
char[]){keys_black[bi], 0},
75 for(
size_t wi = 0; wi <
strlen(keys_white); wi++) {
76 draw_key(startbw + (wi*(KEY_SIZE+PADDING)),
77 starth+(KEY_SIZE + PADDING),
78 (
char[]){keys_white[wi], 0},
84 void handle_key_piano(
int key) {
87 uint8_t pressed = !getPressReleaseKeyboard();
92 memset(&keystates, 0, 8*2);
97 for(
size_t i = 0; i <
strlen(keys_black); i++) {
98 if(printable_key[0] == keys_black[i]) {
102 play_key(printable_key[0]);
108 for(
size_t i = 0; i <
strlen(keys_white); i++) {
109 if(printable_key[0] == keys_white[i]) {
113 play_key(printable_key[0]);
123 set_cursor_enabled(
false);
124 keyboardctl(KEYBOARD_ECHO,
false);
127 int key = getCharRaw();
128 if(key == 129 || key == 1)
break;
130 handle_key_piano(key);
133 draw_vga_str(
"NDRAEY >_ [Press Esc to exit]", 36, 8, getScreenHeight() - 16, 0xaaaaaa);
138 set_cursor_enabled(
true);
139 keyboardctl(KEYBOARD_ECHO,
true);
void beeperSilent()
[Beeper] Выключить звук
void beeperPlay(uint32_t frequency)
Вопроизвести звук (квадратной формы волны)
Основные определения ядра
char * getCharKeyboard(int key, bool mode)
Выводит символ, в зависимости от кода полученного с клавиатуры
size_t strlen(const char *str)
Возращает длину строки
void * memset(void *ptr, char value, size_t num)
Заполнение массива указанными символами