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:
parent
162d1bc951
commit
1392cea7e1
2
Makefile
2
Makefile
|
@ -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 \
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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
|
Loading…
Reference in New Issue