blob: 06b57d4ab07104f2a6bdadc5180673bf4e0f386b [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <linux/ioctl.h>
typedef enum
{
VP_PATH_HANDSET =0,
VP_PATH_SPEAKER,
VP_PATH_HEADSET,
VP_PATH_BLUETOOTH,
VP_PATH_BLUETOOTH_NO_NR,
VP_PATH_HSANDSPK,
VP_PATH_OFF = 255,
MAX_VP_PATH = VP_PATH_OFF
}T_ZDrv_VpPath;
typedef enum
{
VP_VOL_0 =0,
VP_VOL_1,
VP_VOL_2,
VP_VOL_3,
VP_VOL_4,
VP_VOL_5,
VP_VOL_6,
VP_VOL_7,
VP_VOL_8,
VP_VOL_9,
VP_VOL_10,
VP_VOL_11,
MAX_VP_VOL
}T_ZDrv_VpVol;
typedef enum
{
VOICE_GSM_MODE = 0,
VOICE_TD_MODE ,
VOICE_WCDMA_MODE,
VOICE_LTE_MODE,
VOICE_GSM_TD_MODE,//GSM TD share
VOICE_GSM_WCDMA_MODE, //GSM WCDMA share
MAX_VOICE_MODE
} T_ZDrvVoice_MODE;
typedef struct testnxp{
int fs;
int voicemode;
int vp_path;
int vp_vol;
int framecount;
}T_TestNxp;
#define TESTNXP_IOCTL_RXIN_TO_RXOUT_START _IOW('N', 1, T_TestNxp)
#define TESTNXP_IOCTL_RXIN_TO_RXOUT_STOP _IO('N', 2)
#define MAX_NXP_BUF 640
static char *TESTNXP_DeviceName = (char *)"/dev/testnxp_dev";
int main(int argc, char** argv)
{
int fd = -1;
FILE *file_rxin, *file_rxout;
T_TestNxp nxp_param = {8000, VOICE_GSM_MODE, VP_PATH_HANDSET, VP_VOL_4, 160};
int size = 0, num_read = 0;
char buffer[640] = {0};
char *filename;
if (argc < 2) {
fprintf(stderr, "Usage: %s filename_in filename_out [-f fs] [-m voicemode 0:gsm 2:wcdma 3:lte] [-p path 0:handset 1:spk 2:headset] [-v vol]\n", argv[0]);
return -1;
}
printf("nxp_test open 1\n");
filename = argv[1];
file_rxin = fopen(filename, "rb");
if (!file_rxin) {
fprintf(stderr, "Unable to open file '%s'\n", argv[1]);
return -1;
}
printf("nxp_test open 2\n");
file_rxout = fopen(argv[2], "wb");
if (!file_rxout) {
fprintf(stderr, "Unable to create file '%s'\n", argv[2]);
fclose(file_rxin);
return -1;
}
argv += 3;
while (*argv) {
if (strcmp(*argv, "-f") == 0) {
argv++;
if (*argv)
nxp_param.fs = atoi(*argv);
}
if (strcmp(*argv, "-m") == 0) {
argv++;
if (*argv)
nxp_param.voicemode = atoi(*argv);
}
if (strcmp(*argv, "-p") == 0) {
argv++;
if (*argv)
nxp_param.vp_path = atoi(*argv);
}
if (strcmp(*argv, "-v") == 0) {
argv++;
if (*argv)
nxp_param.vp_vol = atoi(*argv);
}
if (*argv)
argv++;
}
printf("nxp_test open 3\n");
fd = open(TESTNXP_DeviceName, O_RDWR);
if(fd < 0)
{
printf("audiostart: open device error.\n");
fclose(file_rxin);
fclose(file_rxout);
return -1;
}
printf("nxp_test open 4\n");
if (nxp_param.fs = 8000)
nxp_param.framecount = 160;
else if(nxp_param.fs = 16000)
nxp_param.framecount = 320;
size = nxp_param.framecount * 2;
if (ioctl(fd, TESTNXP_IOCTL_RXIN_TO_RXOUT_START, &nxp_param))
{
printf("testnxp: TESTNXP_IOCTL_RXIN_TO_RXOUT error.\n");
close(fd);
fclose(file_rxin);
fclose(file_rxout);
return -1;
}
do {
num_read = fread(buffer, 1, size, file_rxin);
if (num_read > 0) {
write(fd, buffer, num_read);
read(fd, buffer, num_read);
fwrite(buffer, 1, num_read, file_rxout);
}
} while (num_read > 0);
ioctl(fd, TESTNXP_IOCTL_RXIN_TO_RXOUT_STOP, NULL);
close(fd);
fclose(file_rxin);
fclose(file_rxout);
return 0;
}