Commit Graph

58051 Commits

Author SHA1 Message Date
nuttxs bfcc283694 arch/esp32_himemcdev: Multiple instances of struct file for the same file
share the f_inode, ensuring that the mapping status is associated with
the file entity rather than a single descriptor.
Avoid redundant mapping operations caused by multiple descriptors
operating on the same file.

Signed-off-by: nuttxs <zhaoqing.zhang@sony.com>
2025-03-27 02:27:35 +08:00
Huang Qi 0873d88f11 tools/espressif: Improve version checking by subprocess
Summary:
- Replace version checking logic using pkg_resources and importlib with a subprocess call to `esptool.py version`
- This change enhances compatibility with esptool installed via pipx and simplifies the version retrieval process

Impact:
- No functional changes; the script continues to prompt for installation if esptool is not found
- Increases maintainability by reducing dependency on Python version checks

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-03-27 02:26:47 +08:00
Zhu Zhongjie f13e66adcb boards/raspberrypi-pico: add waveshare Pico-ResTouch-LCD-2.8 board support
This change adds support for the Pico ResTouch 2.8" LCD module to enhance display options for NuttX-based systems.

Signed-off-by: Zhu Zhongjie <zhongjiezhu1@gmail.com>
2025-03-27 02:25:51 +08:00
Yanfeng Liu 672f806a7e arch/armv7-r: relax ARM_THUMB
This drops forcing ARM_THUMB for ARMV7R so that downstream chips
can use it optionally.

Signed-off-by: Yanfeng Liu <p-liuyanfeng9@xiaomi.com>
2025-03-27 02:25:05 +08:00
Yanfeng Liu c7d3f92867 arch/arm: guard .thumb_func use
This guards use of .thumb_func with ARM_THUBM kconfig so that
CONFIG_ARM_THUMB can be off for cases like qemu-armv7r:pnsh

Signed-off-by: Yanfeng Liu <p-liuyanfeng9@xiaomi.com>
2025-03-27 02:25:05 +08:00
lpxiao 9e07b4a924 arch/arm/stm32: fix stm32f1xx alarm support
Summary:
stm32: support querying a previously set RTC alarm In the STM32F1xx series

Impact:
When using the stm32f1xx series MCU, the alarm function can be used, but when we enabled the CONFIG_RTC_ALARM configuration, an error was reported due to the inability to find the specific implementation of rdalarm.

Testing:
In our own projects, we have done alarm verification using the STM32F103RE..
2025-03-27 02:22:51 +08:00
Tim Kan(SSS) 1c6b603eec feat(arch/xensa): add CONFIG_SPIRAM_MEMTEST from ESP-IDF
The CONFIG item is beneficial for startup performance tuning, so
it would be better to have it in Nuttx as well.

Co-authored-by: FunatsuTaishi <51806905+FunatsuTaishi@users.noreply.github.com>
Co-authored-by: Roy Feng <roy.feng@sony.com>
Signed-off-by: Tim Kan(SSS) <tim.kan@sony.com>
2025-03-27 02:21:16 +08:00
nuttxs 720c6cce6f arch/esp32_partition: read data from SPI Flash at designated
address (with decryption)

Signed-off-by: nuttxs <zhaoqing.zhang@sony.com>
2025-03-27 02:21:04 +08:00
nuttxs 72f3ac98e2 arch/esp32_partition: add some partition operation interfaces for esp32
Relocate the enum ota_img_ctrl_e and ota_img_bootseq_e
to a directory visible to the application.
Inspect if the MTD partition (factory/ota_0/ota_1) is mapped as text.
Adding an ioctl interface ota_invalidate_bootseq() to the ESP32 partitions,
by deleting the corresponding otadata, makes the boot sequence (ota_0/1) invalid.

Signed-off-by: nuttxs <zhaoqing.zhang@sony.com>
2025-03-27 02:21:04 +08:00
Gao Feng 5afed2cb00 xtensa/esp32: write encrypt func implementation
based on spec, 16 bytes alignment is checked.
2025-03-27 02:20:14 +08:00
nuttxs e1ffc1075d arch/esp32_spi: Add check to see if the TX_FIFO is empty
to avoid sending empty data

