Subversion Repositories shark

Rev

Rev 1085 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1085 pj 1
/* Project:     HARTIK 3.0                                      */
2
/* Description: Hard Real TIme Kernel for 386 & higher machines */
3
/* Author:      Paolo Gai <pgai@rsk.it>                         */
4
/*              Advanced Linux Sound Architecture (ALSA)        */
5
/*              Copyright (c) by Jaroslav Kysela <perex@jcu.cz> */
6
/*              Luca Abeni                                      */
7
/*              FFTW by M. Frigo and S. G. Johnson              */
8
 
9
/* Date:        08/09/1999                                      */
10
 
11
/* File:        fftplay.c                                       */
12
/* Revision:    1.00 (Kernel 0.1.4; Library 0.0.9; Util 0.0.4)  */
13
 
14
 
15
 
16
#include "demo.h"
17
 
18
//#include <kernel/types.h>
19
//#include <kernel/model.h>
20
#include <kernel/func.h>
21
 
22
//#include <modules/cabs.h>
23
 
24
#include <string.h>
25
#include <stdlib.h>
26
 
27
#include <drivers/keyb.h>
28
//#include <drivers/crtwin.h>
29
#include <drivers/glib.h>
30
//#include <drivers/sound.h>
31
//#include <ports/rfftw.h>
32
 
33
 
34
 
35
/* Informations about the sampling rate and buffers */
36
WORD rawdata_nsamples;
37
WORD rawdata_buffer_size;
38
WORD rawdata_freq;
39
 
40
/* graphic mutex... */
41
mutex_t mutex;
42
 
43
/* useful colors... */
44
int white;
45
int black;
46
int red;
47
int gray;
48
 
49
void app_mutex_init(mutex_t *m);
50
 
51
 
52
static void version( void )
53
{
54
  cprintf( "Hartik FFT Play 1.0\n"     );
55
  cprintf( "-----------------------\n" );
56
  cprintf( "by Paolo Gai 1999\n"       );
57
  cprintf( "   <pj@hartik.sssup.it>\n" );
58
  cprintf( "-----------------------\n" );
59
}
60
 
61
void reverse(char s[])
62
{
63
  int c, i, j;
64
 
65
  for (i = 0, j = strlen(s)-1; i<j; i++, j--)
66
  {
67
    c = s[i];
68
    s[i] = s[j];
69
    s[j] = c;
70
  }
71
}
72
 
73
char * itoa(int n, char *s)
74
{
75
  int i, sign;
76
 
77
  if ((sign = n) < 0)
78
    n = -n;
79
 
80
  i = 0;
81
 
82
  do
83
  {
84
    s[i++] = n % 10 + '0';
85
  } while ((n /= 10) > 0);
86
 
87
  if (sign < 0)
88
    s[i++] = '-';
89
 
90
  s[i] = 0;
91
 
92
  reverse(s);
93
 
94
  return s;
95
}
96
 
97
void display_jet(PID i)
98
{
99
  char st[200];
100
  TIME sum, max;
101
  int n;
102
 
103
  if (jet_getstat(i, &sum, &max, &n, NULL) != -1) {
104
    if (n==0) n=1;
105
    sprintf(st, "PID=%2d st=%3d Mean=%5d Max=%5d na=%10s",
106
                (int)i,
107
                (int)proc_table[i].status, (int)sum/n, (int)max,
108
                proc_table[i].name);
109
    mutex_lock(&mutex);
110
    grx_text(st, 0, 400+i*8, 255, 0);
111
    mutex_unlock(&mutex);
112
  }
113
}
114
 
115
 
116
 
117
void scenario(int f)
118
{
119
  grx_text("HARTIK 4.0 - LEGO Version"    , 0,0, rgb16(0,255,0), black );
120
  grx_text("Thesis Demo", 0,8, rgb16(0,255,0), black );
121
 
122
  #ifdef FFT_ON
123
  scenario_fftplay(f);
124
  #endif
125
 
126
  #ifdef FRAMEGRABBER_ON
127
  scenario_framegrabber();
128
  #endif
129
 
130
  #ifdef JET_ON
131
  scenario_jetcontrol();
132
  #endif
133
 
134
  #ifdef BALL_ON
135
  scenario_ball();
136
  #endif
137
}
138
 
139
 
140
void demo_exc_handler(int signo, siginfo_t *info, void *extra)
141
{
142
  struct timespec t;
143
 
144
  grx_close();
145
 
146
  /* Default action for an kern exception is  */
147
  kern_cli();
148
  ll_gettime(TIME_EXACT, &t),
149
  kern_printf("\nHartik Exception raised!!!"
150
            "\nTime (s:ns)     :%ld:%ld"
151
            "\nException number:%d"
152
            "\nPID             :%d\n",
153
            t.tv_sec, t.tv_nsec, info->si_value.sival_int,
154
            info->si_task);
155
  sys_end();
156
//  ll_abort(5);
157
}
158
 
159
void my_close(void *arg)
160
{
161
        grx_close();
162
//        sys_status(3);
163
}
164
 
165
 
166
void endfun(KEY_EVT *k)
167
{
168
    grx_close();
169
    cprintf("Ctrl-Brk pressed! Ending...\n");
170
    sys_end();
171
}
172
 
173
void zerofun(KEY_EVT *k)
174
{
175
  int i;
176
  for (i=0; i<MAX_PROC; i++) jet_delstat(i);
177
}
178
 
179
void printeventqueue(void *arg)
180
{
181
  struct event *p;
182
  extern struct event *firstevent;
183
 
184
  kern_cli();
185
  grx_close();
186
  kern_cli();
187
  for (p = firstevent; p != NULL; p = p->next) {
188
    kern_printf("par:%d time:%ld.%ld p:%d handler:%d\n",
189
        (int)p->par, p->time.tv_sec, p->time.tv_nsec/1000, (int)p, (int)p->handler);
190
  }
191
  kern_sti();
192
}
193
 
194
int main(int argc, char **argv)
195
{
196
    int modenum;
197
 
198
    int f;
199
 
200
    KEY_EVT k;
201
 
202
    struct sigaction action;
203
 
204
    srand(4);
205
 
206
    version();
207
 
208
    #ifdef FRAMEGRABBER_ON
209
    if (argc == 1)
210
    {
211
      cprintf("type x fftplay <freq>");
212
      return 0;
213
    }
214
 
215
    f = atoi(argv[1]);
216
    compute_params(&f,&rawdata_nsamples);
217
    #endif
218
 
219
    keyb_set_map(itaMap);
220
    k.flag = CNTR_BIT;
221
    k.scan = KEY_C;
222
    k.ascii = 'c';
223
    keyb_hook(k,endfun);
224
    k.flag = CNTL_BIT;
225
    k.scan = KEY_C;
226
    k.ascii = 'c';
227
    keyb_hook(k,endfun);
228
    k.flag = ALTL_BIT;
229
    k.scan = KEY_C;
230
    k.ascii = 'c';
231
    keyb_hook(k,zerofun);
232
    k.flag = 0;
233
    k.scan = KEY_ENT;
234
    k.ascii = 13;
235
    keyb_hook(k,endfun);
236
 
237
    /* Init the standard Hartik exception handler */
238
    /* Set the signal action */
239
    action.sa_flags = SA_SIGINFO;
240
    action.sa_sigaction = demo_exc_handler;
241
    action.sa_handler = 0;
242
    sigfillset(&action.sa_mask); /* we block all the other signals... */
243
 
244
    if (sigaction(SIGHEXC, &action, NULL) == -1) {
245
      perror("Error initializing signals...");
246
      sys_end();
247
    }
248
 
249
    sys_atrunlevel(my_close, NULL, RUNLEVEL_BEFORE_EXIT);
250
 
251
 
252
    grx_init();
253
    modenum = grx_getmode(640, 480, 16);
254
 
255
    grx_setmode(modenum);
256
 
257
    /* init the graphic mutex */
258
    app_mutex_init(&mutex);
259
 
260
    /* useful colors ... */
261
    white = rgb16(255,255,255);
262
    black = rgb16(0,0,0);
263
    red   = rgb16(255,0,0);
264
    gray  = rgb16(128,128,128);
265
 
266
    scenario(f/2);
267
//    grx_close();
268
//    clear();
269
    #ifdef FFT_ON
270
    init_fftplay(f);
271
    #endif
272
 
273
    #ifdef FRAMEGRABBER_ON
274
    init_framegrabber();
275
    #endif
276
 
277
    #ifdef JET_ON
278
    init_jetcontrol();
279
    #endif
280
 
281
    #ifdef BALL_ON
282
    init_ball();
283
    #endif
284
 
285
    group_activate(1);
286
 
287
    #ifdef FRAMEGRABBER_ON
288
    start_framegrabber();
289
    #endif
290
 
291
    return 0;
292
}
293
 
294