@@ -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
274283static 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