deb_libcec.git
12 years agocec: vendor command 05 -> TransmitVendorCommandSetDeviceMode
Lars Op den Kamp [Sun, 12 Feb 2012 19:10:10 +0000 (20:10 +0100)] 
cec: vendor command 05 -> TransmitVendorCommandSetDeviceMode

12 years agocec: more SL hacks
Lars Op den Kamp [Sun, 12 Feb 2012 19:01:44 +0000 (20:01 +0100)] 
cec: more SL hacks

12 years agocec: more LG loop fix hacks
Lars Op den Kamp [Sun, 12 Feb 2012 16:20:09 +0000 (17:20 +0100)] 
cec: more LG loop fix hacks

12 years agocec: stop replying to power status requests from LG when the power state is 'on'
Lars Op den Kamp [Sun, 12 Feb 2012 14:42:03 +0000 (15:42 +0100)] 
cec: stop replying to power status requests from LG when the power state is 'on'

12 years agocec: fix loop when initialising LG
Lars Op den Kamp [Sun, 12 Feb 2012 14:34:53 +0000 (15:34 +0100)] 
cec: fix loop when initialising LG

12 years agocec: don't send 'image view on' to LG unless needed, or the tv will get caught in...
Lars Op den Kamp [Sun, 12 Feb 2012 14:04:07 +0000 (15:04 +0100)] 
cec: don't send 'image view on' to LG unless needed, or the tv will get caught in a loop

12 years agocec: lg expects the device type on 89:05. set deck status 0x20 only for recorders
Lars Op den Kamp [Sat, 11 Feb 2012 21:24:28 +0000 (22:24 +0100)] 
cec: lg expects the device type on 89:05. set deck status 0x20 only for recorders

12 years agocec: send feature abort to LG devices when they send a vendor id. start with status...
Lars Op den Kamp [Sat, 11 Feb 2012 20:57:26 +0000 (21:57 +0100)] 
cec: send feature abort to LG devices when they send a vendor id. start with status 'in transition standby to on' for LG

12 years agocec: don't try to lock the transmit mutex when deleting a command handler
Lars Op den Kamp [Sat, 11 Feb 2012 20:46:09 +0000 (21:46 +0100)] 
cec: don't try to lock the transmit mutex when deleting a command handler

12 years agocec: fix 104125dc8316fb58253c34f417ded1e85b22c9f8
Lars Op den Kamp [Sat, 11 Feb 2012 20:28:58 +0000 (21:28 +0100)] 
cec: fix 104125dc8316fb58253c34f417ded1e85b22c9f8

12 years agocec: don't keep the mutex locked in CCECBusDevice when calling InitHandler
Lars Op den Kamp [Sat, 11 Feb 2012 20:06:33 +0000 (21:06 +0100)] 
cec: don't keep the mutex locked in CCECBusDevice when calling InitHandler

12 years agocec: prevent possible deadlock when closing the connection in CUSBCECAdapterCommunica...
Lars Op den Kamp [Sat, 11 Feb 2012 20:02:32 +0000 (21:02 +0100)] 
cec: prevent possible deadlock when closing the connection in CUSBCECAdapterCommunication::Close()

12 years agocec: keep the 'busy state' of the command handler in CCECBusDevice
Lars Op den Kamp [Sat, 11 Feb 2012 20:01:02 +0000 (21:01 +0100)] 
cec: keep the 'busy state' of the command handler in CCECBusDevice

12 years agocec: and now proper predicates
Lars Op den Kamp [Sat, 11 Feb 2012 18:50:50 +0000 (19:50 +0100)] 
cec: and now proper predicates

12 years agoRevert "platform: added predicate in CCondition"
Lars Op den Kamp [Sat, 11 Feb 2012 17:55:28 +0000 (18:55 +0100)] 
Revert "platform: added predicate in CCondition"

This reverts commit 41c655b6ba019bd5c342be9fcfa8c34fad0178ef.

12 years agoplatform: fixed return values of socket operations in lib/platform
Lars Op den Kamp [Sat, 11 Feb 2012 01:40:56 +0000 (02:40 +0100)] 
platform: fixed return values of socket operations in lib/platform

12 years agoplatform: added predicate in CCondition
Lars Op den Kamp [Sat, 11 Feb 2012 01:26:37 +0000 (02:26 +0100)] 
platform: added predicate in CCondition

