Mercurial > hg > Members > yutaka > manager
view ppe/Menu.cc @ 8:ec2c1003f9b6 default tip
fix mandel
author | yutaka@localhost.localdomain |
---|---|
date | Mon, 12 Apr 2010 23:58:19 +0900 |
parents | febf899d0043 |
children |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <time.h> #include "Menu.h" #include "Sys.h" #include "params.h" #include "fb.h" //headk_num と send_param_head の値を必ず返さないと、動作しない char *make_color_table(int size) { char *color_table = (char*)allocate(size); srandom(time(NULL)); for (int i = 0; i < size; i++) { color_table[i] = random() % 256; } return color_table; } task_head_t* menu(int &list_num, int argc, char *argv[]) { list_num = SPE_NUM; fb_t fb = get_fbdev_addr(); int max_size = MAX_DMA_SIZE - sizeof(task_head_t); int all_line_num = fb.height; int line_size = fb.width * fb.bpp / DIV_BYTE; // line num per task int lnpt = max_size / line_size; int out_size = lnpt * line_size; int list_length = (all_line_num / list_num) / lnpt; //color table; int color_table_size = sizeof(char)*256; // location, width, height, bpp; int params_size = sizeof(int)*6; int task_in_size = params_size + color_table_size; int alignment = 16; int send_in_size = size_fix(task_in_size, alignment); task_head_t *list_head = (task_head_t*)allocate(sizeof(task_head_t)*list_num); task_t **tail = (task_t**)allocate(sizeof(task_t*)*list_num); char *tmp_color = make_color_table(color_table_size); for (int i = 0; i < color_table_size; i++) { //printf("tmp_color[%d] %d\n",i, tmp_color[i]); } int index = 0; for (int i = 0; i < list_num; i++) { tail[i] = entry_head(&list_head[i]); } for (int i = 0; i < all_line_num / lnpt; i++) { //task create task_t *task = task_allocate(send_in_size, 0); //output task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size]; task->head->size_out = out_size; //input params set int *in = (int*)get_addr(task->input, 0); in[0] = index*out_size; in[1] = fb.width; in[2] = fb.height; in[3] = fb.bpp; in[4] = params_size; in[5] = color_table_size; //input color table set char *color = (char*)get_addr(task->input, params_size); for (int j = 0; j < color_table_size; j++) { color[j] = tmp_color[j]; } //pin int pin_in = send_in_size - task_in_size; int pin_out = 0; set_pin(task, pin_in, pin_out); //list add tail[i%list_num] = add_list(tail[i%list_num], task); index++; } free(tmp_color); printf("return run\n"); //munmap(fb.pixels, fb.size); //close(fb.fd); return list_head; }