hook: add pwm hook around init
authorThomas Ingleby <thomas.c.ingleby@intel.com>
Tue, 29 Jul 2014 13:16:19 +0000 (14:16 +0100)
committerBrendan Le Foll <brendan.le.foll@intel.com>
Tue, 9 Sep 2014 17:01:23 +0000 (18:01 +0100)
Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
include/mraa_adv_func.h
src/pwm/pwm.c

index 4b04802..56ebba2 100644 (file)
@@ -54,5 +54,7 @@ typedef struct {
     mraa_result_t (*aio_init_pre) (unsigned int aio);
     mraa_result_t (*aio_init_post) (mraa_aio_context dev);
 
+    mraa_result_t (*pwm_init_pre) (int pin);
+    mraa_result_t (*pwm_init_post) (mraa_pwm_context pwm);
     mraa_result_t (*pwm_period_replace) (mraa_pwm_context dev, int period);
 } mraa_adv_func_t;
index b848dee..56e8694 100644 (file)
@@ -124,12 +124,26 @@ mraa_pwm_read_duty(mraa_pwm_context dev)
 
 mraa_pwm_context
 mraa_pwm_init(int pin) {
+    if (advance_func->pwm_init_pre != NULL) {
+        if (advance_func->pwm_init_pre(pin) != MRAA_SUCCESS)
+            return NULL;
+    }
     mraa_pin_t* pinm = mraa_setup_pwm(pin);
     if (pinm == NULL)
         return NULL;
     int chip = pinm->parent_id;
     int pinn = pinm->pinmap;
     free(pinm);
+
+    if (advance_func->gpio_init_post != NULL) {
+        mraa_pwm_context pret = mraa_pwm_init_raw(chip,pinn);
+        mraa_result_t ret = advance_func->pwm_init_post(pret);
+        if (ret != MRAA_SUCCESS) {
+            free(pret);
+            return NULL;
+        }
+        return pret;
+    }
     return mraa_pwm_init_raw(chip,pinn);
 }