14 #include <led_msgs/SetLEDs.h> 15 #include <led_msgs/LEDStateArray.h> 16 #include <ws281x/SetGamma.h> 20 #include <unordered_map> 66 for(
size_t i = 0; i <
strip_state.leds.size(); ++i) {
77 bool setGamma(ws281x::SetGamma::Request& req, ws281x::SetGamma::Response& resp)
79 for(
int i = 0; i < 255; ++i) {
86 bool setLeds(led_msgs::SetLEDs::Request& req, led_msgs::SetLEDs::Response& resp)
89 for(
auto const& led : req.leds) {
90 if (led.index < 0 || led.index >=
strip_state.leds.size()) {
91 ROS_ERROR(
"[ws281x] LED index out of bounds: %d", led.index);
92 resp.message =
"LED index out of bounds: " + std::to_string(led.index);
97 for(
auto const& led : req.leds) {
98 auto color = uint32_t(
108 resp.success =
false;
128 int main(
int argc,
char** argv)
136 uint64_t param_strip_type;
139 int param_brightness;
142 nh_priv.
param(
"gpio_pin", param_pin, 21);
143 nh_priv.
param(
"dma", param_dma, 10);
145 std::string strip_type_str;
146 nh_priv.
param(
"strip_type", strip_type_str, std::string(
"WS2811_STRIP_GBR"));
147 nh_priv.
param(
"led_count", param_led_count, 30);
148 nh_priv.
param(
"invert", param_invert,
false);
149 nh_priv.
param(
"brightness", param_brightness, 255);
153 param_strip_type = strip_type_it->second;
155 ROS_WARN(
"[ws281x] Unknown strip type: %s", strip_type_str.c_str());
159 if (param_freq < 0) {
160 ROS_WARN(
"[ws281x] Target_frequency out of range, resetting to default");
163 led_string.
freq = (uint32_t)param_freq;
166 led_string.
dmanum = param_dma;
180 if ((ret =
ws2811_init(&led_string)) != WS2811_SUCCESS) {
192 led_state_pub = nh_priv.
advertise<led_msgs::LEDStateArray>(
"state", 1,
true);
constexpr uint32_t LED_RED_MASK
constexpr uint32_t LED_BLUE
constexpr uint32_t LED_WHITE
constexpr uint32_t LED_BLUE_MASK
constexpr uint32_t LED_GREEN
constexpr uint32_t LED_BLUE_SHIFT
constexpr uint32_t LED_WHITE_MASK
ws2811_channel_t channel[RPI_PWM_CHANNELS]
#define SK6812_STRIP_GBRW
constexpr uint32_t LED_GREEN_MASK
#define SK6812_STRIP_RBGW
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
#define SK6812_STRIP_BRGW
constexpr uint32_t LED_RED_SHIFT
#define SK6812_STRIP_GRBW
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
#define WS2811_TARGET_FREQ
led_msgs::LEDStateArray strip_state
int main(int argc, char **argv)
constexpr uint32_t LED_GREEN_SHIFT
#define SK6812_STRIP_BGRW
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
void publish(const boost::shared_ptr< M > &message) const
ws2811_return_t ws2811_init(ws2811_t *ws2811)
#define ROS_ERROR_THROTTLE(period,...)
std::unordered_map< std::string, uint64_t > ws2811_types
ws2811_return_t ws2811_render(ws2811_t *ws2811)
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
bool setLeds(led_msgs::SetLEDs::Request &req, led_msgs::SetLEDs::Response &resp)
const char * ws2811_get_return_t_str(const ws2811_return_t state)
void ws2811_fini(ws2811_t *ws2811)
constexpr uint32_t LED_WHITE_SHIFT
#define SK6812_STRIP_RGBW
constexpr uint32_t LED_RED
ros::Publisher led_state_pub
ROSCPP_DECL void shutdown()
bool setGamma(ws281x::SetGamma::Request &req, ws281x::SetGamma::Response &resp)