RoverButton, RoverBuzzer classes added. Signed-off-by: Mustafa Ozcelikors <mozcelikors@gmail.com>
diff --git a/rover/include/roverapi/rover_button.hpp b/rover/include/roverapi/rover_button.hpp new file mode 100644 index 0000000..cc67476 --- /dev/null +++ b/rover/include/roverapi/rover_button.hpp
@@ -0,0 +1,91 @@ +/* + * Copyright (c) 2017 FH Dortmund and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Description: + * RoverButton API - Interfaces for Rover button application development - Header file + * + * Contributors: + * M.Ozcelikors <mozcelikors@gmail.com>, created C++API 05.12.2017 + * + */ + +#ifndef ROVERAPI_ROVER_BUTTON_HPP_ +#define ROVERAPI_ROVER_BUTTON_HPP_ + + +#include <roverapi/rover_gpio.hpp> + +namespace rover +{ + + /** + * @brief Button type + */ + enum RoverButtonType_t { USER_BUTTON = 0, + SHUTDOWN_BUTTON = 1, + CUSTOM_BUTTON = 2}; + + /** + * @brief RoverButton class contains member functions to access Shutdown button, User button, and customly installed buttons on the rover. + */ + class RoverButton : public RoverGpio + { + private: + /** + * @brief Shutdown button pin in wiringPi format + */ + static const int SHUTDOWN_BUTTON_PIN = 29; //BCM-21, wiringpi 29 + + /** + * @brief User button pin in wiringPi format + */ + static const int USER_BUTTON_PIN = 27; //BCM-16, wiringpi 27 + + /** + * @brief Button pin + */ + int buttonPin; + + /** + * @brief Button type + */ + RoverButtonType_t buttonType; + + /** + * @brief Flag to hold if RoverButton is set up + */ + int ROVERBUTTON_INIT_; + + public: + /** + * @brief (assigning) Constructor for RoverButton + */ + RoverButton (const RoverButtonType_t button_type); + + /** + * @brief RoverButton initializer + * @return void + */ + void initialize (void); + + /** + * @brief Reads the digital value of the a button + * @return val RoverGpio::LO (low) or RoverGpio::HI (high). Embedded shutdown and user buttons are pulled-up. Therefore, when the button is pressed a LOW (0) is returned. + */ + int readButton (void); + + /** + * @brief Overrides the default button pin used in wiringPi format + * @param button_pin + * @return void + */ + void setButtonPin (const int button_pin); + }; +} + + +#endif /* ROVERAPI_ROVER_BUTTON_HPP_ */
diff --git a/rover/include/roverapi/rover_buzzer.hpp b/rover/include/roverapi/rover_buzzer.hpp new file mode 100644 index 0000000..b347654 --- /dev/null +++ b/rover/include/roverapi/rover_buzzer.hpp
@@ -0,0 +1,113 @@ +/* + * Copyright (c) 2017 FH Dortmund and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Description: + * RoverBuzzer API - Interfaces for Rover buzzer application development + * Header file + * + * Contributors: + * M.Ozcelikors <mozcelikors@gmail.com>, created C++API 05.12.2017 + * + */ + +#ifndef ROVERAPI_ROVER_BUZZER_HPP_ +#define ROVERAPI_ROVER_BUZZER_HPP_ + +#include <roverapi/rover_gpio.hpp> + +namespace rover +{ + /** + * @brief RoverBuzzer class provides the member functions related to embedded buzzer on the rover. + */ + class RoverBuzzer : public RoverGpio + { + private: + /* Pins */ + /** + * @brief Embedded buzzer pin on rover in wiringPi format + */ + static const int DEFAULT_BUZZER_PIN = 28; //BCM-20, wiringpi 28 + + /** + * @brief Buzzer pin in wiringPi format + */ + int BUZZER_PIN; + + /* Variable members */ + /** + * @brief Default buzzer frequency used by setBuzzerOn function. + */ + int BUZZER_FREQUENCY; + + /** + * @brief Flag to hold if RoverBuzzer is initialized + */ + int ROVERBUZZER_INIT_; + + public: + + /** + * @brief RoverBuzzer classs constructor + */ + RoverBuzzer(); + + /** + * @brief Initializes the RoverBuzzer that is instantiated. + * @return void + */ + void initialize (void); + + /** + * @brief Sets the default buzzer frequency in Hz. Values between 0-1000 Hz are conventionally used for the buzzer frequency. + * @param buzzer_freq Buzzer frequency to be set in Hz + * @return void + */ + void setBuzzerFrequency (const int buzzer_freq); + + /** + * @brief Retrieves the default buzzer frequency in Hz. + * @return buzzer_freq Default buzzer frequency in Hz. + */ + int getBuzzerFrequency (void); + + /** + * @brief Plays the buzzer with the default frequency. + * @return void + */ + void setBuzzerOn (void); + + /** + * @brief Turns off the buzzer. + * @return void + */ + void setBuzzerOff (void); + + /** + * @brief Overrides the default buzzer pin in wiringPi format + * @param pin in wiringPi format + * @return void + */ + void setBuzzerPin (const int pin); + + /** + * @brief Plays the buzzer with custom buzzer frequency. + * @param buzzer_freq Buzzer frequency to be set in Hz + * @return void + */ + void setBuzzerTone (const int buzzer_freq); + + /** + * @brief Plays the shutdown tone. + * @return void + */ + void shutdownTone (void); + }; +} + + +#endif /* ROVERAPI_ROVER_BUZZER_HPP_ */
diff --git a/rover/src/roverapi/rover_button.cpp b/rover/src/roverapi/rover_button.cpp new file mode 100644 index 0000000..90fcc8d --- /dev/null +++ b/rover/src/roverapi/rover_button.cpp
@@ -0,0 +1,77 @@ +/* + * Copyright (c) 2017 FH Dortmund and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Description: + * RoverButton API - Interfaces for Rover button application development + * + * Contributors: + * M.Ozcelikors <mozcelikors@gmail.com>, created C++API 05.12.2017 + * + */ + +#include <roverapi/rover_button.hpp> +#include <stdio.h> +#include <unistd.h> +#include <stdint.h> + +rover::RoverButton::RoverButton (const RoverButtonType_t button_type) +{ + this->ROVERBUTTON_INIT_ = 0; + + if (button_type == USER_BUTTON) + { + this->buttonType = USER_BUTTON; + this->buttonPin = USER_BUTTON_PIN; + } + else if (button_type == SHUTDOWN_BUTTON) + { + this->buttonType = SHUTDOWN_BUTTON; + this->buttonPin = SHUTDOWN_BUTTON_PIN; + } + else if (button_type == CUSTOM_BUTTON) + { + this->buttonType = CUSTOM_BUTTON; + } +} + +void rover::RoverButton::initialize (void) +{ + if (this->buttonType == SHUTDOWN_BUTTON) + { + /* Setup shutdown button */ + this->wPiPinMode (this->SHUTDOWN_BUTTON_PIN, this->INPUT_); + } + else if (this->buttonType == USER_BUTTON) + { + /* Setup user button */ + this->wPiPinMode (this->USER_BUTTON_PIN, this->INPUT_); + } + else if (this->buttonType == CUSTOM_BUTTON) + { + /* Setup custom button */ + this->wPiPinMode (this->buttonPin, this->INPUT_); + } + + this->ROVERBUTTON_INIT_ = 1; +} + +int rover::RoverButton::readButton (void) +{ + if (this->ROVERBUTTON_INIT_ != 1) + { + fprintf(stderr,"You havent initialized RoverButton. Use RoverButton()::initialize() !\n"); + } + else + { + return this->wPiDigitalRead (this->buttonPin); + } +} + +void rover::RoverButton::setButtonPin (const int button_pin) +{ + this->buttonPin = button_pin; +}
diff --git a/rover/src/roverapi/rover_buzzer.cpp b/rover/src/roverapi/rover_buzzer.cpp new file mode 100644 index 0000000..9425be1 --- /dev/null +++ b/rover/src/roverapi/rover_buzzer.cpp
@@ -0,0 +1,107 @@ +/* + * Copyright (c) 2017 FH Dortmund and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Description: + * RoverBuzzer API - Interfaces for Rover buzzer application development + * + * Contributors: + * M.Ozcelikors <mozcelikors@gmail.com>, created C++API 05.12.2017 + * + */ + + +#include <roverapi/rover_buzzer.hpp> +#include <wiringPi.h> +#include <softTone.h> +#include <stdio.h> +#include <unistd.h> +#include <stdint.h> + +rover::RoverBuzzer::RoverBuzzer() +:BUZZER_FREQUENCY(200), /* Initialize default buzzer frequency */ + ROVERBUZZER_INIT_(0), + BUZZER_PIN (DEFAULT_BUZZER_PIN) +{ + +} + +void rover::RoverBuzzer::initialize (void) +{ + //wiringPiSetup(); + /* Setup buzzer */ + this->wPiPinMode (this->BUZZER_PIN, this->SOFT_TONE_OUTPUT_); + this->wPiSoftToneCreate (this->BUZZER_PIN); + + this->ROVERBUZZER_INIT_ = 1; +} + +void rover::RoverBuzzer::setBuzzerFrequency (const int buzzer_freq) +{ + this->BUZZER_FREQUENCY = buzzer_freq; +} + +int rover::RoverBuzzer::getBuzzerFrequency (void) +{ + return this->BUZZER_FREQUENCY; +} + +void rover::RoverBuzzer::setBuzzerOn (void) +{ + if (this->ROVERBUZZER_INIT_ != 1) + { + fprintf(stderr,"You havent initialized RoverGpio. Use RoverGpio()::initialize() !\n"); + } + else + { + this->wPiSoftToneWrite (this->BUZZER_PIN, this->BUZZER_FREQUENCY); + } +} + +void rover::RoverBuzzer::setBuzzerOff (void) +{ + if (this->ROVERBUZZER_INIT_ != 1) + { + fprintf(stderr,"You havent initialized RoverGpio. Use RoverGpio()::initialize() !\n"); + } + else + { + this->wPiSoftToneWrite (this->BUZZER_PIN, 0); + } +} + +void rover::RoverBuzzer::shutdownTone (void) +{ + if (this->ROVERBUZZER_INIT_ != 1) + { + fprintf(stderr,"You havent initialized RoverGpio. Use RoverGpio()::initialize() !\n"); + } + else + { + this->wPiSoftToneWrite (this->BUZZER_PIN, 300); + this->wPiDelay (2000); + this->wPiSoftToneWrite (BUZZER_PIN, 0); + } +} + +void rover::RoverBuzzer::setBuzzerTone (const int buzzer_freq) +{ + if (this->ROVERBUZZER_INIT_ != 1) + { + fprintf(stderr,"You havent initialized RoverGpio. Use RoverGpio()::initialize() !\n"); + } + else + { + this->wPiSoftToneWrite (this->BUZZER_PIN, buzzer_freq); + } +} + +void rover::RoverBuzzer::setBuzzerPin (const int pin) +{ + this->BUZZER_PIN = pin; +} + +