Ejemplo n.º 1
0
bool plaPlayList::generatePLAFile()
{
    try {
        // 5. generate playlist
        qint32 fileCount = (qint32)m_lstSrcFiles.count();
        if (playlistName.isEmpty())
            playlistName = "playlist.pla";
        if (!playlistName.endsWith(".pla"))
            playlistName.append(".pla");
        QFile file(playlistDestination + "/" + playlistName);
        file.open(QIODevice::Truncate | QIODevice::WriteOnly);
        if (!file.isOpen()) {
            qDebug() << "file does not open?";
            return false;
        }
        QDataStream out(&file);
        out.setByteOrder(QDataStream::BigEndian);

        // Header info: qint32 (4 bytes) + iriver_text (14 bytes) = 18 bytes -> rest 494 bytes = 0
        out << fileCount;
        out.writeRawData(iriverText.toLatin1(), iriverText.size()); // tolatin1 is serialized as 'length,string' ->use writeRawData
        int i = 494;
        while (0 < i) {
            out << (qint8)0;
            --i;
        }

        // File Info
        QString outputFile = "";
        qint16 nameIndex = 0;
        foreach (QString song, m_lstSrcFiles) {
            if (song.length()>=512) {
                qDebug() << "Song " << song << " file path was too long, skipping it";
                continue;
            }
            if(!getFileName(song, &outputFile, &nameIndex)) {
                qDebug() << "Song " << song << " path and index extraction failed, PLA is not usable!";
                errorSignaling("ERROR", QString("Song '%1' path and index extraction failed, PLA is not usable!").arg(song));
                return false;
            }
            qDebug() << " song: " << outputFile;
            out << nameIndex;
            out << (qint8)0; // ugly workaround! put '00' byte before '\' mark which is missing from outputFile string (for some reason)?
            out.writeRawData((const char*) outputFile.utf16(), outputFile.size() * 2);
            for (int i=(3+outputFile.size()*2); i<512; i++)
                out << (qint8)0;
        }
        qDebug() << "plaPlayList::generatePLAFile - data written, playlist size: " << file.size() << ", should be 512 + " << m_lstSrcFiles.count() << "*512 = " << 512 + m_lstSrcFiles.count() * 512;
        file.close();
        OnReady();
        return true;
    }
    catch (...) {
        qDebug() << "plaPlayList::generatePLAFile - Error while creating playlist";
        return false;
    }
}
Ejemplo n.º 2
0
bool plaPlayList::doWork()
{
    try {
        //
        // work list
        // 1. generate destination files list (correct path information)
        // 2. check existence of destination files and filter out already existing ones
        // 3. check that we have enough space for missing files
        // 4. copy missing files to destination
        // 5. generate playlist and copy it to 'playlist destination'
        //
        if (checkDestinationFilesAvailability())
        OnReady();
        return true;
    }
    catch (...) {
        qDebug() << "plaPlayList::generatePLAFile - Error while creating playlist";
        return false;
    }
}
Ejemplo n.º 3
0
bool CEC_LogicalDevice::ProcessStateMachine(bool* success)
{
	unsigned char buffer[1];
	bool wait = false;

	switch (_primaryState)
	{
	case CEC_ALLOCATE_LOGICAL_ADDRESS:
		switch (_secondaryState)
		{
		case CEC_XMIT_POLLING_MESSAGE:
			// Section 6.1.3 specifies that <Polling Message> while allocating a Logical Address
			// will have the same initiator and destination address
			buffer[0] = MAKE_ADDRESS(_validLogicalAddresses[_deviceType][_tertiaryState], _validLogicalAddresses[_deviceType][_tertiaryState]);
			ClearTransmitBuffer();
			Transmit(buffer, 1);

			_secondaryState = CEC_RCV_POLLING_MESSAGE;
			wait = true;
			break;

		case CEC_RCV_POLLING_MESSAGE:
			if (success)
			{
				if (*success)
				{
					// Someone is there, try the next
					_tertiaryState++;
					if (_validLogicalAddresses[_deviceType][_tertiaryState] != CLA_UNREGISTERED)
						_secondaryState = CEC_XMIT_POLLING_MESSAGE;
					else
					{
						_logicalAddress = CLA_UNREGISTERED;
						DbgPrint("Logical address assigned: %d\r\n", _logicalAddress);
                        DbgPrint("Physical addresss used: %d\r\n", _physicalAddress);
						_primaryState = CEC_READY;
					}
				}
				else
				{
					// We hereby claim this as our logical address!
					_logicalAddress = _validLogicalAddresses[_deviceType][_tertiaryState];
                    SetAddress(_logicalAddress);
					DbgPrint("Logical address assigned: %d\n", _logicalAddress);
                    DbgPrint("Physical addresss used: %d\r\n", _physicalAddress);
					_primaryState = CEC_READY;
                    set_led(2, true);
				}
			}
			else
				wait = true;
			break;
		}
		break;

	case CEC_READY:
		_primaryState = CEC_IDLE;
		OnReady();
		wait = true;
		break;

	case CEC_IDLE:
		wait = true;
		break;
	}

	return wait;
}