RocketLogger  1.0
web.c
Go to the documentation of this file.
1 
5 #include "web.h"
6 
11 struct web_shm* create_web_shm(void) {
12 
13  int shm_id = shmget(SHMEM_DATA_KEY, sizeof(struct web_shm), IPC_CREAT | SHMEM_PERMISSIONS);
14  if (shm_id == -1) {
15  rl_log(ERROR, "In create_web_shm: failed to get shared data memory id; %d message: %s", errno, strerror(errno));
16  return NULL;
17  }
18  struct web_shm* web_data = (struct web_shm*) shmat(shm_id, NULL, 0);
19 
20  if (web_data == (void *) -1) {
21  rl_log(ERROR, "In create_web_shm: failed to map shared data memory; %d message: %s", errno, strerror(errno));
22  return NULL;
23  }
24 
25  return web_data;
26 }
27 
32 struct web_shm* open_web_shm(void) {
33 
34  int shm_id = shmget(SHMEM_DATA_KEY, sizeof(struct web_shm), SHMEM_PERMISSIONS);
35  if (shm_id == -1) {
36  rl_log(ERROR, "In create_web_shm: failed to get shared data memory id; %d message: %s", errno, strerror(errno));
37  return NULL;
38  }
39  struct web_shm* web_data = (struct web_shm*) shmat(shm_id, NULL, 0);
40 
41  if (web_data == (void *) -1) {
42  rl_log(ERROR, "In create_web_shm: failed to map shared data memory; %d message: %s", errno, strerror(errno));
43  return NULL;
44  }
45 
46  return web_data;
47 }
48 
55 void reset_buffer(struct ringbuffer* buffer, int element_size, int length) {
56  buffer->element_size = element_size;
57  buffer->length = length;
58  buffer->filled = 0;
59  buffer->head = 0;
60 }
61 
67 void buffer_add(struct ringbuffer* buffer, int64_t* data) {
68  memcpy((buffer->data) + buffer->head*buffer->element_size/sizeof(int64_t), data, buffer->element_size);
69  if(buffer->filled < buffer->length) {
70  buffer->filled++;
71  }
72  buffer->head = (buffer->head + 1) % buffer->length;
73 
74 }
75 
82 int64_t* buffer_get(struct ringbuffer* buffer, int num) {
83  int pos = ((int)buffer->head + (int)buffer->length - 1 - num) % (int)buffer->length;
84 
85  return buffer->data + pos*buffer->element_size/sizeof(int64_t);
86 }
struct ringbuffer buffer[WEB_RING_BUFFER_COUNT]
Array of ring buffers for different time scales.
Definition: web.h:70
#define SHMEM_DATA_KEY
Key for web shared memory (used for creation)
Definition: types.h:71
void buffer_add(struct ringbuffer *buffer, int64_t *data)
Definition: web.c:67
void rl_log(rl_log_type type, const char *format,...)
Definition: log.c:12
struct web_shm * open_web_shm(void)
Definition: web.c:32
int64_t data[NUM_WEB_CHANNELS *NUM_WEB_POINTS]
Data array.
Definition: web.h:58
void reset_buffer(struct ringbuffer *buffer, int element_size, int length)
Definition: web.c:55
struct web_shm * create_web_shm(void)
Definition: web.c:11
struct web_shm * web_data
Pointer to shared memory data.
Definition: rl_server.c:26
uint32_t filled
Number of elements in buffer.
Definition: web.h:54
int64_t * buffer_get(struct ringbuffer *buffer, int num)
Definition: web.c:82
uint32_t head
Current position (in elements)
Definition: web.h:56
#define SHMEM_PERMISSIONS
Permissions for shared memory.
Definition: util.h:26
Definition: web.h:64
Error.
Definition: types.h:167
uint32_t element_size
Size of buffer element.
Definition: web.h:50
uint32_t length
Size of buffer in elements.
Definition: web.h:52
Definition: web.h:48