aboutsummaryrefslogtreecommitdiff
path: root/lib/pbdrv/index.dox
blob: eb0fd63242cfdd409097cccdfe660179ed01a0e4 (plain)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// vim:ft=doxygen
/**

\defgroup pbdrv pbdrv
\brief Standalone puzzle bus driver

\ref pbdrv is a standalone portable static library for handling (i.e.
(de)serialization) of puzzle bus messages. \ref pbdrv is meant for use within
applications that handle puzzle bus messages, but are not puzzle modules
themselves. For a complete puzzle module driver, please see \ref pbdrv-mod.

If you order to use \ref pbdrv, you need to include this folder in your
CMakeLists.txt file, include the \ref pb_ext "extension" for your target
platform, and link the \c pbdrv library with your executable:

```cmake
# include pbdrv
add_subdirectory(lib/pbdrv)

# <use extension>

# link with executable
target_link_libraries(main pbdrv)
```


\defgroup pbdrv-mod pbdrv-mod
\brief Puzzle module driver (superset of \ref pbdrv)

pbdrv-mod is a superset of \ref pbdrv, and includes functions specific to
puzzle bus modules. \ref pbdrv-mod compiles to an object file instead of a
static library because it may depend on functions that rely on external
libraries. \ref pbdrv-mod is still considered standalone, but requires either
using an existing \ref pb_drv "driver", or (partially) implementing the driver
functions.

Like \ref pbdrv, \ref pbdrv-mod can be used by including this folder in your
CMakeLists.txt file and linking the library with your executable. A notable
difference with \ref pbdrv-mod is that you do not need to include an extension.
\ref pb_ext "Extensions" are still used by \ref pbdrv-mod, but they are
included automatically by the target platform's \ref pb_drv "driver". The
appropriate \ref pb_drv "driver" to load is also automatically detected.

Example:

```cmake
# include pbdrv
add_subdirectory(lib/pbdrv)

# link with executable
target_link_libraries(main pbdrv-mod)
```

\note In most cases, the \ref pb_hook "hooks" should be sufficient to realize
extensions or custom behavior not provided by \ref pbdrv-mod.

\note Most \c pb_* functions have a weak implementation, which may be
overwritten by a custom implementation. This allows you to use the default
implementation where possible, and only implement extensions required for your
puzzle module.

\see pbdrv

\{

\defgroup pb_hook Hook
\brief Functions for (partially) overriding default behavior

Hooks are functions that allow the user to implement custom behavior (i.e.
extend or conditionally replace the default handlers), without needing to
completely overwrite the built-in handlers or understand the internals of \ref
pbdrv-mod.

\}

*/