• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef ALSA_LIB_COMMON_H
17 #define ALSA_LIB_COMMON_H
18 
19 #include "asoundlib.h"
20 #include "hdf_io_service_if.h"
21 #include "hdf_sbuf.h"
22 #include "osal_mem.h"
23 #include "audio_uhdf_log.h"
24 #include "audio_if_lib_common.h"
25 
26 #define SERVIC_NAME_MAX_LEN 32
27 
28 #define MAX_VOLUME         100
29 #define MIN_VOLUME         0
30 #define AUDIO_MIN_CARD_NUM 1
31 #define AUDIO_MAX_CARD_NUM 8
32 #define CARD_ID_LEN_MAX    32
33 #define MAX_CARD_NAME_LEN  64
34 #define MAX_CARD_NUM       (4 * (AUDIO_MAX_CARD_NUM))
35 
36 #define AUDIO_ALSALIB_IOCTRL_RESUME 0
37 #define AUDIO_ALSALIB_IOCTRL_PAUSE  1
38 #define AUDIO_ALSALIB_MMAP_MAX      10
39 #define AUDIO_ALSALIB_RETYR         3
40 
41 enum SndRKPlayPathItem {
42     SND_OUT_CARD_OFF,            /* close play path */
43     SND_OUT_CARD_RCV,            /* speaker */
44     SND_OUT_CARD_SPK,            /* speaker */
45     SND_OUT_CARD_HP,             /* headphone */
46     SND_OUT_CARD_HP_NO_MIC,      /* headphone */
47     SND_OUT_CARD_BT,             /* bluetooth (Don't set!!!) */
48     SND_OUT_CARD_SPK_HP,         /* speaker and headphone */
49     SND_OUT_CARD_RING_SPK,       /* speaker */
50     SND_OUT_CARD_RING_HP,        /* headphone */
51     SND_OUT_CARD_RING_HP_NO_MIC, /* headphone */
52     SND_OUT_CARD_RING_SPK_HP     /* speaker and headphone */
53 };
54 
55 enum SndRKCapPathItem {
56     SND_IN_CARD_MIC_OFF,        /* close capture path */
57     SND_IN_CARD_MAIN_MIC,       /* main mic */
58     SND_IN_CARD_HANDS_FREE_MIC, /* hands free mic */
59     SND_IN_CARD_BT_SCO_MIC      /* bluetooth sco mic (Don't set!!!) */
60 };
61 
62 enum SndRKCtrlNumId {
63     SND_PLAY_PATH = 1, /* play path  */
64     SND_CAP_MIC_PATH,  /* capture path */
65     SND_DACL_PLAY_VOL, /* play left volume path */
66     SND_DACR_PLAY_VOL, /* play right volume path */
67     SND_DACL_CAP_VOL,  /* capture left volume path */
68     SND_DACR_CAP_VOL   /* capture right volume path */
69 };
70 
71 enum SndCardType {
72     SND_CARD_UNKNOWN = -1,
73     SND_CARD_PRIMARY = 0,
74     SND_CARD_HDMI,
75     SND_CARD_USB,
76     SND_CARD_BT,
77     SND_CARD_MAX
78 };
79 
80 struct DevProcInfo {
81     char cardName[CARD_ID_LEN_MAX];
82     char cid[CARD_ID_LEN_MAX]; /* cardX/id match */
83     char did[CARD_ID_LEN_MAX]; /* dai id match */
84 };
85 
86 struct AlsaDevInfo {
87     char cardId[MAX_CARD_NAME_LEN + 1];
88     char pcmInfoId[MAX_CARD_NAME_LEN + 1];
89     int32_t card;
90     int32_t device;
91 };
92 
93 struct AudioCardInfo {
94     uint8_t cardStatus;
95     snd_pcm_t *capturePcmHandle;
96     snd_pcm_t *renderPcmHandle;
97     snd_mixer_t *mixer;
98     snd_mixer_elem_t *ctrlLeftVolume;
99     snd_mixer_elem_t *ctrlRightVolume;
100     bool renderMmapFlag;
101     bool captureMmapFlag;
102     int32_t renderMuteValue;
103     int32_t captureMuteValue;
104     float tempVolume;
105     uint64_t renderMmapFrames;
106     uint64_t capMmapFrames;
107     uint64_t mmapFrames;
108     char cardName[MAX_CARD_NAME_LEN + 1];
109     char devName[MAX_CARD_NAME_LEN + 1];
110     char alsaCardId[MAX_CARD_NAME_LEN + 1];
111     char ctrlName[MAX_CARD_NAME_LEN + 1];
112     struct AlsaDevInfo alsaDevIns[MAX_CARD_NUM];
113     struct AudioPcmHwParams hwRenderParams;
114     struct AudioPcmHwParams hwCaptureParams;
115 };
116 
117 struct HdfIoService *HdfIoServiceBindName(const char *serviceName);
118 void InitSound(snd_mixer_t **mixer, char *hwCtlName);
119 int32_t CloseMixerHandle(snd_mixer_t *alsaMixHandle);
120 int32_t InitCardIns(void);
121 struct AudioCardInfo *GetCardIns(const char *cardName);
122 struct AudioCardInfo *AudioGetCardInfo(const char *adapterName, snd_pcm_stream_t stream);
123 void CheckCardStatus(struct AudioCardInfo *cardIns);
124 int32_t CheckParaFormat(struct AudioPcmHwParams hwParams, snd_pcm_format_t *alsaPcmFormat);
125 int32_t DestroyCardList(void);
126 int32_t GetSelCardInfo(struct AudioCardInfo *cardIns, struct AlsaDevInfo *devInsHandle);
127 int32_t MatchSelAdapter(const char *adapterName, struct AudioCardInfo *cardIns);
128 int32_t GetPriMixerCtlElement(struct AudioCardInfo *cardIns, snd_mixer_elem_t *pcmElement);
129 int32_t AudioMixerSetCtrlMode(
130     struct AudioCardInfo *cardIns, const char *adapterName, const char *mixerCtrlName, int numId, int item);
131 snd_mixer_elem_t *AudioUsbFindElement(snd_mixer_t *mixer);
132 int32_t CardInfoParseFromConfig(void);
133 
134 #endif /* ALSA_LIB_COMMON_H */
135