рдПрдХ рд╕рдордп рдореЗрдВ, рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рдпрд╛рддреНрд░рд╛рдУрдВ рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдореИрдВрдиреЗ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдЦрд┐рд▓реМрдирд╛ рдЦрд░реАрджрд╛ - рд╣реБрдЖрд╡реЗрдИ e1550 usb рдореЙрдбреЗрдоред рд▓реЗрдХрд┐рди рдбреИрд╢рд┐рдВрдЧ рдпреБрд╡рд╛рдУрдВ рдХрд╛ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЙрд╕рдиреЗ рдХрдИ рд╕рд╛рд▓реЛрдВ рддрдХ рдореЗрд░реА рд╢реЗрд▓реНрдл рдкрд░ рдзреВрд▓ рдорд╛рд░реАред рдФрд░ рдпрд╣ рдЖрдЧреЗ рдзреВрд▓ рдЦрд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рддрдм рдореБрдЭреЗ рдореЙрдбрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рдЖрдпрд╛ред рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╕рдПрдордПрд╕ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдХреЗ рдХрд╛рд░рдг рд╡реЙрдпрд╕ рдбрд╛рдпрд▓рд┐рдВрдЧ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрд╕рдПрдордПрд╕ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрд╕реНрдЯреЗрд░рд┐рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдмреЛрдЭрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдПрдХ рдореЙрдбреЗрдо рдкрд░ рдЧреЛрджреА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЦреБрдж рдПрдХ рдбрд╛рдпрд▓рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдХрд╛рд░рдгред
рдпреВрдПрд╕рдПрд╕рдбреА рдФрд░
рдПрд╕рдПрдордПрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдмрд╣реБрддрд╛рдпрдд рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореБрдЭреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (рдЬреИрд╕реЗ рдкрд░реНрд▓, рдкреАрдПрдЪрдкреА, рдиреЛрдб.рдЬреЗрдПрд╕) рдореЗрдВ рд╡реЙрдпрд╕ рдХреЙрд▓ рдХрд╛ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рдмрд╣реБрдд рдХрд╛рдо рдЖрдПрдЧрд╛ред
рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо: рд▓рд┐рдирдХреНрд╕
рд╡рд┐рддрд░рдг: OpenSUSE 12.3
рдХрд░реНрдиреЗрд▓: рей.рей.резреж-рез.резрем-рдбреЗрд╕реНрдХрдЯреЙрдк # рез рдПрд╕рдПрдордкреА рдкреНрд░реАрдореЗрдЪреНрдпреЛрд░ рд╢реБрдХреНрд░ рейрез рдордИ реиреж:реирез:реирей тАЛтАЛрдпреВрдЯреАрд╕реА реирежрезрей (97c14ba) i686 i686 i386 GNU / Linux
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛: рдкрд░реНрд▓
рдпреВрдПрд╕рдмреА рдореЙрдбреЗрдо: рд╣реБрдЖрд╡реЗрдИ e1550
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдПрдХ рдмрд┐рдЯред
рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгреЛрдВ рдкрд░, рдЗрд╕ рдореЙрдбреЗрдо рдХреЛ / dev рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдкрд░ 3 usb рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╣реИ:
/ dev / ttyUSB0 - рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕
/ рджреЗрд╡ / ttyUSB1 - рдЖрд╡рд╛рдЬ (рдЬрдм рдЖрд╡рд╛рдЬ рдореЛрдб рдЪрд╛рд▓реВ рд╣реИ) рдореЙрдбреЗрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕
/ dev / ttyUSB2 - рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдпрд╣ / dev / ttyUSB0 рд╕реЗ рднрд┐рдиреНрди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕реЗ рди рдХреЗрд╡рд▓ рдореЙрдбреЗрдо рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ, рдмрд▓реНрдХрд┐ рд╕реЗрд╡рд╛ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдЧреБрдгрд╡рддреНрддрд╛ рдбреЗрдЯрд╛, ^ CEND рдЖрдЙрдЯрдкреБрдЯ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдореЙрдбреЗрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рдЦреЛрд▓реЗрдВред
рдореЙрдбреЗрдо рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦреБрд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдореЙрдбреЗрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦреБрд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореЙрдбреЗрдо рдХреЛ рджрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ
рдХрдорд╛рдВрдб AT рдХрдорд╛рдВрдб рд╣реЛрддреЗ рд╣реИрдВHuawei e1550 рдореЙрдбреЗрдо рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рдФрд░ рдЙрди рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЙрддреНрддрд░реЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╣реБрд╡рд╛рд╡реЗрдИ рд╕реАрдбреАрдПрдордП рдбреЗрдЯрд╛рдХрд╛рд░реНрдб рдореЛрдбреЗрдо рдПрдЯ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдирд╣реБрд╡рд╛рд╡реЗрдИ UMTS рдбреЗрдЯрд╛рдХрд╛рд░реНрдб рдореЛрдбреЗрдо рдПрдЯ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдирдореЙрдбреЗрдо рдХреЗ рдзреНрд╡рдирд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ AT ^ CVOICE = 0 рдкрд░ рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЖрд╡рд╛рдЬ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рддрдм рддрдХ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ ^ ^ CVOICE = 1 рдХрдорд╛рдВрдб рд╕реЗ рдЕрдХреНрд╖рдо рди рд╣реЛ рдЬрд╛рдП
рдореЙрдбреЗрдо рдХреЛ рдСрдбрд┐рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд / рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде AT ^ DDSETEX = 2 рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдореЙрдбреЗрдо рдСрдбрд┐рдпреЛ рдкреЛрд░реНрдЯ рдХреЗ рдореЛрдб рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдореЙрдбреЗрдо рдореЗрдВ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдбрд┐рдЬрд┐рдЯрд▓реАрдХрд░рдг рдЖрд╡реГрддреНрддрд┐: 8000 рд╣рд░реНрдЯреНрдЬред
рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛: 1 (рдореЛрдиреЛ)ред
рдбрд┐рдЬрд┐рдЯрд▓реАрдХрд░рдг рдмрд┐рдЯ: 16 рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдПред
рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЛ рдореЙрдбреЗрдо рдХреЗ рдСрдбрд┐рдпреЛ рдкреЛрд░реНрдЯ рдореЗрдВ 320 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ 0.02 рд╕реЗрдХрдВрдб рдореЗрдВ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЙрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, 2 рдбреА рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбреЗрдо рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА CEND рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддрд╛ рд╣реИ
^ CEND рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк: call_index, рдЕрд╡рдзрд┐, end_status, cc_cause
рдЬрд╣рд╛рдВ:
call_index - рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
рдЕрд╡рдзрд┐ - рд╕реЗрдХрдВрдб рдореЗрдВ рдХреЙрд▓ рдХреА рдЕрд╡рдзрд┐
end_status - рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛрдб
cc_cause - рдХреЙрд▓ рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рдХрд╛рд░рдг рдХреЛрдб
So. рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдбрд╛рдпрд▓рд░ рдореЗрдВ 3 рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА:
huawey_voice_call.pl - рд╕реАрдзреЗ рдЖрд╡рд╛рдЬ рдбрд╛рдпрд▓рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реАред
list.01.pl - рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ред
test.voice.raw - рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдзреНрд╡рдирд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рдПрдВрдЧреА:
cc_cause.pl - рдХреЙрд▓ рдХреЗ рдЕрдВрдд рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (cc_cause)
end_status.pl - рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (end_status)
рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ (рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреЛрд╕реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдХрднреА-рдХрднреА рдХрдВрдкреНрдпреВрдЯрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)
huawey_voice_call.pl рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
- #! / usr / рдмрд┐рди / рдкрд░реНрд▓
- рдореЙрдбреНрдпреВрд▓ рд╕рдордп рдореЗрдВ # рдкреНрд▓рдЧ :: HiRes рдФрд░ рдЖрдпрд╛рдд
- # рд╡рд░реНрддрдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдХрд╛рд░реНрдп рдиреАрдВрдж рдХреЗ рд▓рд┐рдП
- # рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ
- # рджреЗрд░реА рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо
- рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ :: HiRes qw ( рдиреАрдВрдж ) ;
- # рд╣рдо рдХреЛрдб рдпреБрдХреНрдд cc_cause.pl рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдХреЛрдб рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- # рдпреЗ рдХреЛрдб рдХреЙрд▓ рдЦрддреНрдо рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рддреЗ рд╣реИрдВ
- # рдЗрд╕ рд▓рд┐рдкрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП
- рдПрдХ рдкреВрд░реНрдг рдбрд╛рдпрд▓рд░ рдХреЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ # рдкреИрд░рд╛рдореАрдЯрд░ ^ CEND: call_index, рдЕрд╡рдзрд┐, end_status, cc_cause
- # рдореЗрд░рд╛% cc_cause = do 'cc_cause.pl';
- # рд╣рдо рдХреЛрдб рд╕рд╣рд┐рдд рдлрд╝рд╛рдЗрд▓ end_status.pl рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреЙрд▓ рдПрдВрдбрдЗрдВрдб рдХрд╛рд░рдг рдХреЛрдб
- # рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдпреЗ рдХреЛрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
- # рдЗрд╕ рд▓рд┐рдкрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП
- рдПрдХ рдкреВрд░реНрдг рдбрд╛рдпрд▓рд░ рдХреЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ # рдкреИрд░рд╛рдореАрдЯрд░ ^ CEND: call_index, рдЕрд╡рдзрд┐, end_status, cc_cause
- # рдореЗрд░рд╛% end_status = do 'end_status.pl';
- # рдХреЗ рд▓рд┐рдП:
- # рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдореЙрдбреЗрдо рджреНрд╡рд╛рд░рд╛ CEND рдЯрд╛рдЗрдк рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
- # рдФрд░ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдХреЙрд▓ рдХреЗ рдЕрдВрдд рдХреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
- # рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
- # рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк ^ CEND: call_index, рдЕрд╡рдзрд┐, end_status, cc_cause
- # рдХрд╣рд╛рдВ:
- # call_index - рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
- # рдЕрд╡рдзрд┐ - рд╕реЗрдХрдВрдб рдореЗрдВ рдХреЙрд▓ рдХреА рдЕрд╡рдзрд┐
- # end_status - рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛрдб
- # cc_cause - рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдХреЛрдб
- # рдЬрдм рдПрдХ рдореЙрдбреЗрдо рдХреЛ рдУрдПрд╕ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИ
- рдореЙрдбреЗрдо рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП # 3 рдпреВрдПрд╕рдмреА рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ
- # рдЖрдорддреМрд░ рдкрд░ рдпрд╣:
- # # рджреЗрд╡ / ttyUSB0 - рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕
- # # рджреЗрд╡ / ttyUSB1 - рдЖрд╡рд╛рдЬ (рдЬрдм рдЖрд╡рд╛рдЬ рдореЛрдб рдЪрд╛рд▓реВ рд╣реИ) рдореЙрдбреЗрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕
- # # рджреЗрд╡ / ttyUSB2 - рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдЙрд╕ рдореЗрдВ / рджреЗрд╡ / ttyUSB0 рд╕реЗ рдореБрд╢реНрдХрд┐рд▓
- # рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рди рдХреЗрд╡рд▓ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбреЗрдо рдХреЗ рдЙрддреНрддрд░, рдмрд▓реНрдХрд┐ рд╕реЗрд╡рд╛ рд╡рд╛рд▓реЗ рднреА
- # рд╕рдВрджреЗрд╢ред рдЬреИрд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдХреНрд╡рд╛рд▓рд┐рдЯреА рдбреЗрдЯрд╛, ^ CEND рдЖрдЙрдЯрдкреБрдЯ рдЖрджрд┐ред
- # рдореЙрдбреЗрдо рдореЗрдВ рдзреНрд╡рдирд┐ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ
- $ VOICE_PORT = "/ dev / ttyUSB1" ;
- # рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ
- $ COMMAND_PORT = "/ dev / ttyUSB2" ;
- # рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
- # 0 - рдбрд┐рдмрдЧрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- # 1 - рдбрд┐рдмрдЧрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- $ VERBOSE = 1 ;
- # рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рдкреЛрд░реНрдЯ рдЦреЛрд▓реЗрдВ
- рдореЗрд░реЗ $ SENDPORT , '+ <' , $ COMMAND_PORT рдХреЛ рдЦреЛрд▓реЗрдВ рдпрд╛ "$ COMMAND__ 'рдХреЛ рди рдЦреЛрд▓реЗрдВ: $! \ n " ;
- # рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрдо рд╡реЙрдпрд╕ рдкреЛрд░реНрдЯ рдЦреЛрд▓реЗрдВ
- # рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкреЛрд░реНрдЯ рд╕реЗ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- # рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
- рдореЗрд░реЗ $ SENDPORT_WAV , '+ <' , $ VOICE_PORT рдХреЛ рдЦреЛрд▓реЗрдВ рдпрд╛ "$ VOICE_PORT 'рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддреЗ: $! \ n " ;
- # рд╣рдо рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рд╣рд┐рдд рдлрд╝рд╛рдЗрд▓ list.01.pl рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
- my @user_list = do 'list.01.pl' ;
- # рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ 2 рдкреИрд░рд╛рдореАрдЯрд░ рднреЗрдЬрддрд╛ рд╣реИ:
- # 1 - рдзреНрд╡рдирд┐ рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
- # 2 - рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛ рд╕рд░рдгреА
- call_list ( "test.voice.raw" , \ @user_list ) ;
- # рдХреЙрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ / рдкреЛрд░реНрдЯ рдмрдВрдж рдХрд░реЗрдВ
- exit_call ( ) ;
- # рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреА рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
- рдЙрдк рдХреЙрд▓_рд╕реВрдЪреА {
- # рдзреНрд╡рдирд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- рдореЗрд░реА $ l_file = shift ;
- # рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- рдореЗрд░реА $ l_list = рдкрд╛рд░реА ;
- # рдзреНрд╡рдирд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реЗрдВ
- рдореЗрд░реЗ $ l_voice = load_voice ( $ l_file ) ;
- # рдпрд╣ рдЪрдХреНрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ
- # рдФрд░ рдбрд╛рдпрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ
- foreach $ l_info ( @ { $ l_list } ) {
- # рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбрд╛рдпрд▓ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд╣рддреЗ рд╣реИрдВ
- рдореЗрд░реЗ $ l_msg = call_one ( $ l_info , $ l_voice ) ;
- # рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
- $ l_msg рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ ;
- # рдЕрдЧрд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлреЛрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
- # 3 рд╕реЗрдХрдВрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
- рдиреАрдВрдж 3 ;
- }
- }
- # рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
- # рдФрд░ рдпрджрд┐ рд╕рдлрд▓ - рдПрдХ рдЖрд╡рд╛рдЬ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
- рдЙрдк call_one {
- рдореЗрд░реА $ l_info = рд╢рд┐рдлреНрдЯ ; # рд╡рд░реНрддрдорд╛рди рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдЪрдПрдПрд╕рдПрдЪ
- рдореЗрд░реА $ l_bufer = рд╢рд┐рдлреНрдЯ ; # рд╣реЗрдбрд░ рд╕рдВрджреЗрд╢ рдХреЗ 320 рдмрд╛рдЗрдЯ рд╡рд┐рдЦрдВрдбреВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА
- # рдЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рдореЙрдбреЗрдо рдореЗрдВ рд╡реЙрдпрд╕ рдореЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ
- # рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ / рдлрд┐рд░ рд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ
- # рдпрд╣ рдЖрджреЗрд╢ред рдореЙрдбреЗрдо рд░рд╛рдЬреНрдп рдХреЛ рдпрд╛рдж рд░рдЦреЗрдЧрд╛ред
- #at_send ('AT ^ CVOICE = 0');
- # рдореЙрдбреЗрдо рдХреЛ рдирдВрдмрд░ $ l_info рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ -> {рдлрд╝реЛрди}
- # рдФрд░ рдореЙрдбреЗрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдореНрдореАрдж:
- # рдареАрдХ - рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбрд╛рдпрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛
- # NO CARRIER - рд╕реЗрд▓реБрд▓рд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ
- рдореЗрд░реЗ $ l_rec = at_send ( "ATD $ l_info -> {phone};" , qr / ( OK ред NO CARRIER ) / ) ;
- # рдпрджрд┐ рдбрд╛рдпрд▓-рдЕрдк рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рдПрдВ
- "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ $ l_info -> {name} [$ l_info -> {phone}] рдХреЛ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ $ l_rec eq 'NO CARRIER' рдирд╣реАрдВ рд╣реИ ред
- # рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдлреЛрди рдЙрдард╛рддрд╛ рд╣реИ
- # CONN: .... - рдЙрдкрднреЛрдХреНрддрд╛ рдиреЗ рдлреЛрди рдЙрдард╛рдпрд╛
- # CEND: .... - рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкрд▓рдмреНрдз, рд╡реНрдпрд╕реНрдд рдпрд╛ рдХреЙрд▓ рдбреНрд░реЙрдк рд╣реИ
- $ l_rec = at_rec ( qr / \ ^ (CONN \: 1 \ _, 0; CEND \ :) / ) ;
- # рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдлреЛрди рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИ, рддреЛ рдлрдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рдПрдВ
- "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ $ l_info -> {name} [$ l_info -> {phone}] рдХреЛ рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ $ l_rec eq 'CEND:' рдирд╣реАрдВ рд╣реИ рддреЛ ACCESSIBLE рдпрд╛ RESETED \ n " ;
- # рдореЙрдбреЗрдо рдХреЛ рдзреНрд╡рдирд┐ рд░рд┐рд╕реЗрдкреНрд╢рди / рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
- # рдареАрдХ рд╣реИ - рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдлрд▓ рд░рд╣реА
- # рддреНрд░реБрдЯрд┐ - рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╡рд┐рдлрд▓
- # CEND: .... - рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкрд▓рдмреНрдз, рд╡реНрдпрд╕реНрдд рдпрд╛ рдХреЙрд▓ рдбреНрд░реЙрдк рд╣реИ
- $ l_rec = at_send ( 'AT ^ DDSETEX = 2' , qr / ( OK ERROR | CEND \ :) / ) ;
- # рд╡реЙрдЗрд╕ рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдпрд╛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдиреЗ рдирд╣реАрдВ рдЙрдард╛рдпрд╛
- # рд╣реИрдВрдбрд╕реЗрдЯ - рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рдПрдВ
- "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ $ l_info -> {name} [$ l_info -> {phone}] рдХреЛ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВред рдпрджрд┐ $ l_rec ne 'OK' рдирд╣реАрдВ рд╣реИ рддреЛ ACCESSIBLE рдпрд╛ RESETED \ n " ;
- # рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЙрд▓ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдлреЛрди рдЙрдард╛рдпрд╛
- # рдореЙрдбреЗрдо рд╕реЗ рдзреНрд╡рдирд┐ 320 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╣рд░ 0.02 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП
- # рд╕реЗрд╡рд╛ рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВ $ | рдкреНрд░рддрд┐ рдпреВрдирд┐рдЯ рдпрд╣ рдмрдлрд░рд┐рдВрдЧ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред
- # рдЗрд╕ рддрд░рд╣ рд╕реЗ, рд╕рд╛рдЙрдВрдб рдкреЛрд░реНрдЯ рдкрд░ рддреБрд░рдВрдд рдбреЗрдЯрд╛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
- $ | = 1 ;
- # рдЖрд╡рд╛рдЬ рд╕рдВрджреЗрд╢ рдХреЗ 320 рдмрд╛рдЗрдЯ рд╡рд┐рдЦрдВрдбреВ рдХреЗ рд╕рд╛рде рдмрдлрд░ рд▓реВрдк
- рдореЗрд░реЗ $ c ( @ { $ l_bufer } ) {
- # рдореЙрдбреЗрдо рдХреЗ рд╡реЙрдпрд╕ рдкреЛрд░реНрдЯ рдореЗрдВ рдЕрдЧрд▓рд╛ рдЯреБрдХрдбрд╝рд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ
- syswrite $ SENDPORT_WAV , $ c , 320 ;
- # рдЪрдХреНрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 0.02 рд╕реЗрдХрдВрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
- рдиреАрдВрдж ( 0.02 ) ;
- }
- # рд╣рдо рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВред
- at_send ( 'AT + CHUP ' ) ;
- # рд╣рдо рдПрдХ рд╕рдлрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВред
- "рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ $ l_info -> {name} [$ l_info -> {phone}] SUCCESSFULLY NOTIFIED \ n " ;
- }
- # рдпрд╣ рдлрд╝рдВрдХреНрд╢рди 320 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рд╡реЙрдЗрд╕ рдореИрд╕реЗрдЬ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
- # 1 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо
- # рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк - pcm, рдореЛрдиреЛ, 8000 рд╣рд░реНрдЯреНрдЬ, 16 рдмрд┐рдЯ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд
- рдЙрдк load_voice {
- рдореЗрд░реА $ l_file_name = рдкрд╛рд░реА ;
- рдореЗрд░реЗ $ l_fh = new IO :: рдлрд╝рд╛рдЗрд▓ "<$ l_file_name" рдпрд╛ рдорд░ "$ l_file_name рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛: $!" ;
- рдмрд┐рдирдореЛрдб ( $ l_fh ) ;
- my @l_bufer = ( ) ;
- рдЬрдмрдХрд┐ ( рдкрдврд╝реЗрдВ ( $ l_fh , $ l_bufer [ $ i ] , 320 ) ) { $ i ++; }
- рдХрд░реАрдм $ l_fh ;
- рд╡рд╛рдкрд╕реА \ @l_bufer ;
- }
- # рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореЙрдбреЗрдо рдХрдорд╛рдВрдб рдкреЛрд░реНрдЯ рдкрд░ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬрддрд╛ рд╣реИ
- # рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ
- # 2 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ:
- # 1 рдЯреАрдо
- # 2 - рдЕрдкреЗрдХреНрд╖рд┐рдд рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдареАрдХ рд╣реИ)
- рдЙрдк at_send {
- рдореЗрд░реА $ l_cmd = рдкрд╛рд░реА ;
- рдореЗрд░реА $ l_rx = рдкрд╛рд░реА || qr / (OK) / ;
- $ SENDPORT "$ l_cmd \ r " рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ ;
- рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ "рднреЗрдЬреЗрдВ: [$ l_cmd] \ n " рдЕрдЧрд░ $ VERBOSE ;
- at_rec ( $ l_rx ) рд╡рд╛рдкрд╕ ;
- }
- # рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореЙрдбреЗрдо рд╕реЗ рдПрдХ рдореЙрдбреЗрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ
- # 1 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ - рдЕрдкреЗрдХреНрд╖рд┐рдд рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдареАрдХ рд╣реИ)
- рдЙрдк at_rec {
- рдореЗрд░реА $ l_rx = рдкрд╛рд░реА || qr / рдареАрдХ / ;
- рдореЗрд░реА $ рд░рд┐рд╕реАрд╡ = '' ;
- рдЬрдмрдХрд┐ ( ( $ recive = ~ $ l_rx ) ) {
- $ recive = < $ SENDPORT >;
- $ recive = ~ s / [ \ n \ r ] + // рд╕рдВрджреЗрд╢ ;
- рдкреНрд░рд┐рдВрдЯ "RECIVE: [$ recive] \ n " рдЕрдЧрд░ $ VERBOSE && $ recive ;
- }
- $ recive = ~ $ l_rx ;
- рдкреНрд░рд┐рдВрдЯ "END RECIVE: [$ recive] [$ 1] [$ l_rx] \ n " рдЕрдЧрд░ $ VERBOSE ;
- рд╡рд╛рдкрд╕реА $ 1 ;
- }
- # рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рдЦреЛрд▓реЗ рдЧрдП рдореЙрдбреЗрдо рдкреЛрд░реНрдЯ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ
- рдЙрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ { рдХреЙрд▓ {
- рдкреНрд░рд┐рдВрдЯ "рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЪреБрдХреА рд╣реИ" ;
- рдХрд░реАрдм $ SENDPORT_WAV ;
- at_send ( 'AT + CHUP ' ) ;
- рдХрд░реАрдм $ SENDPORT ;
- }
list.01.pl рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
# рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реВрдЪреАред
# рдпрд╣ рд╣реИрд╢ рдПрд░реЗ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ
# рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛:
# рдлреЛрди - рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдлреЛрди
# рдирд╛рдо - рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдирд╛рдо
# рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ
(
{ рдлреЛрди => '+79111234567' , рдирд╛рдо => 'рдкреЗрдЯреНрд░реЛрд╡ рдкреЗрдЯреНрд░ рдкреЗрдЯреНрд░реЛрд╡рд┐рдЪ' } ,
{ рдлреЛрди => '+79117654321' , рдирд╛рдо => 'рд╡рд╕реАрд▓реАрд╡ рд╡рд╛рд╕рд┐рд▓реА рд╡рд╛рд╕рд┐рд▓реАрд╡рд┐рдЪ ' }
) ;
test.voice.raw рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ
рдСрдбреЗрд╕рд┐рдЯреА рдСрдбрд┐рдпреЛ рдПрдбрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:





рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╛рдЗрд▓реЗрдВ cc_cause.pl рдФрд░ end_status.pl рднреА рджреЗрддрд╛ рд╣реВрдВред рд╡реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рд╕реНрддреБрдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реБрдзрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред
cc_cause.pl
# рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд╛рд░рдг (cc) рдХреЛрдб
# рдЕрдВрдЧреНрд░реЗрдЬреА http://www.eversoft.net/dcc.html
# рд░реВрд╕реА рдореЗрдВ http://ru.wikipedia.org/wiki/Q.931
# рдорд╛рдирд╡реА рд╣реБрд╡рд╛рд╡реЗ рдкрд░
# рд╣реБрд╡рд╛рд╡реЗрдИ рд╕реАрдбреАрдПрдордП рдбреЗрдЯрд╛рдХрд╛рд░реНрдб рдореЛрдбреЗрдо рдПрдЯ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди
"# http://www.letswireless.com.cn/asp_bin/downfile/2009929121443234.pdf"
#
# рд╣реБрд╡рд╛рд╡реЗрдИ рдпреВрдПрдордЯреАрдПрд╕ рдбреЗрдЯрд╛рдХрд╛рд░реНрдб рдореЛрдбреЗрдо рдПрдЯ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди
# "http://www.net139.com/UploadFile/menu/HUAWEI%20UMTS%20Datacard%20Modem%20AT%20Command%20Interface%20Specification/V2.3.pdf"
(
'1' => 'UNASSIGNED_CAUSE' ,
'3' => 'NO_ROUTE_TO_DEST'
'6' => 'CHANNEL_UNACCEPTABLE'
'8' => 'OPERATOR_DETERMINED_BARRING' ,
'16' => 'NORMAL_CALL_CLEARING' ,
'17' => 'USER_BUSY' ,
'18' => 'NO_USER_RESPONDING'
'19' => 'USER_ALERTING_NO_ANSWER' ,
'21' => 'CALL_REJECTED' ,
'22' => 'NUMBER_CHANGED' ,
'26' => 'NON_SELECTED_USER_CLEARING' ,
'27' => 'DESTINATION_OUT_OF_ORDER' ,
'28' => 'INVALID_NUMBER_FORMAT' :
'29' => 'FACILITY_REJECTED' :
'30' => 'RESPONSE_TO_STATUS_ENQUIRY' ,
'31' => 'NORMAL_UNSPECIFIED'
'34' => 'NO_CIRCUIT_CHANNEL_AVAILABLE' ,
'38' => 'NETWORK_OUT_OF_ORDER'
'41' => 'TEMPORARY_FAILURE'
'42' => 'SWITCHING_EQUIPMENT_CONGESTION' ,
'43' => 'ACCESS_INFORMATION_DISCARDED' ,
'44' => 'REQUESTED_CIRCUIT_CHANNEL_NOT_AVAILABLE'
'47' => 'RESOURCES_UNAVAILABLE_UNSPECIFIED' ,
'49' => 'QUALITY_OF_SERVICE_UNAVAILABLE' ,
'50' => 'REQUESTED_FACILITY_NOT_SUBSCRIBED' ,
'55' => 'INCOMING_CALL_BARRED_WITHIN_CUG' ,
'57' => 'BEARER_CAPABILITY_NOT_AUTHORISED' ,
'58' => 'BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE' ,
'63' => 'SERVICE_OR_OPTION_NOT_AVAILABLE' ,
'65' => 'BEARER_SERVICE_NOT_IMPLEMENTED' ,
'68' => 'ACM_GEQ_ACMMAX'
'69' => 'REQUESTED_FACILITY_NOT_IMPLEMENTED' ,
'70' => 'ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE' ,
'79' => 'SERVICE_OR_OPTION_NOT_IMPLEMENTED' ,
'81' => 'INVALID_TRANSACTION_ID_VALUE' ,
'87' => 'USER_NOT_MEMBER_OF_CUG' ,
'88' => 'INCOMPATIBLE_DESTINATION' ,
'91' => 'INVALID_TRANSIT_NETWORK_SELECTION' ,
'95' => 'SEMANTICALLY_INCORRECT_MESSAGE' ,
'96' => 'INVALID_MANDATORY_INFORMATION' ,
'97' => 'MESSAGE_TYPE_NON_EXISTENT' ,
'98' => 'MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROT_STATE'
'99' => 'IE_NON_EXISTENT_OR_NOT_IMPLEMENTED' ,
'100' => 'CONDITIONAL_IE_ERROR' ,
'101' => 'MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE'
'102' => 'RECOVERY_ON_TIMER_EXPIRY' ,
'111' => 'PROTOCOL_ERROR_UNSPECIFIED' ,
'127' => 'INTERWORKING_UNSPECIFIED' ,
'160' => 'REJ_UNSPECIFIED'
'161' => 'AS_REJ_RR_REL_IND' ,
'162' => 'AS_REJ_RR_RANDOM_ACCESS_FAILURE' ,
'163' => 'AS_REJ_RRC_REL_IND' ,
'164' => 'AS_REJ_RRC_CLOSE_SESSION_IND' ,
'165' => 'AS_REJ_RRC_OPEN_SESSION_FAILURE' ,
'166' => 'AS_REJ_LOW_LEVEL_FAIL' ,
'167' => 'AS_REJ_LOW_LEVEL_FAIL_REDIAL_NOT_ALLOWD' ,
'168' => 'MM_REJ_INVALID_SIM' ,
'169' => 'MM_REJ_NO_SERVICE' ,
'170' => 'MM_REJ_TIMER_T3230_EXP' ,
'171' => 'MM_REJ_NO_CELL_AVAILABLE' ,
'172' => 'MM_REJ_WRONG_STATE' ,
'173' => 'MM_REJ_ACCESS_CLASS_BLOCKED' ,
'174' => 'ABORT_MSG_RECEIVED' ,
'175' => 'OTHER_CAUSE' ,
'176' => 'CNM_REJ_TIMER_T303_EXP' ,
'177' => 'CNM_REJ_NO_RESOURCES' ,
'178' => 'CNM_MM_REL_PENDING' ,
'179' => 'CNM_INVALID_USER_DATA'
) ;
end_status.pl
# рдХреЛрдб рдХреЙрд▓ рдПрдВрдб рдХреЛрдб рдХрд╛рд░рдг
# рдорд╛рдирд╡реА рд╣реБрд╡рд╛рд╡реЗ рдкрд░
#
# рд╣реБрд╡рд╛рд╡реЗрдИ рд╕реАрдбреАрдПрдордП рдбреЗрдЯрд╛рдХрд╛рд░реНрдб рдореЛрдбреЗрдо рдПрдЯ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди
"# http://www.letswireless.com.cn/asp_bin/downfile/2009929121443234.pdf"
#
# рд╣реБрд╡рд╛рд╡реЗрдИ рдпреВрдПрдордЯреАрдПрд╕ рдбреЗрдЯрд╛рдХрд╛рд░реНрдб рдореЛрдбреЗрдо рдПрдЯ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди
# "http://www.net139.com/UploadFile/menu/HUAWEI%20UMTS%20Datacard%20Modem%20AT%20Command%20Interface%20Specification/V2.3.pdf"
(
'0' => 'рдмреЛрд░реНрдб рдСрдлрд╝рд▓рд╛рдЗрди рд╣реИред' ред
'21' => 'рдмреЛрд░реНрдб рд╕реЗрд╡рд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред' ред
'22' => 'рдХреЙрд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред' ред
'23' => 'рдмреАрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдмрд╛рдзрд┐рдд рд╣реИред' ред
'24' => 'рдмреАрдПрд╕ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред' ред
'25' => 'рдмреАрдПрд╕ рдПрдХ рдХреЙрд▓ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред' ред
'26' => 'BS рд╡рд░реНрддрдорд╛рди SO рд╕реЗрд╡рд╛ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред' ред
'27' => 'рдЖрдиреЗ рд╡рд╛рд▓реА рдмреАрдПрд╕ рдХреЙрд▓ рд╣реИред' ред
'28' => 'рдмреАрдПрд╕ рд╕реЗ рдЕрд▓рд░реНрдЯ рд╕реНрдЯреЙрдк рдорд┐рд▓рд╛ред' ред
'29' => 'рдЧреНрд░рд╛рд╣рдХ рдЕрдВрдд рддрдХ рдХреЙрд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред' ред
'30' => 'рдЕрдВрдд рд╕рдХреНрд░рд┐рдпрдг рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ - OTASP рдХреЙрд▓ред' ред
'31' => 'MC рдХреЙрд▓ рджреАрдХреНрд╖рд╛ рдпрд╛ рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред' ред
'34' => 'RUIM рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред' ред
'99' => 'рдПрдирдбреАрдПрд╕рдПрд╕ рддреНрд░реБрдЯрд┐ред' ред
'100' => 'рдЖрд░рдПрдХреНрд╕рдбреА рдирд┐рдЪрд▓реА рдкрд░рдд рд╕реЗ рдПрдХ рдХрд╛рд░рдг, cc_cause рдореЗрдВ рджреЗрдЦреЗрдВ'
'101' => 'MS рдХреЙрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред' ред
'102' => 'рдПрдордПрд╕ рдПрдХ рдЗрдирдХрдорд┐рдВрдЧ рдХреЙрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред' ред
'103' => 'рдкреБрдЯ-рдереНрд░реВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдХреЙрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред' ред
'104' => 'рд░рд┐рд▓реАрдЬрд╝ рдлреЙрд░ рдбрд┐рдЯреЗрд▓реНрд╕, рдЪреЗрдХ' рд╕реЗ рд╣реИ ред
'105' => 'рдлреЛрди рд╢реБрд▓реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред' ред
'106' => 'рдПрдордПрд╕ рд╕реЗрд╡рд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ'
) ;
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВред
рд╡реЙрдЗрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реНрдг рдФрд░ рд╕рд╣реА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЧрдВрднреАрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд╛рдпрд▓ рдХрд░рдиреЗ рдХреА рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, CEND рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрджрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдЖрдк рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ, рдЧреНрд░рд╛рд╣рдХ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдкрд╛рджрдХ, рд░рд┐рдкреЛрд░реНрдЯ рдкреАрдврд╝реА рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╛рдВрдЧ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓реЗрдЦреЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред