VirtualBox

source: vbox/trunk/src/VBox/Main/include/AudioDriver.h@ 85717

Last change on this file since 85717 was 82968, checked in by vboxsync, 5 years ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
Line 
1/* $Id: AudioDriver.h 82968 2020-02-04 10:35:17Z vboxsync $ */
2/** @file
3 * VirtualBox audio base class for Main audio drivers.
4 */
5
6/*
7 * Copyright (C) 2018-2020 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef MAIN_INCLUDED_AudioDriver_h
19#define MAIN_INCLUDED_AudioDriver_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <VBox/com/ptr.h>
25#include <VBox/com/string.h>
26#include <VBox/com/AutoLock.h>
27
28using namespace com;
29
30/**
31 * Audio driver configuration for audio drivers implemented
32 * in Main.
33 */
34struct AudioDriverCfg
35{
36 AudioDriverCfg(Utf8Str a_strDev = "", unsigned a_uInst = 0, unsigned a_uLUN = 0, Utf8Str a_strName = "")
37 : strDev(a_strDev)
38 , uInst(a_uInst)
39 , uLUN(a_uLUN)
40 , strName(a_strName) { }
41
42 /** Copy assignment operator. */
43 AudioDriverCfg& operator=(AudioDriverCfg const &a_rThat) RT_NOEXCEPT
44 {
45 this->strDev = a_rThat.strDev;
46 this->uInst = a_rThat.uInst;
47 this->uLUN = a_rThat.uLUN;
48 this->strName = a_rThat.strName;
49
50 return *this;
51 }
52
53 /** The device name. */
54 Utf8Str strDev;
55 /** The device instance. */
56 unsigned uInst;
57 /** The LUN the driver is attached to.
58 * Set the UINT8_MAX if not attached. */
59 unsigned uLUN;
60 /** The driver name. */
61 Utf8Str strName;
62};
63
64class Console;
65
66/**
67 * Base class for all audio drivers implemented in Main.
68 */
69class AudioDriver
70{
71
72public:
73 AudioDriver(Console *pConsole);
74 virtual ~AudioDriver();
75
76 /** Copy assignment operator. */
77 AudioDriver &operator=(AudioDriver const &a_rThat) RT_NOEXCEPT;
78
79 Console *GetParent(void) { return mpConsole; }
80
81 AudioDriverCfg *GetConfig(void) { return &mCfg; }
82 int InitializeConfig(AudioDriverCfg *pCfg);
83
84 /** Checks if audio is configured or not. */
85 bool isConfigured() const { return mCfg.strName.isNotEmpty(); }
86
87 bool IsAttached(void) { return mfAttached; }
88
89 int doAttachDriverViaEmt(PUVM pUVM, util::AutoWriteLock *pAutoLock);
90 int doDetachDriverViaEmt(PUVM pUVM, util::AutoWriteLock *pAutoLock);
91
92protected:
93 static DECLCALLBACK(int) attachDriverOnEmt(AudioDriver *pThis);
94 static DECLCALLBACK(int) detachDriverOnEmt(AudioDriver *pThis);
95
96 int configure(unsigned uLUN, bool fAttach);
97
98 /**
99 * Optional (virtual) function to give the derived audio driver
100 * class the ability to add (or change) the driver configuration
101 * entries when setting up.
102 *
103 * @return VBox status code.
104 * @param pLunCfg CFGM configuration node of the driver.
105 */
106 virtual int configureDriver(PCFGMNODE pLunCfg) { RT_NOREF(pLunCfg); return VINF_SUCCESS; }
107
108protected:
109
110 /** Pointer to parent. */
111 Console *mpConsole;
112 /** The driver's configuration. */
113 AudioDriverCfg mCfg;
114 /** Whether the driver is attached or not. */
115 bool mfAttached;
116};
117
118#endif /* !MAIN_INCLUDED_AudioDriver_h */
119
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette