diff --git a/include/link_handler.h b/include/link_handler.h index d390c3c..4f5d0bf 100644 --- a/include/link_handler.h +++ b/include/link_handler.h @@ -230,6 +230,7 @@ enum LinkState PACKET_EXCHANGE = 0x10, STANDARD_PACKET_EXCHANGE, + RUNNING_CODE_DELAY, SECONDARY_PACKET_EXCHANGE, PROCESS_PACKET, LOAD_NEXT_PACKET, @@ -299,7 +300,7 @@ struct LinkPacket LinkPacket() {}; LinkPacket(PayloadCommand cmd, byte arg1, byte arg2, u16 addr); - void loadSecondaryPayload(byte *payload, int payloadSize); + void loadSecondaryPayload(byte *payload, int paylHeoadSize); }; class LinkConnection diff --git a/source/link_handler.cpp b/source/link_handler.cpp index 9df9338..69cb5ed 100644 --- a/source/link_handler.cpp +++ b/source/link_handler.cpp @@ -204,6 +204,7 @@ void LinkConnection::exchangeBytes() case WRITE_CABLE_DATA_MODE_OFF: // Normal transfer :-) inData = linkSPI->transfer(outData); + PTGB_MGBA_INFO("in: %X, out: %X", inData, outData); break; case WRITE_CABLE_DATA_MODE_SRAM: // Pretend transfer, by loading the bytes from SRAM (where we stored them with writeData() in a previous transfer) @@ -585,7 +586,26 @@ void LinkConnection::handleStateLogic() currOutgoingPacket->recievedData[6], currOutgoingPacket->recievedData[7] ); - + exitState = RUNNING_CODE_DELAY; + nextOutData = 0xFF; + break; + default: + nextOutData = 0xFF; + break; + } + } + dataOutBuffer[subStateCounter] = inData; + break; + + case RUNNING_CODE_DELAY: + { + // We are currently processing something, we need to wait for that to finish. + if (inData == 0xFE) + { + nextOutData = 0xFF; + } + else + { if (currOutgoingPacket->secondaryPayloadData != nullptr) { // We get our response after the GB gets the secondary payload, send that first. @@ -595,13 +615,9 @@ void LinkConnection::handleStateLogic() { exitState = PROCESS_PACKET; } - default: - nextOutData = 0xFF; - break; } } - dataOutBuffer[subStateCounter] = inData; - break; + break; case SECONDARY_PACKET_EXCHANGE: { @@ -671,14 +687,6 @@ void LinkConnection::handleStateLogic() { // We need to wait until the packet is ready to be recieved. nextOutData = 0xFF; - if (((subStateCounter - SECONDARY_PAYLOAD_HEADER_SIZE - currOutgoingPacket->secondaryPayloadDataSize) & 0x0F) == 0) - { - PTGB_MGBA_INFO("Secondary waiting: sub=%d want=%X got=%X cmd=%d", - subStateCounter, - currOutgoingPacket->packetID, - inData, - currOutgoingPacket->command); - } } else { @@ -938,14 +946,6 @@ bool LinkConnection::processPacket() currIncomingPacket->recievedData[6], currIncomingPacket->recievedData[7]); - if (currIncomingPacket->recievedData[0] & 0x80) - { - PTGB_MGBA_WARN("Packet reports GB command failure: packet=%u cmd=%d firstData=%X", - currIncomingPacket->packetID, - currIncomingPacket->command, - currIncomingPacket->recievedData[0]); - } - if (checksum != dataOutBuffer[INP_CHECKSUM_INDEX]) { // The checksum has to match in order for it to be valid, if we've made it this far down the line. @@ -958,6 +958,15 @@ bool LinkConnection::processPacket() return false; } + if ((currIncomingPacket->command != CMD_ReadDataRequest) && (dataOutBuffer[INP_DATA_INDEX] & 0x80)) + { + PTGB_MGBA_INFO("Packet reports GB command failure: packet=%u cmd=%d encodedFirstData=%X decodedFirstData=%X", + currIncomingPacket->packetID, + currIncomingPacket->command, + dataOutBuffer[INP_DATA_INDEX], + currIncomingPacket->recievedData[0]); + } + if (currIncomingPacket->command != CMD_ReadDataRequest) { // These command types will echo the first 8 bytes of the packet back to verify they were recieved correctly. Make sure that's the case. @@ -973,7 +982,7 @@ bool LinkConnection::processPacket() currIncomingPacket->recievedData[7] != 0xFF) { currIncomingPacket->latestError = ECHO_MISMATCH; - PTGB_MGBA_WARN("Packet echo mismatch: packet=%u cmd=%d recv=%X %X %X %X %X %X %X %X", + PTGB_MGBA_INFO("Packet echo mismatch: packet=%u cmd=%d recv=%X %X %X %X %X %X %X %X", currIncomingPacket->packetID, currIncomingPacket->command, currIncomingPacket->recievedData[0], diff --git a/source/script_array.cpp b/source/script_array.cpp index 0867feb..66de159 100644 --- a/source/script_array.cpp +++ b/source/script_array.cpp @@ -804,15 +804,7 @@ bool run_conditional(int index) } boxRemovalPayload[arrayIndex] = 0xFF; arrayIndex++; - - - - byte removalArray[] = {2, 1, 0, 0xFF}; - globalLinkCable.LinkCommand_TransferPokemon(2, removalArray, 4, true); - - //globalLinkCable.skipPrint = false; - //globalLinkCable.pauseOnPacket = true; - //globalLinkCable.LinkCommand_TransferPokemon(0, boxRemovalPayload, arrayIndex); + globalLinkCable.LinkCommand_TransferPokemon(2, boxRemovalPayload, arrayIndex); } return true;