diff --git a/card10-sys/firmware b/card10-sys/firmware
index c7b7bc8468f94f52c2af115b795d98b6b0974852..9325a21266bf5647410d803539190962aa646a84 160000
--- a/card10-sys/firmware
+++ b/card10-sys/firmware
@@ -1 +1 @@
-Subproject commit c7b7bc8468f94f52c2af115b795d98b6b0974852
+Subproject commit 9325a21266bf5647410d803539190962aa646a84
diff --git a/card10-sys/vendor/client.c b/card10-sys/vendor/client.c
index d3aeed29e0e5e1449f6b274b887d557d441d4852..0fbd0ddb4671e2cf36036ab51ae2dd1487c9b581 100644
--- a/card10-sys/vendor/client.c
+++ b/card10-sys/vendor/client.c
@@ -215,7 +215,7 @@ uint8_t epic_buttons_read(uint8_t mask)
 }
 
 /* Autogenerated stub for API_GPIO_SET_PIN_MODE */
-int epic_gpio_set_pin_mode(uint8_t pin, uint8_t mode)
+int epic_gpio_set_pin_mode( uint8_t pin, uint8_t mode )
 {
         const int epc__apistub_size = sizeof(uint8_t) + sizeof(uint8_t);
         void*epc__apistub_buffer;
@@ -289,8 +289,23 @@ void epic_leds_set(int led, uint8_t r, uint8_t g, uint8_t b)
         _api_call_transact(epc__apistub_buffer);
 }
 
+/* Autogenerated stub for API_LEDS_GET */
+int epic_leds_get_rgb(int led, uint8_t * rgb)
+{
+        const int epc__apistub_size = sizeof(int) + sizeof(uint8_t *);
+        void*epc__apistub_buffer;
+
+        epc__apistub_buffer = _api_call_start(API_LEDS_GET, epc__apistub_size);
+        /* TODO: Check if epc__apistub_buffer is not NULL */
+
+        *(int*)(epc__apistub_buffer + 0) = led;
+        *(uint8_t **)(epc__apistub_buffer + sizeof(int)) = rgb;
+
+        return *(int*)_api_call_transact(epc__apistub_buffer);
+}
+
 /* Autogenerated stub for API_LEDS_SET_HSV */
-void epic_leds_set_hsv(int led, float h, float s, float v)
+void epic_leds_set_hsv( int led, float h, float s, float v )
 {
         const int epc__apistub_size = sizeof(int) + sizeof(float) + sizeof(float) + sizeof(float);
         void*epc__apistub_buffer;
@@ -322,7 +337,7 @@ void epic_leds_set_all(uint8_t *pattern, uint8_t len)
 }
 
 /* Autogenerated stub for API_LEDS_SET_ALL_HSV */
-void epic_leds_set_all_hsv(float *pattern, uint8_t len)
+void epic_leds_set_all_hsv( float *pattern, uint8_t len )
 {
         const int epc__apistub_size = sizeof(float *) + sizeof(uint8_t);
         void*epc__apistub_buffer;
@@ -337,7 +352,7 @@ void epic_leds_set_all_hsv(float *pattern, uint8_t len)
 }
 
 /* Autogenerated stub for API_LEDS_PREP */
-void epic_leds_prep(int led, uint8_t r, uint8_t g, uint8_t b)
+void epic_leds_prep( int led, uint8_t r, uint8_t g, uint8_t b )
 {
         const int epc__apistub_size = sizeof(int) + sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint8_t);
         void*epc__apistub_buffer;
@@ -354,7 +369,7 @@ void epic_leds_prep(int led, uint8_t r, uint8_t g, uint8_t b)
 }
 
 /* Autogenerated stub for API_LEDS_PREP_HSV */
-void epic_leds_prep_hsv(int led, float h, float s, float v)
+void epic_leds_prep_hsv( int led, float h, float s, float v )
 {
         const int epc__apistub_size = sizeof(int) + sizeof(float) + sizeof(float) + sizeof(float);
         void*epc__apistub_buffer;
@@ -440,6 +455,20 @@ void epic_leds_set_rocket(int led, uint8_t value)
         _api_call_transact(epc__apistub_buffer);
 }
 
+/* Autogenerated stub for API_LEDS_GET_ROCKET */
+int epic_leds_get_rocket(int led)
+{
+        const int epc__apistub_size = sizeof(int);
+        void*epc__apistub_buffer;
+
+        epc__apistub_buffer = _api_call_start(API_LEDS_GET_ROCKET, epc__apistub_size);
+        /* TODO: Check if epc__apistub_buffer is not NULL */
+
+        *(int*)(epc__apistub_buffer + 0) = led;
+
+        return *(int*)_api_call_transact(epc__apistub_buffer);
+}
+
 /* Autogenerated stub for API_LEDS_SET_FLASHLIGHT */
 void epic_set_flashlight(_Bool power)
 {
@@ -470,7 +499,7 @@ void epic_leds_set_gamma_table( uint8_t rgb_channel, uint8_t *gamma_table )
 }
 
 /* Autogenerated stub for API_LEDS_CLEAR_ALL */
