serial_port_export.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 353 行
C
353 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * 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 version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */#include <javacall_serial.h>#include <serial_port_export.h>#include <midpServices.h>#include <midp_thread.h>#include <kni.h>#include <sni.h>/** * Open a serial port by logical device name. * * @param pszDeviceName logical name of the port (for example, COM1) * @param baudRate baud rate to set the port at * @param options options for the serial port * bit 0: 0 - 1 stop bit, 1 - 2 stop bits * bit 2-1: 00 - no parity, 01 - odd parity, 10 - even parity * bit 4: 0 - no auto RTS, 1 - set auto RTS * bit 5: 0 - no auto CTS, 1 - set auto CTS * bit 7-6: 01 - 7 bits per symbol, 11 - 8 bits per symbol * @param pHandle returns the connection handle; it is * set only when this function returns PCSL_NET_SUCCESS * @param pContext filled by ptr to data for reinvocations * * @return PCSL_NET_SUCCESS for successful read operation;\n * PCSL_NET_WOULDBLOCK if the operation would block,\n * PCSL_NET_INTERRUPTED for an Interrupted IO Exception,\n * PCSL_NET_IOERROR for all other errors */intopenPortByNameStart(char* pszDeviceName, int baudRate, int options, int *pHandle, void **pContext){ javacall_handle hPort = (javacall_handle)-1; javacall_result ret; int returnStatus = PCSL_NET_IOERROR; /* Javacall implementation never uses contect */ (void)pContext; ret = javacall_serial_open_start(pszDeviceName, baudRate, options, &hPort); *pHandle = (int)hPort; switch (ret) { case JAVACALL_OK: returnStatus = PCSL_NET_SUCCESS; break; case JAVACALL_WOULD_BLOCK: returnStatus = PCSL_NET_WOULDBLOCK; break; default: break; } return returnStatus;}/** * Open a serial port by system dependent device name. * * @param pszDeviceName device name of the port * @param baudRate baud rate to set the port at * @param options options for the serial port * bit 0: 0 - 1 stop bit, 1 - 2 stop bits * bit 2-1: 00 - no parity, 01 - odd parity, 10 - even parity * bit 4: 0 - no auto RTS, 1 - set auto RTS * bit 5: 0 - no auto CTS, 1 - set auto CTS * bit 7-6: 01 - 7 bits per symbol, 11 - 8 bits per symbol * @param pHandle returns the connection handle; it is * set only when this function returns PCSL_NET_SUCCESS * @param context ptr to data saved before sleeping * * @return PCSL_NET_SUCCESS for successful read operation;\n * PCSL_NET_WOULDBLOCK if the operation would block,\n * PCSL_NET_INTERRUPTED for an Interrupted IO Exception,\n * PCSL_NET_IOERROR for all other errors */int openPortByNameFinish(char* pszDeviceName, int baudRate, int options, int *pHandle, void *context) { javacall_handle hPort = (javacall_handle)*pHandle; javacall_result ret; int returnStatus = PCSL_NET_IOERROR; /* Javacall implementation never uses contect */ (void)context; (void)pszDeviceName; (void)baudRate; (void)options; ret = javacall_serial_open_finish(hPort); switch (ret) { case JAVACALL_OK: returnStatus = PCSL_NET_SUCCESS; break; case JAVACALL_WOULD_BLOCK: returnStatus = PCSL_NET_WOULDBLOCK; break; default: break; } return returnStatus;}/** * Configure a serial port optional parameters. * * @param hPort port number * @param baudRate baudRate rate to set the port at * @param options options for the serial port: * bit 0: 0 - 1 stop bit, 1 - 2 stop bits * bit 2-1: 00 - no parity, 01 - odd parity, 10 - even parity * bit 4: 0 - no auto RTS, 1 - set auto RTS * bit 5: 0 - no auto CTS, 1 - set auto CTS * bit 7-6: 01 - 7 bits per symbol, 11 - 8 bits per symbol * * @return PCSL_NET_SUCCESS for successful configure operation;\n * PCSL_NET_IOERROR for any error */int configurePort(int hPort, int baudRate, unsigned int options) { int ret_v = PCSL_NET_IOERROR; if (JAVACALL_OK == javacall_serial_configure((javacall_handle)hPort, baudRate, options)) { ret_v = PCSL_NET_SUCCESS; } return ret_v;}/** * Close a serial port. * * @param hPort handle to a native serial port */void closePort(int hPort){ javacall_result ret; void* context = NULL; MidpReentryData* info = (MidpReentryData*)SNI_GetReentryData(NULL); if (info == NULL) { //first invocation ret = javacall_serial_close_start((javacall_handle)hPort); } else { /* Reinvocation */ hPort = info->descriptor; context = info->pResult; ret = javacall_serial_close_finish((javacall_handle)hPort); } if (JAVACALL_WOULD_BLOCK == ret) { midp_thread_wait(COMM_CLOSE_SIGNAL, hPort, context); }}/** * Write to a serial port without blocking. * * @param hPort handle to a native serial port * @param pBuffer I/O buffer * @param nNumberOfBytesToWrite length of data * @param pBytesWritten returns the number of bytes written after * successful write operation; only set if this function returns * PCSL_NET_SUCCESS * @param pContext filled by ptr to data for reinvocations * * @return PCSL_NET_SUCCESS for successful write operation;\n * PCSL_NET_WOULDBLOCK if the operation would block,\n * PCSL_NET_INTERRUPTED for an Interrupted IO Exception\n * PCSL_NET_IOERROR for all other errors */int writeToPortStart(int hPort, char* pBuffer, int nNumberOfBytesToWrite, int* pBytesWritten, void **pContext) { int status = PCSL_NET_IOERROR; /* Javacall implementation never returns PCSL_NET_WOULDBLOCK */ (void)pContext; if (nNumberOfBytesToWrite == 0) { *pBytesWritten = 0; status = PCSL_NET_SUCCESS; } else { javacall_result ret; ret = javacall_serial_write_start((javacall_handle) hPort, (unsigned char*) pBuffer, nNumberOfBytesToWrite, pBytesWritten); switch (ret) { case JAVACALL_OK: status = PCSL_NET_SUCCESS; break; case JAVACALL_WOULD_BLOCK: status = PCSL_NET_WOULDBLOCK; break; default: break; } } return status;}/** * Write to a serial port without blocking. * * @param hPort handle to a native serial port * @param pBuffer I/O buffer * @param nNumberOfBytesToWrite length of data * @param pBytesWritten returns the number of bytes written after * successful write operation; only set if this function returns * PCSL_NET_SUCCESS * @param context ptr to data saved before sleeping * * @return PCSL_NET_SUCCESS for successful write operation;\n * PCSL_NET_WOULDBLOCK if the operation would block,\n * PCSL_NET_INTERRUPTED for an Interrupted IO Exception\n * PCSL_NET_IOERROR for all other errors */int writeToPortFinish(int hPort, char* pBuffer, int nNumberOfBytesToWrite, int* pBytesWritten, void *context) { int status = PCSL_NET_IOERROR; (void)context; if (nNumberOfBytesToWrite == 0) { *pBytesWritten = 0; status = PCSL_NET_SUCCESS; } else { javacall_result ret; ret = javacall_serial_write_finish((javacall_handle) hPort, (unsigned char*) pBuffer, nNumberOfBytesToWrite, pBytesWritten); switch (ret) { case JAVACALL_OK: status = PCSL_NET_SUCCESS; break; case JAVACALL_WOULD_BLOCK: status = PCSL_NET_WOULDBLOCK; break; default: break; } } return status;}/** * Read from a serial port. * * @param hPort handle to a native serial port * @param pBuffer I/O buffer * @param nNumberOfBytesToRead length of data * @param pBytesRead returns the number of bytes actually read; it is * set only when this function returns PCSL_NET_SUCCESS * @param pContext filled by ptr to data for reinvocations * * @return PCSL_NET_SUCCESS for successful read operation;\n * PCSL_NET_WOULDBLOCK if the operation would block,\n * PCSL_NET_INTERRUPTED for an Interrupted IO Exception,\n * PCSL_NET_IOERROR for all other errors */int readFromPortStart(int hPort, char* pBuffer, int nNumberOfBytesToRead, int* pBytesRead, void **pContext) { int status = PCSL_NET_IOERROR; /* Linux implementation never returns PCSL_NET_WOULDBLOCK */ (void)pContext; if (nNumberOfBytesToRead == 0) { *pBytesRead = 0; status = PCSL_NET_SUCCESS; } else { javacall_result ret; ret = javacall_serial_read_start((javacall_handle) hPort, (unsigned char*) pBuffer, nNumberOfBytesToRead, pBytesRead); switch (ret) { case JAVACALL_OK: status = PCSL_NET_SUCCESS; break; case JAVACALL_WOULD_BLOCK: status = PCSL_NET_WOULDBLOCK; break; default: break; } } return status;}/** * Read from a serial port. * * @param hPort handle to a native serial port * @param pBuffer I/O buffer * @param nNumberOfBytesToRead length of data * @param pBytesRead returns the number of bytes actually read; it is * set only when this function returns PCSL_NET_SUCCESS * @param context ptr to data saved before sleeping * * @return PCSL_NET_SUCCESS for successful read operation;\n * PCSL_NET_WOULDBLOCK if the operation would block,\n * PCSL_NET_INTERRUPTED for an Interrupted IO Exception,\n * PCSL_NET_IOERROR for all other errors */int readFromPortFinish(int hPort, char* pBuffer, int nNumberOfBytesToRead, int* pBytesRead, void *context) { int status = PCSL_NET_IOERROR; (void)context; if (nNumberOfBytesToRead == 0) { *pBytesRead = 0; status = PCSL_NET_SUCCESS; } else { javacall_result ret; ret = javacall_serial_read_finish((javacall_handle) hPort, (unsigned char*) pBuffer, nNumberOfBytesToRead, pBytesRead); switch (ret) { case JAVACALL_OK: status = PCSL_NET_SUCCESS; break; case JAVACALL_WOULD_BLOCK: status = PCSL_NET_WOULDBLOCK; break; default: break; } } return status;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?