Telefoonka SIP ee STM32F7-Discovery

Qof walba raalli.

Muddo ka hor waxaan qoray ku saabsan sida aan ugu suurtagashay in aan soo saarno taleefanka SIP ee STM32F4-Discovery oo leh 1 MB ROM iyo 192 KB RAM) oo ku saleysan Ebox-ka. Halkan waa in la sheegaa in nuqulkaas uu ahaa mid aad u yar oo ku xirnaa laba taleefoon oo toos ah oo aan lahayn server-ka iyo gudbinta codka oo keliya hal jiho. Sidaa darteed, waxaan go'aansanay inaan soo saarno taleefoon aad u dhammaystiran oo leh wicitaan iyada oo loo marayo server-ka, gudbinta codka ee labada jiho, laakiin isla mar ahaantaana ku hay xajmiga xusuusta ugu yar ee suurtogalka ah.


Telefoonka, waxaa la go'aamiyay in la doorto codsi fudud_pjsua iyada oo qayb ka ah maktabadda PJSIP. Kani waa arjiga ugu yar ee iska diiwaan gelin kara serverka, heli kara kana jawaabi kara wicitaanada. Hoos waxaan isla markiiba ku siin doonaa sharaxaad ku saabsan sida loogu socodsiiyo STM32F7-Discovery.

Sida loo ordo

  1. Habaynta Embox
    make confload-platform/pjsip/stm32f7cube
  2. Deji koontada SIP ee loo baahan yahay faylka conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    halkaas oo server waa adeegaha SIP (tusaale ahaan, sip.linphone.org), username ΠΈ password - username account iyo password.

  3. Ururinta Embox koox ahaan dhigi. Ku saabsan guddiga firmware-ka ee aan ku hayno wiki iyo maqaal.
  4. Ku socodsii amarka "simple_pjsua_imported" gudaha 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. Ugu dambayntii, way hadhaysaa in la geliyo ku hadlaaya ama sameecado sameecado soo saarka codka, oo lagu hadlo laba makarafoon oo MEMS yar oo ku xiga bandhiga. Waxaan ka wacnaa Linux anagoo adeegsanayna codsiga simple_pjsua, pjsua. Hagaag, ama waxaad isticmaali kartaa nooc kasta oo kale oo linphone ah.

Waxaas oo dhan waxaa lagu tilmaamay on our wiki.

Sideen ku gaadhnay

Sidaa darteed, markii hore su'aashu waxay kacday doorashada qalabka qalabka. Maadaama ay caddaatay in STM32F4-Discovery aanu ku habboonayn xusuusta, STM32F7-Discovery ayaa la doortay. Waxay haysataa 1 MB flash drive iyo 256 KB RAM ah (+ 64 xusuusta degdega ah ee gaarka ah, oo aan sidoo kale isticmaali doono). Sidoo kale wax badan maaha wicitaanada server-ka, laakiin waxaan go'aansanay inaan isku dayno inaan ku habooneyno.

Shuruud ahaan, hawshu waxay u qaybsantay dhowr marxaladood:

  • Ku socodsiinta PJSIP ee QEMU. Way ku habboonayd wax-ka-saarista, oo ay weheliso taageero aan hore ugu haysannay codec-ka AC97 halkaas.
  • Duubista codka iyo dib ugu soo celinta QEMU iyo STM32.
  • Soo gudbinta codsi fudud_pjsua ka PJSIP. Waxay kuu ogolaanaysaa inaad iska diiwaan geliso server-ka SIP oo aad wacdo.
  • Geli server-kaaga ku salaysan calaamada oo tijaabi, ka dib isku day kuwa dibadda ah sida sip.linphone.org

Codka Embox wuxuu ka shaqeeyaa Portaudio, kaas oo sidoo kale lagu isticmaalo PISIP. Dhibaatooyinkii ugu horeeyay waxay ka soo muuqdeen QEMU - WAV waxay si fiican u ciyaartay 44100 Hz, laakiin 8000 ayay wax si cad u khaldameen. Waxaa soo baxday in ay ahayd arrin ku saabsan dejinta soo noqnoqda - by default ee qalabka ahaa 44100, oo tani ma beddeli barnaamij ahaan.

Halkan, laga yaabee, waxaa habboon in la sharxo sida codka guud ahaan loo ciyaaro. Kaarka codka waxaa lagu dhejin karaa tilmaame qayb xusuusta ah oo aad rabto inaad ka ciyaarto ama ku duubto inta jeer ee hore loo go'aamiyay. Ka dib marka kaydku dhamaado, kala goyn ayaa abuurma oo fulintu waxay ku sii socotaa kaydiyaha xiga. Xaqiiqdu waxay tahay in kaydiyeyaashan loo baahan yahay in horay loo sii buuxiyo inta kii hore la ciyaarayo. Waxaan si dheeraad ah ula kulmi doonaa dhibaatadan STM32F7.

