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,13 +85,16 @@ int main(int argc, const char* argv[])
pnd = nfc_connect(&ndd); pnd = nfc_connect(&ndd);
#endif #endif
if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices)))) if (szFound == 0)
{ {
fprintf (stderr, "malloc() failed\n"); if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices))))
return EXIT_FAILURE; {
} 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) 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

@ -1026,10 +1026,51 @@ const char* nfc_device_name(nfc_device_t* pnd)
*/ */
const char* nfc_version(void) const char* nfc_version(void)
{ {
#ifdef SVN_REVISION #ifdef SVN_REVISION
return PACKAGE_VERSION" (r"SVN_REVISION")"; return PACKAGE_VERSION" (r"SVN_REVISION")";
#else #else
return PACKAGE_VERSION; return PACKAGE_VERSION;
#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;
}