2006-12-18 15:39:33 +01:00
|
|
|
/******************************************************************************\
|
2008-04-08 20:38:55 +02:00
|
|
|
* Copyright (c) 2004-2008
|
2006-12-18 15:39:33 +01:00
|
|
|
*
|
|
|
|
* Author(s):
|
|
|
|
* Volker Fischer
|
|
|
|
*
|
|
|
|
******************************************************************************
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
2008-04-08 20:38:55 +02:00
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
2006-12-18 15:39:33 +01:00
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
2008-04-08 20:38:55 +02:00
|
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
2006-12-18 15:39:33 +01:00
|
|
|
* details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with
|
2008-04-08 20:38:55 +02:00
|
|
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
2006-12-18 15:39:33 +01:00
|
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
\******************************************************************************/
|
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
#if !defined ( GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_ )
|
2006-12-18 15:39:33 +01:00
|
|
|
#define GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_
|
|
|
|
|
2008-01-20 19:07:13 +01:00
|
|
|
#include <qstring.h>
|
|
|
|
#include <qevent.h>
|
|
|
|
#include <qdebug.h>
|
2006-12-18 15:39:33 +01:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include <string>
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Definitions ****************************************************************/
|
2007-09-08 12:45:14 +02:00
|
|
|
// define this macro to get debug output
|
2006-12-18 15:39:33 +01:00
|
|
|
#define _DEBUG_
|
|
|
|
#undef _DEBUG_
|
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// version and application name (always use this version)
|
2006-12-18 15:39:33 +01:00
|
|
|
#undef VERSION
|
2008-08-03 12:31:37 +02:00
|
|
|
#define VERSION "2.1.2cvs"
|
2006-12-18 15:39:33 +01:00
|
|
|
#define APP_NAME "llcon"
|
|
|
|
|
2007-05-06 14:27:41 +02:00
|
|
|
// file name for logging file
|
|
|
|
#define LOG_FILE_NAME "llconsrvlog.txt"
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-04-08 20:38:55 +02:00
|
|
|
// defined port number for client and server
|
2006-12-18 15:39:33 +01:00
|
|
|
#define LLCON_PORT_NUMBER 22122
|
|
|
|
|
2008-08-05 22:59:01 +02:00
|
|
|
// system sample rate
|
|
|
|
#define SYSTEM_SAMPLE_RATE 24000
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-04-08 20:38:55 +02:00
|
|
|
// sound card sample rate. Should be always 48 kHz to avoid sound card driver
|
|
|
|
// internal sample rate conversion which might be buggy
|
2006-12-18 15:39:33 +01:00
|
|
|
#define SND_CRD_SAMPLE_RATE 48000
|
|
|
|
|
2008-04-08 20:38:55 +02:00
|
|
|
// minimum block duration - all other buffer durations must be a multiple
|
|
|
|
// of this duration
|
|
|
|
#define MIN_BLOCK_DURATION_MS 2 // ms
|
2006-01-28 12:29:22 +01:00
|
|
|
|
2008-08-05 22:59:01 +02:00
|
|
|
#define MIN_BLOCK_SIZE_SAMPLES ( MIN_BLOCK_DURATION_MS * SYSTEM_SAMPLE_RATE / 1000 )
|
2006-11-25 15:46:57 +01:00
|
|
|
#define MIN_SND_CRD_BLOCK_SIZE_SAMPLES ( MIN_BLOCK_DURATION_MS * SND_CRD_SAMPLE_RATE / 1000 )
|
2006-01-28 12:29:22 +01:00
|
|
|
|
2006-03-11 21:35:38 +01:00
|
|
|
// maximum value of factor for network block size
|
2008-08-03 23:38:24 +02:00
|
|
|
#define MAX_NET_BLOCK_SIZE_FACTOR 3
|
2006-10-30 21:35:46 +01:00
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// default network block size factor
|
2006-11-25 15:46:57 +01:00
|
|
|
#define DEF_NET_BLOCK_SIZE_FACTOR 3
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// maximum network buffer size (which can be chosen by slider)
|
|
|
|
#define MAX_NET_BUF_SIZE_NUM_BL 10 // number of blocks
|
2006-10-30 21:35:46 +01:00
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// default network buffer size
|
|
|
|
#define DEF_NET_BUF_SIZE_NUM_BL 5 // number of blocks
|
2006-01-28 12:29:22 +01:00
|
|
|
|
|
|
|
// number of ticks of audio in/out buffer sliders
|
2008-07-17 20:39:24 +02:00
|
|
|
# define AUD_SLIDER_LENGTH 8
|
2006-12-09 16:00:24 +01:00
|
|
|
|
|
|
|
// maximum number of internet connections (channels)
|
2006-12-09 19:37:40 +01:00
|
|
|
// if you want to change this paramter, there has to be done code modifications
|
|
|
|
// on other places, too! The code tag "MAX_NUM_CHANNELS_TAG" shows these places
|
|
|
|
// (just search for the tag in the entire code)
|
2008-07-22 18:13:04 +02:00
|
|
|
#define MAX_NUM_CHANNELS 6 // max number channels for server
|
2006-01-28 12:29:22 +01:00
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// sample rate offset estimation algorithm
|
|
|
|
// time interval for sample rate offset estimation
|
|
|
|
#define TIME_INT_SAM_OFFS_EST 60 // s
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// length of the moving average buffer for response time measurement
|
|
|
|
#define TIME_MOV_AV_RESPONSE 30 // seconds
|
|
|
|
#define LEN_MOV_AV_RESPONSE ( TIME_MOV_AV_RESPONSE * 1000 / MIN_BLOCK_DURATION_MS )
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-01-15 23:54:04 +01:00
|
|
|
// GUI definition: width/heigth size of LED pixmaps
|
|
|
|
#define LED_WIDTH_HEIGHT_SIZE_PIXEL 13
|
|
|
|
|
2006-12-18 15:39:33 +01:00
|
|
|
|
|
|
|
#define _MAXSHORT 32767
|
2007-09-08 12:45:14 +02:00
|
|
|
#define _MAXBYTE 255 // binary: 11111111
|
|
|
|
#define _MINSHORT ( -32768 )
|
2006-02-18 23:05:46 +01:00
|
|
|
|
|
|
|
#if HAVE_STDINT_H
|
|
|
|
# include <stdint.h>
|
|
|
|
#elif HAVE_INTTYPES_H
|
|
|
|
# include <inttypes.h>
|
|
|
|
#elif defined ( _WIN32 )
|
|
|
|
typedef unsigned __int32 uint32_t;
|
|
|
|
typedef unsigned __int16 uint16_t;
|
|
|
|
typedef unsigned __int8 uint8_t;
|
|
|
|
#else
|
|
|
|
typedef unsigned int uint32_t;
|
|
|
|
typedef unsigned short uint16_t;
|
|
|
|
typedef unsigned char uint8_t;
|
|
|
|
#endif
|
2006-12-18 15:39:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* Definitions for window message system ------------------------------------ */
|
|
|
|
typedef unsigned int _MESSAGE_IDENT;
|
2007-09-08 12:45:14 +02:00
|
|
|
#define MS_RESET_ALL 0 // MS: Message
|
2006-12-18 15:39:33 +01:00
|
|
|
#define MS_SOUND_IN 1
|
|
|
|
#define MS_SOUND_OUT 2
|
|
|
|
#define MS_JIT_BUF_PUT 3
|
2006-11-25 15:46:57 +01:00
|
|
|
#define MS_JIT_BUF_GET 4
|
|
|
|
#define MS_PACKET_RECEIVED 5
|
|
|
|
#define MS_PROTOCOL 6
|
2008-07-15 22:33:41 +02:00
|
|
|
#define MS_ERROR_IN_THREAD 7
|
2006-12-18 15:39:33 +01:00
|
|
|
|
|
|
|
#define MUL_COL_LED_RED 0
|
|
|
|
#define MUL_COL_LED_YELLOW 1
|
|
|
|
#define MUL_COL_LED_GREEN 2
|
|
|
|
|
|
|
|
|
|
|
|
/* Classes ********************************************************************/
|
|
|
|
class CGenErr
|
|
|
|
{
|
|
|
|
public:
|
2008-07-22 17:17:19 +02:00
|
|
|
CGenErr ( QString strNewErrorMsg, QString strNewErrorType = "" ) :
|
|
|
|
strErrorMsg ( strNewErrorMsg ), strErrorType ( strNewErrorType ) {}
|
|
|
|
|
|
|
|
QString GetErrorText()
|
|
|
|
{
|
|
|
|
// return formatted error text
|
|
|
|
if ( strErrorType.isEmpty() )
|
|
|
|
{
|
|
|
|
return strErrorMsg;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return strErrorType + ": " + strErrorMsg;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
QString strErrorType;
|
|
|
|
QString strErrorMsg;
|
2006-12-18 15:39:33 +01:00
|
|
|
};
|
|
|
|
|
2008-01-14 23:14:17 +01:00
|
|
|
class CLlconEvent : public QEvent
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
|
|
|
public:
|
2007-09-08 12:45:14 +02:00
|
|
|
CLlconEvent ( int iNewMeTy, int iNewSt, int iNewChN = 0 ) :
|
2008-01-14 23:14:17 +01:00
|
|
|
QEvent ( QEvent::Type ( QEvent::User + 11 ) ), iMessType ( iNewMeTy ), iStatus ( iNewSt ),
|
2007-09-08 12:45:14 +02:00
|
|
|
iChanNum ( iNewChN ) {}
|
2006-12-18 15:39:33 +01:00
|
|
|
|
|
|
|
int iMessType;
|
|
|
|
int iStatus;
|
|
|
|
int iChanNum;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* Prototypes for global functions ********************************************/
|
2007-09-09 11:50:22 +02:00
|
|
|
// command line parsing, TODO do not declare functions globally but in a class
|
2008-01-14 23:14:17 +01:00
|
|
|
std::string UsageArguments ( char **argv );
|
|
|
|
bool GetFlagArgument ( int, char **argv, int &i, std::string strShortOpt, std::string strLongOpt );
|
|
|
|
bool GetStringArgument ( int argc, char **argv, int &i, std::string strShortOpt, std::string strLongOpt, std::string & strArg );
|
2007-09-09 11:50:22 +02:00
|
|
|
bool GetNumericArgument ( int argc, char **argv, int &i, std::string strShortOpt, std::string strLongOpt, double rRangeStart, double rRangeStop, double & rValue);
|
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
// posting a window message
|
|
|
|
void PostWinMessage ( const _MESSAGE_IDENT MessID, const int iMessageParam = 0,
|
|
|
|
const int iChanNum = 0 );
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2007-09-08 12:45:14 +02:00
|
|
|
#endif /* !defined ( GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_ ) */
|