Kelepona SIP ma STM32F7-Discovery

Aloha kākou kela kanaka.

I ka wā ma mua mākou palapalaʻo ia e pili ana pehea mākou i hoʻomaka ai i kahi kelepona SIP ma STM32F4-Discovery me 1 MB ROM a me 192 KB RAM) ma muli o Embox. Maanei pono e ʻōlelo ʻia he mea liʻiliʻi kēlā mana a hoʻopili pololei i ʻelua kelepona me ka ʻole o kahi kikowaena a me ka hoʻouna leo i hoʻokahi ala. No laila, ua hoʻoholo mākou e hoʻomaka i kahi kelepona piha loa me ke kelepona ʻana ma o ke kikowaena, ka hoʻoili leo ma nā ʻaoʻao ʻelua, akā i ka manawa like e mālama i loko o ka liʻiliʻi liʻiliʻi loa.


No ke kelepona, ua hoʻoholo ʻia e koho i kahi noi simple_pjsua ma ke ʻano he ʻāpana o ka waihona PJSIP. He noi liʻiliʻi kēia e hiki ke hoʻopaʻa inoa ma ke kikowaena, loaʻa a pane i nā kelepona. Ma lalo iho e hāʻawi koke wau i ka wehewehe ʻana i ka holo ʻana ma STM32F7-Discovery.

Pehea e holo ai

  1. Ke hoʻonohonoho nei i ka Embox
    make confload-platform/pjsip/stm32f7cube
  2. E hoʻonoho i ka moʻokāki SIP i makemake ʻia ma ka faila conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    kahi kikowaena he kikowaena SIP (no ka laʻana, sip.linphone.org), inoa mea hoʻohana и hua huna - ka inoa inoa a me ka ʻōlelo huna.

  3. ʻO ka hui ʻana o Embox ma ke ʻano he hui hana. E pili ana i ka papa firmware i loaʻa iā mākou wiki a i 'ōlelo.
  4. E holo i ke kauoha "simple_pjsua_imported" ma ka console 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. ʻO ka hope, hoʻokomo ʻia nā mea ʻōlelo a i ʻole nā ​​​​headheads i loko o ka puka leo, a ʻōlelo i loko o ʻelua mau microphones MEMS liʻiliʻi ma hope o ka hōʻike. Kāhea mākou mai Linux ma o ka noi simple_pjsua, pjsua. ʻAe, a i ʻole hiki iā ʻoe ke hoʻohana i kekahi ʻano linphone ʻē aʻe.

Ua wehewehe ʻia kēia mau mea a pau ma kā mākou wiki.

Pehea mākou i hiki ai i laila

No laila, i ka wā mua ua kū mai ka nīnau e pili ana i ke koho ʻana i kahi kahua lako. No ka mea ua maopopo ʻaʻole kūpono ʻo STM32F4-Discovery mai ka hoʻomanaʻo ʻana, ua koho ʻia ʻo STM32F7-Discovery. Loaʻa iā ia he 1 MB flash drive a me 256 KB o RAM (+ 64 hoʻomanaʻo wikiwiki kūikawā, a mākou e hoʻohana ai). ʻAʻole nui no nā kelepona ma o ke kikowaena, akā ua hoʻoholo mākou e hoʻāʻo e hoʻokomo.

Ma ke kūlana no lākou iho, ua māhele ʻia ka hana i kekahi mau pae:

  • Ke holo nei i ka PJSIP ma QEMU. Ua maʻalahi ia no ka debugging, a ua loaʻa iā mākou ke kākoʻo no ka codec AC97 ma laila.
  • Hoʻopaʻa leo a pāʻani hou ma QEMU a ma STM32.
  • Ke lawe ʻana i kahi palapala noi simple_pjsua mai PJSIP. Hiki iā ʻoe ke hoʻopaʻa inoa ma ka server SIP a kāhea aku.
  • E hoʻolālā i kāu kikowaena kikowaena Asterisk a hoʻāʻo iā ia, a laila e hoʻāʻo i nā mea waho e like me sip.linphone.org

Hoʻohana ʻia ke kani ma Embox ma o Portaudio, kahi i hoʻohana ʻia ma PISIP. Ua ʻike ʻia nā pilikia mua ma QEMU - ua pāʻani maikaʻi ʻo WAV ma 44100 Hz, akā ma 8000 ua hewa kekahi mea. Ua hoʻololiʻia he mea ia o ka hoʻonohonohoʻana i ke alapine - ma keʻano maʻamauʻo 44100 i loko o nā mea hana, aʻaʻole i loli kēia i ka papahana.

