--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/cstdlib/TSTLIB/tser3.cpp Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,211 @@
+// Copyright (c) 2003-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 <estlib.h>
+#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"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define SIZE 10000
+
+int ReaderPort;
+int WriterPort;
+
+/**
+@SYMTestCaseID SYSLIB-STDLIB-CT-1102
+@SYMTestCaseDesc Tests for serial port
+@SYMTestPriority High
+@SYMTestActions Tests by writing a string buffer to the port
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+void Writer()
+ {
+ char *buffer;
+
+ buffer = (char*)malloc(SIZE);
+ memset(buffer, '*', SIZE);
+
+ printf("\nbig write\n");
+ (void)write(WriterPort, buffer, SIZE);
+ (void)errno;
+ printf("\n>>Writer<<small read\n");
+ read(WriterPort,buffer,1);
+ printf("\nbig write\n");
+ write(WriterPort, buffer, SIZE);
+ printf("\n>>Writer<<small read\n");
+ read(WriterPort,buffer,1);
+
+ }
+
+/**
+@SYMTestCaseID SYSLIB-STDLIB-CT-1103
+@SYMTestCaseDesc Tests for serial port
+@SYMTestPriority High
+@SYMTestActions Notifies on a read operation
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+void Watcher()
+ {
+ int res=0;
+ int notify[2] = {0,0};
+ int supported = 0;
+
+
+ res = ioctl(ReaderPort, COMMIOCTL_NOTIFYSUPPORTED, &supported);
+ printf("\nsupported notifies are %08x\n",supported);
+ while (-1 != res)
+ {
+ notify[0] = supported;
+ printf("asking for %08x\n",notify[0]);
+ res = ioctl(ReaderPort, COMMIOCTL_NOTIFY, ¬ify[0]);
+ printf("\n**Notify** res = %d params %d, %d, errno %d\n",res, notify[0], notify[1],errno);
+ }
+
+ }
+
+/**
+@SYMTestCaseID SYSLIB-STDLIB-CT-1104
+@SYMTestCaseDesc Tests for serial port
+@SYMTestPriority High
+@SYMTestActions Reads to buffer from serial port,test for failure conditions
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+void Reader()
+ {
+ int res;
+ char *buffer, *p;
+ int x;
+
+
+
+ buffer = (char*)malloc(SIZE*2);
+
+ res = 0;
+ p = buffer;
+
+
+ x = 5000;
+ res = ioctl(ReaderPort, COMMIOCTL_SETREADTIMEOUT, &x);
+
+ for(x = 0;;x++)
+ {
+ res = read(ReaderPort, p, 100);
+ if (res > 0)
+ {
+ putchar('.');
+ p += res;
+ }
+ else
+ {
+ printf("\nread failed with errno %d\n",errno);
+ break;
+ }
+ }
+
+ printf("\n>>Reader<<small write\n");
+ res = write(ReaderPort, buffer ,1);
+
+ printf("\n>>Reader<<set threshold\n");
+ x = 100;
+ res = ioctl(ReaderPort, COMMIOCTL_SETREADTHRESHOLD, &x);
+ p = buffer;
+
+ printf("\nAnd again with a threshold of 100\n");
+
+ for(x = 0;;x++)
+ {
+ res = read(ReaderPort, p, 100);
+ if (res > 0)
+ {
+ putchar('.');
+ p += res;
+ }
+ else
+ {
+ printf("\nread failed with errno %d\n",errno);
+ break;
+ }
+ }
+
+ printf("\n>>Reader<<Small write\n");
+ write(ReaderPort, buffer ,1);
+
+
+ }
+
+#ifdef __cplusplus
+}
+#endif
+
+int main(int, char**)
+ {
+ void* t1;
+ void* t2;
+ void* t3;
+
+ SerialConfig sc;
+
+ start_posix_server(); /* calls SpawnPosixServer from C++ code */
+
+ WriterPort = open("COM1:",0);
+ if (-1 == WriterPort)
+ exit(-1);
+ (void)ioctl(WriterPort, COMMIOCTL_GETCONFIG, &sc);
+ sc.iHandshake = 0;
+ sc.iRate = Bps115200;
+ sc.iParity = ParityNone;
+ (void)ioctl(WriterPort, COMMIOCTL_SETCONFIG, &sc);
+
+ ReaderPort = open("COM2:",0);
+ if (-1 == ReaderPort)
+ exit(-2);
+ (void)ioctl(ReaderPort, COMMIOCTL_GETCONFIG, &sc);
+ sc.iHandshake = 0;
+ sc.iRate = Bps115200;
+ sc.iParity = ParityNone;
+ (void)ioctl(ReaderPort, COMMIOCTL_SETCONFIG, &sc);
+
+ t3 = create_thread(Watcher, "watcher1");
+ t1 = create_thread(Reader, "reader");
+ t2 = create_thread(Writer, "writer");
+
+ start_thread(t3);
+ start_thread(t2);
+ start_thread(t1);
+
+ (void)wait_for_thread(t1);
+ (void)wait_for_thread(t2);
+
+ close(WriterPort);
+ close(ReaderPort);
+ (void)wait_for_thread(t3);
+ printf("\nPress a key\n");
+ getchar();
+ return 0;
+ }
+
+