Replace "uif" transport with generic "comport".

The new transport accepts an arbitrary baud rate instead of a
device-type enum.
This commit is contained in:
Daniel Beer 2012-09-13 14:33:04 +12:00
parent 162d1bc951
commit 1392cea7e1
5 changed files with 39 additions and 68 deletions

View File

@ -119,7 +119,7 @@ OBJ=\
transport/olimex_iso.o \ transport/olimex_iso.o \
transport/rf2500.o \ transport/rf2500.o \
transport/ti3410.o \ transport/ti3410.o \
transport/uif.o \ transport/comport.o \
drivers/device.o \ drivers/device.o \
drivers/bsl.o \ drivers/bsl.o \
drivers/fet.o \ drivers/fet.o \

View File

@ -34,7 +34,7 @@
#include "output.h" #include "output.h"
#include "opdb.h" #include "opdb.h"
#include "uif.h" #include "comport.h"
#include "olimex_iso.h" #include "olimex_iso.h"
#include "rf2500.h" #include "rf2500.h"
#include "ti3410.h" #include "ti3410.h"
@ -1120,7 +1120,7 @@ static device_t fet_open_olimex_iso_mk2(const struct device_args *args)
uint32_t version; uint32_t version;
if (args->flags & DEVICE_FLAG_TTY) if (args->flags & DEVICE_FLAG_TTY)
trans = uif_open(args->path, UIF_TYPE_OLIMEX); trans = comport_open(args->path, 115200);
else else
trans = cdc_acm_open(args->path, args->requested_serial, trans = cdc_acm_open(args->path, args->requested_serial,
115200, 0x15ba, 0x0100); 115200, 0x15ba, 0x0100);
@ -1143,7 +1143,7 @@ static device_t fet_open_olimex_iso_mk2(const struct device_args *args)
delay_s(15); delay_s(15);
if (args->flags & DEVICE_FLAG_TTY) if (args->flags & DEVICE_FLAG_TTY)
trans = uif_open(args->path, UIF_TYPE_OLIMEX); trans = comport_open(args->path, 115200);
else else
trans = cdc_acm_open(args->path, trans = cdc_acm_open(args->path,
args->requested_serial, args->requested_serial,
@ -1181,7 +1181,7 @@ static device_t fet_open_olimex(const struct device_args *args)
transport_t trans; transport_t trans;
if (args->flags & DEVICE_FLAG_TTY) if (args->flags & DEVICE_FLAG_TTY)
trans = uif_open(args->path, UIF_TYPE_OLIMEX); trans = comport_open(args->path, 115200);
else else
trans = cdc_acm_open(args->path, args->requested_serial, trans = cdc_acm_open(args->path, args->requested_serial,
115200, 0x15ba, 0x0031); 115200, 0x15ba, 0x0031);
@ -1214,7 +1214,7 @@ static device_t fet_open_olimex_v1(const struct device_args *args)
transport_t trans; transport_t trans;
if (args->flags & DEVICE_FLAG_TTY) if (args->flags & DEVICE_FLAG_TTY)
trans = uif_open(args->path, UIF_TYPE_OLIMEX_V1); trans = comport_open(args->path, 500000);
else else
trans = cp210x_open(args->path, args->requested_serial, trans = cp210x_open(args->path, args->requested_serial,
500000, 0x15ba, 0x0002); 500000, 0x15ba, 0x0002);
@ -1247,7 +1247,7 @@ static device_t fet_open_olimex_iso(const struct device_args *args)
transport_t trans; transport_t trans;
if (args->flags & DEVICE_FLAG_TTY) if (args->flags & DEVICE_FLAG_TTY)
trans = uif_open(args->path, UIF_TYPE_OLIMEX_ISO); trans = comport_open(args->path, 200000);
else else
trans = olimex_iso_open(args->path, args->requested_serial); trans = olimex_iso_open(args->path, args->requested_serial);
@ -1279,7 +1279,7 @@ static device_t fet_open_uif(const struct device_args *args)
transport_t trans; transport_t trans;
if (args->flags & DEVICE_FLAG_TTY) if (args->flags & DEVICE_FLAG_TTY)
trans = uif_open(args->path, UIF_TYPE_FET); trans = comport_open(args->path, 460800);
else else
trans = ti3410_open(args->path, args->requested_serial); trans = ti3410_open(args->path, args->requested_serial);

View File

@ -1,5 +1,5 @@
/* MSPDebug - debugging tool for the eZ430 /* MSPDebug - debugging tool for the eZ430
* Copyright (C) 2009, 2010 Daniel Beer * Copyright (C) 2009-2012 Daniel Beer
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -23,12 +23,12 @@
#include <stdint.h> #include <stdint.h>
#include <unistd.h> #include <unistd.h>
#include "uif.h" #include "comport.h"
#include "util.h" #include "util.h"
#include "output.h" #include "output.h"
#include "sport.h" #include "sport.h"
struct uif_transport { struct comport_transport {
struct transport base; struct transport base;
sport_t serial_fd; sport_t serial_fd;
@ -36,14 +36,14 @@ struct uif_transport {
static int serial_send(transport_t tr_base, const uint8_t *data, int len) static int serial_send(transport_t tr_base, const uint8_t *data, int len)
{ {
struct uif_transport *tr = (struct uif_transport *)tr_base; struct comport_transport *tr = (struct comport_transport *)tr_base;
#ifdef DEBUG_SERIAL #ifdef DEBUG_SERIAL
debug_hexdump("Serial transfer out:", data, len); debug_hexdump("Serial transfer out:", data, len);
#endif #endif
if (sport_write_all(tr->serial_fd, data, len) < 0) { if (sport_write_all(tr->serial_fd, data, len) < 0) {
pr_error("uif: write error"); pr_error("comport: write error");
return -1; return -1;
} }
@ -52,12 +52,12 @@ static int serial_send(transport_t tr_base, const uint8_t *data, int len)
static int serial_recv(transport_t tr_base, uint8_t *data, int max_len) static int serial_recv(transport_t tr_base, uint8_t *data, int max_len)
{ {
struct uif_transport *tr = (struct uif_transport *)tr_base; struct comport_transport *tr = (struct comport_transport *)tr_base;
int r; int r;
r = sport_read(tr->serial_fd, data, max_len); r = sport_read(tr->serial_fd, data, max_len);
if (r < 0) { if (r < 0) {
pr_error("uif: read error"); pr_error("comport: read error");
return -1; return -1;
} }
@ -69,7 +69,7 @@ static int serial_recv(transport_t tr_base, uint8_t *data, int max_len)
static void serial_destroy(transport_t tr_base) static void serial_destroy(transport_t tr_base)
{ {
struct uif_transport *tr = (struct uif_transport *)tr_base; struct comport_transport *tr = (struct comport_transport *)tr_base;
sport_close(tr->serial_fd); sport_close(tr->serial_fd);
free(tr); free(tr);
@ -77,10 +77,10 @@ static void serial_destroy(transport_t tr_base)
static int serial_flush(transport_t tr_base) static int serial_flush(transport_t tr_base)
{ {
struct uif_transport *tr = (struct uif_transport *)tr_base; struct comport_transport *tr = (struct comport_transport *)tr_base;
if (sport_flush(tr->serial_fd) < 0) { if (sport_flush(tr->serial_fd) < 0) {
pr_error("uif: flush failed"); pr_error("comport: flush failed");
return -1; return -1;
} }
@ -89,7 +89,7 @@ static int serial_flush(transport_t tr_base)
static int serial_set_modem(transport_t tr_base, transport_modem_t state) static int serial_set_modem(transport_t tr_base, transport_modem_t state)
{ {
struct uif_transport *tr = (struct uif_transport *)tr_base; struct comport_transport *tr = (struct comport_transport *)tr_base;
int bits = 0; int bits = 0;
if (state & TRANSPORT_MODEM_DTR) if (state & TRANSPORT_MODEM_DTR)
@ -99,14 +99,14 @@ static int serial_set_modem(transport_t tr_base, transport_modem_t state)
bits |= SPORT_MC_RTS; bits |= SPORT_MC_RTS;
if (sport_set_modem(tr->serial_fd, bits) < 0) { if (sport_set_modem(tr->serial_fd, bits) < 0) {
pr_error("uif: failed to set modem control lines\n"); pr_error("comport: failed to set modem control lines\n");
return -1; return -1;
} }
return 0; return 0;
} }
static const struct transport_class uif_transport = { static const struct transport_class comport_transport = {
.destroy = serial_destroy, .destroy = serial_destroy,
.send = serial_send, .send = serial_send,
.recv = serial_recv, .recv = serial_recv,
@ -114,48 +114,29 @@ static const struct transport_class uif_transport = {
.set_modem = serial_set_modem .set_modem = serial_set_modem
}; };
transport_t uif_open(const char *device, uif_type_t type) transport_t comport_open(const char *device, int baud_rate)
{ {
struct uif_transport *tr = malloc(sizeof(*tr)); struct comport_transport *tr = malloc(sizeof(*tr));
if (!tr) { if (!tr) {
pr_error("uif: couldn't allocate memory"); pr_error("comport: couldn't allocate memory");
return NULL; return NULL;
} }
tr->base.ops = &uif_transport; tr->base.ops = &comport_transport;
switch (type) {
case UIF_TYPE_FET:
printc("Trying to open UIF on %s...\n", device);
tr->serial_fd = sport_open(device, 460800, 0);
break;
case UIF_TYPE_OLIMEX:
printc("Trying to open Olimex (V2) on %s...\n", device);
tr->serial_fd = sport_open(device, 115200, 0);
if (sport_set_modem(tr->serial_fd, 0) < 0)
pr_error("warning: uif: failed to set "
"modem control lines");
break;
case UIF_TYPE_OLIMEX_V1:
printc("Trying to open Olimex (V1) on %s...\n", device);
tr->serial_fd = sport_open(device, 500000, 0);
break;
case UIF_TYPE_OLIMEX_ISO:
printc("Trying to open Olimex (ISO) on %s...\n", device);
tr->serial_fd = sport_open(device, 200000, 0);
break;
}
printc("Trying to open %s at %d bps...\n", device, baud_rate);
tr->serial_fd = sport_open(device, baud_rate, 0);
if (SPORT_ISERR(tr->serial_fd)) { if (SPORT_ISERR(tr->serial_fd)) {
printc_err("uif: can't open serial device: %s: %s\n", printc_err("comport: can't open serial device: %s: %s\n",
device, last_error()); device, last_error());
free(tr); free(tr);
return NULL; return NULL;
} }
if (sport_set_modem(tr->serial_fd, 0) < 0)
pr_error("warning: comport: failed to set "
"modem control lines");
return (transport_t)tr; return (transport_t)tr;
} }

View File

@ -1,5 +1,5 @@
/* MSPDebug - debugging tool for MSP430 MCUs /* MSPDebug - debugging tool for MSP430 MCUs
* Copyright (C) 2009, 2010 Daniel Beer * Copyright (C) 2009-2012 Daniel Beer
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,22 +16,15 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#ifndef UIF_H_ #ifndef COMPORT_H_
#define UIF_H_ #define COMPORT_H_
#include "transport.h" #include "transport.h"
typedef enum { /* This function is for opening a system serial device. The argument
UIF_TYPE_FET, * given should be the filename of the relevant tty device (POSIX) or a
UIF_TYPE_OLIMEX, * COM port name (Windows).
UIF_TYPE_OLIMEX_V1,
UIF_TYPE_OLIMEX_ISO
} uif_type_t;
/* This function is for opening an eZ430-F2013 or FET430UIF device via
* a kernel-supported serial interface. The argument given should be the
* filename of the relevant tty device.
*/ */
transport_t uif_open(const char *device, uif_type_t type); transport_t comport_open(const char *device, int baud_rate);
#endif #endif

View File

@ -46,9 +46,6 @@
#include "fet_db.h" #include "fet_db.h"
#include "flash_bsl.h" #include "flash_bsl.h"
#include "gdbc.h" #include "gdbc.h"
#include "uif.h"
#include "rf2500.h"
#include "tilib.h" #include "tilib.h"
#include "goodfet.h" #include "goodfet.h"