kerneltest updated for the new api
authorgreg
Mon, 02 Jun 2008 08:52:06 +0200
changeset 467 40efa79d27dd
parent 466 b71655eca5e2
child 468 787a54d068d6
kerneltest updated for the new api
configure
drivers/timers_kernel/timers_kernel.c
drivers/unix/unix.c
examples/kerneltest/TestMasterSlave.c
examples/kerneltest/console/console.c
examples/kerneltest/kernel_module.c
src/symbols.c
--- a/configure	Tue May 27 17:43:33 2008 +0200
+++ b/configure	Mon Jun 02 08:52:06 2008 +0200
@@ -161,7 +161,7 @@
 		echo	"                 see http://www.ocera.org/download/components/WP7/lincan-0.3.3.html"
 		echo	"               \"can4linux\" can4linux driver"
 		echo	"                 see http://www.port.de/engl/canprod/hw_can4linux.html"
-		echo 	" --timers=foo  Use 'foo' as TIMERS driver (can be 'unix', 'xeno' or 'kernel')"
+		echo 	" --timers=foo  Use 'foo' as TIMERS driver (can be 'unix', 'xeno', 'rtai' or 'kernel')"
 		echo 	" --wx=foo  force result of WxWidgets detection (0 or 1)"
 		echo 	" --disable-dll Disable run-time dynamic linking of can, led and nvram drivers"
 		echo 	" --enable-lss  Enable the LSS services"
--- a/drivers/timers_kernel/timers_kernel.c	Tue May 27 17:43:33 2008 +0200
+++ b/drivers/timers_kernel/timers_kernel.c	Mon Jun 02 08:52:06 2008 +0200
@@ -36,6 +36,15 @@
 	last_occured_alarm,
 	last_alarm_set;
 
+void TimerInit(void)
+{
+	/* only used in realtime apps */
+}
+
+void TimerCleanup(void)
+{
+	/* only used in realtime apps */
+}
 
 void EnterMutex(void)
 {
@@ -71,10 +80,11 @@
 	LeaveMutex();
 }
 
-void StopTimerLoop(void)
+void StopTimerLoop(TimerCallback_t exitfunction)
 {
 	EnterMutex();
 	del_timer (&timer);
+	exitfunction(NULL,0);
 	LeaveMutex();
 }
 
@@ -99,7 +109,7 @@
 	*Thread = kthread_run(ReceiveLoopPtr, port, "canReceiveLoop");
 }
 
-void WaitReceiveTaskEnd(TASK_HANDLE Thread)
+void WaitReceiveTaskEnd(TASK_HANDLE *Thread)
 {
-	force_sig (SIGTERM, Thread);
+	force_sig (SIGTERM, *Thread);
 }
--- a/drivers/unix/unix.c	Tue May 27 17:43:33 2008 +0200
+++ b/drivers/unix/unix.c	Mon Jun 02 08:52:06 2008 +0200
@@ -245,4 +245,5 @@
 EXPORT_SYMBOL (canOpen);
 EXPORT_SYMBOL (canClose);
 EXPORT_SYMBOL (canSend);
+EXPORT_SYMBOL (canChangeBaudRate);
 #endif
--- a/examples/kerneltest/TestMasterSlave.c	Tue May 27 17:43:33 2008 +0200
+++ b/examples/kerneltest/TestMasterSlave.c	Mon Jun 02 08:52:06 2008 +0200
@@ -35,8 +35,20 @@
 	}
 }
 
+/***************************  EXIT  *****************************************/
+void Exit(CO_Data* d, UNS32 id)
+{
+	masterSendNMTstateChange(&TestMaster_Data, 0x02, NMT_Reset_Node);    
+
+	//Stop master
+	setState(&TestMaster_Data, Stopped);
+}
+
+
 int TestMasterSlave_start (void)
 {
+	TimerInit();
+
 	if(strcmp(SlaveBoard.baudrate, "none")){
 		
 		TestSlave_Data.heartbeatError = TestSlave_heartbeatError;
@@ -83,21 +95,13 @@
 {
 	eprintf("Finishing.\n");
 	
-	EnterMutex();
-	masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Reset_Node);
-	LeaveMutex();
-	
-	// Stop master
-	EnterMutex();
-	setState(&TestMaster_Data, Stopped);
-	LeaveMutex();
-	
 	// Stop timer thread
-	StopTimerLoop();
+	StopTimerLoop(&Exit);
 	
 	// Close CAN devices (and can threads)
 	if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data);
 	if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data);
 
