//------------------------------------------------------------------------- bool CVCRControl::CServerDevice::sendCommand(CVCRCommand command, const t_channel_id channel_id, unsigned long long epgid, uint apid) { printf("Send command: %d channel_id: %x epgid: %llx\n",command, channel_id, epgid); if(serverConnect()) { char tmp[40]; string extCommand="unknown"; string ext_channel_id = "error"; string ext_channel_name = "unknown"; string extEpgid="error"; string extVideoPID="error"; string extAudioPID="error"; string extEPGTitle="not available"; sprintf(tmp,"%u", channel_id); ext_channel_id = tmp; sprintf(tmp,"%llu", epgid); extEpgid = tmp; // sprintf(tmp,"%u", g_RemoteControl->current_PIDs.PIDs.vpid ); CZapitClient::responseGetPIDs pids; g_Zapit->getPIDS (pids); CZapitClient::CCurrentServiceInfo si = g_Zapit->getCurrentServiceInfo (); sprintf(tmp,"%u", si.vdid ); extVideoPID = tmp; // sprintf(tmp,"%u", g_RemoteControl->current_PIDs.APIDs[g_RemoteControl->current_PIDs.PIDs.selected_apid].pid); if(apid==0) apid=(uint)si.apid; sprintf(tmp,"%u", apid); extAudioPID = tmp; CZapitClient::BouquetChannelList channellist; g_Zapit->getChannels(channellist); CZapitClient::BouquetChannelList::iterator channel = channellist.begin(); for(; channel != channellist.end();channel++) { if(channel->channel_id==channel_id) { ext_channel_name=channel->name; break; } } CSectionsdClient sections; CSectionsdClient::responseGetCurrentNextInfoChannelID current_next; if(sections.getCurrentNextServiceKey(channel_id, current_next)) { extEPGTitle=current_next.current_name; } switch(command) { case CMD_VCR_RECORD: extCommand="record"; break; case CMD_VCR_STOP: extCommand="stop"; break; case CMD_VCR_PAUSE: extCommand="pause"; break; case CMD_VCR_RESUME: extCommand="resume"; break; case CMD_VCR_AVAILABLE: extCommand="available"; break; case CMD_VCR_UNKNOWN: default: printf("CVCRControl: Unknown Command\n"); } string extMessage = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n\n"; extMessage +="<neutrino commandversion=\"1\">\n"; extMessage +=" <record command=\"" + extCommand + "\">\n"; extMessage +=" <channelname>" + ext_channel_name + "</channelname>\n"; extMessage +=" <epgtitle>" + extEPGTitle + "</epgtitle>\n"; extMessage +=" <onidsid>" + ext_channel_id + "</onidsid>\n"; extMessage +=" <epgid>" + extEpgid + "</epgid>\n"; extMessage +=" <videopid>" + extVideoPID + "</videopid>\n"; extMessage +=" <audiopids selected=\"" + extAudioPID + "\">\n"; // super hack :-), der einfachste weg an die apid descriptions ranzukommen g_RemoteControl->current_PIDs = pids; g_RemoteControl->processAPIDnames(); bool apidFound=false; for(unsigned int i= 0; i< pids.APIDs.size(); i++) { sprintf(tmp, "%u", pids.APIDs[i].pid ); extMessage +=" <audio pid=\"" + string(tmp) + "\" name=\"" + string(g_RemoteControl->current_PIDs.APIDs[i].desc) + "\">\n"; if(pids.APIDs[i].pid==apid) apidFound=true; } if(!apidFound) { // add spec apid to available extMessage +=" <audio pid=\"" + extAudioPID + "\" name=\"" + extAudioPID + "\"/>\n"; } extMessage +=" </audiopids>\n"; extMessage +=" </record>\n"; extMessage +="</neutrino>\n"; printf("sending to vcr-client:\n\n%s\n", extMessage.c_str()); write(sock_fd, extMessage.c_str() , extMessage.length() ); serverDisconnect(); deviceState = command; return true; } else return false; }