using System; using SafeMobileLib; namespace MotoTrbo_GW { class Utils { public static String ID2IP(string p_CAI, string p_radioIP) { uint radioID = Convert.ToUInt32(p_radioIP); if (radioID > 255 * 255 * 255) throw new Exception("Radio ID out of range"); byte c = (byte)(radioID & 0x0000FF); byte b = (byte)((radioID & 0x00FF00) >> 8); byte a = (byte)((radioID & 0xFF0000) >> 16); String toReturn = "" + p_CAI + "." + a + "." + b + "." + c; return toReturn; } public static string Byte2String(byte[] data, int startIndex, int len) { string sdata = ""; int i; if (startIndex > data.Length) return ""; for (i = startIndex; i < startIndex + len && i < data.Length; i++) { int ii; ii = (int)data[i]; sdata += "0x" + ii.ToString("X") + " "; } return sdata; } public static void printBytesArray(Byte[] receivedBytes, ConsoleType type) { SafeMobileLib.Utils.Write("Data: ", type); for (int i = 0; i < receivedBytes.Length; i++) { SafeMobileLib.Utils.Write(String.Format("0x{0:X} ", receivedBytes[i]), type); } SafeMobileLib.Utils.WriteLine("", type); } //temporat //public static Int32 GetSecondsLocalFromDT(DateTime param) //{ // System.DateTime datetime = param; // long nOfSeconds; // System.DateTime dt70 = new DateTime(1970, 1, 1, 0, 0, 0, 0); // System.DateTime dttmp1 = new DateTime(1970, 1, 1, 0, 0, 0, 0); // System.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 (System.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); //} public static Byte[] createLocationMessage(int opCode, string suid, String[] dataString) { string msg = ""; string seqID = GenerateSeqID(1); msg = "#" + seqID + "#" + 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]; System.Text.ASCIIEncoding encoding = new System.Text.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, out string seqID) { seqID = GenerateSeqID(1); string partialMsg = "#" + seqID + "#" + 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]; System.Text.ASCIIEncoding encoding = new System.Text.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; /* Byte[] toSendMulticast = new Byte[dataBytes.Length + 10]; toSendMulticast[0] = 35; //# toSendMulticast[1] = (byte)(dataBytes.Length + 10); //length toSendMulticast[2] = 35; //# toSendMulticast[3] = 131; // opcode toSendMulticast[4] = 35; //# toSendMulticast[5] = Byte.Parse(su1); //suid byte 1 toSendMulticast[6] = Byte.Parse(su2); //suid byte 2 toSendMulticast[7] = Byte.Parse(su3); //suid byte 3 toSendMulticast[8] = 35; //# for (int i = 0; i < dataBytes.Length; i++) { toSendMulticast[i + 9] = dataBytes[i]; //data } toSendMulticast[dataBytes.Length + 9] = 35; //# return toSendMulticast; */ } /// /// Generates a sequence id for mbus /// /// The first number in sequence id, before the dot (ex: 1.323234343...) /// public static string GenerateSeqID(int number) { DateTime now = DateTime.Now; return number + "." + now.GetSecondsLocalFromDT() + now.Millisecond; } } }