DelfiSpace / DelfiPQcore

0 stars 1 forks source link

[Bug] GET_METADATA doesnt work correctly #53

Open StarCycle opened 2 years ago

StarCycle commented 2 years ago

It seems that slot input to getMetaData() is either 0 or 1:

        case GET_METADATA:
            if(command.getPayloadSize() == 2) {
                if(command.getDataPayload()[COMMAND_DATA] == 1 || command.getDataPayload()[COMMAND_DATA] == 2) {
                    getMetadata(command.getDataPayload()[COMMAND_DATA] - 1);
                    if(payload_data[0] == NO_ERROR) {
                        print_metadata(&payload_data[COMMAND_DATA]);
                        Console::log("Metadata sent!");
                    }
                } else throw_error(SLOT_OUT_OF_RANGE);
            } else throw_error(PARAMETER_MISMATCH);
            break;

But getMetaData() accepts 1 or 2:

void SoftwareUpdateService::getMetadata(unsigned char slot_number) {
    payload_size = 1 + METADATA_SIZE ;
    payload_data[0] = NO_ERROR;

    if(!fram->ping()) return throw_error(NO_FRAM_ACCESS);
    if(slot_number == 1){
        fram->read(FRAM_METADATA_SLOT1_STATE, &payload_data[1], METADATA_SIZE);
    }else if(slot_number == 2){
        fram->read(FRAM_METADATA_SLOT2_STATE, &payload_data[1], METADATA_SIZE);
    }
}
StefanoSperetta commented 2 years ago

This makes it seem we can only update memory slot 1. Pre-launch testing logs show slot 1 was successfully tested but no log exists for slot 2.

StarCycle commented 2 years ago

Do we have to use getMetadata() when updating the memory? I think we can simply skip this function and use GetMissedCRC/GetMissedBlocks