summaryrefslogtreecommitdiffstats
path: root/alsa-binding/Alsa-ApiHat.h
blob: 35f96bb128d15ec316a70cc0cebf28411dedf15c (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
127
128
129
130
131
132
133
134
135
/*
 * AlsaLibMapping -- provide low level interface with ALSA lib (extracted from alsa-json-gateway code)
 * Copyright (C) 2015,2016,2017, Fulup Ar Foll fulup@iot.bzh
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#ifndef ALSALIBMAPPING_H
#define ALSALIBMAPPING_H


#include <alsa/asoundlib.h>
#include <systemd/sd-event.h>

#include <afb/afb-binding.h>
#include <json-c/json.h>

// Soft control have dynamically allocated numid
#define CTL_AUTO    -1
#define CTL_UNKNOWN -2

#ifndef PUBLIC
  #define PUBLIC
#endif
#define STATIC static

#ifndef CONTROL_MAXPATH_LEN
  #define CONTROL_MAXPATH_LEN   255
#endif

#define NO_CARD_SELECTED        -1
#define NO_DEVICE_SELECTED      -1
#define NO_SUBDEVICE_SELECTED   -1

typedef enum {
    QUERY_QUIET   = 0,
    QUERY_COMPACT = 1,
    QUERY_VERBOSE = 2,
    QUERY_FULL    = 3,
} queryModeE;

typedef enum {
    ACTION_SET,
    ACTION_GET
} ActionSetGetT;

typedef enum {
    CONTROL_ADD,
    CONTROL_REMOVE
} ControlAddRemoveT;

typedef enum {
    EVENT_SUBSCRIBE,
    EVENT_UNSUBSCRIBE
} EventSubscribeUnsubscribeT;

// structure to store card
typedef struct {
    int cardNb;
    char *cardPath;
    char *cardId;
    char *cardShortName;
    char *cardLongName;
    char *cardDriver;
    char *cardMixerName;
    char *cardComponents;
    int playbackDeviceNb;
    char *playbackDeviceId;
    char *playbackDeviceName;
} queryCardInfo;

// generic structure to pass parsed query values
typedef struct {
    json_object *numidsJ;
    int count;
} controlQueryValuesT;

// use to store crl numid user request
typedef struct {
    unsigned int numId;
    const char *tag;
    json_object *jToken;
    json_object *valuesJ;
    int used;
} ctlRequestT;

// import from AlsaAfbBinding
extern const struct afb_binding_interface *afbIface;
PUBLIC char *alsaGetDevIdFromQuery(json_object *queryJ);
PUBLIC queryModeE alsaGetModeFromQuery(json_object *queryJ);

// AlseCoreSetGet exports
PUBLIC int getCardNbFromCardPath(char *cardPath);
PUBLIC json_object *getCardInfo(int card);
PUBLIC void alsaGetInfo (afb_req_t request);
PUBLIC int alsaGetPcmProcStatusFd(unsigned int card, unsigned int device, unsigned int subdevice, snd_pcm_stream_t pcmStream);
PUBLIC int alsaIsPcmAvailableUsingPcmProcFd(int fd);
PUBLIC int alsaIsPcmAvailableUsingId(unsigned int card, unsigned int device, unsigned int subdevice, snd_pcm_stream_t pcmStream);
PUBLIC int alsaIsPcmAvailableUsingPcmName(char *pcmName, snd_pcm_stream_t pcmStream);
PUBLIC void alsaGetPcmAvailability(afb_req_t request);
PUBLIC int alsaGetSingleCtl (snd_ctl_t *ctlDev, snd_ctl_elem_id_t *elemId, ctlRequestT *ctlRequest, queryModeE queryMode);
PUBLIC void alsaGetCtls(afb_req_t request);
PUBLIC void alsaSetCtls(afb_req_t request);


// AlsaUseCase exports
PUBLIC void alsaUseCaseQuery(afb_req_t request);
PUBLIC void alsaUseCaseSet(afb_req_t request);
PUBLIC void alsaUseCaseGet(afb_req_t request);
PUBLIC void alsaUseCaseClose(afb_req_t request);
PUBLIC void alsaUseCaseReset(afb_req_t request);
PUBLIC void alsaAddCustomCtls(afb_req_t request);
PUBLIC void alsaRemoveCustomCtls(afb_req_t request);

// AlsaRegEvt
PUBLIC void alsaEvtSubscribe (afb_req_t request);
PUBLIC void alsaEvtUnsubscribe (afb_req_t request);
PUBLIC void alsaGetCardId (afb_req_t request);
PUBLIC void alsaRegisterHal (afb_req_t request);
PUBLIC void alsaActiveHal (afb_req_t request);
PUBLIC void alsaPcmInfo (afb_req_t request);

#endif /* ALSALIBMAPPING_H */