57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
|
#pragma once
|
||
|
|
||
|
#include "flipper.h"
|
||
|
|
||
|
/*
|
||
|
== Value composer ==
|
||
|
*/
|
||
|
|
||
|
typedef void(ValueComposerCallback)(void* ctx, void* state);
|
||
|
|
||
|
void COPY_COMPOSE(void* ctx, void* state) {
|
||
|
read_mutex((ValueMutex*)ctx, state, 0);
|
||
|
}
|
||
|
|
||
|
typedef enum {
|
||
|
UiLayerBelowNotify
|
||
|
UiLayerNotify,
|
||
|
UiLayerAboveNotify
|
||
|
} UiLayer;
|
||
|
|
||
|
ValueComposerHandle* add_compose_layer(
|
||
|
ValueComposer* composer, ValueComposerCallback cb, void* ctx, uint32_t layer
|
||
|
);
|
||
|
|
||
|
bool remove_compose_layer(ValueComposerHandle* handle);
|
||
|
|
||
|
void request_compose(ValueComposerHandle* handle);
|
||
|
|
||
|
// See [LED](LED-API) or [Display](Display-API) API for examples.
|
||
|
|
||
|
/*
|
||
|
== ValueManager ==
|
||
|
|
||
|
More complicated concept is ValueManager.
|
||
|
It is like ValueMutex, but user can subscribe to value updates.
|
||
|
|
||
|
First of all you can use value and pubsub part as showing above:
|
||
|
aquire/release mutex, read value, subscribe/unsubscribe pubsub.
|
||
|
There are two specific methods for ValueManager: write_managed, commit_managed
|
||
|
*/
|
||
|
|
||
|
typedef struct {
|
||
|
ValueMutex value;
|
||
|
PubSub pubsub;
|
||
|
} ValueManager;
|
||
|
|
||
|
|
||
|
/*
|
||
|
acquire value, changes it and send notify with current value.
|
||
|
*/
|
||
|
bool write_managed(ValueManager* managed, void* data, size_t len, uint32_t timeout);
|
||
|
|
||
|
/*
|
||
|
commit_managed works as `release_mutex` but send notify with current value.
|
||
|
*/
|
||
|
bool commit_managed(ValueManager* managed, void* value);
|