Пример #1
0
void Connector::startWrite(qint8 start, qint8 num, QByteArray data)
{
    qDebug()<<"Connector::startWrite";
    QByteArray toWrite(writeOp, 10);
    toWrite[0] = toWrite[0] + data.size();
    toWrite[8] = start;
    toWrite[9] = num;
    toWrite.append(data);
    write(toWrite);
    waitForBytesWritten(500);
    emit writeOK();
}
Пример #2
0
void MainWindow::dataToPLC()
{
    SerialCommunication link;
    link.setVars(vars);
    CommunicationDialog* dialog = new CommunicationDialog;
    link.setData(lcd->getData());
    link.setFont(font);
    dialog->setMessage("Поиск устройства");
    connect(&link,SIGNAL(searchStep(float)),dialog,SLOT(updatePercent(float)));
    connect(&link,SIGNAL(searchError(QString)),dialog,SLOT(setMessage(QString)));
    connect(&link,SIGNAL(searchOK(QString)),dialog,SLOT(setMessage(QString)));
    connect(&link,SIGNAL(writeStep(float)),dialog,SLOT(updatePercent(float)));
    connect(&link,SIGNAL(writeError(QString)),dialog,SLOT(setMessage(QString)));
    connect(&link,SIGNAL(writeOK(QString)),dialog,SLOT(setMessage(QString)));
    link.searchController();
    dialog->exec();
    delete dialog;
}
Tick BridgeClassicToAMBATLM2<BUSWIDTH>::recvAtomic(PacketPtr pkt)
{
    tlm::tlm_generic_payload trans;

//    std::cout << "In " << sc_core::sc_object::name() << " at time " << sc_time_stamp() << " request from GEM5 with address=0x" << hex << pkt->getAddr() << dec << " size=" << pkt->getSize() << std::endl;
    if (pkt->memInhibitAsserted()) {
        return 0;
    }
    if (pkt->cmd == MemCmd::SwapReq)
    {
    	panic("SwapReq not supported\n");
    }
    else if (pkt->isRead())
    {
        assert(!pkt->isWrite());
        if (pkt->isLLSC()) {
            trackLoadLocked(pkt);
        }

//        if (pkt->isLLSC())
//        {
//        	panic("isLLSC not yet supported for atomic\n");
//        }
   		trans.set_read();
    	trans.set_address(pkt->getAddr());
    	trans.set_data_length(pkt->getSize());
    	trans.set_data_ptr(pkt->getPtr<unsigned char>());
    	debug_port->transport_dbg(static_cast<tlm::tlm_generic_payload &>(trans));
    	unsigned char * data = pkt->getPtr<unsigned char>();
//		std::cout << "In " << sc_core::sc_object::name() << " at time " << sc_time_stamp() << " sending a READ response to GEM5 with address=0x" << hex << pkt->getAddr() << dec << " size=" << pkt->getSize();
//		std::cout << hex << " and data= [";
//		for(unsigned j=0;j<pkt->getSize(); j++)
//			std::cout << "0x" << uint32_t(data[j]) << ",";
//		std::cout << "]" << dec << std::endl;

    }
    else if (pkt->isWrite())
    {
//    	std::cout << "isWrite " << std::endl;
    	if (writeOK(pkt))
    	{
			trans.set_write();
			/*if (writeOK(pkt)) {
				if (pmemAddr)
					memcpy(hostAddr, pkt->getPtr<uint8_t>(), pkt->getSize());
				assert(!pkt->req->isInstFetch());
			}*/
			trans.set_address(pkt->getAddr());
			trans.set_data_length(pkt->getSize());
			trans.set_data_ptr(pkt->getPtr<unsigned char>());
			debug_port->transport_dbg(static_cast<tlm::tlm_generic_payload &>(trans));
    	}
    	else
        	std::cout << "recvAtomic !writeOK " << hex << pkt->getAddr() << dec << std::endl;
    }
    else if (pkt->isInvalidate())
    {
        //upgrade or invalidate
        if (pkt->needsResponse())
        {
            pkt->makeAtomicResponse();
        }
    }
    else
    {
        panic("unimplemented");
    }

    if (pkt->needsResponse())
    {
        pkt->makeAtomicResponse();
    }
    return 1000;
}