Разработка функций для класса интерфейса между модулем УШ и модулем протокола RTP

Отчет по практике - Компьютеры, программирование

Другие отчеты по практике по предмету Компьютеры, программирование

if (ParamRtpPrint[m_ucIndDO] & k)

m_vSDataCtrl.SpeachSize;=(m_pvTmpPlayBackBuf+i)->m_ucData;">{=(m_pvTmpPlayBackBuf+i)->m_vSDataCtrl.SpeachSize;=(m_pvTmpPlayBackBuf+i)->m_ucData;(" [%i] : CN-x, tone-x, size-%i, newCtrl-%i\n",i,

m_vSDataCtrl.CN,">(m_pvTmpPlayBackBuf+i)->m_vSDataCtrl.CN,

m_vSDataCtrl.Tone,uiSize,(m_pvTmpPlayBackBuf+i)->m_vSDataCtrl.NewLineCtrl);(uiSize)">(m_pvTmpPlayBackBuf+i)->m_vSDataCtrl.Tone, uiSize,(m_pvTmpPlayBackBuf+i)->m_vSDataCtrl.NewLineCtrl);(uiSize)

{[0]=\0;(ii=0,j=0, n=0; (j<MAX_SPEECH_SIZE) && (j<uiSize); j++,n++)

{(&buf1[ii],400," X", pucData[j]);+=3;((ii<399) && (n==30)) {n=0; buf1[ii++]=\n;}

}(buf1);

}

}>>=1;

}

}

return (true);

}

/**НАЗНАЧЕНИЕ : поместить данные КИ в буфер воспроизведения

* ВХОДНЫЕ ПАРАМЕТРЫ : ucCI - номер канального интервала [0-31],

* vSData - данные,

* ВЫХОДНЫЕ ПАРАМЕТРЫ: sizeof(Sdata) - успешное выполнение,

* 0 - данные не помещенны, т.к. буфер воспроизведения пустой

*-1 - номер КИ > 31

*/t_UHInterface::PutDataToPlayBackBuf(unsigned char ucCI, SData &vSData)

{

int n;

31) return (-1);_PlayBackBuf.lock();">// printf("===RTP: PutDataToPlayBackBuf\n");(ucCI >31) return (-1);_PlayBackBuf.lock();

 

n=m_iPlayBackPutInd[ucCI]<<5;

// помещаем данные в буфер накопления

m_pvPlayBackBuf[ucCI+n]= vSData;

m_iPlayBackPutInd[ucCI]++; // увеличиваем значение индекса для следующего помещения данных(m_iPlayBackPutInd[ucCI]==m_ucMaxPlayBackBufInd) m_iPlayBackPutInd[ucCI]=0; // циклический переход в начало_iPlayBackIndDelta[ucCI]++; // увеличиваем расстояние по отношению к индексу для извлечения

if (m_iPlayBackIndDelta[ucCI] > m_ucMaxPlayBackBufInd)

{

// фиксируем состояние переполнения буфера воспроизведения

printf("PlayBack buf overflow for %i \n",ucCI);

}_PlayBackBuf.unlock();(sizeof(SData));

}

/**НАЗНАЧЕНИЕ : очистить буфер воспроизведения для КИ

* ВХОДНЫЕ ПАРАМЕТРЫ : ucCI - номер канального интервала [0-31],

* ВЫХОДНЫЕ ПАРАМЕТРЫ: true - успешно

* false - ошибка: номер КИ > 31

*/t_UHInterface::ClearDataInPlayBackBuf(unsigned char ucCI)

31)return(false);_PlayBackBuf.lock();_pvTmpPlayBackBuf[ucCI].m_vSDataCtrl.SpeachSize=0;">{(ucCI >31) return (false);_PlayBackBuf.lock();_pvTmpPlayBackBuf[ucCI].m_vSDataCtrl.SpeachSize=0;_pvTmpPlayBackBuf[ucCI].m_vSDataCtrl.Tone=0;_pvTmpPlayBackBuf[ucCI].m_vSDataCtrl.CN=1;_pvTmpPlayBackBuf[ucCI].m_vSDataCtrl.NewLineCtrl=0;_iPlayBackGetInd[ucCI]=0;_iPlayBackPutInd[ucCI]=0;_iPlayBackIndDelta[ucCI]=0;_PlayBackBuf.unlock();

return (true);

}

/**НАЗНАЧЕНИЕ : получить порцию данных из буфера накопления

* ВХОДНЫЕ ПАРАМЕТРЫ : ucCI - номер канального интервала,

* vSData - структура для помещения данных,

* ВЫХОДНЫЕ ПАРАМЕТРЫ: true - данные извлечены из буфера накопления,

* false - в буфере накопления нет данных

*/t_UHInterface::GetAccumulatedData(unsigned char ucCI, SData &vSdata)

{

ACCBUFF_DEPTH)//">int n;_AccumulatedData.lock();(m_iAccIndDelta[ucCI] > ACCBUFF_DEPTH) // переполнение

{

while (m_iAccGetInd[ucCI] != m_iAccPutInd[ucCI])

{_iAccGetInd[ucCI]++;_iAccIndDelta[ucCI]--;

// циклический переход в начало буфера

if (m_iAccGetInd[ucCI] == ACCBUFF_DEPTH) m_iAccGetInd[ucCI]=0;

}

}

else // нет данных

if (m_iAccIndDelta[ucCI] == 0)

{

mtx_AccumulatedData.unlock();

return (false);

}

