diff --git a/firmware/hcolor.h b/firmware/hcolor.h
deleted file mode 100644
index 200d7c9907284425e17695ff03a1eb395facf649..0000000000000000000000000000000000000000
--- a/firmware/hcolor.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * High dynamic range color library.
- *
- * This is a high dynamic range (48-bit) color data type,
- * and a temporal dithering implementation that's compatible
- * with the OctoWS2811 LED driver.
- * 
- * Copyright (c) 2013 Micah Elizabeth Scott
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#pragma once
-#include <stdint.h>
-#include <algorithm>
-
-class OctoWS2811z;
-
-/// Basic data type for a high-dynamic-range color.
-struct HColor {
-    uint16_t r, g, b;
-};
-
-/// Constructor for 16-bit colors
-static inline HColor HColor16(uint16_t r, uint16_t g, uint16_t b) {
-    HColor c = { r, g, b };
-    return c;
-}
-
-/// Constructor for 8-bit colors
-static inline HColor HColor8(uint8_t r, uint8_t g, uint8_t b) {
-    HColor c = {
-        uint16_t(r | (unsigned(r) << 8)),
-        uint16_t(g | (unsigned(g) << 8)),
-        uint16_t(b | (unsigned(b) << 8)),
-    };
-    return c;
-}
-
-/// Constructor for 8-bit colors packed into a 24-bit word
-static inline HColor HColor8(uint32_t rgb) {
-    return HColor8( (rgb & 0xFF0000) >> 16, (rgb & 0x00FF00) >> 8, rgb & 0x0000FF );
-}
-
-/// Constructor for float colors, with clamping.
-static inline HColor HColorF(float r, float g, float b) {
-    HColor c = {
-        uint16_t(std::min<int>(0xffff, std::max<int>(0, r * 65535.0f + 0.5f))),
-        uint16_t(std::min<int>(0xffff, std::max<int>(0, g * 65535.0f + 0.5f))),
-        uint16_t(std::min<int>(0xffff, std::max<int>(0, b * 65535.0f + 0.5f))),
-    };
-    return c;
-}
-
-/// Add two colors, with saturation
-static inline HColor operator + (HColor a, HColor b) {
-    HColor c = {
-        uint16_t(std::min<int>(0xffff, unsigned(a.r) + unsigned(b.r))),
-        uint16_t(std::min<int>(0xffff, unsigned(a.g) + unsigned(b.g))),
-        uint16_t(std::min<int>(0xffff, unsigned(a.b) + unsigned(b.b))),
-    };
-    return c;
-}
-
-/**
- * Linear interpolation between two colors. "Alpha" is in 8-bit fixed point.
- * Returns c1 if alpha==0, or c2 if alpha==0x100. Values outside this range will extrapolate.
- */
-static inline HColor lerp8(HColor c1, HColor c2, int alpha) {
-    int invA = 0x100 - alpha;
-    HColor c = {
-        uint16_t((c1.r * invA + c2.r * alpha) >> 8),
-        uint16_t((c1.g * invA + c2.g * alpha) >> 8),
-        uint16_t((c1.b * invA + c2.b * alpha) >> 8),
-    };
-    return c;
-}
-
-/// Floating point linear interpolation, with clamping.
-static inline HColor lerp(HColor c1, HColor c2, float alpha) {
-    float invA = 1.0f - alpha;
-    HColor c = {
-        uint16_t(std::min<int>(0xffff, std::max<int>(0, c1.r * invA + c2.r * alpha))),
-        uint16_t(std::min<int>(0xffff, std::max<int>(0, c1.g * invA + c2.g * alpha))),
-        uint16_t(std::min<int>(0xffff, std::max<int>(0, c1.b * invA + c2.b * alpha))),
-    };
-    return c;
-}
-
-/// Data type for one display pixel
-struct HPixel {
-    HColor color;
-    int16_t residual[3];
-
-    /// Temporal dithering algorithm. Returns a 24-bit RGB color.
-    uint32_t dither() {
-
-        // Incorporate the residual from last frame
-        int r16 = color.r + residual[0];
-        int g16 = color.g + residual[1];
-        int b16 = color.b + residual[2];
-
-        // Round to the nearest 8-bit value
-        int r8 = std::min<int>(0xff, std::max<int>(0, (r16 + 0x80) >> 8));
-        int g8 = std::min<int>(0xff, std::max<int>(0, (g16 + 0x80) >> 8));
-        int b8 = std::min<int>(0xff, std::max<int>(0, (b16 + 0x80) >> 8));
-
-        // Compute the error, after expanding the 8-bit value back to 16-bit.
-        residual[0] = r16 - (r8 * 257);
-        residual[1] = g16 - (g8 * 257);
-        residual[2] = b16 - (b8 * 257);
-
-        return (g8 << 16) | (r8 << 8) | b8;
-    }
-};
-
-/// Data type for a framebuffer of pixels
-template <unsigned tCount>
-struct HPixelBuffer {
-    HPixel pixels[tCount];
-
-    /// Update the entire frame
-    void show(OctoWS2811z &leds) {
-        for (unsigned i = 0; i < tCount; ++i) {
-//            leds.setPixel(i, 0x804020 /*pixels[i].dither()*/);
-        }
-        leds.show();
-    }
-};