+	TimerCleanup();
 	eprintf("End.\n");
 }
--- a/examples/kerneltest/console/console.c	Tue May 27 17:43:33 2008 +0200
+++ b/examples/kerneltest/console/console.c	Mon Jun 02 08:52:06 2008 +0200
@@ -12,7 +12,7 @@
 	printf("\nCanFestival kernel test example console\n\n");
 
 	printf("start - start example\n");
-	printf("end   - end example\n");
+	printf("stop  - stop example\n");
 	printf("quit  - quit console\n");
 	printf("\n");
 }
@@ -42,7 +42,7 @@
 		if (strcmp(command,"start") == 0)
 			cmd = CMD_START;
 		
-		else if (strcmp(command,"end") == 0)
+		else if (strcmp(command,"stop") == 0)
 			cmd = CMD_STOP;
 		
 		else if (strcmp(command,"quit") == 0)
--- a/examples/kerneltest/kernel_module.c	Tue May 27 17:43:33 2008 +0200
+++ b/examples/kerneltest/kernel_module.c	Mon Jun 02 08:52:06 2008 +0200
@@ -17,6 +17,9 @@
 static DECLARE_MUTEX (canftest_mutex);
 static int canftest_stopped = 1;
 
+int thread_start (void* data);
+int thread_stop (void* data);
+
 // handler processing write() requests from user-space
 ssize_t canftest_write(struct file *filp, const char __user *buf, size_t count,
 		       loff_t *f_pos)
@@ -30,15 +33,33 @@
 	// process integer as command
 	switch (cmd) {
 		case CMD_START:
+			if (!canftest_stopped) break;
+			thread_start_p = kthread_create (thread_start, NULL, "canftest_start");
+
+			if (PTR_ERR(thread_start_p) == -ENOMEM) {
+				printk(KERN_WARNING "canftest: error creating start thread\n");
+				return -ENOMEM;
+			}
+
 			wake_up_process (thread_start_p);
 			break;
+
 		case CMD_STOP:
 			if (canftest_stopped) break;
+			thread_stop_p = kthread_create (thread_stop, NULL, "canftest_stop");
+
+			if (PTR_ERR(thread_stop_p) == -ENOMEM) {
+				printk(KERN_WARNING "canftest: error creating stop thread\n");
+				return -ENOMEM;
+			}
+
 			wake_up_process (thread_stop_p);
 			break;
+
 		// ignore new line character
 		case 10:
 			break;
+
 		default:
 			printk("canftest: bad command %d\n", cmd);
 			break;
@@ -114,14 +135,6 @@
 		return ret;
 	}
 
-	thread_start_p = kthread_create (thread_start, NULL, "canftest_start");
-	thread_stop_p = kthread_create (thread_stop, NULL, "canftest_stop");
-	
-	if (PTR_ERR(thread_start_p) == -ENOMEM || PTR_ERR(thread_stop_p) == -ENOMEM) {
-		printk(KERN_WARNING "canftest: error creating threads\n");
-		return -ENOMEM;
-	}
-
 	return 0;
 }
 
--- a/src/symbols.c	Tue May 27 17:43:33 2008 +0200
+++ b/src/symbols.c	Mon Jun 02 08:52:06 2008 +0200
@@ -124,7 +124,9 @@
 // timers_driver.h
 EXPORT_SYMBOL (EnterMutex);
 EXPORT_SYMBOL (LeaveMutex);
-EXPORT_SYMBOL (WaitReceiveTaskEnd);
+EXPORT_SYMBOL (TimerInit);
+EXPORT_SYMBOL (TimerCleanup);
 EXPORT_SYMBOL (StartTimerLoop);
 EXPORT_SYMBOL (StopTimerLoop);
 EXPORT_SYMBOL (CreateReceiveTask);
+EXPORT_SYMBOL (WaitReceiveTaskEnd);