int test_date() { int ipc_status; message msg; unsigned int i=0; unsigned rtc_hook_id; rtc_subscribe_int(&rtc_hook_id); while(1) { if (driver_receive(ANY, &msg, &ipc_status) != 0) { if (is_ipc_notify(ipc_status)) { /* received notification */ switch (_ENDPOINT_P(msg.m_source)) { case HARDWARE: /* hardware interrupt notification */ if (msg.NOTIFY_ARG & (1 << RTC_HOOK)) { /* subscribed interrupt */ i++; } break; default: break; } } } } rtc_unsubscribe_int(rtc_hook_id); sys_outb(RTC_ADDR_REG, RTC_CTRL_REG_B); /// }
int subscribe_all() { if (timer_subscribe_int() == -1) return -1; if (kbd_subscribe_int() == -1) { timer_unsubscribe_int(); return -1; } if (mouse_subscribe_int() == -1) { kbd_unsubscribe_int(); timer_unsubscribe_int(); return -1; } if (rtc_subscribe_int() == -1) { kbd_unsubscribe_int(); timer_unsubscribe_int(); mouse_unsubscribe_int(); return -1; } if (sp1_subscribe_int() == -1) { kbd_unsubscribe_int(); timer_unsubscribe_int(); mouse_unsubscribe_int(); rtc_unsubscribe_int(); return -1; } if (sp2_subscribe_int() == -1) { kbd_unsubscribe_int(); timer_unsubscribe_int(); mouse_unsubscribe_int(); rtc_unsubscribe_int(); sp1_unsubscribe_int(); return -1; } return 0; }
int test_date(){ unsigned long regB, regC; int UFbit, finish; unsigned long dia, mes, ano, hora, minuto, segundo, dia_semana; int ipc_status ; message msg ; UFbit = 0; finish= 0; enable(); //Fazer set ao B sys_outb(RTC_ADDR_REG, 11); sys_inb(RTC_DATA_REG,®B); //regB = regB&0x10; regB |= 1 << 4; sys_outb(RTC_ADDR_REG,11); sys_outb(RTC_ADDR_REG,®B); // Ciclo interrupcoes rtc_subscribe_int(); while( finish == 0 ) { if ( driver_receive(ANY, &msg, &ipc_status) != 0 ) { //printf("driver_receive failed with: %d", r); printf("driver_receive failed"); continue; } if (is_ipc_notify(ipc_status)) { /* received notification */ switch (_ENDPOINT_P(msg.m_source)) { case HARDWARE: /* hardware interrupt notification */ printf("entrou1"); if (msg.NOTIFY_ARG & 0x4) { printf("entrou2"); sys_outb(RTC_ADDR_REG, 12); sys_inb(RTC_DATA_REG,®C); if ((regC&0x80) == 0x80) { finish = 1; // Registo C sys_outb(RTC_ADDR_REG, 12); sys_inb(RTC_DATA_REG,®C); printf("regC: %X", regC); printf("\n"); } } break; default: break; } } } rtc_unsubscribe_int(); sys_outb(RTC_ADDR_REG, 0); sys_inb(RTC_DATA_REG, &segundo); sys_outb(RTC_ADDR_REG, 2); sys_inb(RTC_DATA_REG, &minuto); sys_outb(RTC_ADDR_REG, 4); sys_inb(RTC_DATA_REG, &hora); sys_outb(RTC_ADDR_REG, 6); sys_inb(RTC_DATA_REG, &dia_semana); sys_outb(RTC_ADDR_REG, 7); sys_inb(RTC_DATA_REG, &dia); sys_outb(RTC_ADDR_REG, 8); sys_inb(RTC_DATA_REG, &mes); sys_outb(RTC_ADDR_REG, 9); sys_inb(RTC_DATA_REG, &ano); printf("Hora: %x : %x : %x \n", hora, minuto, segundo); if(dia_semana == 0x01) printf("Quinta Feira,"); if(dia_semana == 0x02) printf("Sexta Feira,"); if(dia_semana == 0x03) printf("Sabado,"); if(dia_semana == 0x04) printf("Domingo,"); if(dia_semana == 0x05) printf("Segunda Feira,"); if(dia_semana == 0x06) printf("Terca Feira,"); if(dia_semana == 0x07) printf("Quarta Feira,"); printf("Data: %x - %x - %x \n", dia, mes, ano); disable(); return 0; }
int racinix_dispatcher() { unsigned rtc_hook_id = RTC_HOOK_BIT; if (rtc_subscribe_int(&rtc_hook_id, false, true, false) < 0) { return 1; } unsigned long seed = racinix_generate_seed(); srand(seed); if (racinix_rtc_reprogram_alarm()) { return 1; } unsigned mouse_hook_id = MOUSE_HOOK_BIT; if (mouse_subscribe_int(&mouse_hook_id) == -1) { return 1; } if (mouse_set_stream_mode(MOUSE_NUM_TRIES)) { return 1; } if (mouse_enable_stream_mode(MOUSE_NUM_TRIES)) { return 1; } mouse_discard_interrupts(MOUSE_NUM_TRIES, MOUSE_HOOK_BIT); if (keyboard_subscribe_int() == -1) { return 1; } unsigned char timer_hook_bit; if ((timer_hook_bit = timer_subscribe_int()) < 0) { return 1; } unsigned serial_hook_id = SERIAL_HOOK_BIT; if (serial_subscribe_int(&serial_hook_id, RACINIX_SERIAL_PORT_NUMBER, RACINIX_SERIAL_TRIGGER_LEVEL) == -1) { return 1; } if (serial_set(RACINIX_SERIAL_PORT_NUMBER, RACINIX_SERIAL_NUM_BITS, RACINIX_SERIAL_NUM_STOP_BITS, RACINIX_SERIAL_PARITY, RACINIX_SERIAL_BAUD_RATE)) { return 1; } mouse_data_packet_t old_mouse_data_packet, new_mouse_data_packet; old_mouse_data_packet.left_button = old_mouse_data_packet.middle_button = old_mouse_data_packet.right_button = false; int r, ipc_status; unsigned fps_counter; message msg; key_t key; while(1) // Main loop { // Get a request message. if ((r = driver_receive(ANY, &msg, &ipc_status)) != 0) { // Driver receive fail continue; } if (is_ipc_notify(ipc_status)) { // received notification if (_ENDPOINT_P(msg.m_source) == HARDWARE) // hardware interrupt notification { // Keyboard if (msg.NOTIFY_ARG & BIT(KEYBOARD_HOOK_BIT)) { if ((key = racinix_keyboard_int_handler()) == -1) { return 1; } if (racinix_event_handler(RACINIX_EVENT_KEYSTROKE, kbd_keys[key].makecode, kbd_keys[key].pressed) == -1) { break; } } // Timer if (msg.NOTIFY_ARG & BIT(timer_hook_bit)) { if (racinix_serial_int_handler()) // Sometimes VMWare stops sending interrupts for no reason... { return 1; } if ((fps_counter = racinix_timer_int_handler()) != -1) { if (racinix_event_handler(RACINIX_EVENT_NEW_FRAME, fps_counter) == RACINIX_STATE_END) { break; } } } // Mouse if (msg.NOTIFY_ARG & BIT(MOUSE_HOOK_BIT)) { if (racinix_mouse_int_handler(&new_mouse_data_packet) == 0) // Packet ready { if (racinix_event_handler(RACINIX_EVENT_MOUSE_MOVEMENT, &new_mouse_data_packet) == RACINIX_STATE_END) { break; } if (new_mouse_data_packet.left_button != old_mouse_data_packet.left_button) { if (racinix_event_handler(RACINIX_EVENT_MOUSE_LEFT_BTN, new_mouse_data_packet.left_button) == RACINIX_STATE_END) { break; } } if (new_mouse_data_packet.right_button != old_mouse_data_packet.right_button) { if (racinix_event_handler(RACINIX_EVENT_MOUSE_RIGHT_BTN, new_mouse_data_packet.right_button) == RACINIX_STATE_END) { break; } } old_mouse_data_packet = new_mouse_data_packet; } } // Serial port if (msg.NOTIFY_ARG & BIT(SERIAL_HOOK_BIT)) { if (racinix_serial_int_handler()) { break; } } // RTC if (msg.NOTIFY_ARG & BIT(RTC_HOOK_BIT)) { if (racinix_rtc_int_handler()) { break; } } } } } timer_unsubscribe_int(); keyboard_unsubscribe_int(); mouse_disable_stream_mode(MOUSE_NUM_TRIES); mouse_unsubscribe_int(mouse_hook_id); rtc_unsubscribe_int(rtc_hook_id); return 0; }