Marka xigta, waxaanu kiraysanay server-ka oo aanu dul saarnay Asterisk. Maadaama ay lama huraan ahayd in wax badan laga saxo, laakiin ma aanan rabin inaan ku hadlo makarafoonka wax badan, waxaa lagama maarmaan noqotay in la sameeyo dib-u-ciyaarid toos ah iyo duubid. Si tan loo sameeyo, waxaanu dhejinnay simple_pjsua si aad u simbiriirixan karto faylasha halkii aad ka isticmaali lahayd qalabka maqalka. Gudaha PJSIP, tan si fudud ayaa loo sameeyaa, maadaama ay leeyihiin fikradda deked, taas oo noqon karta aalad ama fayl. Waxayna dekedahani si dabacsan ugu xidhan karaan dekedaha kale. Waxaad ka arki kartaa koodka pjsip-kayaga kayd. Natiijo ahaan, nidaamku wuxuu ahaa sidan soo socota. Server-ka Asterisk, waxaan bilaabay laba akoon - Linux iyo Embox. Marka xigta, amarka waxaa lagu fuliyay Embox fudud_pjsua_imported, Embox wuxuu ku diiwaan gashan yahay server-ka, ka dib waxaan ka wacnaa Embox Linux. Waqtigan xaadirka ah ee xiriirka, waxaan hubineynaa server-ka Asterisk in xiriirku uu sameeyay, muddo ka dib waa inaan maqalnaa codka Linux ee Embox, Linux-ka waxaan ku keydineynaa feylka ka socda Embox.

Ka dib markii ay ka shaqeysay QEMU, waxaan u dhaqaaqnay wareejinta STM32F7-Discovery. Dhibaatada ugu horeysa ayaa ah in aysan ku habooneyn 1 MB ee ROM iyada oo aan la hagaajin kombiyuuterka "-Os" oo awood u leh cabbirka sawirka. Taasi waa sababta aan ugu darnay "-Os". Intaa waxaa dheer, balastarku wuxuu curyaamiyay taageerada C++, marka waxaa loo baahan yahay oo keliya pjsua, waxaana isticmaalnaa simple_pjsua.

Ka dib markii la dhigo fudud_pjsua, wuxuu go'aansaday in hadda ay jirto fursad lagu bilaabi karo. Laakiin marka hore waxay ahayd lagama maarmaan in wax laga qabto duubista iyo dib-u-celinta codka. Su'aashu waxay tahay halkee wax lagu qoraa? Waxaan dooranay xusuusta dibadda - SDRAM (128 MB). Adiga ayaa isku dayi kara tan:

Wuxuu abuuraa stereo WAV oo leh soo noqnoqoshada 16000 Hz iyo muddada 10 ilbiriqsi:


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

Waxaan luminay:


play -m C0000000

Waxaa jira laba dhibaato halkan. Midka ugu horreeya ee leh codec - WM8994 ayaa loo isticmaalaa, oo waxay leedahay wax la mid ah booska, waxaana jira 4 ka mid ah boosaskan. Markaa, marka la eego, haddii tani aan la habeynin, markaa marka la ciyaaro codka, dib-u-celinta waxay ku dhacdaa dhammaan afarta boos. . Sidaa darteed, inta jeer ee 16000 Hz, waxaan helnay 8000 Hz, laakiin 8000 Hz, dib-u-celinta si fudud uma shaqeyn. Marka kaliya boosaska 0 iyo 2 la doortay, waxay u shaqeysay sidii la rabay. Dhibaato kale waxay ahayd interface-ka maqalka ee STM32Cube, kaas oo wax-soo-saarka maqalku uu ku shaqeeyo SAI (Serial Audio Interface) si isku mid ah ula socoshada maqalka (ma fahmin faahfaahinta, laakiin waxaa soo baxday inay wadaagaan saacad caadi ah iyo marka wax soo saarka maqalka ayaa la bilaabay, maqalkuna si uun buu ugu dheggan yahay gelitaankiisa). Taasi waa, si gaar ah uma socodsiin kartid, sidaas darteed waxaan sameynay kuwan soo socda - gelinta maqalka iyo wax soo saarka maqalka ayaa had iyo jeer shaqeeya (oo ay ku jiraan kala-goysyada ayaa la abuuraa). Laakin marka aan waxba lagu ciyaarin nidaamka, ka dib waxaan si fudud u galbineynaa meel madhan wax soo saarka maqalka, iyo marka dib-u-ciyaartu bilaabanto, waxaan si daacad ah u bilaabeynaa inaan buuxino.

