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
|
#pragma once
#include <stdint.h>
#include <stdlib.h>
#include <memory.h>
#include "bin.h"
#define W2_SERIAL_START_BYTE 0xff
#define W2_CMDDIR_RX 0
#define W2_CMDDIR_TX 1
#define W2_CMD_CODE_MASK (~1)
#define W2_CMD_DIRECTION_MASK (1)
enum w2_e_serial_commands {
/** ping command */
W2_CMD_PING = 0x00,
/** exception command */
W2_CMD_EXPT = 0x02,
/** mode command */
W2_CMD_MODE = 0x04,
/** speed command */
W2_CMD_SPED = 0x06,
/** direct control command */
W2_CMD_DIRC = 0x08,
/** coordinate command */
W2_CMD_CORD = 0x0a,
/** backorder modify command */
W2_CMD_BOMD = 0x0c,
/** soft reset command */
W2_CMD_SRES = 0x0e,
/** map config command */
W2_CMD_MCFG = 0x10,
/** sensor data command */
W2_CMD_SENS = 0x12,
/** info command */
W2_CMD_INFO = 0x14,
/** display control command */
W2_CMD_DISP = 0x16,
/** play midi command */
W2_CMD_PLAY = 0x18,
/** control leds command */
W2_CMD_CLED = 0x1a,
};
// TODO
// array met indicies die structs opslaan met eigenschappen over de protocol bericht
//
// belangrijke eigenschappen:
// lengte!!!
// generic struct (voor parsen)
// parse functie
// dump functie
//
//
// als het kan deze allemaal met macro's op deze manier definieren:
//
#define W2_PROTOCOL_CMD(name, direction, ...)
#define W2_PROTOCOL_DEFINE(a)
#define W2_PROTOCOL_DECLARE(a)
#define W2_PROTOCOL_PROP(type, name)
#define W2_CMDDIR_NAME_0 rx
#define W2_CMDDIR_NAME_1 tx
#define W2_CMDDIR(dir) W2_CMDDIR_NAME_##dir
#define W2_PROTOCOL_UINT8_T
#define W2_PROTOCOL_UINT16_T
#define W2_PROTOCOL_UINT32_T
#define W2_PROTOCOL_INT8_T
#define W2_PROTOCOL_INT16_T
#define W2_PROTOCOL_INT32_T
#define W2_PROTOCOL_UINT8_T_TYPE uint8_t
#define W2_PROTOCOL_UINT16_T_TYPE uint16_t
#define W2_PROTOCOL_UINT32_T_TYPE uint32_t
#define W2_PROTOCOL_INT8_T_TYPE int8_t
#define W2_PROTOCOL_INT16_T_TYPE int16_t
#define W2_PROTOCOL_INT32_T_TYPE int32_t
#define W2_PROTOCOL_UINT8_T_SIZE 1
#define W2_PROTOCOL_UINT16_T_SIZE 2
#define W2_PROTOCOL_UINT32_T_SIZE 4
#define W2_PROTOCOL_INT8_T_SIZE 1
#define W2_PROTOCOL_INT16_T_SIZE 2
#define W2_PROTOCOL_INT32_T_SIZE 4
#define W2_PROTOCOL_CMD_PING_RX \
W2_PROTOCOL_CMD(ping, W2_CMDDIR_RX, \
W2_PROTOCOL_PROP(W2_PROTOCOL_UINT8_T, opcode) \
W2_PROTOCOL_PROP(W2_PROTOCOL_UINT8_T, id) \
)
W2_PROTOCOL_DECLARE(W2_PROTOCOL_CMD_PING_RX)
typedef struct {
uint8_t opcode;
uint8_t id;
} w2_s_cmd_ping_rx;
w2_s_cmd_ping_rx *w2_protocol_parse_cmd_ping_rx(w2_s_bin *data);
|