Ifoni ye-SIP ku-STM32F7-Discovery

Sanibonani nonke.

Esikhathini esedlule thina wabhala mayelana nokuthi sakwazi kanjani ukwethula ifoni ye-SIP ku-STM32F4-Discovery ene-1 MB ROM kanye ne-RAM engu-192 KB) ngokusekelwe I-embox. Lapha kufanele kushiwo ukuthi leyo nguqulo yayincane futhi ixhume amafoni amabili ngokuqondile ngaphandle kweseva futhi ngokudlulisela ngezwi kuphela ohlangothini olulodwa. Ngakho-ke, sinqume ukwethula ucingo oluphelele ngocingo ngeseva, ukudluliswa kwezwi kuzo zombili izinkomba, kodwa ngesikhathi esifanayo kungena kusayizi omncane wenkumbulo.


Kwanqunywa ukuthi kukhethwe isicelo socingo simple_pjsua njengengxenye yelabhulali ye-PJSIP. Lolu uhlelo lokusebenza oluncane olungabhalisa kuseva, lwamukele futhi luphendule izingcingo. Ngezansi ngizokunikeza ngokushesha incazelo yendlela yokusebenzisa lokhu ku-STM32F7-Discovery.

Indlela yokuqalisa

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

    kuphi Iseva iyiseva ye-SIP (ngokwesibonelo, sip.linphone.org), igama lomsebenzisi ΠΈ iphasiwedi - igama lomsebenzisi nephasiwedi ye-akhawunti.

  3. Sihlanganisa i-Embox neqembu ukwenza. Sinolwazi mayelana ne-firmware yebhodi ku wiki futhi ku isihloko.
  4. Qalisa umyalo othi β€œsimple_pjsua_imported” kukhonsoli ye-Embox
    
    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. Okokugcina, okusele nje ukufaka izipikha noma ama-headphones kokuphumayo komsindo, futhi ukhulume kumakrofoni amabili amancane e-MEMS eduze kwesibonisi. Sishayela ku-Linux sisebenzisa uhlelo lokusebenza simple_pjsua, pjsua. Hhayi-ke, noma ungasebenzisa noma yiluphi olunye uhlobo lwe-linphone.

Konke lokhu kuchazwe esihlokweni sethu wiki.

Sifike kanjani lapha

Ngakho-ke, ekuqaleni kwaphakama umbuzo mayelana nokukhetha isiteji se-hardware. Njengoba kwakusobala ukuthi i-STM32F4-Discovery ngeke ifanelekele inkumbulo, kwakhethwa i-STM32F7-Discovery. Une-1 MB flash drive kanye no-256 KB we-RAM (+ 64 inkumbulo ekhethekile esheshayo, esizoyisebenzisa futhi). Futhi akukuningi kwezingcingo ngeseva, kodwa sinqume ukuzama ukungena.

Ngokuvamile, umsebenzi uhlukaniswe izigaba eziningana:

  • Isebenzisa i-PJSIP ku-QEMU. Bekulula ukulungisa iphutha, futhi besivele sinosekelo lwekhodekhi ye-AC97 lapho.
  • Ukuqoshwa kwezwi nokudlala ku-QEMU naku-STM32.
  • Ihambisa isicelo simple_pjsua kusuka ku-PJSIP. Ikuvumela ukuthi ubhalise kuseva ye-SIP futhi ushaye izingcingo.
  • Hambisa iseva yakho ngokusekelwe kunkanyezi futhi uhlole kuyo, bese uzama ezangaphandle, njenge-sip.linphone.org

Umsindo ku-Embox usebenza nge-Portaudio, ebuye isetshenziswe ku-PISIP. Izinkinga zokuqala zivele ku-QEMU - ama-WAV adlalwe kahle ku-44100 Hz, kodwa ngo-8000 kukhona okwakungahambi kahle. Kwavela ukuthi inkinga yayisetha imvamisa - ngokuzenzakalelayo kumishini bekuyi-44100, futhi asizange sikushintshe lokhu kusoftware.

Lapha, cishe kufanelekile ukuchaza kancane ukuthi umsindo udlalwa kanjani ngokujwayelekile. Ikhadi lomsindo lingasetha isikhombi engxenyeni yememori okudingeka idlalwe kuyo noma irekhodwe ngefrikhwensi enqunywe kusengaphambili. Ngemuva kokuthi isigcinalwazi sesiphelile, ukuphazamiseka kuyakhiqizwa futhi ukwenza kuqhubeke kusuka kubhafa elandelayo. Iphuzu ukuthi lawa mabhafa adinga ukugcwaliswa kusenesikhathi ngenkathi kudlalwa eyedlule. Sizobhekana nale nkinga ngokuqhubekayo ku-STM32F7.

