diff options
Diffstat (limited to 'src/modemman.c')
-rw-r--r-- | src/modemman.c | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/modemman.c b/src/modemman.c index c156e61..f7521e3 100644 --- a/src/modemman.c +++ b/src/modemman.c @@ -1,3 +1,11 @@ +#include <stddef.h> +#include <assert.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> + +#include <libdaemon/dlog.h> + #include "modemman.h" #include "modem.h" @@ -12,27 +20,32 @@ struct llist { static struct llist *llist = NULL; static int n_llist = 0; +static void modem_try_open(const char *dev) { + struct modem *m; + + if ((m = modem_open(dev))) { + struct llist *l = malloc(sizeof(struct llist)); + assert(l); + + l->modem = m; + l->next = llist; + llist = l; + n_llist++; + } +} + int modem_manager_init(int channels) { int i; assert(channels <= MAX_CHANNELS && channels > 0); assert(n_llist == 0); + + modem_try_open("/dev/ttyz0"); - for (i = TTY_START; i < TTY_START+MAX_CHANNLES && n_llist < channels; i++) { + for (i = TTY_START; i < TTY_START+MAX_CHANNELS && n_llist < channels; i++) { char d[PATH_MAX]; - struct modem *m; - snprintf(d, sizeof(d), "/dev/ttyI%i", i); - - if (m = modem_open(d)) { - struct llist *l = malloc(sizeof(struct llist)); - assert(l); - - l->modem = m; - l->next = llist; - llist = l; - n_llist++; - } + modem_try_open(d); } if (n_llist < channels) { @@ -49,11 +62,11 @@ void modem_manager_done(void) { while (llist) { struct llist *l; - modem_close(l->modem); + modem_close(llist->modem); l = llist; - llist = l->next; + llist = llist->next; free(l); - n_llist = 0; + n_llist--; } assert(!n_llist && !llist); |