|
Packit |
675970 |
/*
|
|
Packit |
675970 |
* ALSA -> Arcam AV control plugin
|
|
Packit |
675970 |
*
|
|
Packit |
675970 |
* Copyright (c) 2009 by Peter Stokes <linux@dadeos.co.uk>
|
|
Packit |
675970 |
*
|
|
Packit |
675970 |
* This library is free software; you can redistribute it and/or modify
|
|
Packit |
675970 |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit |
675970 |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
675970 |
* the License, or (at your option) any later version.
|
|
Packit |
675970 |
*
|
|
Packit |
675970 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
675970 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
675970 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
675970 |
* GNU Lesser General Public License for more details.
|
|
Packit |
675970 |
*
|
|
Packit |
675970 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
675970 |
* License along with this library; if not, write to the Free Software
|
|
Packit |
675970 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit |
675970 |
*/
|
|
Packit |
675970 |
|
|
Packit |
675970 |
#include <pthread.h>
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_ZONE1 = '1',
|
|
Packit |
675970 |
ARCAM_AV_ZONE2 = '2'
|
|
Packit |
675970 |
} arcam_av_zone_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_POWER = '*',
|
|
Packit |
675970 |
ARCAM_AV_VOLUME_CHANGE = '/',
|
|
Packit |
675970 |
ARCAM_AV_VOLUME_SET = '0',
|
|
Packit |
675970 |
ARCAM_AV_MUTE = '.',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE = '1',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_TYPE = '7',
|
|
Packit |
675970 |
ARCAM_AV_DIRECT = '3',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE = '4',
|
|
Packit |
675970 |
ARCAM_AV_MULTI_DECODE = '5',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT = '6'
|
|
Packit |
675970 |
} arcam_av_cc_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_OK = 'P',
|
|
Packit |
675970 |
ARCAM_AV_ERROR = 'R'
|
|
Packit |
675970 |
} arcam_av_rc_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_POWER_STAND_BY = '0',
|
|
Packit |
675970 |
ARCAM_AV_POWER_ON = '1',
|
|
Packit |
675970 |
ARCAM_AV_POWER_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_power_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_VOLUME_MIN = '0',
|
|
Packit |
675970 |
ARCAM_AV_VOLUME_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_volume_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_MUTE_ON = '0',
|
|
Packit |
675970 |
ARCAM_AV_MUTE_OFF = '1',
|
|
Packit |
675970 |
ARCAM_AV_MUTE_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_mute_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_DIRECT_DISABLE = '0',
|
|
Packit |
675970 |
ARCAM_AV_DIRECT_ENABLE = '1',
|
|
Packit |
675970 |
ARCAM_AV_DIRECT_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_direct_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_DVD = '0',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_SAT = '1',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_AV = '2',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_PVR = '3',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_VCR = '4',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_CD = '5',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_FM = '6',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_AM = '7',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_DVDA = '8',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_source_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_TYPE_ANALOGUE = '0',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_TYPE_DIGITAL = '1',
|
|
Packit |
675970 |
ARCAM_AV_SOURCE_TYPE_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_source_type_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_MONO = '.',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_STEREO = '/',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_PLII_MOVIE = '0',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_PLII_MUSIC = '1',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_PLIIx_MOVIE = '3',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_PLIIx_MUSIC = '4',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_DOLBY_PL = '6',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_NEO6_CINEMA = '7',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_NEO6_MUSIC = '8',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_DECODE_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_stereo_decode_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_MULTI_DECODE_MONO = '.',
|
|
Packit |
675970 |
ARCAM_AV_MULTI_DECODE_STEREO = '/',
|
|
Packit |
675970 |
ARCAM_AV_MULTI_DECODE_MULTI_CHANNEL = '0',
|
|
Packit |
675970 |
ARCAM_AV_MULTI_DECODE_PLIIx = '2',
|
|
Packit |
675970 |
ARCAM_AV_MULTI_DECODE_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_multi_decode_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef enum {
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_NONE = '0',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_MUSIC = '1',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_PARTY = '2',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_CLUB = '3',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_HALL = '4',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_SPORTS = '5',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_CHURCH = '6',
|
|
Packit |
675970 |
ARCAM_AV_STEREO_EFFECT_REQUEST = '9'
|
|
Packit |
675970 |
} arcam_av_stereo_effect_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
int arcam_av_connect(const char* port);
|
|
Packit |
675970 |
int arcam_av_send(int fd, arcam_av_cc_t command, unsigned char param1, unsigned char param2);
|
|
Packit |
675970 |
|
|
Packit |
675970 |
|
|
Packit |
675970 |
typedef struct arcam_av_state {
|
|
Packit |
675970 |
union {
|
|
Packit |
675970 |
struct {
|
|
Packit |
675970 |
unsigned char power;
|
|
Packit |
675970 |
unsigned char volume;
|
|
Packit |
675970 |
unsigned char mute;
|
|
Packit |
675970 |
unsigned char direct;
|
|
Packit |
675970 |
unsigned char source;
|
|
Packit |
675970 |
unsigned char source_type;
|
|
Packit |
675970 |
unsigned char stereo_decode;
|
|
Packit |
675970 |
unsigned char stereo_effect;
|
|
Packit |
675970 |
unsigned char multi_decode;
|
|
Packit |
675970 |
};
|
|
Packit |
675970 |
unsigned char state[9];
|
|
Packit |
675970 |
} zone1;
|
|
Packit |
675970 |
union {
|
|
Packit |
675970 |
struct {
|
|
Packit |
675970 |
unsigned char power;
|
|
Packit |
675970 |
unsigned char volume;
|
|
Packit |
675970 |
unsigned char mute;
|
|
Packit |
675970 |
unsigned char source;
|
|
Packit |
675970 |
};
|
|
Packit |
675970 |
unsigned char state[4];
|
|
Packit |
675970 |
} zone2;
|
|
Packit |
675970 |
} arcam_av_state_t;
|
|
Packit |
675970 |
|
|
Packit |
675970 |
arcam_av_state_t* arcam_av_state_attach(const char* port);
|
|
Packit |
675970 |
int arcam_av_state_detach(arcam_av_state_t* state);
|
|
Packit |
675970 |
|
|
Packit |
675970 |
int arcam_av_server_start(pthread_t* thread, const char* port);
|
|
Packit |
675970 |
int arcam_av_server_stop(pthread_t thread, const char* port);
|
|
Packit |
675970 |
|
|
Packit |
675970 |
int arcam_av_client(const char* port);
|