Added untested Serial Port transport add-on.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3740 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
cca5b73672
commit
37b3e403fe
14
src/add-ons/print/transports/serial_port/Jamfile
Normal file
14
src/add-ons/print/transports/serial_port/Jamfile
Normal file
@ -0,0 +1,14 @@
|
||||
SubDir OBOS_TOP src add-ons print transports serial_port ;
|
||||
|
||||
SubDirHdrs [ FDirName $(OBOS_TOP) src add-ons print transports shared ] ;
|
||||
|
||||
UsePrivateHeaders interface print ;
|
||||
|
||||
Addon Serial\ Port
|
||||
: print transport
|
||||
: print_transport.cpp
|
||||
;
|
||||
|
||||
LinkSharedOSLibs Serial\ Port : be libtransportaddon.a
|
||||
;
|
||||
|
89
src/add-ons/print/transports/serial_port/print_transport.cpp
Normal file
89
src/add-ons/print/transports/serial_port/print_transport.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
/*****************************************************************************/
|
||||
// Serial port transport add-on.
|
||||
//
|
||||
// Author
|
||||
// Michael Pfeiffer
|
||||
//
|
||||
// This application and all source files used in its construction, except
|
||||
// where noted, are licensed under the MIT License, and have been written
|
||||
// and are:
|
||||
//
|
||||
// Copyright (c) 2001-2003 OpenBeOS Project
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the "Software"),
|
||||
// to deal in the Software without restriction, including without limitation
|
||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
// and/or sell copies of the Software, and to permit persons to whom the
|
||||
// Software is furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <StorageKit.h>
|
||||
#include <SupportKit.h>
|
||||
|
||||
#include "TransportAddOn.h"
|
||||
|
||||
class SerialPort : public BDataIO {
|
||||
int fFile;
|
||||
|
||||
public:
|
||||
SerialPort(BDirectory* printer, BMessage* msg);
|
||||
~SerialPort();
|
||||
|
||||
status_t InitCheck() { return fFile > -1 ? B_OK : B_ERROR; }
|
||||
|
||||
ssize_t Read(void* buffer, size_t size);
|
||||
ssize_t Write(const void* buffer, size_t size);
|
||||
};
|
||||
|
||||
// Impelmentation of SerialPort
|
||||
SerialPort::SerialPort(BDirectory* printer, BMessage* msg)
|
||||
: fFile(-1)
|
||||
{
|
||||
char address[80];
|
||||
char device[B_PATH_NAME_LENGTH];
|
||||
|
||||
int size = printer->ReadAttr("transport_address", B_STRING_TYPE, 0, address, sizeof(address));
|
||||
if (size <= 0 || size >= sizeof(address)) return;
|
||||
address[size] = 0; // make sure string is 0-terminated
|
||||
|
||||
strcat(strcpy(device, "/dev/port/"), address);
|
||||
fFile = open(device, O_RDWR | O_EXCL | O_BINARY, 0);
|
||||
}
|
||||
|
||||
SerialPort::~SerialPort() {
|
||||
if (InitCheck() == B_OK) {
|
||||
close(fFile); fFile = -1;
|
||||
}
|
||||
}
|
||||
|
||||
ssize_t SerialPort::Read(void* buffer, size_t size) {
|
||||
return read(fFile, buffer, size);
|
||||
}
|
||||
|
||||
ssize_t SerialPort::Write(const void* buffer, size_t size) {
|
||||
return write(fFile, buffer, size);
|
||||
}
|
||||
|
||||
BDataIO* instanciate_transport(BDirectory* printer, BMessage* msg) {
|
||||
SerialPort* transport = new SerialPort(printer, msg);
|
||||
if (transport->InitCheck() == B_OK) {
|
||||
return transport;
|
||||
} else {
|
||||
delete transport; return NULL;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user