コード例 #1
0
ファイル: ApcsAccess.cs プロジェクト: BdGL3/CXPortal
        /// <summary/>
        public bool SetPWMOutputEnable(PWMOutputConfig? enable, bool confirm)
        {
            bool status = false;
            try
            {
                CommandDefinition.CommandFormat command = CommandMake(CommandEnum.PWMOutput, BooleanValue.True, ActionEnum.Set, (byte)enable);
                CommandDefinition.CommandFormat? reply = CommandSend(command, /*reply expected*/ true);
                if (/*ignore results?*/ !confirm)
                    status = true;
                else
                {
                    string text = CommandReplyValidate(reply, CommandEnum.PWMOutput, (byte)enable);
                    if (/*fail?*/ text != string.Empty)
                        throw new Exception(text);
                    status = true;
                }
            }
            catch (Exception ex)
            {
                Debug.Assert(!status);
                if (/*OK to log?*/ LogPauseExpired)
                    try { Logger.LogError(Utilities.TextTidy(ex.ToString())); }
                    catch { }
            }
#if DEBUG
            try { Logger.LogInfo(MethodBase.GetCurrentMethod() + "(" + ((enable == null) ? "null" : enable.ToString()) + ", " + confirm.ToString() + ") returns " + status.ToString()); }
            catch { }
#endif
            return status;
        }
コード例 #2
0
ファイル: ApcsAccess.cs プロジェクト: BdGL3/CXPortal
 /// <summary/>
 public bool GetPWMOutputEnable(out PWMOutputConfig? enable, bool confirm)
 {
     bool status = false;
     try
     {
         CommandDefinition.CommandFormat command = CommandMake(CommandEnum.PWMOutput, BooleanValue.False, ActionEnum.Get, 0);
         CommandDefinition.CommandFormat? reply = CommandSend(command, /*reply expected*/ true);
         string text = CommandReplyValidate(reply, CommandEnum.PWMOutput);
         if (/*fail?*/ !string.IsNullOrWhiteSpace(text))
             throw new Exception(text);
         enable = (PWMOutputConfig)reply.Value.Action.SubAction;
         status = true;
     }
     catch (Exception ex)
     {
         enable = null;
         status = false;
         if (/*OK to log?*/ LogPauseExpired)
             try { Logger.LogError(Utilities.TextTidy(ex.ToString())); }
             catch { }
     }
     return status;
 }
