aboutsummaryrefslogtreecommitdiff
path: root/src/res-msg.h
blob: 16e3d568cf736f465c4b14f2c789c1e10d291f9f (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
136
137
138
139
140
#ifndef __RES_MESSAGE_H__
#define __RES_MESSAGE_H__

#include <stdint.h>

#include <res-types.h>

#ifdef	__cplusplus
extern "C" {
#endif

#define RESMSG_BIT(b) (((uint32_t)1) << (b))

#define RESMSG_AUDIO_PLAYBACK      RESOURCE_AUDIO_PLAYBACK
#define RESMSG_VIDEO_PLAYBACK      RESOURCE_VIDEO_PLAYBACK
#define RESMSG_AUDIO_RECORDING     RESOURCE_AUDIO_RECORDING
#define RESMSG_VIDEO_RECORDING     RESOURCE_VIDEO_RECORDING
#define RESMSG_VIBRA               RESOURCE_VIBRA
#define RESMSG_LEDS                RESOURCE_LEDS
#define RESMSG_BACKLIGHT           RESOURCE_BACKLIGHT
#define RESMSG_SYSTEM_BUTTON       RESOURCE_SYSTEM_BUTTON
#define RESMSG_LOCK_BUTTON         RESOURCE_LOCK_BUTTON
#define RESMSG_SCALE_BUTTON        RESOURCE_SCALE_BUTTON
#define RESMSG_SNAP_BUTTON         RESOURCE_SNAP_BUTTON
#define RESMSG_LENS_COVER          RESOURCE_LENS_COVER

#define RESMSG_MODE_AUTO_RELEASE   RESOURCE_AUTO_RELEASE
#define RESMSG_MODE_ALWAYS_REPLY   RESOURCE_ALWAYS_REPLY

typedef enum resmsg_type_e {
    RESMSG_INVALID = -1,

    RESMSG_REGISTER,
    RESMSG_UNREGISTER,
    RESMSG_UPDATE,
    RESMSG_ACQUIRE,
    RESMSG_RELEASE,
    RESMSG_GRANT,
    RESMSG_ADVICE,
    RESMSG_AUDIO,

    RESMSG_MAX,

    RESMSG_STATUS = RESMSG_MAX,
    RESMSG_TRANSPORT_START,
} resmsg_type_t;

typedef struct {
    uint32_t          all;       /* all the resources */
    uint32_t          opt;       /* optional resources (subset of all) */
    uint32_t          share;     /* shareable resource value */
    uint32_t          mask;      /* shereable resource mask (subset of all) */
} resmsg_rset_t;

typedef enum {
    resmsg_method_equals = 0,
    resmsg_method_startswith,
    resmsg_method_matches
} resmsg_match_method_t;

typedef struct {
    resmsg_match_method_t  method;
    char                  *pattern;
} resmsg_match_t;

typedef struct {
    char             *name;
    resmsg_match_t    match;
} resmsg_property_t;

#define RESMSG_COMMON                                         \
    resmsg_type_t     type;      /* RESMSG_xxxx            */ \
    uint32_t          id;        /* resourse set ID        */ \
    uint32_t          reqno      /* request number, if any */

typedef struct {
    RESMSG_COMMON;
} resmsg_any_t;

typedef struct {
    RESMSG_COMMON;               /* RESMSG_[REGISTER|UPDATE] */
    resmsg_rset_t     rset;      /* resource set */
    char             *klass;     /* optional application class */
    uint32_t          mode;      /* or'ed RESMSG_MODE_xxxx values */
} resmsg_record_t;

typedef struct {
    RESMSG_COMMON;               /* RESMG_[UNREGISTER|ACQUIRE|RELEASE] */
} resmsg_possess_t;

typedef struct {
    RESMSG_COMMON;               /* RESMG_[GRANT|ADVICE] */
    uint32_t          resrc;     /* effected resources */
} resmsg_notify_t;

typedef struct {
    RESMSG_COMMON;               /* RESMSG_AUDIO */
    char             *group;     /* group, if any ('' => registered class) */
    uint32_t          pid;       /* PID of the streaming app, if any */
    resmsg_property_t property;  /* audio stream property */
} resmsg_audio_t;

typedef struct {
    RESMSG_COMMON;               /* RESMSG_STATUS */
    int32_t           errcod;    /* error code, if any */
    const char       *errmsg;    /* error message, if any */
} resmsg_status_t;


typedef union resmsg_u {
    resmsg_type_t     type;
    resmsg_any_t      any;
    resmsg_record_t   record;
    resmsg_possess_t  possess;
    resmsg_notify_t   notify;
    resmsg_audio_t    audio;
    resmsg_status_t   status;
} resmsg_t;


char *resmsg_dump_message(resmsg_t *, int, char *, int);
char *resmsg_type_str(resmsg_type_t);
char *resmsg_res_str(uint32_t, char *, int);
char *resmsg_mod_str(uint32_t, char *, int);
char *resmsg_match_method_str(resmsg_match_method_t);


#ifdef	__cplusplus
};
#endif

#endif /* __RES_MESSAGE_H__ */

/* 
 * Local Variables:
 * c-basic-offset: 4
 * indent-tabs-mode: nil
 * End:
 * vim:set expandtab shiftwidth=4:
 */