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 szFound;
size_t i; size_t i;
nfc_target_info_t nti; 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; const char* acLibnfcVersion;
if (argc > 1) { if (argc > 1 && szFound == 0) {
errx (1, "usage: %s", argv[0]); errx (1, "usage: %s [--device driver:port:speed]", argv[0]);
} }
// Display libnfc version // Display libnfc version
@ -85,6 +85,8 @@ int main(int argc, const char* argv[])
pnd = nfc_connect(&ndd); pnd = nfc_connect(&ndd);
#endif #endif
if (szFound == 0)
{
if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices)))) if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices))))
{ {
fprintf (stderr, "malloc() failed\n"); fprintf (stderr, "malloc() failed\n");
@ -92,6 +94,7 @@ int main(int argc, const char* argv[])
} }
nfc_list_devices (pnddDevices, MAX_DEVICE_COUNT, &szFound); nfc_list_devices (pnddDevices, MAX_DEVICE_COUNT, &szFound);
}
if (szFound == 0) 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 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 void append_iso14443a_crc(byte_t* pbtData, size_t szLen);
NFC_EXPORT const char* nfc_version(void); 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 #ifdef __cplusplus
} }

View file

@ -1033,3 +1033,44 @@ const char* nfc_version(void)
#endif // SVN_REVISION #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;
}