コード例 #3
0
ファイル: Program.cs プロジェクト: marzlia/CXPortal
        static void hostAccess_ProcessCommandEvent(CommandDefinition.CommandFormat command)
        {
            if (command.CommandAck.Command == CommandEnum.ScanMode)
            {
                if (command.Action.Action == ActionEnum.Set)
                {
                    currentEnergyMode = (ScanEnergyMode)command.Action.SubAction;

                    PWMOutputConfig pwmConfig = (PWMOutputConfig)pc.GetPWMRunStatus();

                    if (pwmConfig == PWMOutputConfig.OutputEnabled)
                    {
                        pc.PWMOutputDisable();
                    }

                    if (currentEnergyMode == ScanEnergyMode.Dual)
                    {
                        Reset.Write(true);
                        Preset.Write(true);
                    }
                    else if (currentEnergyMode == ScanEnergyMode.High)
                    {
                        Reset.Write(true);
                        Preset.Write(false);
                    }
                    else
                    {
                        Reset.Write(false);
                        Preset.Write(true);
                    }

                    if (pwmConfig == PWMOutputConfig.OutputEnabled)
                    {
                        pc.PWMOutputEnable();
                    }
                }

                hostAccess.SendScanModeResponse(currentEnergyMode);
            }
            else if (command.CommandAck.Command == CommandEnum.StaticPulseFreq)
            {
                OperatingMode mode = (OperatingMode)command.Action.SubAction;
                int           freq = BitConverter.ToInt32(command.Payload, 0);;

                if (command.Action.Action == ActionEnum.Set)
                {
                    if (mode == OperatingMode.NonAdaptiveMobile)
                    {
                        StaticPulseFreq[0] = freq;
                    }
                    else if (mode == OperatingMode.NonAdpativePortal)
                    {
                        StaticPulseFreq[1] = freq;
                    }

                    if (currentOperatingMode == mode)
                    {
                        currentStaticPulseFreq = freq;
                        pc.UpdatePWMFrequency(freq);
                    }

                    hostAccess.SendStaticPulseFreqResponse(mode, freq);
                }
                else if (command.Action.Action == ActionEnum.Get)
                {
                    if (mode == OperatingMode.NonAdaptiveMobile)
                    {
                        freq = StaticPulseFreq[0];
                    }
                    else if (mode == OperatingMode.NonAdpativePortal)
                    {
                        freq = StaticPulseFreq[1];
                    }

                    hostAccess.SendStaticPulseFreqResponse(mode, freq);
                }
            }
            else if (command.CommandAck.Command == CommandEnum.PulseWidth)
            {
                if (command.Action.Action == ActionEnum.Set)
                {
                    if (currentPulseWidth != (PulseWidth)command.Action.SubAction)
                    {
                        currentPulseWidth = (PulseWidth)command.Action.SubAction;
                        pc.UpdatePWMPulseWidth(PulseWidthsDutyCycle[(int)currentPulseWidth - 1]);
                    }
                }

                hostAccess.SendPulseWidthResponse(currentPulseWidth);
            }
            else if (command.CommandAck.Command == CommandEnum.ConfigPulseWidth)
            {
                if (command.Action.Action == ActionEnum.Set)
                {
                    int index = command.Action.SubAction - 1;
                    PulseWidthsDutyCycle[index] = BitConverter.ToSingle(command.Payload, 0);

                    if (currentPulseWidth == (PulseWidth)command.Action.SubAction)
                    {
                        pc.UpdatePWMPulseWidth(PulseWidthsDutyCycle[index]);
                    }
                }

                PulseWidth width = (PulseWidth)command.Action.SubAction;
                hostAccess.SendPulseWidthConfigResponse(width, PulseWidthsDutyCycle[(byte)width - 1]);
            }
            else if (command.CommandAck.Command == CommandEnum.OperatingMode)
            {
                short minFreq, maxFreq;

                if (command.Action.Action == ActionEnum.Set)
                {
                    minFreq = (short)BitConverter.ToInt16(command.Payload, 0);
                    maxFreq = (short)BitConverter.ToInt16(command.Payload, 2);
                    currentOperatingMode = (OperatingMode)command.Action.SubAction;

                    if ((currentOperatingMode == OperatingMode.NonAdaptiveMobile) || (currentOperatingMode == OperatingMode.NonAdpativePortal))
                    {
                        if (currentOperatingMode == OperatingMode.NonAdaptiveMobile)
                        {
                            currentStaticPulseFreq = StaticPulseFreq[0];
                        }
                        else
                        {
                            currentStaticPulseFreq = StaticPulseFreq[1];
                        }

                        pc.SetOperatingMode(currentOperatingMode);
                        pc.UpdatePWMFrequency(currentStaticPulseFreq);
                        pc.UpdatePWMPulseWidth(PulseWidthsDutyCycle[(int)currentPulseWidth - 1]);
                        pc.PWMOutputEnable();
                    }
                    else if ((currentOperatingMode == OperatingMode.AdaptiveMobile) || (currentOperatingMode == OperatingMode.AdaptivePortal))
                    {
                        pc.SetFrequencyRange(currentOperatingMode, minFreq, maxFreq);
                        pc.SetOperatingMode(currentOperatingMode);
                        pc.PWMOutputEnable();
                    }

                    hostAccess.SendOperatingModeResponse(currentOperatingMode, minFreq, maxFreq);
                }
                else if (command.Action.Action == ActionEnum.Get)
                {
                    pc.GetFrequencyRange(currentOperatingMode, out minFreq, out maxFreq);
                    hostAccess.SendOperatingModeResponse(currentOperatingMode, minFreq, maxFreq);
                }
            }
            else if (command.CommandAck.Command == CommandEnum.AdaptiveModeToTrigRatio)
            {
                float         ratio;
                OperatingMode mode = (OperatingMode)command.Action.SubAction;

                if (command.Action.Action == ActionEnum.Set)
                {
                    ratio = BitConverter.ToSingle(command.Payload, 0);

                    pc.SetInputToOutputRatio(mode, ratio);

                    hostAccess.SendAdaptiveModeToTrigRatioResponse(mode, ratio);
                }
                else if (command.Action.Action == ActionEnum.Get)
                {
                    pc.GetInputToOutputRatio(mode, out ratio);
                    hostAccess.SendAdaptiveModeToTrigRatioResponse(mode, ratio);
                }
            }
            else if (command.CommandAck.Command == CommandEnum.AdaptiveSpeedFeedbackConfig)
            {
                if (command.Action.Action == ActionEnum.Set)
                {
                    adaptiveSpeedMsgFreq = BitConverter.ToSingle(command.Payload, 0);
                    speedMsgMode         = (AdaptiveSpeedFeedbackConfig)command.Action.SubAction;

                    if ((speedMsgMode == AdaptiveSpeedFeedbackConfig.EnabledWithFreq) && (adaptiveSpeedMsgFreq > 0.0f))
                    {
                        int period = (int)(1000.0f / adaptiveSpeedMsgFreq);
                        adaptiveSpeedMsgTimer.Change(period, period);
                    }
                    else
                    {
                        adaptiveSpeedMsgTimer.Change(Timeout.Infinite, Timeout.Infinite);
                    }
                }

                hostAccess.SendAdaptiveSpeedFeedbackConfigResponse(speedMsgMode, adaptiveSpeedMsgFreq);
            }
            else if (command.CommandAck.Command == CommandEnum.PWMOutput)
            {
                if (command.Action.Action == ActionEnum.Set)
                {
                    if ((PWMOutputConfig)command.Action.SubAction == PWMOutputConfig.OutputEnabled)
                    {
                        pc.PWMOutputEnable();
                    }
                    else
                    {
                        pc.PWMOutputDisable();
                    }

                    hostAccess.SendPWMOutputStatus((PWMOutputConfig)command.Action.SubAction);
                }
                else if (command.Action.Action == ActionEnum.Get)
                {
                    hostAccess.SendPWMOutputStatus((PWMOutputConfig)pc.GetPWMRunStatus());
                }
            }
            else if (command.CommandAck.Command == CommandEnum.ResetBoard)
            {
                ResetBoard();
            }
        }
