Skip to content

Commit f888cbf

Browse files
committed
modem: cmux: Define macros for header size
Define CMUX_HEADER_SIZE macro that is 6 or 7 bytes depending on MTU. Remove the previous CMUX_FRAME_SIZE_MAX that was a bit missleading as it meant only the header size without a data and was fixed to 7 bytes. Redefine new macros CMUX_FRAME_SIZE_MAX and CMUX_FRAME_SIZE_MIN which are actually frame sizes with data included. Signed-off-by: Seppo Takalo <[email protected]>
1 parent 169cf86 commit f888cbf

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

include/zephyr/modem/cmux.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,15 @@ typedef void (*modem_cmux_callback)(struct modem_cmux *cmux, enum modem_cmux_eve
5757
* @cond INTERNAL_HIDDEN
5858
*/
5959

60+
#if CONFIG_MODEM_CMUX_MTU > 127
61+
#define MODEM_CMUX_HEADER_SIZE 7
62+
#else
63+
#define MODEM_CMUX_HEADER_SIZE 6
64+
#endif
65+
66+
6067
/* Total size of the CMUX work buffers */
61-
#define MODEM_CMUX_WORK_BUFFER_SIZE (CONFIG_MODEM_CMUX_MTU + 7 + \
68+
#define MODEM_CMUX_WORK_BUFFER_SIZE (CONFIG_MODEM_CMUX_MTU + MODEM_CMUX_HEADER_SIZE + \
6269
CONFIG_MODEM_CMUX_WORK_BUFFER_SIZE_EXTRA)
6370

6471
enum modem_cmux_state {

subsys/modem/modem_cmux.c

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,23 @@ LOG_MODULE_REGISTER(modem_cmux, CONFIG_MODEM_CMUX_LOG_LEVEL);
2121
#define MODEM_CMUX_EA (0x01)
2222
#define MODEM_CMUX_CR (0x02)
2323
#define MODEM_CMUX_PF (0x10)
24-
#define MODEM_CMUX_FRAME_SIZE_MAX (0x07)
25-
#define MODEM_CMUX_DATA_SIZE_MIN (0x08)
26-
#define MODEM_CMUX_DATA_FRAME_SIZE_MIN (MODEM_CMUX_FRAME_SIZE_MAX + \
27-
MODEM_CMUX_DATA_SIZE_MIN)
24+
#if CONFIG_MODEM_CMUX_MTU > 127
25+
#define MODEM_CMUX_HEADER_SIZE 7
26+
#else
27+
#define MODEM_CMUX_HEADER_SIZE 6
28+
#endif
29+
#define MODEM_CMUX_DATA_SIZE_MIN 8
30+
#define MODEM_CMUX_DATA_FRAME_SIZE_MIN (MODEM_CMUX_HEADER_SIZE + MODEM_CMUX_DATA_SIZE_MIN)
31+
#define MODEM_CMUX_DATA_FRAME_SIZE_MAX (MODEM_CMUX_HEADER_SIZE + CONFIG_MODEM_CMUX_MTU)
2832

29-
#define MODEM_CMUX_CMD_DATA_SIZE_MAX (0x08)
30-
#define MODEM_CMUX_CMD_FRAME_SIZE_MAX (MODEM_CMUX_FRAME_SIZE_MAX + \
31-
MODEM_CMUX_CMD_DATA_SIZE_MAX)
33+
/* Biggest supported Multiplexer control commands in UIH frame
34+
* Modem Status Command (MSC) - 5 bytes when Break is included.
35+
*
36+
* PN would be 10 bytes, but that is not implemented
37+
*/
38+
#define MODEM_CMUX_CMD_DATA_SIZE_MAX 5
39+
#define MODEM_CMUX_CMD_FRAME_SIZE_MAX (MODEM_CMUX_HEADER_SIZE + \
40+
MODEM_CMUX_CMD_DATA_SIZE_MAX)
3241

3342
#define MODEM_CMUX_T1_TIMEOUT (K_MSEC(330))
3443
#define MODEM_CMUX_T2_TIMEOUT (K_MSEC(660))
@@ -274,13 +283,13 @@ static void modem_cmux_bus_callback(struct modem_pipe *pipe, enum modem_pipe_eve
274283
static uint16_t modem_cmux_transmit_frame(struct modem_cmux *cmux,
275284
const struct modem_cmux_frame *frame)
276285
{
277-
uint8_t buf[MODEM_CMUX_FRAME_SIZE_MAX];
286+
uint8_t buf[MODEM_CMUX_HEADER_SIZE];
278287
uint8_t fcs;
279288
uint16_t space;
280289
uint16_t data_len;
281290
uint16_t buf_idx;
282291

283-
space = ring_buf_space_get(&cmux->transmit_rb) - MODEM_CMUX_FRAME_SIZE_MAX;
292+
space = ring_buf_space_get(&cmux->transmit_rb) - MODEM_CMUX_HEADER_SIZE;
284293
data_len = MIN(space, frame->data_len);
285294
data_len = MIN(data_len, CONFIG_MODEM_CMUX_MTU);
286295

@@ -1330,11 +1339,9 @@ void modem_cmux_init(struct modem_cmux *cmux, const struct modem_cmux_config *co
13301339
__ASSERT_NO_MSG(cmux != NULL);
13311340
__ASSERT_NO_MSG(config != NULL);
13321341
__ASSERT_NO_MSG(config->receive_buf != NULL);
1333-
__ASSERT_NO_MSG(config->receive_buf_size >=
1334-
(CONFIG_MODEM_CMUX_MTU + MODEM_CMUX_FRAME_SIZE_MAX));
1342+
__ASSERT_NO_MSG(config->receive_buf_size >= MODEM_CMUX_DATA_FRAME_SIZE_MAX);
13351343
__ASSERT_NO_MSG(config->transmit_buf != NULL);
1336-
__ASSERT_NO_MSG(config->transmit_buf_size >=
1337-
(CONFIG_MODEM_CMUX_MTU + MODEM_CMUX_FRAME_SIZE_MAX));
1344+
__ASSERT_NO_MSG(config->transmit_buf_size >= MODEM_CMUX_DATA_FRAME_SIZE_MAX);
13381345

13391346
memset(cmux, 0x00, sizeof(*cmux));
13401347
cmux->callback = config->callback;

0 commit comments

Comments
 (0)