Beispiel #1
0
 internal Register this[RegisterEnum r]
 {
     get
     {
         var individuals = GetRegisterEnumFromPair(r);
         if (individuals != null)
         {
             GetPair(
                 _registers[(int)individuals[0]],
                 _registers[(int)individuals[1]]
                 );
         }
         return(_registers[(int)r]);
     }
     set
     {
         var individuals = GetRegisterEnumFromPair(r);
         if (individuals != null)
         {
             SetPair(
                 value,
                 _registers[(int)individuals[0]],
                 _registers[(int)individuals[1]]
                 );
         }
         _registers[(int)r] = value;
     }
 }
Beispiel #2
0
        public byte ModifyRegister(RegisterEnum register, [NotNull] Func <byte, byte> action, out StatusRegister statusRegister)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var readValue = ReadRegister(register, out statusRegister);
            var setValue  = action(readValue);

            if (setValue != readValue)
            {
                statusRegister = WriteRegister(register, setValue);
            }

            return(setValue);
        }
Beispiel #3
0
        public byte ReadRegister(RegisterEnum register, out StatusRegister statusRegister)
        {
            var registerOrCommand = (byte)((byte)register | (byte)CommandEnum.ReadRegister);

            if (register == RegisterEnum.Status)
            {
                statusRegister = Exchange(NOP, null);

                return(statusRegister);
            }

            _tinyBuffer[0] = NOP;

            statusRegister = Exchange(registerOrCommand, _tinyBuffer);

            return(_tinyBuffer[0]);
        }
Beispiel #4
0
        private RegisterEnum[] GetRegisterEnumFromPair(RegisterEnum r)
        {
            switch (r)
            {
            case RegisterEnum.HL:
                return(new [] { RegisterEnum.H, RegisterEnum.L });

            case RegisterEnum.BC:
                return(new [] { RegisterEnum.B, RegisterEnum.C });

            case RegisterEnum.DE:
                return(new [] { RegisterEnum.D, RegisterEnum.E });

            case RegisterEnum.AF:
                return(new [] { RegisterEnum.A, RegisterEnum.F });
            }
            return(null);
        }
Beispiel #5
0
        public TRegister ModifyRegister <TRegister>(RegisterEnum register, [NotNull] Action <TRegister> action, out StatusRegister statusRegister)
            where TRegister : IRegister
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var readByteValue = ReadRegister(register, out statusRegister);
            var registerValue = (TRegister)(dynamic)readByteValue;

            action(registerValue);
            var setByteValue = (byte)(dynamic)registerValue;

            if (setByteValue != readByteValue)
            {
                statusRegister = WriteRegister(register, setByteValue);
            }

            return(registerValue);
        }
Beispiel #6
0
        public StatusRegister WriteRegister(RegisterEnum register, byte value)
        {
            _tinyBuffer[0] = value;

            var registerOrCommand = (byte)((byte)register | (byte)CommandEnum.WriteRegister);
            var status            = Exchange(registerOrCommand, _tinyBuffer, true);

            switch (register)
            {
            case RegisterEnum.FrequencyChannel:
                Frequency = ((FrequencyChannelRegister)value).Frequency;
                break;

            case RegisterEnum.Configuration:
                var general = (ConfigurationRegister)value;

                if (State != general.PowerState)      // transition
                {
                    if (State == PowerStateEnum.Down) // from down to up
                    {
                        Functionalities.Sleep.Milli(5);
                    }
                    else if (State == PowerStateEnum.Up)     // from up to down
                    {
                        Functionalities.Pins.Write(_chipEnable, false);
                    }
                }

                State = general.PowerState;
                Mode  = general.TransceiverMode;

                break;

            case RegisterEnum.ReceiverAddress:
                _isPipe0Enabled = ((ReceiverAddressRegister)value).EnableOnPipe0;
                break;
            }

            return(status);
        }
 public void setRegister(RegisterEnum index, Int64 data)
 {
     registers[(int)index].register = data;
 }
Beispiel #8
0
 /// <summary>
 /// Create a register instance based on a RegisterEnum.
 /// </summary>
 /// <param name="registerEnum"></param>
 public Register(RegisterEnum registerEnum)
 {
     Name  = registerEnum;
     Value = 0;
 }
Beispiel #9
0
 public TRegister ModifyRegister <TRegister>(RegisterEnum register, Action <TRegister> action)
     where TRegister : IRegister
 => ModifyRegister(register, action, out _dummyStatusRegister);
 public void setRegister(RegisterEnum index, Int64 data)
 {
     registers[(int)index].register = data;
 }
Beispiel #11
0
 public byte ModifyRegister(RegisterEnum register, Func <byte, byte> action)
 => ModifyRegister(register, action, out _dummyStatusRegister);
        public Int64 getRegister(int index)
        {
            RegisterEnum e = (RegisterEnum)index;

            return(getRegister(e));
        }
Beispiel #13
0
 public byte ReadRegister(RegisterEnum register)
 => ReadRegister(register, out _dummyStatusRegister);
        public void setRegister(int index, Int64 data)
        {
            RegisterEnum e = (RegisterEnum)index;

            setRegister(e, data);
        }
 public void clearRegister(RegisterEnum index)
 {
     registers[(int)index].register = 0;
 }
