Arquivos
ardrone_autonomy/ARDroneLib/Soft/Lib/ardrone_tool/ardrone_version.c
T
2013-10-21 11:07:21 -07:00

97 linhas
2.0 KiB
C

#include <VP_Os/vp_os_malloc.h>
#include <ardrone_tool/ardrone_version.h>
#include <utils/ardrone_ftp.h>
#include <config.h>
#include <stdio.h>
#ifndef USE_ELINUX
int
compareVersions (ardrone_version_t *v1, ardrone_version_t *v2)
{
if (NULL == v1 || NULL == v2)
{
return 0;
}
int retVal = v1->majorVersion - v2->majorVersion;
if (0 == retVal)
{
retVal = v1->minorVersion - v2->minorVersion;
if (0 == retVal)
{
retVal = v1->revision - v2->revision;
}
}
return retVal;
}
int
getDroneVersion (const char *tempPath, const char *droneIp, ardrone_version_t *version)
{
if (NULL == tempPath || NULL == droneIp || NULL == version)
{
return -1;
}
_ftp_status status;
_ftp_t *ftp = ftpConnect (droneIp, FTP_PORT, "anonymous", "", &status);
if (FTP_FAILED (status) || NULL == ftp)
{
ftpClose (&ftp);
return -1;
}
size_t lNameSize = strlen (tempPath) + strlen ("/__version.txt") + 1;
char *localName = vp_os_calloc (lNameSize, 1);
if (NULL == localName)
{
ftpClose (&ftp);
return -1;
}
snprintf (localName, lNameSize, "%s/__version.txt", tempPath);
status = ftpGet (ftp, "version.txt", localName, 0, NULL);
if (FTP_FAILED (status))
{
vp_os_free (localName);
localName = NULL;
ftpClose (&ftp);
return -1;
}
ftpClose (&ftp);
FILE *versionFile = fopen (localName, "r");
if (NULL == versionFile)
{
remove (localName);
vp_os_free (localName);
localName = NULL;
return -1;
}
uint32_t maj, min, rev;
if (3 != fscanf (versionFile, "%u.%u.%u", &maj, &min, &rev))
{
fclose (versionFile);
remove (localName);
vp_os_free (localName);
localName = NULL;
return -1;
}
fclose (versionFile);
remove (localName);
vp_os_free (localName);
localName = NULL;
version->majorVersion = maj;
version->minorVersion = min;
version->revision = rev;
return 0;
}
#endif