First prototype of argument parsing for device description (issue #87).

This commit is contained in:
Emanuele Bertoldi 2010-07-22 13:41:20 +00:00
parent 7945dd18fa
commit 4bc522cd1e
3 changed files with 58 additions and 13 deletions

View file

@ -53,11 +53,11 @@ int main(int argc, const char* argv[])
size_t szFound;
size_t i;
nfc_target_info_t nti;
nfc_device_desc_t *pnddDevices;
nfc_device_desc_t *pnddDevices = nfc_parse_device_desc(argc, argv, &szFound);
const char* acLibnfcVersion;
if (argc > 1) {
errx (1, "usage: %s", argv[0]);
if (argc > 1 && szFound == 0) {
errx (1, "usage: %s [--device driver:port:speed]", argv[0]);
}
// Display libnfc version
@ -85,13 +85,16 @@ int main(int argc, const char* argv[])
pnd = nfc_connect(&ndd);
#endif
if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices))))
if (szFound == 0)
{
fprintf (stderr, "malloc() failed\n");
return EXIT_FAILURE;
}
if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices))))
{
fprintf (stderr, "malloc() failed\n");
return EXIT_FAILURE;
}
nfc_list_devices (pnddDevices, MAX_DEVICE_COUNT, &szFound);
nfc_list_devices (pnddDevices, MAX_DEVICE_COUNT, &szFound);
}
if (szFound == 0)
{

View file

@ -85,6 +85,7 @@ NFC_EXPORT const char* nfc_device_name(nfc_device_t* pnd);
NFC_EXPORT void iso14443a_crc(byte_t* pbtData, size_t szLen, byte_t* pbtCrc);
NFC_EXPORT void append_iso14443a_crc(byte_t* pbtData, size_t szLen);
NFC_EXPORT const char* nfc_version(void);
NFC_EXPORT nfc_device_desc_t* nfc_parse_device_desc(int argc, const char *argv[], size_t* szFound);
#ifdef __cplusplus
}

View file

@ -1026,10 +1026,51 @@ const char* nfc_device_name(nfc_device_t* pnd)
*/
const char* nfc_version(void)
{
#ifdef SVN_REVISION
return PACKAGE_VERSION" (r"SVN_REVISION")";
#else
return PACKAGE_VERSION;
#endif // SVN_REVISION
#ifdef SVN_REVISION
return PACKAGE_VERSION" (r"SVN_REVISION")";
#else
return PACKAGE_VERSION;
#endif // SVN_REVISION
}
/**
* @brief Tries to parse arguments to find device descriptions.
* @return Returns the list of found device descriptions.
*/
nfc_device_desc_t* nfc_parse_device_desc(int argc, const char *argv[], size_t* szFound)
{
nfc_device_desc_t* pndd = 0;
*szFound = 0;
int arg;
// Get commandline options
for (arg=1;arg<argc;arg++) {
if (0 == strcmp(argv[arg], "--device")) {
if (argc > arg+1) {
pndd = malloc(sizeof(nfc_device_desc_t));
char buffer[256];
strncpy(buffer, argv[++arg], 256);
// Driver.
pndd->pcDriver = (char *)malloc(256);
strcpy(pndd->pcDriver, strtok(buffer, ":"));
// Port.
pndd->pcPort = (char *)malloc(256);
strcpy(pndd->pcPort, strtok(NULL, ":"));
// Speed.
sscanf(strtok(NULL, ":"), "%d", &pndd->uiSpeed);
*szFound = 1;
}
break;
}
}
return pndd;
}