/// <summary> /// Get an Int64 value from an area description metadata. /// </summary> /// <returns><c>true</c>, if an Int64 value was found, <c>false</c> otherwise.</returns> /// <param name="rawMetadata">Area description metadata pointer.</param> /// <param name="key">Key name.</param> /// <param name="value">Output value for the specified key.</param> private static bool _MetadataGetInt64(IntPtr rawMetadata, string key, out Int64 value) { value = 0; IntPtr rawValue = IntPtr.Zero; uint rawValueSize = 0; if (AreaDescriptionAPI.TangoAreaDescriptionMetadata_get(rawMetadata, key, ref rawValueSize, ref rawValue) != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(string.Format("key={0} Unable to get metadata value.\n" + Environment.StackTrace, key)); return(false); } if (rawValueSize != INT64_BYTE_COUNT) { // Unexpected size change Debug.Log(string.Format("key={0} Unexpected byte size {1}.\n" + Environment.StackTrace, key, rawValueSize)); return(false); } value = Marshal.ReadInt64(rawValue); return(true); }
/// <summary> /// Get a fixed-size double array from an area description metadata. /// </summary> /// <returns><c>true</c>, if a double array of the specified size was found, <c>false</c> otherwise.</returns> /// <param name="rawMetadata">Area description metadata pointer.</param> /// <param name="key">Key name.</param> /// <param name="expectedCount">Expected size of the array.</param> /// <param name="value">Output value for the specified key.</param> private static bool _MetadataGetDoubleArray(IntPtr rawMetadata, string key, int expectedCount, out double[] value) { value = new double[expectedCount]; IntPtr rawValue = IntPtr.Zero; uint rawValueSize = 0; if (AreaDescriptionAPI.TangoAreaDescriptionMetadata_get(rawMetadata, key, ref rawValueSize, ref rawValue) != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(string.Format("key={0} Unable to get metadata value.\n" + Environment.StackTrace, value)); return(false); } if (rawValueSize != DOUBLE_BYTE_COUNT * expectedCount) { // Unexpected size change Debug.Log(string.Format("key={0} Unexpected byte size {1}.\n" + Environment.StackTrace, key, rawValueSize)); return(false); } Marshal.Copy(rawValue, value, 0, expectedCount); return(true); }
/// <summary> /// Get a string value from an area description metadata. /// </summary> /// <returns><c>true</c>, if a string value was found, <c>false</c> otherwise.</returns> /// <param name="rawMetadata">Area description metadata pointer.</param> /// <param name="key">Key name.</param> /// <param name="value">Output value for the specified key.</param> private static bool _MetadataGetString(IntPtr rawMetadata, string key, out string value) { value = String.Empty; IntPtr rawValue = IntPtr.Zero; uint rawValueSize = 0; if (AreaDescriptionAPI.TangoAreaDescriptionMetadata_get(rawMetadata, key, ref rawValueSize, ref rawValue) != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(string.Format("key={0} Unable to get metadata value.\n" + Environment.StackTrace, key)); return(false); } byte[] rawValueArray = new byte[rawValueSize]; Marshal.Copy(rawValue, rawValueArray, 0, (int)rawValueSize); try { value = Encoding.UTF8.GetString(rawValueArray); } catch (Exception e) { Debug.Log(string.Format("key={0} Error during UTF-8 decoding {1}.\n" + Environment.StackTrace, key, e.Message)); return(false); } return(true); }