view ppe/Menu.cc @ 5:39d405bc46b7

add fb
author yutaka@localhost.localdomain
date Sat, 10 Apr 2010 16:29:22 +0900
parents 8b4d6bf8c43d
children febf899d0043
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include "Menu.h"
#include "Sys.h"
#include "params.h"
#include "fb.h"

//headk_num と send_param_head の値を必ず返さないと、動作しない

task_head_t*
menu(int &list_num) {

  list_num = SPE_NUM;

  fb_t fb = get_fbdev_addr();
  int max_size = MAX_DMA_SIZE - sizeof(task_head_t);
  int all_task_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_task_num / list_num) / lnpt;

  int in_size  = sizeof(int)*4;
  int real_in_size = sizeof(int)*2;

  task_head_t *list_head = (task_head_t*)allocate(sizeof(task_head_t)*list_num);

  int index = 0;

  for (int i = 0; i < list_num; i++) {

    task_t *head = entry_head(&list_head[i]);

    for (int j = 0; j < list_length; j++) {

      task_t *task = task_allocate(in_size, 0);
      task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
      task->head->size_out = out_size;
      int *in = (int*)task->input;

      in[0] = index*out_size;
      in[1] = (index+1)*out_size;

      int pin_in  = in_size - real_in_size;
      int pin_out = 0;

      set_pin(task, pin_in, pin_out);
      head = add_list(head, task);

      index++;

    }

  }

  printf("return run\n");
 
  //munmap(fb.pixels, fb.size);
  //close(fb.fd);

  return list_head;

}