-void epic_leds_clear_all(uint8_t r, uint8_t g, uint8_t b)
+void epic_leds_clear_all( uint8_t r, uint8_t g, uint8_t b )
 {
         const int epc__apistub_size = sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint8_t);
         void*epc__apistub_buffer;
@@ -512,7 +541,7 @@ int epic_bme680_deinit()
 }
 
 /* Autogenerated stub for API_BME680_GET_DATA */
-int epic_bme680_read_sensors(struct bme680_sensor_data *data)
+int epic_bme680_read_sensors( struct bme680_sensor_data *data )
 {
         const int epc__apistub_size = sizeof(struct bme680_sensor_data *);
         void*epc__apistub_buffer;
@@ -526,7 +555,7 @@ int epic_bme680_read_sensors(struct bme680_sensor_data *data)
 }
 
 /* Autogenerated stub for API_PERSONAL_STATE_SET */
-int epic_personal_state_set(uint8_t state, _Bool persistent)
+int epic_personal_state_set( uint8_t state, _Bool persistent )
 {
         const int epc__apistub_size = sizeof(uint8_t) + sizeof(_Bool);
         void*epc__apistub_buffer;
@@ -710,7 +739,7 @@ int epic_disp_print( uint16_t posx, uint16_t posy, const char *pString, uint16_t
 }
 
 /* Autogenerated stub for API_DISP_PRINT_ADV */
-int epic_disp_print_adv( uint8_t font, uint16_t posx, uint16_t posy, const char *pString, uint16_t fg, uint16_t bg)
+int epic_disp_print_adv( uint8_t font, uint16_t posx, uint16_t posy, const char *pString, uint16_t fg, uint16_t bg )
 {
         const int epc__apistub_size = sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(const char *) + sizeof(uint16_t) + sizeof(uint16_t);
         void*epc__apistub_buffer;
@@ -743,7 +772,7 @@ int epic_disp_clear(uint16_t color)
 }
 
 /* Autogenerated stub for API_DISP_PIXEL */
-int epic_disp_pixel( uint16_t x, uint16_t y, uint16_t color)
+int epic_disp_pixel( uint16_t x, uint16_t y, uint16_t color )
 {
         const int epc__apistub_size = sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t);
         void*epc__apistub_buffer;
@@ -759,7 +788,7 @@ int epic_disp_pixel( uint16_t x, uint16_t y, uint16_t color)
 }
 
 /* Autogenerated stub for API_DISP_LINE */
