// TODO: fix scope so only gui things can start it void LoggerImpl::StartLogger(const NMEAInfo &gps_info, const LoggerSettings &settings, const TCHAR *asset_number, const Declaration &decl) { if (!settings.logger_id.empty()) asset_number = settings.logger_id.c_str(); // chars must be legal in file names char logger_id[4]; unsigned asset_length = _tcslen(asset_number); for (unsigned i = 0; i < 3; i++) logger_id[i] = i < asset_length && IsAlphaNumericASCII(asset_number[i]) ? asset_number[i] : _T('A'); logger_id[3] = _T('\0'); if (!StartLogger(gps_info, settings, logger_id)) return; simulator = gps_info.location_available && !gps_info.gps.real; writer->WriteHeader(gps_info.date_time_utc, decl.pilot_name, decl.aircraft_type, decl.aircraft_registration, decl.competition_id, logger_id, GetGPSDeviceName(), simulator); if (decl.Size()) { BrokenDateTime FirstDateTime = !pre_takeoff_buffer.empty() ? pre_takeoff_buffer.peek().date_time_utc : gps_info.date_time_utc; writer->StartDeclaration(FirstDateTime, decl.Size()); for (unsigned i = 0; i< decl.Size(); ++i) writer->AddDeclaration(decl.GetLocation(i), decl.GetName(i)); writer->EndDeclaration(); } }
static bool CheckThreeAlphaNumeric(const char *src) { return IsAlphaNumericASCII(src[0]) && IsAlphaNumericASCII(src[1]) && IsAlphaNumericASCII(src[2]); }
inline void TTYKeyboard::HandleInputByte(char ch) { switch (ch) { case 0x03: /* user has pressed Ctrl-C */ input_state = InputState::NONE; queue.Push(Event::CLOSE); return; case ' ': input_state = InputState::NONE; queue.PushKeyPress(ch); return; case 0x0d: input_state = InputState::NONE; queue.PushKeyPress(KEY_RETURN); return; case 0x1b: if (input_state == InputState::ESCAPE) queue.PushKeyPress(KEY_ESCAPE); else input_state = InputState::ESCAPE; return; } switch (input_state) { case InputState::NONE: break; case InputState::ESCAPE: if (ch == '[') input_state = InputState::ESCAPE_BRACKET; else input_state = InputState::NONE; return; case InputState::ESCAPE_BRACKET: input_state = InputState::NONE; switch (ch) { case 'A': queue.PushKeyPress(KEY_UP); break; case 'B': queue.PushKeyPress(KEY_DOWN); break; case 'C': queue.PushKeyPress(KEY_RIGHT); break; case 'D': queue.PushKeyPress(KEY_LEFT); break; case '[': input_state = InputState::ESCAPE_BRACKET2; break; default: if (ch >= '0' && ch <= '9') { input_state = InputState::ESCAPE_NUMBER; input_number = ch - '0'; } else input_state = InputState::NONE; } return; case InputState::ESCAPE_BRACKET2: switch (ch) { case 'A': queue.PushKeyPress(KEY_F1); break; case 'B': queue.PushKeyPress(KEY_F2); break; case 'C': queue.PushKeyPress(KEY_F3); break; case 'D': queue.PushKeyPress(KEY_F4); break; case 'E': queue.PushKeyPress(KEY_F5); break; default: input_state = InputState::NONE; } return; case InputState::ESCAPE_NUMBER: if (IsDigitASCII(ch)) input_number = input_number * 10 + ch - '0'; else { input_state = InputState::NONE; if (ch == '~') { if (input_number >= 11 && input_number <= 16) queue.PushKeyPress(KEY_F1 + input_number - 11); else if (input_number >= 17 && input_number <= 21) queue.PushKeyPress(KEY_F6 + input_number - 17); else if (input_number >= 23 && input_number <= 24) queue.PushKeyPress(KEY_F11 + input_number - 23); } } return; } if (IsAlphaNumericASCII(ch)) { queue.PushKeyPress(ch); return; } }