using Nini.Config; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.IO.Ports; using System.Management; using System.Text; using smutils = SafeMobileLib.Utils; namespace Tetra_GW { class Utils { #region variables private static List comPorts = new List(); private static String[] portsList; internal static string configFile = "GWconfig.ini"; public static Boolean isTetra = true; public static Boolean isFug = false; public static Boolean autoconnect = true; public static Boolean autoupdate = true; public static Boolean isDevelop = false; private static IConfigSource source = null; #endregion variables #region ports public static void GetAvailableSerialPorts(ref Hashtable portHT) { smutils.WriteLine("scanning for serial ports..."); foreach (String s in SerialPort.GetPortNames()) { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PnPEntity WHERE Caption like '%(" + s + ")'"); foreach (ManagementObject queryObj in searcher.Get()) { if (!portHT.Contains(s)) portHT.Add(s, queryObj["Caption"].ToString()); } try { SerialPort serialPort1 = new SerialPort(); serialPort1.PortName = s; serialPort1.Open(); serialPort1.Close(); comPorts.Add(serialPort1.PortName); smutils.WriteLine("found available port: " + s); } catch (Exception ex) { //Console.WriteLine("could not open port: " + ex.ToString()); } } portsList = comPorts.ToArray(); Array.Sort(portsList); } public static String[] GetOpenPorts() { return portsList; } #endregion ports #region methods public static Int32 GetSecondsLocalFromDT(DateTime param) { DateTime datetime = param; long nOfSeconds; DateTime dt70 = new DateTime(1970, 1, 1, 0, 0, 0, 0); DateTime dttmp1 = new DateTime(1970, 1, 1, 0, 0, 0, 0); DateTime dttmp2; dttmp2 = dttmp1.ToLocalTime(); TimeSpan span2 = dttmp2 - dttmp1; TimeSpan span = datetime - dt70; //nOfSeconds = (long)span.TotalSeconds - (long)span2.TotalSeconds -3600; //mai scot o ora - 3600 if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(param)) nOfSeconds = (long)span.TotalSeconds - (long)span2.TotalSeconds - 3600; //mai scot o ora - 3600 else nOfSeconds = (long)span.TotalSeconds - (long)span2.TotalSeconds; return ((Int32)nOfSeconds); } /// /// Get an int value from the configuration file. The desired value is identifiec by /// the key and the header under which is placed is pointed by the header. Also a default /// value can be set in case the value doesn't exist and needs to be created before /// beeing returned /// /// Header unde which the desired config parameter is placed /// The Key that designates the desired config parameter /// A default value that will be used and returned in case the /// config file doesn't have a value for the parameter /// Parameter value from the config file, or the default value in case it doesn't /// exist private static Int32 GetInt32Value(String header, String key, Int32 defaultValue) { if (!source.Configs[header].Contains(key)) source.Configs[header].Set(key, defaultValue); return source.Configs[header].GetInt(key); } /// /// Get a string value from the configuration file. The desired value is identifiec by /// the key and the header under which is placed is pointed by the header. Also a default /// value can be set in case the value doesn't exist and needs to be created before /// beeing returned /// /// Header unde which the desired config parameter is placed /// The Key that designates the desired config parameter /// A default value that will be used and returned in case the /// config file doesn't have a value for the parameter /// Parameter value from the config file, or the default value in case it doesn't /// exist private static String GetStringValue(String header, String key, String defaultValue) { if (!source.Configs[header].Contains(key)) source.Configs[header].Set(key, defaultValue); return source.Configs[header].GetString(key); } /// /// Get a boolean value from the configuration file. The desired value is identifiec by /// the key and the header under which is placed is pointed by the header. Also a default /// value can be set in case the value doesn't exist and needs to be created before /// beeing returned /// /// Header unde which the desired config parameter is placed /// The Key that designates the desired config parameter /// A default value that will be used and returned in case the /// config file doesn't have a value for the parameter /// Parameter value from the config file, or the default value in case it doesn't /// exist private static Boolean GetBooleanValue(String header, String key, Boolean defaultValue) { if (!source.Configs[header].Contains(key)) source.Configs[header].Set(key, defaultValue); return source.Configs[header].GetBoolean(key); } public static Byte[] CreateLocationMessage(int opCode, string suid, String[] dataString) { string msg = ""; msg = "#1." + GetSecondsLocalFromDT(DateTime.Now).ToString() + DateTime.Now.Millisecond.ToString() + "#" + opCode + "#" + suid + "#"; msg = msg + dataString[0] + "#" + dataString[1] + "#" + dataString[2] + "#" + dataString[3]; int totalSize = 5 + msg.Length; string sizeMsg = String.Format("#{0:000}", totalSize); msg = sizeMsg + msg; Byte[] toSendMulticast = new Byte[totalSize]; ASCIIEncoding encoding = new ASCIIEncoding(); Byte[] toSendMulticastPartial = encoding.GetBytes(msg); for (int i = 0; i < toSendMulticastPartial.Length; i++) { toSendMulticast[i] = toSendMulticastPartial[i]; } toSendMulticast[totalSize - 1] = 35;//'#' return toSendMulticast; } public static Byte[] CreateMulticastMessage(int opCode, string suid, Byte[] dataBytes) { //string partialMsg = "#0.0#" + opCode + "#"+suid+"#"; //(new ConvertDT().GetSecondsLocalFromDT(DateTime.Now)) + DateTime.Now.Millisecond.ToString() string partialMsg = "#1." + GetSecondsLocalFromDT(DateTime.Now).ToString() + DateTime.Now.Millisecond.ToString() + "#" + opCode + "#" + suid + "#"; int totalSize = 4 + partialMsg.Length + dataBytes.Length + 1;// string sizeMsg = String.Format("#{0:000}", totalSize); partialMsg = sizeMsg + partialMsg; Byte[] toSendMulticast = new Byte[totalSize]; ASCIIEncoding encoding = new ASCIIEncoding(); Byte[] toSendMulticastPartial = encoding.GetBytes(partialMsg); for (int j = 0; j < toSendMulticastPartial.Length; j++) toSendMulticast[j] = toSendMulticastPartial[j]; for (int i = 0; i < dataBytes.Length; i++) { toSendMulticast[partialMsg.Length + i] = dataBytes[i]; //data } toSendMulticast[totalSize - 1] = 35;//'#' return toSendMulticast; } #endregion methods } }