Compare commits

...

4 Commits

Author SHA1 Message Date
Brennan Ashton
f380c919f0 documentation: Add release notes for 10.1.0 release 2021-04-18 00:07:13 -07:00
Masayuki Ishikawa
367dc9a29a drivers: wireless: Fix to receive a UDP packet partially in gs2200m.c
Summary:
- When receiving a UDP packet partially, the rest of the packet
  must be discarded.

Impact:
- None

Testing:
- Tested with a UDP sample program

Reported-by: Masatoshi Ueno <Masatoshi.Ueno@sony.com>
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2021-04-18 08:59:40 +02:00
Masayuki Ishikawa
a4b1cea3ba drivers: wireless: Fix AT command response handling in gs2200m.c
Summary:
- When sending an AT command during receiving a bulk packet,
  the bulk packet might be put in the AT command response.
- To handle such the case, gs2200m_send_cmd2() is newly
  introduced instead of using gs2200m_send_cmd(dev, cmd, NULL)

Impact:
- All use cases that send an AT command in gs2200m.c

Testing:
- Tested with renew and nxplayer with spresense:wifi

Reported-by: Masatoshi Ueno <Masatoshi.Ueno@sony.com>
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2021-04-18 08:59:25 +02:00
Dong Heng
16748108c5 riscv/esp32c3: Fix heap end address 2021-04-12 04:39:52 -05:00
5 changed files with 1100 additions and 35 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -34,6 +34,8 @@
#include "esp32c3.h" #include "esp32c3.h"
#include "hardware/esp32c3_rom_layout.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
****************************************************************************/ ****************************************************************************/
@@ -64,12 +66,13 @@ void up_allocate_heap(FAR void **heap_start, size_t *heap_size)
*/ */
extern uint8_t *_sheap; extern uint8_t *_sheap;
extern uint8_t *_eheap; extern const struct esp32c3_rom_layout_s *ets_rom_layout_p;
board_autoled_on(LED_HEAPALLOCATE); board_autoled_on(LED_HEAPALLOCATE);
*heap_start = (FAR void *)&_sheap; *heap_start = (FAR void *)&_sheap;
*heap_size = (size_t)((uintptr_t)&_eheap - (uintptr_t)&_sheap); *heap_size = (size_t)(ets_rom_layout_p->dram0_rtos_reserved_start -
(uintptr_t)&_sheap);
} }
/**************************************************************************** /****************************************************************************

View File

@@ -0,0 +1,94 @@
/****************************************************************************
* arch/risc-v/src/esp32c3/hardware/esp32c3_rom_layout.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_RISCV_SRC_ESP32C3_HARDWARE_ESP32C3_ROM_LAYOUT_H
#define __ARCH_RISCV_SRC_ESP32C3_HARDWARE_ESP32C3_ROM_LAYOUT_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Structure and functions for returning ROM global layout
*
* This is for address symbols defined in the linker script,
* which may change during ECOs.
*/
struct esp32c3_rom_layout_s
{
uintptr_t dram0_stack_shared_mem_start;
uintptr_t dram0_rtos_reserved_start;
uintptr_t stack_sentry;
uintptr_t stack;
uintptr_t stack_sentry_app;
uintptr_t stack_app;
/* BTDM data */
uintptr_t data_start_btdm;
uintptr_t data_end_btdm;
uintptr_t bss_start_btdm;
uintptr_t bss_end_btdm;
uintptr_t data_start_btdm_rom;
uintptr_t data_end_btdm_rom;
uintptr_t data_start_interface_btdm;
uintptr_t data_end_interface_btdm;
uintptr_t bss_start_interface_btdm;
uintptr_t bss_end_interface_btdm;
/* PHY data */
uintptr_t dram_start_phyrom;
uintptr_t dram_end_phyrom;
/* Wi-Fi data */
uintptr_t dram_start_coexist;
uintptr_t dram_end_coexist;
uintptr_t dram_start_net80211;
uintptr_t dram_end_net80211;
uintptr_t dram_start_pp;
uintptr_t dram_end_pp;
uintptr_t data_start_interface_coexist;
uintptr_t data_end_interface_coexist;
uintptr_t bss_start_interface_coexist;
uintptr_t bss_end_interface_coexist;
uintptr_t data_start_interface_net80211;
uintptr_t data_end_interface_net80211;
uintptr_t bss_start_interface_net80211;
uintptr_t bss_end_interface_net80211;
uintptr_t data_start_interface_pp;
uintptr_t data_end_interface_pp;
uintptr_t bss_start_interface_pp;
uintptr_t bss_end_interface_pp;
uintptr_t dram_start_usbdev_rom;
uintptr_t dram_end_usbdev_rom;
uintptr_t dram_start_uart_rom;
uintptr_t dram_end_uart_rom;
};
#endif /* __ARCH_RISCV_SRC_ESP32C3_HARDWARE_ESP32C3_ROM_LAYOUT_H */

View File

@@ -82,10 +82,6 @@ MEMORY
} }
/* Heap ends at the start of the static data of the ROM bootloader */
_eheap = 0x3fccae00;
#if CONFIG_ESP32C3_DEVKIT_RUN_IRAM #if CONFIG_ESP32C3_DEVKIT_RUN_IRAM
REGION_ALIAS("default_rodata_seg", dram0_0_seg); REGION_ALIAS("default_rodata_seg", dram0_0_seg);
REGION_ALIAS("default_code_seg", iram0_0_seg); REGION_ALIAS("default_code_seg", iram0_0_seg);

View File

@@ -650,7 +650,7 @@ static bool _copy_data_from_pkt(FAR struct gs2200m_dev_s *dev,
pkt_dat->remain -= len; pkt_dat->remain -= len;
if (0 == pkt_dat->remain) if (0 == pkt_dat->remain || TYPE_BULK_DATA_UDP == pkt_dat->type)
{ {
_remove_and_free_pkt(dev, c); _remove_and_free_pkt(dev, c);
} }
@@ -1568,6 +1568,27 @@ errout:
return r; return r;
} }
/****************************************************************************
* Name: gs2200m_send_cmd2
****************************************************************************/
static enum pkt_type_e gs2200m_send_cmd2(FAR struct gs2200m_dev_s *dev,
FAR char *cmd)
{
struct pkt_dat_s pkt_dat;
enum pkt_type_e r;
/* Initialize pkt_dat and send */
memset(&pkt_dat, 0, sizeof(pkt_dat));
r = gs2200m_send_cmd(dev, cmd, &pkt_dat);
/* Release the pkt_dat */
_release_pkt_dat(dev, &pkt_dat);
return r;
}
/**************************************************************************** /****************************************************************************
* Name: gs2200m_set_opmode * Name: gs2200m_set_opmode
* NOTE: See 5.1.2 Operation Mode * NOTE: See 5.1.2 Operation Mode
@@ -1580,7 +1601,7 @@ static enum pkt_type_e gs2200m_set_opmode(FAR struct gs2200m_dev_s *dev,
char cmd[20]; char cmd[20];
snprintf(cmd, sizeof(cmd), "AT+WM=%d\r\n", mode); snprintf(cmd, sizeof(cmd), "AT+WM=%d\r\n", mode);
t = gs2200m_send_cmd(dev, cmd, NULL); t = gs2200m_send_cmd2(dev, cmd);
if (TYPE_OK == t) if (TYPE_OK == t)
{ {
@@ -1636,7 +1657,7 @@ errout:
static enum pkt_type_e gs2200m_disassociate(FAR struct gs2200m_dev_s *dev) static enum pkt_type_e gs2200m_disassociate(FAR struct gs2200m_dev_s *dev)
{ {
return gs2200m_send_cmd(dev, (char *)"AT+WD\r\n", NULL); return gs2200m_send_cmd2(dev, (char *)"AT+WD\r\n");
} }
/**************************************************************************** /****************************************************************************
@@ -1650,7 +1671,7 @@ static enum pkt_type_e gs2200m_enable_dhcpc(FAR struct gs2200m_dev_s *dev,
char cmd[16]; char cmd[16];
snprintf(cmd, sizeof(cmd), "AT+NDHCP=%d\r\n", on); snprintf(cmd, sizeof(cmd), "AT+NDHCP=%d\r\n", on);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -1664,7 +1685,7 @@ static enum pkt_type_e gs2200m_calc_key(FAR struct gs2200m_dev_s *dev,
char cmd[80]; char cmd[80];
snprintf(cmd, sizeof(cmd), "AT+WPAPSK=%s,%s\r\n", ssid, psk); snprintf(cmd, sizeof(cmd), "AT+WPAPSK=%s,%s\r\n", ssid, psk);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -1678,7 +1699,7 @@ static enum pkt_type_e gs2200m_set_security(FAR struct gs2200m_dev_s *dev,
char cmd[16]; char cmd[16];
snprintf(cmd, sizeof(cmd), "AT+WSEC=%d\r\n", mode); snprintf(cmd, sizeof(cmd), "AT+WSEC=%d\r\n", mode);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -1749,7 +1770,8 @@ static enum pkt_type_e gs2200m_set_addresses(FAR struct gs2200m_dev_s *dev,
snprintf(cmd, sizeof(cmd), "AT+NSET=%s,%s,%s\r\n", snprintf(cmd, sizeof(cmd), "AT+NSET=%s,%s,%s\r\n",
address, netmask, gateway); address, netmask, gateway);
return gs2200m_send_cmd(dev, cmd, NULL);
return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -1763,7 +1785,7 @@ static enum pkt_type_e gs2200m_enable_dhcps(FAR struct gs2200m_dev_s *dev,
char cmd[20]; char cmd[20];
snprintf(cmd, sizeof(cmd), "AT+DHCPSRVR=%d\r\n", on); snprintf(cmd, sizeof(cmd), "AT+DHCPSRVR=%d\r\n", on);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -1777,7 +1799,7 @@ static enum pkt_type_e gs2200m_set_auth(FAR struct gs2200m_dev_s *dev,
char cmd[16]; char cmd[16];
snprintf(cmd, sizeof(cmd), "AT+WAUTH=%d\r\n", mode); snprintf(cmd, sizeof(cmd), "AT+WAUTH=%d\r\n", mode);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
#ifdef CONFIG_WL_GS2200M_ENABLE_WEP #ifdef CONFIG_WL_GS2200M_ENABLE_WEP
@@ -1793,7 +1815,7 @@ static enum pkt_type_e gs2200m_set_wepkey(FAR struct gs2200m_dev_s *dev,
char cmd[32]; char cmd[32];
snprintf(cmd, sizeof(cmd), "AT+WWEP1=%s\r\n", key); snprintf(cmd, sizeof(cmd), "AT+WWEP1=%s\r\n", key);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
#else #else
@@ -1809,7 +1831,7 @@ static enum pkt_type_e gs2200m_set_wpa2pf(FAR struct gs2200m_dev_s *dev,
char cmd[64]; char cmd[64];
snprintf(cmd, sizeof(cmd), "AT+WWPA=%s\r\n", key); snprintf(cmd, sizeof(cmd), "AT+WWPA=%s\r\n", key);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
#endif /* CONFIG_WL_GS2200M_ENABLE_WEP */ #endif /* CONFIG_WL_GS2200M_ENABLE_WEP */
@@ -2038,21 +2060,10 @@ static enum pkt_type_e gs2200m_send_bulk(FAR struct gs2200m_dev_s *dev,
static enum pkt_type_e gs2200m_close_conn(FAR struct gs2200m_dev_s *dev, static enum pkt_type_e gs2200m_close_conn(FAR struct gs2200m_dev_s *dev,
char cid) char cid)
{ {
struct pkt_dat_s pkt_dat;
enum pkt_type_e r;
char cmd[15]; char cmd[15];
/* Prepare cmd */
snprintf(cmd, sizeof(cmd), "AT+NCLOSE=%c\r\n", cid); snprintf(cmd, sizeof(cmd), "AT+NCLOSE=%c\r\n", cid);
return gs2200m_send_cmd2(dev, cmd);
/* Initialize pkt_dat and send */
memset(&pkt_dat, 0, sizeof(pkt_dat));
r = gs2200m_send_cmd(dev, cmd, &pkt_dat);
_release_pkt_dat(dev, &pkt_dat);
return r;
} }
/**************************************************************************** /****************************************************************************
@@ -2066,7 +2077,7 @@ static enum pkt_type_e gs2200m_enable_bulk(FAR struct gs2200m_dev_s *dev,
char cmd[20]; char cmd[20];
snprintf(cmd, sizeof(cmd), "AT+BDATA=%d\r\n", on); snprintf(cmd, sizeof(cmd), "AT+BDATA=%d\r\n", on);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -2080,7 +2091,7 @@ static enum pkt_type_e gs2200m_enable_echo(FAR struct gs2200m_dev_s *dev,
char cmd[8]; char cmd[8];
snprintf(cmd, sizeof(cmd), "ATE%d\r\n", on); snprintf(cmd, sizeof(cmd), "ATE%d\r\n", on);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -2094,7 +2105,7 @@ static enum pkt_type_e gs2200m_activate_wrx(FAR struct gs2200m_dev_s *dev,
char cmd[30]; char cmd[30];
snprintf(cmd, sizeof(cmd), "AT+WRXACTIVE=%d\r\n", on); snprintf(cmd, sizeof(cmd), "AT+WRXACTIVE=%d\r\n", on);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
/**************************************************************************** /****************************************************************************
@@ -2109,7 +2120,7 @@ static enum pkt_type_e gs2200m_set_gpio(FAR struct gs2200m_dev_s *dev,
char cmd[24]; char cmd[24];
snprintf(cmd, sizeof(cmd), "AT+DGPIO=%d,%d\r\n", n, val); snprintf(cmd, sizeof(cmd), "AT+DGPIO=%d,%d\r\n", n, val);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
#endif #endif
@@ -2125,7 +2136,7 @@ static enum pkt_type_e gs2200m_set_loglevel(FAR struct gs2200m_dev_s *dev,
char cmd[16]; char cmd[16];
snprintf(cmd, sizeof(cmd), "AT+LOGLVL=%d\r\n", level); snprintf(cmd, sizeof(cmd), "AT+LOGLVL=%d\r\n", level);
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
#endif #endif
@@ -2139,7 +2150,7 @@ static enum pkt_type_e gs2200m_get_version(FAR struct gs2200m_dev_s *dev)
char cmd[16]; char cmd[16];
snprintf(cmd, sizeof(cmd), "AT+VER=??\r\n"); snprintf(cmd, sizeof(cmd), "AT+VER=??\r\n");
return gs2200m_send_cmd(dev, cmd, NULL); return gs2200m_send_cmd2(dev, cmd);
} }
#endif #endif