12 years agocec: fix linux compilation and warning after the recent changes
Lars Op den Kamp [Fri, 10 Feb 2012 23:31:30 +0000 (00:31 +0100)] 
cec: fix linux compilation and warning after the recent changes

12 years agocec-config-gui: display the detected menu language
Lars Op den Kamp [Fri, 10 Feb 2012 20:15:01 +0000 (21:15 +0100)] 
cec-config-gui: display the detected menu language

12 years agocec-config-gui: added some tooltips
Lars Op den Kamp [Fri, 10 Feb 2012 20:00:20 +0000 (21:00 +0100)] 
cec-config-gui: added some tooltips

12 years agodeleted the signed driver from the tree, since that doesn't work. let the installer...
Lars Op den Kamp [Fri, 10 Feb 2012 19:43:12 +0000 (20:43 +0100)] 
deleted the signed driver from the tree, since that doesn't work. let the installer create a new signed driver on the production build system

12 years agoadded the new config tool to the installer
Lars Op den Kamp [Fri, 10 Feb 2012 19:19:17 +0000 (20:19 +0100)] 
added the new config tool to the installer

12 years agocec: added a .net CEC configuration tool
Lars Op den Kamp [Fri, 10 Feb 2012 18:52:25 +0000 (19:52 +0100)] 
cec: added a .net CEC configuration tool

12 years agocec: added GetLogicalAddresses() and SetStreamPath() to LibCecSharp
Lars Op den Kamp [Fri, 10 Feb 2012 11:53:11 +0000 (12:53 +0100)] 
cec: added GetLogicalAddresses() and SetStreamPath() to LibCecSharp

12 years agocec: use the new "config constructor" in CecSharpClient
Lars Op den Kamp [Fri, 10 Feb 2012 11:45:11 +0000 (12:45 +0100)] 
cec: use the new "config constructor" in CecSharpClient

12 years agocec: don't override callback methods in the new LibCecSharp constructor
Lars Op den Kamp [Fri, 10 Feb 2012 11:44:34 +0000 (12:44 +0100)] 
cec: don't override callback methods in the new LibCecSharp constructor

12 years agocec: create a default device type config in LibCecSharp
Lars Op den Kamp [Fri, 10 Feb 2012 11:44:11 +0000 (12:44 +0100)] 
cec: create a default device type config in LibCecSharp

12 years agocec: added the new config persistence methods to LibCecSharp
Lars Op den Kamp [Fri, 10 Feb 2012 11:33:56 +0000 (12:33 +0100)] 
cec: added the new config persistence methods to LibCecSharp

12 years agocec: added the new initialise method to LibCecSharp (as a new constructor)
Lars Op den Kamp [Fri, 10 Feb 2012 11:24:43 +0000 (12:24 +0100)] 
cec: added the new initialise method to LibCecSharp (as a new constructor)

12 years agocec: extracted CecSharpTypes.h in LibCecSharp. LibCecSharp is now in the CecSharp...
Lars Op den Kamp [Fri, 10 Feb 2012 10:57:48 +0000 (11:57 +0100)] 
cec: extracted CecSharpTypes.h in LibCecSharp. LibCecSharp is now in the CecSharp namespace

12 years agocec-config: save the config xml if the adapter doesn't support persisting settings.
Lars Op den Kamp [Fri, 10 Feb 2012 09:32:48 +0000 (10:32 +0100)] 
cec-config: save the config xml if the adapter doesn't support persisting settings.

12 years agocec-config: make the chosen physical address active
Lars Op den Kamp [Fri, 10 Feb 2012 01:13:58 +0000 (02:13 +0100)] 
cec-config: make the chosen physical address active

12 years agocec: set the ackmask to 0 when closing the connection
Lars Op den Kamp [Fri, 10 Feb 2012 00:59:48 +0000 (01:59 +0100)] 
cec: set the ackmask to 0 when closing the connection

12 years agocec: added CanPersistConfiguration()/cec_can_persist_configuration() and PersistConfi...
Lars Op den Kamp [Fri, 10 Feb 2012 00:57:17 +0000 (01:57 +0100)] 
cec: added CanPersistConfiguration()/cec_can_persist_configuration() and PersistConfiguration()/cec_persist_configuration()

