107 lines
2.0 KiB
C
107 lines
2.0 KiB
C
#include <avr/interrupt.h>
|
|
#include <avr/io.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include "timer.h"
|
|
#include "keyboard.h"
|
|
#include "uart.h"
|
|
|
|
void setup_registers() {
|
|
MCUCR &= ~(1 << 4); // PUD
|
|
MCUCR &= ~(1 << 5);
|
|
MCUCR &= ~(1 << 6);
|
|
MCUCR &= ~(1 << 7);
|
|
DDRD &= 0x0F;
|
|
PORTD |= 0xF0;
|
|
|
|
DDRC = 0b111111;
|
|
PORTC = 0b001111;
|
|
}
|
|
|
|
void setup() {
|
|
USART_Init(MYUBRR);
|
|
setup_timer();
|
|
setup_registers();
|
|
}
|
|
|
|
int up_amoumt = 0;
|
|
int down_amount = 0;
|
|
int diff = 0;
|
|
int diff_prev = 0;
|
|
|
|
int main(void) {
|
|
setup();
|
|
puts("Hello\r\n");
|
|
struct key keys[KEYS_AMOUNT];
|
|
fill_buttons_names(keys);
|
|
while(1) {
|
|
get_physical_keys(keys);
|
|
get_logical_keys(keys);
|
|
|
|
for (int i = 0; i < KEYS_AMOUNT; i++) {
|
|
bool up, down;
|
|
get_event(&keys[i], &up, &down);
|
|
if (down)
|
|
{
|
|
printf("%d", keys[i].button);
|
|
}
|
|
}
|
|
|
|
//down_amount = 0;
|
|
//up_amoumt = 0;
|
|
//
|
|
//for (int i = 0; i < KEYS_AMOUNT; i++) {
|
|
//if (keys[i].logical == false) {
|
|
//down_amount++;
|
|
//} else {
|
|
//up_amoumt++;
|
|
//}
|
|
////bool up;
|
|
////bool down;
|
|
////get_event(&keys[i], &up, &down);
|
|
////if (down) {
|
|
////down_amount++;
|
|
////}
|
|
////else {
|
|
////up_amoumt++;
|
|
////}
|
|
//}
|
|
//diff = up_amoumt;
|
|
////if (diff != diff_prev) {
|
|
//for (int i = 0; i < KEYS_AMOUNT; i++) {
|
|
//bool up, down;
|
|
//get_event(&keys[i], &up, &down);
|
|
////if (keys[i].logical == true) {
|
|
////printf("%d", keys[i].button);
|
|
////}
|
|
//if (down) {
|
|
////printf("%s\r\n", i);
|
|
//printf("%d", keys[i].button);
|
|
//}
|
|
//}
|
|
////}
|
|
//diff_prev = diff;
|
|
}
|
|
}
|
|
|
|
int puts(const char * __str){
|
|
int len = strlen(__str);
|
|
for(size_t i = 0; i < len; i++){
|
|
while (!(UCSR0A & (1<<UDREn)));
|
|
UDR0 = __str[i];
|
|
}
|
|
}
|
|
|
|
int printf( const char * format, ... )
|
|
{
|
|
char buffer[16];
|
|
va_list args;
|
|
va_start (args, format);
|
|
size_t s = vsprintf (buffer,format, args);
|
|
for(size_t i = 0; i < s; i++){
|
|
while (!(UCSR0A & (1<<UDREn)));
|
|
UDR0 = buffer[i];
|
|
}
|
|
va_end (args);
|
|
return s;
|
|
} |