summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorPierre GRANDIN <pgrandin@users.noreply.github.com>2017-01-30 10:49:43 -0800
committerGitHub <noreply@github.com>2017-01-30 10:49:43 -0800
commit6772f29e12b7755c3d7b19db22cdd22992425959 (patch)
treeb5d268de8545e4dccd23f2cdc03dbb932007d274 /contrib
parent179c1c344b00bcde8069b56559361dfcd9a94f19 (diff)
downloadnavit-6772f29e12b7755c3d7b19db22cdd22992425959.tar.gz
Reducing code duplication in the tomtom builds (#201)R7272
* 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
Diffstat (limited to 'contrib')
-rw-r--r--contrib/tomtom/espeakdsp.c101
1 files changed, 101 insertions, 0 deletions
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 <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/soundcard.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <libgen.h>
+
+#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<argc;co++)
+ {
+ if(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;(co<IBUFFERLEN)&&(co<l);co++)
+ {
+ bufo[wp++]=bufi[co]; /* mono->stereo */
+ 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);
+ }
+}