public CanOpenStatus canHardwareConnect(int can_port, int can_bitrate)
        {
            CanOpenStatus ret = CanOpenStatus.CANOPEN_ERROR;

            ret = client_sdo.canHardwareConnect(can_port, can_bitrate);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = receive_pdo.canHardwareConnect(can_port, can_bitrate);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = transmit_pdo.canHardwareConnect(can_port, can_bitrate);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = nmt_mlaster.canHardwareConnect(can_port, can_bitrate);
            return(ret);
        }
        public CanOpenStatus canHardwareDisconnect()
        {
            CanOpenStatus ret = CanOpenStatus.CANOPEN_ERROR;

            ret = client_sdo.canHardwareDisconnect();
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = receive_pdo.canHardwareDisconnect();
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = transmit_pdo.canHardwareDisconnect();
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = nmt_mlaster.canHardwareDisconnect();
            return(ret);
        }
        public CanOpenStatus startupNode(byte nodeId)
        {
            CanOpenStatus ret = CanOpenStatus.CANOPEN_ERROR;

            this.node_id = nodeId;

            ret = client_sdo.connect(nodeId);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            nmt_mlaster.nodeGuardPollStart(nodeId, 3000);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = receive_pdo.setCobid((uint)0x180 + this.node_id);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = transmit_pdo.setup((uint)0x200 + this.node_id, this.output_mirror_values, 1);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = transmit_pdo.periodicTransmission(true);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = nmt_mlaster.nodeReset(node_id);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            Thread.Sleep(4000);

            ret = configureIoInputs();
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = configureIoOutputs();
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            uint canopenErrorCode;

            ret = client_sdo.objectWrite(0x100c, 0, (ushort)1000, out canopenErrorCode);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            ret = client_sdo.objectWrite(0x100d, 0, (byte)3, out canopenErrorCode);
            if (ret != CanOpenStatus.CANOPEN_OK)
            {
                return(ret);
            }

            return(ret);
        }