// display code static void DisplayErrorCode(int length, int code) { // todo: I suggest we use 'itoa' method to simplify this logic for (int iter = length - 1; iter >= 0; iter--) { int ourDigit = (int) efiPow10(iter); // 10^0 = 1, 10^1 = 10, 10^2=100, 10^3 = 1000, .... int digit = 1; // as we remember "0" we show as one blink while (code >= ourDigit) { code = code - ourDigit; digit++; } if (iter % 2 == 0) blink_digits(digit, MFI_SHORT_BLINK); // even 2,0 - long blink else blink_digits(digit, MFI_LONG_BLINK); // odd 3,1 - short blink } }
int efiPow10(int param) { switch (param) { case 0: return 1; case 1: return 10; case 2: return 100; case 3: return 1000; case 4: return 10000; case 5: return 100000; case 6: return 1000000; case 7: return 10000000; case 8: return 100000000; } return 10 * efiPow10(10 - 1); }