n=m_iAccGetInd[ucCI]<<5;

vSdata=m_pvAccumulatedData[ucCI+n];

m_iAccGetInd[ucCI]++;

m_iAccIndDelta[ucCI]--;

// циклический переход в начало буфера

if (m_iAccGetInd[ucCI] == ACCBUFF_DEPTH) m_iAccGetInd[ucCI]=0;_AccumulatedData.unlock();(true);

}

/**НАЗНАЧЕНИЕ : записать управляющую информацию кодирования/декодирования во

* внутреннюю память модуля УШ для тех КИ, у которых она изменилась

* ВХОДНЫЕ ПАРАМЕТРЫ : нет

* ВЫХОДНЫЕ ПАРАМЕТРЫ: нет

*/ t_UHInterface::WriteLineCtrlToUH(void)

{

//unsigned char i;

int i;

unsigned int k;

#ifndef ___PC

int ires;

#endif

SLineCtrl *pvDataCtrl;

// прочитать из внутренней памяти УШ номер области памяти для

// считывания и записи данных модулем протокола RTP

#ifdef ___PC

m_uiDumpNum=1;

#else

// прочитать номер области памяти

if ((ires=(dsp6713b_read(m_devd,(unsigned int)m_puiDumpNum, &m_uiDumpNum))))

{

dsp6713b_reset(m_devd);b_close(m_devd);("\n!!t_UHInterface::GetDumpNum %i: DSP2_read error!\n Addr=x Res=%i \n", m_ucUHNum,

(unsigned int)m_puiDumpNum,ires);(1);

}

#endif

// printf("%i\n",m_uiDumpNum);

if (!(m_uiDumpNum&0x03))

{

printf("\n!!>>UH %i: DumpNum x > x\n",m_ucUHNum, (unsigned int)m_puiDumpNum,m_uiDumpNum);

return;

}

// выполнить запись управляющей информации (не взодит в задание)

}

/**НАЗНАЧЕНИЕ : очистить управляющую информацию всех КИ во внутренней памяти

* модуля УШ

* ВХОДНЫЕ ПАРАМЕТРЫ :

* ВЫХОДНЫЕ ПАРАМЕТРЫ: нет

*/ t_UHInterface::ClearLineCtrlInUH(void)

{

unsigned int uiAddress1, uiAddress2;

#ifndef ___PC

int ires;

#endif=uiAddress2=(unsigned int)m_pvBaseDataCtrl;// адрес области памяти #1

uiAddress2+=sizeof(m_vLineCtrl); // адрес области памяти #1_LineCtrl.lock();(m_vLineCtrl,0,sizeof(m_vLineCtrl));_LineCtrl.unlock();

#ifndef ___PC

// m_vzeroLineCtrl используем, чтобы не задерживать блокировку m_vLineCtrl на время записи в DSP

if ((ires=(dsp6713b_write_IS(m_devd,uiAddress1, (void*)m_vzeroLineCtrl, sizeof(m_vzeroLineCtrl)))) ||

(ires=(dsp6713b_write_IS(m_devd,uiAddress2, (void*)m_vzeroLineCtrl, sizeof(m_vzeroLineCtrl)))) )

{

dsp6713b_reset(m_devd);

dsp6713b_close(m_devd);

printf("\n!!t_UHInterface::ClearLineCtrlInUH %i: DSP2_write_IS error!\n Addr=x Res=%i \n", m_ucUHNum,uiAddress1,ires);

exit(1);

}

#endif

}

/**НАЗНАЧЕНИЕ : запуск модуля УШ (инициализация модуля УШ и запуск программы в DSP)

* ВХОДНЫЕ ПАРАМЕТРЫ : нет

* ВЫХОДНЫЕ ПАРАМЕТРЫ: нет

*/t_UHInterface::StartWorkDSP2(void)

{

unsigned int uiConf;

unsigned int ii;

int i,ires;

timespec SleepTime;

#ifndef ___PC

// сбросить DSP модуля УШ

if((ires=(dsp6713b_reset(m_devd))))

{b_close(m_devd);("!!t_UHInterface::StartWorkDSP2 %i DSP2_reset error, Res=%i\n", m_ucUHNum,ires);

exit(1);

}

// записать в УШ данные конфигурации (m_ucCINum);(); // обнулить управляющую информацию в памяти модуля УШ по всем КИ

// проинициализировать в УШ области памяти для данных

m_uiDumpNum=1;();_uiDumpNum=2;();((ires=(dsp6713b_start(m_devd))))

{b_close(m_devd);("!!t_UHInterface::StartWorkDSP2 %i DSP2_start error, Res=%i\n", m_ucUHNum,ires);(1);

}

//! ждать готовность УШ

for (i=MAX_WAIT_READY; i>0; i--) // 10 раз = 100 ms

{

if((ires=(dsp6713b_read(m_devd,(unsigned int)m_puiBaseAddress, &uiConf))))

{b_reset(m_devd);b_close(m_devd);("!!t_UHInterface::StartWorkDSP2 %i: DSP2_read error!\n Addr=x Res=%i \n",_ucUHNum,(unsigned int)m_puiBaseAddress,ires);(1);

}((uiConf & 0xC0) == 0xC0)

{("UH %i is READY!\n",m_ucUHNum);;

}

} (i<=0)

{("UH %i is NOT READY!\n", m_ucUHNum);b_reset(m_devd);b_close(m_devd);(1);

}

#else("UH %i is READY!\n",m_ucUHNum);

#endif

}

/**НАЗНАЧЕ