mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
PCA9685: Add string based constructor for PWM Controller
This commit is contained in:
parent
33fcb18cce
commit
cdc60a5f1a
@ -28,6 +28,7 @@
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
|
||||
#include "upm_string_parser.hpp"
|
||||
#include "pca9685.hpp"
|
||||
|
||||
using namespace upm;
|
||||
@ -71,6 +72,96 @@ PCA9685::PCA9685(int bus, uint8_t address, bool raw)
|
||||
enableRestart(true);
|
||||
}
|
||||
|
||||
PCA9685::PCA9685(std::string initStr) : mraaIo(initStr)
|
||||
{
|
||||
mraa_io_descriptor* descs = mraaIo.getMraaDescriptors();
|
||||
|
||||
std::vector<std::string> upmTokens;
|
||||
|
||||
if(mraaIo.getLeftoverStr() != "") {
|
||||
upmTokens = UpmStringParser::parse(mraaIo.getLeftoverStr());
|
||||
}
|
||||
|
||||
if(!descs->i2cs)
|
||||
{
|
||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||
": mraa_i2c_init() failed");
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !(m_i2c = descs->i2cs[0]) )
|
||||
{
|
||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||
": mraa_i2c_init() failed");
|
||||
}
|
||||
}
|
||||
|
||||
// enable auto-increment mode by default
|
||||
enableAutoIncrement(true);
|
||||
|
||||
// enable restart by default.
|
||||
enableRestart(true);
|
||||
|
||||
std::string::size_type sz;
|
||||
|
||||
for (std::string tok : upmTokens) {
|
||||
if(tok.substr(0,10) == "writeByte:") {
|
||||
uint8_t reg = std::stoi(tok.substr(10),&sz,0);
|
||||
tok = tok.substr(10);
|
||||
uint8_t byte = std::stoi(tok.substr(sz+1),nullptr,0);
|
||||
writeByte(reg, byte);
|
||||
}
|
||||
if(tok.substr(0,10) == "writeWord:") {
|
||||
uint8_t reg = std::stoi(tok.substr(10),&sz,0);
|
||||
tok = tok.substr(10);
|
||||
uint16_t word = std::stoi(tok.substr(sz+1),nullptr,0);
|
||||
writeWord(reg, word);
|
||||
}
|
||||
if(tok.substr(0,10) == "modeSleep:") {
|
||||
bool sleep = std::stoi(tok.substr(10),nullptr,0);
|
||||
setModeSleep(sleep);
|
||||
}
|
||||
if(tok.substr(0,14) == "autoIncrement:") {
|
||||
bool ai = std::stoi(tok.substr(14),nullptr,0);
|
||||
enableAutoIncrement(ai);
|
||||
}
|
||||
if(tok.substr(0,10) == "ledFullOn:") {
|
||||
uint8_t led = std::stoi(tok.substr(10),&sz,0);
|
||||
tok = tok.substr(10);
|
||||
bool val = std::stoi(tok.substr(sz+1),nullptr,0);
|
||||
ledFullOn(led, val);
|
||||
}
|
||||
if(tok.substr(0,11) == "ledFullOff:") {
|
||||
uint8_t led = std::stoi(tok.substr(11),&sz,0);
|
||||
tok = tok.substr(11);
|
||||
bool val = std::stoi(tok.substr(sz+1),nullptr,0);
|
||||
ledFullOff(led, val);
|
||||
}
|
||||
if(tok.substr(0,10) == "ledOnTime:") {
|
||||
uint8_t led = std::stoi(tok.substr(10),&sz,0);
|
||||
tok = tok.substr(10);
|
||||
uint16_t time = std::stoi(tok.substr(sz+1),nullptr,0);
|
||||
ledOnTime(led, time);
|
||||
}
|
||||
if(tok.substr(0,11) == "ledOffTime:") {
|
||||
uint8_t led = std::stoi(tok.substr(11),&sz,0);
|
||||
tok = tok.substr(11);
|
||||
uint16_t time = std::stoi(tok.substr(sz+1),nullptr,0);
|
||||
ledOnTime(led, time);
|
||||
}
|
||||
if(tok.substr(0,9) == "prescale:") {
|
||||
uint8_t prescale = std::stoi(tok.substr(9),nullptr,0);
|
||||
setPrescale(prescale);
|
||||
}
|
||||
if(tok.substr(0,15) == "prescaleFromHz:") {
|
||||
float hz = std::stof(tok.substr(15),&sz);
|
||||
tok = tok.substr(15);
|
||||
float oscFreq = std::stof(tok.substr(sz+1),nullptr);
|
||||
setPrescaleFromHz(hz, oscFreq);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PCA9685::~PCA9685()
|
||||
{
|
||||
setModeSleep(true);
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <string>
|
||||
#include <mraa/i2c.h>
|
||||
#include <mraa/gpio.h>
|
||||
#include <mraa/initio.hpp>
|
||||
|
||||
#define PCA9685_I2C_BUS 0
|
||||
#define PCA9685_DEFAULT_I2C_ADDR 0x60
|
||||
@ -185,6 +186,13 @@ namespace upm {
|
||||
*/
|
||||
PCA9685(int bus, uint8_t address = PCA9685_DEFAULT_I2C_ADDR, bool raw = false);
|
||||
|
||||
/**
|
||||
* Instantiates a PCA9685 PWM Controller object based on a given string.
|
||||
*
|
||||
* @param initStr string containing specific information for PCA9685 initialization.
|
||||
*/
|
||||
PCA9685(std::string initStr);
|
||||
|
||||
/**
|
||||
* PCA9685 destructor
|
||||
*/
|
||||
@ -312,6 +320,7 @@ namespace upm {
|
||||
bool enableAutoIncrement(bool ai);
|
||||
|
||||
bool m_restartEnabled;
|
||||
mraa::MraaIo mraaIo;
|
||||
mraa_i2c_context m_i2c;
|
||||
uint8_t m_addr;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user