1/*
2 * Copyright 2007 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Bek, host.haiku@gmx.de
7 */
8#include "driver.h"
9
10int32 api_version = B_CUR_DRIVER_API_VERSION;
11device_t device;
12
13
14status_t
15init_hardware(void)
16{
17	dprintf("null_audio: %s\n", __func__);
18	return B_OK;
19}
20
21
22status_t
23init_driver(void)
24{
25	dprintf("null_audio: %s\n", __func__);
26	device.running = false;
27	return B_OK;
28}
29
30
31void
32uninit_driver(void)
33{
34}
35
36
37const char**
38publish_devices(void)
39{
40	static const char* published_paths[] = {
41		MULTI_AUDIO_DEV_PATH "/null/0",
42		NULL
43	};
44	dprintf("null_audio: %s\n", __func__);
45
46	return published_paths;
47}
48
49
50static status_t
51null_audio_open (const char *name, uint32 flags, void** cookie)
52{
53	dprintf("null_audio: %s\n" , __func__ );
54	*cookie = &device;
55	return B_OK;
56}
57
58
59static status_t
60null_audio_read (void* cookie, off_t a, void* b, size_t* num_bytes)
61{
62	dprintf("null_audio: %s\n" , __func__ );
63	// Audio drivers are not supposed to return anything
64	// inside here
65	*num_bytes = 0;
66	return B_IO_ERROR;
67}
68
69
70static status_t
71null_audio_write (void* cookie, off_t a, const void* b, size_t* num_bytes)
72{
73	dprintf("null_audio: %s\n" , __func__ );
74	// Audio drivers are not supposed to return anything
75	// inside here
76	*num_bytes = 0;
77	return B_IO_ERROR;
78}
79
80
81static status_t
82null_audio_control (void* cookie, uint32 op, void* arg, size_t len)
83{
84	//dprintf("null_audio: %s\n" , __func__ );
85	// In case we have a valid cookie, initialized
86	// the driver and hardware connection properly
87	// Simply pass through to the multi audio hooks
88	if (cookie)
89		return multi_audio_control(cookie, op, arg, len);
90	else
91		dprintf("null_audio: %s called without cookie\n" , __func__);
92
93	// Return error in case we have no valid setup
94	return B_BAD_VALUE;
95}
96
97
98static status_t
99null_audio_close (void* cookie)
100{
101	device_t* device = (device_t*) cookie;
102	dprintf("null_audio: %s\n" , __func__ );
103	if (device && device->running)
104		null_stop_hardware(device);
105	return B_OK;
106}
107
108
109static status_t
110null_audio_free (void* cookie)
111{
112	dprintf("null_audio: %s\n" , __func__ );
113	return B_OK;
114}
115
116
117device_hooks driver_hooks = {
118	null_audio_open,
119	null_audio_close,
120	null_audio_free,
121	null_audio_control,
122	null_audio_read,
123	null_audio_write
124};
125
126
127device_hooks*
128find_device(const char* name)
129{
130	return &driver_hooks;
131}
132
133