00001 #ifndef __ALSAD_SHARED_LIB_H 00002 #define __ALSAD_SHARED_LIB_H 00003 00014 #include <stdio.h> 00015 #include <stdlib.h> 00016 #include <unistd.h> 00017 #include <sys/time.h> 00018 #include <netdb.h> 00019 #include <errno.h> 00020 #include "alsad_defs.h" 00021 #include "alsad_net_lib.h" 00022 #include "auth_lib.h" 00023 #include "config_file.h" 00024 00025 #define ALSAD_PCM_WAIT_TIME 1000 00026 #define ALSAD_RESUME_COUNT 1000 00027 00028 00029 #define ALSAD_KEY_USERNAME "username" 00030 #define ALSAD_KEY_PRIV_KEY_FILE "private_key_file" 00031 #define ALSAD_KEY_PUB_KEY_DIR "public_key_dir" 00032 #define ALSAD_KEY_MAX_STREAM_SINKS "max_stream_sinks" 00033 #define ALSAD_KEY_PCM_FORMAT "pcm_format" 00034 #define ALSAD_KEY_CHANNELS "number_pcm_channels" 00035 #define ALSAD_KEY_OPEN_MODE "card_open_mode" 00036 #define ALSAD_KEY_CIRC_BUFF_SIZE "circ_buff_size" 00037 #define ALSAD_KEY_MAX_CIRC_BUFF_SIZE "max_circ_buff_size" 00038 #define ALSAD_KEY_CARD_BUF_TIME "card_buffer_time" 00039 #define ALSAD_KEY_CARD_PERIOD_TIME "card_period_time" 00040 #define ALSAD_KEY_CARD_DEVICE_NAME "card_device_name" 00041 #define ALSAD_KEY_PORT "alsad_port" 00042 00043 #define ALSAD_DFLT_USERNAME "alsad" 00044 #define ALSAD_DFLT_PRIV_KEY_FILE "~/.ssh/alsad.priv" 00045 #define ALSAD_DFLT_PUB_KEY_DIR "/etc/alsad/pub/" 00046 #define ALSAD_DFLT_MAX_STREAM_SINKS "0" 00047 #define ALSAD_DFLT_PCM_FORMAT "S16_LE" 00048 #define ALSAD_DFLT_CHANNELS "1" 00049 #define ALSAD_DFLT_OPEN_MODE "0" 00050 #define ALSAD_DFLT_CIRC_BUFF_SIZE "1048576" 00051 #define ALSAD_DFLT_MAX_CIRC_BUFF_SIZE "4194304" 00052 #define ALSAD_DFLT_CARD_BUF_TIME "500000" 00053 #define ALSAD_DFLT_CARD_PERIOD_TIME "125000" 00054 #define ALSAD_DFLT_CARD_DEVICE_NAME "default" 00055 #define ALSAD_DFLT_PORT "5000" 00056 00057 #define ALSAD_DFLT_HOSTNAME "localhost" 00058 #define ALSAD_DFLT_RATE 22000 00059 #define ALSAD_DFLT_IDENTIFIER 123456 00060 #define ALSAD_DFLT_DP_IDENTIFIER 0 00061 00062 00069 struct alsad_config_keys{ 00070 char *config_username; 00071 char *config_priv_key_file; 00072 char *config_pub_key_dir; 00073 char *config_max_stream_sinks; 00074 char *config_pcm_format; 00075 char *config_channels; 00076 char *config_open_mode; 00077 char *config_circ_buff_size; 00078 char *config_max_circ_buff_size; 00079 char *config_card_buf_time; 00080 char *config_card_period_time; 00081 char *config_card_device_name; 00082 char *config_port; 00083 }; 00084 00085 typedef struct alsad_config_keys alsad_config_keys_t; 00086 00087 00088 int alsad_config_key_load(char *config_file, alsad_config_keys_t *key_struct); 00089 00090 int alsad_conn_with_host(alsad_connect_addr_t *conn_addr, 00091 alsad_net_structs_t *send_structs, 00092 char *userid, char *priv_key_file, 00093 alsad_control_t *conn_ctrl); 00094 00095 00096 00108 int alsad_handle_client_protocol(int sock, int handle, alsad_control_t *conn_ctrl); 00109 00110 int alsad_client_side_negotiation(int sock, alsad_hw_params_t *hw_params, 00111 char **audiobuf); 00112 int alsad_server_side_negotiation(int sock, snd_pcm_t **handle, 00113 alsad_hw_params_t *rcvd_hw_params, char **audiobuf); 00114 00115 int alsad_configure_snd_card(snd_pcm_t **handle, 00116 alsad_stream_props_t *rcvd_stream_props, 00117 alsad_hw_params_t *rcvd_hw_params); 00118 00119 int allocate_audiobuf(alsad_hw_params_t *configd_hw_params, char **audiobuf); 00120 00121 int buffer_xrun(snd_pcm_t *handle, long err_val); 00122 00123 void suspend(snd_pcm_t *handle); 00124 00125 void print_pcm_state(snd_pcm_t *handle); 00126 00127 int alsad_hw_playback(snd_pcm_t *handle, alsad_stream_props_t *stream_props, 00128 alsad_hw_params_t *configd_hw_params, 00129 char *audio_buf); 00130 00131 int alsad_hw_capture(snd_pcm_t *handle, alsad_stream_props_t *stream_props, 00132 alsad_hw_params_t *configd_hw_params, 00133 char *audio_buf); 00134 00135 ssize_t alsad_channel_write(void *channel, void *pipe, char *audiobuf, 00136 size_t total_to_write); 00137 00138 ssize_t alsad_channel_read(void *channel, void *pipe, char *audiobuf, 00139 size_t total_to_read); 00140 00141 ssize_t alsad_file_write(int handle, char *audiobuf, 00142 size_t total_to_write); 00143 00144 ssize_t alsad_file_read(int handle, char *audiobuf, 00145 size_t total_to_read); 00146 00147 int alsad_strerror(int errnum, char *error_buff, size_t buff_size); 00148 00150 #endif