xref: /haiku/src/add-ons/kernel/drivers/audio/null/driver.h (revision 57cba4584f43e0d59e8cdc4b074840e0f5eecb73)
1 /*
2  * Copyright 2007 Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef NULL_AUDIO_DRIVER_H
6 #define NULL_AUDIO_DRIVER_H
7 
8 #include <drivers/driver_settings.h>
9 #include <drivers/Drivers.h>
10 #include <drivers/KernelExport.h>
11 
12 #include <hmulti_audio.h>
13 #include <string.h>
14 #include <stdlib.h>
15 
16 #define FRAMES_PER_BUFFER 1024
17 #define MULTI_AUDIO_BASE_ID 1024
18 #define MULTI_AUDIO_DEV_PATH "audio/hmulti"
19 #define MULTI_AUDIO_MASTER_ID 0
20 #define STRMINBUF 2
21 #define STRMAXBUF 2
22 
23 typedef struct {
24 	spinlock	lock;
25 	int bits;
26 
27 	void*		buffers[STRMAXBUF];
28 	uint32		num_buffers;
29 	uint32		num_channels;
30 	uint32		format;
31 	uint32		rate;
32 
33 	uint32		buffer_length;
34 	sem_id		buffer_ready_sem;
35 	uint32		frames_count;
36 	uint32		buffer_cycle;
37 	bigtime_t	real_time;
38 
39 	area_id		buffer_area;
40 } device_stream_t;
41 
42 typedef struct {
43 	device_stream_t playback_stream;
44 	device_stream_t record_stream;
45 
46 	thread_id interrupt_thread;
47 	bool running;
48 } device_t;
49 
50 extern device_hooks driver_hooks;
51 int32 format_to_sample_size(uint32 format);
52 
53 status_t multi_audio_control(void* cookie, uint32 op, void* arg, size_t len);
54 
55 status_t null_hw_create_virtual_buffers(device_stream_t* stream, const char* name);
56 status_t null_start_hardware(device_t* device);
57 void null_stop_hardware(device_t* device);
58 
59 #endif /* NULL_AUDIO_DRIVER_H */
60 
61