/// <summary> /// Creates a device option /// </summary> /// <param name="wire">The wire to read on</param> /// <param name="number">The option number</param> /// <param name="handle">The device handle</param> /// <param name="userName">The username</param> /// <param name="password">The password</param> /// <param name="reloadFunction">The function to call if /// the device requires reloading options</param> /// <returns>The device option</returns> private IDeviceOption CreateDeviceOption(NetworkMethods wire, int number, int handle, string userName, string password, Action reloadFunction) { var name = wire.ReadString(); var title = wire.ReadString(); var description = wire.ReadString(); int type = wire.ReadWord(); int unit = wire.ReadWord(); int size = wire.ReadWord(); int cap = wire.ReadWord(); int ct = wire.ReadWord(); var opt = new NetworkDeviceOption(name, title, description, size, number, (SaneType)type, (SaneUnit)unit, (SaneCapabilities)cap, handle, this, userName, password, reloadFunction); switch (ct) { case (int)SaneConstraint.None: opt.Constraint = new NoneConstraint(); break; case (int)SaneConstraint.IntegerList: opt.Constraint = CreateIntegerListConstraint(wire); break; case (int)SaneConstraint.StringList: opt.Constraint = CreateStringListConstraint(wire); break; case (int)SaneConstraint.Range: opt.Constraint = CreateRangeConstraint(wire); break; default: throw new NotSupportedException( string.Format (CultureInfo.CurrentCulture, "The constraint type '{0}' is not supported", ct)); } return(opt); }
/// <summary> /// Creates an integer list constraint /// </summary> /// <param name="wire">The wire to read on</param> /// <returns>The constraint</returns> private static IOptionConstraint CreateIntegerListConstraint( NetworkMethods wire) { wire.ReadWord(); var values = wire.ReadArray((w, i) => w.ReadWord()); return(new Int32ListConstraint(values)); }
/// <summary> /// Serialize a string to send down the wire /// </summary> /// <param name="wire">The wire</param> /// <param name="value">The value to send</param> /// <returns>The size sent</returns> private static int SendString(NetworkMethods wire, string value) { int sze = Encoding.ASCII.GetBytes(value).Length; wire.SendWord(sze); wire.SendString(value); return(sze); }
/// <summary> /// Serialize a word to send down the wire /// </summary> /// <param name="wire">The wire</param> /// <param name="size">The size of the word (usually 1)</param> /// <param name="value">The value to send</param> /// <returns>The size sent</returns> private static int SendWord(NetworkMethods wire, int size, int value) { int sze = size * 4; wire.SendWord(sze); wire.SendWord(1); wire.SendWord(value); return(sze); }
/// <summary> /// Creates a range constraint /// </summary> /// <param name="wire">The wire to read on</param> /// <returns>The constraint</returns> private static IOptionConstraint CreateRangeConstraint( NetworkMethods wire) { wire.ReadWord(); int min = wire.ReadWord(); int max = wire.ReadWord(); int quant = wire.ReadWord(); return(new RangeConstraint(min, max, quant)); }
/// <summary> /// Reads the whole image data from the given port /// </summary> /// <param name="port">The port to read from</param> /// <returns>The total data from the port</returns> private MemoryStream ReadImageData(int port) { MemoryStream ret; using (var wire = new NetworkMethods(_wire.HostName, port)) { ret = wire.ReadImageRecords(); } return(ret); }
/// <summary> /// Creates the string list constraint /// </summary> /// <param name="wire">The wire to read on</param> /// <returns>The constraint</returns> private static IOptionConstraint CreateStringListConstraint( NetworkMethods wire) { var values = wire.ReadArray((w, i) => { var s = w.ReadString(); if (string.IsNullOrEmpty(s)) { return(null); } return(s); }); return(new StringListConstraint(values)); }
private IOpenableDevice CreateDevice(NetworkMethods wire, string userName, string password) { var name = wire.ReadString(); var vendor = wire.ReadString(); var model = wire.ReadString(); var type = wire.ReadString(); return(new NetworkDevice(name, vendor, model, type, this, userName, password)); }
/// <summary> /// Construct with the minimum information it needs /// </summary> /// <param name="hostName">The host name to connect to</param> /// <param name="port">The port to connect to</param> internal NetworkProcedureCaller(string hostName, int port) { _wire = new NetworkMethods(hostName, port); }