Intaa waxaa dheer, waxaan la kulannay xaqiiqda ah in codka inta lagu jiro duubista codka uu ahaa mid aad u aamusan. Tani waxay sabab u tahay xaqiiqda ah in makarafoonnada MEMS ee STM32F7-Discovery si uun uma shaqeeyaan si fiican marka loo eego inta jeer ee ka hooseeya 16000 Hz. Sidaa darteed, waxaan dejinay 16000 Hz, xitaa haddii 8000 Hz yimaado. Si taas loo sameeyo, in kastoo, waxay ahayd lagama maarmaan in lagu daro beddelka software ee hal jeer oo kale.

Marka xigta, waa inaan kordhiyaa xajmiga tuubada, taas oo ku taal RAM. Marka loo eego xisaabintayada, pjsip waxay u baahan tahay ilaa 190 KB, waxaana inoo hadhay kaliya 100 KB. Halkan waxaan ku khasbanaaday inaan isticmaalo xoogaa xusuusta dibadda ah - SDRAM (qiyaastii 128 KB).

Dhammaan tafatirradan ka dib, waxaan arkay baakadihii ugu horreeyay ee u dhexeeya Linux iyo Embox, waxaanan maqlay codka! Laakin codku wuxuu ahaa mid aad u xun, oo aan la mid ahayn QEMU, waa wax aan suurtagal ahayn in la sameeyo. Markaas ayaanu ka fikirnay waxa dhici kara. Cilad-saarku waxay muujisay in Embox-ku aanu si fudud u haysan wakhti uu ku buuxiyo/ka dejiyo kaydiyaha maqalka. In kasta oo pjsip ay ku hawlanayd hal jir, 2 kala-joojin ayaa haystay wakhti ay ku dhacaan dhammaystirka habaynta kaydinta, taas oo aad u badan. Fikirka ugu horreeya ee xawaaraha wuxuu ahaa hagaajinta kombuyuutarrada, laakiin mar hore ayaa lagu daray PJSIP. Midda labaad waa barta sabaynaysa qalabka, waanu ka wada hadalnay gudaha maqaal. Laakiin sida dhaqanku muujiyay, FPU ma aysan siinin koror weyn oo xawaaraha. Talaabada xigta waxay ahayd in la kala hormariyo dunta. Embox waxa uu leeyahay qorshayaal jadwal oo kala duwan, waxaanan ku daray mid taageera mudnaanaha oo dejinaya qulqulka maqalka ee mudnaanta ugu sarreeya. Tani sidoo kale waxba ma tarin.

Fikradda xigta waxay ahayd inaan ku shaqaynayno xusuusta dibadda waxaana fiicnaan lahayd in la raro dhismayaal si aad ah loo galo halkaas. Waxaan sameeyay falanqayn horudhac ah oo ku saabsan goorta iyo waxa hoos yimaada fudud_pjsua qoondeeya xusuusta. Waxaa soo baxday in 190 Kb, 90-kii Kb ee ugu horreeyay loo qoondeeyay baahiyaha gudaha ee PJSIP oo aan marar badan la helin. Dheeraad ah, inta lagu jiro wicitaanka soo socda, pjsua_call_answer function ayaa loo yaqaan, kaas oo kaydiyayaal loo qoondeeyay inay la shaqeeyaan xirmooyinka soo socda iyo kuwa baxaya. Waxay weli ahayd ilaa 100 Kb. Kadibna waxaanu samaynay sidan soo socota. Ilaa waqtiga wicitaanka, waxaan ku dhejineynaa xogta xusuusta dibadda. Isla markii wacitaanka, waxaan isla markiiba ku beddelnaa tuubada mid kale - RAM. Sidaa darteed, dhammaan xogta "kulul" ayaa loo wareejiyay si degdeg ah oo la sii saadaalin karo.

Natiijo ahaan, waxaas oo dhan ayaa si wadajir ah u suurtageliyay in la bilaabo fudud_pjsua oo ka wac server-kaaga. Ka dibna iyada oo loo marayo server-yada kale sida sip.linphone.org.

natiijooyinka

Natiijo ahaan, waxaa suurtagal ah in la bilaabo fudud_pjsua iyadoo codka labada jiho loogu gudbinayo server-ka. Dhibaatada lagu daray 128 KB ee SDRAM waxaa lagu xallin karaa iyadoo la adeegsanayo Cortex-M7 xoogaa ka xoog badan (tusaale, STM32F769NI oo leh 512 KB RAM ah), laakiin isla mar ahaantaana, weli kama aannu quusan rajo ah inaan galno 256 KB πŸ™‚ Waan ku farxi doonaa haddii qof uu xiiseynayo, Ama ka sii fiican, isku day. Dhammaan ilaha, sida caadiga ah, waxay ku jiraan annaga kayd.

Source: www.habr.com

Add a comment