00001
00002
00003
00004
00005
00006 #include "ProcessFramework.h"
00007
00008 SoundDataSender::SoundDataSender(PlatformProcess* process,bool blocking)
00009 : SenderBase<SoundData>(process,"Sender.OSoundVectorData.S",blocking)
00010 {
00011 package[0] = 0;
00012
00013 OPrimitiveID soundId;
00014 VERIFY(OPENR::OpenPrimitive(SystemCall::getRobotDesign() == RobotDesign::ERS210
00015 ? "PRM:/r1/c1/c2/c3/s1-Speaker:S1"
00016 : "PRM:/s1-Speaker:S1",&soundId) == oSUCCESS);
00017 OSpeakerSoundType type = ospksndMONO8K8B;
00018 VERIFY(OPENR::ControlPrimitive(soundId,oprmreqSPEAKER_SET_SOUND_TYPE,&type,sizeof(type),0,0) == oSUCCESS);
00019 int vol = SystemCall::getRobotDesign() == RobotDesign::ERS210 ? 0xf400 : 0xf600;
00020 VERIFY(OPENR::ControlPrimitive(soundId,oprmreqSPEAKER_SET_VOLUME,&vol,sizeof(vol),0,0) == oSUCCESS);
00021
00022 for(int i = 0; i < 2; ++i)
00023 {
00024 VERIFY(OPENR::NewSoundVectorData(1, 256, &memID[i], &soundVec[i]) == oSUCCESS);
00025 soundVec[i]->SetNumData(1);
00026 OSoundInfo* info = soundVec[i]->GetInfo(0);
00027 info->Set(odataSOUND_VECTOR,soundId,info->maxDataSize);
00028 }
00029 }
00030
00031 SoundDataSender::~SoundDataSender()
00032 {
00033 for(int i = 0; i < 2; ++i)
00034 VERIFY(OPENR::DeleteSoundVectorData(memID[i]) == oSUCCESS);
00035 }
00036
00037 void SoundDataSender::prepare(int i)
00038 {
00039 const SoundData& soundData = *static_cast<const SoundData*>(this);
00040 OSoundInfo* info = soundVec[i]->GetInfo(0);
00041 info->dataSize = info->frameSize;
00042 info->samplingRate = 8000;
00043 info->bitsPerSample = 8;
00044 memcpy(soundVec[i]->GetData(0),soundData.pcmBuffer,256);
00045 }
00046
00047 void SoundDataSender::preparePackage()
00048 {
00049 if(!package[0])
00050 {
00051 for(int i = 0; i < 2; ++i)
00052 {
00053 VERIFY(package[i] = new RCRegion(soundVec[i]->vectorInfo.memRegionID,
00054 soundVec[i]->vectorInfo.offset,
00055 (void*) soundVec[i],
00056 soundVec[i]->vectorInfo.totalSize));
00057 prepare(i);
00058 }
00059 index = -1;
00060 }
00061 else
00062 prepare(index);
00063 }
00064
00065 void SoundDataSender::setPackage(const ObserverID& receiver)
00066 {
00067 for(int l = 0; l < 2; l++)
00068 {
00069 if (package[l]->NumberOfReference() == 1)
00070 {
00071 VERIFY(SetData(receiver,package[l]) == oSUCCESS);
00072 }
00073 }
00074 }
00075
00076
00077 void SoundDataSender::freePackage()
00078 {
00079 if(index == -1)
00080 index = 0;
00081 else
00082 index = 1 - index;
00083 }
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124