Blame |
Last modification |
View Log
| RSS feed
/*
* Project: S.Ha.R.K.
*
* Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
*
* Authors : Paolo Gai <pj@hartik.sssup.it>
* (see authors.txt for full list of hartik's authors)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <kernel/kern.h>
#include <kernel/func.h>
#include <stdlib.h>
#include <drivers/keyb.h>
#include <drivers/glib.h>
#include <semaphore.h>
#include "modules/sem.h"
#include "modules/hartport.h"
#include <math.h>
#include "joy.h"
#define RGB_BLACK rgb16( 0, 0, 0)
#define RGB_GRAY rgb16(127,127,127)
#define RGB_WHITE rgb16(255,255,255)
#define RGB_RED rgb16(255, 0, 0)
#define RGB_GREEN rgb16( 0,255, 0)
#define RGB_BLUE rgb16( 0, 0,255)
#define RGB_YELLOW rgb16(255,255, 0)
#define RGB_MAGENTA rgb16(255, 0,255)
#define RGB_CYAN rgb16( 0,255,255)
#define RGB_D_RED rgb16(127, 0, 0)
#define RGB_D_GREEN rgb16( 0,127, 0)
#define RGB_D_BLUE rgb16( 0, 0,127)
#define RGB_D_YELLOW rgb16(127,127, 0)
#define RGB_D_MAGENTA rgb16(127, 0,127)
#define RGB_D_CYAN rgb16( 0,127,127)
sem_t mx_mat
, mx_grf
; /* mutex semaphores */
PID pid
;
JOY_BOUND jb
;
TASK write
()
{
int x
= 319, y
= 239;
float dx
, dy
;
JOY_STATE jsa
;
clear
();
dx
= 640 / (jb.
x_max - jb.
x_min);
dy
= 480 / (jb.
y_max - jb.
y_min);
while (1) {
sem_wait
(&mx_grf
);
grx_circle
(10 + x
, 10 + y
, 9, RGB_BLACK
);
sem_post
(&mx_grf
);
get_joystick_A
(&jsa
);
x
= (jsa.
x - jb.
x_min) * dx
;
y
= (jsa.
y - jb.
y_min) * dy
;
sem_wait
(&mx_grf
);
if (jsa.
b1==1)
grx_circle
(10 + dx
* x
, 10 + dy
* y
, 9, RGB_RED
);
else
grx_circle
(10 + dx
* x
, 10 + dy
* y
, 9, RGB_YELLOW
);
sem_post
(&mx_grf
);
task_endcycle
();
}
return 0;
}
void endfun
(KEY_EVT
*k
)
{
cprintf
("Ctrl-Brk pressed! Ending...\n");
sys_end
();
}
void my_close
(void *arg
)
{
int i
;
TIME tmp
;
grx_close
();
kern_printf
("Taskset Execution Time\n\n");
for (i
=3; i
<MAX_PROC
; i
++){
if (!jet_getstat
(i
, NULL
, &tmp
, NULL
, NULL
))
kern_printf
("Task Name : %s - Max Time : %d\n", proc_table
[i
].
name, (int)tmp
);
}
}
void init_graph
() {
grx_box
( 0, 0,639,479,RGB_BLACK
);
}
int main
(int argc
, char **argv
)
{
SOFT_TASK_MODEL ms
;
KEY_EVT k
;
TIME seme
;
int modenum
;
k.
flag = CNTR_BIT
;
k.
scan = KEY_C
;
k.
ascii = 'c';
keyb_hook
(k
,endfun
);
k.
flag = CNTL_BIT
;
k.
scan = KEY_C
;
k.
ascii = 'c';
keyb_hook
(k
,endfun
);
sem_init
(&mx_mat
,0,1);
sem_init
(&mx_grf
,0,1);
seme
= sys_gettime
(NULL
);
srand(seme
);
sys_atrunlevel
(my_close
, NULL
, RUNLEVEL_BEFORE_EXIT
);
if (get_joystick_bound_A
(&jb
)) {
perror("Could not find Joystick.");
sys_end
();
}
grx_init
();
modenum
= grx_getmode
(640, 480, 16);
grx_setmode
(modenum
);
init_graph
();
soft_task_default_model
(ms
);
soft_task_def_level
(ms
,1);
soft_task_def_ctrl_jet
(ms
);
soft_task_def_met
(ms
,100);
soft_task_def_period
(ms
,10000);
soft_task_def_usemath
(ms
);
pid
= task_create
("Write", write
, &ms
, NULL
);
if (pid
== NIL
) {
grx_close
();
perror("Could not create task <Write>");
sys_end
();
} else {
task_activate
(pid
);
}
return 0;
}