Skip to content

Commit

Permalink
Merge pull request #449 from LedgerHQ/xch/api-level-parsing
Browse files Browse the repository at this point in the history
Improve SDK_API_LEVEL handling
  • Loading branch information
xchapron-ledger authored Jan 29, 2024
2 parents cd5ff04 + 3077a18 commit 037612d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 46 deletions.
19 changes: 5 additions & 14 deletions src/emulate.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,12 @@ int emulate(unsigned long syscall, unsigned long *parameters,
case SDK_BLUE_2_2_5:
retid = emulate_blue_2_2_5(syscall, parameters, ret, verbose);
break;
case SDK_API_LEVEL_1:
case SDK_API_LEVEL_3:
case SDK_API_LEVEL_5:
case SDK_API_LEVEL_7:
case SDK_API_LEVEL_8:
case SDK_API_LEVEL_9:
case SDK_API_LEVEL_10:
case SDK_API_LEVEL_11:
case SDK_API_LEVEL_12:
case SDK_API_LEVEL_13:
case SDK_API_LEVEL_14:
retid =
emulate_unified_sdk(syscall, parameters, ret, verbose, version, model);
break;
default:
if ((version >= SDK_API_LEVEL_1) && (version < SDK_COUNT)) {
retid = emulate_unified_sdk(syscall, parameters, ret, verbose, version,
model);
break;
}
errx(1, "Unsupported SDK version %u", version);
break;
}
Expand Down
42 changes: 11 additions & 31 deletions src/launcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -633,31 +633,15 @@ static int load_apps(int argc, char *argv[])

static sdk_version_t apilevelstr2sdkver(const char *api_level_arg)
{
if (strcmp("1", api_level_arg) == 0) {
return SDK_API_LEVEL_1;
} else if (strcmp("3", api_level_arg) == 0) {
return SDK_API_LEVEL_3;
} else if (strcmp("5", api_level_arg) == 0) {
return SDK_API_LEVEL_5;
} else if (strcmp("7", api_level_arg) == 0) {
return SDK_API_LEVEL_7;
} else if (strcmp("8", api_level_arg) == 0) {
return SDK_API_LEVEL_8;
} else if (strcmp("9", api_level_arg) == 0) {
return SDK_API_LEVEL_9;
} else if (strcmp("10", api_level_arg) == 0) {
return SDK_API_LEVEL_10;
} else if (strcmp("11", api_level_arg) == 0) {
return SDK_API_LEVEL_11;
} else if (strcmp("12", api_level_arg) == 0) {
return SDK_API_LEVEL_12;
} else if (strcmp("13", api_level_arg) == 0) {
return SDK_API_LEVEL_13;
} else if (strcmp("14", api_level_arg) == 0) {
return SDK_API_LEVEL_14;
} else {
int api_level = atoi(api_level_arg);
int _sdk_version = api_level - 1 + SDK_API_LEVEL_1;

if ((api_level <= 0) || (_sdk_version >= SDK_COUNT)) {
warnx("Invalid api level (\"%s\")", api_level_arg);
return SDK_COUNT;
}

return _sdk_version;
}

static sdk_version_t sdkstr2sdkver(const char *sdk_arg)
Expand Down Expand Up @@ -765,15 +749,16 @@ int main(int argc, char *argv[])
if (sdk_version == SDK_COUNT) {
errx(1, "invalid SDK api_level: %s", api_level);
}
fprintf(stderr, "[*] using API_LEVEL version %s on %s\n", api_level,
model_str);
} else {
sdk_version = sdkstr2sdkver(sdk);
if (sdk_version == SDK_COUNT) {
errx(1, "invalid SDK version: %s", sdk);
}
fprintf(stderr, "[*] using SDK version %s on %s\n", sdk, model_str);
}

fprintf(stderr, "[*] using SDK version %u on %s\n", sdk_version, model_str);

switch (hw_model) {
case MODEL_NANO_S:
if (sdk_version != SDK_NANO_S_1_5 && sdk_version != SDK_NANO_S_1_6 &&
Expand Down Expand Up @@ -825,12 +810,7 @@ int main(int argc, char *argv[])
if (sdk_version == SDK_NANO_S_2_0 || sdk_version == SDK_NANO_S_2_1 ||
sdk_version == SDK_NANO_X_2_0 || sdk_version == SDK_NANO_X_2_0_2 ||
sdk_version == SDK_NANO_SP_1_0 || sdk_version == SDK_NANO_SP_1_0_3 ||
sdk_version == SDK_API_LEVEL_1 || sdk_version == SDK_API_LEVEL_3 ||
sdk_version == SDK_API_LEVEL_5 || sdk_version == SDK_API_LEVEL_7 ||
sdk_version == SDK_API_LEVEL_8 || sdk_version == SDK_API_LEVEL_9 ||
sdk_version == SDK_API_LEVEL_10 || sdk_version == SDK_API_LEVEL_11 ||
sdk_version == SDK_API_LEVEL_12 || sdk_version == SDK_API_LEVEL_13 ||
sdk_version == SDK_API_LEVEL_14) {
((sdk_version >= SDK_API_LEVEL_1) && (sdk_version < SDK_COUNT))) {
if (load_cxlib(cxlib_path) != 0) {
return 1;
}
Expand Down
6 changes: 5 additions & 1 deletion src/sdk.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ typedef enum {
SDK_BLUE_2_2_5,
SDK_NANO_SP_1_0,
SDK_NANO_SP_1_0_3,
// Unified SDK versions only below, do not add unrelated versions
// Unified SDK versions only below, do not add unrelated versions.
// Make sure to add all API_LEVEL as apilevelstr2sdkver() relies on it
// SDK_API_LEVEL_START
SDK_API_LEVEL_1,
SDK_API_LEVEL_2,
SDK_API_LEVEL_3,
SDK_API_LEVEL_4,
SDK_API_LEVEL_5,
SDK_API_LEVEL_6,
SDK_API_LEVEL_7,
SDK_API_LEVEL_8,
SDK_API_LEVEL_9,
Expand Down

0 comments on commit 037612d

Please sign in to comment.