1
0
mirror of https://github.com/co-dan/ocaml-wiringpi/ synced 2025-12-16 05:53:51 +01:00

5 Commits

Author SHA1 Message Date
Marek Kubica
fb03eeee58 Merge pull request #4 from co-dan/master
Fix the `ocamlwiring_pull_up_dn_control` stub
2019-01-27 14:06:18 +01:00
1e32b9112a Fix the ocamlwiring_pull_up_dn_control stub 2019-01-27 13:58:05 +01:00
Marek Kubica
cdac97b364 Adjust to OCaml naming conventions
Use own C prefix, not the one of the OCaml compiler
2014-11-16 11:40:49 +01:00
Marek Kubica
9cd950b00c Added analogRead/analogWrite 2014-11-16 11:28:57 +01:00
Marek Kubica
7545734cb3 Whitespace be gone 2014-11-16 11:20:00 +01:00
2 changed files with 54 additions and 50 deletions

View File

@@ -1,55 +1,55 @@
(** This module is useful to communicate with the GPIO ports of a Raspberry Pi. (** This module is useful to communicate with the GPIO ports of a Raspberry Pi.
It uses the WiringPi library: http://wiringpi.com/ **) It uses the WiringPi library: http://wiringpi.com/ **)
(* Test function *)
external test_hello_world : unit -> unit = "caml_hello"
(* Use it at the very beginning to choose the numeroting mode *) (* Use it at the very beginning to choose the numeroting mode *)
external setup : unit -> int = "caml_wiringPiSetup" external setup: unit -> int = "ocamlwiring_setup"
external setupGio : unit -> int = "caml_wiringPiSetupGpio" external setup_gpio: unit -> int = "ocamlwiring_setup_gpio"
external setupPhys : unit -> int = "caml_wiringPiSetupPhys" external setup_phys: unit -> int = "ocamlwiring_setup_phys"
external setupSys : unit -> int = "caml_wiringPiSetupSys" external setup_sys: unit -> int = "ocamlwiring_setup_sys"
(* ########## Write on the device ########## *) (* ########## Write on the device ########## *)
(* This sets the mode of a pin to either INPUT (= 0), OUTPUT (= 1), (* This sets the mode of a pin to either INPUT (= 0), OUTPUT (= 1),
* PWM_OUTPUT (= 2) or GPIO_CLOCK (= 3). * PWM_OUTPUT (= 2) or GPIO_CLOCK (= 3).
* Note that only wiringPi pin 1 (BCM_GPIO 18) supports PWM output and only * Note that only wiringPi pin 1 (BCM_GPIO 18) supports PWM output and only
* wiringPi pin 7 (BCM_GPIO 4) supports CLOCK output modes. *) * wiringPi pin 7 (BCM_GPIO 4) supports CLOCK output modes. *)
external pinMode : int -> int -> unit = "caml_pinMode" external pin_mode: int -> int -> unit = "ocamlwiring_pin_mode"
(* This sets the pull-up or pull-down resistor mode on the given pin, which (* This sets the pull-up or pull-down resistor mode on the given pin, which
* should be set as an input. *) * should be set as an input. *)
external pullUpDnControl : int -> int -> unit = "caml_pullUpDnControl" external pull_up_dn_control: int -> int -> unit = "ocamlwiring_pull_up_dn_control"
(* Writes the value HIGH or LOW (1 or 0) to the given pin which must have (* Writes the value HIGH or LOW (1 or 0) to the given pin which must have
* been previously set as an output. *) * been previously set as an output. *)
external digitalWrite : int -> int -> unit = "caml_digitalWrite" external digital_write: int -> int -> unit = "ocamlwiring_digital_write"
(* Writes the value to the PWM register for the given pin. (* Writes the value to the PWM register for the given pin.
* The Raspberry Pi has one on-board PWM pin, pin 1 (BMC_GPIO 18, Phys 12) and * The Raspberry Pi has one on-board PWM pin, pin 1 (BMC_GPIO 18, Phys 12) and
* the range is 0-1024. Other PWM devices may have other PWM ranges *) * the range is 0-1024. Other PWM devices may have other PWM ranges *)
external pwmWrite : int -> int -> unit = "caml_pwmWrite" external pwm_write: int -> int -> unit = "ocamlwiring_pwm_write"
(* This function returns the value read at the given pin. It will be HIGH (* This function returns the value read at the given pin. It will be HIGH
* or LOW (1 or 0) depending on the logic level at the pin. *) * or LOW (1 or 0) depending on the logic level at the pin. *)
external digitalRead : int -> int = "caml_digitalRead" external digital_read: int -> int = "ocamlwiring_digital_read"
external digitalWriteByte : int -> unit = "caml_digitalWriteByte" external digital_write_byte: int -> unit = "ocamlwiring_digital_write_byte"
external analog_read: int -> int = "ocamlwiring_analog_read"
external analog_write: int -> int -> unit = "ocamlwiring_analog_write"
(* ########## Timing ########## *) (* ########## Timing ########## *)
(* Use it to wait a few ms or µs. If you want to wait for several (* Use it to wait a few ms or µs. If you want to wait for several
secondes, use Unix.sleep. *) secondes, use Unix.sleep. *)
(* wait n ms *) (* wait n ms *)
external delay : int -> unit = "caml_delay" external delay: int -> unit = "ocamlwiring_delay"
(* wait n µs *) (* wait n µs *)
external delayMicroseconds : int -> unit = "caml_delayMicroseconds" external delay_microseconds: int -> unit = "ocamlwiring_delay_microseconds"
(* This returns a number representing the number if ms/µs since your program (* This returns a number representing the number if ms/µs since your program
* called one of the wiringPiSetup functions. *) * called one of the wiringPiSetup functions. *)
external millis : unit -> int = "caml_millis" external millis : unit -> int = "ocamlwiring_millis"
external micros : unit -> int = "caml_micros" external micros : unit -> int = "ocamlwiring_micros"
(* ################# Name of pins : ################# *) (* ################# Name of pins : ################# *)
(* +----------+-Rev2-+------+--------+------+-------+ *) (* +----------+-Rev2-+------+--------+------+-------+ *)
(* | wiringPi | GPIO | Phys | Name | Mode | Value | *) (* | wiringPi | GPIO | Phys | Name | Mode | Value | *)

View File

@@ -9,32 +9,25 @@
#include <wiringPi.h> #include <wiringPi.h>
#include <wiringShift.h> #include <wiringShift.h>
value caml_hello(value unit) value ocamlwiring_setup(value unit)
{
CAMLparam1(unit);
printf("Hello world!\n");
CAMLreturn(Val_unit);
}
value caml_wiringPiSetup(value unit)
{ {
CAMLparam1(unit); CAMLparam1(unit);
CAMLreturn(Val_int(wiringPiSetup())); CAMLreturn(Val_int(wiringPiSetup()));
} }
value caml_wiringPiSetupGpio(value unit) value ocamlwiring_setup_gpio(value unit)
{ {
CAMLparam1(unit); CAMLparam1(unit);
CAMLreturn(Val_int(wiringPiSetupGpio())); CAMLreturn(Val_int(wiringPiSetupGpio()));
} }
value caml_wiringPiSetupPhys(value unit) value ocamlwiring_setup_phys(value unit)
{ {
CAMLparam1(unit); CAMLparam1(unit);
CAMLreturn(Val_int(wiringPiSetupPhys())); CAMLreturn(Val_int(wiringPiSetupPhys()));
} }
value caml_wiringPiSetupSys(value unit) value ocamlwiring_setup_sys(value unit)
{ {
CAMLparam1(unit); CAMLparam1(unit);
CAMLreturn(Val_int(wiringPiSetupSys())); CAMLreturn(Val_int(wiringPiSetupSys()));
@@ -42,45 +35,56 @@ value caml_wiringPiSetupSys(value unit)
// Core functions // Core functions
value caml_pinMode(value pin, value mode) value ocamlwiring_pin_mode(value pin, value mode)
{ {
CAMLparam2(pin, mode); CAMLparam2(pin, mode);
pinMode(Int_val(pin), Int_val(mode)); pinMode(Int_val(pin), Int_val(mode));
CAMLreturn(Val_unit); CAMLreturn(Val_unit);
} }
value caml_pullUpDnControl(value pin, value pud) value ocamlwiring_pull_up_dn_control(value pin, value pud)
{ {
CAMLparam2(pin, pud); CAMLparam2(pin, pud);
pullUpDnControl(Int_val(pin), Int_val(pin)); pullUpDnControl(Int_val(pin), Int_val(pud));
CAMLreturn(Val_unit); CAMLreturn(Val_unit);
} }
value caml_digitalWrite(value pin, value value_p) value ocamlwiring_digital_write(value pin, value value_p)
{ {
CAMLparam2(pin, value_p); CAMLparam2(pin, value_p);
digitalWrite(Int_val(pin), Int_val(value_p)); digitalWrite(Int_val(pin), Int_val(value_p));
CAMLreturn(Val_unit); CAMLreturn(Val_unit);
} }
value caml_pwmWrite(value pin, value value_p) value ocamlwiring_pwm_write(value pin, value value_p)
{ {
CAMLparam2(pin, value_p); CAMLparam2(pin, value_p);
pwmWrite(Int_val(pin), Int_val(value_p)); pwmWrite(Int_val(pin), Int_val(value_p));
CAMLreturn(Val_unit); CAMLreturn(Val_unit);
} }
value caml_digitalRead(value pin) value ocamlwiring_digital_read(value pin)
{ {
CAMLparam1(pin); CAMLparam1(pin);
CAMLreturn(Val_int(digitalRead(Int_val(pin)))); CAMLreturn(Val_int(digitalRead(Int_val(pin))));
} }
// AnalogRead and AnalogWrite needs to be added (module must be added) value ocamlwiring_analog_read(value pin)
{
CAMLparam1(pin);
CAMLreturn(Val_int(analogRead(Int_val(pin))));
}
value ocamlwiring_analog_write(value pin, value value_p)
{
CAMLparam2(pin, value_p);
analogWrite(Int_val(pin), Int_val(value_p));
CAMLreturn(Val_unit);
}
// Raspberry Pi Specifics // Raspberry Pi Specifics
value caml_digitalWriteByte(value value_p) value ocamlwiring_digital_write_byte(value value_p)
{ {
CAMLparam1(value_p); CAMLparam1(value_p);
digitalWriteByte(Int_val(value_p)); digitalWriteByte(Int_val(value_p));
@@ -95,7 +99,7 @@ value caml_digitalWriteByte(value value_p)
/* This returns a number representing the number if milliseconds since your /* This returns a number representing the number if milliseconds since your
* program called one of the wiringPiSetup functions. */ * program called one of the wiringPiSetup functions. */
value caml_millis(value unit) value ocamlwiring_millis(value unit)
{ {
CAMLparam1(unit); CAMLparam1(unit);
CAMLreturn(Val_int(millis())); CAMLreturn(Val_int(millis()));
@@ -103,7 +107,7 @@ value caml_millis(value unit)
/* This returns a number representing the number of microseconds since your /* This returns a number representing the number of microseconds since your
* program called one of the wiringPiSetup functions. */ * program called one of the wiringPiSetup functions. */
value caml_micros(value unit) value ocamlwiring_micros(value unit)
{ {
CAMLparam1(unit); CAMLparam1(unit);
CAMLreturn(Val_int(micros())); CAMLreturn(Val_int(micros()));
@@ -111,10 +115,10 @@ value caml_micros(value unit)
/* This causes program execution to pause for at least howLong milliseconds. /* This causes program execution to pause for at least howLong milliseconds.
* Due to the multi-tasking nature of Linux it could be longer. */ * Due to the multi-tasking nature of Linux it could be longer. */
value caml_delay(value howLong) value ocamlwiring_delay(value how_long)
{ {
CAMLparam1(howLong); CAMLparam1(how_long);
delay(Int_val(howLong)); delay(Int_val(how_long));
CAMLreturn(Val_unit); CAMLreturn(Val_unit);
} }
@@ -125,9 +129,9 @@ value caml_delay(value howLong)
* nanosleep() function You may need to consider the implications of very * nanosleep() function You may need to consider the implications of very
* short delays on the overall performance of the system, especially if using * short delays on the overall performance of the system, especially if using
* threads. */ * threads. */
value caml_delayMicroseconds(value howLong) value ocamlwiring_delay_microseconds(value how_long)
{ {
CAMLparam1(howLong); CAMLparam1(how_long);
delayMicroseconds(Int_val(howLong)); delayMicroseconds(Int_val(how_long));
CAMLreturn(Val_unit); CAMLreturn(Val_unit);
} }