Embedded System: V2IP Phone Development
Download
Report
Transcript Embedded System: V2IP Phone Development
Embedded System:
2
V IP Phone
Design & Development
D96921014
郭人豪
Outline
Introduction
Function List
Design
Obstacles, Workaround and Bug Fix
Rule of Thumb
Conclusion
Introduction
What is V2IP Phone?
Voice and Video over IP Phone
Extend from H.323
Video use H.263, MPEG4 SP, H.264 BP
Audio use G.711, G.726, G.729, AMR-NB, AMR-WB,
iLBC, etc.
Large LCD screen with Web Surf AP
3.5” ~ 7”
Browser, Mail Client, Widget, Media player, etc.
Hardware Design of
2
V IP
Phone
3com, Agere
Separated Codec & AP Processor
Fast but Complex and High close
TI, Broadcom, Qualcomm
Integrated DSP in AP Processor
Complex Software Designed and Hard to port
Freescale, ADI, Renesas
AP Processor with Multimedia Accelerator
Relatively Low Cost but limited capabilities
Separated Codec & Processor
Network I/O
LCD
Keypad I/O
TouchPanel
Hook State
LED Control
CAM
Audio I/O
Modem / Codec
AP Processor
Ethernet Switch
Integrated DSP in AP Processor
LCD
Processor Core
CAM
Internal Bus
Human I/O
Network I/O
Audio I/O
DSP
AP Processor w/ Multimedia Accelerator
LCD
ASIC MM
Accelerator
CAM
AP Processor
Human I/O
Network I/O
Audio I/O
2
V IP
Phone Capabilities
Video
Encoder / Decoder
Multi format support
Adapted Buffer Control
Broken Frame Recovery
PiP, PoP
Lips sync
Bitrate, Frame interval, Framerate, etc.
2
V IP
Phone Capabilities
Audio
Encoder / Decoder
Acoustic Echo Cancellation
Acoustic Echo Suppression
Jitter Control
Voice Activity Detection
White Noise Generator
3-way talking, Muxer, etc.
2
V IP
Phone Capabilities
Dialing Tone
EU, US, JP format
Tone Generator
Human interactive tone generator
2
V IP
Phone Capabilities
Protocols
SIP protocol (w/ T.120)
RTP, RTCP streaming protocol
RTSP streaming control
SRTP, SRTCP security
HTTP for firmware update & Web-base UI Control
DHCP client, 802.1q VLAN 802.1p, 802.1p QoS
ICMP ping, ARP dup-host detection, etc.
2
V IP
Phone Capabilities
APPs
Phone Book, Contact List
Calendar
Web Browser
Electric White Board, Screen Cap
XML support for SIP extension
SoftDSP
Idea from Freescale
Using Hardware ASIC for Video Codec
Too complex for embedded system
Core2Duo Process only 3-5 fps for 1080p AVC
Audio Codec is relatively easy
Using AP Processor to encode / decode audio frame
Low cost and can upgrade for upcoming audio codec
Performance is affected by OS and CPU power
Design Requirement
Audio Heartbeat must be called every 10 or 20 ms
Video Heartbeat must be called every 10, 20, or 40 ms
Hook state must be process at once
TouchPanel must be interactive at once but can be executed later
While streaming, Audio must be always clear and no glitch
i.e. play click sound at once and insert event into list
Video is reasonable smooth
Hook state is always first priority
Web surfing or other AP may have performance penalty while streaming
is on
LED display pattern is always real-time
And on and on and on…..
System Design
Main Phone thread
Generate and Monitor
Hook thread
MultiMedia
thread
ToneGen
thread
UI Interactive
thread
SIP thread
LED control
thread
Keypad
Read thread
……
Create Events and Insert
Event Queue
Execute thread
System Design
Main Phone Process
MultiMedia
state
Hook state
SIP state
LED control
state
ToneGen
state
Dispatch
Idle state
Keypad
Read state
Loop Every 10 ms
UI Interactive
state
System Design
UI Code
Phone Middleware
I/O Routine
LED Control
Hook state
Keypad
(Human Interact)
Virtual Functions
for implementation
Callback
functions
Network I/O
Audio / Video I/O
System Design
UI Code
Keypad
Touch Panel
IPC call
Phone Middleware
Callback
functions
I/O Routine
Network I/O
Audio / Video I/O
Hook State
LED Control
Etc.
Comparison of Interrupt / Poll
High Loading
Low CPU power
How to design queue length?
Mutex, thread overhead, program style
Error resilience or high performance
Resource starvation, implementation fault
Timing
How to make sure it runs on-time?
Comparison of Combine / Separated
UI
Overhead
Need IPC to communicate
Need CPU to process, waste of already critical CPU
load
Complexity
Need to define internal protocol for communicate
OS support, performance
Why choose two-tier design?
Results
Code size
Footprint size
2.5MB vs. 8MB (plus C++ lib)
5.5MB vs. 20MB
Client test
500K bulk dial test passed
Audio Problem
DELAY!!!!
Linux 2.4 use OSS audio driver
2.6 starting support ALSA audio driver
ALSA provide low/zero latency delay
TIA-810A require phone to have 100ms delay from
end to end
Mic → audio driver → audio encoder → packetized →
network → muxer → audio decoder → speaker
How to minimize the delay?
Audio Problem
WHERE IS THE CPU POWER???
VAD use little CPU, so does white noise, most audio codec
except G.726.
AES use moderate CPU but still survive
Not in 4-way talking or above
PEOPLE DON’T WANT AES!!!
AEC is much much more complicated
According to a pre-Bell Lab engineer, there are two design in
embedded system, 16ms of 1024ms or 64ms of 128ms
The complexity grows exponentially with detect range
How about a phone without Speaker?
Video Problem
Video Input chip not compatible with AP
Processor
PAL in okay to transform to CIF
Big problem in NTSC to CIF
640x240 to 352x288 but no upscale (240 → 288 upscale)
The ghostly Preview Windows
Sometimes, the hardware design is just can’t match
the software requirement
Open the preview window 1x1, configure the PrP, close
the window, call UI to flush the bitmap
LED Problem
Use AP Processor’s GPIO port and CPU clock
to emulate LED on/off period
Not accurate
Actually, totally waste of CPU and out of sync in
such a short period
You can’t throw the CPU in the LED routing, there
are Audio and Video are waiting for you.
So, how about throw away the LED indicator
and use LCD only?
Extension Board Problem
Custom Chip for ext. board signaling and LED flashing
I2C interface, which is buggy and affect the audio chip
control
Custom protocol, which is also buggy and need to bug on
bug
No-one-can-understand spec, which is told by their senior
through phone and personal guide
The packet with no payload after each command
Time interval between commands
Write-read and read-write-read period
LCD Problem
Are you kidding? LCD problem?
Yes, and it’s really a painful experience
CPU spec is for reference only (the pirate code?)
Demo board comes with QVGA panel
CPU spec support up to VGA panel
But not VGA video with PIP!
Amplifier Problem
Not embedded system related but is funny
The gain value write in Audio chip manual is not the
actually measured value on board
The auto-gain or pre-gain function on chip has the
same name but different implementation with the
one in customer requirement
Hardware design and power management
Protocol Problem
The SDP in SIP is a RFC standard
But not in the engineer’s mind of the ATA box
designer
Yes, the compatibility problem
But this time, there are no reference, no guide, no
document, no source code.
System Problem
In Linux 2.4 you have no clock_gettime() but
gettimeofday()
Which is extremely vulnerable while NTP settimeofday()
Embedded system often omit the external RTC clock for cost
issue
How can I do?
The invincible watchdog in embedded system
Phone crash, UI crash, power lost, in-experience user
manipulation, maintenance, Server crash, etc.
Resource Problem
Flash is used widely in embedded system
Read lightningly fast, write damnly slow
Block all other routine while writing to flash
Buggy interface in Kernel
Multiple write will crash, use fwrite instead
Fwrite can’t measure time
Configuration lost, Bad bits in flash, etc.
Rule of Thumb
Customer don’t know what they want, just push the
product and ads to them!
Embedded system is customized and extendable
Likewise in sales. Make sure you do not admit every function
what they just think of while stay in toilet.
But they are NOT everything. Think before agree the
requirement from customer
Don’t argue with engineers
Try to help them workaround the bug or negotiate with
customer to have another way
Conclusion
Choosing RIGHT BSP will shorter the development quite a lot
Think about what you’re designing before you design
There are always a workaround there, just you may not find it
Choosing the RIGHT HARDWARE is the same important as
good code-syntax writing
We are developing embedded system! Throw away the compatibility!
Boys, this is not the well-known x86 system
Please always keep in mind that the CPU performance is limited
while coding on embedded system
The RAM is limited too, don’t memcpy() on every stuff!
Thank you
Please have some feedback.