Project

General

Profile

Statistics
| Revision:

root / lab5 / lab5.c @ 106

History | View | Annotate | Download (3.73 KB)

1 93 up20180655
#include <lcom/lcf.h>
2
3
#include <lcom/lab5.h>
4
5
#include <stdint.h>
6
#include <stdio.h>
7
8 94 up20180655
#include "graphics.h"
9
#include "graphics_macros.h"
10
11 93 up20180655
// Any header files included below this line should have been created by you
12
13
int main(int argc, char *argv[]) {
14 102 up20180642
    // sets the language of LCF messages (can be either EN-US or PT-PT)
15
    lcf_set_language("EN-US");
16 93 up20180655
17 102 up20180642
    // enables to log function invocations that are being "wrapped" by LCF
18
    // [comment this out if you don't want/need it]
19
    lcf_trace_calls("/home/lcom/labs/lab5/trace.txt");
20 93 up20180655
21 102 up20180642
    // enables to save the output of printf function calls on a file
22
    // [comment this out if you don't want/need it]
23
    lcf_log_output("/home/lcom/labs/lab5/output.txt");
24 93 up20180655
25 102 up20180642
    // handles control over to LCF
26
    // [LCF handles command line arguments and invokes the right function]
27
    if (lcf_start(argc, argv))
28 93 up20180655
    return 1;
29
30 102 up20180642
    // LCF clean up tasks
31
    // [must be the last statement before return]
32
    lcf_cleanup();
33 93 up20180655
34 102 up20180642
    return 0;
35 93 up20180655
}
36
37
int(video_test_init)(uint16_t mode, uint8_t delay) {
38 99 up20180655
    int r;
39
    if ((r = get_permissions_first_mbyte()))
40 103 up20180655
        panic("%s: sys_privctl (ADD MEM) failed: %d\n", __func__, r);
41 93 up20180655
42 99 up20180655
    if (set_graphics_mode(mode)) {
43
        printf("%s: failed to set graphic mode %x.\n", __func__, mode);
44
        if (vg_exit())
45 103 up20180655
            printf("%s: vg_exit failed to exit to text mode.\n", __func__);
46 99 up20180655
        return 1;
47
    };
48 102 up20180642
49 103 up20180655
    if (vbe_get_mode_information(mode)) {
50 99 up20180655
        printf("%s: failed to get information for mode %x.\n", __func__, mode);
51
        if (vg_exit())
52 103 up20180655
            printf("%s: vg_exit failed to exit to text mode.\n", __func__);
53 99 up20180655
        return 1;
54
    }
55
56 103 up20180655
    map_vram(); // if function fails it aborts program
57 99 up20180655
58 96 up20180655
    tickdelay(micros_to_ticks(delay*1e6));
59 94 up20180655
60 99 up20180655
    if (vg_exit()) {
61
        printf("%s: vg_exit failed to exit to text mode.\n", __func__);
62 102 up20180642
        if (free_memory())
63 103 up20180655
            printf("%s: lm_free failed\n", __func__);
64 99 up20180655
        return 1;
65
    }
66 102 up20180642
67 99 up20180655
    if (free_memory()) {
68
        printf("%s: lm_free failed\n", __func__);
69
        return 1;
70 102 up20180642
    }
71 103 up20180655
72 94 up20180655
    return 0;
73 93 up20180655
}
74
75 104 up20180642
///lcom_run lab5 "rectangle 105 3 3 30 30 12 -t 1"
76 102 up20180642
int(video_test_rectangle)(uint16_t mode, uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint32_t color) {
77
    int r;
78
    if ((r = get_permissions_first_mbyte()))
79
    panic("%s: sys_privctl (ADD MEM) failed: %d\n", __func__, r);
80 93 up20180655
81 102 up20180642
    if (set_graphics_mode(mode)) {
82
        printf("%s: failed to set graphic mode %x.\n", __func__, mode);
83
        if (vg_exit()) printf("%s: vg_exit failed to exit to text mode.\n", __func__);
84
        return 1;
85
    };
86
87
    vg_draw_hline(x, y, width, color);
88
    tickdelay(micros_to_ticks(1000000));
89
    if (vg_exit()) {
90
        printf("%s: vg_exit failed to exit to text mode.\n", __func__);
91
        if (free_memory()) printf("%s: lm_free failed\n", __func__);
92
        return 1;
93
    }
94
    return 0;
95 93 up20180655
}
96
97
int(video_test_pattern)(uint16_t mode, uint8_t no_rectangles, uint32_t first, uint8_t step) {
98 103 up20180655
  /* To be completed */
99
  printf("%s(0x%03x, %u, 0x%08x, %d): under construction\n", __func__,
100
         mode, no_rectangles, first, step);
101
102
  return 1;
103 93 up20180655
}
104
105
int(video_test_xpm)(xpm_map_t xpm, uint16_t x, uint16_t y) {
106 102 up20180642
    /* To be completed */
107
    printf("%s(%8p, %u, %u): under construction\n", __func__, xpm, x, y);
108 93 up20180655
109 102 up20180642
    return 1;
110 93 up20180655
}
111
112 102 up20180642
int(video_test_move)(xpm_map_t xpm, uint16_t xi, uint16_t yi, uint16_t xf, uint16_t yf, int16_t speed, uint8_t fr_rate) {
113
    /* To be completed */
114
    printf("%s(%8p, %u, %u, %u, %u, %d, %u): under construction\n",
115
    __func__, xpm, xi, yi, xf, yf, speed, fr_rate);
116 93 up20180655
117 102 up20180642
    return 1;
118 93 up20180655
}
119
120
int(video_test_controller)() {
121 102 up20180642
    /* To be completed */
122
    printf("%s(): under construction\n", __func__);
123 93 up20180655
124 102 up20180642
    return 1;
125 93 up20180655
}