// ------------------------------------------------------------------------
    // Invoked whenever the CammaController gameobject is deactivated.
    // It stops and destroys the thread that was reading from the camma device.
    // ------------------------------------------------------------------------
    void OnDisable()
    {
        // If there is a user-defined tear-down function, execute it before
        // closing the underlying COM port.
        if (userDefinedTearDownFunction != null)
        {
            userDefinedTearDownFunction();
        }

        // The cammaThread reference should never be null at this point,
        // unless an Exception happened in the OnEnable(), in which case I've
        // no idea what face Unity will make.
        if (cammaThread != null)
        {
            cammaThread.RequestStop();
            cammaThread = null;
        }

        // This reference shouldn't be null at this point anyway.
        if (thread != null)
        {
            thread.Join();
            thread = null;
        }
    }
 // ------------------------------------------------------------------------
 // Invoked whenever the CammaController gameobject is activated.
 // It creates a new thread that tries to connect to the camma device
 // and start reading from it.
 // ------------------------------------------------------------------------
 void OnEnable()
 {
     cammaThread = new CammaThreadBinaryDelimited(portName,
                                                  baudRate,
                                                  reconnectionDelay,
                                                  maxUnreadMessages,
                                                  separator);
     thread = new Thread(new ThreadStart(cammaThread.RunForever));
     thread.Start();
 }