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