18,7 → 18,6 |
|
#include <ll/i386/defs.h> |
|
#include <drivers/glib.h> |
#include <drivers/pclab.h> |
|
#include <math.h> |
31,8 → 30,10 |
#include <kernel/kern.h> |
#include <kernel/func.h> |
#include <ll/i386/x-dos.h> |
#include <drivers/keyb.h> |
|
#include <drivers/shark_keyb26.h> |
#include <drivers/shark_fb26.h> |
|
#include "const.h" |
|
#define WIDTH 640 |
62,32 → 63,24 |
static GLfloat SUP_P = 30.0; |
|
extern void da_motor(float v); |
extern void *video_memory; |
|
#ifndef M_PI |
#define M_PI 3.14159265 |
#endif |
|
void program_end(void) |
void program_key_end(KEY_EVT *k) |
{ |
|
|
da_motor(0.0); |
|
|
OSMesaDestroyContext(ctx); |
free(buffers); |
|
grx_close(); |
|
sys_end(); |
|
} |
|
void program_key_end(KEY_EVT *k) |
{ |
|
sys_end(); |
|
} |
|
static void draw_box(GLfloat p1x, GLfloat p1y ,GLfloat p1z, GLfloat p2x, GLfloat p2y, GLfloat p2z) { |
|
glBegin(GL_QUADS); |
317,24 → 310,6 |
|
} |
|
static void screen() |
{ |
extern DWORD flbaddr; |
|
/* graphic card Initialization */ |
if (grx_init() < 1) { |
sys_abort(1); |
} |
|
if (grx_open(640, 480, 16) < 0) { |
cprintf("GRX Err\n"); |
sys_abort(1); |
} |
|
vbuf = (unsigned char *)flbaddr; |
|
} |
|
void waitenter() { |
|
KEY_EVT k; |
350,28 → 325,35 |
|
void init_motor(void) |
{ |
|
char txt[100]; |
|
da_motor(0.0); |
|
cprintf("Calibrazione pendolo inverso...\n"); |
sprintf(txt,"Calibrazione pendolo inverso...\n"); |
grx_text(txt,10,10,rgb16(255,255,255),0); |
|
cprintf("Carr a sx e premi enter\n"); |
sprintf(txt,"Carr a sx e premi enter\n"); |
grx_text(txt,10,20,rgb16(255,255,255),0); |
waitenter(); |
vmin=ad_conv(11); |
|
cprintf("Carr a dx e premi enter\n"); |
sprintf(txt,"Carr a dx e premi enter\n"); |
grx_text(txt,10,30,rgb16(255,255,255),0); |
waitenter(); |
vmax=ad_conv(11); |
|
cprintf("Asta a sx e premi enter\n"); |
sprintf(txt,"Asta a sx e premi enter\n"); |
grx_text(txt,10,40,rgb16(255,255,255),0); |
waitenter(); |
vminth=ad_conv(10); |
|
cprintf("Asta a dx e premi enter\n"); |
sprintf(txt,"Asta a dx e premi enter\n"); |
grx_text(txt,10,50,rgb16(255,255,255),0); |
waitenter(); |
vmaxth=ad_conv(10); |
|
cprintf("Vxmax:%f Vxmin:%f Vthmax:%f Vthmin:%f\n",vmax,vmin,vmaxth,vminth); |
sprintf(txt,"Vxmax:%f Vxmin:%f Vthmax:%f Vthmin:%f\n",vmax,vmin,vmaxth,vminth); |
grx_text(txt,10,60,rgb16(255,255,255),0); |
waitenter(); |
|
} |
379,14 → 361,12 |
int main (int argc, char *argv[]) |
{ |
HARD_TASK_MODEL ht_carrello, ht_disegna; |
|
|
vbuf = video_memory; |
|
WCET_CARRELLO =((long int) PERIOD_CARRELLO * (0.05)); |
WCET_DISEGNA =((long int) PERIOD_DISEGNA * (0.875)); |
|
clear(); |
|
sys_atrunlevel((void *) program_end,NULL, RUNLEVEL_BEFORE_EXIT); |
|
hard_task_default_model(ht_carrello); |
hard_task_def_wcet(ht_carrello,WCET_CARRELLO); |
hard_task_def_mit(ht_carrello,PERIOD_CARRELLO); |
397,7 → 377,6 |
carrello_PID = task_create("carrello", carrello, &ht_carrello, NULL); |
if (carrello_PID == -1) { |
sys_end(); |
exit(4); |
} |
|
hard_task_default_model(ht_disegna); |
411,7 → 390,6 |
disegna_PID = task_create("disegna", disegna, &ht_disegna, NULL); |
if (disegna_PID == -1) { |
sys_end(); |
exit(4); |
} |
|
{ |
419,13 → 397,12 |
k.flag = ALTL_BIT; |
k.scan = KEY_C; |
k.ascii = 'c'; |
keyb_hook(k,program_key_end); |
k.status = KEY_PRESSED; |
keyb_hook(k,program_key_end,FALSE); |
} |
|
init_motor(); |
|
screen(); |
|
ctx = OSMesaCreateContext(OSMESA_RGB_565, NULL ); |
|
buffers = malloc(WIDTH*HEIGHT*BYTES_PP); |