Alright, first I'm going to answer in the context of http://www.cec-o-matic.com/ since that seems like what you're using based on your terminology.
Source is the device that is sending the command. Using "unregistered" doesn't work in most scenarios, because it's basically saying that no one sent it, so nothing listens (except in special cases).
Destination is the device that you want to listen. So, depending on the command, you may want to target a specific device (like in turning on the TV), or target all devices, i.e. "broadcast", (like in changing the active source).
You need to be careful when using CEC-O-MATIC, because it doesn't strictly follow the HDMI CEC specifications in certain scenarios (e.g. it should force active source command to be broadcast instead of targeting a specific device)
In CEC-O-MATIC, the source and destination are used to generate the first two characters of the command. They are the logical addresses of the devices (see below for more info).
If you're not using CEC-O-MATIC, then a quick summary is:
- There are two types of address, Logical (e.g. 0 for the TV) and Physical (e.g. 0.0.0.0 for the TV). These don't have to match up with each other (you may have Logical be 4 and Physical be 220.127.116.11).
- Each command starts with two characters representing the Logical addresses of the Source, referred to as initiator in the HDMI Spec, and the Destination respectively (e.g. 10 would mean from device 1 to the TV (device 0)).
- Some commands have parameters that take a physical address (e.g. the Active Source command)
echo h | cec-client -s -d 1 will return a list of the commands available in CEC-Client. A lot of those are easier to use and remember.
echo scan | cec-client -s -d 1 will return the information about the available devices (including their logical and physical addresses, logical being the device # and physical being the address).