In the simplest terms, QTouch Library can be explained as having three layers. The IO driver layer is responsible for driving the charge transfer algorithm on the IO pins. The IO driver can be setup to use virtually any combination of IO pins for touch and utilizes built in HW touch capabilities for those devices having such features. For this reason the IO driver is custom designed for each MCU family. The signal processing layer is responsible for translating and evaluating the raw data as reported by the IO driver layer. It also is responsible for detecting environmental changes and will automatically compensate to ensure that touch detection quality changes due to temperature, voltage or humidity changes. The size of the signal processing code will depend on how many sensors are used and if support for sliders and wheels is included, or if the support is limited to only buttons. The API layer provides a common user interface regardless of the underlying features. So whether using a large XMEGA or a small tinyAVR, the code will look the same to the programmer. This eases the task of writing the code and migrating the code to a bigger or smaller device later.