Adding support for Linux' POSIX capabilities - Alex
[terminatorX.git] / src / tX_engine.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2003  Alexander K├Ânig
4  
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9  
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14  
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  
19     File: tX_engine.h
20  
21     Description: Header to tX_engine.cc
22 */    
23
24 #ifndef _TX_ENGINE_H_
25 #define _TX_ENGINE_H_
26
27 #include "tX_tape.h"
28 #include "tX_mouse.h"
29 #include "tX_audiodevice.h"
30 #include "tX_midiin.h"
31 #include <sys/types.h>
32
33 #define ENG_ERR 4
34
35 #define ENG_RUNNING 0
36 #define ENG_INIT 1
37 #define ENG_STOPPED 2
38 #define ENG_FINISHED 3
39 #define ENG_ERR_XOPEN 4
40 #define ENG_ERR_XINPUT 5
41 #define ENG_ERR_DGA 6
42 #define ENG_ERR_SOUND 7
43 #define ENG_ERR_THREAD 8
44 #define ENG_ERR_GRABMOUSE 9
45 #define ENG_ERR_GRABKEY 10
46 #define ENG_ERR_BUSY 11
47
48 #include <pthread.h>
49 enum tX_engine_error {
50         NO_ERROR,
51         ERROR_TAPE,
52         ERROR_AUDIO,
53         ERROR_BUSY      
54 };
55
56 enum tX_engine_status {
57         RUNNING,
58         STOPPED
59 };
60
61 class tX_engine {
62         private:
63         static tX_engine *engine;
64         
65         pthread_t thread;
66         pthread_mutex_t start;
67         bool thread_terminate;
68         tx_mouse *mouse;
69         tX_audiodevice *device;
70         tx_tapedeck *tape;
71         bool recording;
72         bool recording_request;
73         bool stop_flag;
74         bool loop_is_active;
75         bool grab_request;
76         bool grab_active;
77         
78         public:
79
80 #ifdef USE_ALSA_MIDI_IN
81         tX_midiin *midi;
82         tX_midiin *get_midi() { return midi; }
83 #endif  
84
85 #ifdef USE_SCHEDULER
86         private:
87         pid_t pid;
88         
89         public:
90         pid_t get_pid() { return pid; }
91         void set_pid(pid_t value) { pid=value; }
92 #endif
93         
94         static tX_engine *get_instance();
95         tX_engine();
96         ~tX_engine();
97         
98         tX_engine_error run();
99         void stop();
100         void loop();
101         
102         void set_recording_request(bool recording);
103         bool get_recording_request() { return recording_request; }
104         bool is_recording() { return recording; }
105         int16_t* render_cycle();
106         
107         void set_grab_request();
108         bool is_stopped() { return stop_flag; }
109 };
110 #endif