Move dispatcher to nfc.
This commit is contained in:
55
applications/nfc/dispatcher.c
Normal file
55
applications/nfc/dispatcher.c
Normal file
@@ -0,0 +1,55 @@
|
||||
#include "dispatcher.h"
|
||||
|
||||
#include <flipper.h>
|
||||
|
||||
struct Dispatcher {
|
||||
void* message;
|
||||
size_t message_size;
|
||||
osMessageQueueId_t mqueue;
|
||||
osMutexId_t lock_mutex;
|
||||
};
|
||||
|
||||
Dispatcher* dispatcher_alloc(size_t queue_size, size_t message_size) {
|
||||
Dispatcher* dispatcher = furi_alloc(sizeof(Dispatcher));
|
||||
|
||||
dispatcher->message = furi_alloc(message_size);
|
||||
dispatcher->message_size = message_size;
|
||||
|
||||
dispatcher->mqueue = osMessageQueueNew(queue_size, message_size, NULL);
|
||||
assert(dispatcher->mqueue);
|
||||
|
||||
dispatcher->lock_mutex = osMutexNew(NULL);
|
||||
assert(dispatcher->lock_mutex);
|
||||
dispatcher_lock(dispatcher);
|
||||
|
||||
return dispatcher;
|
||||
}
|
||||
|
||||
void dispatcher_free(Dispatcher* dispatcher) {
|
||||
assert(dispatcher);
|
||||
free(dispatcher);
|
||||
}
|
||||
|
||||
void dispatcher_send(Dispatcher* dispatcher, Message* message) {
|
||||
assert(dispatcher);
|
||||
assert(message);
|
||||
assert(osMessageQueuePut(dispatcher->mqueue, message, 0, osWaitForever) == osOK);
|
||||
}
|
||||
|
||||
void dispatcher_recieve(Dispatcher* dispatcher, Message* message) {
|
||||
assert(dispatcher);
|
||||
assert(message);
|
||||
dispatcher_unlock(dispatcher);
|
||||
assert(osMessageQueueGet(dispatcher->mqueue, message, NULL, osWaitForever) == osOK);
|
||||
dispatcher_lock(dispatcher);
|
||||
}
|
||||
|
||||
void dispatcher_lock(Dispatcher* dispatcher) {
|
||||
assert(dispatcher);
|
||||
assert(osMutexAcquire(dispatcher->lock_mutex, osWaitForever) == osOK);
|
||||
}
|
||||
|
||||
void dispatcher_unlock(Dispatcher* dispatcher) {
|
||||
assert(dispatcher);
|
||||
assert(osMutexRelease(dispatcher->lock_mutex) == osOK);
|
||||
}
|
28
applications/nfc/dispatcher.h
Normal file
28
applications/nfc/dispatcher.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
enum MessageTypeBase {
|
||||
MessageTypeExit = 0x00,
|
||||
MessageTypeMemoryLow = 0x01,
|
||||
MessageTypeBatteryLow = 0x02,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
enum MessageTypeBase type;
|
||||
} Message;
|
||||
|
||||
typedef struct Dispatcher Dispatcher;
|
||||
|
||||
Dispatcher* dispatcher_alloc(size_t queue_size, size_t message_size);
|
||||
|
||||
void dispatcher_free(Dispatcher* dispatcher);
|
||||
|
||||
void dispatcher_send(Dispatcher* dispatcher, Message* message);
|
||||
|
||||
void dispatcher_recieve(Dispatcher* dispatcher, Message* message);
|
||||
|
||||
void dispatcher_lock(Dispatcher* dispatcher);
|
||||
|
||||
void dispatcher_unlock(Dispatcher* dispatcher);
|
@@ -2,7 +2,6 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <flipper.h>
|
||||
#include <dispatcher.h>
|
||||
|
||||
#include <gui/gui.h>
|
||||
#include <gui/widget.h>
|
||||
@@ -16,6 +15,8 @@
|
||||
#include <rfal_nfc.h>
|
||||
#include <rfal_nfca.h>
|
||||
|
||||
#include "dispatcher.h"
|
||||
|
||||
typedef enum {
|
||||
MessageTypeBase,
|
||||
} NFCMessageType;
|
||||
|
Reference in New Issue
Block a user