comparison rvinterf/etmsync/tmsaur.c @ 841:379574e5cf5e

fc-tmsync aur command implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 31 Jul 2021 08:29:24 +0000
parents
children 9da5fb3f42dd
comparison
equal deleted inserted replaced
840:25a182bc031b 841:379574e5cf5e
1 /*
2 * This fc-tmsync module implements aur commands and operations.
3 */
4
5 #include <sys/types.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <strings.h>
10 #include "etm.h"
11 #include "audio.h"
12 #include "limits.h"
13 #include "localtypes.h"
14 #include "exitcodes.h"
15
16 extern u_char rvi_msg[];
17 extern int rvi_msg_len;
18
19 do_aur(param, data, size)
20 u_char *data;
21 {
22 u_char cmdpkt[5];
23
24 cmdpkt[1] = ETM_AUDIO;
25 cmdpkt[2] = 'R';
26 cmdpkt[3] = param;
27 etm_pkt_exch(cmdpkt, 3);
28 if (rvi_msg[3]) {
29 fprintf(stderr, "target error %u in response to aur\n",
30 rvi_msg[3]);
31 return(ERROR_TARGET);
32 }
33 if (rvi_msg_len < size + 7) {
34 fprintf(stderr, "target error: aur response too short\n");
35 return(ERROR_TARGET);
36 }
37 if (rvi_msg[4] != 'R') {
38 fprintf(stderr, "target error: aur response wrong type\n");
39 return(ERROR_TARGET);
40 }
41 if (rvi_msg[5] != param) {
42 fprintf(stderr, "target error: aur response wrong index\n");
43 return(ERROR_TARGET);
44 }
45 bcopy(rvi_msg + 6, data, size);
46 return(0);
47 }
48
49 cmd_aur(argc, argv)
50 char **argv;
51 {
52 unsigned param, word;
53 u_char data[62];
54 int size, rc, i;
55
56 param = strtoul(argv[1], 0, 0);
57 switch (param) {
58 case AUDIO_PATH_USED:
59 case AUDIO_MICROPHONE_MODE:
60 case AUDIO_MICROPHONE_GAIN:
61 case AUDIO_MICROPHONE_EXTRA_GAIN:
62 case AUDIO_MICROPHONE_OUTPUT_BIAS:
63 case AUDIO_SPEAKER_MODE:
64 case AUDIO_SPEAKER_GAIN:
65 case AUDIO_SPEAKER_FILTER:
66 case AUDIO_SPEAKER_BUZZER_STATE:
67 case AUDIO_MICROPHONE_SPEAKER_LOOP_SIDETONE:
68 case AUDIO_SPEAKER_VOLUME_LEVEL:
69 size = 1;
70 break;
71 case AUDIO_MICROPHONE_FIR:
72 case AUDIO_SPEAKER_FIR:
73 size = 62;
74 break;
75 case AUDIO_MICROPHONE_SPEAKER_LOOP_AEC:
76 size = 24;
77 break;
78 default:
79 fprintf(stderr, "error: unknown aur parameter\n");
80 return(ERROR_USAGE);
81 }
82 rc = do_aur(param, data, size);
83 if (rc)
84 return(rc);
85 switch (param) {
86 case AUDIO_PATH_USED:
87 case AUDIO_SPEAKER_VOLUME_LEVEL:
88 printf("%u\n", data[0]);
89 break;
90 case AUDIO_MICROPHONE_MODE:
91 case AUDIO_MICROPHONE_GAIN:
92 case AUDIO_MICROPHONE_EXTRA_GAIN:
93 case AUDIO_MICROPHONE_OUTPUT_BIAS:
94 case AUDIO_SPEAKER_MODE:
95 case AUDIO_SPEAKER_GAIN:
96 case AUDIO_SPEAKER_FILTER:
97 case AUDIO_SPEAKER_BUZZER_STATE:
98 case AUDIO_MICROPHONE_SPEAKER_LOOP_SIDETONE:
99 i = data[0];
100 if (i >= 128)
101 i -= 256;
102 printf("%d\n", i);
103 break;
104 case AUDIO_MICROPHONE_FIR:
105 case AUDIO_SPEAKER_FIR:
106 fputs("fir-coeff-table\n\n", stdout);
107 for (i = 0; i < 31; i++) {
108 printf("0x%04X", (data[i*2+1] << 8) | data[i*2]);
109 if (i == 7 || i == 15 || i == 23 || i == 30)
110 putchar('\n');
111 else
112 putchar(' ');
113 }
114 break;
115 case AUDIO_MICROPHONE_SPEAKER_LOOP_AEC:
116 fputs("aec-new", stdout);
117 for (i = 0; i < 12; i++) {
118 putchar(' ');
119 word = (data[i*2+1] << 8) | data[i*2];
120 if (word)
121 printf("0x%X", word);
122 else
123 putchar('0');
124 }
125 putchar('\n');
126 break;
127 }
128 return(0);
129 }