Gordons Projects

--> Projects Top-Level GIT

A new version of wiringPi. Added in more stuff and fixed it up
[wiringPi] / wiringPi / softPwm.c
index 98b408f..5999cc0 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include <stdio.h>
+#include <malloc.h>
 #include <pthread.h>
 
 #include "wiringPi.h"
@@ -63,7 +64,7 @@ static volatile int newPin = -1 ;
  *********************************************************************************
  */
 
-static PI_THREAD (softPwmThread)
+static void *softPwmThread (void *arg)
 {
   int pin, mark, space ;
   struct sched_param param ;
@@ -71,6 +72,9 @@ static PI_THREAD (softPwmThread)
   param.sched_priority = sched_get_priority_max (SCHED_RR) ;
   pthread_setschedparam (pthread_self (), SCHED_RR, &param) ;
 
+  pin = *((int *)arg) ;
+  free (arg) ;
+
   pin    = newPin ;
   newPin = -1 ;
 
@@ -123,11 +127,16 @@ int softPwmCreate (int pin, int initialValue, int pwmRange)
 {
   int res ;
   pthread_t myThread ;
+  int *passPin ;
 
   if (range [pin] != 0)        // Already running on this pin
     return -1 ;
 
-  if (range <= 0)
+  if (pwmRange <= 0)
+    return -1 ;
+
+  passPin = malloc (sizeof (*passPin)) ;
+  if (passPin == NULL)
     return -1 ;
 
   pinMode      (pin, OUTPUT) ;
@@ -136,8 +145,9 @@ int softPwmCreate (int pin, int initialValue, int pwmRange)
   marks [pin] = initialValue ;
   range [pin] = pwmRange ;
 
+  *passPin = pin ;
   newPin = pin ;
-  res    = pthread_create (&myThread, NULL, softPwmThread, NULL) ;
+  res    = pthread_create (&myThread, NULL, softPwmThread, (void *)passPin) ;
 
   while (newPin != -1)
     delay (1) ;