es =% 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 =% 08x 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
}
/** ПРИЗНАЧЕННЯ: виконавчий метод потоку інтерфейсу УШ
* ВХІДНІ ПАРАМЕТРИ: немає
* ВИХІДНІ ПАРАМЕТРИ: немає
*/t_UHInterface :: run (void)
{
# ifndef ___ PC
unsigned int ii;
int ires;
# endifSleepTime; ("UH_Interface% i is started n", m_ucUHNum);
// скинути DSP і завантажити програму модуля УШ
StartWorkDSP2 ();
# ifndef ___ PC
ires = dsp6713b_getHPIC (m_devd, & ii);
// робота з керуючими регістрами DSP
// скинути HINT і встановити DSPINT, щоб DSP почав виставляти переривання
ires = dsp6713b_setHPIC (m_devd, ii | 0x00000002);
# endif
{
if (m_bstop_running) break;
# ifndef ___ PC
dsp6713b_sleep (m_devd);// вихід з цієї функції відбувається кожні 10 мс з переривання від DSP
// обробник переривань знаходиться в драйвері, драйвер ініціює цей вихід
# endif
// записати керуючу інформацію, у внутрішню пам'ять модуля УШ для тих КІ, у яких вона змінилася
// (упр.інформація змінюється за запитом іншого потоку)
//// тут же визначається номер області пам'яті для
// зчитування та запису даних модулем протоколу RTP
WriteLineCtrlToUH ();
// прочитати дані з внутрішньої пам'яті УШ і при необхідності
// помістити їх в буфер накопичення
// тут же визначається номер області пам'яті для
// зчитування та запису даних модулем протоколу RTP
GetDataFromUH ();
// помістити дані з буфера відтворення у внутрішню пам'ять УШ
PutDataToUH ();
# ifdef ___ PC
SleepTime.tv_sec = 0;
SleepTime.tv_nsec = 5000000 ;//5 мс
nanosleep (& SleepTime, NULL);
# endif
} while (1);
# ifndef ___ PC
// скинути DSP
if ((ires = (dsp6713b_reset (m_devd))))
{
dsp6713b_close (m_devd);
printf ("!! t_UHInterface :: run% i DSP2_reset error, Res =% i n", m_ucUHNum, ires);
exit (1);
}
else dsp6713b_close (m_devd);
printf (" n RTP: DSP device is closed n");
# endif
("Агент UH: UHInterface% is stopped n", m_ucUHNum);
m_is_running = false;
}
Висновок
У ході виконання завдання в період проходження виробничої практики було проведено ознайомлення з принципами організації та роботи IP-телефонії, а та...