Go to most recent revision |
Blame |
Last modification |
View Log
| RSS feed
#include <ll/ll.h>
#include <kernel/types.h>
#include <kernel/descr.h>
#include <math.h>
#include <drivers/glib.h>
#include <drivers/keyb.h>
#define FFT_ON
#define FRAMEGRABBER_ON
#define JET_ON
#define BALL_ON
/*
*
* WCET, Periods and Models
*
*/
/* define if you want NRT or SOFT... */
#define TASK_TYPE SOFT
//#define TASK_TYPE NRT
// on Celeron 366
#define WCET_WAVE 450
#define WCET_FFT 722
#define WCET_EQU 1000
#define WCET_EQU2D 318
#define PERIOD_WAVE 40000
#define PERIOD_FFT 3000
#define PERIOD_EQU 40000
#define PERIOD_EQU2D 3000
#define WCET_TRACKING 4000
#define WCET_CAMERA 7000
#define PERIOD_TRACKING 40000
#define PERIOD_CAMERA 40000
#define WCET_JETCTRL 2600
#define WCET_JETDUMMY 1000
#define WCET_JETSLIDE 1000
#define PERIOD_JETCTRL 100000
#define PERIOD_JETDUMMY 100000
#define PERIOD_JETSLIDE 100000
#define WCET_BALL 60
#define PERIOD_BALL 10000
/*
*
* Soundcard related defines
*
*/
/* Samples are 16-bit signed integers */
typedef short SAMPLE;
#define MAX_SAMPLE 32768
/*
*
* FFT defines
*
*/
/* Numbers of samples of the sample window */
#define WINDATA_NSAMPLES 512
/* task WAVE */
/* the point (wave_x,wave_y) is on the center left of the area... */
#define WAVE_NSAMPLES 384
#define WAVE_X 0
#define WAVE_Y 64
#define WAVE_HEIGHT 32
/* task FFT */
#define FFT_NSAMPLES 512
#define PWR_NSAMPLES (FFT_NSAMPLES/2+1)
/* task EQU */
/* the point (equ_x, equ_y) is the top right corner */
#define EQU_NSAMPLES PWR_NSAMPLES
#define EQU_X 64
#define EQU_Y 128
#define EQU_HEIGHT 64
#define EQU_SHADE
/* task EQU2D */
/* the point (equ2d_x, equ2d_y) is the top left corner */
#define EQU2D_NSAMPLES EQU_NSAMPLES
#define EQU2D_X 128
#define EQU2D_Y EQU_Y
#define EQU2D_WIDTH 255
#define EQU2D_CLIP 255
/* scenario */
#define SCENARIO_NLABEL 16
/* Scale factors */
#define FFT_SCALE (16384.0)
#define EQU_SCALE (32.0)
#define EQU2D_SCALE (8.0)
//#define EQU_SCALE (64.0)
//#define EQU2D_SCALE (16.0)
/* Informations about the sampling rate and buffers */
extern WORD rawdata_nsamples;
extern WORD rawdata_buffer_size;
extern WORD rawdata_freq;
/*
*
* Global Stuffs
*
*/
/* graphic mutex... */
extern mutex_t mutex;
/* useful colors... */
extern int white;
extern int black;
extern int red;
extern int gray;
/* define if shorts critical sections wanted */
#define SHORT_CRITICAL_SECTIONS(x) \
if (!((x)%64)) \
{ \
mutex_lock(&mutex); \
mutex_unlock(&mutex); \
}
void init_fftplay(int freq);
void init_framegrabber();
void init_jetcontrol();
void init_ball(void);
void start_framegrabber();
void scenario_jetcontrol(void);
void scenario_fftplay(int f);
void scenario_framegrabber();
void scenario_ball();
void compute_params(int *freq,WORD *nsamp);
char * itoa(int n, char *s);
/*
*
* Framegrabber stuffs
*
*/
// if defined... object black on a white background
#ifndef __BLACK_ON_WHITE
#define __BLACK_ON_WHITE
#endif
#define ABS_NUM(a) ((a >= 0) ? a : -a)
#define MIN_NUM(a, b) ((a < b) ? a : b)
#define MAX_NUM(a, b) ((a > b) ? a : b)
// Cols and rows of the framegrabber image
#define N_COL 384
#define N_ROW 288
#define N_BPS 8 // Bits per pixel
#define N_GRIGI 256
#define N_FRAMES 100
/* pixel of the video image */
#define IMG_COL 256
#define IMG_ROW 192
/* position of the video image */
#define IMG_X 384
#define IMG_Y 32
// I singoli pixel sono caratteri a 8 bit
typedef unsigned char TPixel;
typedef struct {
int x1, y1;
int x2, y2;
int xb, yb;
TIME time_stamp;
} TDataObj;
typedef struct {
int found;
int top_frame;
int vx,vy;
int predx;
int predy;
TDataObj current;
} TTracking;
float distance(unsigned int x1, unsigned int y1,
unsigned int x2, unsigned int y2);
char scan_all_frame(TDataObj *data, TPixel *in_frame);
char scan_window_frame(TDataObj *data, TPixel *in_frame,
unsigned int xc, unsigned int yc, int border);
void threshold_up_function(KEY_EVT key);
void threshold_down_function(KEY_EVT key);
void border_up_function(KEY_EVT key);
void border_down_function(KEY_EVT key);
void tracking(int top_frame, int *track_x, int *track_y, int *int_vx, int *int_vy, int time_to);
TASK elab_image_TASK(void);
/*
*
* JETCONTROL stuffs
*
*/
#define JET_NTASK 18
#define JET_Y_NAME 320
#define DUMMY_PID 1
#define JET_DUMMY_WIDTH 210
#define JET_DUMMY_HEIGHT 40
/* the point (x, y) is the top left corner */
#define JET_DUMMY_X 428
#define JET_DUMMY_Y 264
#define JET_SLIDE_WIDTH 50
#define JET_SLIDE_X 576
/*
*
* BALL stuffs
*
*/
// x and y corners are specified whithout consider a border of 3 pixels
#define BALL_Y 475 /* position of the floor */
#define BALL_HEIGHT 70 /* initial height of the ball */
#define BALL_XMIN 3 /* min position X of the ball */
#define BALL_XMAX 380 /* max position X of the ball */
#define BALL_VELX 5. /* horizontal ball velocity */
#define BALL_VYMIN 11. /* velocitÂ… minima per suono */
#define BALL_MAX_P 50 /* max number of balls */
#define BALL_GROUP 2 /* task group of the balls */