Okulandelayo, siqashe iseva futhi safaka inkanyezi kuyo. Njengoba kwakunokuningi ukulungisa iphutha okufanele ngikwenze, futhi ngangingafuni ukukhuluma kakhulu kumbhobho, kwakudingeka ukwenza ukudlala okuzenzakalelayo nokurekhoda. Ukwenza lokhu, sinamathisele i-simple_pjsua ukuze sikwazi ukufaka amafayela esikhundleni semishini yomsindo. Ku-PJSIP lokhu kwenziwa kalula, njengoba benomqondo wechweba, okungaba idivayisi noma ifayela. Futhi lezi zimbobo zingaxhunywa kalula kwamanye amachweba. Ungabuka ikhodi ku-pjsip yethu izinqolobane. Ngenxa yalokho, uhlelo lwaba kanje. Ngidale ama-akhawunti amabili kuseva ye-Asterisk - ye-Linux neye-Embox. Okulandelayo, umyalo ukhishwa ku-Embox simple_pjsua_imported, Irejista ye-Embox kuseva, emva kwalokho sibiza i-Embox kusuka ku-Linux. Ngesikhathi sokuxhuma, sibheka kuseva ye-Asterisk ukuthi konke ukuxhumana kusungulwe, futhi ngemva kwesikhathi esithile kufanele sizwe umsindo ovela ku-Linux ku-Embox, futhi ku-Linux silondoloza ifayela elidlalwa ku-Embox.

Uma lokhu sekusebenze ku-QEMU, siqhubekele phambili ekuyithutheleni i-STM32F7-Discovery. Inkinga yokuqala yayiwukuthi asikwazanga ukulingana ku-1 MB ye-ROM ngaphandle kokuthi ukulungiselelwa kwenhlanganisela ye-β€œ-Os” yosayizi wesithombe kunikwe amandla. Ngakho-ke, sifake "-Os". Okulandelayo, ipheshi livimbe usekelo lwe-C++, ngakho lidingeka kuphela ku-pjsua, futhi sisebenzisa i-simple_pjsua.

Ngemva kokubeka simple_pjsua, wanquma ukuthi selikhona ithuba lokuyethula. Kodwa okokuqala bekufanele sithole ukuthi singaqopha kanjani futhi sidlale amaphimbo. Umbuzo - kuphi ukubhala? Sakhetha inkumbulo yangaphandle - SDRAM (128 MB). Ungazama lokhu ngokwakho:

Izodala i-WAV yesitiriyo enemvamisa engu-16000 Hz kanye nobude besikhathi esingamasekhondi ayi-10:


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

Siyalahlekelwa:


play -m C0000000

Bekunezinkinga ezimbili lapha. Eyokuqala ine-codec - i-WM8994 isetshenziswa, futhi inento efana ne-slot, futhi kukhona 4 yalezi zikhala. izikhala ezine. Ngakho-ke, imvamisa ye-16000 Hz sithole i-8000 Hz, kodwa ngokudlala okungu-8000 Hz azange kusebenze. Lapho sikhetha izikhala 0 no-2 kuphela, kusebenze njengoba bekulindelekile. Enye inkinga kwaba isixhumi esibonakalayo somsindo ku-STM32Cube, lapho okukhiphayo okulalelwayo kusebenza khona nge-SAI (Serial Audio Interface) ngokuhambisana nokokufaka komsindo (angizange ngiyiqonde imininingwane, kodwa kuvele ukuthi babelana ngewashi elivamile nalapho beqalisa. okuphumayo komsindo, umsindo uboshelwe ngandlela thize ekungeneni kwawo). Okusho ukuthi, akunakwenzeka ukuzisebenzisa ngokwehlukana, ngakho-ke senze okulandelayo - okokufaka komsindo nokuphumayo komsindo kuhlala kusebenza (okubandakanya ukuphazamiseka kuyakhiqizwa). Kodwa uma kungekho lutho oludlalayo ohlelweni, sivele sishutheke isigcinalwazi esingenalutho kokuphumayo komsindo, futhi lapho ukudlalwa kuqala, siqala ukukugcwalisa ngokwethembeka.

