本文整理汇总了C++中OperationEnvironment类的典型用法代码示例。如果您正苦于以下问题:C++ OperationEnvironment类的具体用法?C++ OperationEnvironment怎么用?C++ OperationEnvironment使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了OperationEnvironment类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: request
int
Net::DownloadToBuffer(Session &session, const char *url,
void *_buffer, size_t max_length,
OperationEnvironment &env)
{
Request request(session, url, 10000);
if (!request.Send(10000))
return -1;
int64_t total = request.GetLength();
if (total >= 0)
env.SetProgressRange(total);
total = 0;
uint8_t *buffer = (uint8_t *)_buffer, *p = buffer, *end = buffer + max_length;
while (p != end) {
if (env.IsCancelled())
return -1;
ssize_t nbytes = request.Read(p, end - p, 5000);
if (nbytes < 0)
return -1;
if (nbytes == 0)
break;
p += nbytes;
total += nbytes;
env.SetProgressPosition(total);
}
return p - buffer;
}
示例2: assert
bool
DeviceDescriptor::ReadFlightList(RecordedFlightList &flight_list,
OperationEnvironment &env)
{
assert(borrowed);
assert(port != nullptr);
assert(driver != nullptr);
assert(device != nullptr);
StaticString<60> text;
if (driver->HasPassThrough() && second_device != nullptr) {
text.Format(_T("%s: %s."), _("Reading flight list"),
second_driver->display_name);
env.SetText(text);
device->EnablePassThrough(env);
return second_device->ReadFlightList(flight_list, env);
} else {
text.Format(_T("%s: %s."), _("Reading flight list"), driver->display_name);
env.SetText(text);
return device->ReadFlightList(flight_list, env);
}
}
示例3: ReadFlightListInner
static bool
ReadFlightListInner(Port &port,
RecordedFlightList &flight_list,
OperationEnvironment &env)
{
env.SetProgressRange(10);
if (!Volkslogger::ConnectAndFlush(port, env, 20000))
return false;
env.SetProgressPosition(3);
uint8_t dirbuffer[VLAPI_LOG_MEMSIZE];
int data_length = Volkslogger::ReadFlightList(port, env,
dirbuffer, sizeof(dirbuffer));
if (data_length <= 0)
return data_length == 0;
std::vector<DIRENTRY> directory;
if (!conv_dir(directory, dirbuffer, data_length))
return false;
if (directory.empty())
return true;
env.SetProgressPosition(8);
if (!ConvertDirectoryToRecordedFlightList(directory, flight_list))
return false;
env.SetProgressPosition(10);
return true;
}
示例4: ParseAirfieldDetails
/**
* Parses the data provided by the airfield details file handle
*/
static void
ParseAirfieldDetails(Waypoints &way_points, TLineReader &reader,
OperationEnvironment &operation)
{
tstring details;
std::vector<tstring> files_external, files_embed;
TCHAR name[201];
const TCHAR *filename;
name[0] = 0;
bool in_details = false;
int i;
const long filesize = std::max(reader.GetSize(), 1l);
operation.SetProgressRange(100);
TCHAR *line;
while ((line = reader.ReadLine()) != NULL) {
if (line[0] == _T('[')) { // Look for start
if (in_details)
SetAirfieldDetails(way_points, name, details, files_external,
files_embed);
details.clear();
files_external.clear();
files_embed.clear();
// extract name
for (i = 1; i < 201; i++) {
if (line[i] == _T(']'))
break;
name[i - 1] = line[i];
}
name[i - 1] = 0;
in_details = true;
operation.SetProgressPosition(reader.Tell() * 100 / filesize);
} else if ((filename =
StringAfterPrefixCI(line, _T("image="))) != NULL) {
files_embed.emplace_back(filename);
} else if ((filename =
StringAfterPrefixCI(line, _T("file="))) != NULL) {
#ifdef ANDROID
files_external.emplace_back(filename);
#endif
} else {
// append text to details string
if (!StringIsEmpty(line)) {
details += line;
details += _T('\n');
}
}
}
if (in_details)
SetAirfieldDetails(way_points, name, details, files_external, files_embed);
}
示例5: while
bool
Volkslogger::WriteBulk(Port &port, OperationEnvironment &env,
const void *buffer, unsigned length)
{
const unsigned delay = 1;
env.SetProgressRange(length);
uint16_t crc16 = 0;
const uint8_t *p = (const uint8_t *)buffer, *end = p + length;
while (p < end) {
unsigned n = end - p;
if (n > 400)
n = 400;
n = port.Write(p, n);
if (n == 0)
return false;
crc16 = UpdateCRC16CCITT(p, n, crc16);
p += n;
env.SetProgressPosition(p - (const uint8_t *)buffer);
/* throttle sending a bit, or the Volkslogger's receive buffer
will overrun */
env.Sleep(delay * 100);
}
return port.Write(crc16 >> 8) && port.Write(crc16 & 0xff);
}
示例6: flarm
bool
DeviceDescriptor::Declare(const struct Declaration &declaration,
const Waypoint *home,
OperationEnvironment &env)
{
if (port == NULL)
return false;
SetBusy(true);
StaticString<60> text;
text.Format(_T("%s: %s."), _("Sending declaration"), driver->display_name);
env.SetText(text);
port->StopRxThread();
bool result = device != NULL && device->Declare(declaration, home, env);
if (device_blackboard->IsFLARM(index) && !IsDriver(_T("FLARM"))) {
text.Format(_T("%s: FLARM."), _("Sending declaration"));
env.SetText(text);
FlarmDevice flarm(*port);
result = flarm.Declare(declaration, home, env) || result;
}
port->StartRxThread();
SetBusy(false);
return result;
}
示例7: Run
virtual void Run(OperationEnvironment &env) {
env.SetText(_T("Working..."));
env.SetProgressRange(30);
for (unsigned i = 0; i < 30 && !env.IsCancelled(); ++i) {
env.SetProgressPosition(i);
env.Sleep(500);
}
}
示例8: GetState
bool
Port::WaitConnected(OperationEnvironment &env)
{
while (GetState() == PortState::LIMBO && !env.IsCancelled())
env.Sleep(200);
return GetState() == PortState::READY;
}
示例9: SendSYN
void
LX::CommandModeQuick(Port &port, OperationEnvironment &env)
{
SendSYN(port);
env.Sleep(std::chrono::milliseconds(500));
SendSYN(port);
env.Sleep(std::chrono::milliseconds(500));
SendSYN(port);
env.Sleep(std::chrono::milliseconds(500));
}
示例10:
void
LX::CommandModeQuick(Port &port, OperationEnvironment &env)
{
port.Write(SYN);
env.Sleep(500);
port.Write(SYN);
env.Sleep(500);
port.Write(SYN);
env.Sleep(500);
}
示例11: SendSYN
void
LX::CommandModeQuick(Port &port, OperationEnvironment &env)
{
SendSYN(port);
env.Sleep(500);
SendSYN(port);
env.Sleep(500);
SendSYN(port);
env.Sleep(500);
}
示例12: DetectFileType
bool
AirspaceParser::Parse(TLineReader &reader, OperationEnvironment &operation)
{
bool ignore = false;
// Create and init ProgressDialog
operation.SetProgressRange(1024);
const long file_size = reader.GetSize();
TempAirspaceType temp_area;
AirspaceFileType filetype = AFT_UNKNOWN;
TCHAR *line;
// Iterate through the lines
for (unsigned line_num = 1; (line = reader.ReadLine()) != NULL; line_num++) {
// Skip empty line
if (StringIsEmpty(line))
continue;
if (filetype == AFT_UNKNOWN) {
filetype = DetectFileType(line);
if (filetype == AFT_UNKNOWN)
continue;
}
// Parse the line
if (filetype == AFT_OPENAIR)
if (!ParseLine(airspaces, line, temp_area) &&
!ShowParseWarning(line_num, line, operation))
return false;
if (filetype == AFT_TNP)
if (!ParseLineTNP(airspaces, line, temp_area, ignore) &&
!ShowParseWarning(line_num, line, operation))
return false;
// Update the ProgressDialog
if ((line_num & 0xff) == 0)
operation.SetProgressPosition(reader.Tell() * 1024 / file_size);
}
if (filetype == AFT_UNKNOWN) {
operation.SetErrorMessage(_("Unknown airspace filetype"));
return false;
}
// Process final area (if any)
if (!temp_area.points.empty())
temp_area.AddPolygon(airspaces);
return true;
}
示例13: fos
bool
FlarmDevice::DownloadFlight(Path path, OperationEnvironment &env)
{
FileOutputStream fos(path);
BufferedOutputStream os(fos);
if (env.IsCancelled())
return false;
env.SetProgressRange(100);
while (true) {
// Create header for getting IGC file data
FLARM::FrameHeader header = PrepareFrameHeader(FLARM::MT_GETIGCDATA);
// Send request
if (!SendStartByte() ||
!SendFrameHeader(header, env, 1000) ||
env.IsCancelled())
return false;
// Wait for an answer and save the payload for further processing
AllocatedArray<uint8_t> data;
uint16_t length;
bool ack = WaitForACKOrNACK(header.GetSequenceNumber(), data,
length, env, 10000) == FLARM::MT_ACK;
// If no ACK was received
if (!ack || length <= 3 || env.IsCancelled())
return false;
length -= 3;
// Read progress (in percent)
uint8_t progress = *(data.begin() + 2);
env.SetProgressPosition(std::min((unsigned)progress, 100u));
const char *last_char = (const char *)data.end() - 1;
bool is_last_packet = (*last_char == 0x1A);
if (is_last_packet)
length--;
// Read IGC data
const char *igc_data = (const char *)data.begin() + 3;
os.Write(igc_data, length);
if (is_last_packet)
break;
}
os.Flush();
fos.Commit();
return true;
}
示例14: OpenInternalSensors
bool
DeviceDescriptor::DoOpen(OperationEnvironment &env)
{
assert(config.IsAvailable());
if (config.port_type == DeviceConfig::PortType::INTERNAL)
return OpenInternalSensors();
if (config.port_type == DeviceConfig::PortType::DROIDSOAR_V2)
return OpenDroidSoarV2();
if (config.port_type == DeviceConfig::PortType::I2CPRESSURESENSOR)
return OpenI2Cbaro();
if (config.port_type == DeviceConfig::PortType::NUNCHUCK)
return OpenNunchuck();
if (config.port_type == DeviceConfig::PortType::IOIOVOLTAGE)
return OpenVoltage();
if (config.port_type == DeviceConfig::PortType::ADCAIRSPEED)
return OpenAdcAirspeed();
reopen_clock.Update();
Port *port = OpenPort(config, *this);
if (port == NULL) {
TCHAR name_buffer[64];
const TCHAR *name = config.GetPortName(name_buffer, 64);
StaticString<256> msg;
msg.Format(_T("%s: %s."), _("Unable to open port"), name);
env.SetErrorMessage(msg);
return false;
}
while (port->GetState() == PortState::LIMBO) {
env.Sleep(200);
if (env.IsCancelled() || port->GetState() == PortState::FAILED) {
delete port;
return false;
}
}
if (!Open(*port, env)) {
delete port;
return false;
}
return true;
}
示例15: DownloadFlightInner
static bool
DownloadFlightInner(Port &port, const RecordedFlightInfo &flight,
FILE *file, OperationEnvironment &env)
{
if (!LX::CommandMode(port, env))
return false;
port.Flush();
LX::SeekMemory seek;
seek.start_address = flight.internal.lx.start_address;
seek.end_address = flight.internal.lx.end_address;
if (!LX::SendPacket(port, LX::SEEK_MEMORY, &seek, sizeof(seek), env) ||
!LX::ExpectACK(port, env))
return false;
LX::MemorySection memory_section;
if (!LX::ReceivePacketRetry(port, LX::READ_MEMORY_SECTION,
&memory_section, sizeof(memory_section), env,
5000, 2000, 60000, 2))
return false;
unsigned lengths[LX::MemorySection::N];
unsigned total_length = 0;
for (unsigned i = 0; i < LX::MemorySection::N; ++i) {
lengths[i] = FromBE16(memory_section.lengths[i]);
total_length += lengths[i];
}
env.SetProgressRange(total_length);
uint8_t *data = new uint8_t[total_length], *p = data;
for (unsigned i = 0; i < LX::MemorySection::N && lengths[i] > 0; ++i) {
if (!LX::ReceivePacketRetry(port, (LX::Command)(LX::READ_LOGGER_DATA + i),
p, lengths[i], env,
20000, 2000, 300000, 2)) {
delete [] data;
return false;
}
p += lengths[i];
env.SetProgressPosition(p - data);
}
bool success = LX::ConvertLXNToIGC(data, total_length, file);
delete [] data;
return success;
}