-
Notifications
You must be signed in to change notification settings - Fork 0
/
SMlib.h
138 lines (103 loc) · 3.99 KB
/
SMlib.h
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#ifndef SM_LIB_H
#define SM_LIB_H
#include <stdint.h>
#include "SMlibDeviceConfig.h"
// TODO: write doc
// GCC NOTE: gcc -g -O0 -fshort-enums -Wall -Wpedantic SMlib.c SMlibExternalAction.c main.c
// main.c -- your main program file, SMlibExternalAction.c -- need to implement manually
// don't forget replace example SMlibDeviceConfig.h with your personal configuration file
typedef enum {False, True} Bool;
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ State Machine Directed Graph types and constants @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
typedef enum {STATES_NAMES, StatesQuantity} stateIndexCode;
#define EXTERNAL_ACTION_CUSTOM_ERRORS_CODES CUSTOM_ERROR_CODE_A = 0x10, \
CUSTOM_ERROR_CODE_B = 0x11, \
CUSTOM_ERROR_CODE_C = 0x12
typedef enum
{
EXTERNAL_ACTION_SUCCESS,
EXTERNAL_ACTION_UNDEFINED_ERROR,
EXTERNAL_ACTION_CUSTOM_ERRORS_CODES
} externalActionResult;
typedef struct directedEdge directedEdge;
typedef enum
{
SWITCH_SUCCESS,
SWITCH_ERROR_HMAC_ERROR,
SWITCH_ERROR_STATE_DOES_NOT_EXIST,
SWITCH_ERROR_NO_DIRECT_WAY,
SWITCH_ERROR_EXTERNAL_ACTION_FAIL
} switchResult;
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ State Machine Luns Access Rights types and constants @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
typedef enum {LUNS_NAMES, LunsQuantity} lunIndexCode;
typedef enum {RW, RO, HI, AO} lunAccessRight;
typedef struct stateMachineCTX stateMachineCTX;
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ HMAC and JSON RPC types and constants @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
#define CNONCE_LENGTH 16 // 128 bit
#define SNONCE_LENGTH 16 // 128 bit
typedef enum
{
sessionDurationNotSet,
onlyGetStateFlagTrue,
onlyGetStateFlagFalse
} sessionType;
typedef enum
{
sessionNotStartedId,
initSessionReqestId,
initSessionAckId,
changeStateRequestId
} jsonRpcId;
#define DEVICE_HMAC_KEY_LENGTH 32 // 256 bit
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ State Machine Context management functions @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
stateMachineCTX* SMlib_createCTX(void);
void SMlib_initCTX(stateMachineCTX* SM_CTX);
void SMlib_destroyCTX(stateMachineCTX* SM_CTX);
switchResult SMlib_switchState(stateMachineCTX* SM_CTX, stateIndexCode newState);
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ State Machine Context getters and auxiliary not-CTX-changeable functions @
@ @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
stateIndexCode SMlib_getCurrentState(stateMachineCTX* SM_CTX);
Bool SMlib_checkStateExist(stateIndexCode state);
Bool SMlib_checkDirectWayExist(stateIndexCode stateFrom, stateIndexCode stateTo, stateMachineCTX* SM_CTX);
Bool SMlib_checkLunExist(lunIndexCode lun);
lunAccessRight SMlib_getLunAccessRight(stateIndexCode state, lunIndexCode lun, stateMachineCTX* SM_CTX);
uint16_t SMlib_getSizeofCTX(void);
/*
@@@@@@@@@@@@@@@@@@@@@@@
@ @
@ Temporary functions @
@ @
@@@@@@@@@@@@@@@@@@@@@@@
*/
void SMlib_printCurrentState(stateMachineCTX* SM_CTX);
void SMlib_printStatesGraphEdge(stateMachineCTX* SM_CTX);
void SMlib_printLunsAccessTable(stateMachineCTX* SM_CTX);
#endif // SM_LIB_H