--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/cstdlib/TSTLIB/tserial.c Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 1997-2005 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;
+
+void DoSharedStuff(void)
+ {
+ int p1, p2, ret;
+ SerialConfig config;
+ p1 = open("COM1:", 1);
+ p2 = open("COM1:", 1);
+
+ //try changing the settings
+ ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config);
+
+ config.iRate = Bps115200;
+ ret = ioctl(p2, COMMIOCTL_SETCONFIG, &config);
+
+ config.iRate = Bps1200;
+ ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config);
+
+ close(p2);
+ config.iRate = Bps1200;
+ ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config);
+ close(p1);
+
+ }
+void OpenAndConfigure(void)
+ {
+ int res;
+ SerialConfig sc;
+
+ GlobalPort = open("COM1:",0);
+ res = ioctl(GlobalPort, COMMIOCTL_GETCONFIG, &sc);
+ sc.iRate = Bps115200;
+ sc.iParity = ParityNone;
+ res = ioctl(GlobalPort, COMMIOCTL_SETCONFIG, &sc);
+ }
+
+
+void WaitAndRead(void)
+ {
+ int port = GlobalPort;
+ int ret;
+ char buffer[100];
+
+ printf("Wait and read\n");
+ ret = read(port, buffer, 10);
+ printf("got it %x\n",buffer[0]);
+ }
+
+
+void WriteABit(int x)
+ {
+ int port = GlobalPort;
+ char bob[100];
+ sprintf(bob, "Test Write >>%d<< >>%x<<\n", x, x);
+ write(port, bob, strlen(bob));
+ }
+
+void writelots(void)
+ {
+ int n;
+ for (n=0;n<10000;n++)
+ WriteABit(n);
+ }
+
+
+void DoTests(void)
+ {
+ int port1, port2;
+ int timeout = 0;
+ int threshold = 0;
+ int ret=0;
+
+ port1 = open("COM1:", 0);
+
+ //this one should fail
+ port2 = open("COM1:", 0);
+
+ if (-1 != port1)
+ {
+ //play with the signals
+ int sigs[] = {0,0};
+ int sig = 0;
+ ret = ioctl(port1, COMMIOCTL_SETSIGNALS, &sigs[0]);
+ ret = ioctl(port1, COMMIOCTL_GETSIGNALS, &sig);
+ sig = 5000;
+ ret = ioctl(port1, COMMIOCTL_BREAK, &sig);
+ close(port1);
+ }
+
+ port1 = open("COM1:", 0);
+ port2 = open("COM2:",0);
+
+
+ if (-1 != port2)
+ {
+ int len;
+ SerialConfig config;
+ char buffer[1024];
+ size_t size = 100;
+
+
+ timeout = 2000;
+ ret = ioctl(port2, COMMIOCTL_SETREADTIMEOUT, &timeout);
+ timeout = 0;
+ ret = ioctl(port2, COMMIOCTL_GETREADTIMEOUT, &timeout);
+
+
+ threshold = 2000;
+ ret = ioctl(port2, COMMIOCTL_SETREADTHRESHOLD, &threshold);
+ threshold = 0;
+ ret = ioctl(port2, COMMIOCTL_GETREADTHRESHOLD, &threshold);
+
+
+ //buffer lengths
+ len = 0;
+ ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len);
+
+ len = 2048;
+ ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &len);
+
+ len = 0;
+ ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len);
+
+ len = 10000000;
+ ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &len);
+
+ len = 0;
+ ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len);
+
+
+ //try changing the settings
+ ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config);
+
+ config.iRate = Bps115200;
+ ret = ioctl(port1, COMMIOCTL_SETCONFIG, &config);
+
+ config.iRate = Bps1200;
+ ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config);
+
+
+ timeout = threshold = -1;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
+ ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout);
+
+ printf("Talk to me, ESC to exit\n");
+ do
+ {
+ ret = read(port1, buffer, size);
+ if (ret != -1)
+ printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]);
+ else
+ printf("error, errno is %x \n",errno);
+ }
+ while (buffer[0] != 27);
+
+ printf("Talk to me in blocks of 5, EXIT! to exit\n");
+ threshold = 5;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
+ do
+ {
+ ret = read(port1, buffer, size);
+ if (ret >=0)
+ {
+ buffer[ret] = 0;
+ printf("look what I got >>> %s\n",buffer);
+ }
+ else
+ printf("error\n");
+ }
+ while (strcmp(buffer, "EXIT!"));
+ printf("Wait 10 seconds then give up\n");
+ timeout = 10000;
+ ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout);
+ threshold = 1;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
+ ret = read(port1, buffer, size);
+ if (ret > 0)
+ printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]);
+ else
+ printf("timeout\n");
+
+
+ //no threshold, but with a 5 second timeout
+ printf("Now for the hard one!\n");
+ timeout = 5000;
+ ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout);
+ threshold = -1;
+ ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
+ ret = read(port1, buffer, size);
+ if (ret<0)
+ printf("got an error, errno is 56 if it a timeout. erno = %d\n", errno);
+ else
+ printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]);
+
+ printf("Going to write some stuff now\n");
+ ret = write(port1, "Lardy dardy dardy cheese\n\n",26);
+ printf("Written some stuff now and got a ret of %d\n", ret);
+
+
+ close(port2);
+ }
+
+ if (-1 != port1)
+ close(port1);
+
+ printf("Press key to exit");
+ getchar();
+ }
+
+
+
+void pong(void)
+ {
+ char buf[50];
+ int port = open("IRCOM:0", 0);
+ int x;
+ strcpy(buf,"test shot #");
+ for (x=0;x<10;x++);
+ {
+ write(port, buf, strlen(buf));
+ read(port,buf, 50);
+ strcat(buf,"#");
+ }
+ close(port);
+ }
+
+void ping(void)
+ {
+ char buf[50];
+ int x;
+ int port = open("IRCOM:0", 0);
+ for (x=0;x<10;x++);
+ {
+ read(port,buf, 50);
+ strcat(buf,"*");
+ write(port, buf, strlen(buf));
+ }
+ close(port);
+ }
+
+/**
+@SYMTestCaseID SYSLIB-STDLIB-CT-1112
+@SYMTestCaseDesc Tests for serial port
+@SYMTestPriority High
+@SYMTestActions Notifies a thread for events on port
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+void WaitForNotifyThread(void)
+ {
+ int val[2];
+ int ret = 0;
+
+ while (!ret)
+ {
+ val[0] = KNotifyFramingError|KNotifyOverrunError|KNotifyParityError;
+ val[1] = -1;
+ ret = ioctl(GlobalPort, COMMIOCTL_NOTIFY, &val[0]);
+ printf("NotifyThread ret = %d, val[0] is %d, val[1] is %d\n", ret, val[0], val[1]);
+ }
+ }
+
+/**
+@SYMTestCaseID SYSLIB-STDLIB-CT-1113
+@SYMTestCaseDesc Tests for serial port
+@SYMTestPriority High
+@SYMTestActions Keep reading infinitely from the port
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+void readloop(void)
+ {
+ char buf[100];
+ int ret = 0;
+ while (!ret)
+ {
+ read(GlobalPort, buf, 100);
+ printf("ReadThread got %x\n", buf[0]);
+ }
+ }
+
+int main(void)
+ {
+ void* client;
+ void* t1;
+ void*t2;
+ void*t3;
+ int err;
+
+
+// DoTests();
+
+// printf("Do it again using the CPosixServer\n");
+
+ start_posix_server(); /* calls SpawnPosixServer from C++ code */
+
+// client=create_thread(DoTests, "serial tests");
+// start_thread(client);
+// err=wait_for_thread(client);
+
+
+// t3 = create_thread(OpenAndConfigure,"cfg");
+// start_thread(t3);
+// err=wait_for_thread(t3);
+
+// t1 = create_thread(WaitAndRead, "open and wait");
+// t2 = create_thread(writelots, "writelots");
+// start_thread(t1);
+// start_thread(t2);
+// err=wait_for_thread(t1);
+// err=wait_for_thread(t2);
+// close(GlobalPort);
+
+
+ OpenAndConfigure();
+ t1 = create_thread(WaitForNotifyThread, "notify");
+ t2 = create_thread(readloop, "readloop");
+
+ start_thread(t1);
+ start_thread(t2);
+
+ err=wait_for_thread(t2);
+ err=wait_for_thread(t1);
+
+ close(GlobalPort);
+ return 0;
+ }
+