Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1123 → Rev 1377

/demos/trunk/base/ego.c
18,11 → 18,11
 
/**
------------
CVS : $Id: ego.c,v 1.3 2003-01-07 17:10:15 pj Exp $
CVS : $Id: ego.c,v 1.4 2004-04-17 11:36:13 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.3 $
Last update: $Date: 2003-01-07 17:10:15 $
Revision: $Revision: 1.4 $
Last update: $Date: 2004-04-17 11:36:13 $
------------
**/
 
50,11 → 50,15
/****************************************************************/
 
#include <kernel/kern.h>
#include <drivers/glib.h>
#include <drivers/keyb.h>
 
#include <semaphore.h>
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_fb26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
#define X0 10
 
/* task periods */
70,11 → 74,74
"I am ego2 and I print a character every 200 ms",
"I am ego3 and I print a character every 300 ms"};
 
/* A semaphore used to access Video Cards in mutual exclusion */
sem_t mutex;
PID shutdown_task_PID = -1;
 
/***************************************************************/
 
int device_drivers_init() {
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
keyb_def_ctrlC(kparms, NULL);
INPUT26_init();
 
KEYB26_init(&kparms);
 
FB26_init();
FB26_open(FRAME_BUFFER_DEVICE);
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
 
return 0;
}
 
int device_drivers_close() {
 
FB26_close(FRAME_BUFFER_DEVICE);
 
KEYB26_close();
 
INPUT26_close();
 
return 0;
 
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_end();
 
return NULL;
 
}
 
void set_shutdown_task() {
 
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
TASK ego(void *arg)
{
int i = (int)arg;
93,10 → 160,7
 
while (1) {
s[0] = talk[i][j];
sem_wait(&mutex);
/* grx_text("TEST", 100,100,12,0); */
grx_text(s,x,y[i],12+i,0);
sem_post(&mutex);
x += 8;
if (++j == leng) {
j = 0;
112,13 → 176,10
/****************************************************************/
 
/* This function is called when Alt-X is pressed.
It simply shutdown the system using sys_end.
Note that the byebye() function is called only if we exit from
the system using sys_end()!!!!
*/
void my_end(KEY_EVT* e)
{
sys_end();
task_activate(shutdown_task_PID);
}
 
/******************************************************************/
137,12 → 198,6
NOT called
*/
 
void byebye(void *arg)
{
grx_close();
cprintf("Bye Bye!\n");
}
 
/****************************** MAIN ******************************/
 
int main(int argc, char **argv)
151,33 → 206,17
KEY_EVT emerg;
HARD_TASK_MODEL m1, m2, m3;
 
/* Set the closing function */
sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT);
set_shutdown_task();
 
/* Initializes the semaphore */
sem_init(&mutex,0,1);
device_drivers_init();
 
/* graphic card Initialization */
if (grx_init() < 1) {
sys_abort(1);
}
 
if (grx_open(640, 480, 8) < 0) {
cprintf("GRX Err\n");
sys_abort(1);
}
 
/* set the keyboard handler to exit correctly */
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTL_BIT;
keyb_hook(emerg,my_end);
emerg.status = KEY_PRESSED;
keyb_hook(emerg,my_end,FALSE);
 
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTR_BIT;
keyb_hook(emerg,my_end);
 
/* a small banner */
grx_text("EGO Test",8,8,WHITE,0);
grx_text("Press Alt-X to exit",8,16,WHITE,0);
191,9 → 230,9
hard_task_def_group (m1,1);
pid1 = task_create("ego1", ego, &m1, NULL);
if (pid1 == NIL) {
grx_close();
perror("Could not create task <ego1>");
sys_abort(1);
sys_shutdown_message("Could not create task <ego1>");
task_activate(shutdown_task_PID);
return 0;
}
 
/* ego2 creation */
205,9 → 244,9
hard_task_def_group (m2,1);
pid2 = task_create("ego2", ego, &m2, NULL);
if (pid2 == NIL) {
grx_close();
perror("Could not create task <ego2>");
sys_abort(1);
sys_shutdown_message("Could not create task <ego2>");
task_activate(shutdown_task_PID);
return 0;
}
 
/* ego3 creation */
219,9 → 258,9
hard_task_def_group (m3,1);
pid3 = task_create("ego3", ego, &m3, NULL);
if (pid3 == NIL) {
grx_close();
perror("Could not create task <ego3>");
sys_abort(1);
sys_shutdown_message("Could not create task <ego3>");
task_activate(shutdown_task_PID);
return 0;
}
 
/* and finally we activate the three threads... */