12 years agocec-config: added the other options from xbmc to the config
Lars Op den Kamp [Thu, 9 Feb 2012 23:37:01 +0000 (00:37 +0100)] 
cec-config: added the other options from xbmc to the config

12 years agocec: added GetCurrentConfiguration()/cec_get_current_configuration()
Lars Op den Kamp [Thu, 9 Feb 2012 23:13:42 +0000 (00:13 +0100)] 
cec: added GetCurrentConfiguration()/cec_get_current_configuration()

12 years agocec-config: use the new LibCecInitialise()
Lars Op den Kamp [Thu, 9 Feb 2012 22:31:58 +0000 (23:31 +0100)] 
cec-config: use the new LibCecInitialise()

12 years agocec: added a new initialiser method: CecInitialise()/cec_initialise(), that accepts...
Lars Op den Kamp [Thu, 9 Feb 2012 21:42:31 +0000 (22:42 +0100)] 
cec: added a new initialiser method: CecInitialise()/cec_initialise(), that accepts a "libc_configuration" struct as parameter. this way, the signature of the init method can stay the same when adding new options.

12 years agocec-config: fixed typo
Lars Op den Kamp [Thu, 9 Feb 2012 15:23:12 +0000 (16:23 +0100)] 
cec-config: fixed typo

12 years agoplatform: fix tcp socket error handling and return value.
Lars Op den Kamp [Thu, 9 Feb 2012 14:36:59 +0000 (15:36 +0100)] 
platform: fix tcp socket error handling and return value.

12 years agocec: added cec-config, a libCEC configuration wizard. WIP. currently only detects...
Lars Op den Kamp [Thu, 9 Feb 2012 13:07:26 +0000 (14:07 +0100)] 
cec: added cec-config, a libCEC configuration wizard. WIP. currently only detects the physical address.

12 years agocec: allow HDMI port changes after the physical address has been set, or it can't...
Lars Op den Kamp [Thu, 9 Feb 2012 12:00:35 +0000 (13:00 +0100)] 
cec: allow HDMI port changes after the physical address has been set, or it can't be changed anymore after libCEC has been initialised.

12 years agocec: use CTryLockObject when trying to replace handlers in CCECBusDevice
Lars Op den Kamp [Thu, 9 Feb 2012 11:59:54 +0000 (12:59 +0100)] 
cec: use CTryLockObject when trying to replace handlers in CCECBusDevice

12 years agocec: added CTryLockObject
Lars Op den Kamp [Thu, 9 Feb 2012 11:59:21 +0000 (12:59 +0100)] 
cec: added CTryLockObject

12 years agocec: include stdint.h in windows/os-types.h instead of typedef'ing ints
Lars Op den Kamp [Thu, 9 Feb 2012 00:04:41 +0000 (01:04 +0100)] 
cec: include stdint.h in windows/os-types.h instead of typedef'ing ints

12 years agocec: add a physical address override parameter to libCEC's init method. when set...
Lars Op den Kamp [Wed, 8 Feb 2012 23:21:43 +0000 (00:21 +0100)] 
cec: add a physical address override parameter to libCEC's init method. when set to non-0, the given physical address will be used and autodetection and SetHDMIPort() will be disabled.

12 years agocec: removed deprecated CECCreate() method
Lars Op den Kamp [Wed, 8 Feb 2012 23:07:48 +0000 (00:07 +0100)] 
cec: removed deprecated CECCreate() method

12 years agocec: don't try to read or write in CUSBCECAdapterCommunication when the connection...
Lars Op den Kamp [Wed, 8 Feb 2012 22:32:56 +0000 (23:32 +0100)] 
cec: don't try to read or write in CUSBCECAdapterCommunication when the connection has been closed

12 years agocec: extracted a Close() method in CCECProcessor
Lars Op den Kamp [Wed, 8 Feb 2012 22:29:16 +0000 (23:29 +0100)] 
cec: extracted a Close() method in CCECProcessor

12 years agoLibCecSharp: added quotes to the linker statement for libcec.lib. fixes compilation...
Lars Op den Kamp [Wed, 8 Feb 2012 11:12:18 +0000 (12:12 +0100)] 
LibCecSharp: added quotes to the linker statement for libcec.lib. fixes compilation in paths with spaces. closes #20

