mirror of
https://github.com/eclipse/upm.git
synced 2025-03-24 09:20:39 +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 <string>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include "upm_string_parser.hpp"
|
||||||
#include "pca9685.hpp"
|
#include "pca9685.hpp"
|
||||||
|
|
||||||
using namespace upm;
|
using namespace upm;
|
||||||
@ -71,6 +72,96 @@ PCA9685::PCA9685(int bus, uint8_t address, bool raw)
|
|||||||
enableRestart(true);
|
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()
|
PCA9685::~PCA9685()
|
||||||
{
|
{
|
||||||
setModeSleep(true);
|
setModeSleep(true);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <mraa/i2c.h>
|
#include <mraa/i2c.h>
|
||||||
#include <mraa/gpio.h>
|
#include <mraa/gpio.h>
|
||||||
|
#include <mraa/initio.hpp>
|
||||||
|
|
||||||
#define PCA9685_I2C_BUS 0
|
#define PCA9685_I2C_BUS 0
|
||||||
#define PCA9685_DEFAULT_I2C_ADDR 0x60
|
#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);
|
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
|
* PCA9685 destructor
|
||||||
*/
|
*/
|
||||||
@ -312,6 +320,7 @@ namespace upm {
|
|||||||
bool enableAutoIncrement(bool ai);
|
bool enableAutoIncrement(bool ai);
|
||||||
|
|
||||||
bool m_restartEnabled;
|
bool m_restartEnabled;
|
||||||
|
mraa::MraaIo mraaIo;
|
||||||
mraa_i2c_context m_i2c;
|
mraa_i2c_context m_i2c;
|
||||||
uint8_t m_addr;
|
uint8_t m_addr;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user