ref: bece528bdffba490a47dc0d0c634a7faf2801693
parent: 5b7d8e449fb99204478110af1b31b9ecee43c587
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Thu May 3 18:30:32 EDT 2012
nusb/audio: setup audioin
--- a/sys/src/cmd/nusb/audio/audio.c
+++ b/sys/src/cmd/nusb/audio/audio.c
@@ -22,8 +22,10 @@
char user[] = "audio";
Dev *audiodev = nil;
-Ep *audioep = nil;
+Ep *audioepin = nil;
+Ep *audioepout = nil;
+
void
parsedescr(Desc *dd)
{@@ -96,7 +98,10 @@
devctl(d, "samplesz %d", audiochan*audiores/8);
devctl(d, "sampledelay %d", audiodelay);
devctl(d, "hz %d", speed);
- devctl(d, "name audio");
+ if(e->dir == Ein)
+ devctl(d, "name audioin");
+ else
+ devctl(d, "name audio");
return d;
}
@@ -128,12 +133,15 @@
speed = atoi(f[1]);
Setup:
- if((d = setupep(audiodev, audioep, speed)) == nil){+ if((d = setupep(audiodev, audioepout, speed)) == nil){responderror(r);
return;
}
closedev(d);
-
+ if(audioepin != nil && audioepin != audioepout){+ if(d = setupep(audiodev, audioepin, speed))
+ closedev(d);
+ }
audiofreq = speed;
} else if(strcmp(f[0], "delay") == 0){audiodelay = atoi(f[1]);
@@ -160,7 +168,7 @@
main(int argc, char *argv[])
{char buf[32];
- Dev *d;
+ Dev *d, *ed;
Ep *e;
int i;
@@ -187,17 +195,34 @@
parsedescr(d->usb->ddesc[i]);
for(i = 0; i < nelem(d->usb->ep); i++){e = d->usb->ep[i];
- if(e && e->iface && e->iface->csp == CSP(Claudio, 2, 0) && e->dir == Eout)
- goto Foundendp;
+ if(e && e->iface && e->iface->csp == CSP(Claudio, 2, 0)){+ switch(e->dir){+ case Ein:
+ if(audioepin != nil)
+ continue;
+ audioepin = e;
+ break;
+ case Eout:
+ if(audioepout != nil)
+ continue;
+ audioepout = e;
+ break;
+ case Eboth:
+ if(audioepin != nil && audioepout != nil)
+ continue;
+ if(audioepin == nil)
+ audioepin = e;
+ if(audioepout == nil)
+ audioepout = e;
+ break;
+ }
+ if((ed = setupep(audiodev, e, audiofreq)) == nil)
+ sysfatal("setupep: %r");+ closedev(ed);
+ }
}
- sysfatal("no endpoints found");- return;
-
-Foundendp:
- audioep = e;
- if((d = setupep(audiodev, audioep, audiofreq)) == nil)
- sysfatal("setupep: %r");- closedev(d);
+ if(audioepout == nil)
+ sysfatal("no endpoints found");fs.tree = alloctree(user, "usb", DMDIR|0555, nil);
createfile(fs.tree->root, "volume", user, 0666, nil);
--
⑨