void MenuDisplayItem() // this method could blow up the stack! need to update { TerminalSetCursorPosition(5,1); TerminalSendString(MenuItems[HWselection]); /* switch(selection){ case MNU_PATTERN: TerminalSendString("pattern "); break; case MNU_SPEED: TerminalSendString("speed "); break; case MNU_HOURS: TerminalSendString("hours "); break; case MNU_AMPM: TerminalSendString("AM or PM "); break; case MNU_MINS: TerminalSendString("mins "); break; case MNU_SECS: TerminalSendString("secs "); break; case MNU_HRMODE: TerminalSendString("24 or 12 hr"); break; case MNU_YEAR: TerminalSendString("year "); break; case MNU_MONTH: TerminalSendString("month "); break; case MNU_DAY: TerminalSendString("day of week"); break; case MNU_DATE: TerminalSendString("date "); break; }*/ }
uint16_t Sniff14443AAppProcess(uint8_t* Buffer, uint16_t BitCount){ switch (Sniff14443CurrentCommand){ case Sniff14443_Do_Nothing: { return 0; } case Sniff14443_Autocalibrate: { switch (SniffState) { case STATE_REQA: LED_PORT.OUTCLR = LED_RED; // If received Reader REQA or WUPA if (TrafficSource == TRAFFIC_READER && (Buffer[0] == 0x26 || Buffer[0] == 0x52)) { SniffState = STATE_ATQA; } else { // Stay in this state, do noting } break; case STATE_ATQA: // ATQA: P RRRR XXXX P XXRX XXXX if (TrafficSource == TRAFFIC_CARD && BitCount == 2 * 9 && (Buffer[0] & 0x20) == 0x00 && // Bit6 RFU shall be 0 (Buffer[1] & 0xE0) == 0x00 && // bit13-16 RFU shall be 0 (Buffer[2] & 0x01) == 0x00 && checkParityBits(Buffer, BitCount)) { // Assume this is a good ATQA SniffState = STATE_ANTICOLLI; } else { // If not ATQA, but REQA, then stay on this state, // Reset to REQA, save the counter and reset the counter if (TrafficSource == TRAFFIC_READER && (Buffer[0] == 0x26 || Buffer[0] == 0x52)) { } else { // If not ATQA and not REQA then reset to REQA reset2REQA(); } } break; case STATE_ANTICOLLI: // SEL: 93/95/97 if (TrafficSource == TRAFFIC_READER && BitCount == 2 * 8 && (Buffer[0] & 0xf0) == 0x90 && (Buffer[0] & 0x09) == 0x01) { SniffState = STATE_UID; } else { reset2REQA(); } break; case STATE_UID: if (TrafficSource == TRAFFIC_CARD && BitCount == 5 * 9 && checkParityBits(Buffer, BitCount)) { SniffState = STATE_SELECT; } else { reset2REQA(); } break; case STATE_SELECT: // SELECT: 9 bytes, SEL = 93/95/97, NVB=70 if (TrafficSource == TRAFFIC_READER && BitCount == 9 * 8 && (Buffer[0] & 0xf0) == 0x90 && (Buffer[0] & 0x09) == 0x01 && Buffer[1] == 0x70) { SniffState = STATE_SAK; } else { // Not valid, reset reset2REQA(); } break; case STATE_SAK: // SAK: 1Byte SAK + CRC if (TrafficSource == TRAFFIC_CARD && BitCount == 3 * 9 && checkParityBits(Buffer, BitCount)) { if ((Buffer[0] & 0x04) == 0x00) { // UID complete, success SELECTED, // Mark the current threshold as ok and finish // reset SniffState = STATE_REQA; LED_PORT.OUTSET = LED_RED; Thresholds[(tmp_th - CODEC_THRESHOLD_CALIBRATE_MIN) / CODEC_THRESHOLD_CALIBRATE_STEPS] += 1; CommandLinePendingTaskFinished(COMMAND_INFO_OK_WITH_TEXT_ID, NULL); // Send this threshold to terminal char tmpBuf[10]; snprintf(tmpBuf, 10, "%4" PRIu16 ": ", tmp_th); TerminalSendString(tmpBuf); // Save value to EEPROM SETTING_UPDATE(GlobalSettings.ActiveSettingPtr->ReaderThreshold); Sniff14443AAppReset(); } else { // UID not complete, goto ANTICOLLI SniffState = STATE_ANTICOLLI; } } else { reset2REQA(); } break; default: break; } break; } default: return 0; } return 0; }