コード例 #1
0
 /// <summary>
 /// Provide default execution function. Might be overwritten in command classes.
 /// </summary>
 /// <param name="parameter"></param>
 /// <returns></returns>
 public virtual IEECommandResult Execute(IEECommandParameter parameter)
 {
     if (parameter is TParamClass)
     {
         EECmdResultCode result = ProtocolCallbacks.SendReceive(parameter, out byte[] response);
         return(CreateResult(result, response, parameter));
     }
     else
     {
         return(CreateResult(EECmdResultCode.InvalidParamClass, null, null));
     }
 }
コード例 #2
0
ファイル: UploadBlockCmd.cs プロジェクト: k0956398/GCL
 public override IEECommandResult Execute(IEECommandParameter parameter)
 {
     if (parameter is UploadBlockCmdParams uploadParams)
     {
         // Send command with payload (right after cmd CRC)
         EECmdResultCode result = ProtocolCallbacks.SendReceive(parameter, out byte[] response, uploadParams.BlockData);
         return(CreateResult(result, response, parameter));
     }
     else
     {
         return(CreateResult(EECmdResultCode.InvalidParamClass, null, null));
     }
 }
コード例 #3
0
        /// <summary>
        /// Provide default result function. Might be overwritten in command classes.
        /// </summary>
        /// <param name="cmdResultCode"></param>
        /// <param name="cmdResponse"></param>
        /// <returns></returns>
        protected virtual IEECommandResult CreateResult(EECmdResultCode cmdResultCode, byte[] cmdResponse, IEECommandParameter cmdParams)
        {
            EECmdResultBase result = new TResultClass() as EECmdResultBase;

            // Set properties that might be needed to interpret command result
            result.Code = cmdResultCode;
            result.Data = cmdResponse;

            // Commands have the chance to interpret the result data (in case of {ACK}/Success)
            if (cmdResultCode == EECmdResultCode.Success)
            {
                result.InterpretResult(ProtocolCallbacks.LookupOrCreateCmdSpecialTreatment(cmdParams.Cmd).ReverseByteOrder.Value, ProtocolConverters, cmdParams);
            }

            return(result);
        }
コード例 #4
0
        // Override CreateResult because we might have different results based on output type
        protected override IEECommandResult CreateResult(EECmdResultCode cmdResultCode, byte[] cmdResponse, IEECommandParameter cmdParams)
        {
            if (cmdResultCode == EECmdResultCode.Success)
            {
                if (cmdResponse.Length < 2)
                {
                    return new EECmdResultBase()
                           {
                               Code = EECmdResultCode.InvalidResult
                           }
                }
                ;

                EECmdResultBase result = null;

                // Fist byte is always 0. Second is output mode.
                // Based on output mode we create the correct result class.
                OutputMode outputMode = (OutputMode)cmdResponse[1];
                switch (outputMode)
                {
                case OutputMode.Inactive:
                    result = new GetOutputConfigCmdResultBase(outputMode);

                    break;

                case OutputMode.Current:
                case OutputMode.Voltage:
                    result = new GetOutputConfigCmdResult_Analog(outputMode);
                    break;

                case OutputMode.Relais_Hysteresis:
                case OutputMode.Relais_Window:
                case OutputMode.Relais_ErrorIndication:
                    result = new GetOutputConfigCmdResult_Relais(outputMode);
                    break;

                case OutputMode.Pulse:
                    result = new GetOutputConfigCmdResult_Pulse(outputMode);
                    break;
                }

                if (result != null)
                {
                    result.Code = cmdResultCode;
                    result.Data = cmdResponse;
                    result.InterpretResult(ProtocolCallbacks.LookupOrCreateCmdSpecialTreatment(cmdParams.Cmd).ReverseByteOrder.Value, ProtocolConverters, cmdParams);
                }
                else
                {
                    return new EECmdResultBase()
                           {
                               Code = EECmdResultCode.InvalidResult
                           }
                };

                return(result);
            }
            else
            {
                return(new EECmdResultBase()
                {
                    Code = cmdResultCode
                });
            }
        }
    }