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
|
/*
* libmostvolume example
*
* Copyright (C) 2017 Microchip Technology Germany II GmbH & Co. KG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You may also obtain this software under a propriety license from Microchip.
* Please contact Microchip for further information.
*
*/
#ifndef LIB_MOST_VOLUME_H
#define LIB_MOST_VOLUME_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Describes the volume control */
enum lib_most_volume_channel_t{
LIB_MOST_VOLUME_CH_FRONT_LEFT = 0,
LIB_MOST_VOLUME_CH_FRONT_RIGHT = 1,
LIB_MOST_VOLUME_CH_REAR_LEFT = 2,
LIB_MOST_VOLUME_CH_REAR_RIGHT = 3,
LIB_MOST_VOLUME_CH_CENTER = 4,
LIB_MOST_VOLUME_CH_SUB = 5,
LIB_MOST_VOLUME_MASTER = 6
};
/** Is fired when the application shall call "lib_most_volume_service()" after a certain time
* \param timeout Time in ms after which the application shall call lib_most_volume_service().
* Valid values:
* 0x0000: as soon as possible,
* 0x0001..0xFFFE: timeout in ms,
* 0xFFFF: never
*/
typedef void (*lib_most_volume_service_cb_t)(uint16_t timeout);
typedef void (*lib_most_volume_writei2c_result_cb_t)(uint8_t result, void *user_ptr);
/** Callback function required to write volume changes to network devices
* \param node The node address
* \param data_ptr I2C command data
* \param data_sz Size of the I2C command data
* \return Returns \c 0 for success, other value on failure.
*/
typedef int (*lib_most_volume_writei2c_cb_t)(uint16_t node, uint8_t *data_ptr, uint8_t data_sz,
lib_most_volume_writei2c_result_cb_t result_fptr,
void *result_user_ptr);
typedef struct lib_most_volume_init_ {
lib_most_volume_service_cb_t service_cb;
lib_most_volume_writei2c_cb_t writei2c_cb;
} lib_most_volume_init_t;
/** Initializes the library
* \param UNICENS_inst Reference to the UNICENS instance, created by the application.
* \param req_service_fptr Callback function which is fired if the application shall call
* lib_most_volume_service.
* \return '0' on success, otherwise value >'0'.
*/
extern uint8_t lib_most_volume_init(lib_most_volume_init_t *init_ptr);
/** Terminates the library
* \return '0' on success, otherwise value >'0'.
*/
extern uint8_t lib_most_volume_exit(void);
/** Sets a single volume value.
* \param channel The volume control to be set.
* \param volume The volume value to be set. Valid values: 0..255.
* \return '0' on success, otherwise value >'0'.
*/
extern uint8_t lib_most_volume_set(enum lib_most_volume_channel_t channel, uint8_t volume);
/** Must be called when the availability of a node has changed
* \param address The node address
* \param available Availability: 0 - not available, 1 - available
* \return '0' on success, otherwise value >'0'.
*/
extern uint8_t lib_most_volume_node_available(uint16_t address, uint8_t available);
/** Shall be called either cyclically (e.g. 50ms -> polling) or after "timeout"
* when "service_fptr" is fired (-> event triggered).
* \return '0' on success, otherwise value >'0'.
*/
extern uint8_t lib_most_volume_service(void);
#ifdef __cplusplus
}
#endif
#endif /* LIB_MOST_VOLUME_H */
|