summaryrefslogtreecommitdiff
path: root/audio/sysvad/PhoneAudioSample/CellularWave.h
blob: 1704ff0cea7992e9a8ce228c98b0a8bae593fec4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*++

Copyright (c) Microsoft Corporation All Rights Reserved

Module Name:

    cellularwave.h

Abstract:

    Definition of wavert miniport class for cellular

--*/

#include "MinWaveRT.h"

#ifndef _SYSVAD_CELLULARMINWAVERT_H_
#define _SYSVAD_CELLULARMINWAVERT_H_

NTSTATUS
CreateCellularMiniportWaveRT
( 
    _Out_           PUNKNOWN                              * Unknown,
    _In_            REFCLSID,
    _In_opt_        PUNKNOWN                                UnknownOuter,
    _When_((PoolType & NonPagedPoolMustSucceed) != 0,
       __drv_reportError("Must succeed pool allocations are forbidden. "
             "Allocation failures cause a system crash"))
    _In_            POOL_TYPE                               PoolType,
    _In_            PUNKNOWN                                UnknownAdapter,
    _In_opt_        PVOID                                   DeviceContext,
    _In_            PENDPOINT_MINIPAIR                      MiniportPair
);

//=============================================================================
// Classes
//=============================================================================
///////////////////////////////////////////////////////////////////////////////
// CCellularMiniportWaveRT
//   
class CCellularMiniportWaveRT : 
    public CMiniportWaveRT,
    public IAdapterPowerManagement
{
private:
    ULONG                               m_TelephonyProviderId;
    TELEPHONY_CALLTYPE                  m_TelephonyCallType;
    TELEPHONY_CALLTYPE                  m_PreviousTelephonyCallType;
    TELEPHONY_CALLSTATE                 m_TelephonyCallState; 
    BOOL                                m_bTelephonyHold;
    BOOL                                m_bTelephonyMuteTx;

public:
    DECLARE_STD_UNKNOWN();
    IMP_IAdapterPowerManagement;

    CCellularMiniportWaveRT(
        _In_            PUNKNOWN                                UnknownAdapter,
        _In_            PENDPOINT_MINIPAIR                      MiniportPair,
        _In_opt_        PVOID                                   DeviceContext
        )
        :CMiniportWaveRT(UnknownAdapter, MiniportPair, DeviceContext),
        m_TelephonyProviderId(0),
        m_TelephonyCallType(TELEPHONY_CALLTYPE_CIRCUITSWITCHED),
        m_PreviousTelephonyCallType(TELEPHONY_CALLTYPE_CIRCUITSWITCHED),
        m_TelephonyCallState(TELEPHONY_CALLSTATE_DISABLED),
        m_bTelephonyHold(FALSE),
        m_bTelephonyMuteTx(FALSE)
    {
        if (IsCellularDevice())
        {
            if (m_DeviceFlags & ENDPOINT_CELLULAR_PROVIDER1)
            {
                m_TelephonyProviderId = 0;
            }
            else if (m_DeviceFlags & ENDPOINT_CELLULAR_PROVIDER2)
            {
                m_TelephonyProviderId = 1;
            }                
        }
    }

    ~CCellularMiniportWaveRT();

    friend NTSTATUS PropertyHandler_CellularWaveFilter
    (   
        _In_ PPCPROPERTY_REQUEST      PropertyRequest 
    );   

public:
    NTSTATUS PropertyHandler_TelephonyProviderId
    (
        _In_ PPCPROPERTY_REQUEST PropertyRequest
    );

    NTSTATUS PropertyHandler_TelephonyCallInfo
    (
        _In_ PPCPROPERTY_REQUEST PropertyRequest
    );

    NTSTATUS PropertyHandler_TelephonyCallState
    (
        _In_ PPCPROPERTY_REQUEST PropertyRequest
    );

    NTSTATUS PropertyHandler_TelephonyCallHold
    (
        _In_ PPCPROPERTY_REQUEST PropertyRequest
    );

    NTSTATUS PropertyHandler_TelephonyMuteTx
    (
        _In_ PPCPROPERTY_REQUEST PropertyRequest
    );

private:
    NTSTATUS UpdateTopologyJackState
    (
        _In_ ULONG TelephonyId,
        _In_ BOOL NewState
    );
};
typedef CCellularMiniportWaveRT *PCCellularMiniportWaveRT;

#endif // _SYSVAD_CELLULARMINWAVERT_H_