public BasicCommandReturn DownLoadImageTemplateToSlave(ImageTemplateBuffers DownloadToStoreBuffer, byte[] ImageTemplateAsBytes)
        {
            SendCommand(CommandCodes.UploadImageTemplate, new byte[] { (byte)DownloadToStoreBuffer });
            BasicCommandReturn Return = GetReturn();

            if (Return.Status != Errors.Success)
            {
                return(Return);
            }
            SendDataStream(ImageTemplateAsBytes);
            return(Return);
        }
        public BasicCommandReturn DownloadImageToSlave(byte[] ImageBitmapAsBytes, bool AlreadyCompressed = false)
        {
            if (!AlreadyCompressed)
            {
                ImageBitmapAsBytes = StaticImageHelpers.GetCompressedImageBytes(ImageBitmapAsBytes);
            }

            SendCommand(CommandCodes.DownloadImage);
            BasicCommandReturn Return = GetReturn();

            if (Return.Status != Errors.Success)
            {
                return(Return);
            }
            SendDataStream(ImageBitmapAsBytes);
            return(Return);
        }
        /// <summary>
        /// Sets the systems baud rate then sets
        /// </summary>
        /// <param name="BaudRate"></param>
        /// <returns></returns>
        public BasicCommandReturn SetSystemBaudRate(BaudRates BaudRate)
        {
            if (!Enum.IsDefined(typeof(BaudRates), BaudRate))
            {
                throw new Exception("BaudRate is not a valid baudrate!");
            }
            this.BaudRate = BaudRate;
            BasicCommandReturn Return = SetSystemParam(SystemParam.BaudRate, (byte)BaudRate);

            if (Return.Status != Errors.Success || !Return.Valid)
            {
                return(Return);
            }
            int BaudRateValue = DefaultBaudRate;

            switch (BaudRate)
            {
            case BaudRates.BaudRateOf9600:
                BaudRateValue = 9600;
                BaudRate      = BaudRates.BaudRateOf9600;
                break;

            case BaudRates.BaudRateOf19200:
                BaudRateValue = 19200;
                BaudRate      = BaudRates.BaudRateOf19200;
                break;

            case BaudRates.BaudRateOf28800:
                BaudRateValue = 28800;
                BaudRate      = BaudRates.BaudRateOf28800;
                break;

            case BaudRates.BaudRateOf38400:
                BaudRateValue = 38400;
                BaudRate      = BaudRates.BaudRateOf38400;
                break;

            case BaudRates.BaudRateOf48000:
                BaudRateValue = 48000;
                BaudRate      = BaudRates.BaudRateOf48000;
                break;

            case BaudRates.BaudRateOf57600:
                BaudRateValue = 57600;
                BaudRate      = BaudRates.BaudRateOf57600;
                break;

            case BaudRates.BaudRateOf67200:
                BaudRateValue = 67200;
                BaudRate      = BaudRates.BaudRateOf67200;
                break;

            case BaudRates.BaudRateOf76800:
                BaudRateValue = 76800;
                BaudRate      = BaudRates.BaudRateOf76800;
                break;

            case BaudRates.BaudRateOf86400:
                BaudRateValue = 86400;
                BaudRate      = BaudRates.BaudRateOf86400;
                break;

            case BaudRates.BaudRateOf96000:
                BaudRateValue = 96000;
                BaudRate      = BaudRates.BaudRateOf96000;
                break;

            case BaudRates.BaudRateOf105600:
                BaudRateValue = 105600;
                BaudRate      = BaudRates.BaudRateOf105600;
                break;

            case BaudRates.BaudRateOf115200:
                BaudRateValue = 115200;
                BaudRate      = BaudRates.BaudRateOf115200;
                break;
            }
            SerialPort.Close();
            SerialPort.BaudRate = BaudRateValue;
            SerialPort.Open();
            return(Return);
        }