Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build-API.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ rm include_tmp.h

cat include/functions.h >> gnublin.h

cat drivers/driver.h >> gnublin.h
cat drivers/gpio.h >> gnublin.h
cat drivers/i2c.h >> gnublin.h
cat drivers/spi.h >> gnublin.h
Expand Down Expand Up @@ -52,6 +53,7 @@ echo "//********************************************

cat include/functions.cpp >> gnublin.cpp

cat drivers/driver.cpp >> gnublin.cpp
cat drivers/gpio.cpp >> gnublin.cpp
cat drivers/i2c.cpp >> gnublin.cpp
cat drivers/spi.cpp >> gnublin.cpp
Expand Down
48 changes: 5 additions & 43 deletions drivers/adc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,45 +18,9 @@ gnublin_adc::gnublin_adc(){
sleep(1);
}
file.close();
error_flag = false;
clearError();
}

//-------------fail-------------
/** @~english
* @brief Returns the error flag.
*
* If something went wrong, the flag is true.
* @return bool error_flag
*
* @~german
* @brief Gibt das Error Flag zurück.
*
* Falls das Error Flag in der Klasse gesetzt wurde, wird true zurück gegeben, anderenfalls false.
* @return bool error_flag
*/
bool gnublin_adc::fail(){
return error_flag;
}


//-------------getErrorMessage-------------
/** @~english
* @brief Get the last Error Message.
*
* This Funktion returns the last Error Message, which occurred in that Class.
* @return ErrorMessage as c-string
*
* @~german
* @brief Gibt die letzte Error Nachricht zurück.
*
* Diese Funktion gibt die Letzte Error Nachricht zurück, welche in dieser Klasse gespeichert wurde.
* @return ErrorMessage als c-string
*/
const char *gnublin_adc::getErrorMessage(){
return ErrorMessage.c_str();
}


//-------------getValue-------------
/** @~english
* @brief Get Value.
Expand All @@ -78,16 +42,14 @@ int gnublin_adc::getValue(int pin){
std::string pin_str = numberToString(pin);
std::string device = "/dev/lpc313x_adc";
std::ofstream file(device.c_str());
if (file < 0) {
error_flag = true;
return -1;
}
if (file < 0)
return setErrorMessage("Unable to open "+device);
file << pin_str;
file.close();
std::ifstream dev_file(device.c_str());
dev_file >> value;
dev_file.close();
error_flag = false;
clearError();
return hexstringToNumber(value);
}

Expand Down Expand Up @@ -126,7 +88,7 @@ int gnublin_adc::getVoltage(int pin){
* @return Erfolg: 1, Fehler: -1
*/
int gnublin_adc::setReference(int ref){
error_flag = false;
clearError();
return 1;
}

