mirror of
https://github.com/thinkonmay/sunshine-sdk.git
synced 2025-12-28 08:01:04 +00:00
62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
/**
|
|
* @file globals.cpp
|
|
* @brief Implementation for globally accessible variables and functions.
|
|
*/
|
|
#include "interprocess.h"
|
|
#include "logging.h"
|
|
|
|
#include <thread>
|
|
#include <stdio.h>
|
|
#include <vector>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
|
|
void
|
|
init_shared_memory(SharedMemory** _memory){
|
|
*_memory = (SharedMemory*) malloc(sizeof(SharedMemory));
|
|
SharedMemory* memory = *_memory;
|
|
memset(memory,0,sizeof(SharedMemory));
|
|
for (int j = 0; j < QueueType::QueueMax; j++) {
|
|
for (int k = 0; k < EventType::EventMax; k++)
|
|
memory->queues[j].events[k].read = 1;
|
|
|
|
memory->queues[j].index = QUEUE_SIZE - 1;
|
|
}
|
|
}
|
|
|
|
void
|
|
push_packet(Queue* queue,
|
|
void* data,
|
|
int size,
|
|
PacketMetadata metadata){
|
|
// wait while queue is full
|
|
auto new_index = queue->index + 1;
|
|
|
|
auto real_index = new_index % QUEUE_SIZE;
|
|
Packet* block = &queue->array[real_index];
|
|
memcpy(block->data,data,size);
|
|
block->size = size;
|
|
block->metadata = metadata;
|
|
|
|
//always update index after write data
|
|
queue->index = new_index;
|
|
}
|
|
|
|
|
|
void
|
|
raise_event(Queue* queue, EventType type, Event event){
|
|
event.read = false;
|
|
memcpy(&queue->events[type],&event,sizeof(Event));
|
|
}
|
|
|
|
int
|
|
peek_event(Queue* memory, EventType type){
|
|
return !memory->events[type].read;
|
|
}
|
|
|
|
Event
|
|
pop_event(Queue* queue, EventType type){
|
|
queue->events[type].read = true;
|
|
BOOST_LOG(debug) << "Receive event " << type << ", value: "<< queue->events[type].value_number;
|
|
return queue->events[type];
|
|
} |