Sabe sesihlangana neqiniso lokuthi umsindo uma uqopha izwi wawuthule kakhulu. Lokhu kungenxa yokuthi ama-microphone we-MEMS ku-STM32F7-Discovery ngandlela thize awasebenzi kahle kumafrikhwensi angaphansi kuka-16000 Hz. Ngakho-ke, siyibekela ku-16000 Hz, noma i-8000 Hz ifika. Ukuze wenze lokhu, noma kunjalo, kwakudingeka ukwengeza ukuguqulwa kwesofthiwe yemvamisa eyodwa kwenye.

Okulandelayo, bekufanele senyuse usayizi wenqwaba, etholakala ku-RAM. Ngokwezibalo zethu, i-pjsip idinga cishe u-190 KB, futhi sasisele cishe no-100 KB. Lapha bekufanele sisebenzise inkumbulo encane yangaphandle - SDRAM (cishe 128 KB).

Ngemuva kwakho konke lokhu kuhlelwa, ngibone amaphakheji okuqala phakathi kwe-Linux ne-Embox, futhi ngizwe umsindo! Kodwa umsindo wawumubi, ungafani neze noQEMU, kwakungezwakali lutho. Sabe sesizibuza ukuthi ngabe yini inkinga. Ukulungisa iphutha kubonise ukuthi i-Embox ayinaso isikhathi sokugcwalisa/ukukhipha amabhafa omsindo. Ngenkathi i-pjsip icubungula uhlaka olulodwa, iziphazamiso ezingu-2 mayelana nokuqedwa kokucubungula kwebhafa zenzekile, okuyinto eningi kakhulu. Umcabango wami wokuqala we-speedup kwakuwukwenza kahle komhlanganisi, kodwa lokho kwase kufakiwe ku-PJSIP. Okwesibili iphoyinti le-hardware elintantayo, sikhulume ngalo kulo isihloko. Kodwa njengoba umkhuba ubonisile, i-FPU ayizange inikeze ukwanda okukhulu kwejubane. Isinyathelo esilandelayo kwaba ukusetha izinto eziza kuqala. I-Embox inamasu okushejula ahlukene, futhi nginike amandla leyo esekela izinto eziza kuqala futhi ngayinika ukusakazwa komsindo okubaluleke kakhulu. Nalokhu akusizanga.

Umbono olandelayo wawuwukuthi sisebenza ngenkumbulo yangaphandle futhi kungaba kuhle ukuhambisa izakhiwo lapho ezitholakala kaningi kakhulu. Ngenza ukuhlaziya kokuqala kokuthi nini futhi ngaphansi kwani simple_pjsua yabela inkumbulo. Kuvele ukuthi ku-190 KB, u-90 KB wokuqala wabelwe izidingo zangaphakathi ze-PJSIP futhi awufinyelelwa njalo. Okulandelayo, phakathi nocingo olungenayo, umsebenzi we-pjsua_call_answer ubizwa, lapho amabhafa abe esenikezwa ukusebenza namafreyimu angenayo naphumayo. Bekusengaba ngu-100 KB. Bese senza okulandelayo. Kuze kube ucingo lwenziwa, idatha igcinwa kwimemori yangaphandle. Ngokushesha nje lapho ucingo lukhala, ngokushesha sishintsha inqwaba sifake enye ku-RAM. Ngakho-ke, yonke idatha "eshisayo" idluliselwe kumemori esheshayo nengabikezelwa.

Ngenxa yalokho, konke lokhu ngokuhlanganyela kwasivumela ukuba sethule simple_pjsua futhi ushayele ngeseva yakho. Bese ngokusebenzisa amanye amaseva anjenge-sip.linphone.org.

okutholakele

Ekugcineni kwakungenzeka ukuqalisa simple_pjsua ngokudluliswa kwezwi kuzo zombili izinkomba ngeseva. Inkinga nge-128 KB eyengeziwe ye-SDRAM ingaxazululwa ngokusebenzisa i-Cortex-M7 enamandla kancane (ngokwesibonelo, i-STM32F769NI eno-512 KB we-RAM), kodwa asikakalilahli ithemba lokufaneleka ku-256 KB :) Sizokwenza jabula uma othile enentshisekelo, noma ongcono okwamanje, izame. Yonke imithombo, njengenjwayelo, ikuwethu izinqolobane.

Source: www.habr.com

Engeza amazwana