From c21a0e20487005afccd08e821dd145ddfd6f113d Mon Sep 17 00:00:00 2001 From: Andre Newman Date: Sun, 5 May 2019 16:27:35 -0400 Subject: [PATCH] CueHandler - Converted `CueController` pointers to references. Section - Reverted `Section::set_mirror()` to return a pointer instead of reference. Pixel - Commented out `DISABLE_COLOR_BUFFER` by default. --- src/core/maestro.h | 1 - src/core/pixel.h | 4 +- src/core/section.cpp | 5 +- src/core/section.h | 9 +- src/cue/animationcuehandler.cpp | 80 +++++++------- src/cue/animationcuehandler.h | 2 +- src/cue/canvascuehandler.cpp | 186 ++++++++++++++++---------------- src/cue/canvascuehandler.h | 3 +- src/cue/cuecontroller.cpp | 10 +- src/cue/cuehandler.cpp | 18 ++-- src/cue/cuehandler.h | 6 +- src/cue/maestrocuehandler.cpp | 26 ++--- src/cue/maestrocuehandler.h | 2 +- src/cue/sectioncuehandler.cpp | 70 ++++++------ src/cue/sectioncuehandler.h | 2 +- src/cue/showcuehandler.cpp | 28 ++--- src/cue/showcuehandler.h | 2 +- 17 files changed, 226 insertions(+), 228 deletions(-) diff --git a/src/core/maestro.h b/src/core/maestro.h index 6736d98..9efe43e 100644 --- a/src/core/maestro.h +++ b/src/core/maestro.h @@ -1,7 +1,6 @@ /* Maestro.cpp - Master class for coordinating Sections. */ - #ifndef MAESTRO_H #define MAESTRO_H diff --git a/src/core/pixel.h b/src/core/pixel.h index 3ed3d92..920836d 100644 --- a/src/core/pixel.h +++ b/src/core/pixel.h @@ -3,8 +3,8 @@ Inspired by RGBMood (http://forum.arduino.cc/index.php?topic=90160.0) */ -// TODO: How to make this available in a sketch? -#define DISABLE_COLOR_BUFFER // Disable per-Pixel fading and color buffering. +// FIXME: How to make this available in a sketch? +//#define DISABLE_COLOR_BUFFER // Disable per-Pixel fading and color buffering. #ifndef PIXEL_H #define PIXEL_H diff --git a/src/core/section.cpp b/src/core/section.cpp index 52b8351..5dc90bc 100644 --- a/src/core/section.cpp +++ b/src/core/section.cpp @@ -384,8 +384,7 @@ namespace PixelMaestro { * @param x Mirror the x axis. * @param y Mirror the y axis. */ - // FIXME: Convert back to pointer (could include nullptr) - Section::Mirror& Section::set_mirror(bool x, bool y) { + Section::Mirror* Section::set_mirror(bool x, bool y) { if (x == false && y == false) { delete mirror_; mirror_ = nullptr; @@ -398,7 +397,7 @@ namespace PixelMaestro { mirror_->set(x, y, this->dimensions_); } - return *mirror_; + return mirror_; } /** diff --git a/src/core/section.h b/src/core/section.h index f64b625..493940e 100644 --- a/src/core/section.h +++ b/src/core/section.h @@ -148,12 +148,7 @@ namespace PixelMaestro { When getting color output, use get_pixel_color(). This returns RGB values after blending the two Sections together. */ struct Layer { - /** - * The Section to use as the layer. - * This is different from the Section containing the Layer object. - * - * TODO: Convert to reference - */ + /// The Section to use as the layer. Section* section = nullptr; /// Method of blending the output from the Layer with the base Section. @@ -224,7 +219,7 @@ namespace PixelMaestro { void set_dimensions(uint16_t x, uint16_t y); Layer& set_layer(Colors::MixMode mix_mode = Colors::MixMode::Alpha, uint8_t alpha = 128); void set_maestro(Maestro& maestro); - Mirror& set_mirror(bool x, bool y); + Mirror* set_mirror(bool x, bool y); Point& set_offset(uint16_t x, uint16_t y); void set_one(uint16_t x, uint16_t y, const Colors::RGB& color, uint8_t step_count); Scroll& set_scroll(uint16_t x, uint16_t y, bool reverse_x = false, bool reverse_y = false); diff --git a/src/cue/animationcuehandler.cpp b/src/cue/animationcuehandler.cpp index c5ad5a9..57b0162 100644 --- a/src/cue/animationcuehandler.cpp +++ b/src/cue/animationcuehandler.cpp @@ -16,9 +16,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = multiplier; + controller_.get_buffer()[++index] = multiplier; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_lightning_options(uint8_t section_num, uint8_t layer_num, uint8_t num_bolts, int8_t drift, uint8_t fork_chance) { @@ -28,11 +28,11 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = num_bolts; - controller_->get_buffer()[++index] = (uint8_t)drift; - controller_->get_buffer()[++index] = fork_chance; + controller_.get_buffer()[++index] = num_bolts; + controller_.get_buffer()[++index] = (uint8_t)drift; + controller_.get_buffer()[++index] = fork_chance; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_plasma_options(uint8_t section_num, uint8_t layer_num, float size, float resolution) { @@ -45,16 +45,16 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = size_byte.converted.byte[0]; - controller_->get_buffer()[++index] = size_byte.converted.byte[1]; - controller_->get_buffer()[++index] = size_byte.converted.byte[2]; - controller_->get_buffer()[++index] = size_byte.converted.byte[3]; - controller_->get_buffer()[++index] = resolution_byte.converted.byte[0]; - controller_->get_buffer()[++index] = resolution_byte.converted.byte[1]; - controller_->get_buffer()[++index] = resolution_byte.converted.byte[2]; - controller_->get_buffer()[++index] = resolution_byte.converted.byte[3]; - - return controller_->assemble(++index); + controller_.get_buffer()[++index] = size_byte.converted.byte[0]; + controller_.get_buffer()[++index] = size_byte.converted.byte[1]; + controller_.get_buffer()[++index] = size_byte.converted.byte[2]; + controller_.get_buffer()[++index] = size_byte.converted.byte[3]; + controller_.get_buffer()[++index] = resolution_byte.converted.byte[0]; + controller_.get_buffer()[++index] = resolution_byte.converted.byte[1]; + controller_.get_buffer()[++index] = resolution_byte.converted.byte[2]; + controller_.get_buffer()[++index] = resolution_byte.converted.byte[3]; + + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_radial_options(uint8_t section_num, uint8_t layer_num, uint8_t resolution) { @@ -64,9 +64,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = resolution; + controller_.get_buffer()[++index] = resolution; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_sparkle_options(uint8_t section_num, uint8_t layer_num, uint8_t threshold) { @@ -76,9 +76,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = threshold; + controller_.get_buffer()[++index] = threshold; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_wave_options(uint8_t section_num, uint8_t layer_num, int8_t skew) { @@ -88,9 +88,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)skew; + controller_.get_buffer()[++index] = (uint8_t)skew; - return controller_->assemble(++index); + return controller_.assemble(++index); } // General-purpose Cues @@ -101,9 +101,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = cycle_index; + controller_.get_buffer()[++index] = cycle_index; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_fade(uint8_t section_num, uint8_t layer_num, bool fade) { @@ -113,9 +113,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)fade; + controller_.get_buffer()[++index] = (uint8_t)fade; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_orientation(uint8_t section_num, uint8_t layer_num, Animation::Orientation orientation) { @@ -125,9 +125,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)orientation; + controller_.get_buffer()[++index] = (uint8_t)orientation; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_palette(uint8_t section_num, uint8_t layer_num, const Palette& palette) { @@ -137,11 +137,11 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = palette.get_num_colors(); + controller_.get_buffer()[++index] = palette.get_num_colors(); - uint16_t palette_size= serialize_palette(&controller_->get_buffer()[++index], palette); + uint16_t palette_size= serialize_palette(&controller_.get_buffer()[++index], palette); - return controller_->assemble(index + palette_size); + return controller_.assemble(index + palette_size); } uint8_t* AnimationCueHandler::set_reverse(uint8_t section_num, uint8_t layer_num, bool reverse) { @@ -151,9 +151,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)reverse; + controller_.get_buffer()[++index] = (uint8_t)reverse; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::set_timer(uint8_t section_num, uint8_t layer_num, uint16_t interval, uint16_t delay) { @@ -166,12 +166,12 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = interval_byte.converted_0; - controller_->get_buffer()[++index] = interval_byte.converted_1; - controller_->get_buffer()[++index] = delay_byte.converted_0; - controller_->get_buffer()[++index] = delay_byte.converted_1; + controller_.get_buffer()[++index] = interval_byte.converted_0; + controller_.get_buffer()[++index] = interval_byte.converted_1; + controller_.get_buffer()[++index] = delay_byte.converted_0; + controller_.get_buffer()[++index] = delay_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::start(uint8_t section_num, uint8_t layer_num) { @@ -182,7 +182,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* AnimationCueHandler::stop(uint8_t section_num, uint8_t layer_num) { @@ -193,7 +193,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } void AnimationCueHandler::run(uint8_t *cue) { diff --git a/src/cue/animationcuehandler.h b/src/cue/animationcuehandler.h index bd4806f..9c4bb4e 100644 --- a/src/cue/animationcuehandler.h +++ b/src/cue/animationcuehandler.h @@ -34,7 +34,7 @@ namespace PixelMaestro { OptionsByte }; - explicit AnimationCueHandler(CueController* controller) : CueHandler(controller) { } + explicit AnimationCueHandler(CueController& controller) : CueHandler(controller) { } ~AnimationCueHandler() = default; // Animation-specific calls diff --git a/src/cue/canvascuehandler.cpp b/src/cue/canvascuehandler.cpp index de387d1..cc84788 100644 --- a/src/cue/canvascuehandler.cpp +++ b/src/cue/canvascuehandler.cpp @@ -12,7 +12,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } // TODO: For draw methods, add parameter to choose which frame number to draw on. Leave omitted to draw to current frame (is that even possible?) @@ -28,21 +28,21 @@ namespace PixelMaestro { layer_num ); - controller_->get_buffer()[++index] = color_index; - controller_->get_buffer()[++index] = origin_x_byte.converted_0; - controller_->get_buffer()[++index] = origin_x_byte.converted_1; - controller_->get_buffer()[++index] = origin_y_byte.converted_0; - controller_->get_buffer()[++index] = origin_y_byte.converted_1; - controller_->get_buffer()[++index] = radius_byte.converted_0; - controller_->get_buffer()[++index] = radius_byte.converted_1; - controller_->get_buffer()[++index] = (uint8_t)fill; + controller_.get_buffer()[++index] = color_index; + controller_.get_buffer()[++index] = origin_x_byte.converted_0; + controller_.get_buffer()[++index] = origin_x_byte.converted_1; + controller_.get_buffer()[++index] = origin_y_byte.converted_0; + controller_.get_buffer()[++index] = origin_y_byte.converted_1; + controller_.get_buffer()[++index] = radius_byte.converted_0; + controller_.get_buffer()[++index] = radius_byte.converted_1; + controller_.get_buffer()[++index] = (uint8_t)fill; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::draw_frame(uint8_t section_num, uint8_t layer_num, uint16_t size_x, uint16_t size_y, const uint8_t* frame) { // Check the size of the buffer. If it's not big enough to store the frame, exit. - if ((size_x * size_y) > controller_->get_buffer_size()) { + if ((size_x * size_y) > controller_.get_buffer_size()) { return nullptr; } @@ -56,19 +56,19 @@ namespace PixelMaestro { layer_num ); - controller_->get_buffer()[++index] = size_x_byte.converted_0; - controller_->get_buffer()[++index] = size_x_byte.converted_1; - controller_->get_buffer()[++index] = size_y_byte.converted_0; - controller_->get_buffer()[++index] = size_y_byte.converted_1; + controller_.get_buffer()[++index] = size_x_byte.converted_0; + controller_.get_buffer()[++index] = size_x_byte.converted_1; + controller_.get_buffer()[++index] = size_y_byte.converted_0; + controller_.get_buffer()[++index] = size_y_byte.converted_1; Point grid(size_x, size_y); for (uint16_t y = 0; y < size_y; y++) { for (uint16_t x = 0; x < size_x; x++) { - controller_->get_buffer()[++index] = frame[grid.get_inline_index(x, y)]; + controller_.get_buffer()[++index] = frame[grid.get_inline_index(x, y)]; } } - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::draw_line(uint8_t section_num, uint8_t layer_num, uint8_t color_index, uint16_t origin_x, uint16_t origin_y, uint16_t target_x, uint16_t target_y) { @@ -84,17 +84,17 @@ namespace PixelMaestro { layer_num ); - controller_->get_buffer()[++index] = color_index; - controller_->get_buffer()[++index] = origin_x_byte.converted_0; - controller_->get_buffer()[++index] = origin_x_byte.converted_1; - controller_->get_buffer()[++index] = origin_y_byte.converted_0; - controller_->get_buffer()[++index] = origin_y_byte.converted_1; - controller_->get_buffer()[++index] = target_x_byte.converted_0; - controller_->get_buffer()[++index] = target_x_byte.converted_1; - controller_->get_buffer()[++index] = target_y_byte.converted_0; - controller_->get_buffer()[++index] = target_y_byte.converted_1; - - return controller_->assemble(++index); + controller_.get_buffer()[++index] = color_index; + controller_.get_buffer()[++index] = origin_x_byte.converted_0; + controller_.get_buffer()[++index] = origin_x_byte.converted_1; + controller_.get_buffer()[++index] = origin_y_byte.converted_0; + controller_.get_buffer()[++index] = origin_y_byte.converted_1; + controller_.get_buffer()[++index] = target_x_byte.converted_0; + controller_.get_buffer()[++index] = target_x_byte.converted_1; + controller_.get_buffer()[++index] = target_y_byte.converted_0; + controller_.get_buffer()[++index] = target_y_byte.converted_1; + + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::draw_point(uint8_t section_num, uint8_t layer_num, uint8_t color_index, uint16_t x, uint16_t y) { @@ -107,13 +107,13 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = color_index; - controller_->get_buffer()[++index] = x_byte.converted_0; - controller_->get_buffer()[++index] = x_byte.converted_1; - controller_->get_buffer()[++index] = y_byte.converted_0; - controller_->get_buffer()[++index] = y_byte.converted_1; + controller_.get_buffer()[++index] = color_index; + controller_.get_buffer()[++index] = x_byte.converted_0; + controller_.get_buffer()[++index] = x_byte.converted_1; + controller_.get_buffer()[++index] = y_byte.converted_0; + controller_.get_buffer()[++index] = y_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::draw_rect(uint8_t section_num, uint8_t layer_num, uint8_t color_index, uint16_t origin_x, uint16_t origin_y, uint16_t size_x, uint16_t size_y, bool fill) { @@ -128,18 +128,18 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = color_index; - controller_->get_buffer()[++index] = origin_x_byte.converted_0; - controller_->get_buffer()[++index] = origin_x_byte.converted_1; - controller_->get_buffer()[++index] = origin_y_byte.converted_0; - controller_->get_buffer()[++index] = origin_y_byte.converted_1; - controller_->get_buffer()[++index] = size_x_byte.converted_0; - controller_->get_buffer()[++index] = size_x_byte.converted_1; - controller_->get_buffer()[++index] = size_y_byte.converted_0; - controller_->get_buffer()[++index] = size_y_byte.converted_1; - controller_->get_buffer()[++index] = (uint8_t)fill; - - return controller_->assemble(++index); + controller_.get_buffer()[++index] = color_index; + controller_.get_buffer()[++index] = origin_x_byte.converted_0; + controller_.get_buffer()[++index] = origin_x_byte.converted_1; + controller_.get_buffer()[++index] = origin_y_byte.converted_0; + controller_.get_buffer()[++index] = origin_y_byte.converted_1; + controller_.get_buffer()[++index] = size_x_byte.converted_0; + controller_.get_buffer()[++index] = size_x_byte.converted_1; + controller_.get_buffer()[++index] = size_y_byte.converted_0; + controller_.get_buffer()[++index] = size_y_byte.converted_1; + controller_.get_buffer()[++index] = (uint8_t)fill; + + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::draw_triangle(uint8_t section_num, uint8_t layer_num, uint8_t color_index, uint16_t point_a_x, uint16_t point_a_y, uint16_t point_b_x, uint16_t point_b_y, uint16_t point_c_x, uint16_t point_c_y, bool fill) { @@ -156,22 +156,22 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = color_index; - controller_->get_buffer()[++index] = point_a_x_byte.converted_0; - controller_->get_buffer()[++index] = point_a_x_byte.converted_1; - controller_->get_buffer()[++index] = point_a_y_byte.converted_0; - controller_->get_buffer()[++index] = point_a_y_byte.converted_1; - controller_->get_buffer()[++index] = point_b_x_byte.converted_0; - controller_->get_buffer()[++index] = point_b_x_byte.converted_1; - controller_->get_buffer()[++index] = point_b_y_byte.converted_0; - controller_->get_buffer()[++index] = point_b_y_byte.converted_1; - controller_->get_buffer()[++index] = point_c_x_byte.converted_0; - controller_->get_buffer()[++index] = point_c_x_byte.converted_1; - controller_->get_buffer()[++index] = point_c_y_byte.converted_0; - controller_->get_buffer()[++index] = point_c_y_byte.converted_1; - controller_->get_buffer()[++index] = (uint8_t)fill; - - return controller_->assemble(++index); + controller_.get_buffer()[++index] = color_index; + controller_.get_buffer()[++index] = point_a_x_byte.converted_0; + controller_.get_buffer()[++index] = point_a_x_byte.converted_1; + controller_.get_buffer()[++index] = point_a_y_byte.converted_0; + controller_.get_buffer()[++index] = point_a_y_byte.converted_1; + controller_.get_buffer()[++index] = point_b_x_byte.converted_0; + controller_.get_buffer()[++index] = point_b_x_byte.converted_1; + controller_.get_buffer()[++index] = point_b_y_byte.converted_0; + controller_.get_buffer()[++index] = point_b_y_byte.converted_1; + controller_.get_buffer()[++index] = point_c_x_byte.converted_0; + controller_.get_buffer()[++index] = point_c_x_byte.converted_1; + controller_.get_buffer()[++index] = point_c_y_byte.converted_0; + controller_.get_buffer()[++index] = point_c_y_byte.converted_1; + controller_.get_buffer()[++index] = (uint8_t)fill; + + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::draw_text(uint8_t section_num, uint8_t layer_num, uint8_t color_index, uint16_t origin_x, uint16_t origin_y, Font::Type font, const char* text, uint8_t num_chars) { @@ -184,19 +184,19 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = color_index; - controller_->get_buffer()[++index] = origin_x_byte.converted_0; - controller_->get_buffer()[++index] = origin_x_byte.converted_1; - controller_->get_buffer()[++index] = origin_y_byte.converted_0; - controller_->get_buffer()[++index] = origin_y_byte.converted_1; - controller_->get_buffer()[++index] = (uint8_t)font; - controller_->get_buffer()[++index] = num_chars; + controller_.get_buffer()[++index] = color_index; + controller_.get_buffer()[++index] = origin_x_byte.converted_0; + controller_.get_buffer()[++index] = origin_x_byte.converted_1; + controller_.get_buffer()[++index] = origin_y_byte.converted_0; + controller_.get_buffer()[++index] = origin_y_byte.converted_1; + controller_.get_buffer()[++index] = (uint8_t)font; + controller_.get_buffer()[++index] = num_chars; for (uint8_t i = 0; i < num_chars; i++) { - controller_->get_buffer()[++index] = text[i]; + controller_.get_buffer()[++index] = text[i]; } - return controller_->assemble(index); + return controller_.assemble(index); } uint8_t* CanvasCueHandler::erase_point(uint8_t section_num, uint8_t layer_num, uint16_t x, uint16_t y) { @@ -209,12 +209,12 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = x_byte.converted_0; - controller_->get_buffer()[++index] = x_byte.converted_1; - controller_->get_buffer()[++index] = y_byte.converted_0; - controller_->get_buffer()[++index] = y_byte.converted_1; + controller_.get_buffer()[++index] = x_byte.converted_0; + controller_.get_buffer()[++index] = x_byte.converted_1; + controller_.get_buffer()[++index] = y_byte.converted_0; + controller_.get_buffer()[++index] = y_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::next_frame(uint8_t section_num, uint8_t layer_num) { @@ -225,7 +225,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::previous_frame(uint8_t section_num, uint8_t layer_num) { @@ -236,7 +236,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::remove_frame_timer(uint8_t section_num, uint8_t layer_num) { @@ -247,7 +247,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::set_current_frame_index(uint8_t section_num, uint8_t layer_num, uint16_t frame_index) { @@ -259,10 +259,10 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = index_byte.converted_0; - controller_->get_buffer()[++index] = index_byte.converted_1; + controller_.get_buffer()[++index] = index_byte.converted_0; + controller_.get_buffer()[++index] = index_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::set_frame_timer(uint8_t section_num, uint8_t layer_num, uint16_t speed) { @@ -274,10 +274,10 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = speed_byte.converted_0; - controller_->get_buffer()[++index] = speed_byte.converted_1; + controller_.get_buffer()[++index] = speed_byte.converted_0; + controller_.get_buffer()[++index] = speed_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::set_num_frames(uint8_t section_num, uint8_t layer_num, uint16_t num_frames) { @@ -289,10 +289,10 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = num_frames_byte.converted_0; - controller_->get_buffer()[++index] = num_frames_byte.converted_1; + controller_.get_buffer()[++index] = num_frames_byte.converted_0; + controller_.get_buffer()[++index] = num_frames_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::set_palette(uint8_t section_num, uint8_t layer_num, const Palette& palette) { @@ -302,11 +302,11 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = palette.get_num_colors(); + controller_.get_buffer()[++index] = palette.get_num_colors(); - uint16_t palette_size = serialize_palette(&controller_->get_buffer()[++index], palette); + uint16_t palette_size = serialize_palette(&controller_.get_buffer()[++index], palette); - return controller_->assemble(index + palette_size); + return controller_.assemble(index + palette_size); } uint8_t* CanvasCueHandler::start_frame_timer(uint8_t section_num, uint8_t layer_num) { @@ -317,7 +317,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* CanvasCueHandler::stop_frame_timer(uint8_t section_num, uint8_t layer_num) { @@ -328,7 +328,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } Font* CanvasCueHandler::get_font(Font::Type font_type) { diff --git a/src/cue/canvascuehandler.h b/src/cue/canvascuehandler.h index 14e8912..4351430 100644 --- a/src/cue/canvascuehandler.h +++ b/src/cue/canvascuehandler.h @@ -36,8 +36,9 @@ namespace PixelMaestro { OptionsByte }; - explicit CanvasCueHandler(CueController* controller) : CueHandler(controller) { } + explicit CanvasCueHandler(CueController& controller) : CueHandler(controller) { } ~CanvasCueHandler() = default; + // TODO: Rewrite Cues to also require a frame number (default to frame 0 if not supplied) uint8_t* clear(uint8_t section_num, uint8_t layer_num); uint8_t* draw_circle(uint8_t section_num, uint8_t layer_num, uint8_t color_index, uint16_t origin_x, uint16_t origin_y, uint16_t radius, bool fill); uint8_t* draw_frame(uint8_t section_num, uint8_t layer_num, uint16_t size_x, uint16_t size_y, const uint8_t* frame); diff --git a/src/cue/cuecontroller.cpp b/src/cue/cuecontroller.cpp index 06b0ad1..e230eca 100644 --- a/src/cue/cuecontroller.cpp +++ b/src/cue/cuecontroller.cpp @@ -76,7 +76,7 @@ namespace PixelMaestro { CueHandler& CueController::enable_animation_cue_handler() { uint8_t handler = (uint8_t)Handler::AnimationCueHandler; if (handlers_[handler] == nullptr) { - handlers_[handler] = new AnimationCueHandler(this); + handlers_[handler] = new AnimationCueHandler(*this); } return *handlers_[handler]; } @@ -88,7 +88,7 @@ namespace PixelMaestro { CueHandler& CueController::enable_canvas_cue_handler() { uint8_t handler = (uint8_t)Handler::CanvasCueHandler; if (handlers_[handler] == nullptr) { - handlers_[handler] = new CanvasCueHandler(this); + handlers_[handler] = new CanvasCueHandler(*this); } return *handlers_[handler]; } @@ -100,7 +100,7 @@ namespace PixelMaestro { CueHandler& CueController::enable_maestro_cue_handler() { uint8_t handler = (uint8_t)Handler::MaestroCueHandler; if (handlers_[handler] == nullptr) { - handlers_[handler] = new MaestroCueHandler(this); + handlers_[handler] = new MaestroCueHandler(*this); } return *handlers_[handler]; } @@ -112,7 +112,7 @@ namespace PixelMaestro { CueHandler& CueController::enable_section_cue_handler() { uint8_t handler = (uint8_t)Handler::SectionCueHandler; if (handlers_[handler] == nullptr) { - handlers_[handler] = new SectionCueHandler(this); + handlers_[handler] = new SectionCueHandler(*this); } return *handlers_[handler]; } @@ -124,7 +124,7 @@ namespace PixelMaestro { CueHandler& CueController::enable_show_cue_handler() { uint8_t handler = (uint8_t)Handler::ShowCueHandler; if (handlers_[handler] == nullptr) { - handlers_[handler] = new ShowCueHandler(this); + handlers_[handler] = new ShowCueHandler(*this); } return *handlers_[handler]; } diff --git a/src/cue/cuehandler.cpp b/src/cue/cuehandler.cpp index be08a66..6c00bf6 100644 --- a/src/cue/cuehandler.cpp +++ b/src/cue/cuehandler.cpp @@ -6,6 +6,12 @@ namespace PixelMaestro { + /** + * @brief Constructor. + * @param controller CueController to assign to this CueHandler. + */ + CueHandler::CueHandler(CueController &controller) : controller_(controller) { } + /** * Extracts a Palette from a Cue. * @param cue The Cue starting at the Palette's address. @@ -33,7 +39,7 @@ namespace PixelMaestro { * @return Matching Section/Layer or nullptr if not found. */ Section* CueHandler::get_section(uint8_t section_id, uint8_t layer_id) const { - Section* section = &controller_->get_maestro().get_section(section_id); + Section* section = &controller_.get_maestro().get_section(section_id); /* * Iterate until we hit the desired Layer level. @@ -46,7 +52,7 @@ namespace PixelMaestro { section = section->get_layer()->section; } else { - section = section->set_layer().section; + section = nullptr; } } } @@ -83,8 +89,8 @@ namespace PixelMaestro { */ uint16_t CueHandler::start_cue(uint8_t handler_byte, uint8_t action_byte) { uint16_t index = (uint8_t)CueController::Byte::PayloadByte; - controller_->get_buffer()[index] = handler_byte; - controller_->get_buffer()[++index] = action_byte; + controller_.get_buffer()[index] = handler_byte; + controller_.get_buffer()[++index] = action_byte; return index; } @@ -99,8 +105,8 @@ namespace PixelMaestro { */ uint16_t CueHandler::start_cue(uint8_t handler_byte, uint8_t action_byte, uint8_t section_num, uint8_t layer_num) { uint16_t index = start_cue(handler_byte, action_byte); - controller_->get_buffer()[++index] = section_num; - controller_->get_buffer()[++index] = layer_num; + controller_.get_buffer()[++index] = section_num; + controller_.get_buffer()[++index] = layer_num; return index; } diff --git a/src/cue/cuehandler.h b/src/cue/cuehandler.h index cf57301..e168cb2 100644 --- a/src/cue/cuehandler.h +++ b/src/cue/cuehandler.h @@ -14,15 +14,13 @@ namespace PixelMaestro { class CueController; class CueHandler { public: - explicit CueHandler(CueController* controller) { - controller_ = controller; - } + explicit CueHandler(CueController& controller); virtual ~CueHandler() { } virtual void run(uint8_t* cue) = 0; protected: /// The controller managing this Handler. - CueController* controller_ = nullptr; + CueController& controller_; Section* get_section(uint8_t section_id, uint8_t layer_id) const; Palette* deserialize_palette(const uint8_t* cue, uint8_t num_colors); diff --git a/src/cue/maestrocuehandler.cpp b/src/cue/maestrocuehandler.cpp index dc250d6..6ae062c 100644 --- a/src/cue/maestrocuehandler.cpp +++ b/src/cue/maestrocuehandler.cpp @@ -10,7 +10,7 @@ namespace PixelMaestro { (uint8_t)Action::RemoveShow ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* MaestroCueHandler::set_brightness(uint8_t brightness) { @@ -18,9 +18,9 @@ namespace PixelMaestro { (uint8_t)CueController::Handler::MaestroCueHandler, (uint8_t)Action::SetBrightness ); - controller_->get_buffer()[++index] = brightness; + controller_.get_buffer()[++index] = brightness; - return controller_->assemble(((uint8_t)Byte::OptionsByte + 1)); + return controller_.assemble(((uint8_t)Byte::OptionsByte + 1)); } uint8_t* MaestroCueHandler::set_show() { @@ -29,7 +29,7 @@ namespace PixelMaestro { (uint8_t)Action::SetShow ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* MaestroCueHandler::set_timer(uint16_t interval) { @@ -39,10 +39,10 @@ namespace PixelMaestro { (uint8_t)CueController::Handler::MaestroCueHandler, (uint8_t)Action::SetTimer ); - controller_->get_buffer()[++index] = interval_byte.converted_0; - controller_->get_buffer()[++index] = interval_byte.converted_1; + controller_.get_buffer()[++index] = interval_byte.converted_0; + controller_.get_buffer()[++index] = interval_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* MaestroCueHandler::start() { @@ -51,7 +51,7 @@ namespace PixelMaestro { (uint8_t)Action::Start ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* MaestroCueHandler::stop() { @@ -60,7 +60,7 @@ namespace PixelMaestro { (uint8_t)Action::Stop ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* MaestroCueHandler::sync(const uint32_t new_time) { @@ -70,14 +70,14 @@ namespace PixelMaestro { (uint8_t)CueController::Handler::MaestroCueHandler, (uint8_t)Action::Sync ); - controller_->get_buffer()[++index] = last_time_byte.converted_0; - controller_->get_buffer()[++index] = last_time_byte.converted_1; + controller_.get_buffer()[++index] = last_time_byte.converted_0; + controller_.get_buffer()[++index] = last_time_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } void MaestroCueHandler::run(uint8_t *cue) { - Maestro& maestro = controller_->get_maestro(); + Maestro& maestro = controller_.get_maestro(); switch((Action)cue[(uint8_t)Byte::ActionByte]) { case Action::RemoveShow: maestro.remove_show(); diff --git a/src/cue/maestrocuehandler.h b/src/cue/maestrocuehandler.h index 821cc23..29c4f25 100644 --- a/src/cue/maestrocuehandler.h +++ b/src/cue/maestrocuehandler.h @@ -23,7 +23,7 @@ namespace PixelMaestro { OptionsByte }; - explicit MaestroCueHandler(CueController* controller) : CueHandler(controller) { } + explicit MaestroCueHandler(CueController& controller) : CueHandler(controller) { } ~MaestroCueHandler() = default; uint8_t* remove_show(); uint8_t* set_brightness(uint8_t brightness); diff --git a/src/cue/sectioncuehandler.cpp b/src/cue/sectioncuehandler.cpp index 9c7cf69..efc586c 100644 --- a/src/cue/sectioncuehandler.cpp +++ b/src/cue/sectioncuehandler.cpp @@ -9,9 +9,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)clear_pixels; + controller_.get_buffer()[++index] = (uint8_t)clear_pixels; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::remove_canvas(uint8_t section_num, uint8_t layer_num) { @@ -22,7 +22,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::remove_layer(uint8_t section_num, uint8_t layer_num) { @@ -33,7 +33,7 @@ namespace PixelMaestro { layer_num ); - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_animation(uint8_t section_num, uint8_t layer_num, AnimationType animation_type, bool preserve_settings) { @@ -44,10 +44,10 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)animation_type; - controller_->get_buffer()[++index] = (uint8_t)preserve_settings; + controller_.get_buffer()[++index] = (uint8_t)animation_type; + controller_.get_buffer()[++index] = (uint8_t)preserve_settings; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_brightness(uint8_t section_num, uint8_t layer_num, uint8_t brightness) { @@ -57,9 +57,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = brightness; + controller_.get_buffer()[++index] = brightness; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_canvas(uint8_t section_num, uint8_t layer_num, uint16_t num_frames) { @@ -69,9 +69,9 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = num_frames; + controller_.get_buffer()[++index] = num_frames; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_dimensions(uint8_t section_num, uint8_t layer_num, uint16_t x, uint16_t y) { @@ -84,12 +84,12 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = x_byte.converted_0; - controller_->get_buffer()[++index] = x_byte.converted_1; - controller_->get_buffer()[++index] = y_byte.converted_0; - controller_->get_buffer()[++index] = y_byte.converted_1; + controller_.get_buffer()[++index] = x_byte.converted_0; + controller_.get_buffer()[++index] = x_byte.converted_1; + controller_.get_buffer()[++index] = y_byte.converted_0; + controller_.get_buffer()[++index] = y_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_layer(uint8_t section_num, uint8_t layer_num, Colors::MixMode mix_mode, uint8_t alpha) { @@ -99,10 +99,10 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = (uint8_t)mix_mode; - controller_->get_buffer()[++index] = alpha; + controller_.get_buffer()[++index] = (uint8_t)mix_mode; + controller_.get_buffer()[++index] = alpha; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_mirror(uint8_t section_num, uint8_t layer_num, bool x, bool y) { @@ -112,10 +112,10 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = x; - controller_->get_buffer()[++index] = y; + controller_.get_buffer()[++index] = x; + controller_.get_buffer()[++index] = y; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_offset(uint8_t section_num, uint8_t layer_num, int16_t x, int16_t y) { @@ -128,12 +128,12 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = x_byte.converted_0; - controller_->get_buffer()[++index] = x_byte.converted_1; - controller_->get_buffer()[++index] = y_byte.converted_0; - controller_->get_buffer()[++index] = y_byte.converted_1; + controller_.get_buffer()[++index] = x_byte.converted_0; + controller_.get_buffer()[++index] = x_byte.converted_1; + controller_.get_buffer()[++index] = y_byte.converted_0; + controller_.get_buffer()[++index] = y_byte.converted_1; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_scroll(uint8_t section_num, uint8_t layer_num, uint16_t x, uint16_t y, bool reverse_x, bool reverse_y) { @@ -146,14 +146,14 @@ namespace PixelMaestro { section_num, layer_num ); - controller_->get_buffer()[++index] = x_byte.converted_0; - controller_->get_buffer()[++index] = x_byte.converted_1; - controller_->get_buffer()[++index] = y_byte.converted_0; - controller_->get_buffer()[++index] = y_byte.converted_1; - controller_->get_buffer()[++index] = (uint8_t)reverse_x; - controller_->get_buffer()[++index] = (uint8_t)reverse_y; - - return controller_->assemble(++index); + controller_.get_buffer()[++index] = x_byte.converted_0; + controller_.get_buffer()[++index] = x_byte.converted_1; + controller_.get_buffer()[++index] = y_byte.converted_0; + controller_.get_buffer()[++index] = y_byte.converted_1; + controller_.get_buffer()[++index] = (uint8_t)reverse_x; + controller_.get_buffer()[++index] = (uint8_t)reverse_y; + + return controller_.assemble(++index); } void SectionCueHandler::run(uint8_t *cue) { diff --git a/src/cue/sectioncuehandler.h b/src/cue/sectioncuehandler.h index 8f3805a..ff14897 100644 --- a/src/cue/sectioncuehandler.h +++ b/src/cue/sectioncuehandler.h @@ -30,7 +30,7 @@ namespace PixelMaestro { OptionsByte }; - explicit SectionCueHandler(CueController* controller) : CueHandler(controller) { } + explicit SectionCueHandler(CueController& controller) : CueHandler(controller) { } ~SectionCueHandler() = default; uint8_t* remove_animation(uint8_t section_num, uint8_t layer_num, bool clear_pixels); uint8_t* remove_canvas(uint8_t section_num, uint8_t layer_num); diff --git a/src/cue/showcuehandler.cpp b/src/cue/showcuehandler.cpp index 8d39eab..03e3bb8 100644 --- a/src/cue/showcuehandler.cpp +++ b/src/cue/showcuehandler.cpp @@ -9,24 +9,24 @@ namespace PixelMaestro { (uint8_t)CueController::Handler::ShowCueHandler, (uint8_t)Action::SetEvents ); - controller_->get_buffer()[++index] = num_events_byte.converted_0; - controller_->get_buffer()[++index] = num_events_byte.converted_1; - controller_->get_buffer()[++index] = (uint8_t)preserve_current_index; + controller_.get_buffer()[++index] = num_events_byte.converted_0; + controller_.get_buffer()[++index] = num_events_byte.converted_1; + controller_.get_buffer()[++index] = (uint8_t)preserve_current_index; for (uint16_t event_index = 0; event_index < num_events; event_index++) { // Save time IntByteConvert event_time(events[event_index].get_time()); - controller_->get_buffer()[++index] = event_time.converted_0; - controller_->get_buffer()[++index] = event_time.converted_1; + controller_.get_buffer()[++index] = event_time.converted_0; + controller_.get_buffer()[++index] = event_time.converted_1; // Save Cue uint8_t* event_cue = events[event_index].get_cue(); - for (uint16_t cue_index = 0; cue_index < controller_->get_cue_size(event_cue); cue_index++) { - controller_->get_buffer()[++index] = event_cue[cue_index]; + for (uint16_t cue_index = 0; cue_index < controller_.get_cue_size(event_cue); cue_index++) { + controller_.get_buffer()[++index] = event_cue[cue_index]; } } - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* ShowCueHandler::set_looping(bool loop) { @@ -34,9 +34,9 @@ namespace PixelMaestro { (uint8_t)CueController::Handler::ShowCueHandler, (uint8_t)Action::SetLooping ); - controller_->get_buffer()[++index] = (uint8_t)loop; + controller_.get_buffer()[++index] = (uint8_t)loop; - return controller_->assemble(++index); + return controller_.assemble(++index); } uint8_t* ShowCueHandler::set_timing_mode(Show::TimingMode timing) { @@ -44,13 +44,13 @@ namespace PixelMaestro { (uint8_t)CueController::Handler::ShowCueHandler, (uint8_t)Action::SetTimingMode ); - controller_->get_buffer()[++index] = (uint8_t)timing; + controller_.get_buffer()[++index] = (uint8_t)timing; - return controller_->assemble(++index); + return controller_.assemble(++index); } void ShowCueHandler::run(uint8_t *cue) { - Show* show = controller_->get_maestro().get_show(); + Show* show = controller_.get_maestro().get_show(); if (show == nullptr) return; @@ -74,7 +74,7 @@ namespace PixelMaestro { options_index += 2; // Set Cues - uint16_t event_cue_size = controller_->get_cue_size(&cue[options_index]); + uint16_t event_cue_size = controller_.get_cue_size(&cue[options_index]); events[event].set_cue(&cue[options_index]); options_index += event_cue_size; } diff --git a/src/cue/showcuehandler.h b/src/cue/showcuehandler.h index 45083c9..6465f47 100644 --- a/src/cue/showcuehandler.h +++ b/src/cue/showcuehandler.h @@ -20,7 +20,7 @@ namespace PixelMaestro { OptionsByte }; - explicit ShowCueHandler(CueController* controller) : CueHandler(controller) { } + explicit ShowCueHandler(CueController& controller) : CueHandler(controller) { } ~ShowCueHandler() = default; uint8_t* set_events(Event* events, uint16_t num_events, bool preserve_current_index = true);