コード例 #4
0
 public void SendPWMOutputStatus(PWMOutputConfig status)
 {
     CommandDefinition.CommandFormat packet = ReplyCreate(CommandEnum.PWMOutput, BooleanValue.True, ActionEnum.Response, (byte)status);
     ReplySend(packet);
 }
コード例 #5
0
ファイル: NetServer.cs プロジェクト: BdGL3/CXPortal
 public void SendPWMOutputStatus(PWMOutputConfig status)
 {
     CommandDefinition.CommandFormat packet = ReplyCreate(CommandEnum.PWMOutput, BooleanValue.True, ActionEnum.Response, (byte)status);
     ReplySend(packet);
 }
コード例 #6
0
ファイル: ApcsAccess.cs プロジェクト: BdGL3/CXPortal
 public bool GetPWMOutput(out PWMOutputConfig? config, bool confirm)
 {
     config = null;
     if (/*terminated?*/ _cancelEvent.WaitOne(0))
         return false;
     CommandDefinition.CommandFormat command = ConstructCommand(CommandEnum.PWMOutput, BooleanValue.False, ActionEnum.Get, 0);
     CommandDefinition.CommandFormat? response = SendCommand(command, confirm);
     if (response != null && response.Value.CommandAck.Command == CommandEnum.PWMOutput && response.Value.Action.Action == ActionEnum.Response)
     {
         config = (PWMOutputConfig)response.Value.Action.SubAction;
         return true;
     }
     else
         return false;
 }
コード例 #7
0
ファイル: ApcsAccess.cs プロジェクト: BdGL3/CXPortal
 public bool SetPWMOutput(PWMOutputConfig? config, bool confirm)
 {
     if (/*terminated?*/ _cancelEvent.WaitOne(0))
         return false;
     CommandDefinition.CommandFormat command = ConstructCommand(CommandEnum.PWMOutput, BooleanValue.True, ActionEnum.Set, (byte)config);
     CommandDefinition.CommandFormat? response = SendCommand(command, confirm);
     if (confirm && (!ConfirmSetActionResponse(response, CommandEnum.PWMOutput, (byte)config)))
         return false;
     return true;
 }
コード例 #8
0
ファイル: ApcsAccess.cs プロジェクト: BdGL3/CXPortal
 public bool SetPWMOutputEnable(PWMOutputConfig? /*enabled?*/ Enb, bool /*confirm*/ Cnf)
 {
     string /*trace text*/ trc = MethodBase.GetCurrentMethod().Name + "(" +
             ((Enb != null) ? Enb.ToString() : "null") + ", " + Cnf.ToString() + ")";
     bool /*status (returned)*/ sts = false;
     try
     {
         CommandDefinition.CommandFormat /*command */ cmd = ConstructCommand(
                 CommandEnum.PWMOutput,
                 BooleanValue.True,
                 ActionEnum.Set,
                 (byte)Enb);
         CommandDefinition.CommandFormat? /*response*/ rsp = SendCommand(cmd, Cnf);
         sts = !Cnf || ConfirmSetActionResponse(rsp, CommandEnum.PWMOutput, (byte)Enb);
     }
     catch (Exception ex) { Lgr.LogError(ex); }
     return sts;
 }
コード例 #9
0
ファイル: ApcsAccess.cs プロジェクト: BdGL3/CXPortal
 public bool GetPWMOutputEnable(
         out PWMOutputConfig? /*enabled?*/ Enb,
         bool /*confirm*/ Cnf)
 {
     CommandDefinition.CommandFormat /*command*/ cmd =
             ConstructCommand(CommandEnum.PWMOutput, BooleanValue.False, ActionEnum.Get, 0);
     CommandDefinition.CommandFormat? /*response; might be null*/ rsp =
             SendCommand(cmd, Cnf);
     Enb = null;
     if ((rsp != null) &&
             (rsp.Value.CommandAck.Command == CommandEnum.PWMOutput) &&
             (rsp.Value.Action.Action == ActionEnum.Response))
     {
         Enb = (PWMOutputConfig)rsp.Value.Action.SubAction;
         return true;
     }
     else
         return false;
 }