Expand Down
7 changes: 2 additions & 5 deletions drivers/adc.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,14 @@
*
* Mit der gnublin_adc API lassen sich die GPAs auf dem GNUBLIN einfach aus dem eigenem Programm heraus auslesen.
*/
class gnublin_adc {
class gnublin_adc : public gnublin_driver {
public:
gnublin_adc();
int getValue(int pin);
int getVoltage(int pin);
int setReference(int ref);
bool fail();
const char *getErrorMessage();
private:
bool error_flag;
std::string ErrorMessage;
void onError() {};
};

#endif
87 changes: 87 additions & 0 deletions drivers/driver.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#include "driver.h"

//*******************************************************************
//Class for accessing GNUBLIN i2c Bus
//*******************************************************************

//------------------Konstruktor------------------
/** @~english
* @brief Sets the error_flag to "false" and the devicefile to "/dev/i2c-1"
*
* @~german
* @brief Setzt das error_flag auf "false" und das devicefile auf standardmäßig "/dev/i2c-1"
*
*/
gnublin_driver::gnublin_driver()
{
error_flag=false;
ErrorMessage="";
}

//------------------error messaging------------------
/** @~english
* @brief Called by the constructors to initialize class variables.
*
* @param message String contents that describe the error.
* @return failure: -1
*
* @~german
* @brief Wird von den Konstruktoren der Klasse Variablen zu initialisieren.
*
* @param message String Inhalte, die den Fehler beschreiben.
* @return failure: -1
*
*/
int gnublin_driver::setErrorMessage(std::string message)
{
ErrorMessage=message;
error_flag=true;
return -1;
}

//------------------error messaging------------------
/** @~english
* @brief Resets the error_flag and other associated details.
*
* @~german
* @brief Setzt die error_flag und anderen damit verbundenen Informationen.
*
*/
void gnublin_driver::clearError()
{
ErrorMessage="";
error_flag=false;
}

//-------------------------------Fail-------------------------------
/** @~english
* @brief returns the error flag to check if the last operation went wrong
*
* @return error_flag as boolean
*
* @~german
* @brief Gibt das error_flag zurück um zu überprüfen ob die vorangegangene Operation einen Fehler auweist
*
* @return error_flag als bool
*/
bool gnublin_driver::fail(){
return error_flag;
}

//-------------get Error Message-------------
/** @~english
* @brief Get the last Error Message.
*
* This function returns the last Error Message, which occurred in that Class.
* @return ErrorMessage as c-string
*
* @~german
* @brief Gibt die letzte Error Nachricht zurück.
*
* Diese Funktion gibt die Letzte Error Nachricht zurück, welche in dieser Klasse gespeichert wurde.
* @return ErrorMessage als c-string
*/
const char *gnublin_driver::getErrorMessage(){
return ErrorMessage.c_str();
}

28 changes: 28 additions & 0 deletions drivers/driver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#include "../include/includes.h"
//*******************************************************************
//Class for accessing GNUBLIN i2c Bus
//*******************************************************************
/**
* @class gnublin_i2c
* @~english
* @brief Class for accessing GNUBLIN i2c bus
*
* The GNUBLIN I2C bus can easily accessed with this class
* @~german
* @brief Klasse für den zugriff auf den GNUBLIN I2C Bus
*
* Die GNUBLIN I2C Klasse gewährt einfachen Zugriff auf den I2C Bus
*/

class gnublin_driver {
bool error_flag;
std::string ErrorMessage;
virtual void onError() = 0;
protected:
gnublin_driver();
public:
bool fail();
int setErrorMessage(std::string message);
const char *getErrorMessage();
void clearError();
};
93 changes: 23 additions & 70 deletions drivers/gpio.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "gpio.h"
#include "driver.h"

/** @~english
* @brief Reset the ErrorFlag.
Expand All @@ -7,8 +8,7 @@
* @brief Setzt das ErrorFlag zurück.
*
*/
gnublin_gpio::gnublin_gpio(){
error_flag = false;
gnublin_gpio::gnublin_gpio() : gnublin_driver() {
}


Expand All @@ -29,49 +29,15 @@ int gnublin_gpio::unexport(int pin){
std::string pin_str = numberToString(pin);
std::string dir = "/sys/class/gpio/unexport";
std::ofstream file (dir.c_str());
if (file < 0) {
error_flag = true;
return -1;
}
if (file < 0)
return setErrorMessage("Unable to open " + dir +"\n");
file << pin_str;
file.close();
error_flag = false;
clearError();
return 1;
}


/** @~english
* @brief Returns the error flag.
*
* If something went wrong, the flag is true.
* @return bool error_flag
*
* @~german
* @brief Gibt das Error Flag zurück.
*
* Falls das Error Flag in der Klasse gesetzt wurde, wird true zurück gegeben, anderenfalls false.
* @return bool error_flag
*/
bool gnublin_gpio::fail(){
return error_flag;
}

/** @~english
* @brief Get the last Error Message.
*
* This Funktion returns the last Error Message, which occurred in that Class.
* @return ErrorMessage as c-string
*
* @~german
* @brief Gibt die letzte Error Nachricht zurück.
*
* Diese Funktion gibt die Letzte Error Nachricht zurück, welche in dieser Klasse gespeichert wurde.
* @return ErrorMessage als c-string
*/
const char *gnublin_gpio::getErrorMessage(){
return ErrorMessage.c_str();
}

/** @~english
* @brief Change the PinMode.
*
Expand All @@ -94,31 +60,26 @@ const char *gnublin_gpio::getErrorMessage(){
*/
int gnublin_gpio::pinMode(int pin, std::string direction){
#if (BOARD != RASPBERRY_PI)
if (pin == 4 && direction == "out"){
error_flag = true;
return -1;
}
if (pin == 4 && direction == "out")
return setErrorMessage("Pin 4 can not be set to 'out'\n");
#endif
std::string pin_str = numberToString(pin);
std::string dir = "/sys/class/gpio/export";
std::ofstream file (dir.c_str());
if (file < 0) {
error_flag = true;
return -1;
}
if (file < 0)
return setErrorMessage("Unable to open " + dir + "\n");
file << pin;
file.close();

dir = "/sys/class/gpio/gpio" + pin_str + "/direction";

file.open(dir.c_str());
if (file < 0) {
error_flag = true;
return -1;
}
if (file < 0)
return setErrorMessage("Unable to open " + dir + "\n");
file << direction;
file.close();
error_flag = false;

clearError();
return 1;
}

Expand All @@ -141,27 +102,21 @@ int gnublin_gpio::pinMode(int pin, std::string direction){
*/
int gnublin_gpio::digitalWrite(int pin, int value){
#if (BOARD != RASPBERRY_PI)
if (pin == 4){
error_flag = true;
return -1;
}
if (pin == 4)
return setErrorMessage("Pin 4 is not available for usage\n");
#endif
if (value != 0 && value != 1){
error_flag = true;
return -1;
}
if (value != 0 && value != 1)
return setErrorMessage("Value ["+numberToString(value)+"] must be 0 or 1\n");
std::string value_str = numberToString(value);
std::string pin_str = numberToString(pin);
std::string dir = "/sys/class/gpio/gpio" + pin_str + "/value";

std::ofstream file (dir.c_str());
if (file < 0) {
error_flag = true;
return -1;
}
if (file < 0)
return setErrorMessage("Unable to open " + dir + "\n");
file << value_str;
file.close();
error_flag = false;
clearError();
return 1;
}

Expand All @@ -185,13 +140,11 @@ int gnublin_gpio::digitalRead(int pin) {
std::string pin_str = numberToString(pin);
std::string device = "/sys/class/gpio/gpio" + pin_str + "/value";
std::ifstream file(device.c_str());
if (file < 0){
error_flag = true;
return -1;
}
if (file < 0)
return setErrorMessage("Unable to open " + device + "\n");
file >> value;
file.close();
error_flag = false;
clearError();
return stringToNumber(value);

}
Expand Down
Loading