/// <summary>
		/// Sets the label on the device
		/// </summary>
		/// <param name="device"></param>
		/// <param name="label"></param>
		/// <returns></returns>
		public async Task SetDeviceLabelAsync(Device device, string label)
		{
			FrameHeader header = new FrameHeader()
			{
				Identifier = (uint)randomizer.Next(),
				AcknowledgeRequired = true
			};
			var resp = await BroadcastMessageAsync<AcknowledgementResponse>(
				device.HostName, header, MessageType.DeviceSetLabel, label);
		}
		/// <summary>
		/// Gets the label for the device
		/// </summary>
		/// <param name="device"></param>
		/// <returns></returns>
		public async Task<string> GetDeviceLabelAsync(Device device)
		{
			FrameHeader header = new FrameHeader()
			{
				Identifier = (uint)randomizer.Next(),
				AcknowledgeRequired = false
			};
			var resp = await BroadcastMessageAsync<StateLabelResponse>(device.HostName, header, MessageType.DeviceGetLabel);
			return resp.Label;
		}
		/// <summary>
		/// Sets the device power state
		/// </summary>
		/// <param name="device"></param>
		/// <param name="isOn"></param>
		/// <returns></returns>
		public async Task SetDevicePowerStateAsync(Device device, bool isOn)
		{
			System.Diagnostics.Debug.WriteLine("Sending TurnDeviceOff to {0}", device.HostName);
			FrameHeader header = new FrameHeader()
			{
				Identifier = (uint)randomizer.Next(),
				AcknowledgeRequired = true
			};

			await BroadcastMessageAsync<AcknowledgementResponse>(device.HostName, header,
				MessageType.DeviceSetPower, (UInt16)(isOn ? 65535 : 0));
		}
		/// <summary>
		/// Turns the device off
		/// </summary>
		/// <param name="device"></param>
		/// <returns></returns>
		public Task TurnDeviceOffAsync(Device device)
		{
			System.Diagnostics.Debug.WriteLine("Sending TurnDeviceOff to {0}", device.HostName);
			return SetDevicePowerStateAsync(device, false);
		}
		/// <summary>
		/// Gets the device's host firmware
		/// </summary>
		/// <param name="device"></param>
		/// <returns></returns>
		public async Task<StateHostFirmwareResponse> GetDeviceHostFirmwareAsync(Device device)
		{
			FrameHeader header = new FrameHeader()
			{
				Identifier = (uint)randomizer.Next(),
				AcknowledgeRequired = false
			};
			var resp = await BroadcastMessageAsync<StateHostFirmwareResponse>(device.HostName, header, MessageType.DeviceGetHostFirmware);
			return resp;
		}