Maʻaneʻi, pono paha e wehewehe liʻiliʻi i ke kani ʻana o ke kani ma ke ʻano laulā. Hiki ke hoʻonohonoho ʻia ke kāleka kani i kahi kuhikuhi i kahi ʻāpana hoʻomanaʻo āu e makemake ai e pāʻani a hoʻopaʻa i kahi alapine i koho mua ʻia. Ma hope o ka pau ʻana o ka buffer, hana ʻia kahi hoʻopau a hoʻomau ka hoʻokō me ka buffer aʻe. ʻO ka mea ʻoiaʻiʻo, pono e hoʻopiha mua ʻia kēia mau buffer i ka wā e pāʻani ʻia ana ka mea mua. E kū hou ana mākou i kēia pilikia ma STM32F7.

Ma hope aʻe, hoʻolimalima mākou i kahi kikowaena a kau ʻia ʻo Asterisk ma luna. No ka mea he mea pono ia e debug nui, akā ʻaʻole makemake wau e ʻōlelo nui i ka microphone, pono ia e hana i ka pāʻani a me ka hoʻopaʻa ʻana. No ka hana ʻana i kēia, hoʻopaʻa mākou iā simple_pjsua i hiki iā ʻoe ke hoʻoheheʻe i nā faila ma kahi o nā leo leo. Ma PJSIP, hana maʻalahi kēia, no ka mea aia lākou i ka manaʻo o kahi awa, hiki ke lilo i mea hana a faila paha. A hiki ke hoʻopili ʻia kēia mau awa i nā awa ʻē aʻe. Hiki iā ʻoe ke ʻike i ke code ma kā mākou pjsip hale waihona. ʻO ka hopena, penei ka papahana. Ma ke kikowaena Asterisk, ua hoʻomaka wau i ʻelua moʻolelo - no Linux a no Embox. A laila, hoʻokō ʻia ke kauoha ma Embox simple_pjsua_imported, Hoʻopaʻa inoa ʻia ʻo Embox ma ke kikowaena, a laila kāhea mākou iā Embox mai Linux. I ka manawa o ka pilina, nānā mākou ma ka kikowaena Asterisk ua hoʻokumu ʻia ka pilina, a ma hope o kekahi manawa e lohe mākou i ke kani mai Linux ma Embox, a ma Linux mākou e mālama i ka faila i hoʻokani ʻia mai Embox.

Ma hope o ka hana ʻana ma QEMU, neʻe mākou i ka porting i STM32F7-Discovery. ʻO ka pilikia mua, ʻaʻole lākou i komo i ka 1 MB o ROM me ka ʻole o ka hoʻonohonoho hoʻonohonoho hoʻonohonoho "-Os" no ka nui o ke kiʻi. ʻO ia ke kumu i hoʻokomo ai mākou i "-Os". Eia hou, ua hoʻopau ka patch i ke kākoʻo no C ++, no laila pono ia no pjsua wale nō, a hoʻohana mākou i ka simple_pjsua.

Ma hope o ka waiho ʻia ʻana simple_pjsua, ua hoʻoholo i kēia manawa aia kahi manawa e hoʻomaka ai. Akā ʻo ka mea mua, pono ia e hana me ka hoʻopaʻa ʻana a me ka pāʻani ʻana o ka leo. ʻO ka nīnau ma hea kahi e kākau ai? Ua koho mākou i ka hoʻomanaʻo waho - SDRAM (128 MB). Hiki iā ʻoe ke hoʻāʻo iā ʻoe iho:

Hana i kahi stereo WAV me ke alapine o 16000 Hz a me ka lōʻihi o 10 kekona:


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

Nalo mākou:


play -m C0000000

Elua pilikia maanei. ʻO ka mea mua me ka codec - WM8994 hoʻohana ʻia, a loaʻa iā ia kahi mea e like me kahi slot, a aia nā 4 o kēia mau kau. . No laila, ma ke alapine o 16000 Hz, loaʻa iā mākou ka 8000 Hz, akā no 8000 Hz, ʻaʻole i hana ka pāʻani. Ke koho wale ʻia nā māka 0 a me 2, ua hana ia e like me ka mea e pono ai. ʻO kekahi pilikia ʻē aʻe, ʻo ia ka interface leo i ka STM32Cube, kahi e hana ai ka leo leo ma o SAI (Serial Audio Interface) me ka hoʻokomo leo (ʻaʻole maopopo iaʻu i nā kikoʻī, akā ua ʻike ʻia ua kaʻana like lākou i ka uaki maʻamau a i ka wā o ka Hoʻomaka ka hoʻopuka leo, hoʻopili ʻia ka leo i ka puka komo). ʻO ia hoʻi, ʻaʻole hiki iā ʻoe ke holo kaʻawale iā lākou, no laila ua hana mākou i kēia aʻe - ke hana mau nei ka hoʻokomo leo a me ka hoʻopuka leo (me nā interrupts i hana ʻia). Akā inā ʻaʻohe mea e pāʻani ʻia i loko o ka ʻōnaehana, a laila hoʻolei wale mākou i kahi pahu pahu i loko o ka hoʻopuka leo, a ke hoʻomaka ka pāʻani, hoʻomaka mākou e hoʻopiha.