12 years agocec: use the local cec.h/cectypes.h instead of system wide when compiling libCEC...
Lars Op den Kamp [Wed, 8 Feb 2012 11:04:51 +0000 (12:04 +0100)] 
cec: use the local cec.h/cectypes.h instead of system wide when compiling libCEC and cec-client

12 years agocec: include the local cectypes.h in cec.h and cecc.h instead of system wide
Lars Op den Kamp [Wed, 8 Feb 2012 10:56:02 +0000 (11:56 +0100)] 
cec: include the local cectypes.h in cec.h and cecc.h instead of system wide

12 years agocec: don't broadcast but wake one thread in CProtectedSocket::MarkReady()
Lars Op den Kamp [Tue, 7 Feb 2012 01:32:43 +0000 (02:32 +0100)] 
cec: don't broadcast but wake one thread in CProtectedSocket::MarkReady()

12 years agocec: moved the previously added OS-X ifdef to posix/os-socket.h
Lars Op den Kamp [Tue, 7 Feb 2012 01:13:40 +0000 (02:13 +0100)] 
cec: moved the previously added OS-X ifdef to posix/os-socket.h

12 years agocec: fix OS-X compilation. credits: Dustin Cooper
Lars Op den Kamp [Tue, 7 Feb 2012 00:36:56 +0000 (01:36 +0100)] 
cec: fix OS-X compilation. credits: Dustin Cooper

12 years agocec: added GetLogicalAddresses()/cec_get_logical_addresses() to the interface, that...
Lars Op den Kamp [Mon, 6 Feb 2012 15:05:25 +0000 (16:05 +0100)] 
cec: added GetLogicalAddresses()/cec_get_logical_addresses() to the interface, that returns the list of addresses controlled by libCEC

12 years agocec: fixed typo in CUSBCECAdapterCommunication::Read()
Lars Op den Kamp [Mon, 6 Feb 2012 14:36:55 +0000 (15:36 +0100)] 
cec: fixed typo in CUSBCECAdapterCommunication::Read()

12 years agoMerge branch 'master' into release
Lars Op den Kamp [Mon, 6 Feb 2012 14:14:37 +0000 (15:14 +0100)] 
Merge branch 'master' into release

12 years agoupdated changelog and bumped version numbers to 1.4.3
Lars Op den Kamp [Mon, 6 Feb 2012 13:29:44 +0000 (14:29 +0100)] 
updated changelog and bumped version numbers to 1.4.3

12 years agocec: fixed crash on exit in LibCecSharp
Lars Op den Kamp [Mon, 6 Feb 2012 13:04:04 +0000 (14:04 +0100)] 
cec: fixed crash on exit in LibCecSharp

12 years agocec: don't sign development binaries with a temporary key. devs can do that themselve...
Lars Op den Kamp [Mon, 6 Feb 2012 12:28:53 +0000 (13:28 +0100)] 
cec: don't sign development binaries with a temporary key. devs can do that themselves when they want LibCecSharp in the GAC

12 years agocec: added SetStreamPath()/cec_set_stream_path_logical()/cec_set_stream_path_physical...
Lars Op den Kamp [Mon, 6 Feb 2012 11:47:34 +0000 (12:47 +0100)] 
cec: added SetStreamPath()/cec_set_stream_path_logical()/cec_set_stream_path_physical() to the interface, to send a "set stream path" command over the CEC bus, used to activate another source.

12 years agocosmetics
Lars Op den Kamp [Mon, 6 Feb 2012 10:15:37 +0000 (11:15 +0100)] 
cosmetics

12 years agocec: keep the mutex locked when calling ReplaceHandlers() in CCECProcessor
Lars Op den Kamp [Mon, 6 Feb 2012 10:15:22 +0000 (11:15 +0100)] 
cec: keep the mutex locked when calling ReplaceHandlers() in CCECProcessor

12 years agocec: thread methods should be virtual, not inline. fixes access violation on win32
Lars Op den Kamp [Mon, 6 Feb 2012 10:14:44 +0000 (11:14 +0100)] 
cec: thread methods should be virtual, not inline. fixes access violation on win32

12 years agocec: created a separate driver installer, which is included in the libCEC installer...
Lars Op den Kamp [Sun, 5 Feb 2012 13:45:24 +0000 (14:45 +0100)] 
cec: created a separate driver installer, which is included in the libCEC installer. uninstalls the old unsigned version of libCEC and the driver when it's found and installs the new one in C:\Program Files(x86)\Pulse Eight\USB-CEC Adapter.

