Write the Hardware Specific C/C++ Code
In most cases, to integrate device driver code into a Simulink® block, you need to write a wrapper function around the API provided by the hardware vendor. Follow these steps to develop the C/C++ code required to implement digital read and write functionality:
Create a new empty file in the MATLAB® Editor.
Copy the following C code into the file.
#include <wiringPi.h> #include "digitalio_raspi.h" static int initialized = false; void digitalIOSetup(uint8_T pin, boolean_T mode) { // Perform one-time wiringPi initialization if (!initialized) { wiringPiSetupGpio(); initialized = 1; } // mode = 0: Input // mode = 1: Output if (mode) { pinMode(pin, OUTPUT); } else { pinMode(pin, INPUT); } } // Write a logic value to pin void writeDigitalPin(uint8_T pin, boolean_T val) { digitalWrite(pin, val); } // Read a logic value from pin boolean_T readDigitalPin(uint8_T pin) { return ((boolean_T)digitalRead(pin)); }
This code wraps the Raspberry Pi® C API to write to a digital I/O pin on the Raspberry Pi hardware board.
Note
Although the C code shown here is specific to the Raspberry Pi hardware, the same principle can be extended to any hardware-specific C/C++ API.
Save the file as
digitalio_raspi.c
into the source folder,src
.Create an empty header file and copy the following C++ code into the file.
#ifndef _DIGITALIO_RASPI_H_ #define _DIGITALIO_RASPI_H_ #include "rtwtypes.h" void digitalIOSetup(uint8_T pin, boolean_T mode); void writeDigitalPin(uint8_T pin, boolean_T val); boolean_T readDigitalPin(uint8_T pin); #endif //_DIGITALIO_RASPI_H_
Save the file as
digitalio_raspi.h
into theinclude
folder.This header file defines the C prototypes of the functions implemented in the C file,
digitalio_raspi.c
.
The digitalio_raspi.c
function includes a
wiringPi.h
file that defines the pinMode
and
digitalRead
functions. Simulink data types are used for pin
and val
variables. For this reason, the rtwtypes.h
file is included in
digitalio_raspi.h
. You must include this file whenever you
reference to Simulink data types. Because pin
is a number between 0 and 53 we
use the uint8_T
data type to represent this variable.
In the next section, you will Select System Object Template and begin the populate the methods.
See Also
Create a Digital Read Block | Create a Project Folder | Select System Object Template