void devWriteNMEAString(PDeviceDescriptor_t d, const TCHAR *text) { TCHAR tmp[512]; devFormatNMEAString(tmp, 512, text); mutexComm.Lock(); if (d->Com) d->Com->WriteString(tmp); mutexComm.Unlock(); }
void VarioWriteNMEA(const TCHAR *text) { TCHAR tmp[512]; devFormatNMEAString(tmp, 512, text); mutexComm.Lock(); for (int i = 0; i < NUMDEV; i++) if (_tcscmp(DeviceList[i].Name, TEXT("Vega")) == 0) if (DeviceList[i].Com) DeviceList[i].Com->WriteString(tmp); mutexComm.Unlock(); }
void devWriteNMEAString(PDeviceDescriptor_t d, const TCHAR *text) { TCHAR tmp[512]; devFormatNMEAString(tmp, 512, text); devDirectLink(d,true); LockComm(); if (d->Com) d->Com->WriteString(tmp); UnlockComm(); devDirectLink(d,false); }
BOOL FlarmDeclare(PDeviceDescriptor_t d, Declaration_t *decl, unsigned errBufferLen, TCHAR errBuffer[]) { BOOL result = TRUE; #define BUFF_LEN 512 TCHAR Buffer[BUFF_LEN]; d->Com->StopRxThread(); d->Com->SetRxTimeout(500); // set RX timeout to 500[ms] _stprintf(Buffer,TEXT("PFLAC,S,PILOT,%s"),decl->PilotName); if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,GLIDERID,%s"),decl->AircraftRego); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,GLIDERTYPE,%s"),decl->AircraftType); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,COMPID,%s"),decl->CompetitionID); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,COMPCLASS,%s"),decl->CompetitionClass); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,NEWTASK,Task")); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,ADDWP,0000000N,00000000E,TAKEOFF")); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; if(result == TRUE) for (int i = 0; i < decl->num_waypoints; i++) { int DegLat, DegLon; double MinLat, MinLon; char NoS, EoW; DegLat = (int)decl->waypoint[i]->Latitude; MinLat = decl->waypoint[i]->Latitude - DegLat; NoS = 'N'; if((MinLat<0) || ((MinLat-DegLat==0) && (DegLat<0))) { NoS = 'S'; DegLat *= -1; MinLat *= -1; } MinLat *= 60; MinLat *= 1000; DegLon = (int)decl->waypoint[i]->Longitude; MinLon = decl->waypoint[i]->Longitude - DegLon; EoW = 'E'; if((MinLon<0) || ((MinLon-DegLon==0) && (DegLon<0))) { EoW = 'W'; DegLon *= -1; MinLon *= -1; } MinLon *=60; MinLon *= 1000; _stprintf(Buffer, TEXT("PFLAC,S,ADDWP,%02d%05.0f%c,%03d%05.0f%c,%s"), DegLat, MinLat, NoS, DegLon, MinLon, EoW, decl->waypoint[i]->Name); if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; } _stprintf(Buffer,TEXT("PFLAC,S,ADDWP,0000000N,00000000E,LANDING")); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; // Reboot flarm to make declaration active, according to specs Sleep(100); devFormatNMEAString(Buffer, BUFF_LEN, TEXT("PFLAR,0") ); if(result == TRUE) d->Com->WriteString(Buffer); Sleep(100); d->Com->SetRxTimeout(RXTIMEOUT); // clear timeout d->Com->StartRxThread(); // restart RX thread return result; }
BOOL FlarmDeclare(PDeviceDescriptor_t d, Declaration_t *decl, unsigned errBufferLen, TCHAR errBuffer[]) { BOOL result = TRUE; #define BUFF_LEN 512 TCHAR Buffer[BUFF_LEN]; // for(int i=0; i < 3; i++) { d->Com->StopRxThread(); d->Com->SetRxTimeout(100); // set RX timeout to 50[ms] _stprintf(Buffer,TEXT("PFLAC,S,PILOT,%s"),decl->PilotName); if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,GLIDERID,%s"),decl->AircraftRego); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,GLIDERTYPE,%s"),decl->AircraftType); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,COMPID,%s"),decl->CompetitionID); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,COMPCLASS,%s"),decl->CompetitionClass); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,NEWTASK,Tsk")); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; _stprintf(Buffer,TEXT("PFLAC,S,ADDWP,0000000N,00000000E,TKOFF")); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; if(result == TRUE) for (int j = 0; j < decl->num_waypoints; j++) { int DegLat, DegLon; double MinLat, MinLon; char NoS, EoW; DegLat = (int)decl->waypoint[j]->Latitude; MinLat = decl->waypoint[j]->Latitude - DegLat; NoS = 'N'; if((MinLat<0) || ((MinLat-DegLat==0) && (DegLat<0))) { NoS = 'S'; DegLat *= -1; MinLat *= -1; } MinLat *= 60; MinLat *= 1000; DegLon = (int)decl->waypoint[j]->Longitude; MinLon = decl->waypoint[j]->Longitude - DegLon; EoW = 'E'; if((MinLon<0) || ((MinLon-DegLon==0) && (DegLon<0))) { EoW = 'W'; DegLon *= -1; MinLon *= -1; } MinLon *=60; MinLon *= 1000; _stprintf(Buffer, TEXT("PFLAC,S,ADDWP,%02d%05.0f%c,%03d%05.0f%c,%s"), DegLat, MinLat, NoS, DegLon, MinLon, EoW, decl->waypoint[j]->Name); Buffer[38] = '\0'; // limit the wapointname to 5 char not to limit the no of waypoints for(int k =0; k < (int)_tcslen(Buffer); k++) //remove * not to conflict with checksum indicator if(Buffer[k]== (TCHAR)'*') Buffer[k] = '_'; if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; } _stprintf(Buffer,TEXT("PFLAC,S,ADDWP,0000000N,00000000E,LNDG")); if(result) if (!FlarmDeclareSetGet(d,Buffer)) result = FALSE; // Reboot flarm to make declaration active, according to specs Sleep(100); devFormatNMEAString(Buffer, BUFF_LEN, TEXT("PFLAR,0") ); if(result == TRUE) d->Com->WriteString(Buffer); Sleep(100); d->Com->SetRxTimeout(RXTIMEOUT); // clear timeout d->Com->StartRxThread(); // restart RX thread if(result == TRUE) return result; Sleep(100); } return false; // no success }