|
a/sc2src/sc2mpd.cpp |
|
b/sc2src/sc2mpd.cpp |
|
... |
|
... |
109 |
using namespace OpenHome;
|
109 |
using namespace OpenHome;
|
110 |
using namespace OpenHome::Net;
|
110 |
using namespace OpenHome::Net;
|
111 |
using namespace OpenHome::TestFramework;
|
111 |
using namespace OpenHome::TestFramework;
|
112 |
using namespace OpenHome::Av;
|
112 |
using namespace OpenHome::Av;
|
113 |
|
113 |
|
114 |
|
|
|
115 |
class OhmReceiverDriver : public IOhmReceiverDriver, public IOhmMsgProcessor {
|
114 |
class OhmReceiverDriver : public IOhmReceiverDriver, public IOhmMsgProcessor {
|
116 |
public:
|
115 |
public:
|
117 |
OhmReceiverDriver(AudioEater* eater, AudioEater::Context *ctxt);
|
116 |
OhmReceiverDriver(AudioEater* eater, AudioEater::Context *ctxt);
|
118 |
|
117 |
|
119 |
private:
|
118 |
private:
|
|
... |
|
... |
456 |
}
|
455 |
}
|
457 |
#endif
|
456 |
#endif
|
458 |
|
457 |
|
459 |
#define SOCK_PATH "/tmp/sc2mpd.sock"
|
458 |
#define SOCK_PATH "/tmp/sc2mpd.sock"
|
460 |
#define BUF_SIZE 16
|
459 |
#define BUF_SIZE 16
|
461 |
void HandleUserCmd(OhmReceiver* receiver, const Brx& aUri)
|
460 |
void HandleUserCmd(OhmReceiver* receiver, AudioEater* audio, const Brx& aUri)
|
462 |
{
|
461 |
{
|
463 |
struct sockaddr_un server_addr, client_addr;
|
462 |
struct sockaddr_un server_addr, client_addr;
|
464 |
struct timeval read_timeout;
|
463 |
struct timeval read_timeout;
|
465 |
socklen_t len;
|
464 |
socklen_t len;
|
466 |
ssize_t num_bytes;
|
465 |
ssize_t num_bytes;
|
|
... |
|
... |
519 |
string(buf, num_bytes) << endl);
|
518 |
string(buf, num_bytes) << endl);
|
520 |
if (strncmp("play", buf, num_bytes) == 0)
|
519 |
if (strncmp("play", buf, num_bytes) == 0)
|
521 |
receiver->Play(aUri);
|
520 |
receiver->Play(aUri);
|
522 |
else if (strncmp("stop", buf, num_bytes) == 0)
|
521 |
else if (strncmp("stop", buf, num_bytes) == 0)
|
523 |
receiver->Stop();
|
522 |
receiver->Stop();
|
524 |
|
523 |
else if (strncmp("state", buf, num_bytes) == 0) {
|
|
|
524 |
response = "Unknown";
|
|
|
525 |
if (audio->state) {
|
|
|
526 |
switch (audio->state()) {
|
|
|
527 |
case AudioEater::AudioState::STOPPED:
|
|
|
528 |
response = "Stopped"; break;
|
|
|
529 |
case AudioEater::AudioState::PLAYING:
|
|
|
530 |
response = "Playing"; break;
|
|
|
531 |
case AudioEater::AudioState::UNKNOWN:
|
|
|
532 |
break;
|
|
|
533 |
}
|
|
|
534 |
}
|
|
|
535 |
}
|
525 |
ssize_t bytes_sent = sendto(sockfd, (const void *)response.c_str(),
|
536 |
ssize_t bytes_sent = sendto(sockfd, (const void *)response.c_str(),
|
526 |
response.length(), 0,
|
537 |
response.length(), 0,
|
527 |
(struct sockaddr *)&client_addr, len);
|
538 |
(struct sockaddr *)&client_addr, len);
|
528 |
if (bytes_sent == -1) {
|
539 |
if (bytes_sent == -1) {
|
529 |
LOGERR("Error: Cannot write to socket: " <<
|
540 |
LOGERR("Error: Cannot write to socket: " <<
|
|
... |
|
... |
634 |
|
645 |
|
635 |
LOGINF("scmpdcli: using subnet " << (subnet & 0xff) << "." <<
|
646 |
LOGINF("scmpdcli: using subnet " << (subnet & 0xff) << "." <<
|
636 |
((subnet >> 8) & 0xff) << "." << ((subnet >> 16) & 0xff) << "." <<
|
647 |
((subnet >> 8) & 0xff) << "." << ((subnet >> 16) & 0xff) << "." <<
|
637 |
((subnet >> 24) & 0xff) << endl);
|
648 |
((subnet >> 24) & 0xff) << endl);
|
638 |
|
649 |
|
639 |
OhmReceiverDriver* driver =
|
650 |
AudioEater* eater = optionDevice.Value() ?
|
640 |
new OhmReceiverDriver(optionDevice.Value() ?
|
|
|
641 |
&alsaAudioEater : &httpAudioEater, ctxt);
|
651 |
&alsaAudioEater : &httpAudioEater;
|
|
|
652 |
|
|
|
653 |
OhmReceiverDriver* driver = new OhmReceiverDriver(eater, ctxt);
|
642 |
|
654 |
|
643 |
OhmReceiver* receiver = new OhmReceiver(lib->Env(), adapter, ttl, *driver);
|
655 |
OhmReceiver* receiver = new OhmReceiver(lib->Env(), adapter, ttl, *driver);
|
644 |
|
656 |
|
645 |
CpStack* cpStack = lib->StartCp(subnet);
|
657 |
CpStack* cpStack = lib->StartCp(subnet);
|
646 |
cpStack = cpStack; // avoid unused variable warning
|
658 |
cpStack = cpStack; // avoid unused variable warning
|
|
... |
|
... |
670 |
if (optionDevice.Value()) {
|
682 |
if (optionDevice.Value()) {
|
671 |
startWatcher(config);
|
683 |
startWatcher(config);
|
672 |
}
|
684 |
}
|
673 |
receiver->Play(uri);
|
685 |
receiver->Play(uri);
|
674 |
for (;;) {
|
686 |
for (;;) {
|
675 |
HandleUserCmd(receiver, uri);
|
687 |
HandleUserCmd(receiver, eater, uri);
|
676 |
if (g_quitrequest) {
|
688 |
if (g_quitrequest) {
|
677 |
LOGDEB("Quit requested\n");
|
689 |
LOGDEB("Quit requested\n");
|
678 |
break;
|
690 |
break;
|
679 |
}
|
691 |
}
|
680 |
sleep(1000);
|
692 |
sleep(1000);
|