150 lines
4.1 KiB
C
150 lines
4.1 KiB
C
#include "mxkAb.h"
|
|
|
|
#include "mxkPacket.h"
|
|
#include "mxkTransport.h"
|
|
|
|
APP_BOOT AppBoot;
|
|
|
|
MXK_STATUS mxkGetAppBootInfo(void) {
|
|
unsigned char packet[16];
|
|
MXK_STATUS status;
|
|
|
|
if (mxkPacketReqGetAppBootInfo(packet) != MXK_STATUS_OK) {
|
|
amiDebugLog("Error mxkPacketReqGetAppBootInfo");
|
|
return MXK_STATUS_ERROR;
|
|
}
|
|
|
|
status = mxkSendPacket(packet);
|
|
if (status != MXK_STATUS_OK) {
|
|
amiDebugLog("Error mxkSendPacket GetAppBootInfo");
|
|
return status;
|
|
}
|
|
|
|
appboot_t appBoot;
|
|
for (int i = 0; i < sizeof appBoot; i += 16) {
|
|
status = mxkRecvPacket((unsigned char*)(&appBoot) + i);
|
|
if (status != MXK_STATUS_OK) {
|
|
amiDebugLog("Error mxkRecvPacket AppBootInfo");
|
|
return status;
|
|
}
|
|
}
|
|
|
|
amiCrc32RInit();
|
|
if (amiCrc32RCalc(sizeof appBoot - 4, (unsigned char*)&appBoot + 4, 0) != appBoot.crc) {
|
|
amiDebugLog("Error CRC AppBootInfo");
|
|
return MXK_STATUS_ERROR;
|
|
}
|
|
|
|
memcpy(&AppBoot.m_Cache, &appBoot, sizeof appBoot);
|
|
AppBoot.m_cacheDirty = false;
|
|
return MXK_STATUS_OK;
|
|
}
|
|
|
|
MXK_STATUS mxkAbSystemFlag(MXK_CACHE cache, unsigned char* systemFlag, unsigned char* err) {
|
|
if (systemFlag == NULL || (err == NULL)) return MXK_STATUS_INVALID_PARAM;
|
|
if (KEYCHIP_STATUS == 2) {
|
|
*err = KEYCHIP_ERROR;
|
|
return MXK_STATUS_ERROR;
|
|
}
|
|
|
|
MXK_STATUS status;
|
|
|
|
*err = 0;
|
|
if (cache == MXK_CACHE_USE) {
|
|
if (AppBoot.m_cacheDirty != true) goto LAB_00401d7b;
|
|
} else {
|
|
AppBoot.m_cacheDirty = true;
|
|
}
|
|
if (!AppBoot.m_useFlash) {
|
|
// TODO: N2
|
|
// if (HAS_N2 == true) {
|
|
// status = mxkGetKeychipIdFromN2();
|
|
// if (status == 0) goto LAB_00401d7b;
|
|
// mxkN2GetErrorCode(status);
|
|
// if (0 < LOG_EN_MXK) {
|
|
// log("mxkAbSystemFlag", 0x338, "Error mxkGetKeychipIdFromN2!!\n");
|
|
// }
|
|
// goto LAB_00401d64;
|
|
// }
|
|
status = mxkGetAppBootInfo();
|
|
} else {
|
|
status = MXK_STATUS_ERROR;
|
|
// TODO: This
|
|
// status = appboot_flash();
|
|
}
|
|
|
|
if (status == MXK_STATUS_OK) {
|
|
LAB_00401d7b:
|
|
if (AppBoot.m_Cache.format != 1) {
|
|
*systemFlag = 0;
|
|
return MXK_STATUS_OK;
|
|
}
|
|
*systemFlag = AppBoot.m_Cache.system_flag;
|
|
return MXK_STATUS_OK;
|
|
}
|
|
|
|
// LAB_00401d64:
|
|
KEYCHIP_ERROR = 2;
|
|
KEYCHIP_STATUS = 2;
|
|
*err = 2;
|
|
return MXK_STATUS_ERROR;
|
|
}
|
|
MXK_STATUS mxkAbGameId(MXK_CACHE cache, char* gameId, unsigned char* err) {
|
|
if (gameId == NULL || (err == NULL)) return MXK_STATUS_INVALID_PARAM;
|
|
if (KEYCHIP_STATUS == 2) {
|
|
*err = KEYCHIP_ERROR;
|
|
return MXK_STATUS_ERROR;
|
|
}
|
|
|
|
*err = 0;
|
|
if (cache == false) {
|
|
if (AppBoot.m_cacheDirty != true) goto LAB_00401c7f;
|
|
} else {
|
|
AppBoot.m_cacheDirty = true;
|
|
}
|
|
|
|
MXK_STATUS status = MXK_STATUS_ERROR;
|
|
if (!AppBoot.m_useFlash) {
|
|
// if (HAS_N2 == true) {
|
|
// status = mxkGetKeychipIdFromN2();
|
|
// if (status == 0) goto LAB_00401c7f;
|
|
// mxkN2GetErrorCode(status);
|
|
// if (0 < LOG_EN_MXK) {
|
|
// log("mxkAbGameId", 0x2f5, "Error mxkGetKeychipIdFromN2!!\n");
|
|
// KEYCHIP_ERROR = 2;
|
|
// KEYCHIP_STATUS = 2;
|
|
// *err = 2;
|
|
// return 1;
|
|
// }
|
|
// goto LAB_00401c6a;
|
|
// }
|
|
status = MXK_STATUS_ERROR;
|
|
// TODO: This
|
|
status = mxkGetAppBootInfo();
|
|
} else {
|
|
// status = appboot_flash();
|
|
}
|
|
|
|
if (status == MXK_STATUS_OK) {
|
|
LAB_00401c7f:
|
|
if (AppBoot.m_Cache.format != 1) {
|
|
gameId[0] = '_';
|
|
gameId[1] = '_';
|
|
gameId[2] = '_';
|
|
gameId[3] = '_';
|
|
return MXK_STATUS_OK;
|
|
}
|
|
if (!mxkValidString(AppBoot.m_Cache.game_id, 4)) {
|
|
*err = 55;
|
|
return MXK_STATUS_ERROR;
|
|
}
|
|
memcpy(gameId, AppBoot.m_Cache.game_id, 4);
|
|
return MXK_STATUS_OK;
|
|
}
|
|
LAB_00401c6a:
|
|
KEYCHIP_ERROR = 2;
|
|
KEYCHIP_STATUS = 2;
|
|
*err = 2;
|
|
return MXK_STATUS_ERROR;
|
|
}
|