-int epic_disp_line( uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend, uint16_t color, enum disp_linestyle linestyle, uint16_t pixelsize)
+int epic_disp_line( uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend, uint16_t color, enum disp_linestyle linestyle, uint16_t pixelsize )
 {
         const int epc__apistub_size = sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(enum disp_linestyle) + sizeof(uint16_t);
         void*epc__apistub_buffer;
@@ -779,7 +808,7 @@ int epic_disp_line( uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t ye
 }
 
 /* Autogenerated stub for API_DISP_RECT */
-int epic_disp_rect( uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend, uint16_t color, enum disp_fillstyle fillstyle, uint16_t pixelsize)
+int epic_disp_rect( uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend, uint16_t color, enum disp_fillstyle fillstyle, uint16_t pixelsize )
 {
         const int epc__apistub_size = sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(enum disp_fillstyle) + sizeof(uint16_t);
         void*epc__apistub_buffer;
@@ -799,7 +828,7 @@ int epic_disp_rect( uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t ye
 }
 
 /* Autogenerated stub for API_DISP_CIRC */
-int epic_disp_circ( uint16_t x, uint16_t y, uint16_t rad, uint16_t color, enum disp_fillstyle fillstyle, uint16_t pixelsize)
+int epic_disp_circ( uint16_t x, uint16_t y, uint16_t rad, uint16_t color, enum disp_fillstyle fillstyle, uint16_t pixelsize )
 {
         const int epc__apistub_size = sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(enum disp_fillstyle) + sizeof(uint16_t);
         void*epc__apistub_buffer;
@@ -818,7 +847,7 @@ int epic_disp_circ( uint16_t x, uint16_t y, uint16_t rad, uint16_t color, enum d
 }
 
 /* Autogenerated stub for API_DISP_FRAMEBUFFER */
-int epic_disp_framebuffer(union disp_framebuffer *fb)
+int epic_disp_framebuffer( union disp_framebuffer *fb )
 {
         const int epc__apistub_size = sizeof(union disp_framebuffer *);
         void*epc__apistub_buffer;
@@ -944,7 +973,7 @@ int epic_file_read(int fd, void* buf, size_t nbytes)
 }
 
 /* Autogenerated stub for API_FILE_WRITE */
-int epic_file_write(int fd, const void* buf, size_t nbytes)
+int epic_file_write( int fd, const void* buf, size_t nbytes )
 {
         const int epc__apistub_size = sizeof(int) + sizeof(const void*) + sizeof(size_t);
         void*epc__apistub_buffer;
@@ -1117,7 +1146,7 @@ uint64_t epic_rtc_get_milliseconds(void)
 }
 
 /* Autogenerated stub for API_RTC_SET_MILLISECONDS */
-void epic_rtc_set_milliseconds(uint64_t milliseconds)
+void epic_rtc_set_milliseconds( uint64_t milliseconds )
 {
         const int epc__apistub_size = sizeof(uint64_t);
         void*epc__apistub_buffer;
@@ -1174,7 +1203,7 @@ int epic_max30001_enable_sensor( struct max30001_sensor_config *config )
 }
 
 /* Autogenerated stub for API_MAX30001_DISABLE */
-int epic_max30001_disable_sensor( void )
+int epic_max30001_disable_sensor()
 {
         const int epc__apistub_size = 0;
         void*epc__apistub_buffer;
@@ -1225,24 +1254,40 @@ int epic_usb_cdcacm(void)
         return *(int*)_api_call_transact(epc__apistub_buffer);
 }
 
+/* Autogenerated stub for API_WS2812_WRITE */
+void epic_ws2812_write(uint8_t pin, uint8_t *pixels, uint32_t n_bytes)
+{
+        const int epc__apistub_size = sizeof(uint8_t) + sizeof(uint8_t *) + sizeof(uint32_t);
+        void*epc__apistub_buffer;
+
+        epc__apistub_buffer = _api_call_start(API_WS2812_WRITE, epc__apistub_size);
+        /* TODO: Check if epc__apistub_buffer is not NULL */
+
+        *(uint8_t*)(epc__apistub_buffer + 0) = pin;
+        *(uint8_t **)(epc__apistub_buffer + sizeof(uint8_t)) = pixels;
+        *(uint32_t*)(epc__apistub_buffer + sizeof(uint8_t) + sizeof(uint8_t *)) = n_bytes;
+
+        _api_call_transact(epc__apistub_buffer);
+}
+
 
 /* Weakly linked stubs for ISRs */
-void epic_isr_bhi160_accelerometer(api_int_id_t id)
-        __attribute__((weak, alias("__epic_isr_default_handler")));
-void epic_isr_bhi160_orientation(api_int_id_t id)
-        __attribute__((weak, alias("__epic_isr_default_handler")));
-void epic_isr_bhi160_gyroscope(api_int_id_t id)
-        __attribute__((weak, alias("__epic_isr_default_handler")));
-void epic_isr_max30001_ecg(api_int_id_t id)
-        __attribute__((weak, alias("__epic_isr_default_handler")));
 void __epic_isr_reset(api_int_id_t id)
         __attribute__((weak, alias("__epic_isr_default_handler")));
 void epic_isr_uart_rx(api_int_id_t id)
         __attribute__((weak, alias("__epic_isr_default_handler")));
 void epic_isr_ctrl_c(api_int_id_t id)
         __attribute__((weak, alias("__epic_isr_default_handler")));
+void epic_isr_bhi160_accelerometer(api_int_id_t id)
+        __attribute__((weak, alias("__epic_isr_default_handler")));
+void epic_isr_bhi160_orientation(api_int_id_t id)
+        __attribute__((weak, alias("__epic_isr_default_handler")));
+void epic_isr_bhi160_gyroscope(api_int_id_t id)
+        __attribute__((weak, alias("__epic_isr_default_handler")));
 void epic_isr_rtc_alarm(api_int_id_t id)
         __attribute__((weak, alias("__epic_isr_default_handler")));
+void epic_isr_max30001_ecg(api_int_id_t id)
+        __attribute__((weak, alias("__epic_isr_default_handler")));
 
 /* Default handler stub */
 __attribute__((weak)) void epic_isr_default_handler(api_int_id_t id)
@@ -1266,18 +1311,6 @@ void __epic_isr_default_handler(api_int_id_t id)
 void __dispatch_isr(api_int_id_t id)
 {
         switch (id) {
-        case EPIC_INT_BHI160_ACCELEROMETER:
-                epic_isr_bhi160_accelerometer(id);
-                break;
-        case EPIC_INT_BHI160_ORIENTATION:
-                epic_isr_bhi160_orientation(id);
-                break;
-        case EPIC_INT_BHI160_GYROSCOPE:
-                epic_isr_bhi160_gyroscope(id);
-                break;
-        case EPIC_INT_MAX30001_ECG:
-                epic_isr_max30001_ecg(id);
-                break;
         case EPIC_INT_RESET:
                 __epic_isr_reset(id);
                 break;
@@ -1287,9 +1320,21 @@ void __dispatch_isr(api_int_id_t id)
         case EPIC_INT_CTRL_C:
                 epic_isr_ctrl_c(id);
                 break;
+        case EPIC_INT_BHI160_ACCELEROMETER:
+                epic_isr_bhi160_accelerometer(id);
+                break;
+        case EPIC_INT_BHI160_ORIENTATION:
+                epic_isr_bhi160_orientation(id);
+                break;
+        case EPIC_INT_BHI160_GYROSCOPE:
+                epic_isr_bhi160_gyroscope(id);
+                break;
         case EPIC_INT_RTC_ALARM:
                 epic_isr_rtc_alarm(id);
                 break;
+        case EPIC_INT_MAX30001_ECG:
+                epic_isr_max30001_ecg(id);
+                break;
         case (-1):
                 /* Ignore a spurious interrupt */
                 break;
diff --git a/card10-sys/vendor/server.c b/card10-sys/vendor/server.c
index a44db3c80d522ee9e07f4efb3dbb9de430376d30..ef0798c305224c540b214d63be02a208c934aecf 100644
--- a/card10-sys/vendor/server.c
+++ b/card10-sys/vendor/server.c
@@ -109,6 +109,12 @@ void __api_dispatch_call(uint32_t id, void*epc__apistub_buffer)
                         *(uint8_t*)(epc__apistub_buffer + sizeof(int) + sizeof(uint8_t) + sizeof(uint8_t))
                 );
                 break;
+        case API_LEDS_GET:
+                *((int*)epc__apistub_buffer) = epic_leds_get_rgb(
+                        *(int*)(epc__apistub_buffer + 0),
+                        *(uint8_t **)(epc__apistub_buffer + sizeof(int))
+                );
+                break;
         case API_LEDS_SET_HSV:
                 epic_leds_set_hsv(
                         *(int*)(epc__apistub_buffer + 0),
@@ -170,6 +176,11 @@ void __api_dispatch_call(uint32_t id, void*epc__apistub_buffer)
                         *(uint8_t*)(epc__apistub_buffer + sizeof(int))
                 );
                 break;
+        case API_LEDS_GET_ROCKET:
+                *((int*)epc__apistub_buffer) = epic_leds_get_rocket(
+                        *(int*)(epc__apistub_buffer + 0)
+                );
+                break;
         case API_LEDS_SET_FLASHLIGHT:
                 epic_set_flashlight(
                         *(_Bool*)(epc__apistub_buffer + 0)
@@ -268,6 +279,16 @@ void __api_dispatch_call(uint32_t id, void*epc__apistub_buffer)
                         *(uint16_t*)(epc__apistub_buffer + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(const char *) + sizeof(uint16_t))
                 );
                 break;
+        case API_DISP_PRINT_ADV:
+                *((int*)epc__apistub_buffer) = epic_disp_print_adv(
+                        *(uint8_t*)(epc__apistub_buffer + 0),
+                        *(uint16_t*)(epc__apistub_buffer + sizeof(uint8_t)),
+                        *(uint16_t*)(epc__apistub_buffer + sizeof(uint8_t) + sizeof(uint16_t)),
+                        *(const char **)(epc__apistub_buffer + sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint16_t)),
+                        *(uint16_t*)(epc__apistub_buffer + sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(const char *)),
+                        *(uint16_t*)(epc__apistub_buffer + sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(const char *) + sizeof(uint16_t))
+                );
+                break;
         case API_DISP_CLEAR:
                 *((int*)epc__apistub_buffer) = epic_disp_clear(
                         *(uint16_t*)(epc__apistub_buffer + 0)
@@ -459,6 +480,13 @@ void __api_dispatch_call(uint32_t id, void*epc__apistub_buffer)
                 *((int*)epc__apistub_buffer) = epic_usb_cdcacm(
                 );
                 break;
+        case API_WS2812_WRITE:
+                epic_ws2812_write(
+                        *(uint8_t*)(epc__apistub_buffer + 0),
+                        *(uint8_t **)(epc__apistub_buffer + sizeof(uint8_t)),
+                        *(uint32_t*)(epc__apistub_buffer + sizeof(uint8_t) + sizeof(uint8_t *))
+                );
+                break;
         default:
                 /* TODO: Better error handling */
                 LOG_ERR("api-dispatcher", "API function 0x%lx is unknown!!", id);