genericopenlibs/cstdlib/TSTLIB/tserial.c
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*
       
     2 * Copyright (c) 1997-2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <stdlib.h>	/* definition of exit() */
       
    20 #include <stdio.h>
       
    21 #include <errno.h>
       
    22 #include <string.h>
       
    23 #include <sys/unistd.h>
       
    24 #include <sys/ioctl.h>
       
    25 #include "ctest.h"
       
    26 
       
    27 
       
    28 int GlobalPort;
       
    29 
       
    30 void DoSharedStuff(void)
       
    31 	{
       
    32 		int p1, p2, ret;
       
    33 		SerialConfig config;
       
    34 		p1 = open("COM1:",  1);
       
    35 		p2 = open("COM1:",  1);
       
    36 
       
    37 		//try changing the settings
       
    38 		ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config);
       
    39 
       
    40 		config.iRate = Bps115200;
       
    41 		ret = ioctl(p2, COMMIOCTL_SETCONFIG, &config);
       
    42 
       
    43 		config.iRate = Bps1200;
       
    44 		ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config);
       
    45 
       
    46 		close(p2);
       
    47 		config.iRate = Bps1200;
       
    48 		ret = ioctl(p1, COMMIOCTL_GETCONFIG, &config);
       
    49 		close(p1);
       
    50 
       
    51 	}
       
    52 void OpenAndConfigure(void)
       
    53 	{
       
    54 	int res;
       
    55 	SerialConfig sc;
       
    56 
       
    57 	GlobalPort = open("COM1:",0);
       
    58 	res = ioctl(GlobalPort, COMMIOCTL_GETCONFIG, &sc);
       
    59 	sc.iRate = Bps115200;
       
    60 	sc.iParity = ParityNone;
       
    61 	res = ioctl(GlobalPort, COMMIOCTL_SETCONFIG, &sc);
       
    62 	}
       
    63 
       
    64 
       
    65 void WaitAndRead(void)
       
    66 	{
       
    67 	int port = GlobalPort;
       
    68 	int ret;
       
    69 	char buffer[100];
       
    70 
       
    71 	printf("Wait and read\n");
       
    72 	ret = read(port, buffer, 10);
       
    73 	printf("got it %x\n",buffer[0]);
       
    74 	}
       
    75 
       
    76 
       
    77 void WriteABit(int x)
       
    78 	{
       
    79 	int port = GlobalPort;
       
    80 	char bob[100];
       
    81 	sprintf(bob, "Test Write >>%d<<    >>%x<<\n", x, x);
       
    82 	write(port, bob, strlen(bob));
       
    83 	}
       
    84 
       
    85 void writelots(void)
       
    86 	{
       
    87 	int n;
       
    88 	for (n=0;n<10000;n++)
       
    89 		WriteABit(n);
       
    90 	}
       
    91 
       
    92 
       
    93 void DoTests(void)
       
    94 	{	
       
    95 	int port1, port2;
       
    96 	int timeout = 0;
       
    97 	int threshold = 0;
       
    98 	int ret=0;
       
    99 
       
   100 	port1 = open("COM1:",  0);
       
   101 
       
   102 	//this one should fail
       
   103 	port2 = open("COM1:",  0);
       
   104 
       
   105 	if (-1 != port1)
       
   106 		{
       
   107 		//play with the signals
       
   108 		int sigs[] = {0,0};
       
   109  		int sig = 0;
       
   110 		ret = ioctl(port1, COMMIOCTL_SETSIGNALS, &sigs[0]);
       
   111 		ret = ioctl(port1, COMMIOCTL_GETSIGNALS, &sig);
       
   112 		sig = 5000;
       
   113 		ret = ioctl(port1, COMMIOCTL_BREAK, &sig);
       
   114 		close(port1);
       
   115 		}
       
   116 
       
   117 	port1 = open("COM1:",  0);
       
   118 	port2 = open("COM2:",0);
       
   119 
       
   120 
       
   121 	if (-1 != port2)
       
   122 		{
       
   123 		int len;
       
   124 		SerialConfig config;
       
   125 		char buffer[1024];
       
   126 		size_t size = 100;
       
   127 
       
   128 
       
   129 		timeout = 2000;
       
   130 		ret = ioctl(port2, COMMIOCTL_SETREADTIMEOUT, &timeout);
       
   131 		timeout = 0;
       
   132 		ret = ioctl(port2, COMMIOCTL_GETREADTIMEOUT, &timeout);
       
   133 
       
   134 				
       
   135 		threshold = 2000;
       
   136 		ret = ioctl(port2, COMMIOCTL_SETREADTHRESHOLD, &threshold);
       
   137 		threshold = 0;
       
   138 		ret = ioctl(port2, COMMIOCTL_GETREADTHRESHOLD, &threshold);
       
   139 
       
   140 
       
   141 		//buffer lengths
       
   142 		len = 0;
       
   143 		ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len);
       
   144 
       
   145 		len = 2048;
       
   146 		ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &len);
       
   147 
       
   148 		len = 0;
       
   149 		ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len);
       
   150 
       
   151 		len = 10000000;
       
   152 		ret = ioctl(port1, COMMIOCTL_SETBUFFERLENGTH, &len);
       
   153 		
       
   154 		len = 0;
       
   155 		ret = ioctl(port1, COMMIOCTL_GETBUFFERLENGTH, &len);
       
   156 
       
   157 
       
   158 		//try changing the settings
       
   159 		ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config);
       
   160 
       
   161 		config.iRate = Bps115200;
       
   162 		ret = ioctl(port1, COMMIOCTL_SETCONFIG, &config);
       
   163 
       
   164 		config.iRate = Bps1200;
       
   165 		ret = ioctl(port1, COMMIOCTL_GETCONFIG, &config);
       
   166 
       
   167 
       
   168 		timeout = threshold = -1;
       
   169 		ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
       
   170 		ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout);
       
   171 		
       
   172 		printf("Talk to me, ESC to exit\n");
       
   173 		do
       
   174 			{
       
   175 			ret = read(port1, buffer, size);
       
   176 			if (ret != -1)
       
   177 				printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]);
       
   178 			else
       
   179 				printf("error, errno is %x \n",errno);
       
   180 			}
       
   181 		while (buffer[0] != 27);
       
   182 
       
   183 		printf("Talk to me in blocks of 5, EXIT! to exit\n");
       
   184 		threshold = 5;
       
   185 		ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
       
   186 		do
       
   187 			{
       
   188 			ret = read(port1, buffer, size);
       
   189 			if (ret >=0)
       
   190 				{
       
   191 				buffer[ret] = 0;
       
   192 				printf("look what I got >>> %s\n",buffer);
       
   193 				}
       
   194 			else
       
   195 				printf("error\n");
       
   196 			}
       
   197 		while (strcmp(buffer, "EXIT!"));
       
   198 		printf("Wait 10 seconds then give up\n");
       
   199 		timeout = 10000;
       
   200 		ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout);
       
   201 		threshold = 1;
       
   202 		ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
       
   203 		ret = read(port1, buffer, size);
       
   204 		if (ret > 0)
       
   205 			printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]);
       
   206 		else
       
   207 			printf("timeout\n");
       
   208 
       
   209 		
       
   210 		//no threshold, but with a 5 second timeout
       
   211 		printf("Now for the hard one!\n");
       
   212 		timeout = 5000;
       
   213 		ret = ioctl(port1, COMMIOCTL_SETREADTIMEOUT, &timeout);
       
   214 		threshold = -1;
       
   215 		ret = ioctl(port1, COMMIOCTL_SETREADTHRESHOLD, &threshold);
       
   216 		ret = read(port1, buffer, size);
       
   217 		if (ret<0)
       
   218 			printf("got an error, errno is 56 if it a timeout. erno = %d\n", errno);
       
   219 		else
       
   220 			printf("look what I got >>> %c\t%x\n",buffer[0],buffer[0]);
       
   221 
       
   222 		printf("Going to write some stuff now\n");
       
   223 		ret = write(port1, "Lardy dardy dardy cheese\n\n",26);
       
   224 		printf("Written some stuff now and got a ret of %d\n", ret);
       
   225 
       
   226 
       
   227 		close(port2);
       
   228 		}
       
   229 	
       
   230 	if (-1 != port1)
       
   231 		close(port1);
       
   232 
       
   233 	printf("Press key to exit");
       
   234 	getchar();
       
   235 	}
       
   236 
       
   237 
       
   238 
       
   239 void pong(void)
       
   240 	{
       
   241 		char buf[50];
       
   242 		int port = open("IRCOM:0", 0);
       
   243 		int x;
       
   244 		strcpy(buf,"test shot #");
       
   245 		for (x=0;x<10;x++);
       
   246 			{
       
   247 			write(port, buf, strlen(buf));
       
   248 			read(port,buf, 50);
       
   249 			strcat(buf,"#");
       
   250 			}
       
   251 		close(port);
       
   252 	}
       
   253 
       
   254 void ping(void)
       
   255 	{
       
   256 		char buf[50];
       
   257 		int x;
       
   258 		int port = open("IRCOM:0", 0);
       
   259 		for (x=0;x<10;x++);
       
   260 			{
       
   261 			read(port,buf, 50);
       
   262 			strcat(buf,"*");
       
   263 			write(port, buf, strlen(buf));
       
   264 			}
       
   265 		close(port);
       
   266 	}
       
   267 
       
   268 /**
       
   269 @SYMTestCaseID          SYSLIB-STDLIB-CT-1112
       
   270 @SYMTestCaseDesc	    Tests for serial port
       
   271 @SYMTestPriority 	    High
       
   272 @SYMTestActions  	    Notifies a thread for events on port 
       
   273 @SYMTestExpectedResults Test must not fail
       
   274 @SYMREQ                 REQ0000
       
   275 */					
       
   276 void WaitForNotifyThread(void)
       
   277 	{
       
   278 	int val[2];
       
   279 	int ret = 0;
       
   280 	
       
   281 	while (!ret)
       
   282 		{
       
   283 		val[0] = KNotifyFramingError|KNotifyOverrunError|KNotifyParityError;
       
   284 		val[1] = -1;
       
   285 		ret = ioctl(GlobalPort, COMMIOCTL_NOTIFY, &val[0]);
       
   286 		printf("NotifyThread ret = %d, val[0] is %d, val[1] is %d\n", ret, val[0], val[1]);
       
   287 		}
       
   288 	}
       
   289 
       
   290 /**
       
   291 @SYMTestCaseID          SYSLIB-STDLIB-CT-1113
       
   292 @SYMTestCaseDesc	    Tests for serial port
       
   293 @SYMTestPriority 	    High
       
   294 @SYMTestActions  	    Keep reading infinitely from the port
       
   295 @SYMTestExpectedResults Test must not fail
       
   296 @SYMREQ                 REQ0000
       
   297 */					
       
   298 void readloop(void)
       
   299 	{
       
   300 	char buf[100];
       
   301 	int ret = 0;
       
   302 	while (!ret)
       
   303 		{
       
   304 		read(GlobalPort, buf, 100);
       
   305 		printf("ReadThread got %x\n", buf[0]);
       
   306 		}
       
   307 	}
       
   308 
       
   309 int main(void)
       
   310 	{
       
   311 	void* client;
       
   312 	void* t1;
       
   313 	void*t2;
       
   314 	void*t3;
       
   315 	int err;
       
   316 	
       
   317 
       
   318 //	DoTests();
       
   319 
       
   320 //	printf("Do it again using the CPosixServer\n");
       
   321 
       
   322 	start_posix_server();	/* calls SpawnPosixServer from C++ code */
       
   323 
       
   324 //	client=create_thread(DoTests, "serial tests");
       
   325 //	start_thread(client);
       
   326 //	err=wait_for_thread(client);
       
   327 
       
   328 	
       
   329 //	t3 = create_thread(OpenAndConfigure,"cfg");
       
   330 //	start_thread(t3);
       
   331 //	err=wait_for_thread(t3);
       
   332 
       
   333 //	t1 = create_thread(WaitAndRead, "open and wait");
       
   334 //	t2 = create_thread(writelots, "writelots");
       
   335 //	start_thread(t1);
       
   336 //	start_thread(t2);
       
   337 //	err=wait_for_thread(t1);
       
   338 //	err=wait_for_thread(t2);
       
   339 //	close(GlobalPort);
       
   340 
       
   341 	
       
   342 	OpenAndConfigure();
       
   343 	t1 = create_thread(WaitForNotifyThread, "notify");
       
   344 	t2 = create_thread(readloop, "readloop");
       
   345 
       
   346 	start_thread(t1);
       
   347 	start_thread(t2);
       
   348 
       
   349 	err=wait_for_thread(t2);
       
   350 	err=wait_for_thread(t1);
       
   351 	
       
   352 	close(GlobalPort);
       
   353 	return 0;
       
   354 	}
       
   355