Пример #1
0
void Cuart::startTransfer(void)
{
    Sii_wait			= 0;
    Sii_ndx				= 0;
    Sii_startbitsent	= false;
    Sii_stopbitsent		= true;
    Sii_TransferStarted = true;
    byteBufferSize = outputBuffer.size();
    Set_CD(1);

}
Пример #2
0
void Csio::startTransfer(void)
{
	Sii_wait			= 0;
	Sii_ndx				= 0;
	Sii_bit				= 0;
	Sii_startbitsent	= false;
	Sii_stopbitsent		= true;
	Sii_TransferStarted = true;
    byteBufferSize = baInput.size();
	Set_CD(1);
	
}
Пример #3
0
bool Cuart::run(void)
{

    if (outputBuffer.size()) {
        Set_RS(true);
    }

    if (RS && CS)	{ Set_SD( (sendBit()==Bit_1) ? true:false);	}

    if (CD) { Set_RR(1); Set_CD(1); }
    bitToByte();

    return true;
}
Пример #4
0
bool Csio::run(void)
{
    pSIOCONNECTOR_value = pSIOCONNECTOR->Get_values();

	// Read connector
    Set_SD( SIO_GET_PIN(S_SD) );
    Set_RR( SIO_GET_PIN(S_RR) );
    Set_RS( SIO_GET_PIN(S_RS) );
    Set_ER( SIO_GET_PIN(S_ER) );
//	Set_PRQ( SIO_GET_PIN(S_PRQ) );
	
    if (RS) {
        Set_CS(1);
        Set_CD(1);
//        if (mainwindow->dialoganalogic) mainwindow->dialoganalogic->setMarker(1);
    }

	Sii_bit = 0;
    if (ER && CD && RR)	{
//        if (mainwindow->dialoganalogic) mainwindow->dialoganalogic->setMarker(8);
        Sii_bit = transmit();


    }
	Set_RD( Sii_bit );	
	

    receive();

    SIO_SET_PIN(S_RD, Get_RD());
    SIO_SET_PIN(S_CS, Get_CS());
    SIO_SET_PIN(S_CD, Get_CD());
    //SIO_SET_PIN(SIO_PAK, 0);

    pSIOCONNECTOR_value = pSIOCONNECTOR->Get_values();
//    pTIMER->state++;
	return true;
}
Пример #5
0
Cuart::BIT_TYPE Cuart::sendBit(void)
{

    if (oldstate_in	== 0) oldstate_in = pTIMER->state;
    BYTE		data		= 0;
    int			deltastate	= 0;

    Sii_LfWait = 100;
    Sii_wait	= TICKS_BDS;
    if (! Sii_TransferStarted) return Bit_0;

    // If there are new data in baInput
    if (outputBuffer.size())
    {
        deltastate = pTIMER->state - oldstate_in;

        if (deltastate < Sii_wait) return(currentBit);

//        oldstate_in	= pTIMER->state;
        oldstate_in	+= deltastate;

        data	= outputBuffer.at(0);

        data = (data == 0x0A ? 0x0D : data);
        currentBit		= byteToBit(data);

        switch (currentBit)
        {
        case Bit_Start:	currentBit = Bit_1;
                        Sii_wait = TICKS_BDS;
                        return(currentBit);		// START BIT
        case Bit_0:
        case Bit_1:     AddLog(LOG_SIO,tr("Envoie bit = %1").arg(currentBit==Bit_1?1:0));
                        Sii_wait = TICKS_BDS;
                        return(currentBit);		// DATA BIT

        case Bit_Stop:	currentBit = Bit_0;
                        Sii_wait = TICKS_BDS;
                        if (data == 0x0D)
                        {
                            Sii_wait=Sii_LfWait*pTIMER->pPC->getfrequency()/1000;
                            AddLog(LOG_SIO,tr("LF found, wait %1 ms").arg(Sii_LfWait));
                        }
                        outputBuffer.remove(0,1);										// Next Char
                        return(currentBit);
        }
    }

    if (
        Sii_TransferStarted &&
        (outputBuffer.size() == 0) )
    {
        Sii_startbitsent	= false;
        Sii_stopbitsent		= true;
        Sii_TransferStarted	= false;
        Set_CD(0);
        AddLog(LOG_SIO,tr("END TRANSMISSION"));
    }

    return(Bit_0);
}
Пример #6
0
// Implement parity
bool Csio::transmit(void)
{

    if (oldstate_in	== 0) oldstate_in = pTIMER->state;
	BYTE		data		= 0;
    quint64			deltastate	= 0;

	Sii_LfWait = 100;
    Sii_wait	= TICKS_BDS;
	
// If there are new data in baInput
	if (! Sii_TransferStarted) return 0;

    //if ( Sii_ndx < baInput.size() )
    if (baInput.size())
	{
        deltastate = pTIMER->state - oldstate_in;

        if (deltastate < Sii_wait) return(currentBit);


        oldstate_in	= pTIMER->state;
//		oldstate_in	+= deltastate;

        data	= baInput.at(0);


        // Update Input proressbar
        emit valueChanged((int)((Sii_ndx*100)/byteBufferSize+.5));
        Refresh_Display = true;
		data = (data == 0x0A ? 0x0D : data);
        currentBit		= byteToBit(data);
		
        switch (currentBit)
		{
        case 3:	currentBit = 1;
                Sii_wait = TICKS_BDS;
                if (mainwindow->dialoganalogic) mainwindow->dialoganalogic->setMarker(1);
                return(currentBit);		// START BIT
		case 0:
        case 1:	AddLog(LOG_SIO,tr("Envoie bit = %1").arg(currentBit));
                Sii_wait = TICKS_BDS;
                if (mainwindow->dialoganalogic) mainwindow->dialoganalogic->setMarker(2);
                return(currentBit);		// DATA BIT

        case 2:	currentBit = 0;
                Sii_wait = TICKS_BDS;

                if (data == 0x0D)
                {
                    Sii_wait+=Sii_LfWait*pTIMER->pPC->getfrequency()/1000;
                    AddLog(LOG_SIO,tr("LF found, wait %1 ms").arg(Sii_LfWait));
                }

                baInput.remove(0,1);										// Next Char
                Sii_ndx++;
                if (mainwindow->dialoganalogic) mainwindow->dialoganalogic->setMarker(4);
                return(currentBit);
		}
	}

	if (
		Sii_TransferStarted &&
        (baInput.size() == 0) )
	{
		// End of file
//		Sii_ndx				= 0;
//		Set_Sii_bit(0);
        Sii_startbitsent	= false;
        Sii_stopbitsent		= true;
        Sii_TransferStarted	= false;
		Set_CD(0);
		clearInput();
		AddLog(LOG_SIO,tr("END TRANSMISSION"));
	}

	return(0);
}