Các bạn IT cho mình hỏi về đoạn code sau nhé (mình bên điện tử nên chỉ hiểu được tầm 40% mục đính của đoạn code sau) vì vậy mình cũng chưa biết cách để ứng dụng nó vào bài tập của mình. Đây là source code của 1 công ty điện tử, mình muốn dựa vào nó để phát triển tiếp ứng dụng của mình.
Đại loại là như thế này: Mình có 1 số dữ liệu, dữ liệu này được lưu vào vùng nhớ của 1 con chip. Nhiệm vụ của mình là đọc dữ liệu đó. Vùng nhớ này gọi là FIFO (First In First Out) nó cũng giống như EEPROM nhưng khả năng truy xuất nhanh hơn (nói thật mình cũng chưa hiểu hết về nó.)
Đây là đoạn code mà mình muốn hỏi:
Gen2ReaderInterface::Gen2Result SL900AMainDialog::coolLogAccessFIFO ( CoolLogError &error, unsigned char subcommand, QByteArray writePayload, QByteArray &readPayload )
{
itsExecutedCommand = CMD_ACCESS_FIFO;
error = CoolLogError::CoolLogNoError;
itsRequest.clear();
itsAnswer.clear();
int appendedBytes = writePayload.length();
unsigned int numBytesAvail = 0;
switch (subcommand)
{
case 0xA0:
itsRequest[0] = 0xA0 + appendedBytes;
itsRequest.append(writePayload);
itsGen2Res = executeCommand(CMD_ACCESS_FIFO , (24 + appendedBytes * 8), itsRequest, 1, itsAnswer);
break;
case 0x80:
//read Bytes Available
itsRequest.append((char)0xC0);
itsGen2Res = executeCommand(CMD_ACCESS_FIFO , 24 , itsRequest, 9, readPayload);
numBytesAvail = (readPayload[0] & 0x0F);
//perform read
itsRequest[0] = 0x80 | (numBytesAvail & 0x0F);
itsGen2Res = executeCommand(CMD_ACCESS_FIFO , 24 , itsRequest, (1 + numBytesAvail * 8) , readPayload);
break;
case 0xC0: // Status
itsRequest.append(subcommand);
itsGen2Res = executeCommand(CMD_ACCESS_FIFO , 24 , itsRequest, 9, readPayload);
break;
}
if (itsGen2Res != Gen2ReaderInterface::Gen2_OK)
error = static_cast<CoolLogError>(static_cast<unsigned char>(itsAnswer[0]));
return itsGen2Res;
}
Ở đây theo mình hiểu là: hàm có các biến truyền vào error, subcommand, writePayload and readPayload. Mình chỉ tập trung vào phần readPayload thôi, vì dùng để đọc dữ liệu.
Tương ứng với readPayload thì subcommand = 0x80.
Tuy nhiên khi mình đọc file hướng dẫn đối với con chip dùng để giao tiếp dữ liệu thì
subcommand = 0x80 tương đương với việc đọc 0 byte từ FIFO. Vì thế khi mình thử dùng lệnh:
itsGen2Res = itsParent->coolLogAccessFIFO(itsCoolLogError, 0x80, 0, readPayload);
thì không thấy kết quả gì. Các bạn IT cho mình hỏi là mình nên hiểu đoạn code trên như thế nào cho đúng. Xin cảm ơn.