Signed-off-by: nuttxs <zhaoqing.zhang@sony.com>
2025-03-27 02:20:02 +08:00
yangao1 ded5a6aae5 nxgdb/dmesg.py:add use gdb dump rpmsg_syslog
(gdb) dmesg
RAM log:
[01/06 02:27:05] [ 1] [cp] reset mode:1
...
[01/06 02:27:05] [ 1] [cp] Dump board_reset backtrace:
[01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace| 1: 0x10a0d880 0x10a0a78e 0x10a0d8b6 0x10a0f29e 0x10a0f182
[01/06 02:27:05] [ 1] [cp] Time: Mon Jan  6 02:27:05 2025
---END of RAMLOG

RPMSG syslog:
dumpstack: backtrace|10: 0x10a0d880 0x10a0a78e 0x10a110de 0x10a3a482 0x10a3c4fa 0x10a23358 0x10a4aaee 0x10a34a7c
[01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace|10: 0x10a2330a 0x10a0f1f4
[01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace|11: 0x10a0d880 0x10a0a78e 0x10a110de 0x10a3a482 0x10a15152 0x10a0f182
[01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace|15: 0x10a0d880 0x10a0a78e 0x10a0d8b6 0x10a174d0 0x10a3a482 0x10a3c4fa 0x10a222ee 0x10a18c66
[01/06 02:27:05] [ 1] [cp] Time: Mon Jan  6 02:27:05 2025
---END of RPMSG SYSLOG---

Signed-off-by: yangao1 <yangao1@xiaomi.com>
2025-03-27 02:18:37 +08:00
Alexander Lerach d1be769038 arch/arm: Fix crash when using memcpy/memset as RAMFUNCS
Add no_builtin for memcpy/memset to the startup code of boards
with CONFIG_ARCH_RAMFUNCS, because certain compilers call memcpy/memset
instead of the explicit for loop. This will cause a crash if memcpy/memset
are mapped to RAM because the function that copies them to RAM is called later,
resulting in undefined code being executed.

Signed-off-by: Alexander Lerach <alexander@auterion.com>

arch/arm: Use decorator for entry point

Use a decorator that contains the required no_builtin instead of adding
them explicitly to the startup code. This way it will be easier to
maintain them in the future when changes to the no_builtin used are required.

Signed-off-by: Alexander Lerach <alexander@auterion.com>

arch/arm: Rename decorator

Rename the entry point decorator used for the startup code to a less explicit name.
This way the style is more consistent with other decorators.

Signed-off-by: Alexander Lerach <alexander@auterion.com>
2025-03-27 02:17:14 +08:00
Tim Hardisty 3ad4ae503a drivers/mtd/gd55.c: fix uninitialised variables.
These caused runtime errors and compiler warnings.

Signed-off-by: Tim Hardisty <timh@jti.uk.com>
2025-03-27 02:16:48 +08:00
Michal Lenc 19b655b4fd arch/arm/sama5/spi: fix ifdelay setup in spi_setdelay call
ifdelay description (delay between frames) matches the DLYBCT field
(delay between consecutive transfers without removing chip select)
much better compared to stopdelay (delay between last CLK and CS
inactive). The option for stopdelay does not seem to be configurable
in SAMA5 peripheral.

Signed-off-by: Michal Lenc <michallenc@seznam.cz>
2025-03-26 23:20:10 +08:00
raiden00pl ae1950ebd9 boards/arm/nrf52/nrf52840-dk: add GPIO driver based on leds and buttons
With this change we can use on board leds and buttons with gpio driver

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-03-26 23:16:26 +08:00
Jukka Laitinen b83493d8a0 Normalize defconfigs, remove CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y
This is now default when CONFIG_PRIORITY_INHERITANCE=y

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-03-26 22:36:48 +08:00
Jukka Laitinen 06d00b4c88 Correct the pthread mutex priority inheritance default setting
After pthread mutexes changed to nxmutex, the priority inheritance
was set on by default; even if one tried to control it with
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT.

Also the CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_PROTECT is not effective.

Fix this by setting the default mutex priority adjustment flags according
to CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT and CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_PROTECT.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-03-26 22:36:48 +08:00
simbit18 d7681cc815 CI: Improved speed to build nuttx on MSYS2 job
After MSYS2 updated the package on GitHub
there was a slowdown in building NuttX in the MSYS2 job.

It went from an average of 6 minutes to 10 minutes !!!

The purpose of this PR is to speed up the build to decrease the usage of the Windows runner.

Modified Files
tools/ci/cibuild.sh

tools/sethost.sh

make olddefconfig -j 4 -> make olddefconfig
workaround for remove
  Cleaning...
  Configuring...
make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.

Signed-off-by: simbit18 <simbit18@gmail.com>
2025-03-26 22:35:19 +08:00
anjiahao 3844b43afe serial:gdbstub need enable irq
Signed-off-by: anjiahao <anjiahao@xiaomi.com>
2025-03-26 22:34:46 +08:00
ouyangxiangzhen 2b53d5af8d arch/arm64: Increase the timer accuracy with the lower USEC_PER_TICK.
This commit increased the timer accuracy with the lower USEC_PER_TICK.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-03-26 19:26:37 +08:00
ouyangxiangzhen a121c059c4 arch/arm64: Optimize the initialization of the timer.
This commit optimized the initialization of the ARM generic timer for each cpu core.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-03-26 19:26:37 +08:00
stbenn c4a84e30b7 driver/mtd: ramtron multi-device spi bus support
Adds a device ID to ramtron_initialize, which is stored in the ramtron_dev_s structure.
This ID is used when calling SPI_SELECT to board specific logic to allow chip select on the SPI bus.

This change is NOT backwards compatible, as it changes the function signature of ramtron_initialize.

This implementation is based on the handling of chip select in nuttx/drivers/mtd/sst26.c:sst26_initialize_spi().

Additional Changes:
  - Add MB85RS64V to ramtron supported parts list.
2025-03-26 19:26:01 +08:00
raiden00pl 1178bf4c57 CMakeLists.txt: fix warnings when using upstream boards in out-of-tree configs
When we use upstream board as a target in out-of-tree board configurations we
should not link dummy/Kconfig with a board Kconfig otherwise this file is
included twice which cause cmake warnings.

For example, when out-of-tree configuration is like this:

  CONFIG_ARCH_BOARD_CUSTOM=y
  CONFIG_ARCH_BOARD_CUSTOM_DIR="boards/arm/stm32/b-g431b-esc1/"
  CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y
  CONFIG_ARCH_BOARD_CUSTOM_NAME="b-g431b-esc1"

this results with many warnings during configuration stage:

  CMake Warning at cmake/nuttx_kconfig.cmake:171 (message):
    Kconfig Configuration Error: warning: the default selection
    BOARD_STM32_BG431BESC1_USE_HSI (defined at
    boards/arm/stm32/b-g431b-esc1/Kconfig:12,
    /home/raiden00/git/railab/dawn/build_esc1/boards/dummy/Kconfig:12) of
    <choice> (defined at boards/arm/stm32/b-g431b-esc1/Kconfig:8) is not
    contained in the choice

    warning: the choice symbol BOARD_STM32_BG431BESC1_USE_HSI (defined at
    boards/arm/stm32/b-g431b-esc1/Kconfig:12,
    /home/raiden00/git/railab/dawn/build_esc1/boards/dummy/Kconfig:12) is
    defined with a prompt outside the choice

    warning: the choice symbol BOARD_STM32_BG431BESC1_USE_HSE (defined at
    boards/arm/stm32/b-g431b-esc1/Kconfig:15,
    /home/raiden00/git/railab/dawn/build_esc1/boards/dummy/Kconfig:15) is
    defined with a prompt outside the choice

    warning: the choice symbol BOARD_STM32_BG431BESC1_USE_HSI (defined at
    boards/arm/stm32/b-g431b-esc1/Kconfig:12,
    /home/raiden00/git/railab/dawn/build_esc1/boards/dummy/Kconfig:12) is
    defined with a prompt outside the choice

    warning: the choice symbol BOARD_STM32_BG431BESC1_USE_HSE (defined at
    boards/arm/stm32/b-g431b-esc1/Kconfig:15,
    /home/raiden00/git/railab/dawn/build_esc1/boards/dummy/Kconfig:15) is
    defined with a prompt outside the choice

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-03-26 19:24:36 +08:00
Javier Casas e0b221016f driver/mtd/at45db.c: write to page without built-in erase
Using the FTL driver over a MTD flash device, when writing to flash, eventually the ftl_flush function is called and it does an erase (MTD_ERASE) and then the write (MTD_BWRITE). Currently, the at45db driver (at45db.c), uses a write command 0x82 ("Main Memory Page Program through Buffer 1 with Built-In Erase") that also performs a built-in erase before the write. In summary, each time a write to flash is performed, the page is erased twice before it is written, first in the FTL driver and then in the MTD driver.

This PR is to change the page writes to not use that built-in command.

Signed-off-by: Javier Casas <javiercasas@geotab.com>
2025-03-26 10:29:12 +08:00
wangjianyu3 fbf1ccae0e Documentation/szpi-esp32s3: Add doc for PCA9557
Build Documentation / build-html (push) Has been cancelled
Add basic NuttShell configuration console and I/O expander driver PCA9557 enabled.

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2025-03-25 15:46:09 -03:00
wangjianyu3 dd1e31b22c boards/szpi-esp32s3: Init config for PCA9557
Build & Burn

  ./tools/configure.sh -l lckfb-szpi-esp32s3:pca9557
  make flash -j$(nproc) ESPTOOL_PORT=/dev/ttyUSB0

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2025-03-25 15:46:09 -03:00
wangjianyu3 ce6d6b4602 boards/szpi-esp32s3: Add support for PCA9557
https://wiki.lckfb.com/zh-hans/szpi-esp32s3/open-source-hardware/

| PCA9557 | ESP32S3 |
|---------|---------|
| SCL     | IO2     |
| SDA     | IO1     |
| A0      | 3V3     |
| A1      | GND     |
| A2      | GND     |

| PCA9557 | Peripherals |
|---------|-------------|
| IO0     | LCD_CS      |
| IO1     | PA_EN       |
| IO2     | DVP_PWDW    |

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2025-03-25 15:46:09 -03:00
wangjianyu3 b73d7f2922 drivers/ioexpander: Add support for PCA9557
Datasheet: https://www.ti.com/lit/ds/symlink/pca9557.pdf

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2025-03-25 15:46:09 -03:00
wangjianyu3 5c2cfe8bac boards/esp32s3: Fix esp32s3_gpio_init undefined
When enable both `DEV_GPIO` and `GPIO_LOWER_HALF` for a GPIO pin device for an I/O expander pin.
See esp32s3_gpio.c for more details.

Log

  xtensa-esp32s3-elf-ld: /workspace/nuttx/staging/libboard.a(esp32s3_bringup.o):(.literal.esp32s3_bringup+0x14): undefined reference to `esp32s3_gpio_init'
  xtensa-esp32s3-elf-ld: /workspace/nuttx/staging/libboard.a(esp32s3_bringup.o): in function `esp32s3_bringup':
  /workspace/nuttx/boards/xtensa/esp32s3/common/board/esp32s3_bringup.c:409: undefined reference to `esp32s3_gpio_init'

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2025-03-25 15:46:09 -03:00
Ville Juven 25e7b48c7e mpfs/mpfs_rcc: Add stub driver for FPGA clock and reset controller
This patch adds a driver framework to control individual FPGA reset and
clock gates.

For FPGA devices, only the fabric (FIC0/FIC1/FIC3) clock and reset can be
controlled, which affects the whole fabric / domain. This is problematic
for obvious reasons.

For MSS peripherals, clocks and reset are controlled individually for each
peripheral via MSS memory mapped registers (MPFS_SYSREG). To get the same
capability for FPGA peripherals, the same controller needs to be
fabricated on the FPGA.

However, the FPGA clock/reset controller is entirely user dependent, so a
generic implementation is not possible. However, a generic driver is
needed in order to build the current FPGA peripheral drivers. A stub
implementation of the driver is provided in order to achieve this.

Signed-off-by: Ville Juven <ville.juven@unikie.com>
2025-03-25 11:59:47 -03:00
Tony Lin 10d46929b9 Documentation/drivers/analog/adc/ads1115: Add documentation for the Texas Instrument ADS1115 driver
Build Documentation / build-html (push) Waiting to run
This commit adds the documentation for the Texas Instruments ADS1115 Driver.

Signed-off-by: Tony Lin <99093620+justapotato213@users.noreply.github.com>
2025-03-25 09:49:51 +01:00
Tony Lin 1f2f910ccd drivers/analog/ads1115: Add support for the Texas Instruments ADS1115
This patch adds initial support for the Texas Instruments ADS1115 ADC.
Please read the documentation for more details.

Signed-off-by: Tony Lin <99093620+justapotato213@users.noreply.github.com>
2025-03-25 09:49:51 +01:00
Tiago Medicci Serrano 85d9078a98 Documentation/testing: Add MTD transfer rate test app docs
Build Documentation / build-html (push) Waiting to run
Add documentation entry for the `mtd` test/benchmark application.

Signed-off-by: Tiago Medicci Serrano <tiago.medicci@espressif.com>
2025-03-24 16:08:42 -03:00
SPRESENSE 64b97bda5d drivers/sensors: Add CXD5602PWBIMU driver for IMU Add-on board
Add CXD5602PWBIMU driver for IMU Add-on board.

Signed-off-by: SPRESENSE <41312067+SPRESENSE@users.noreply.github.com>
2025-03-24 16:07:45 -03:00
Eren Terzioglu 0bbdeb4b22 boards/esp32s3/esp32s3-box: Normalize esp32s3-box defconfigs
Build Documentation / build-html (push) Waiting to run
Normalize esp32s3-box defconfigs to fix CI issues

Signed-off-by: Eren Terzioglu <eren.terzioglu@espressif.com>
2025-03-24 21:28:04 +08:00
Eren Terzioglu 43f982db1a arch/xtensa/esp32s3: Change default pins for esp32s3-lcd-ev-board v1.5
Change default pins for esp32s3-lcd-ev-board to prevent pin changes between boards

Signed-off-by: Eren Terzioglu <eren.terzioglu@espressif.com>
2025-03-24 21:28:04 +08:00
Eren Terzioglu fdfa589ce1 boards/xtensa/esp32s3: Add version support for esp32s3-lcd-ev boards
Add version support for esp32s3-lcd-ev boards to prevent pin changes

Signed-off-by: Eren Terzioglu <eren.terzioglu@espressif.com>
2025-03-24 21:28:04 +08:00
Jari Nippula 930c4b0b0e arch/risc-v/mpfs: set GMAC_RX_UNITSIZE to max gmac frame len
Verify that GMAC RX/TX buffers are 64 byte aligned

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-03-24 20:27:52 +08:00
Jani Paalijarvi 12290d0111 arch/risc-v/src/mpfs/mpfs_ethernet.c: Remove unnecessary phyinit
mpfs_phyinit() was called twice during ifup().

Signed-off-by: Jani Paalijarvi <jani.paalijarvi@unikie.com>
2025-03-24 20:27:52 +08:00
Jukka Laitinen cc662453c1 arch/risc-v/src/mpfs/mpfs_ethernet.c: Fix compilation with CONFIG_DEBUG_NET
- Fix compilation failure "error: 'mpfs_phydump' defined but not used [-Werror=unused-function]"
- Add debug dump of phy registers.

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2025-03-24 20:27:52 +08:00
Jukka Laitinen ea321d86cb arch/risc-v/src/mpfs/mpfs_ethernet.c: Add RX timeout workaround for broken PHYs
If the interface is UP, and no packets are received in 30s, re-initialize the interface by calling the
already implemented mpfs_txtimeout_expiry.

This is a workaround for a bug where IF might be UP and working but packets can only
be transmitted. Receive side just doesn't work at all. The bug manifests at least in
older LAN8742A (rev A and B), for which also a silicon errata exists.

The original issue can be re-produced easily by disconnecting and reconnecting the ethernet cable while
the IF is up.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-03-24 20:27:52 +08:00
Jukka Laitinen f3142be127 mpfs/ethernet: Move txtimeout from HPWORK to LPWORK
- Use LPWORK by default if CONFIG_MPFS_ETHMAC_HPWORK is not defined
- Always use LPWORK for timeouts; this makes very lengthy operations such as re-initializing PHY.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-03-24 20:27:52 +08:00
raiden00pl d9ee02bc2e boards/nucleo-f302r8: add rs485 support
add rs485 support for nucleo-f302r8 based on RS485 CAN Waveshare shield.

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-03-24 20:25:29 +08:00
raiden00pl 6443b33a39 boards/nucleo-f302r8: add ADC support
Add ADC support for nucleo-f302r8.
CN8 pins 35, 36, 37 and 38 are used.

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-03-24 20:24:57 +08:00
raiden00pl 9394962cf6 Documentation: move debug pages to a separate top level page
Move debug related pages from Guides to a separate top level page.
This way all pages related to debugging will be in one place
which is more user friendly.

Related Github issue: https://github.com/apache/nuttx/issues/15667

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-03-24 20:23:47 +08:00
Rodrigo Sim a4777f153b boards/arm/ra4 Add support to Seeed Xiao RA4M1 Board
Added initial support for Seeed Studio XIAO RA4M1 Board. Initial
support to NuttShell via Serial, gpio and userleds. Also two
configurations is available: nsh for basic NuttShell access and
combo for gpio and userleds.

Signed-off-by: Rodrigo Sim <rcsim10@gmail.com>
2025-03-24 20:21:11 +08:00
Rodrigo Sim 02937bd939 Documentation: Add XIAO RA4M1 Board
Added documentation for Seeed Studio XIAO RA4M1
Board.

Signed-off-by: Rodrigo Sim <rcsim10@gmail.com>
2025-03-24 20:20:01 +08:00
raiden00pl f3a4011a20 arch/{rp2040|rp23xx}: remove ADC option from Kconfig
Build Documentation / build-html (push) Waiting to run
Remove duplicated "config ADC" option which is already defined in drivers/analog/Kconfig.

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-03-23 10:41:54 -03:00
Kevin Witteveen (MartiniMarter) 6b3f7e0939 Documentation/components/drivers/character/wireless: IOCTL interface initial documentation.
Adds initial documentation to the IOCTL commands of wireless character devices.

Signed-off-by: Kevin Witteveen (MartiniMarter) <kevinwit1999@gmail.com>
2025-03-23 17:51:15 +08:00