Indent whole code using make indent. (Fixes issue 84).

This commit is contained in:
Romuald Conty 2010-09-07 17:51:03 +00:00
parent f93b4939f4
commit 18cc86a613
42 changed files with 2613 additions and 2479 deletions

View file

@ -31,7 +31,7 @@ http://www.teuniz.net/RS-232/index.html
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
# include "config.h"
#endif // HAVE_CONFIG_H
#include "uart.h"
@ -42,50 +42,47 @@ http://www.teuniz.net/RS-232/index.html
// Test if we are dealing with unix operating systems
#ifndef _WIN32
#include <sys/select.h>
#include <termios.h>
# include <sys/select.h>
# include <termios.h>
typedef struct termios term_info;
typedef struct {
int fd; // Serial port file descriptor
term_info tiOld; // Terminal info before using the port
term_info tiNew; // Terminal info during the transaction
int fd; // Serial port file descriptor
term_info tiOld; // Terminal info before using the port
term_info tiNew; // Terminal info during the transaction
} serial_port_unix;
// timeval struct that define timeout delay for serial port
const struct timeval timeout = {
.tv_sec = 0, // 0 second
.tv_usec = 60000 // 60 ms
const struct timeval timeout = {
.tv_sec = 0, // 0 second
.tv_usec = 60000 // 60 ms
};
// Work-around to claim uart interface using the c_iflag (software input processing) from the termios struct
#define CCLAIMED 0x80000000
# define CCLAIMED 0x80000000
serial_port uart_open(const char* pcPortName)
serial_port
uart_open (const char *pcPortName)
{
serial_port_unix* sp = malloc(sizeof(serial_port_unix));
serial_port_unix *sp = malloc (sizeof (serial_port_unix));
if (sp == 0) return INVALID_SERIAL_PORT;
if (sp == 0)
return INVALID_SERIAL_PORT;
sp->fd = open(pcPortName, O_RDWR | O_NOCTTY | O_NONBLOCK);
if(sp->fd == -1)
{
uart_close(sp);
sp->fd = open (pcPortName, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (sp->fd == -1) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
if(tcgetattr(sp->fd,&sp->tiOld) == -1)
{
uart_close(sp);
if (tcgetattr (sp->fd, &sp->tiOld) == -1) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
// Make sure the port is not claimed already
if (sp->tiOld.c_iflag & CCLAIMED)
{
uart_close(sp);
if (sp->tiOld.c_iflag & CCLAIMED) {
uart_close (sp);
return CLAIMED_SERIAL_PORT;
}
// Copy the old terminal info struct
sp->tiNew = sp->tiOld;
@ -94,103 +91,118 @@ serial_port uart_open(const char* pcPortName)
sp->tiNew.c_oflag = 0;
sp->tiNew.c_lflag = 0;
sp->tiNew.c_cc[VMIN] = 0; // block until n bytes are received
sp->tiNew.c_cc[VTIME] = 0; // block until a timer expires (n * 100 mSec.)
sp->tiNew.c_cc[VMIN] = 0; // block until n bytes are received
sp->tiNew.c_cc[VTIME] = 0; // block until a timer expires (n * 100 mSec.)
if(tcsetattr(sp->fd,TCSANOW,&sp->tiNew) == -1)
{
uart_close(sp);
if (tcsetattr (sp->fd, TCSANOW, &sp->tiNew) == -1) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
tcflush(sp->fd, TCIFLUSH);
tcflush (sp->fd, TCIFLUSH);
return sp;
}
void uart_set_speed(serial_port sp, const uint32_t uiPortSpeed)
void
uart_set_speed (serial_port sp, const uint32_t uiPortSpeed)
{
DBG("Serial port speed requested to be set to %d bauds.", uiPortSpeed);
const serial_port_unix* spu = (serial_port_unix*)sp;
DBG ("Serial port speed requested to be set to %d bauds.", uiPortSpeed);
const serial_port_unix *spu = (serial_port_unix *) sp;
// Portability note: on some systems, B9600 != 9600 so we have to do
// uint32_t <=> speed_t associations by hand.
speed_t stPortSpeed = B9600;
switch(uiPortSpeed) {
case 9600: stPortSpeed = B9600;
switch (uiPortSpeed) {
case 9600:
stPortSpeed = B9600;
break;
case 19200: stPortSpeed = B19200;
case 19200:
stPortSpeed = B19200;
break;
case 38400: stPortSpeed = B38400;
case 38400:
stPortSpeed = B38400;
break;
#ifdef B57600
case 57600: stPortSpeed = B57600;
# ifdef B57600
case 57600:
stPortSpeed = B57600;
break;
#endif
#ifdef B115200
case 115200: stPortSpeed = B115200;
# endif
# ifdef B115200
case 115200:
stPortSpeed = B115200;
break;
#endif
#ifdef B230400
case 230400: stPortSpeed = B230400;
# endif
# ifdef B230400
case 230400:
stPortSpeed = B230400;
break;
#endif
#ifdef B460800
case 460800: stPortSpeed = B460800;
# endif
# ifdef B460800
case 460800:
stPortSpeed = B460800;
break;
#endif
default:
ERR("Unable to set serial port speed to %d bauds. Speed value must be one of those defined in termios(3).", uiPortSpeed);
# endif
default:
ERR ("Unable to set serial port speed to %d bauds. Speed value must be one of those defined in termios(3).",
uiPortSpeed);
};
// Set port speed (Input and Output)
cfsetispeed((struct termios*)&(spu->tiNew), stPortSpeed);
cfsetospeed((struct termios*)&(spu->tiNew), stPortSpeed);
if( tcsetattr(spu->fd, TCSADRAIN, &(spu->tiNew)) == -1)
{
ERR("%s", "Unable to apply new speed settings.");
cfsetispeed ((struct termios *) &(spu->tiNew), stPortSpeed);
cfsetospeed ((struct termios *) &(spu->tiNew), stPortSpeed);
if (tcsetattr (spu->fd, TCSADRAIN, &(spu->tiNew)) == -1) {
ERR ("%s", "Unable to apply new speed settings.");
}
}
uint32_t uart_get_speed(serial_port sp)
uint32_t
uart_get_speed (serial_port sp)
{
uint32_t uiPortSpeed = 0;
const serial_port_unix* spu = (serial_port_unix*)sp;
switch (cfgetispeed(&spu->tiNew))
{
case B9600: uiPortSpeed = 9600;
const serial_port_unix *spu = (serial_port_unix *) sp;
switch (cfgetispeed (&spu->tiNew)) {
case B9600:
uiPortSpeed = 9600;
break;
case B19200: uiPortSpeed = 19200;
case B19200:
uiPortSpeed = 19200;
break;
case B38400: uiPortSpeed = 38400;
case B38400:
uiPortSpeed = 38400;
break;
#ifdef B57600
case B57600: uiPortSpeed = 57600;
# ifdef B57600
case B57600:
uiPortSpeed = 57600;
break;
#endif
#ifdef B115200
case B115200: uiPortSpeed = 115200;
# endif
# ifdef B115200
case B115200:
uiPortSpeed = 115200;
break;
#endif
#ifdef B230400
case B230400: uiPortSpeed = 230400;
# endif
# ifdef B230400
case B230400:
uiPortSpeed = 230400;
break;
#endif
#ifdef B460800
case B460800: uiPortSpeed = 460800;
# endif
# ifdef B460800
case B460800:
uiPortSpeed = 460800;
break;
#endif
# endif
}
return uiPortSpeed;
}
void uart_close(const serial_port sp)
void
uart_close (const serial_port sp)
{
if (((serial_port_unix*)sp)->fd >= 0) {
tcsetattr(((serial_port_unix*)sp)->fd,TCSANOW,&((serial_port_unix*)sp)->tiOld);
close(((serial_port_unix*)sp)->fd);
if (((serial_port_unix *) sp)->fd >= 0) {
tcsetattr (((serial_port_unix *) sp)->fd, TCSANOW, &((serial_port_unix *) sp)->tiOld);
close (((serial_port_unix *) sp)->fd);
}
free(sp);
free (sp);
}
/**
@ -199,11 +211,11 @@ void uart_close(const serial_port sp)
* @return 0 on success, otherwise driver error code
*/
int
uart_receive(serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
uart_receive (serial_port sp, byte_t * pbtRx, size_t * pszRxLen)
{
int res;
int byteCount;
fd_set rfds;
int res;
int byteCount;
fd_set rfds;
struct timeval tv;
// Reset the output count
@ -211,37 +223,34 @@ uart_receive(serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
do {
// Reset file descriptor
FD_ZERO(&rfds);
FD_SET(((serial_port_unix*)sp)->fd,&rfds);
FD_ZERO (&rfds);
FD_SET (((serial_port_unix *) sp)->fd, &rfds);
tv = timeout;
res = select(((serial_port_unix*)sp)->fd+1, &rfds, NULL, NULL, &tv);
res = select (((serial_port_unix *) sp)->fd + 1, &rfds, NULL, NULL, &tv);
// Read error
if (res < 0) {
DBG("%s", "RX error.");
DBG ("%s", "RX error.");
return DEIO;
}
// Read time-out
if (res == 0) {
if (*pszRxLen == 0) {
// Error, we received no data
DBG("%s", "RX time-out, buffer empty.");
DBG ("%s", "RX time-out, buffer empty.");
return DETIMEOUT;
} else {
// We received some data, but nothing more is available
return 0;
}
}
// Retrieve the count of the incoming bytes
res = ioctl(((serial_port_unix*)sp)->fd, FIONREAD, &byteCount);
res = ioctl (((serial_port_unix *) sp)->fd, FIONREAD, &byteCount);
if (res < 0) {
return DEIO;
}
// There is something available, read the data
res = read(((serial_port_unix*)sp)->fd,pbtRx+(*pszRxLen),byteCount);
res = read (((serial_port_unix *) sp)->fd, pbtRx + (*pszRxLen), byteCount);
// Stop if the OS has some troubles reading the data
if (res <= 0) {
@ -261,36 +270,33 @@ uart_receive(serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
* @return 0 on success, otherwise a driver error is returned
*/
int
uart_send(serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
uart_send (serial_port sp, const byte_t * pbtTx, const size_t szTxLen)
{
int32_t res;
size_t szPos = 0;
fd_set rfds;
size_t szPos = 0;
fd_set rfds;
struct timeval tv;
while (szPos < szTxLen)
{
while (szPos < szTxLen) {
// Reset file descriptor
FD_ZERO(&rfds);
FD_SET(((serial_port_unix*)sp)->fd,&rfds);
FD_ZERO (&rfds);
FD_SET (((serial_port_unix *) sp)->fd, &rfds);
tv = timeout;
res = select(((serial_port_unix*)sp)->fd+1, NULL, &rfds, NULL, &tv);
res = select (((serial_port_unix *) sp)->fd + 1, NULL, &rfds, NULL, &tv);
// Write error
if (res < 0) {
DBG("%s", "TX error.");
DBG ("%s", "TX error.");
return DEIO;
}
// Write time-out
if (res == 0) {
DBG("%s", "TX time-out.");
DBG ("%s", "TX time-out.");
return DETIMEOUT;
}
// Send away the bytes
res = write(((serial_port_unix*)sp)->fd,pbtTx+szPos,szTxLen-szPos);
res = write (((serial_port_unix *) sp)->fd, pbtTx + szPos, szTxLen - szPos);
// Stop if the OS has some troubles sending the data
if (res <= 0) {
return DEIO;
@ -304,109 +310,109 @@ uart_send(serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
#else
// The windows serial port implementation
typedef struct {
HANDLE hPort; // Serial port handle
DCB dcb; // Device control settings
COMMTIMEOUTS ct; // Serial port time-out configuration
typedef struct {
HANDLE hPort; // Serial port handle
DCB dcb; // Device control settings
COMMTIMEOUTS ct; // Serial port time-out configuration
} serial_port_windows;
serial_port uart_open(const char* pcPortName)
serial_port
uart_open (const char *pcPortName)
{
char acPortName[255];
serial_port_windows* sp = malloc(sizeof(serial_port_windows));
char acPortName[255];
serial_port_windows *sp = malloc (sizeof (serial_port_windows));
// Copy the input "com?" to "\\.\COM?" format
sprintf(acPortName,"\\\\.\\%s",pcPortName);
_strupr(acPortName);
sprintf (acPortName, "\\\\.\\%s", pcPortName);
_strupr (acPortName);
// Try to open the serial port
sp->hPort = CreateFileA(acPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (sp->hPort == INVALID_HANDLE_VALUE)
{
uart_close(sp);
sp->hPort = CreateFileA (acPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (sp->hPort == INVALID_HANDLE_VALUE) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
// Prepare the device control
memset(&sp->dcb, 0, sizeof(DCB));
sp->dcb.DCBlength = sizeof(DCB);
if(!BuildCommDCBA("baud=9600 data=8 parity=N stop=1",&sp->dcb))
{
uart_close(sp);
memset (&sp->dcb, 0, sizeof (DCB));
sp->dcb.DCBlength = sizeof (DCB);
if (!BuildCommDCBA ("baud=9600 data=8 parity=N stop=1", &sp->dcb)) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
// Update the active serial port
if(!SetCommState(sp->hPort,&sp->dcb))
{
uart_close(sp);
if (!SetCommState (sp->hPort, &sp->dcb)) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
sp->ct.ReadIntervalTimeout = 0;
sp->ct.ReadTotalTimeoutMultiplier = 0;
sp->ct.ReadTotalTimeoutConstant = 30;
sp->ct.ReadIntervalTimeout = 0;
sp->ct.ReadTotalTimeoutMultiplier = 0;
sp->ct.ReadTotalTimeoutConstant = 30;
sp->ct.WriteTotalTimeoutMultiplier = 0;
sp->ct.WriteTotalTimeoutConstant = 30;
sp->ct.WriteTotalTimeoutConstant = 30;
if(!SetCommTimeouts(sp->hPort,&sp->ct))
{
uart_close(sp);
if (!SetCommTimeouts (sp->hPort, &sp->ct)) {
uart_close (sp);
return INVALID_SERIAL_PORT;
}
PurgeComm(sp->hPort, PURGE_RXABORT | PURGE_RXCLEAR);
PurgeComm (sp->hPort, PURGE_RXABORT | PURGE_RXCLEAR);
return sp;
}
void uart_close(const serial_port sp)
void
uart_close (const serial_port sp)
{
if (((serial_port_windows*)sp)->hPort != INVALID_HANDLE_VALUE) {
CloseHandle(((serial_port_windows*)sp)->hPort);
if (((serial_port_windows *) sp)->hPort != INVALID_HANDLE_VALUE) {
CloseHandle (((serial_port_windows *) sp)->hPort);
}
free(sp);
free (sp);
}
void uart_set_speed(serial_port sp, const uint32_t uiPortSpeed)
void
uart_set_speed (serial_port sp, const uint32_t uiPortSpeed)
{
serial_port_windows* spw;
serial_port_windows *spw;
DBG("Serial port speed requested to be set to %d bauds.", uiPortSpeed);
DBG ("Serial port speed requested to be set to %d bauds.", uiPortSpeed);
// Set port speed (Input and Output)
switch(uiPortSpeed) {
case 9600:
case 19200:
case 38400:
case 57600:
case 115200:
case 230400:
case 460800:
switch (uiPortSpeed) {
case 9600:
case 19200:
case 38400:
case 57600:
case 115200:
case 230400:
case 460800:
break;
default:
ERR("Unable to set serial port speed to %d bauds. Speed value must be one of these constants: 9600 (default), 19200, 38400, 57600, 115200, 230400 or 460800.", uiPortSpeed);
default:
ERR
("Unable to set serial port speed to %d bauds. Speed value must be one of these constants: 9600 (default), 19200, 38400, 57600, 115200, 230400 or 460800.",
uiPortSpeed);
};
spw = (serial_port_windows*)sp;
spw = (serial_port_windows *) sp;
spw->dcb.BaudRate = uiPortSpeed;
if (!SetCommState(spw->hPort, &spw->dcb))
{
ERR("Unable to apply new speed settings.");
if (!SetCommState (spw->hPort, &spw->dcb)) {
ERR ("Unable to apply new speed settings.");
}
}
uint32_t uart_get_speed(const serial_port sp)
uint32_t
uart_get_speed (const serial_port sp)
{
const serial_port_windows* spw = (serial_port_windows*)sp;
if (!GetCommState(spw->hPort, (serial_port)&spw->dcb))
const serial_port_windows *spw = (serial_port_windows *) sp;
if (!GetCommState (spw->hPort, (serial_port) & spw->dcb))
return spw->dcb.BaudRate;
return 0;
}
int uart_receive(serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
int
uart_receive (serial_port sp, byte_t * pbtRx, size_t * pszRxLen)
{
if (!ReadFile(((serial_port_windows*)sp)->hPort,pbtRx,*pszRxLen,(LPDWORD)pszRxLen,NULL)) {
if (!ReadFile (((serial_port_windows *) sp)->hPort, pbtRx, *pszRxLen, (LPDWORD) pszRxLen, NULL)) {
return DEIO;
}
if (!*pszRxLen)
@ -414,10 +420,11 @@ int uart_receive(serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
return 0;
}
int uart_send(serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
int
uart_send (serial_port sp, const byte_t * pbtTx, const size_t szTxLen)
{
DWORD dwTxLen = 0;
if (!WriteFile(((serial_port_windows*)sp)->hPort,pbtTx,szTxLen,&dwTxLen,NULL)) {
DWORD dwTxLen = 0;
if (!WriteFile (((serial_port_windows *) sp)->hPort, pbtTx, szTxLen, &dwTxLen, NULL)) {
return DEIO;
}
if (!dwTxLen)

View file

@ -24,68 +24,67 @@
*/
#ifndef __NFC_BUS_UART_H__
#define __NFC_BUS_UART_H__
# define __NFC_BUS_UART_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
#include <nfc/nfc-types.h>
# include <nfc/nfc-types.h>
// Handle platform specific includes
#ifndef _WIN32
#include <termios.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
#include <sys/time.h>
# ifndef _WIN32
# include <termios.h>
# include <sys/ioctl.h>
# include <unistd.h>
# include <fcntl.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <limits.h>
# include <sys/time.h>
// unistd.h is needed for usleep() fct.
#include <unistd.h>
#define delay_ms( X ) usleep( X * 1000 )
#else
#include <windows.h>
# include <unistd.h>
# define delay_ms( X ) usleep( X * 1000 )
# else
# include <windows.h>
#define snprintf _snprintf
#define strdup _strdup
#define delay_ms( X ) Sleep( X )
#endif
# define snprintf _snprintf
# define strdup _strdup
# define delay_ms( X ) Sleep( X )
# endif
// Path to the serial port is OS-dependant.
// Try to guess what we should use.
//
// XXX: Some review from users cross-compiling is welcome!
#if defined (_WIN32)
#define DEFAULT_SERIAL_PORTS { "COM1", "COM2", "COM3", "COM4", NULL }
#elif defined(__APPLE__)
# if defined (_WIN32)
# define DEFAULT_SERIAL_PORTS { "COM1", "COM2", "COM3", "COM4", NULL }
# elif defined(__APPLE__)
// XXX: find UART connection string for PN53X device on Mac OS X when multiples devices are used
#define DEFAULT_SERIAL_PORTS { "/dev/tty.SLAB_USBtoUART", NULL }
#elif defined (__FreeBSD__) || defined (__OpenBSD__)
# define DEFAULT_SERIAL_PORTS { "/dev/tty.SLAB_USBtoUART", NULL }
# elif defined (__FreeBSD__) || defined (__OpenBSD__)
// XXX: Not tested
#define DEFAULT_SERIAL_PORTS { "/dev/cuau0", "/dev/cuau1", "/dev/cuau2", "/dev/cuau3", NULL }
#elif defined (__linux__)
#define DEFAULT_SERIAL_PORTS { "/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3", "/dev/tty0", "/dev/tty1", "/dev/tty2", "/dev/tty3", NULL }
#else
#error "Can't determine serial string for your system"
#endif
# define DEFAULT_SERIAL_PORTS { "/dev/cuau0", "/dev/cuau1", "/dev/cuau2", "/dev/cuau3", NULL }
# elif defined (__linux__)
# define DEFAULT_SERIAL_PORTS { "/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3", "/dev/tty0", "/dev/tty1", "/dev/tty2", "/dev/tty3", NULL }
# else
# error "Can't determine serial string for your system"
# endif
// Define shortcut to types to make code more readable
typedef void* serial_port;
#define INVALID_SERIAL_PORT (void*)(~1)
#define CLAIMED_SERIAL_PORT (void*)(~2)
typedef void *serial_port;
# define INVALID_SERIAL_PORT (void*)(~1)
# define CLAIMED_SERIAL_PORT (void*)(~2)
serial_port uart_open(const char* pcPortName);
void uart_close(const serial_port sp);
serial_port uart_open (const char *pcPortName);
void uart_close (const serial_port sp);
void uart_set_speed(serial_port sp, const uint32_t uiPortSpeed);
uint32_t uart_get_speed(const serial_port sp);
void uart_set_speed (serial_port sp, const uint32_t uiPortSpeed);
uint32_t uart_get_speed (const serial_port sp);
int uart_receive(serial_port sp, byte_t* pbtRx, size_t* pszRxLen);
int uart_send(serial_port sp, const byte_t* pbtTx, const size_t szTxLen);
int uart_receive (serial_port sp, byte_t * pbtRx, size_t * pszRxLen);
int uart_send (serial_port sp, const byte_t * pbtTx, const size_t szTxLen);
#endif // __NFC_BUS_UART_H__