Eia hou, ua ʻike mākou i ka ʻoiaʻiʻo o ka leo i ka wā o ka hoʻopaʻa leo ʻana he mālie loa. ʻO kēia ma muli o ka hana maikaʻi ʻole o nā microphones MEMS ma ka STM32F7-Discovery i nā alapine ma lalo o 16000 Hz. No laila, hoʻonoho mākou i 16000 Hz, ʻoiai inā hiki mai ka 8000 Hz. No ka hana ʻana i kēia, pono ia e hoʻohui i ka hoʻololi ʻana i ka polokalamu o kekahi alapine i kekahi.

A laila, pono wau e hoʻonui i ka nui o ka puʻu, aia ma RAM. E like me kā mākou helu ʻana, koi ʻia ka pjsip ma kahi o 190 KB, a he 100 KB wale nō i koe. Maanei, pono wau e hoʻohana i kahi hoʻomanaʻo waho - SDRAM (ma kahi o 128 KB).

Ma hope o kēia mau hoʻoponopono āpau, ʻike wau i nā pūʻolo mua ma waena o Linux a me Embox, a lohe au i ke kani! Akā weliweli ke kani, ʻaʻole like me QEMU, ʻaʻole hiki ke ʻike i kekahi mea. A laila, noʻonoʻo mākou i ka mea hiki ke hana. Ua hōʻike ʻo Debugging ʻaʻole loaʻa iā Embox ka manawa e hoʻopiha / wehe i nā mea hoʻopaʻa leo. ʻOiai e hana ana ʻo pjsip i hoʻokahi kiʻi, ua loaʻa i 2 mau keakea ka manawa e hiki mai ana e pili ana i ka pau ʻana o ka hoʻoheheʻe buffer, ʻoi aku ka nui. ʻO ka manaʻo mua no ka wikiwiki ʻo ka compiler optimization, akā ua hoʻokomo ʻia i PJSIP. ʻO ka lua, he wahi lana ʻana o ka lako, ua kamaʻilio mākou e pili ana i ia mea 'ōlelo. Akā e like me ka hoʻomaʻamaʻa i hōʻike ʻia, ʻaʻole hāʻawi ka FPU i ka piʻi nui o ka wikiwiki. ʻO ka hana aʻe ka hoʻonohonoho ʻana i nā pae. Loaʻa iā Embox nā hoʻolālā hoʻonohonoho ʻokoʻa, a ua hoʻokomo wau i kahi mea e kākoʻo ana i nā mea nui a hoʻonohonoho i nā kahawai leo i ka mea kiʻekiʻe loa. ʻAʻole i kōkua kēia.

ʻO ka manaʻo hou aʻe, ke hana nei mākou me ka hoʻomanaʻo o waho a he mea maikaʻi ke hoʻoneʻe i nā hale i loaʻa pinepine ʻia. Ua hana au i ka loiloi mua o ka wā a ma lalo o ke aha simple_pjsua hoʻokaʻawale i ka hoʻomanaʻo. Ua hoʻololi ʻia mai 190 Kb, ua hoʻokaʻawale ʻia ka 90 Kb mua no nā pono kūloko o PJSIP a ʻaʻole i komo pinepine ʻia. Eia hou, i ka wā o ke kelepona komo ʻana, ua kapa ʻia ka hana pjsua_call_answer, kahi e hoʻokaʻawale ʻia ai nā buffers no ka hana ʻana me nā kiʻi komo a i waho. Aia nō ma kahi o 100 Kb. A laila hana mākou i kēia. A hiki i ka manawa o ke kelepona, waiho mākou i ka ʻikepili i ka hoʻomanaʻo waho. Ma hope o ke kāhea ʻana, hoʻololi koke mākou i ka puʻu me kekahi - ma RAM. No laila, ua hoʻololi ʻia nā ʻikepili "wela" āpau i ka hoʻomanaʻo wikiwiki a ʻoi aku ka wānana.

ʻO ka hopena, ua hui pū kēia mau mea i hiki ke hoʻomaka simple_pjsua a kelepona ma o kāu kikowaena. A laila ma o nā kikowaena ʻē aʻe e like me sip.linphone.org.

haʻina

ʻO ka hopena, ua hiki ke hoʻomaka simple_pjsua me ka lawe leo ma na aoao elua ma o ke kikowaena. Hiki ke hoʻopau ʻia ka pilikia me ka 128 KB o SDRAM me ka hoʻohana ʻana i kahi Cortex-M7 ikaika iki (no ka laʻana, STM32F769NI me 512 KB o RAM), akā i ka manawa like, ʻaʻole mākou i haʻalele i ka manaʻolana e komo i 256 KB 🙂 E hauʻoli mākou inā makemake kekahi, A ʻoi aku ka maikaʻi, e hoʻāʻo. Aia nā kumu a pau, e like me ka mea maʻamau, i kā mākou hale waihona.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka