@@ -51,14 +51,25 @@ static uint16_t modem_ppp_ppp_protocol(struct net_pkt *pkt)
5151 return 0 ;
5252}
5353
54- static bool modem_ppp_needs_escape (uint8_t byte )
54+ static bool modem_ppp_needs_escape (uint32_t async_map , uint8_t byte )
5555{
56- return (byte == MODEM_PPP_CODE_DELIMITER ) || (byte == MODEM_PPP_CODE_ESCAPE ) ||
57- (byte < MODEM_PPP_VALUE_ESCAPE );
56+ uint32_t byte_bit ;
57+
58+ if ((byte == MODEM_PPP_CODE_DELIMITER ) || (byte == MODEM_PPP_CODE_ESCAPE )) {
59+ /* Always escaped */
60+ return true;
61+ } else if (byte >= MODEM_PPP_VALUE_ESCAPE ) {
62+ /* Never escaped */
63+ return false;
64+ }
65+ byte_bit = BIT (byte );
66+ /* Escaped if required by the async control character map */
67+ return byte_bit & async_map ;
5868}
5969
6070static uint32_t modem_ppp_wrap (struct modem_ppp * ppp , uint8_t * buffer , uint32_t available )
6171{
72+ uint32_t async_map = ppp_peer_async_control_character_map (ppp -> iface );
6273 uint32_t offset = 0 ;
6374 uint32_t remaining ;
6475 uint16_t protocol ;
@@ -111,12 +122,12 @@ static uint32_t modem_ppp_wrap(struct modem_ppp *ppp, uint8_t *buffer, uint32_t
111122 ppp -> tx_pkt_fcs = modem_ppp_fcs_update (ppp -> tx_pkt_fcs , upper );
112123 ppp -> tx_pkt_fcs = modem_ppp_fcs_update (ppp -> tx_pkt_fcs , lower );
113124 /* Push protocol bytes (with required escaping) */
114- if (modem_ppp_needs_escape (upper )) {
125+ if (modem_ppp_needs_escape (async_map , upper )) {
115126 buffer [offset ++ ] = MODEM_PPP_CODE_ESCAPE ;
116127 upper ^= MODEM_PPP_VALUE_ESCAPE ;
117128 }
118129 buffer [offset ++ ] = upper ;
119- if (modem_ppp_needs_escape (lower )) {
130+ if (modem_ppp_needs_escape (async_map , lower )) {
120131 buffer [offset ++ ] = MODEM_PPP_CODE_ESCAPE ;
121132 lower ^= MODEM_PPP_VALUE_ESCAPE ;
122133 }
@@ -135,8 +146,8 @@ static uint32_t modem_ppp_wrap(struct modem_ppp *ppp, uint8_t *buffer, uint32_t
135146 (void )net_pkt_read_u8 (ppp -> tx_pkt , & byte );
136147 /* FCS is computed without the escape/modification */
137148 ppp -> tx_pkt_fcs = modem_ppp_fcs_update (ppp -> tx_pkt_fcs , byte );
138- /* Push encoded bytes into buffer */
139- if (modem_ppp_needs_escape (byte )) {
149+ /* Push encoded bytes into buffer*/
150+ if (modem_ppp_needs_escape (async_map , byte )) {
140151 buffer [offset ++ ] = MODEM_PPP_CODE_ESCAPE ;
141152 byte ^= MODEM_PPP_VALUE_ESCAPE ;
142153 remaining -- ;
@@ -157,12 +168,12 @@ static uint32_t modem_ppp_wrap(struct modem_ppp *ppp, uint8_t *buffer, uint32_t
157168 ppp -> tx_pkt_fcs = modem_ppp_fcs_final (ppp -> tx_pkt_fcs );
158169 lower = (ppp -> tx_pkt_fcs >> 0 ) & 0xFF ;
159170 upper = (ppp -> tx_pkt_fcs >> 8 ) & 0xFF ;
160- if (modem_ppp_needs_escape (lower )) {
171+ if (modem_ppp_needs_escape (async_map , lower )) {
161172 buffer [offset ++ ] = MODEM_PPP_CODE_ESCAPE ;
162173 lower ^= MODEM_PPP_VALUE_ESCAPE ;
163174 }
164175 buffer [offset ++ ] = lower ;
165- if (modem_ppp_needs_escape (upper )) {
176+ if (modem_ppp_needs_escape (async_map , upper )) {
166177 buffer [offset ++ ] = MODEM_PPP_CODE_ESCAPE ;
167178 upper ^= MODEM_PPP_VALUE_ESCAPE ;
168179 }
0 commit comments