12 years agocec: added "driver only" and "driver + libcec" sections to the installer
Lars Op den Kamp [Sat, 4 Feb 2012 16:14:33 +0000 (17:14 +0100)] 
cec: added "driver only" and "driver + libcec" sections to the installer

12 years agocec: let create-installer.cmd sign all binaries on the production build system.
Lars Op den Kamp [Sat, 4 Feb 2012 16:14:06 +0000 (17:14 +0100)] 
cec: let create-installer.cmd sign all binaries on the production build system.

12 years agocec: added a signed driver
Lars Op den Kamp [Sat, 4 Feb 2012 10:27:00 +0000 (11:27 +0100)] 
cec: added a signed driver

12 years agocec: fixed possible crash when command handler were switched while it was being used
Lars Op den Kamp [Thu, 2 Feb 2012 23:46:06 +0000 (00:46 +0100)] 
cec: fixed possible crash when command handler were switched while it was being used

12 years agocec: don't replace handlers when not initialised, or the primary device's logical...
Lars Op den Kamp [Thu, 2 Feb 2012 20:06:21 +0000 (21:06 +0100)] 
cec: don't replace handlers when not initialised, or the primary device's logical addres isn't known yet, which can lead to crashes. don't call handlers directly in CCECProcessor without holding a lock on them

12 years agocec: ping the adapter and request the firmware version in CUSBCECAdapterCommunication...
Lars Op den Kamp [Thu, 2 Feb 2012 19:20:10 +0000 (20:20 +0100)] 
cec: ping the adapter and request the firmware version in CUSBCECAdapterCommunication instead of CCECProcesssor. fixes failed libCEC inits on win32

12 years agocec: fixed compilation warnings
Lars Op den Kamp [Thu, 2 Feb 2012 13:46:16 +0000 (14:46 +0100)] 
cec: fixed compilation warnings

12 years agocec: added an IAdapterCommunicationCallback interface an use a callback method to...
Lars Op den Kamp [Thu, 2 Feb 2012 11:58:53 +0000 (12:58 +0100)] 
cec: added an IAdapterCommunicationCallback interface an use a callback method to pass newly received cec_commands to CCECProcessor

12 years agocec: dropped no longer needed start condition and state boolean in CCECProcessor...
Lars Op den Kamp [Thu, 2 Feb 2012 10:28:22 +0000 (11:28 +0100)] 
cec: dropped no longer needed start condition and state boolean in CCECProcessor. this is handled by Cthread now

12 years agocosmetics
Lars Op den Kamp [Thu, 2 Feb 2012 10:09:43 +0000 (11:09 +0100)] 
cosmetics

12 years agocosmetics: AddLog() has formatting params
Lars Op den Kamp [Thu, 2 Feb 2012 02:13:59 +0000 (03:13 +0100)] 
cosmetics: AddLog() has formatting params

12 years agocec: added the new msgcodes to MessageCodeAsString()
Lars Op den Kamp [Thu, 2 Feb 2012 01:38:16 +0000 (02:38 +0100)] 
cec: added the new msgcodes to MessageCodeAsString()

12 years agolinux: fix compilation
Lars Op den Kamp [Thu, 2 Feb 2012 01:37:09 +0000 (02:37 +0100)] 
linux: fix compilation

12 years agowin32: don't link to winsock
Lars Op den Kamp [Thu, 2 Feb 2012 01:25:17 +0000 (02:25 +0100)] 
win32: don't link to winsock

12 years agowin32: resolve condition methods at runtime
Lars Op den Kamp [Thu, 2 Feb 2012 00:58:14 +0000 (01:58 +0100)] 
win32: resolve condition methods at runtime

12 years agowin32: fix < vista compilation
Lars Op den Kamp [Thu, 2 Feb 2012 00:22:51 +0000 (01:22 +0100)] 
win32: fix < vista compilation

12 years agocec: close and delete the connection when the processor thread ends. fixes reconnect...
Lars Op den Kamp [Thu, 2 Feb 2012 00:02:56 +0000 (01:02 +0100)] 
cec: close and delete the connection when the processor thread ends. fixes reconnect after standby (access denied / connection already opened)

