0
|
1 #include <stdio.h>
|
|
2 #include <stdlib.h>
|
|
3 #include "Menu.h"
|
|
4 #include "Sys.h"
|
|
5 #include "params.h"
|
5
|
6 #include "fb.h"
|
0
|
7
|
|
8 //headk_num と send_param_head の値を必ず返さないと、動作しない
|
|
9
|
2
|
10 task_head_t*
|
|
11 menu(int &list_num) {
|
0
|
12
|
2
|
13 list_num = SPE_NUM;
|
5
|
14
|
|
15 fb_t fb = get_fbdev_addr();
|
|
16 int max_size = MAX_DMA_SIZE - sizeof(task_head_t);
|
7
|
17 int all_line_num = fb.height;
|
5
|
18 int line_size = fb.width * fb.bpp / DIV_BYTE;
|
2
|
19
|
5
|
20 // line num per task
|
|
21 int lnpt = max_size / line_size;
|
|
22 int out_size = lnpt * line_size;
|
7
|
23 int list_length = (all_line_num / list_num) / lnpt;
|
5
|
24
|
|
25 int in_size = sizeof(int)*4;
|
|
26 int real_in_size = sizeof(int)*2;
|
2
|
27
|
|
28 task_head_t *list_head = (task_head_t*)allocate(sizeof(task_head_t)*list_num);
|
7
|
29 task_t **tail = (task_t**)allocate(sizeof(task_t*)*list_num);
|
0
|
30
|
5
|
31 int index = 0;
|
2
|
32 for (int i = 0; i < list_num; i++) {
|
7
|
33 tail[i] = entry_head(&list_head[i]);
|
|
34 }
|
|
35
|
|
36 for (int i = 0; i < all_line_num / lnpt; i++) {
|
5
|
37 task_t *task = task_allocate(in_size, 0);
|
|
38 task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
|
|
39 task->head->size_out = out_size;
|
2
|
40 int *in = (int*)task->input;
|
0
|
41
|
5
|
42 in[0] = index*out_size;
|
|
43 in[1] = (index+1)*out_size;
|
2
|
44
|
5
|
45 int pin_in = in_size - real_in_size;
|
2
|
46 int pin_out = 0;
|
|
47
|
|
48 set_pin(task, pin_in, pin_out);
|
7
|
49 tail[i%list_num] = add_list(tail[i%list_num], task);
|
5
|
50
|
|
51 index++;
|
2
|
52
|
7
|
53 }
|
|
54
|
|
55 // for (int i = 0; i < list_num; i++) {
|
|
56
|
|
57 // task_t *head = entry_head(&list_head[i]);
|
|
58
|
|
59 // for (int j = 0; j < list_length; j++) {
|
|
60
|
|
61 // task_t *task = task_allocate(in_size, 0);
|
|
62 // task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
|
|
63 // task->head->size_out = out_size;
|
|
64 // int *in = (int*)task->input;
|
0
|
65
|
7
|
66 // in[0] = index*out_size;
|
|
67 // in[1] = (index+1)*out_size;
|
|
68
|
|
69 // int pin_in = in_size - real_in_size;
|
|
70 // int pin_out = 0;
|
|
71
|
|
72 // set_pin(task, pin_in, pin_out);
|
|
73 // head = add_list(head, task);
|
|
74
|
|
75 // index++;
|
|
76
|
|
77 // }
|
|
78
|
|
79 // }
|
0
|
80
|
|
81 printf("return run\n");
|
5
|
82
|
|
83 //munmap(fb.pixels, fb.size);
|
|
84 //close(fb.fd);
|
|
85
|
2
|
86 return list_head;
|
0
|
87
|
|
88 }
|