예제 #1
0
        /// <summary>
        /// Connect to Lego RCX brick.
        /// </summary>
        ///
        /// <param name="towerType">Type of IR tower to use for communication with RCX brick.</param>
        ///
        /// <returns>Returns <b>true</b> on successful connection or <b>false</b>
        /// otherwise.</returns>
        ///
        /// <remarks>If connection to RCX brick was established before the call, existing connection will be reused.
        /// If it is required to force reconnection, then <see cref="Disconnect"/> method should be called before.
        /// </remarks>
        ///
        public bool Connect(IRTowerType towerType)
        {
            lock ( sync )
            {
                // check if we are already connected
                if (stack != IntPtr.Zero)
                {
                    return(true);
                }

                uint status;

                // create stack
                status = GhostAPI.GhCreateStack(
                    (towerType == IRTowerType.USB) ? "LEGO.Pbk.CommStack.Port.USB" : "LEGO.Pbk.CommStack.Port.RS232",
                    "LEGO.Pbk.CommStack.Protocol.IR",
                    "LEGO.Pbk.CommStack.Session",
                    out stack);

                if (!GhostAPI.PBK_SUCCEEDED(status))
                {
                    return(false);
                }

                // select first available device
                StringBuilder sb = new StringBuilder(200);
                status = GhostAPI.GhSelectFirstDevice(stack, sb, sb.Length);

                if (!GhostAPI.PBK_SUCCEEDED(status))
                {
                    Disconnect( );
                    return(false);
                }

                // open stack, set interleave, set wait mode and check if the brick is alive
                if (
                    !GhostAPI.PBK_SUCCEEDED(GhostAPI.GhOpen(stack)) ||
                    !GhostAPI.PBK_SUCCEEDED(GhostAPI.GhSetWaitMode(stack, IntPtr.Zero)) ||
                    !GhostAPI.PBK_SUCCEEDED(GhostAPI.GhSetInterleave(stack, 1, 0)) ||
                    !IsAlive( )
                    )
                {
                    Disconnect( );
                    return(false);
                }
            }

            return(true);
        }
예제 #2
0
        /// <summary>
        /// Connect to Lego RCX brick.
        /// </summary>
        /// 
        /// <param name="towerType">Type of IR tower to use for communication with RCX brick.</param>
        /// 
        /// <returns>Returns <b>true</b> on successful connection or <b>false</b>
        /// otherwise.</returns>
        /// 
        /// <remarks>If connection to RCX brick was established before the call, existing connection will be reused.
        /// If it is required to force reconnection, then <see cref="Disconnect"/> method should be called before.
        /// </remarks>
        /// 
        public bool Connect( IRTowerType towerType )
        {
            lock ( sync )
            {
                // check if we are already connected
                if ( stack != IntPtr.Zero )
                    return true;

                uint status;

                // create stack
                status = GhostAPI.GhCreateStack(
                    ( towerType == IRTowerType.USB ) ? "LEGO.Pbk.CommStack.Port.USB" : "LEGO.Pbk.CommStack.Port.RS232",
                    "LEGO.Pbk.CommStack.Protocol.IR",
                    "LEGO.Pbk.CommStack.Session",
                    out stack );

                if ( !GhostAPI.PBK_SUCCEEDED( status ) )
                    return false;

                // select first available device
                StringBuilder sb = new StringBuilder( 200 );
                status = GhostAPI.GhSelectFirstDevice( stack, sb, sb.Length );

                if ( !GhostAPI.PBK_SUCCEEDED( status ) )
                {
                    Disconnect( );
                    return false;
                }

                // open stack, set interleave, set wait mode and check if the brick is alive
                if (
                    !GhostAPI.PBK_SUCCEEDED( GhostAPI.GhOpen( stack ) ) ||
                    !GhostAPI.PBK_SUCCEEDED( GhostAPI.GhSetWaitMode( stack, IntPtr.Zero ) ) ||
                    !GhostAPI.PBK_SUCCEEDED( GhostAPI.GhSetInterleave( stack, 1, 0 ) ) ||
                    !IsAlive( )
                    )
                {
                    Disconnect( );
                    return false;
                }
            }

            return true;
        }