--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/cstdlib/TSTLIB/tser1.c Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+#include <stdlib.h> /* definition of exit() */
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/unistd.h>
+#include <sys/ioctl.h>
+#include "CTEST.H"
+
+
+int GlobalPort;
+
+test_Data;
+int close_console=0;
+
+/**
+@SYMTestCaseID SYSLIB-STDLIB-CT-1099
+@SYMTestCaseDesc Tests for serial port
+@SYMTestPriority High
+@SYMTestActions Tests for serial port,and under posix server
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+void DoTests(char*port)
+ {
+ int port1, port2;
+ int int1 = 0;
+ int int2 = 0;
+ int ret=0;
+ int sigs[] = {0,0};
+ int sig = 0;
+
+ SerialConfig config;
+ SerialConfig newconfig;
+
+ char buffer[1024];
+ size_t size = 100;
+
+ memset(&newconfig, 0, sizeof(newconfig));
+
+ test_Next("Open port");
+
+ port1 = open(port, 0); //exclusive
+ if (-1 != port1)
+ {
+
+ //this one should fail
+ port2 = open(port, 0);
+ test_errno(-1==port2, EACCES);
+
+
+ test_Next("set signals");
+ //play with the signals
+ ret = ioctl(port1, COMMIOCTL_SETSIGNALS, &sigs[0]);
+ test(-1 != ret);
+
+ test_Next("get signals");
+ ret = ioctl(port1, COMMIOCTL_GETSIGNALS, &sig);
+ test(-1 != ret);
+
+ //try changing the settings
+ test_Next("port configuration");
+ ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config);
+
+ config.iRate = Bps115200;
+ config.iDataBits = DBits6;
+ config.iStopBits=Stop2;
+ config.iParity=ParityOdd;
+ config.iHandshake=0;
+ config.iParityError=ConfigParityErrorFail;
+ config.iFifo=3;
+ config.iSpecialRate=0;
+ config.iTerminatorCount=0;
+ config.iTerminator[0]=0;
+ config.iXonChar=1;
+ config.iXoffChar=2;
+ config.iParityErrorChar=3;
+ config.iSIREnable=SIRDisable;
+ config.iSIRSettings=0;
+
+ ret = ioctl(port1, COMMIOCTL_SETCONFIG, &config);
+ ret = ioctl(port1, COMMIOCTL_GETCONFIG, &newconfig);
+
+ test(config.iRate == newconfig.iRate);
+ test(config.iDataBits==newconfig.iDataBits);
+ test(config.iStopBits==newconfig.iStopBits);
+ test(config.iParity==newconfig.iParity);
+ test(config.iHandshake==newconfig.iHandshake);
+ test(config.iParityError==newconfig.iParityError);
+ test(config.iFifo==newconfig.iFifo);
+ test(config.iSpecialRate==newconfig.iSpecialRate);
+ test(config.iTerminatorCount==newconfig.iTerminatorCount);
+ test(config.iTerminator[0]==newconfig.iTerminator[0]);
+ test(config.iXonChar==newconfig.iXonChar);
+ test(config.iXoffChar==newconfig.iXoffChar);
+ test(config.iParityErrorChar==newconfig.iParityErrorChar);
+ test(config.iSIREnable==newconfig.iSIREnable);
+ test(config.iSIRSettings==newconfig.iSIRSettings);
+
+ test_Next("Buffer lengths");
+ int1 = 0;
+ ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &int1);
+ test(ret != -1);
+ test(int1 != 0);
+
+ int1 = 2048;
+ ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &int1);
+ test(ret != -1);
+
+ int2 = 0;
+ ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &int2);
+ test(ret != -1);
+ test(int1 == int2);
+
+
+ int1 = 100000000;
+ ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &int1);
+ test(ret != -1);
+
+ ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &int1);
+ test(ret != -1);
+ test(int1 == int2); //shoudn't have changed, val too big.
+
+
+ test_Next("break");
+ sig = 5000;
+ ret = ioctl(port1, COMMIOCTL_BREAK, &sig);
+ //break isn't supported
+ test_errno(-1==ret, ENOSYS);
+
+
+ test_Next("read timeout");
+ int1 = 2000;
+ ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &int1);
+ test (ret != -1);
+
+ int2 = 0;
+ ret = ioctl(port1, COMMIOCTL_GETREADTIMEOUT, &int2);
+ test (ret != -1);
+ test(int2 == int1);
+
+
+ test_Next("read threshold");
+ int1 = 2000;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &int1);
+ test (ret != -1);
+
+ int2 = 0;
+ ret = ioctl(port1, COMMIOCTL_GETREADTHRESHOLD, &int2);
+ test(ret != -1);
+ test(int1 == int2);
+
+
+
+ //signals
+ test_Next("test notifications supported");
+ ret = ioctl(port1, COMMIOCTL_NOTIFYSUPPORTED, &int1);
+ test((int1 & (KNotifyFramingError|KNotifyOverrunError|KNotifyParityError)) == (KNotifyFramingError|KNotifyOverrunError|KNotifyParityError));
+ printf("Notifications supported are %08x\n",int1);
+
+ test_Next("Test read timeout with a threshold");
+ int2 = 3000;
+ ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &int2);
+ test (ret != -1);
+
+ int1 = 1;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &int1);
+ test (ret != -1);
+
+ ret = read(port1, buffer, size);
+ test_errno(-1==ret, ETIMEDOUT);
+
+ //no threshold, but with a 1 second timeout
+ test_Next("no threshold with timeout");
+ int2 = 5000;
+ ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &int2);
+ test (ret != -1);
+
+ int1 = -1;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &int1);
+ test (ret != -1);
+
+ ret = read(port1, buffer, size);
+ test_errno(-1==ret, ETIMEDOUT);
+
+
+ close(port1);
+ }
+ else
+ printf("failed to open port %s with errno %d\n", port,errno);
+ }
+
+
+
+void DoTestsSerial(void)
+ {
+ DoTests("COM1:");
+
+ if (close_console)
+ {
+ test_Close();
+ close(0);
+ close(1);
+ close(2);
+ }
+ }
+
+
+
+int main(void)
+ {
+ void* client;
+ int err;
+
+ test_Title("Serial port test1");
+ test_Next("Do tests with local server for COM1:");
+ DoTests("COM1:");
+ test_Next("Do tests with local server for COM2:");
+ DoTests("COM2:");
+ test_Next("Do tests with local server for COM3:");
+ DoTests("COM3:");
+ test_Next("Do tests with local server for COM4:");
+ DoTests("COM4:");
+
+
+ start_posix_server(); /* calls SpawnPosixServer from C++ code */
+
+ close_console=1;
+ test_Next("Do tests with posix server for COM1:");
+ client=create_thread(DoTestsSerial, "serial tests");
+ test(client);
+
+ start_thread(client);
+ err=wait_for_thread(client);
+ test(0 == err);
+
+
+ test_Close();
+ return 0;
+ }
+