Files
harbour-core/harbour/contrib/hbct/ctcom.ch
Przemyslaw Czerpak 9d13008427 2010-05-12 02:26 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/external/minizip/ioapi.h
    ! fixed FreeBSD and HAIKU builds

  * harbour/src/rtl/fserr.c
    * added translation for EPERM

  * harbour/include/Makefile
  + harbour/include/hbapicom.h
  * harbour/src/rtl/Makefile
  + harbour/src/rtl/hbcom.c
    + added Harbour multiplatform serial port C API (hb_com*() functions).
      implemented code for *nixes, MS-Windows and OS2. DOS is not supported
      yet. Please make test on different platforms.
    ; few notes about this code:
      termios (*nix) based builds:
         - reading LSR is not supported
         - duration in break signal is fixed (at least 0.25 seconds, and not
           more that 0.5 seconds)
         - DTR/DSR hardware flow control is not supported
         - setting error character is not supported
         - discard card is supported only on few platforms
         - checking input/output flow state is not supported
         - if some platforms do not support some termio extensions then
           compile time warnings TODO_* should be generated.
      MS-Windows builds:
         - discard card is not supported
      OS2 builds:
         - checking for input flow state is not supported
         - discard card is not supported
      In all builds not all RS-232 hardware flags/state are available.
      OS2 build supports most of them,

      This code needs to be extensively tested. I wrote it without any
      serious tests. Especially OS2 builds should be verified by OS2
      users. I wrote this port using only documentation which OS2 API
      available in the Internet.

      DOS is not supported yet though it's possible to compile termio code
      for *nixes with DJGPP. Anyhow it would be very nice if we can add
      our own DOS serial port code. I would like to ask if any of you
      has low level serial port code in C for DOS (i.e. used with Clipper)
      and can send it to us so we can use it with Harbour. I have my
      own serial port library for Clipper but it's written in assembler
      and it's much wider then sth what we need so it cannot be easy
      adopted for Harbour.

  * harbour/contrib/hbct/Makefile
  + harbour/contrib/hbct/ctcom1.c
  + harbour/contrib/hbct/ctcom.ch
  + harbour/contrib/hbct/ctcom2.c
    + added CT3 compatible COM_*() functions.
    + added CT3 compatible XMOBLOCK(), XMOCHECK(), ZEROINSERT() and
      ZEROREMOVE() functions.
    + added new CT COM function:
         COM_DEVNAME( <nComPort> [, <cNewName> ] ) -> <cPrevName>
      which can be used to specify device name for given port in modern
      systems which do not give direct hardware access for the process.
    ; few notes about CT3 COM_*() functions in Harbour.
      In COM_OPEN() only 1-st parameter is significant, input/output buffer
      sizes and trap mode parameters are ignored. In modern OS-es such
      functionality is controlled by OS and usually buffered read/write
      is always enabled. The sizes of IO buffers can be used only as
      suggested IO buffer size for OS in some systems. It's possible that
      these additional parameters will be used in DOS builds in the future.
      COM_READ() does not support 2-nd parameter <lNoDelete>. It can be
      implemented but because we do not have direct access to OS buffers
      then we will have to emulate it ourselves what is rather inefficient.
      Anyhow I can implement it if users think it's critical.
      In COM_CRC() I fixed few CT3 bugs so it's not bug compatible with CT3,
      i.e. it works correctly for 8 bit and smaller polynomials instead of
      returning 0 or supports much larger polynomials up to 64bits.
      For 16/17 bit polynomials it gives the same results as CT3 so for most
      common usage it should be binary compatible with CT3.
      In ZEROREMOVE() I fixed decoding some wrong CCITT strings which does
      not have trailing 0 so it returns empty string "" for such corrupted
      data. If someone needs original CT3 behavior for some broken code then
      is can be enabled by HB_CT3_ZEROREMOVE_BUG macro.

      I haven't implemented few functions.
      COM_GETIO(), COM_SETIO(), COM_GETIRQ(), COM_SETIRQ() are not portable
      and can be implemented only for really few platforms, i.e. for DOS
      when/if we add support for serial ports to Harbour DOS builds.
      Similar functionality for all other platforms gives our new function
      COM_DEVNAME().
      COM_KEY(), COM_SKEY() and COM_EVENT() are also not implemented.
      To make them well we should add support for asynchronous events to HVM
      and such extension is still unavailable. Some simulation can be
      implemented using idle tasks but this can be done also by final
      Harbour users so I decided to not make it.

      Please test it - I've never used CT3 COM_*() API with Clipper.

  * harbour/contrib/hbct/dummy.c
    * removed dummy CT3 serial communication functions
    ; such files with dummy functions introduces very serious problems for
      user code because they do not respect original module granularity
      effectively breaking overloading only chosen functions so it breaks
      also some real Clipper code.
2010-05-12 00:27:04 +00:00

99 lines
4.3 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* constant values for CT3 serial communication COM_*() functions
*
* Copyright 2010 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
* www - http://www.harbour-project.org
*
* 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
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/* COM_MCR() */
#define MCR_ERROR 0 /* Parameter error */
#define MCR_DTR 1 /* Data terminal ready (DTR) */
#define MCR_RTS 2 /* Request to send (RTS) */
#define MCR_OUT_1 4 /* OUT 1 */
#define MCR_OUT_2 8 /* OUT 2 */
#define MCR_LOOP 16 /* LOOP */
/* COM_MSR() */
#define MSR_ERROR 0 /* Parameter error */
#define MSR_DELTA_CTS 1 /* DELTA ready to send (DCTS) */
#define MSR_DELTA_DSR 2 /* DELTA data terminal ready (DDSR) */
#define MSR_TERI 4 /* Trailing edge RING (TERI) */
#define MSR_DELTA_DCD 8 /* DELTA data carrier detected (DDCD) */
#define MSR_CTS 16 /* Clear to send (CTS) */
#define MSR_DSR 32 /* Data terminal ready (DSR) */
#define MSR_RI 64 /* RING indicator (RI) */
#define MSR_DCD 128 /* Data carrier detected (DCD) */
/* COM_LSR() */
#define LSR_ERROR 0 /* Parameter error */
#define LSR_DATA_READY 1 /* Data ready */
#define LSR_OVERRUN_ERR 2 /* Overflow error */
#define LSR_PARITY_ERR 4 /* Parity error */
#define LSR_FRAMING_ERR 8 /* Framing error */
#define LSR_BREAK 16 /* BREAK recognized */
#define LSR_TRANS_HOLD_EMPTY 32 /* Transmission holder register empty */
#define LSR_TRANS_EMPTY 64 /* TX shift register empty */
/* COM_SMODE() */
#define SMODE_EMPTY 1 /* Sending buffer empty */
#define SMODE_SOFT 2 /* Wait for software handshake release(XON) */
#define SMODE_HARD 4 /* Wait for hardware handshake release(CTS) */
#define SMODE_RFLUSH 8 /* Deleted from remote station */
/* COM_CRC() polynomials */
#define Parity 3 /* 2^1 + 1^0 */
#define LCR_8 257 /* 2^8 + 1^0 */
#define CRC_12 5011 /* 2^12 + 2^11 + 2^3 + 2^2 + 2^1 + 1^0 */
#define CRC_16_X25 69665 /* 2^16 + 2^12 + 2^5 + 1^0 */
#define CRC_16 98309 /* 2^16 + 2^15 + 2^2 + 1^0 */