From 6772f29e12b7755c3d7b19db22cdd22992425959 Mon Sep 17 00:00:00 2001 From: Pierre GRANDIN Date: Mon, 30 Jan 2017 10:49:43 -0800 Subject: Reducing code duplication in the tomtom builds (#201) * Reducing code duplication in the tomtom builds * Reducing code duplication in the tomtom builds * Reducing code duplication in the tomtom builds * Track each build result to catch errors * Track each build result to catch errors * Stop builds on errors * Working on the tomtom plugin build * Moving espeak for tomtom to the common script * Moving sdl tests for tomtom to the common script * fix espeakdsp buffer usage for tomtom (#200) * fix buffer usage dont send more bytes then received. * remove last blank line * Disabling dbus tests, needs investigation --- contrib/tomtom/espeakdsp.c | 101 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 contrib/tomtom/espeakdsp.c (limited to 'contrib/tomtom') diff --git a/contrib/tomtom/espeakdsp.c b/contrib/tomtom/espeakdsp.c new file mode 100644 index 000000000..bd6689a1f --- /dev/null +++ b/contrib/tomtom/espeakdsp.c @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define espeakpath "/mnt/sdcard/navit/bin/espeak" +#define IBUFFERLEN 1024 +#define MAXARGC 30 + + +int main(int argc, char *argv[],char *envp[]) +{ + int pipefd[2]; + pid_t cpid; + char buf; + int co,wp,l,fh; + short bufi[IBUFFERLEN],bufo[IBUFFERLEN*2]; + int rate=22050; + + char *newargv[MAXARGC+2]; + + for(co=0;co=MAXARGC)break; + newargv[co]=argv[co]; + } + newargv[co++]="--stdout"; + newargv[co++]=NULL; + + if (pipe(pipefd) == -1) + { + perror("pipe"); + exit(EXIT_FAILURE); + } + + if(setpriority(PRIO_PROCESS,0,-10)) + perror ("setpriority"); + + cpid = fork(); + if (cpid == -1) + { + perror("fork"); + exit(EXIT_FAILURE); + } + + if (cpid == 0) + { /* Child writes to pipe */ + + close(pipefd[0]); /* Close unused read end */ + dup2(pipefd[1],1); + execve(espeakpath,newargv,envp); + perror(espeakpath); + close(pipefd[1]); /* Reader will see EOF */ + wait(NULL); /* Wait for child */ + exit(EXIT_SUCCESS); + + } else { /* Parent read from pipe */ + + close(pipefd[1]); /* Close unused write end */ + + l=read(pipefd[0],bufi,64); + if(memcmp(bufi,"RIFF",4)) + { + while(l>0) + { + write(1,bufi,l); + l=read(pipefd[0],bufi,IBUFFERLEN); + } + exit(EXIT_SUCCESS); + } + l=read(pipefd[0],bufi,IBUFFERLEN); + + fh=open("/dev/dsp",O_WRONLY); + if(fh<0) + { + perror("open /dev/dsp"); + exit(EXIT_FAILURE); + } + ioctl(fh, SNDCTL_DSP_SPEED , &rate); + ioctl(fh, SNDCTL_DSP_SYNC, 0); + while(l) + { + for(co=0,wp=0;(costereo */ + bufo[wp++]=bufi[co]; + } + write (fh,bufo,wp); + l=read(pipefd[0],bufi,IBUFFERLEN); + } + ioctl(fh, SNDCTL_DSP_SYNC, 0); + close(pipefd[0]); + exit(EXIT_SUCCESS); + } +} -- cgit v1.2.1