diff --git a/docs/tellstick-protocol.dox b/docs/tellstick-protocol.dox
new file mode 100644
index 00000000..99ec0f7f
--- /dev/null
+++ b/docs/tellstick-protocol.dox
@@ -0,0 +1,126 @@
+/**
+ * @page TellStick TellStick protocol
+ *
+ * \section Introduction
+ *
+ * Telldus TellStick protocol looks like:
+ * [prefix[prefix parameters]][command][parameter 1]..[parameter n]['+']
+ *
+ * Each value in [ and ] is representing one byte.
+ *
+ * Command is one ascii character. Not all commands have parameters which
+ * makes it optional. Prefix is always optional.
+ * Note: Due to memory limitations, the parameters is limited in length to 79
+ * bytes.
+ *
+ * An example command to turn on a ArcTech codeswitch A1 may look like:
+ * S$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$kk$$kk$$kk$$}+
+ *
+ * TellStick returns to a known command like this:
+ * ['+'][command][parameters][13][10]
+ *
+ * [13] and [10] are the ascii characters 10 and 13.
+ *
+ * An example to query a TellStick on its firmware version:
+ * Command:
+ * V+
+ * Response:
+ * +V2
+ * The TellStick in the example has the firmware version 2.
+ *
+ * \section Commands
+ *
+ * \subsection sec_bootloader B - Bootloader
+ * This command makes the TellStick go into the bootloader.
+ * Not all devices supports this.
+ *
+ * \subsection sec_send S - Send command
+ * This command tells TellStick to send a command. The parameters to this
+ * command is the data-packet to send.
+ *
+ * Each of the characters in the parameters makes the antenna alternate
+ * high/low/high etc. The time before the alternation is 10 us timer the ASCII
+ * value. For example, $ has the ascii-value 36 and k has 107. The command:
+ * ['S']['$']['k']['$']['k']['$']['+'] makes the following wavepattern on the antenna:
+ *
+ * _____ _____ _____ + * | | | | | | + * | | | | | | + * | |_______________| |_______________| | + * + * |<===>|<=============>|<===>|<=============>|<===>| + * 360us 1070us 360us 1070us 360us + *+ * + * + * \subsection sec_send_extended T - Send command, extended + * + * The extended command was developed to overcome the limitations och the + * length of the data to 79 bytes. + * The idea is to have four fixed times on the pulses so the information about + * what to send only needs 2 bits instead of 8 in the command S + * + * The parameters to the command is: