Recently, I've buy a "new old stock" Cisco CP-6921 in order to replace my old POTS phone used in conjunction with my FXS that I've configured not long ago. So, as Cisco do their best, it's not straightforwardly to configured without their proprietary softwares. Fortunately, there's tons of resources to help and, finally, got me through and got it done. So, to help alleviate the pain that I've gone through, I decide to, once again, write this memo.
This is how I done, not a tutorial. Use your own discrestion. I won't take any responsibility if things break.
- A usable FreePBX. (I use ISO VM)
- Cisco CP-6921 IP phone (duh)
- Create an extension on FreePBX
- Setup a tftp server so the phone can fetch configurations and firmwares:
apt install tftp-server
-
Edit
/etc/default/tftpd-hpa
by chageTFTP_OPTIONS
line toTFTP_OPTIONS="--secure --verbose"
. This is to make us easy to debug what file do they need. -
sudo systemctl restart tftpd-hpa.service
-
Download SIP firmwares and things. I use the following files from
staskobzar/cisco_prov
Git repo:BOOT69xx.0-0-0-14.zz.sgn
DSP69xx.12-4-122-99.131025.zz.sgn
SIP69xx.9-4-1-3SR2.loads
SIP69xx.9-4-1-3SR2.zz.sgn
-
Create
XMLDefault.cnf.xml
,dialplan.xml
, andThailand/g3-tones.xml
from the file below. -
See MAC address from the bottom of the phone. Write that down! Write that down!
-
Create
SEP<MAC>.cnf.xml
from the file below. Replace<MAC>
with the MAC address taken from the last step in uppercase format. -
Generate
ITLFile.tlv
. follow this tutorial for more info. Note that, onasterisk.pem
step, I create a PEM file by combiningca.key
andca.crt
stored in/etc/asterisk/keys
. -
Upload to TFTP server. I use default location:
/srv/tftp
-
Find the server's IP address:
ip address
-
Power up the phone. It'll show "Phone not registered".
-
Set Alternative TFTP server
- Push Application button (the one with cog icon) > 4. Admin Settings (Down 4 times) > 1. Network Setup > 1. IPv4 Setup > 6. Alternative TFTP Server > Yes > Save
- Application > 4. Admin Settings (Down 4 times) > 1. Network Setup > 1. IPv4 Setup > 7. TFTP Server 1 > Punch in IP address (use
*
in substitute of.
) > Validate > Save - Restart The phone: Push Application button (the one with cog icon) > Push
**#**
> Wait
-
If you done right, in
sudo journalctl -u tftpd-hpa.service
, the log will showRRQ from <Phone IP> filename : <Filename>
and the phone will set itself up. -
Enjoy the call!
This file is to define what firmware do the phone use. Mainly on loadInformation495
tag, define firmware name which you use without file extension. In my case, I use SIP69xx.9-4-1-3SR2
.
Replace SERVER_IP
with PBX IP.
This file is to define how the phone should trigger the call when the use punch the number. For example, if use punch 4 digit hotline number; the one without leading zero prefix, it should start the call as soon as the user finish punching the number. Or, when the user punch direct phone number which in Thailand, my country, use either 9 numbers for a landline or 10 for mobile one, I decide that once the use punch the 9th digit, let them wait for one second for the last number should user want to dial the mobile phone number. Etc, etc.
The format can be readed at USECALLMANAGER.nz tutorial page.
This file is to define how the phone should interact with PBX server and its configuration.
device.devicePool.dateTimeSetting.dateTemplate
I set to Date-month-year in 4 digits, 24 hours format.device.devicePool.dateTimeSetting.ntps.ntp.name
I set to my country NTP pool. Should you use in another country, find the one for you at pool.ntp.orgdevice.devicePool.callManagerGroup.members.member.callManager.processNodeName
Change to either PBX server hostname, DNS name, or IP address.device.sipProfile.sipLines.line.displayName
Set the one used in FreePBX display name for consistency reason.device.loadInformation
Set firmware name likeXMLDefault.cnf.xml
.loadInformation495
field.device.vendorConfig
Set how you want. In my case, I've found that the default value is so damn bright it glow in the dark once I turn off the light to have a fun on the bed. So, I setbacklightOnDuration
and its related config so the light will dim once I stop using the phone.