-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdyn_nrfjprogdll.c
55 lines (42 loc) · 1.41 KB
/
dyn_nrfjprogdll.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
* Copyright (c) 2019 Nordic Semiconductor
*
* SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
*/
#include <stdlib.h>
#include <stdbool.h>
#include <dlfcn.h>
#define _DYN_LOAD_MACRO(name) (*_dyn_##name)
#include "dyn_nrfjprogdll.h"
#define LOAD_SYMBOL(name) do { if (!(_dyn_##name = dlsym(dll, #name))) { dlclose(dll); return #name; } } while (0)
static void* nrfjprogdll = NULL;
char* load_nrfjprogdll(const char* lib_path)
{
void *dll;
if (nrfjprogdll != NULL) return NULL;
dll = dlopen(lib_path, RTLD_LAZY);
if (!dll)
{
return "";
}
LOAD_SYMBOL(NRFJPROG_open_dll);
LOAD_SYMBOL(NRFJPROG_dll_version);
LOAD_SYMBOL(NRFJPROG_connect_to_emu_with_snr);
LOAD_SYMBOL(NRFJPROG_connect_to_emu_without_snr);
LOAD_SYMBOL(NRFJPROG_read_connected_emu_snr);
LOAD_SYMBOL(NRFJPROG_read_device_family);
LOAD_SYMBOL(NRFJPROG_close_dll);
LOAD_SYMBOL(NRFJPROG_connect_to_device);
LOAD_SYMBOL(NRFJPROG_rtt_set_control_block_address);
LOAD_SYMBOL(NRFJPROG_rtt_start);
LOAD_SYMBOL(NRFJPROG_rtt_is_control_block_found);
LOAD_SYMBOL(NRFJPROG_rtt_read_channel_count);
LOAD_SYMBOL(NRFJPROG_rtt_read_channel_info);
LOAD_SYMBOL(NRFJPROG_rtt_stop);
LOAD_SYMBOL(NRFJPROG_disconnect_from_device);
LOAD_SYMBOL(NRFJPROG_disconnect_from_emu);
LOAD_SYMBOL(NRFJPROG_rtt_write);
LOAD_SYMBOL(NRFJPROG_rtt_read);
nrfjprogdll = dll;
return NULL;
}