public static bool GroupControlMcu(KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            switch (request)
            {
            case KuscMessageParams.MESSAGE_REQUEST.CONTROL_SYSTEM_START:
                KuscUtil.UpdateSystemRegisters();
                statusMsg = "MCU: System init and start ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.CONTROL_TEST_LEDS:
                statusMsg = "MCU: Turn leds ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.CONTROL_RESET_MCU:
                statusMsg = "MCU: Reset MCU ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.CONTROL_PA1_SET:
                statusMsg = "MCU: Set PA1 ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.CONTROL_PA2_SET:
                statusMsg = "MCU: Set PA2 ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.CONTROL_KEEP_ALIVE:
                statusMsg = "MCU: System is running";
                break;
            }
            KuscUtil.UpdateStatusOk(statusMsg);

            //KuscLogs.LogPrintCommand(statusMsg);

            return(true);
        }
        public static bool GroupFlashMemory(KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            switch (request)
            {
            case KuscMessageParams.MESSAGE_REQUEST.FLASH_EREASE_MEMORY:
                statusMsg = "MCU: Erease flash memory ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.FLASH_READ_CONDITION:
                KuscUtil.UpdateFlashCondition(data);
                statusMsg = "MCU: Read flash status ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.FLASH_REQUEST_RAW_DATA:
                statusMsg = "MCU: Request flash raw packet ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.FLASH_SEND_RAW_DATA:
                KuscUtil.UpdateAdcTable(data);
                statusMsg = "MCU: Receive flash raw data packet ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.FLASH_NO_SAMPLE_YET:
                statusMsg = "MCU: You request number of samples that are bigger then actually MCU have";
                break;
            }

            // Update status log and field:
            KuscUtil.UpdateStatusOk(statusMsg);

            return(true);
        }
        public static bool GroupDAC(KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            switch (request)
            {
            case KuscMessageParams.MESSAGE_REQUEST.DAC_SET_VALUE:
                statusMsg = "MCU: Set DAC value";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.DAC_READ_VALUE:
                KuscUtil.DacReadValue(data);
                break;
            }

            // Update status log and field:
            KuscUtil.UpdateStatusOk(statusMsg);

            return(true);
        }
        public static bool GroupSynthesizers(KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            switch (request)
            {
            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_DOWN_SET:
                statusMsg = "System: Send syntesizer TX (Down) setting serial packet";
                KuscUtil.clear_cnt();
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_UP_SET:
                statusMsg = "System: Send syntesizer RX (Up) setting serial packet";
                KuscUtil.clear_cnt();
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_UP_OPER:
                KuscUtil.UpdateSynthUpOper();
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_DOWN_OPER:
                KuscUtil.UpdateSynthDownOper();
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_UP_READ_DATA:
                KuscUtil.ReadSynthUp(data);
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_DOWN_READ_DATA:
                KuscUtil.ReadSynthDown(data);
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_REQ_ANTHER_TX_REG:
                KuscUtil.ReqAntherTxRegister();
                break;

            case KuscMessageParams.MESSAGE_REQUEST.SYNTH_REQ_ANTHER_RX_REG:
                KuscUtil.ReqAntherRxRegister();
                break;
            }

            // Update status log and field:
            KuscUtil.UpdateStatusOk(statusMsg);

            return(true);
        }
        public static bool GroupStatusAndVersion(KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            switch (request)
            {
            case KuscMessageParams.MESSAGE_REQUEST.STATUS_GET_MCU_FW_VERSION:
                KuscUtil.UpdateMcuFwVersion(data);
                statusMsg = "MCU: Read MCU FW Version";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.STATUS_MCU_RUN_TIME:
                KuscUtil.UpdateRunTime(data);
                statusMsg = "MCU: Read MCU run-time OK";
                break;
            }

            // Update status log and field:
            KuscUtil.UpdateStatusOk(statusMsg);

            return(true);
        }
        public static bool GroupAdc(KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            switch (request)
            {
            case KuscMessageParams.MESSAGE_REQUEST.ADC_OPERATION:
                statusMsg = "MCU: Turn ADC ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.ADC_CHANNEL_MODE:
                statusMsg = "MCU: Set ADC set channel mode ok";
                break;

            case KuscMessageParams.MESSAGE_REQUEST.ADC_CONVERSION_MODE:
                statusMsg = "MCU: Set ADC conversion mode ok";
                break;
            }

            // Update status log and field:
            KuscUtil.UpdateStatusOk(statusMsg);

            return(true);
        }
        public bool SerialWriteMessage(KuscMessageParams.MESSAGE_GROUP group, KuscMessageParams.MESSAGE_REQUEST request, string data)
        {
            _serialSem.WaitOne();
            _txMessageBuffer.Clear();                            // Prepere sending list to contain new frame

            _txMessageBuffer.Add(KuscMessageParams.MSG_MAGIC_A); // First frame char contain magic.
            _txMessageBuffer.Add(Convert.ToChar(group));         // Second frame char contain group.
            _txMessageBuffer.Add(Convert.ToChar(request));       // Second frame char contain message request.
            _txMessageBuffer.Add(Convert.ToChar(data.Length));   // Third frame contain number of bytes of data.
            if (data != string.Empty)
            {
                foreach (char dataItem in data)
                {
                    if (dataItem >= 0x30) // Dont convert special sings.
                    {
                        char c = Convert.ToChar(Convert.ToInt32(dataItem) - 0x30);
                        _txMessageBuffer.Add(c);
                    }
                    else
                    {
                        _txMessageBuffer.Add(dataItem);
                    }
                }
            }

            // Calc CRC-8:
            char crc = KuscUtil.CalcCrc8(_txMessageBuffer.ToArray());

            _txMessageBuffer.Add(crc);

            // Now send the frame
            foreach (var item in _txMessageBuffer)
            {
                SerialWriteChar(item);
            }
            _serialSem.Release();
            return(true);
        }