12 years agoadded: set controlled mode on after opening a connection to the adapter
Bob van Loosen [Wed, 1 Feb 2012 23:55:40 +0000 (00:55 +0100)] 
added: set controlled mode on after opening a connection to the adapter

12 years agoadded: new enum values
Bob van Loosen [Wed, 1 Feb 2012 23:21:22 +0000 (00:21 +0100)] 
added: new enum values

12 years agowin64: fixed compilation
Lars Op den Kamp [Wed, 1 Feb 2012 11:00:59 +0000 (12:00 +0100)] 
win64: fixed compilation

12 years agocec: receive and send full cec_commands, not CCECAdapterMessages in CAdapterCommunica...
Lars Op den Kamp [Tue, 31 Jan 2012 23:05:40 +0000 (00:05 +0100)] 
cec: receive and send full cec_commands, not CCECAdapterMessages in CAdapterCommunication. extract an IAdapterCommunication interface. fixed potentially missed data in CAdapterCommunication

12 years agocec: clean up lib/platform
Lars Op den Kamp [Tue, 31 Jan 2012 01:33:42 +0000 (02:33 +0100)] 
cec: clean up lib/platform

12 years agocec: wait 500 ms before trying to retransmit a command. always wait for the result...
Lars Op den Kamp [Mon, 30 Jan 2012 13:16:47 +0000 (14:16 +0100)] 
cec: wait 500 ms before trying to retransmit a command. always wait for the result of a transmission in CCECCommandHandler::Transmit()

12 years agoposix: fixed lib/platform/sockets/tcp.h compilation and some bugs. added CTcpSocket...
Lars Op den Kamp [Mon, 30 Jan 2012 11:15:47 +0000 (12:15 +0100)] 
posix: fixed lib/platform/sockets/tcp.h compilation and some bugs. added CTcpSocket::Shutdown()

12 years agoalso updated the copyright years in posix-only files
Lars Op den Kamp [Mon, 30 Jan 2012 10:17:51 +0000 (11:17 +0100)] 
also updated the copyright years in posix-only files

12 years agochanged the year in copyright notices to 2011-2012
Lars Op den Kamp [Mon, 30 Jan 2012 10:07:20 +0000 (11:07 +0100)] 
changed the year in copyright notices to 2011-2012

12 years agowin32: also timeout when data is received in SocketRead()
Lars Op den Kamp [Mon, 30 Jan 2012 09:55:33 +0000 (10:55 +0100)] 
win32: also timeout when data is received in SocketRead()

12 years agocec: added tcp client sockets to lib/platform
Lars Op den Kamp [Mon, 30 Jan 2012 01:28:03 +0000 (02:28 +0100)] 
cec: added tcp client sockets to lib/platform

12 years agocec: fill in a couple of TODOs in lib/platform/windows/os-socket.h
Lars Op den Kamp [Sun, 29 Jan 2012 22:55:22 +0000 (23:55 +0100)] 
cec: fill in a couple of TODOs in lib/platform/windows/os-socket.h

12 years agocec: sync win32
Lars Op den Kamp [Sun, 29 Jan 2012 19:58:06 +0000 (20:58 +0100)] 
cec: sync win32

12 years agocec: keep trying to reconnect to the com port until the timeout runs out. bugzid...
Lars Op den Kamp [Sun, 29 Jan 2012 17:45:04 +0000 (18:45 +0100)] 
cec: keep trying to reconnect to the com port until the timeout runs out. bugzid: 230

12 years agocec: transmit 'menu state activated' after the stream path has been set to a device...
Lars Op den Kamp [Sun, 29 Jan 2012 17:03:32 +0000 (18:03 +0100)] 
cec: transmit 'menu state activated' after the stream path has been set to a device that is handled by libCEC. should fix remote commands not working properly on Panasonic TVs and after another source has been active. bugzid: 233

12 years agocec: clean ups and only include what we need from lib/platform.
Lars Op den Kamp [Sat, 28 Jan 2012 12:02:01 +0000 (13:02 +0100)] 
cec: clean ups and only include what we need from lib/platform.

12 years agocec: add formating parameters to PrintToStdOut()
Lars Op den Kamp [Fri, 27 Jan 2012 20:08:38 +0000 (21:08 +0100)] 
cec: add formating parameters to PrintToStdOut()