25 #include <sys/ioctl.h>
27 #include <sys/types.h>
52 #define AO_MAP_ZERO 0xffff
70 unsigned * ao_ai_mapping;
74 void updateMuxSelection()
76 FILE *fp = fopen(
"/dev/shm/amx_ao_map",
"r");
79 for (ao_ch = 0; ao_ch < ao_count; ++ao_ch){
83 while (fscanf(fp,
"%d,%d", &ao_ch, &ai_ch) == 2 &&
84 ao_ch >= 1 && ao_ch <= ao_count &&
85 ai_ch >= 1 && ai_ch <= ai_count){
86 ao_ai_mapping[ao_ch-1] = ai_ch-1;
94 ao_count(_ao_count), ai_count(_ai_count), ai_start(_ai_start), ai_stride(_ai_stride), wavelen(_wavelen),
97 fprintf(stderr,
"%s ao_dev:%d ao:%d ai:%d ai_start:%d ai_stride:%d wavelen:%d\n", __FUNCTION__,
98 ao_dev, ao_count, ai_count, ai_start, ai_stride, wavelen);
101 ao_ai_mapping =
new unsigned[ao_count];
102 for (
int ao_ch = 0; ao_ch < ao_count; ++ao_ch){
103 ao_ai_mapping[ao_ch] = ao_ch;
106 perror(
"ioctl AFHBA_AO_BURST_INIT");
114 const short* ai0 = (
const short*)src;
115 const short* ai = ai0;
117 const int instep = ai_count*ai_stride;
118 updateMuxSelection();
120 for (
int sample = 0; sample < wavelen; ++sample, ai += instep, ao += ao_count){
121 if ((
const char*)(ai+ai_count) - (
const char*)ai0 > dev->
maxlen){
122 fprintf(stderr,
"%s ai overflow at sample:%d\n", __FUNCTION__, sample);
125 for (
int ao_ch = 0; ao_ch < ao_count; ++ao_ch){
126 unsigned ai_ch = ao_ai_mapping[ao_ch];
131 perror(
"ioctl AFHBA_AO_BURST_SETBUF");
139 if (
const char* value =
getenv(
"MUXAO")){
141 if (sscanf(value,
"%d,%d,%d,%d,%d,%d", pr+0, pr+1, pr+2, pr+3, pr+4, pr+5) == 6){