Project

General

Profile

Statistics
| Revision:

root / lab2 / lab2.c @ 23

History | View | Annotate | Download (2.38 KB)

1 4 up20180655
#include <lcom/lcf.h>
2
#include <lcom/lab2.h>
3
4
#include <stdbool.h>
5
#include <stdint.h>
6
7 23 up20180655
extern int no_interrupts;
8 4 up20180655
9
int main(int argc, char *argv[]) {
10
  // sets the language of LCF messages (can be either EN-US or PT-PT)
11
  lcf_set_language("EN-US");
12
13
  // enables to log function invocations that are being "wrapped" by LCF
14
  // [comment this out if you don't want/need it]
15
  lcf_trace_calls("/home/lcom/labs/lab2/trace.txt");
16
17
  // enables to save the output of printf function calls on a file
18
  // [comment this out if you don't want/need it]
19
  lcf_log_output("/home/lcom/labs/lab2/output.txt");
20
21
  // handles control over to LCF
22
  // [LCF handles command line arguments and invokes the right function]
23
  if (lcf_start(argc, argv))
24
    return 1;
25
26
  // LCF clean up tasks
27
  // [must be the last statement before return]
28
  lcf_cleanup();
29
30
  return 0;
31
}
32
33 6 up20180642
int(timer_test_read_config)(uint8_t timer, enum timer_status_field field){
34 5 up20180642
    uint8_t state = 0;
35
    if(timer_get_conf(timer, &state)) return 1;
36 6 up20180642
    if(timer_display_conf(timer, state, field)) return 1;
37 5 up20180642
    return 0;
38 4 up20180655
}
39
40
int(timer_test_time_base)(uint8_t timer, uint32_t freq) {
41 15 up20180655
    if (timer_set_frequency(timer, freq)) return 1;
42
  return 0;
43 4 up20180655
}
44
45
int(timer_test_int)(uint8_t time) {
46 20 up20180655
    int ipc_status, r;
47
    message msg;
48 21 up20180655
    uint8_t irq_set = 1;
49 20 up20180655
    uint8_t hook = 0;
50 23 up20180655
    no_interrupts = 0;
51 20 up20180655
    int freq = 60; // better way to get the frequency of the timer????
52
53
    timer_subscribe_int(&hook);
54
55 23 up20180655
    while (time) {
56 20 up20180655
        /* Get a request message. */
57
        if ((r = driver_receive(ANY, &msg, &ipc_status)) != 0) {
58
            printf("driver_receive failed with %d", r);
59
            continue;
60
        }
61
        if (is_ipc_notify(ipc_status)) { /* received notification */
62
            switch (_ENDPOINT_P(msg.m_source)) {
63
                case HARDWARE: /* hardware interrupt notification */
64
                    if (msg.m_notify.interrupts & irq_set) { /* subscribed interrupt */
65
                        timer_int_handler();
66
                    }
67
                    break;
68
                default:
69
                    break; /* no other notifications expected: do nothing */
70
            }
71
        } else { /* received standart message, not a notification */
72
            /* no standart message expected: do nothing */
73
        }
74 23 up20180655
        if (!(no_interrupts % freq)) {
75 20 up20180655
            timer_print_elapsed_time();
76 23 up20180655
            time--;
77
        }
78 20 up20180655
    }
79
80 22 up20180642
    timer_unsubscribe_int();
81 20 up20180655
82
  return 0;
83 4 up20180655
}