mirror of https://gerrit.osmocom.org/libosmocore
sim: allow opening reader# > 0
Change-Id: I4b1abc8d8aae4bd9a32f927269d7ebfef902d7c5
This commit is contained in:
parent
49ddef610a
commit
94cd4acef8
|
@ -79,17 +79,18 @@ static struct osim_reader_hdl *pcsc_reader_open(int num, const char *id, void *c
|
|||
rc = SCardListReaders(st->hContext, NULL, (LPSTR)&mszReaders, &dwReaders);
|
||||
PCSC_ERROR(rc, "SCardListReaders");
|
||||
|
||||
/* SCARD_S_SUCCESS means there is at least one reader in the group */
|
||||
num_readers = 0;
|
||||
ptr = mszReaders;
|
||||
while (*ptr != '\0') {
|
||||
while (*ptr != '\0' && num_readers != num) {
|
||||
ptr += strlen(ptr)+1;
|
||||
num_readers++;
|
||||
}
|
||||
|
||||
if (num_readers == 0)
|
||||
if (num != num_readers)
|
||||
goto end;
|
||||
|
||||
st->name = talloc_strdup(rh, mszReaders);
|
||||
st->name = talloc_strdup(rh, ptr);
|
||||
st->dwActiveProtocol = -1;
|
||||
|
||||
return rh;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <getopt.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <osmocom/core/msgb.h>
|
||||
|
@ -328,6 +329,51 @@ out:
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void print_help(void)
|
||||
{
|
||||
printf( "osmo-sim-test Usage:\n"
|
||||
" -h --help This message\n"
|
||||
" -n --reader-num NR Open reader number NR\n"
|
||||
);
|
||||
}
|
||||
|
||||
static int readernum = 0;
|
||||
|
||||
static void handle_options(int argc, char **argv)
|
||||
{
|
||||
while (1) {
|
||||
int option_index = 0, c;
|
||||
const struct option long_options[] = {
|
||||
{ "help", 0, 0, 'h' },
|
||||
{ "reader-num", 1, 0, 'n' },
|
||||
{0,0,0,0}
|
||||
};
|
||||
|
||||
c = getopt_long(argc, argv, "hn:",
|
||||
long_options, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
switch (c) {
|
||||
case 'h':
|
||||
print_help();
|
||||
exit(0);
|
||||
break;
|
||||
case 'n':
|
||||
readernum = atoi(optarg);
|
||||
break;
|
||||
default:
|
||||
exit(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (argc > optind) {
|
||||
fprintf(stderr, "Unsupported positional arguments on command line\n");
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct osim_reader_hdl *reader;
|
||||
|
@ -335,7 +381,9 @@ int main(int argc, char **argv)
|
|||
struct osim_chan_hdl *chan;
|
||||
struct msgb *msg;
|
||||
|
||||
reader = osim_reader_open(OSIM_READER_DRV_PCSC, 0, "", NULL);
|
||||
handle_options(argc, argv);
|
||||
|
||||
reader = osim_reader_open(OSIM_READER_DRV_PCSC, readernum, "", NULL);
|
||||
if (!reader)
|
||||
exit(1);
|
||||
card = osim_card_open(reader, OSIM_PROTO_T0);
|
||||
|
|
Loading…
Reference in New Issue