private void DumpMessage(int id, string idStr, byte[] data, int dlc, int flags, long time) { Kvadblib.Status status; Kvadblib.MessageHnd mh = new Kvadblib.MessageHnd(); Kvadblib.SignalHnd sh = new Kvadblib.SignalHnd(); //Flips the EXT bit if the EXT flag is set if ((flags & Canlib.canMSG_EXT) != 0) { id ^= -2147483648; } //Find the database message whose id matches the one //from the incoming message status = Kvadblib.GetMsgById(dbhandle, id, out mh); outputBox.AppendText(string.Format("Reading message with id {0}", idStr) + Environment.NewLine); //Print the message info if (status == Kvadblib.Status.OK) { string msgName; status = Kvadblib.GetMsgName(mh, out msgName); outputBox.AppendText(string.Format("Message received: {0}", msgName) + Environment.NewLine); int msgId; Kvadblib.MESSAGE msgFlags; status = Kvadblib.GetMsgId(mh, out msgId, out msgFlags); outputBox.AppendText(string.Format("Id: {0}, flags: {1}", msgId, msgFlags) + Environment.NewLine); //Iterate through all the signals and print their name, value and unit status = Kvadblib.GetFirstSignal(mh, out sh); while (status == Kvadblib.Status.OK) { string signalname; status = Kvadblib.GetSignalName(sh, out signalname); string unit; status = Kvadblib.GetSignalUnit(sh, out unit); double value; status = Kvadblib.GetSignalValueFloat(sh, out value, data, dlc); outputBox.AppendText(string.Format("Signal - {0}: {1} {2}", signalname, value, unit) + Environment.NewLine); status = Kvadblib.GetNextSignal(mh, out sh); } } }
/* * Loads the selected message's signals to construct a form */ public List <Signal> LoadSignalsById(int MsgId) { List <Signal> result = new List <Signal>(); Kvadblib.MessageHnd mh; Kvadblib.Status status = Kvadblib.GetMsgById(dh, MsgId, out mh); if (status == Kvadblib.Status.OK) { Kvadblib.MESSAGE f; int dlc; msgHandle = mh; Kvadblib.GetMsgId(mh, out msgId, out f); Kvadblib.GetMsgDlc(mh, out dlc); msgId = ((MsgId & -2147483648) == 0) ? MsgId : MsgId ^ -2147483648; msgFlags = ((MsgId & -2147483648) == 0) ? 0 : Canlib.canMSG_EXT; hasMessage = true; result = LoadSignals(dlc); } return(result); }
static int Main(string[] args) { // Dummy initializations to make the compiler happy. var dh = new Kvadblib.Hnd(); var mh = new Kvadblib.MessageHnd(); var sh = new Kvadblib.SignalHnd(); var nh = new Kvadblib.NodeHnd(); bool verbose = false; char last = '\0'; int ival; double fval; byte[] data = new byte[8]; DisplayError(Kvadblib.Open(out dh), "Open"); for(int n = 0; n < args.Length; n++) { if (verbose) { Console.WriteLine("{0}: {1}", n, args[n]); } if (args[n][0] == '-') { if ((n == 0) && (args[n][1] != 'v')) { DisplayError(Kvadblib.Status.Err_Param, "Argument fetch"); } switch (args[n][1]) { // File operations case 'f': DisplayError(Kvadblib.ReadFile(dh, args[n - 1]), "ReadFile"); break; case 'w': DisplayError(Kvadblib.WriteFile(dh, args[n - 1]), "WriteFile"); break; case 'c': DisplayError(Kvadblib.Create(dh, args[n - 1], ""), "Create"); createDatabase(dh); break; // Locate item case 'm': DisplayError(Kvadblib.GetMsgByName(dh, args[n - 1], out mh), "GetMsgByName"); break; case 'i': DisplayError(Kvadblib.GetMsgById(dh, int.Parse(args[n - 1]), out mh), "GetMsgById"); break; case 's': DisplayError(Kvadblib.GetSignalByName(mh, args[n - 1], out sh), "GetSignalByName"); break; case 'N': case 'n': DisplayError(Kvadblib.GetNodeByName(dh, args[n - 1], out nh), "GetNodeByName"); break; case 'a': DisplayError(Kvadblib.GetNodeAttributeIntByName(nh, args[n - 1], out ival), "GetNodeAttributeIntByName"); Console.WriteLine("Node attribute: {1}", ival); break; // Message data case 'z': for (int i = 0; i < data.Length; i++) { data[i] = 0; } break; case 'h': if (((args[n - 1].Length % 2) == 1) || (args[n - 1].Length > 16)) { DisplayError(Kvadblib.Status.Err_Param, "Hex input"); } for(int i = 0; i < args[n - 1].Length; i += 2) { data[i / 2] = (byte)Convert.ToInt32(args[n - 1].Substring(i, 2), 16); } break; // Signal data case 'P': DisplayError(Kvadblib.GetSignalValueFloat(sh, out fval, data, 8), "GetSignalValueFloat"); Console.WriteLine("Physical: {0}", fval); break; case 'R': DisplayError(Kvadblib.GetSignalValueInteger(sh, out ival, data, 8), "GetSignalValueInteger"); Console.WriteLine("Raw: {0}", ival); break; case 'p': if (!double.TryParse(args[n - 1], out fval)) { DisplayError(Kvadblib.Status.Err_Param, "double.TryParse"); } DisplayError(Kvadblib.StoreSignalValuePhys(sh, data, 8, fval), "StoreSignalValuePhys"); break; case 'r': if (!int.TryParse(args[n - 1], out ival)) { DisplayError(Kvadblib.Status.Err_Param, "int.TryParse"); } DisplayError(Kvadblib.StoreSignalValueRaw(sh, data, 8, ival), "StoreSignalValueRaw"); break; // Delete case 'd': switch (last) { case 'm': DisplayError(Kvadblib.DeleteMsg(dh, mh), "DeleteMsg"); break; case 's': DisplayError(Kvadblib.DeleteSignal(mh, sh), "DeleteSignal"); break; case 'n': DisplayError(Kvadblib.DeleteNode(dh, nh), "DeleteNode"); break; case 'N': DisplayError(Kvadblib.RemoveReceiveNodeFromSignal(sh, nh), "RemoveReceiveNodeFromSignal"); break; default: DisplayError(Kvadblib.Status.Err_Param, args[n]); break; } break; // View case 'v': switch (last) { case 'f': case 'c': dumpDatabase(dh); break; case 'm': dumpMessage(mh); break; case 's': dumpSignal(sh); break; case 'n': dumpNode(nh); break; case 'h': case 'p': case 'r': dumpData(data); break; case '\0': verbose = true; break; default: DisplayError(Kvadblib.Status.Err_Param, args[n]); break; } break; default: DisplayError(Kvadblib.Status.Err_Param, args[n]); break; } last = args[n][1]; } } DisplayError(Kvadblib.Close(dh), "Close"); return 0; }