static int Main(string[] args) { String password = ""; string xml_config = ""; Kvrlib.Status kvrstat; Kvrlib.ConfigHnd configHandle = new Kvrlib.ConfigHnd(); Kvrlib.Address address = new Kvrlib.Address(); Kvrlib.CipherInfoElement cipherInfoElement = new Kvrlib.CipherInfoElement(); Int32 i; Int32 cur_profile; Int32 canlib_channel; Int32 no_profiles; object serial; object ean; Canlib.canStatus stat = new Canlib.canStatus(); Canlib.canInitializeLibrary(); Kvrlib.InitializeLibrary(); switch (args.Length) { case 0: listDevices(); return 0; case 1: canlib_channel = args[0][0] - '0'; break; default: listDevices(); return -1; } stat = Canlib.canGetChannelData(canlib_channel, Canlib.canCHANNELDATA_CARD_UPC_NO,out ean); stat = Canlib.canGetChannelData(canlib_channel, Canlib.canCHANNELDATA_CARD_SERIAL_NO, out serial); if (isAvailibleForConfig(canlib_channel, password)) { Console.WriteLine("Channel " + canlib_channel + " is availible for configuration"); } else { Console.WriteLine("Channel " + canlib_channel + " can not be opend for configuration"); Canlib.canUnloadLibrary(); return -1; } Canlib.canUnloadLibrary(); //---------------------------------------------------------------------------- // List number of profiles kvrstat = Kvrlib.ConfigNoProfilesGet(canlib_channel, out no_profiles); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Device does not support profiles " + kvrstat); return Convert.ToInt32(kvrstat); } Console.WriteLine("Device supports " + no_profiles + " profiles."); Kvrlib.ConfigActiveProfileGet(canlib_channel, out cur_profile); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not get active profile number " + kvrstat); return Convert.ToInt32(kvrstat); } Console.WriteLine("Active profile is: " + cur_profile); // Show profiles for (i = 0; i < no_profiles; i++) { kvrstat = Kvrlib.ConfigInfoGet(canlib_channel, i, out xml_config); if (kvrstat.Equals(Kvrlib.Status.BLANK)) { Console.WriteLine("Profile " + i + " is blank."); } else if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not read profile " + i); return Convert.ToInt32(kvrstat); } else { Console.WriteLine("Profile " + i + ":\n" + xml_config); } } //---------------------------------------------------------------------------- // Start configuration - read only kvrstat = Kvrlib.ConfigOpenEx(canlib_channel, Kvrlib.ConfigMode.R, password, out configHandle, cur_profile); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start config " + kvrstat); return Convert.ToInt32(kvrstat); } // List available networks. This information could be // helpful when creating the XML configuration. kvrstat = doScanNetwork(configHandle); Kvrlib.ConfigClose(configHandle); //---------------------------------------------------------------------------- // Start configuration - read/write kvrstat = Kvrlib.ConfigOpen(canlib_channel, Kvrlib.ConfigMode.RW, password, out configHandle); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start config " + kvrstat); return Convert.ToInt32(kvrstat); } kvrstat = doConfigure(configHandle); // Done! Kvrlib.ConfigClose(configHandle); // Wait for reboot if (waitForDevice(ean, serial, 10000) != 0) { //10s timeout Console.WriteLine("waitForDevice() failed."); return -1; } //---------------------------------------------------------------------------- // Start configuration - read only kvrstat = Kvrlib.ConfigOpen(canlib_channel, Kvrlib.ConfigMode.R, password, out configHandle); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not start config " + kvrstat); return Convert.ToInt32(kvrstat); } kvrstat = doTryConfigure(configHandle, 5, ean, serial); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("doTryConfiguration failed (" + kvrstat + ")"); return Convert.ToInt32(kvrstat); } Kvrlib.ConfigClose(configHandle); Console.WriteLine("\nDone!"); Console.WriteLine("Clear the last profile"); kvrstat = Kvrlib.ConfigActiveProfileSet(canlib_channel, no_profiles - 1); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Set profile " + (no_profiles - 1) + " failed (" + kvrstat + ")"); return Convert.ToInt32(kvrstat); } // Wait for reboot if (waitForDevice(ean, serial, 10000) != 0) { //10s timeout Console.WriteLine("waitForDevice() failed."); return -1; } eraseConfiguration(canlib_channel, password); // Wait for reboot if (waitForDevice(ean, serial, 10000) != 0) { //10s timeout Console.WriteLine("waitForDevice() failed."); return -1; } Console.WriteLine("Set profile 0 as active"); kvrstat = Kvrlib.ConfigActiveProfileSet(canlib_channel, 0); if (!kvrstat.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Set profile " + 0 + " failed (" + kvrstat + ")"); return Convert.ToInt32(kvrstat); } Kvrlib.UnloadLibrary(); return 0; }
static Kvrlib.Status eraseConfiguration(Int32 canlib_channel, String password) { Kvrlib.Status status; Kvrlib.ConfigHnd handle = new Kvrlib.ConfigHnd(); status = Kvrlib.ConfigOpen(canlib_channel, Kvrlib.ConfigMode.ERASE, password, out handle); status = Kvrlib.ConfigClear(handle); if (!status.Equals(Kvrlib.Status.OK)) { Console.WriteLine("Could not clear configuration (" + status + ")"); Kvrlib.ConfigClose(handle); return status; } Kvrlib.ConfigClose(handle); return 0; }