ogl_beamforming

Ultrasound Beamforming Implemented with OpenGL
git clone anongit@rnpnr.xyz:ogl_beamforming.git
Log | Files | Refs | Feed | Submodules | LICENSE

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:
Mhelpers/ogl_beamformer_lib.c | 23++++++++++++++++++-----
Mhelpers/ogl_beamformer_lib.h | 2+-
Mos_win32.c | 21+++++++++++++++++++++
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) +{ +}