FreeCalypso > hg > freecalypso-tools
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 } |