Commit: 1ff0ac0a8e6dda0737ae90643c923417de57c61a
Parent: c9f97f3e768b6b3a615bf0abf4911d8dc055ab05
Author: Randy Palamar
Date: Wed, 10 Jul 2024 14:06:08 -0600
add win32 code for opening shared memory region
Diffstat:
3 files changed, 40 insertions(+), 6 deletions(-)
diff --git a/helpers/ogl_beamformer_lib.c b/helpers/ogl_beamformer_lib.c
@@ -27,7 +27,6 @@ typedef struct {
#endif
static volatile BeamformerParameters *g_bp;
-static char *shm_name = "/ogl_beamformer_parameters";
static os_pipe g_pipe = {.file = OS_INVALID_FILE};
#if defined(__unix__)
@@ -93,14 +92,28 @@ os_close_pipe(void)
{
CloseHandle(g_pipe.file);
}
+
+static BeamformerParameters *
+os_open_shared_memory_area(char *name)
+{
+ HANDLE h = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, name);
+ if (h == OS_INVALID_FILE)
+ return NULL;
+
+ BeamformerParameters *new;
+ new = MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(BeamformerParameters));
+ CloseHandle(h);
+
+ return new;
+}
#endif
static void
-check_shared_memory(void)
+check_shared_memory(char *name)
{
if (g_bp)
return;
- g_bp = os_open_shared_memory_area(shm_name);
+ g_bp = os_open_shared_memory_area(name);
if (g_bp == NULL)
mexErrMsgIdAndTxt("ogl_beamformer:shared_memory",
"failed to open shared memory area");
@@ -128,9 +141,9 @@ send_data(char *pipe_name, i16 *data, uv4 data_dim)
}
void
-set_beamformer_parameters(BeamformerParameters *new_bp)
+set_beamformer_parameters(char *shm_name, BeamformerParameters *new_bp)
{
- check_shared_memory();
+ check_shared_memory(shm_name);
u8 *src = (u8 *)new_bp, *dest = (u8 *)g_bp;
for (size i = 0; i < sizeof(BeamformerParameters); i++)
dest[i] = src[i];
diff --git a/helpers/ogl_beamformer_lib.h b/helpers/ogl_beamformer_lib.h
@@ -24,5 +24,5 @@ typedef struct { u32 x, y, z, w; } uv4;
#include "../beamformer_parameters.h"
-LIB_FN void set_beamformer_parameters(BeamformerParameters *);
+LIB_FN void set_beamformer_parameters(char *shm_name, BeamformerParameters *);
LIB_FN void send_data(char *, i16 *, uv3 data_dim);
diff --git a/os_win32.c b/os_win32.c
@@ -116,3 +116,24 @@ os_read_pipe_data(os_pipe p, void *buf, size len)
ReadFile(p.file, buf, len, &total_read, 0);
return total_read;
}
+
+static BeamformerParameters *
+os_open_shared_memory_area(char *name)
+{
+ HANDLE h = CreateFileMappingA(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0,
+ sizeof(BeamformerParameters), name);
+ if (h == INVALID_HANDLE_VALUE)
+ return NULL;
+
+ BeamformerParameters *new;
+ new = MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(BeamformerParameters));
+ CloseHandle(h);
+
+ return new;
+}
+
+/* NOTE: handle is already closed and view will be unmapped when program terminates */
+static void
+os_remove_shared_memory(char *name)
+{
+}