sl@0: /* sl@0: * Copyright (c) 1997-2005 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include /* definition of exit() */ sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include "ctest.h" sl@0: sl@0: sl@0: int GlobalPort; sl@0: sl@0: void DoSharedStuff(void) sl@0: { sl@0: int p1, p2, ret; sl@0: SerialConfig config; sl@0: p1 = open("COM1:", 1); sl@0: p2 = open("COM1:", 1); sl@0: sl@0: //try changing the settings sl@0: ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config); sl@0: sl@0: config.iRate = Bps115200; sl@0: ret = ioctl(p2, COMMIOCTL_SETCONFIG, &config); sl@0: sl@0: config.iRate = Bps1200; sl@0: ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config); sl@0: sl@0: close(p2); sl@0: config.iRate = Bps1200; sl@0: ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config); sl@0: close(p1); sl@0: sl@0: } sl@0: void OpenAndConfigure(void) sl@0: { sl@0: int res; sl@0: SerialConfig sc; sl@0: sl@0: GlobalPort = open("COM1:",0); sl@0: res = ioctl(GlobalPort, COMMIOCTL_GETCONFIG, &sc); sl@0: sc.iRate = Bps115200; sl@0: sc.iParity = ParityNone; sl@0: res = ioctl(GlobalPort, COMMIOCTL_SETCONFIG, &sc); sl@0: } sl@0: sl@0: sl@0: void WaitAndRead(void) sl@0: { sl@0: int port = GlobalPort; sl@0: int ret; sl@0: char buffer[100]; sl@0: sl@0: printf("Wait and read\n"); sl@0: ret = read(port, buffer, 10); sl@0: printf("got it %x\n",buffer[0]); sl@0: } sl@0: sl@0: sl@0: void WriteABit(int x) sl@0: { sl@0: int port = GlobalPort; sl@0: char bob[100]; sl@0: sprintf(bob, "Test Write >>%d<< >>%x<<\n", x, x); sl@0: write(port, bob, strlen(bob)); sl@0: } sl@0: sl@0: void writelots(void) sl@0: { sl@0: int n; sl@0: for (n=0;n<10000;n++) sl@0: WriteABit(n); sl@0: } sl@0: sl@0: sl@0: void DoTests(void) sl@0: { sl@0: int port1, port2; sl@0: int timeout = 0; sl@0: int threshold = 0; sl@0: int ret=0; sl@0: sl@0: port1 = open("COM1:", 0); sl@0: sl@0: //this one should fail sl@0: port2 = open("COM1:", 0); sl@0: sl@0: if (-1 != port1) sl@0: { sl@0: //play with the signals sl@0: int sigs[] = {0,0}; sl@0: int sig = 0; sl@0: ret = ioctl(port1, COMMIOCTL_SETSIGNALS, &sigs[0]); sl@0: ret = ioctl(port1, COMMIOCTL_GETSIGNALS, &sig); sl@0: sig = 5000; sl@0: ret = ioctl(port1, COMMIOCTL_BREAK, &sig); sl@0: close(port1); sl@0: } sl@0: sl@0: port1 = open("COM1:", 0); sl@0: port2 = open("COM2:",0); sl@0: sl@0: sl@0: if (-1 != port2) sl@0: { sl@0: int len; sl@0: SerialConfig config; sl@0: char buffer[1024]; sl@0: size_t size = 100; sl@0: sl@0: sl@0: timeout = 2000; sl@0: ret = ioctl(port2, COMMIOCTL_SETREADTIMEOUT, &timeout); sl@0: timeout = 0; sl@0: ret = ioctl(port2, COMMIOCTL_GETREADTIMEOUT, &timeout); sl@0: sl@0: sl@0: threshold = 2000; sl@0: ret = ioctl(port2, COMMIOCTL_SETREADTHRESHOLD, &threshold); sl@0: threshold = 0; sl@0: ret = ioctl(port2, COMMIOCTL_GETREADTHRESHOLD, &threshold); sl@0: sl@0: sl@0: //buffer lengths sl@0: len = 0; sl@0: ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len); sl@0: sl@0: len = 2048; sl@0: ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &len); sl@0: sl@0: len = 0; sl@0: ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len); sl@0: sl@0: len = 10000000; sl@0: ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &len); sl@0: sl@0: len = 0; sl@0: ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len); sl@0: sl@0: sl@0: //try changing the settings sl@0: ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config); sl@0: sl@0: config.iRate = Bps115200; sl@0: ret = ioctl(port1, COMMIOCTL_SETCONFIG, &config); sl@0: sl@0: config.iRate = Bps1200; sl@0: ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config); sl@0: sl@0: sl@0: timeout = threshold = -1; sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold); sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout); sl@0: sl@0: printf("Talk to me, ESC to exit\n"); sl@0: do sl@0: { sl@0: ret = read(port1, buffer, size); sl@0: if (ret != -1) sl@0: printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]); sl@0: else sl@0: printf("error, errno is %x \n",errno); sl@0: } sl@0: while (buffer[0] != 27); sl@0: sl@0: printf("Talk to me in blocks of 5, EXIT! to exit\n"); sl@0: threshold = 5; sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold); sl@0: do sl@0: { sl@0: ret = read(port1, buffer, size); sl@0: if (ret >=0) sl@0: { sl@0: buffer[ret] = 0; sl@0: printf("look what I got >>> %s\n",buffer); sl@0: } sl@0: else sl@0: printf("error\n"); sl@0: } sl@0: while (strcmp(buffer, "EXIT!")); sl@0: printf("Wait 10 seconds then give up\n"); sl@0: timeout = 10000; sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout); sl@0: threshold = 1; sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold); sl@0: ret = read(port1, buffer, size); sl@0: if (ret > 0) sl@0: printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]); sl@0: else sl@0: printf("timeout\n"); sl@0: sl@0: sl@0: //no threshold, but with a 5 second timeout sl@0: printf("Now for the hard one!\n"); sl@0: timeout = 5000; sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout); sl@0: threshold = -1; sl@0: ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold); sl@0: ret = read(port1, buffer, size); sl@0: if (ret<0) sl@0: printf("got an error, errno is 56 if it a timeout. erno = %d\n", errno); sl@0: else sl@0: printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]); sl@0: sl@0: printf("Going to write some stuff now\n"); sl@0: ret = write(port1, "Lardy dardy dardy cheese\n\n",26); sl@0: printf("Written some stuff now and got a ret of %d\n", ret); sl@0: sl@0: sl@0: close(port2); sl@0: } sl@0: sl@0: if (-1 != port1) sl@0: close(port1); sl@0: sl@0: printf("Press key to exit"); sl@0: getchar(); sl@0: } sl@0: sl@0: sl@0: sl@0: void pong(void) sl@0: { sl@0: char buf[50]; sl@0: int port = open("IRCOM:0", 0); sl@0: int x; sl@0: strcpy(buf,"test shot #"); sl@0: for (x=0;x<10;x++); sl@0: { sl@0: write(port, buf, strlen(buf)); sl@0: read(port,buf, 50); sl@0: strcat(buf,"#"); sl@0: } sl@0: close(port); sl@0: } sl@0: sl@0: void ping(void) sl@0: { sl@0: char buf[50]; sl@0: int x; sl@0: int port = open("IRCOM:0", 0); sl@0: for (x=0;x<10;x++); sl@0: { sl@0: read(port,buf, 50); sl@0: strcat(buf,"*"); sl@0: write(port, buf, strlen(buf)); sl@0: } sl@0: close(port); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-STDLIB-CT-1112 sl@0: @SYMTestCaseDesc Tests for serial port sl@0: @SYMTestPriority High sl@0: @SYMTestActions Notifies a thread for events on port sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void WaitForNotifyThread(void) sl@0: { sl@0: int val[2]; sl@0: int ret = 0; sl@0: sl@0: while (!ret) sl@0: { sl@0: val[0] = KNotifyFramingError|KNotifyOverrunError|KNotifyParityError; sl@0: val[1] = -1; sl@0: ret = ioctl(GlobalPort, COMMIOCTL_NOTIFY, &val[0]); sl@0: printf("NotifyThread ret = %d, val[0] is %d, val[1] is %d\n", ret, val[0], val[1]); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-STDLIB-CT-1113 sl@0: @SYMTestCaseDesc Tests for serial port sl@0: @SYMTestPriority High sl@0: @SYMTestActions Keep reading infinitely from the port sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void readloop(void) sl@0: { sl@0: char buf[100]; sl@0: int ret = 0; sl@0: while (!ret) sl@0: { sl@0: read(GlobalPort, buf, 100); sl@0: printf("ReadThread got %x\n", buf[0]); sl@0: } sl@0: } sl@0: sl@0: int main(void) sl@0: { sl@0: void* client; sl@0: void* t1; sl@0: void*t2; sl@0: void*t3; sl@0: int err; sl@0: sl@0: sl@0: // DoTests(); sl@0: sl@0: // printf("Do it again using the CPosixServer\n"); sl@0: sl@0: start_posix_server(); /* calls SpawnPosixServer from C++ code */ sl@0: sl@0: // client=create_thread(DoTests, "serial tests"); sl@0: // start_thread(client); sl@0: // err=wait_for_thread(client); sl@0: sl@0: sl@0: // t3 = create_thread(OpenAndConfigure,"cfg"); sl@0: // start_thread(t3); sl@0: // err=wait_for_thread(t3); sl@0: sl@0: // t1 = create_thread(WaitAndRead, "open and wait"); sl@0: // t2 = create_thread(writelots, "writelots"); sl@0: // start_thread(t1); sl@0: // start_thread(t2); sl@0: // err=wait_for_thread(t1); sl@0: // err=wait_for_thread(t2); sl@0: // close(GlobalPort); sl@0: sl@0: sl@0: OpenAndConfigure(); sl@0: t1 = create_thread(WaitForNotifyThread, "notify"); sl@0: t2 = create_thread(readloop, "readloop"); sl@0: sl@0: start_thread(t1); sl@0: start_thread(t2); sl@0: sl@0: err=wait_for_thread(t2); sl@0: err=wait_for_thread(t1); sl@0: sl@0: close(GlobalPort); sl@0: return 0; sl@0: } sl@0: