+/** \brief Set oneshot layer
+ *
+ * FIXME: needs doc
+ */
+void set_oneshot_layer(uint8_t layer, uint8_t state)
+{
+ oneshot_layer_data = layer << 3 | state;
+ layer_on(layer);
+#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
+ oneshot_layer_time = timer_read();
+#endif
+ oneshot_layer_changed_kb(get_oneshot_layer());
+}
+/** \brief Reset oneshot layer
+ *
+ * FIXME: needs doc
+ */
+void reset_oneshot_layer(void) {
+ oneshot_layer_data = 0;
+#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
+ oneshot_layer_time = 0;
+#endif
+ oneshot_layer_changed_kb(get_oneshot_layer());
+}
+/** \brief Clear oneshot layer
+ *
+ * FIXME: needs doc
+ */
+void clear_oneshot_layer_state(oneshot_fullfillment_t state)
+{
+ uint8_t start_state = oneshot_layer_data;
+ oneshot_layer_data &= ~state;
+ if (!get_oneshot_layer_state() && start_state != oneshot_layer_data) {
+ layer_off(get_oneshot_layer());
+ reset_oneshot_layer();
+ }
+}
+/** \brief Is oneshot layer active
+ *
+ * FIXME: needs doc
+ */
+bool is_oneshot_layer_active(void)
+{
+ return get_oneshot_layer_state();
+}
+#endif
+
+/** \brief Send keyboard report
+ *
+ * FIXME: needs doc
+ */