/* * 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 . * * 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 #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 int (*lib_most_volume_sendmessage_cb_t)(uint16_t node, uint16_t msgid, uint8_t *data_ptr, uint8_t data_sz); 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_sendmessage_cb_t sendmsg_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 */