/* $Id$ */
/* 
 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
 *
 * 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */
#ifndef __SYSTEST_H__
#define __SYSTEST_H__

#include <pjlib.h>

/*
 * Overrideable parameters
 */
#define REC_DEV_ID			systest_cap_dev_id
#define PLAY_DEV_ID			systest_play_dev_id
//#define REC_DEV_ID			5
//#define PLAY_DEV_ID			5
#define OVERRIDE_AUDDEV_REC_LAT		0
#define OVERRIDE_AUDDEV_PLAY_LAT	0
#define OVERRIDE_AUD_FRAME_PTIME	0

/* Don't change this */
#define CHANNEL_COUNT			1

/* If you change CLOCK_RATE then the input WAV files need to be
 * changed, so normally don't need to change this.
 */
#define TEST_CLOCK_RATE			8000

/* You may change sound device's clock rate as long as resampling
 * is enabled.
 */
#define DEV_CLOCK_RATE			8000


#if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE
    #define LOG_OUT_PATH		"\\PJSYSTEST.TXT"
    #define RESULT_OUT_PATH		"\\PJSYSTEST_RESULT.TXT"
    #define WAV_PLAYBACK_PATH		"\\Program Files\\pjsystest\\input.8.wav"
    #define WAV_REC_OUT_PATH		"\\PJSYSTEST_TESTREC.WAV"
    #define WAV_TOCK8_PATH		"\\Program Files\\pjsystest\\tock8.WAV"
    #define WAV_LATENCY_OUT_PATH	"\\PJSYSTEST_LATREC.WAV"
    #define ALT_PATH1			""
    #define AEC_REC_PATH		"\\PJSYSTEST_AECREC.WAV"
#else
    #define LOG_OUT_PATH		"PJSYSTEST.TXT"
    #define RESULT_OUT_PATH		"PJSYSTEST_RESULT.TXT"
    #define WAV_PLAYBACK_PATH		"input.8.wav"
    #define WAV_REC_OUT_PATH		"PJSYSTEST_TESTREC.WAV"
    #define WAV_TOCK8_PATH		"tock8.wav"
    #define WAV_LATENCY_OUT_PATH	"PJSYSTEST_LATREC.WAV"
    #define ALT_PATH1			"../../tests/pjsua/wavs/"
    #define AEC_REC_PATH		"PJSYSTEST_AECREC.WAV"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* API, to be called by main() */
int	    systest_init(void);
int	    systest_set_dev(int cap_dev, int play_dev);
int	    systest_run(void);
void	    systest_save_result(const char *filename);
void	    systest_deinit(void);

/* Device ID to test */
extern int systest_cap_dev_id;
extern int systest_play_dev_id;

/* Test item is used to record the test result */
typedef struct test_item_t
{
    char	title[80];
    pj_bool_t	skipped;
    pj_bool_t	success;
    char	reason[1024];
} test_item_t;

#define SYSTEST_MAX_TEST    32
extern unsigned	    test_item_count;
extern test_item_t  test_items[SYSTEST_MAX_TEST];
#define PATH_LENGTH	    PJ_MAXPATH
extern char	    doc_path[PATH_LENGTH];
extern char	    res_path[PATH_LENGTH];

test_item_t *systest_alloc_test_item(const char *title);

#ifdef __cplusplus
}
#endif

#endif	/* __SYSTEST_H__ */
