I tested this on 7942, 7970, 7975, 7821 and 8851.
Welcome! This tutorial will guide you through the process of setting up Cisco 7900 phones to work with FreePBX.
Cisco removed the 7900 series firmware downloads so look on the internet for files called something like:
cmterm-7945_7965-sip.9-4-2-1SR3-1.zip
Here's a dowload link for some sites I found: Site
- Power down the phone by unplugging the 48VDC PoE Ethernet cable or power adapter.
- Plug the power source back in while holding the
#key. Keep holding it until the line buttons start flashing. - When the line buttons flash, press
123456789*0#.
-
Install Tftpd64 on a Windows machine.
-
Configure your Ethernet adapter settings as shown:
-
Open Tftpd64 and adjust the settings as shown:
-
Set the "Current Directory" to the folder containing the firmware files:
- Connect the phone to a PoE switch (or non-PoE switch with a power injector). Cisco 7900 series phones have known issues with auto MDI-X.
- Power on the phone. It will display the "Upgrading" screen.
- Wait for the phone to display an IP address and begin downloading files from the TFTP server. You can monitor this in Tftpd64.
- Once the phone finishes downloading, it will reboot automatically.
NOTE: on 7800/8800 series and on 7900 series with FW Version 9-4-X or higher, you may use an HTTP server running on port 6970 to host the files instead of using a TFTP server. You would put in the HTTP Server's address into the Phone's TFTP Settings
-
Install the TFTP server on Debian 12:
sudo apt install tftpd-hpa
NOTE:
tftpd-hpais often installed along with FreePBX. -
Configure the TFTP server by editing
/etc/default/tftpd-hpa: -
Restart the TFTP server:
sudo systemctl restart tftpd-hpa.service
-
Upload the configuration file (e.g.,
SEP[MAC_ADDRESS].cnf.xml) to the TFTP server directory (typically/tftpbootor/srv/tftp). -
Some phones are picky about config files, so try one of these:
-
Upload
dialplan.xmlto the same directory: -
Configure the phone:
- Press the Checkmark button →
Network Configuration→IPv4 Configuration→Alternate TFTP - Press
**#to unlock settings - Click
Yesto enable Alternate TFTP - Scroll to
TFTP Server 1and set it to the TFTP/HTTP server's IP
- Press the Checkmark button →
-
Restart the phone. It should provision automatically.
-
Go to Settings → Asterisk SIP Settings → SIP Settings [chan_pjsip] in the FreePBX admin panel.
-
Adjust the transport settings as shown:
-
Click Submit and Apply Config, then restart FreePBX and the phone.
Some people and myself have run into an issue where the phones might not register. In such case do the following:
By default my config allows you to use HD voice or G722 codec, to make use of this
- Go to the IP of your FreePBX and log in
- Once on the dashboard hover over Settings
- Click on Asterisk SIP Settings
- Scroll down to Codecs
- Enable "g722" and move it to the top of the list
- Press Submit and Apply Config
- For good measure I'd restart both the FreePBX server and the phones
You can customize the background of your Cisco 7900 series phones by adding a Desktops directory to the TFTP server directory where SEP[MAC_ADDRESS].cnf.xml and dialplan.xml are stored.
| Phone Model | Full Image | Thumbnail (25% of full image) | Color Depth | Directory Path |
|---|---|---|---|---|
| 7941 / 7961 / 7942 / 7962 | 320x196 | 80x53 | 4 | /Desktops/320x196x4 |
| 7945 / 7965 | 320x212 | 80x53 | 16 | /Desktops/320x212x16 |
| 7970 / 7971 | 320x212 | 80x53 | 12 | /Desktops/320x212x12 |
| 7975 | 320x216 | 80x53 | 16 | /Desktops/320x216x16 |
| 8821 | 240x320 | 117x117 | 24 | /Desktops/240x320x24 |
| 8841 / 8845 / 8851 / 8861 / 8865 | 800x480 | 139x109 | 24 | /Desktops/800x480x24 |
| 8941 / 8945 | 640x480 | 123x111 | 24 | /Desktops/800x480x24 |
| 8961 / 9951 / 9971 | 640x480 | 123x111 | 24 | /Desktops/640x480x24 |
Images should be in PNG format.
-
Create the following directory structure:
For 7942 for example:
/tftpboot/Desktops/320x196x4/For 7975:
/tftpboot/Desktops/320x216x16/ -
Place your custom background images in
320x196x4/or320x196x4/. These must be in 320x196 resolution with 4-bit color depth or monochrome, if made for 7942. Refer to the table above for your phone's display details. -
Add a
List.xmlfile inside the desired directory eg:320x196x4or320x216x16to specify available backgrounds. -
Example
List.xmlformat:<CiscoIPPhoneImageList> <ImageItem Image="TFTP:Desktops/320x196x4/ubuntu-tn.png" URL="TFTP:Desktops/320x196x4/ubuntu.png"/> <ImageItem Image="TFTP:Desktops/320x196x4/tux-tn.png" URL="TFTP:Desktops/320x196x4/tux.png"/> </CiscoIPPhoneImageList>
-
Restart the phone and navigate to the settings to select the new background.
I provided a list of cutom ringtones with .raw and a ringlist.xml file for 7900 series phones. You need to puth both in the tftp root directory. As for 8800 series, you need a Ringlist-wb.xml file, it support .raw ringotnes that are for the 7900 series and .rwb ringtones which are wideband ringtones for the 8800 series specifficaly and will not work for 7900 series.
To make custom ringtones:
-
For 7900 series and 8800 series (LQ)
- get Audacity
- import your ringtone and keep it to about 30s
- Click File → Export Audio... and export with these settings.
- Put this file in the tftp root
- Add entry to the ringlist.xml and/or Ringlist-wb.xml
<Ring> <DisplayName>Ringtone</DisplayName> <FileName>ringtone.raw</FileName> </Ring>
-
For 8800 series ONLY
- get Audacity
- import your ringtone and keep it to about 30s
- Click File → Export Audio... and export with these settings.
Note: change
.rawto.rwbfile extension- Put this file in the tftp root
- Add entry to the Ringlist-wb.xml
<Ring> <DisplayName>Ringtone</DisplayName> <FileName>ringtone.rwb</FileName> </Ring>
Configuration is mostly the same as 7900 series, but a bit different but I provided it aswell. You need to put ITLFile.tlv (courtesy of Ryan Kim) and softkeys.xml in the tftp root directory. for this to work. If you experience any issues with 8800 series phones open a GitHub issue.
I have been doing some tinkering and made a kind of phonebook by accident. If you want a phone book of sorts then I've attached a folder called phonebook. In there there are PHP files, index.html we're interested about. Place the files in /var/www/html/webapp directory. It reads off of a database and returns the values with cisco phone format. you need to make a database called "phonebook" and a table "employees":
CREATE DATABASE phonebook;
USE phonebook;
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
phone VARCHAR(20) NOT NULL
);Next create a user that can access that database:
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON phonebook.* TO 'user'@'%';Next you want to go to the phone config and find:
<servicesURL></servicesURL>and add a URL like this:
<servicesURL>http://freepbx_ip_address/webapp/index.php</servicesURL>Now when you press the globe icon on the phone the service will show a list of users that you put in.
In the index.php there is a variable called $limit = X where X is the number of contacts per page. If there is more entries in the phonebook than the value of this variable, the directory/phonebook will have a softkey "Next" and "Previous"
Go to http://freepbx_ip_address/webapp/contacts.php to manage your contacts.
UPDATE DATABASE CREDENTIALS IN THE CONFIG FILE FOR THE SERVICE TO WORK
The ATA190 devices use a config file almost identical to the regular IP phones, but named ATA[MAC ADDRESS].cnf.xml for the first line, and ATA[Last 10 characters of the MAC address]01.cnf.xml for the second line. So if, for instance, your ATA190 had a MAC address of DE:AD:BE:EF:CA:FE, it would be looking for the configuration files:
ATADEADBEEFCAFE.cnf.xmlATAADBEEFCAFE01.cnf.xml
An example configuration file is found here
The only fundamental difference is the addition of the ring tone specs section inside <vendorconfig>:
<ringtonespecs>
<ringtoneSpec index="1">0</ringtoneSpec>
<ringtoneSpec index="2">20</ringtoneSpec>
<ringtoneSpec index="3">85</ringtoneSpec>
</ringtonespecs>
Which defines the ring frequency and voltage. The values above are the defaults, and must be present in the config file or the device won't start up.
If you have any questions, feel free to reach out at jakub.bednarczyk@mail.buba.net.pl.
Or open a GitHub issue.
© 2025 buba.net.pl
Upon making changes to your xml like adding lines etc, be sure to reboot the phone so your new config takes affect or you'll be stuck with the same config