Beispiel #16
0
 public RegisterParam(Processor p, RegisterEnum rEnum)
 {
     Processor = p;
     Register  = rEnum;
 }
        private void MSERIALPORT_TRIGGERMESSIGE(object sender, SERIALPORT.MESSIGEEventArgs e)
        {
            switch (e.MyType)
            {
            case SERIALPORT.MESSIGEEventArgs.MessageType.Warning:
                break;

            case SERIALPORT.MESSIGEEventArgs.MessageType.Error:
                break;

            case SERIALPORT.MESSIGEEventArgs.MessageType.Message:
                break;

            case SERIALPORT.MESSIGEEventArgs.MessageType.Data:
                if (e.MyData[0] == PRO)
                {
                    //发出去的寄存器地址
                    string strTemp = "";
                    strTemp = e.SendData[2].ToString("X2") + e.SendData[3].ToString("X2");
                    int          iRegister = Convert.ToInt32(strTemp, 16);
                    RegisterEnum temp      = (RegisterEnum)iRegister;
                    //发出去的功能码
                    string           strFunction = e.SendData[1].ToString("X2");
                    FunctionCodeEnum Function    = (FunctionCodeEnum)Convert.ToInt32(strFunction);

                    int    inumber   = 0;
                    byte[] byteArray = null;
                    if (Function == FunctionCodeEnum.MultipleReads)
                    {
                        try
                        {
                            //抓取数据回来
                            inumber   = e.MyData[2];
                            byteArray = new byte[inumber];
                            for (int i = 0; i < inumber; i++)
                            {
                                byteArray[i] = e.MyData[i + 3];
                            }
                        }
                        catch (Exception ex)
                        {
                            MESSIGEEventArgs ee = new MESSIGEEventArgs();
                            ee.MyType    = MESSIGEEventArgs.MessageType.Error;
                            ee.MyMessage = ex.Message;
                            OnTRIGGERMESSIGE(ee);
                        }
                    }
                    else
                    {
                        return;
                    }

                    switch (temp)
                    {
                    case RegisterEnum.MotorMode:
                        MotorModel = System.Text.Encoding.Default.GetString(byteArray).Replace("\0", "");
                        break;

                    case RegisterEnum.MotorVersionHardware:
                        MotorVersionHardware = System.Text.Encoding.Default.GetString(byteArray).Replace("\0", "");
                        break;

                    case RegisterEnum.MotorVersionSoftware:
                        MotorVersionSoftware = System.Text.Encoding.Default.GetString(byteArray).Replace("\0", "");
                        break;

                    case RegisterEnum.MotorErrorCode:
                        string error = "";
                        foreach (byte by in byteArray)
                        {
                            error += Convert.ToString(by, 2).PadLeft(8, '0');
                        }
                        error = ToMotorError(error);
                        if (error != "")
                        {
                            MESSIGEEventArgs ee = new MESSIGEEventArgs();
                            ee.MyType    = MESSIGEEventArgs.MessageType.Error;
                            ee.MyMessage = error;
                            OnTRIGGERMESSIGE(ee);
                        }
                        break;

                    case RegisterEnum.MotorPositionNow:
                        strTemp = "";
                        if (byteArray.Length == 4)
                        {
                            for (int i = 0; i < byteArray.Length; i++)
                            {
                                strTemp += byteArray[i].ToString("X2");
                            }
                        }
                        MotorPositionNow = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorSpeedNow:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }

                        MotorSpeedNow = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorObjectPosition:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }

                        iObjectrPosition = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorObjectSpeed:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }
                        iObjectSpeed = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorAcceleration:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }

                        iAcceleration = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorDeceleration:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }

                        iDeceleration = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorQuickStopDeceleration:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }

                        iQuickStopDeceleration = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorHomeAddSubtract:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }
                        iHomeAddSubtract = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorHomeMechanicsSpeed:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }
                        iHomeMechanicsSpeed = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorHomeSpeed:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }
                        iHomeSpeed = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorZeroOffset:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }
                        iZeroOffset = Convert.ToInt32(strTemp, 16);
                        break;

                    case RegisterEnum.MotorState:
                        strTemp = "";
                        for (int i = 0; i < byteArray.Length; i++)
                        {
                            strTemp += byteArray[i].ToString("X2");
                        }
                        strTemp = Convert.ToString(Convert.ToInt32(strTemp, 16), 2).PadLeft(16, '0');
                        ToMotorState(strTemp);
                        break;
                    }
                }
                break;
            }
        }
Beispiel #18
0
 internal MemoryParam(Processor p, RegisterEnum r)
 {
     _processor = p;
     Register   = r;
     Address    = _processor.Registers[Register].Value;
 }
        public void clearRegister(int index)
        {
            RegisterEnum e = (RegisterEnum)index;

            clearRegister(e);
        }
 public void clearRegister(RegisterEnum index)
 {
     registers[(int)index].register = 0;
 }
 public Int64 getRegister(RegisterEnum index)
 {
     return registers[(int)index].register;
 }
 public Int64 getRegister(RegisterEnum index)
 {
     return(registers[(int)index].register);
 }