1
1
/*
2
- * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
2
+ * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
3
3
*
4
4
* SPDX-License-Identifier: Apache-2.0
5
5
*/
@@ -28,8 +28,8 @@ static SemaphoreHandle_t s_essl_mutex = NULL;
28
28
static essl_handle_t s_essl = NULL ;
29
29
static sdmmc_card_t * s_card = NULL ;
30
30
31
- static DRAM_DMA_ALIGNED_ATTR uint8_t send_buffer [SDIO_PAYLOAD ];
32
- static DMA_ATTR uint8_t rcv_buffer [SDIO_PAYLOAD ];
31
+ static DRAM_DMA_ALIGNED_ATTR uint8_t send_buffer [SDIO_PACKET_SIZE ];
32
+ static DMA_ATTR uint8_t rcv_buffer [SDIO_PACKET_SIZE ];
33
33
34
34
esp_err_t eppp_sdio_host_tx (void * h , void * buffer , size_t len )
35
35
{
@@ -38,12 +38,17 @@ esp_err_t eppp_sdio_host_tx(void *h, void *buffer, size_t len)
38
38
return ESP_OK ;
39
39
}
40
40
41
- memcpy (send_buffer , buffer , len );
42
- size_t send_len = SDIO_ALIGN (len );
43
- if (send_len > len ) {
44
- // pad with SOF's
45
- memset (& send_buffer [len ], PPP_SOF , send_len - len );
46
- }
41
+
42
+ struct header * head = (void * )send_buffer ;
43
+ head -> magic = PPP_SOF ;
44
+ head -> channel = 0 ;
45
+ head -> size = len ;
46
+ memcpy (send_buffer + sizeof (struct header ), buffer , len );
47
+ size_t send_len = SDIO_ALIGN (len + sizeof (struct header ));
48
+ // if (send_len > len) {
49
+ // // pad with SOF's
50
+ // memset(&send_buffer[len], PPP_SOF, send_len - len);
51
+ // }
47
52
xSemaphoreTake (s_essl_mutex , portMAX_DELAY );
48
53
esp_err_t ret = essl_send_packet (s_essl , send_buffer , send_len , PACKET_TIMEOUT_MS );
49
54
if (ret != ESP_OK ) {
@@ -145,15 +150,28 @@ esp_err_t eppp_sdio_host_rx(esp_netif_t *netif)
145
150
if (intr & ESSL_SDIO_DEF_ESP32 .new_packet_intr_mask ) {
146
151
esp_err_t ret ;
147
152
do {
148
- size_t size_read = SDIO_PAYLOAD ;
149
- ret = essl_get_packet (s_essl , rcv_buffer , SDIO_PAYLOAD , & size_read , PACKET_TIMEOUT_MS );
153
+ size_t size_read = SDIO_PACKET_SIZE ;
154
+ ret = essl_get_packet (s_essl , rcv_buffer , SDIO_PACKET_SIZE , & size_read , PACKET_TIMEOUT_MS );
150
155
if (ret == ESP_ERR_NOT_FOUND ) {
151
156
ESP_LOGE (TAG , "interrupt but no data can be read" );
152
157
break ;
153
158
} else if (ret == ESP_OK ) {
154
159
ESP_LOGD (TAG , "receive data, size: %d" , size_read );
160
+ struct header * head = (void * )rcv_buffer ;
161
+ if (head -> magic != PPP_SOF ) {
162
+ ESP_LOGE (TAG , "invalid magic %x" , head -> magic );
163
+ break ;
164
+ }
165
+ if (head -> channel >= NR_OF_CHANNELS ) {
166
+ ESP_LOGE (TAG , "invalid channel %x" , head -> channel );
167
+ break ;
168
+ }
169
+ if (head -> size > SDIO_PAYLOAD || head -> size > size_read ) {
170
+ ESP_LOGE (TAG , "invalid size %x" , head -> size );
171
+ break ;
172
+ }
155
173
ESP_LOG_BUFFER_HEXDUMP (TAG , rcv_buffer , size_read , ESP_LOG_VERBOSE );
156
- esp_netif_receive (netif , rcv_buffer , size_read , NULL );
174
+ esp_netif_receive (netif , rcv_buffer + sizeof ( struct header ), head -> size , NULL );
157
175
break ;
158
176
} else {
159
177
ESP_LOGE (TAG , "rx packet error: %08X" , ret );
0 commit comments