Ifowuni ye-SIP kwi-STM32F7-Discovery

Molweni nonke.

Kwixesha elidlulileyo thina wabhala malunga nendlela esiye sakwazi ngayo ukusungula ifowuni ye-SIP kwi-STM32F4-Discovery kunye ne-1 MB ROM kunye ne-192 KB RAM) ngokusekelwe Emboks. Apha kufuneka kuthiwe loo nguqulo yayincinci kwaye idibanisa iifowuni ezimbini ngokuthe ngqo ngaphandle kweseva kunye nokuhanjiswa kwezwi kwicala elinye kuphela. Ke ngoko, sigqibe kwelokuba siqalise ifowuni epheleleyo ngomnxeba ngeseva, ukuhanjiswa kwelizwi kumacala omabini, kodwa kwangaxeshanye gcina ngaphakathi kweyona memori incinci inokwenzeka.


Kwifowuni, kwagqitywa ukuba kukhethwe isicelo simple_pjsua njengenxalenye yethala leencwadi le-PJSIP. Esi sisicelo esincinci esinokubhalisa kwiseva, samkele kwaye siphendule iifowuni. Ngezantsi ndiza kunika ngokukhawuleza inkcazo yendlela yokuyiqhuba kwi-STM32F7-Discovery.

Ukubaleka njani

  1. Ukuqwalasela i-Emboks
    make confload-platform/pjsip/stm32f7cube
  2. Misela i-akhawunti ye-SIP efunekayo kwifayile ye-conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    apho Mncedisi yiseva ye-SIP (umzekelo, sip.linphone.org), lomsebenzisi ΠΈ inombolo yokuvula - igama lomsebenzisi leakhawunti kunye negama lokugqitha.

  3. Ukudibanisa i-Emboks njengeqela enza. Malunga nebhodi firmware esinayo wiki kunye nqaku.
  4. Qalisa "simple_pjsua_imported" umyalelo kwi-Embox console
    
    00:00:12.870    pjsua_acc.c  ....SIP outbound status for acc 0 is not active
    00:00:12.884    pjsua_acc.c  ....sip:[email protected]: registration success, status=200 (Registration succes
    00:00:12.911    pjsua_acc.c  ....Keep-alive timer started for acc 0, destination:91.121.209.194:5060, interval:15s
    

  5. Ekugqibeleni, kusele ukufaka izithethi okanye ii-headphones kwi-audio output, kwaye uthethe kwiimakrofoni ezimbini ze-MEMS ezikufutshane nesiboniso. Sifowunela kwiLinux ngesicelo simple_pjsua, pjsua. Ewe, okanye ungasebenzisa naluphi na olunye uhlobo lwe-linphone.

Konke oku kuchazwe kwinqaku lethu wiki.

Sifike njani apho

Ngoko, ekuqaleni kwavela umbuzo malunga nokukhetha iqonga le-hardware. Ekubeni kwakucacile ukuba i-STM32F4-Discovery ayiyi kungena kwimemori, i-STM32F7-Discovery yakhethwa. Une-1 MB flash drive kunye ne-256 KB ye-RAM (+ 64 imemori ekhethekileyo ekhawulezayo, esiya kuyisebenzisa kwakhona). Kananjalo ayininzi iminxeba ngomncedisi, kodwa sigqibe kwelokuba sizame ukungena.

Ngokwemeko ngokwabo, umsebenzi wahlulahlulwe waba ngamanqanaba ahlukeneyo:

  • Ukuqhuba i-PJSIP kwi-QEMU. Kwakulula ukulungisa ingxaki, kwaye sasisele sinenkxaso ye-codec ye-AC97 apho.
  • Ukurekhodwa kwelizwi kunye nokudlala kwakhona kwi-QEMU nakwi-STM32.
  • Ukuhambisa isicelo simple_pjsua ukusuka kwi-PJSIP. Ikuvumela ukuba ubhalise kwiseva ye-SIP kwaye wenze iifowuni.
  • Beka iseva yakho esekwe kwiAsterisk kwaye uvavanye kuyo, emva koko uzame ezangaphandle ezifana ne-sip.linphone.org

Isandi kwi-Embox sisebenza ngePortaudio, ekwasetyenziswa kwi-PISIP. Iingxaki zokuqala zavela kwi-QEMU - i-WAV idlale kakuhle kwi-44100 Hz, kodwa kwi-8000 into ephosakeleyo ngokucacileyo. Kwavela ukuba ngumcimbi wokumisela i-frequency - ngokuzenzekelayo yayiyi-44100 kwisixhobo, kwaye oku akuzange kutshintshe ngokwenkqubo.

Apha, mhlawumbi, kuyafaneleka ukuchaza kancinci indlela isandi esidlalwa ngayo ngokubanzi. Ikhadi lesandi linokusetwa kwisikhombisi kwimemori ofuna ukuyidlala okanye urekhode ngamaxesha amisiweyo. Emva kokuba isithinteli siphelile, uphazamiseko luyenziwa kwaye uphumezo luqhubeke nebuffer elandelayo. Inyani yeyokuba ezi buffers kufuneka zizaliswe kwangethuba ngelixa edlulileyo idlalwa. Siza kujongana nale ngxaki ngakumbi kwi-STM32F7.

Emva koko, saqasha iseva kwaye safaka iAsterisk kuyo. Kuba bekuyimfuneko ukulungisa ingxaki kakhulu, kodwa bendingafuni ukuthetha kumbhobho kakhulu, bekuyimfuneko ukwenza ukudlala okuzenzekelayo kunye nokurekhoda. Ukwenza oku, sikhuphe i-simple_pjsua ukuze ukwazi ukutyibilika iifayile endaweni yezixhobo zomsindo. Kwi-PJSIP, oku kwenziwa ngokulula, kuba banombono wezibuko, enokuba sisixhobo okanye ifayile. Kwaye ezi zibuko zinokudityaniswa bhetyebhetye kwamanye amazibuko. Ungayibona ikhowudi kwi-pjsip yethu iindawo zokugcina. Ngenxa yoko, inkqubo yaba ngolu hlobo lulandelayo. Kwiseva yeAsterisk, ndiqale iiakhawunti ezimbini - zeLinux kunye ne-Embox. Okulandelayo, umyalelo wenziwe kwi-Emboks simple_pjsua_imported, I-Emboks ibhaliswe kumncedisi, emva koko sibiza i-Emboks evela kwi-Linux. Ngomzuzu woxhumo, sijonga kwi-Asterisk iseva ukuba uxhumano lusekiwe, kwaye emva kwexesha kufuneka sive isandi kwi-Linux kwi-Embox, kwaye kwi-Linux sigcina ifayile edlalwa kwi-Embox.

Emva kokuba isebenze kwi-QEMU, siye saya kwi-porting kwi-STM32F7-Discovery. Ingxaki yokuqala kukuba abazange bangene kwi-1 MB ye-ROM ngaphandle kokwenza umququli owenziwe wasebenza "-Os" kubungakanani bomfanekiso. Yiyo loo nto sifake "-Os". Ngaphaya koko, isiziba sivaliwe inkxaso ye-C ++, ngoko ifuneka kuphela kwi-pjsua, kwaye sisebenzisa simple_pjsua.

Emva kokubekwa simple_pjsua, yagqiba ekubeni ngoku kukho ithuba lokuyisungula. Kodwa okokuqala kwakuyimfuneko ukujongana nokurekhoda kunye nokudlala kwakhona kwelizwi. Umbuzo ngowokuba ubhale phi? Sakhetha imemori yangaphandle - SDRAM (128 MB). Ungazama oku ngokwakho:

Yenza istiriyo WAV kunye rhoqo 16000 Hz kunye nexesha 10 imizuzwana:


record -r 16000 -c 2 -d 10000 -m C0000000

Siyaphulukana:


play -m C0000000

Kukho iingxaki ezimbini apha. Eyokuqala kunye ne-codec - i-WM8994 isetyenzisiwe, kwaye inendawo efana ne-slot, kwaye kukho ezi 4 ze-slots.Ngoko, ngokuzenzekelayo, ukuba le nto ayicwangciswanga, ngoko xa udlala i-audio, ukudlala kwakhona kwenzeka kuzo zonke iindawo zokubeka. . Ke ngoko, kwi-frequency ye-16000 Hz, sifumene i-8000 Hz, kodwa kwi-8000 Hz, ukudlala kwakhona akuzange kusebenze. Xa kuphela iindawo zokubeka u-0 kunye no-2 ezikhethiweyo, zasebenza njengoko kufanele. Enye ingxaki yayilunxibelelwano lweaudio kwi-STM32Cube, apho imveliso yeaudiyo isebenza nge-SAI (Serial Audio Interface) ngolungelelwaniso kunye negalelo lomsindo (andizange ndiqonde iinkcukacha, kodwa kuye kwavela ukuba babelana ngewotshi eqhelekileyo kwaye xa imveliso yomsindo iyaqaliswa, iaudio incamathele ngandlel' ithile ekungeneni kwayo). Oko kukuthi, awukwazi ukuziqhuba ngokwahlukeneyo, ngoko ke senze oku kulandelayo - igalelo lomsindo kunye nemveliso yeaudio ihlala isebenza (kubandakanya iziphazamiso zenziwe). Kodwa xa kungekho nto idlalwayo kwinkqubo, emva koko sityibilika i-buffer engenanto kwisiphumo somsindo, kwaye xa kuqala ukudlala, siqala ukuyigcwalisa ngokunyaniseka.

Ngapha koko, siye sadibana nenyaniso yokuba isandi ngexesha lokurekhodwa kwelizwi sasithe cwaka kakhulu. Oku kungenxa yokuba ii-microphone ze-MEMS kwi-STM32F7-Discovery ngandlela-thile azisebenzi kakuhle kwiifrikhwensi ezingaphantsi kwe-16000 Hz. Ngoko ke, siseta i-16000 Hz, nokuba i-8000 Hz iza. Ukwenza oku, nangona kunjalo, bekuyimfuneko ukongeza ukuguqulwa kwesoftware yefrikhwensi enye ukuya kwenye.

Emva koko, kwafuneka ndonyuse ubungakanani bemfumba, ebekwe kwi-RAM. Ngokobalo lwethu, ipjsip ifuna malunga ne-190 KB, kwaye sishiyeke malunga ne-100 KB kuphela. Apha bekufuneka ndisebenzise imemori yangaphandle - SDRAM (malunga ne-128 KB).

Emva kwazo zonke ezi zihlengiso, ndabona iiphakheji zokuqala phakathi kweLinux kunye ne-Embox, kwaye ndeva isandi! Kodwa isandi sasisoyikeka, singafani kwaphela ne-QEMU, kwakungenakwenzeka ukwenza nantoni na. Emva koko sacinga ukuba yintoni ingxaki. Ukulungisa ingxaki kubonise ukuba i-Emboks ayinalo ixesha lokuzalisa / ukukhulula ii-buffers zeaudio. Ngelixa i-pjsip yayilungisa isakhelo esinye, iziphazamiso ezi-2 zinexesha lokwenzeka malunga nokugqityezelwa kokusetyenzwa kwebuffer, eninzi kakhulu. Ingcamango yokuqala yesantya yayiyi-compiler optimization, kodwa yayisele ifakiwe kwi-PJSIP. Eyesibini yindawo edadayo yehardware, sithethe ngayo kuyo nqaku. Kodwa njengoko uqheliselo lubonisile, i-FPU ayizange inike ukwanda okukhulu kwesantya. Inyathelo elilandelayo yayikukubeka phambili imisonto. I-Embox ineendlela ezahlukeneyo zokucwangcisa, kwaye ndibandakanyile enye exhasa izinto eziphambili kwaye isete imijelo yomsindo kweyona nto iphambili. Oku akuzange kuncede nako.

Umbono olandelayo yayikukuba sisebenza ngenkumbulo yangaphandle kwaye kuya kuba kuhle ukushenxisa izakhiwo apho ezifikelelwa rhoqo. Ndenze uhlalutyo lokuqala xa kwaye phantsi kwantoni simple_pjsua yabela inkumbulo. Kwavela ukuba kwi-190 Kb, i-90 Kb yokuqala yabelwe iimfuno zangaphakathi ze-PJSIP kwaye azifikelelwa rhoqo. Ngaphaya koko, ngexesha lomnxeba ongenayo, i pjsua_call_answer umsebenzi ubizwa, apho iibuffers zabelwa ukusebenza ngezakhelo ezingenayo neziphumayo. Ibiseyimalunga ne-100 KB. Kwaye ke senze oku kulandelayo. Kuze kube ngumzuzu womnxeba, sibeka idatha kwimemori yangaphandle. Ngokukhawuleza nje umnxeba, ngokukhawuleza sibuyisela imfumba ngenye enye-kwi-RAM. Ngaloo ndlela, yonke idatha "eshushu" idluliselwe kwimemori ekhawulezayo kunye nokuqikelelwa ngakumbi.

Ngenxa yoko, konke oku kunye kwenze ukuba kube lula ukuqalisa simple_pjsua kwaye ufowunele ngeseva yakho. Kwaye ke ngezinye iiseva ezinje nge sip.linphone.org.

ezifunyanisiweyo

Ngenxa yoko, kwakunokwenzeka ukuqalisa simple_pjsua ngogqithiso lwelizwi kumacala omabini ngomncedisi. Ingxaki eyongeziweyo echithwe i-128 KB ye-SDRAM inokusonjululwa ngokusebenzisa i-Cortex-M7 enamandla ngakumbi (umzekelo, i-STM32F769NI kunye ne-512 KB ye-RAM), kodwa kwangaxeshanye, asikanikezeli ithemba lokungena kwi-256. KB πŸ™‚ Siya kuvuya ukuba kukho umntu onomdla, Okanye ngcono okwangoku, yizame. Yonke imithombo, njengesiqhelo, ikwindawo yethu iindawo zokugcina.

umthombo: www.habr.com

Yongeza izimvo