Exemple #1
0
        /// <summary>
        /// Get value from pin instance
        /// </summary>
        /// <typeparam name="T">Value type</typeparam>
        /// <param name="inPin">Pin instance</param>
        /// <returns>Value of type <see cref="T"/></returns>
        public T GetValue <T>(DataPin inPin)
        {
            if (inPin == null)
            {
                return(default(T));
            }

            var pinKey = BuildPinHash(inPin.TemporaryNodeId, inPin.Id);

            var value = default(T);

            if (!PinValues.Any(x => x.Key == pinKey) && Parent != null)
            {
                return(Parent.GetValue <T>(inPin));
            }
            else if (PinValues.Any(x => x.Key == pinKey))
            {
                var rawValue = PinValues.FirstOrDefault(x => x.Key == pinKey);

                try
                {
                    value = (T)rawValue.Value;
                }
                catch (InvalidCastException)
                {
                    if (rawValue.Value != null)
                    {
                        value = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(rawValue.Value?.ToString());
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception($"Could not cast pin {inPin.Name} value: {rawValue.Key ?? "<unset>"}/{rawValue.Value ?? "<unset>"}", ex);
                }
            }

            // Log if inPin is null
            if ((value == null || value.Equals(default(T))) && inPin.DefaultValue != null)
            {
                var defaultValueType = inPin.DefaultValue?.GetType();
                var valueType        = typeof(T);

                /* ugly fix: if the value type is object and default value type is string,
                 * converter can not convert, so check if its object and string and just cast it.
                 */
                if (defaultValueType == valueType || (valueType == typeof(object) && defaultValueType == typeof(string)))
                {
                    value = (T)inPin.DefaultValue;
                }
                else if (inPin?.DefaultValue?.ToString() != null)
                {
                    value = (T)TypeDescriptor.GetConverter(valueType).ConvertFromInvariantString(inPin?.DefaultValue?.ToString());
                }
            }

            return(value);
        }
Exemple #2
0
 /// <summary>
 /// Gets the state of all General Pins
 /// </summary>
 /// <param name="allPins">A structure to fill with the current state of all pins.</param>
 public void GetGeneralInputs(PinValues allPins)
 {
     CANifierNative.JNI_GetGeneralInputs(m_handle, _tempPins);
     allPins.LIMF          = _tempPins[(int)GeneralPin.LIMF];
     allPins.LIMR          = _tempPins[(int)GeneralPin.LIMR];
     allPins.QUAD_A        = _tempPins[(int)GeneralPin.QUAD_A];
     allPins.QUAD_B        = _tempPins[(int)GeneralPin.QUAD_B];
     allPins.QUAD_IDX      = _tempPins[(int)GeneralPin.QUAD_IDX];
     allPins.SCL           = _tempPins[(int)GeneralPin.SCL];
     allPins.SDA           = _tempPins[(int)GeneralPin.SDA];
     allPins.SPI_CLK_PWM0  = _tempPins[(int)GeneralPin.SPI_CLK_PWM0P];
     allPins.SPI_MOSI_PWM1 = _tempPins[(int)GeneralPin.SPI_MOSI_PWM1P];
     allPins.SPI_MISO_PWM2 = _tempPins[(int)GeneralPin.SPI_MISO_PWM2P];
     allPins.SPI_CS_PWM3   = _tempPins[(int)GeneralPin.SPI_CS];
 }
Exemple #3
0
        public int GetGeneralInputs(PinValues allPins)
        {
            int err = _ll.GetGeneralInputs(_tempPins);

            allPins.LIMF          = _tempPins[(int)GeneralPin.LIMF] != 0;
            allPins.LIMR          = _tempPins[(int)GeneralPin.LIMR] != 0;
            allPins.QUAD_A        = _tempPins[(int)GeneralPin.QUAD_A] != 0;
            allPins.QUAD_B        = _tempPins[(int)GeneralPin.QUAD_B] != 0;
            allPins.QUAD_IDX      = _tempPins[(int)GeneralPin.QUAD_IDX] != 0;
            allPins.SCL           = _tempPins[(int)GeneralPin.SCL] != 0;
            allPins.SDA           = _tempPins[(int)GeneralPin.SDA] != 0;
            allPins.SPI_CLK_PWM0  = _tempPins[(int)GeneralPin.SPI_CLK_PWM0P] != 0;
            allPins.SPI_MOSI_PWM1 = _tempPins[(int)GeneralPin.SPI_MOSI_PWM1P] != 0;
            allPins.SPI_MISO_PWM2 = _tempPins[(int)GeneralPin.SPI_MISO_PWM2P] != 0;
            allPins.SPI_CS_PWM3   = _tempPins[(int)GeneralPin.SPI_CS] != 0;

            return(err);
        }
Exemple #4
0
        /// <summary>
        /// Get pin value as list
        /// </summary>
        /// <typeparam name="T">Generic type</typeparam>
        /// <param name="inPin">Pin instance</param>
        /// <returns>Result as list</returns>
        public IList <T> GetListValue <T>(DataPin inPin)
        {
            var pinKey = BuildPinHash(inPin.TemporaryNodeId, inPin.Id);

            if (PinValues.Any(x => x.Key == pinKey))
            {
                var value = (PinValues.FirstOrDefault(x => x.Key == pinKey).Value as IList);
                var list  = value.Cast <T>().ToList();

                // Check

                return(list);
            }
            else
            {
                return(new List <T>());
            }
        }