Wykres commitów

206 Commity (393f3da37cee49c4658cee7d12a5536462099cb4)

Autor SHA1 Wiadomość Data
He Yin Ling cd1223a25e CI: integrate example test to CI 2017-10-31 19:16:26 +08:00
He Yin Ling 47a9a4a614 test: add test fw for example test 2017-10-31 17:42:19 +08:00
Ivan Grokhotkov 59b7d98fec Merge branch 'feature/dfs' into 'master'
Dynamic frequency scaling

See merge request !1189
2017-10-22 12:34:11 +08:00
Darian Leung a6854b72cd freertos/make trace facility configurable
This commit makes configUSE_TRACE_FACILITY and
configUSE_STATS_FORMATTING_FUNCTIONS configurable in kconfig. Test cases fro the
functions enabled by the two configurations above have also been added.

Test cases for the following functions have been added...

- uxTaskGetSystemState()
- uxTaskGetTaskNumber()
- vTaskSetTaskNumber()

- xEventGroupClearBitsFromISR()
- xEventGroupSetBitsFromISR()
- uxEventGroupGetNumber()

- uxQueueGetQueueNumber()
- vQueueSetQueueNumber()
- ucQueueGetQueueType()

Test cases for the following functions were not required...

- prvListTaskWithinSingleList()
- prvWriteNameToBuffer()
- vTaskList()
2017-10-20 15:17:17 +08:00
Ivan Grokhotkov 90bbcbcdc0 unit tests: fix warnings, build with -Werror
- libsodium: silence warnings
- unit tests: fix warnings
- spiram: fix warnings
- ringbuf test: enable by default, reduce delays
2017-10-19 21:35:23 +08:00
He Yin Ling 0a5b678e58 CI: support test UT with different config by CI 2017-10-19 21:35:20 +08:00
Ivan Grokhotkov 3d150be4e1 unit-test-app: new targets for building different configurations 2017-10-19 21:35:19 +08:00
Ivan Grokhotkov bfeecd2b56 freertos: deprecate XT_CLOCK_FREQ
- freertos: add deprecated definition for XT_CLOCK_FREQ
- flash_ops: don't use XT_CLOCK_FREQ
- unity: don't use XT_CLOCK_FREQ
- hw_random: don't use XT_CLOCK_FREQ
- core_dump: don't use XT_CLOCK_FREQ
- app_trace: don't use XT_CLOCK_FREQ
- xtensa_init: init xt_tick_divisor
2017-10-18 14:19:19 +08:00
Ivan Grokhotkov 2b3325b1ab unit tests: fix ref_clock value obtained due to overflow 2017-10-18 14:19:15 +08:00
Angus Gratton 69e92ee320 unit tests: If heap tracing is enabled in sdkconfig, leak trace each test 2017-10-17 15:29:25 +08:00
Angus Gratton 6f07e0797d Unit tests: If a test fails due to corrupting memory, don't print a misleading source file name 2017-10-17 14:46:08 +08:00
Angus Gratton d20fbffae1 idf_monitor: Demangle C++ names 2017-10-17 14:46:08 +08:00
Angus Gratton 0a52dbccca Merge branch 'bugfix/spi_reset_race' into 'master'
periph_ctrl: Refactor to add periph_module_reset(), avoid potential race in SPI DMA workaround

See merge request !1349
2017-10-13 08:51:36 +08:00
Angus Gratton 5d8bd1aa9e Merge branch 'bugfix/libsodium_mbedtls_sha' into 'master'
libsodium: Fix mbedTLS SHA256 & SHA512 implementation, make optional

See merge request !1329
2017-10-13 08:50:24 +08:00
Angus Gratton d98934d56b doc: Fix mentions of Cygwin-style paths to Unix-style
Cygwin-style is really only /cygpath/xxx and IDF doesn't support these.

Closes https://github.com/espressif/esp-idf/pull/1033
2017-10-09 14:22:53 +11:00
Angus Gratton acff3c9c59 libsodium: Fix mbedTLS SHA256 & SHA512 implementation, make optional
* Only direct invocation of cypto_hash_sha256 & crypto_hash_sha512 produced correct output.
* Some remaining header file mixups, so changed approach to wrapping the state structures.
* Fixes https://github.com/espressif/esp-idf/issues/1044 (crypto_sign problems)
* Add option to disable mbedTLS implementation for SHA256 & SHA512 in libsodium
2017-10-06 11:51:55 +11:00
Angus Gratton 0dd9b899b7 periph_ctrl: Refactor to add periph_module_reset(), avoid potential race in SPI DMA workaround
Also refactor use of direct clock access in unit test ref_clock (probably not a real issue)
2017-10-02 17:48:16 +11:00
michael 7370f2913d test: update the format of TEST_ASSERT macro series in ``unity.c`` 2017-09-27 19:56:46 +08:00
Angus Gratton c4e65d6a95 Merge branch 'bugfix/build_kconfig_deps' into 'master'
build: make clean should remove all .d files in tools/kconfig

See merge request !1302
2017-09-22 12:42:37 +08:00
Angus Gratton 976135c3a8 Merge branch 'bugfix/build_system_regen_component_vars' into 'master'
build system: Fix bug requiring "make clean" after IDF updates or menuconfig changes

See merge request !1293
2017-09-22 12:42:00 +08:00
Angus Gratton a361a00405 build: make clean should remove all .d files in tools/kconfig
Causes a problem that can't be fixed by "make clean" if the
host OS headers have moved around.

ie https://esp32.com/viewtopic.php?f=13&t=3098&p=14487
2017-09-22 10:27:32 +10:00
Angus Gratton ab531c0b48 doc: Add steps to update Windows environment installations 2017-09-21 16:57:06 +10:00
Angus Gratton 53d12a6212 build system tests: Don't unix2dos .git files, build directories 2017-09-20 18:21:29 +10:00
Angus Gratton 85ce07e6fd build system: Fix bad partial builds after updates, sdkconfig changes
Fixes accidental regression merging 9903ea1c11.

Add test case for this kind of rebuilding.
2017-09-20 18:11:15 +10:00
Ivan Grokhotkov 01c0c4b661 unit-test-app: initialize partition table info before starting the test 2017-09-19 10:39:44 +08:00
Angus Gratton 0db01b4a4d windows: Update windows prereq script & precompiled environment download 2017-09-18 18:26:57 +10:00
Angus Gratton 61e3a5bd16 windows: Update toolchain & MSYS package download links 2017-09-13 17:27:47 +08:00
Angus Gratton e250dbb433 windows: Add workaround for "git submodule" stray output bug
TW10271
2017-09-13 17:27:47 +08:00
me-no-dev dd87deb278 Add SPIFFS Component to IDF 2017-09-11 19:56:40 +03:00
Angus Gratton 1c7b8aa3a5 Heap tracing support 2017-09-07 16:32:05 +10:00
Angus Gratton 64bfdf56bb Unit tests: enable comprehensive heap poisoning checks 2017-09-07 16:32:05 +10:00
Angus Gratton 5222428dde unit tests: Check heap integrity after each test, check for obvious leaks 2017-09-07 16:32:05 +10:00
Angus Gratton 4809c70899 Merge branch 'feature/register_heaps_runtime' into 'master'
heap: Support adding new heap regions at runtime

See merge request !1159
2017-09-07 10:18:21 +08:00
Deomid Ryabkov 9903ea1c11 Add --warn-undefined-variables to MAKEFLAGS
Fix warnings where undefined vars are used.

Make Kconfig emit "FOO=" for unset bool options
To ensure make variables are always defined, even if empty.

When writing auto.conf, include symbols disabled by dependency to make sure all make variables are always defined.

Fixes espressif/esp-idf#137

Cherry-picked from https://github.com/espressif/esp-idf/pull/138
2017-09-05 16:10:46 +10:00
Angus Gratton 5361c08989 heap: Support adding new heap regions at runtime
To facilitate this, the list of registered heap regions is now a linked list
(allowing entries to be appended at runtime.)
2017-09-05 14:07:02 +10:00
Angus Gratton f487bb19d7 Merge branch 'bugfix/ci_build_examples_more' into 'master'
CI build_examples: Fix build flakiness

See merge request !1191
2017-09-04 16:02:12 +08:00
Angus Gratton 867b20837f build system: Explicitly disallow 'clean' along with non-cleaning targets
Too hard to stage the dependencies so that all clean steps complete before any build steps begin. Also, using and then
deleting and then regenerating SDKCONFIG_MAKEFILE in one pass is really hard to manage successfully.
2017-09-04 17:40:15 +10:00
Angus Gratton 97efaab27b build system tests: Run inside PWD same as build_examples.sh 2017-09-04 17:40:15 +10:00
Angus Gratton 2544355301 build_examples: Small cleanups
* Override MAKEFLAGS via make not via shell variables
* Remove build_examples in gitlab-ci
* Don't use mktemp for any logs
2017-09-04 17:40:15 +10:00
Jeroen Domburg 34372a091c Add initial SPI RAM support. This adds support for an ESP-PSRAM32 chip connected to the default flash pins and GPIO 16 and 17. The RAM is mapped to address 0x3F800000, but otherwise ignored by esp-idf as of yet. 2017-09-04 12:05:49 +08:00
Ivan Grokhotkov 5666fc0a56 Merge branch 'feature/esp_timer_improvements' into 'master'
esp_timer improvements

See merge request !1172
2017-09-01 16:14:01 +08:00
Ivan Grokhotkov d2acf1ce77 sleep: add light sleep, factor out APIs common for deep/light sleep 2017-09-01 10:36:14 +08:00
Ivan Grokhotkov 9a2c62cf2b unity: add reference clock for use in unit tests 2017-09-01 10:34:36 +08:00
Ivan Grokhotkov 3d8390fa8a ci: put example log files on the build volume 2017-08-31 23:00:48 +08:00
Ivan Grokhotkov a25eb825e1 Merge branch 'bugfix/dport_protect_crypto' into 'master'
add protection for crypto registers in DPORT

See merge request !928
2017-08-30 11:45:35 +08:00
Ivan Grokhotkov 80486240c6 unity: log error codes as hex
Error codes are normally defined as hex numbers in header files, so
changing the assert macro to print them as hex as well.
2017-08-29 08:35:23 +08:00
Angus Gratton 0ea4cd67dd mbedtls: Remove "unsafe" warning, enable AES by default & make SHA/MPI optional 2017-08-25 16:08:03 +10:00
Ivan Grokhotkov b9cdbfea87 Merge branch 'test/UT_SDMMC' into 'master'
Enable SDMMC driver test cases

See merge request !1106
2017-08-24 14:41:39 +08:00
houchenyao cf64c7e9a6 unit test: add sd env and spi env for sdmmc 2017-08-22 21:01:34 +08:00
Ivan Grokhotkov 6f52cf0f9d Merge branch 'bugfix/ci_fix_getting_sources' into 'master'
CI: Fix the spell for more reliable getting the sources

See merge request !1127
2017-08-22 20:03:12 +08:00
Ivan Grokhotkov 141b1174c6 idf_monitor: send CR when ENTER is pressed
Other terminal emulators (screen, minicom) default to sending CR when
ENTER is pressed on the keyboard. Make behavior of idf_monitor
consistent with them.
2017-08-21 15:58:28 +08:00
Ivan Grokhotkov d7d6f1e376 idf_monitor: use cancellation and Console.getkey from pyserial 3.3.0+
Between 3.1.0 and 3.3.0, pyserial had thread cancellation implemented
using a select, which blocked on the stdin and an auxiliary pipe. When
thread had to be cancelled, a byte would be sent into the pipe,
unblocking stdin.

Unfortunately, this method suffers from a problem with using select on
a StreamReader (which represents the decoder wrapped around stdin).
In some cases, when the TTY sends an escape sequence in response to
an escape sequence received from serial, this escape sequence will not
be read from stdin until some key is pressed.

In https://github.com/pyserial/pyserial/commit/cab3dab, this method
was replaced with an TIOCSTI ioctl. This change makes sure we use the
new cancellation method even if the script is running with older
pyserial.
2017-08-21 15:58:28 +08:00
Anton Maklakov 618e56abf9 CI: Fix the spell for more reliable getting the sources 2017-08-21 11:52:49 +08:00
Kedar Sovani 8348a71847 ethernet: remove CONFIG_ETHERNET
1. Hello World application shows no footprint difference before and
after this change
2. examples/ethernet/ethernet application compiles properly (can't
test with my board)
2017-08-18 08:31:43 +05:30
Kedar Sovani 63c738de4c sdkconfig: Remove rest of the references to WIFI_ENABLED 2017-08-16 15:55:42 +05:30
Alexey Gerenkov c2c9149a24 esp32: Apptrace API enhancement
- User down buffer configuration support
 - bugfix: ring buf - avalable write size undeflow
 - SysView down buf support updated
2017-07-24 19:57:44 +03:00
Anton Maklakov 341cc8221c CI: Make the list of examples permanent between jobs
Because the results of the 'find' command are not sorted by name.
2017-07-20 16:46:49 +08:00
Angus Gratton b88c8d19fd Merge branch 'bugfix/project_makefile_recompile' into 'master'
build system: Updating project Makefile should trigger a full rebuild

See merge request !990
2017-07-20 10:10:00 +08:00
Angus Gratton 17adb40ca8 bootloader: Calculate SHA256 hash of image on every boot
Makes app image booting more reliable (256-bit rather than 8-bit verification.)

Some measurements, time to boot a 655KB app.bin file and run to app_main() execution.

(All for rev 1 silicon, ie no 340ms spurious WDT delay.)

80MHz QIO mode:
before = 300ms
after = 140ms

40MHz DIO mode:
before = 712ms
after = 577ms

40MHz DIO mode, secure boot enabled
before = 1380ms
after = 934ms

(Secure boot involves two ECC signature verifications (partition table, app) that take approx 300ms each with 80MHz CPU.)
2017-07-19 18:31:59 +10:00
Angus Gratton d664e32394 build system: Use component.mk for all components, refactor bootloader build
For config-only components, component.mk should now contain "COMPONENT_CONFIG_ONLY := 1"

Also refactored some of the generation of linker paths, library list. This required cleaning up the way the bootloader
project works, it's now mostly independent from the parent.
2017-07-19 09:10:48 +10:00
Angus Gratton b7fc16a408 build system: Updating project Makefile should trigger a full rebuild
Project Makefile can set CFLAGS, macro defines, etc.
2017-07-13 10:51:24 +08:00
Angus Gratton c46e2edcae Merge branch 'bugfix/make_size_windows' into 'master'
make size: Fix map file parsing error on Windows

See merge request !932
2017-07-12 17:31:49 +08:00
Anton Maklakov 3cd10899e6 CI: Work around problem with running the initial 'make clean' in parallel (#18)
Just don't pass '-j' to the 'make clean' command
2017-07-07 11:03:25 +08:00
Anton Maklakov f0b6256490 build: Fix test for the first time 'make clean' and error handling in build_examples
Now the tests do not pass

    Before we had incorrect code of the error code checking
    in build_examples.sh for that case and did nothing in test_build_system.sh.
2017-07-07 11:03:25 +08:00
Anton Maklakov 2a6b7794ab CI: Fix the unbound variables in scripts 2017-07-06 18:52:08 +08:00
Anton Maklakov 1b3594ade1 Merge branch 'bugfix/ci_wrong_getting_sources' into 'master'
Fix the getting sources

See merge request !953
2017-07-06 18:43:53 +08:00
Anton Maklakov f194a6bdba CI: Fix the getting sources
Fix the getting sources for a case if the required commit is missed
    in the remote submodule repository.

    Also add more diagnostic.
2017-07-06 16:48:07 +08:00
Angus Gratton fd9d889e62 mbedtls unit tests: Allow for longer timeout using software SHA
Hardware SHA runs SHA operations faster than software...
2017-07-06 15:54:01 +08:00
Anton Maklakov 8dc340d2ea CI: Add script for synchronization of the local mirrors for submodules
You should use it manually when any submodule in the esp-idf has changed

    You can mark to exclude some of them in mirror-list.txt
2017-06-30 12:07:06 +08:00
Anton Maklakov 52445ee541 CI: Use local mirrors for submodules
The CI uses the mirror-submodule-update.sh for non-permanent reassignment
    of 3rdparty sub-modules to local mirrors (only for 'non-master' branches).
    List of the mirrors in mirror-list.txt

    You can use the script locally to speed up data retrieval on network problems

    check_submodule_sync job uses 'GIT_STRATEGY: clone' to check the availability of public sources
2017-06-30 12:06:02 +08:00
Angus Gratton f52519d7a2 CI: Use custom get_full_sources.sh script instead of gitlab-ci's strategies
Work around problems caused by failed submodule clones corrupting
    the working directory on the build runner.

    Add 10 retries for cloning submodules.
2017-06-30 12:05:17 +08:00
Anton Maklakov 35609de417 CI: Move the ci-related staff to a separate directory 2017-06-30 11:57:07 +08:00
Angus Gratton a8f08dc5da make size: Fix map file parsing error on Windows
Closes https://github.com/espressif/esp-idf/issues/739
2017-06-29 12:54:13 +10:00
Ivan Grokhotkov 9b955f4c9f Merge branch 'feature/sysview_via_apptrace' into 'master'
sysview via apptrace

See merge request !708
2017-06-29 08:40:13 +08:00
Angus Gratton 90f1d42a9b Merge branch 'feature/better_make_size' into 'master'
build system: Add idf_size.py tool for better "make size" output

See merge request !874
2017-06-28 06:11:56 +08:00
Alexey Gerenkov 8d43859b6a esp32: SEGGER SystemView Tracing Support
Implements support for system level traces compatible with SEGGER
SystemView tool on top of ESP32 application tracing module.
That kind of traces can help to analyse program's behaviour.
SystemView can show timeline of tasks/ISRs execution, context switches,
statistics related to the CPUs' load distribution etc.

Also this commit adds useful feature to ESP32 application tracing module:
 - Trace data buffering is implemented to handle temporary peaks of events load
2017-06-27 20:52:43 +03:00
Angus Gratton 5dca92377d test runner: Print test name when starting, print filter description
Makes it easier to run tests manually.
2017-06-26 15:38:46 +10:00
Angus Gratton 5055290baf build system: Add idf_size.py tool for better "make size" output & analysis
Add new "make size_components" and "make size_files" targets for analysing makeup of the ELF file.

Plain "make size" output now looks like this:

Total sizes:
 DRAM .data size:   11156 bytes
 DRAM .bss  size:   22304 bytes
Used static DRAM:   33460 bytes ( 294220 available, 10.2% used)
Used static IRAM:   80480 bytes (  50592 available, 61.4% used)
      Flash code:  421463 bytes
    Flash rodata:  103824 bytes
Total image size:~ 616923 bytes (.bin may be padded larger)
2017-06-21 15:43:22 +10:00
Ivan Grokhotkov b78a8ae035 unit-test-app: increase space for factory partition to 1280K 2017-06-15 18:15:36 +08:00
Angus Gratton 211580bf4f Add libsodium v1.0.12
Run some unit test cases based (poorly) around sodium's test infrastructure.

Increase in unity test task stack is due to signature tests, load a lot of data onto the stack.
2017-06-14 15:51:08 +10:00
Angus Gratton 5a1a8b4637 Merge branch 'bugfix/resume_task_cpu1_when_scheduler_disabled' into 'master'
Fix bug waking a task on CPU1 when scheduler is disabled

See merge request !819
2017-06-09 07:10:10 +08:00
Angus Gratton f40ae10a5d freertos: add test case for ISRs waking tasks when scheduler disabled 2017-06-05 16:12:20 +10:00
Anton Maklakov 91718cc776 unit-test-app: Fix incorrect CR+LF sequence.
This caused problems with handling output by grep, sed, etc
2017-06-05 10:51:48 +08:00
He Yin Ling 9b39be9559 CI: fix bug of duplicated unit test case ID:
need to compare if different file names has the same hash value.
use relative path to IDF to keep test case ID consist.
2017-06-03 11:38:05 +08:00
Anton Maklakov 144d345b3b unit-test-app: Fix capability to use !<filter> to inverse that filter 2017-06-01 12:23:14 +08:00
Ivan Grokhotkov 972d1d9242 Merge branch 'feature/ci_test_config_autogen' into 'master'
CI: auto generate configs for test jobs

Currently CI test jobs are static configured by several pre-generated config files.
This approach have several disadvantages:

1. not flexible to select test cases to run, which is important feature of @bot
2. difficult to update test as we need to pre-generate quite a lot files
3. need to maintain extra config files in IDF
4. not flexible to support new test apps or chips, can't use some new features of test bench

Therefore we'll add assign_test stage between build and test, to generate configs for test jobs.

See merge request !738
2017-05-19 11:56:45 +08:00
Henrik Maier b95bef4d9b Update idf_monitor.py to make --toolchain-prefix argument work
--toolchain-prefix command line argument was not taken into account when specified

Merges https://github.com/espressif/esp-idf/pull/617
2017-05-18 10:47:19 +10:00
Angus Gratton ca4f5b9ee6 unit test runer: Add capability to use ![tag] to run all-tests-except-tag
Mostly useful for running ![ignore] to skip ignored tests.
2017-05-10 17:22:30 +10:00
Ivan Grokhotkov 04eb6f6129 Merge branch 'feature/save_esptool_flash_args' into 'master'
CI: save download config in CI build jobs:

IDF built app download config may change with some modification.
save the download configs for built APP in build stage.
then we can use the correct download config in test stage.

See merge request !676
2017-05-08 15:48:28 +08:00
He Yin Ling b045df6507 CI: remove auto assign case script for UT:
we'll now auto assign all test cases in assign_test_case job. remove the
duplicated functions in unit test script.
2017-05-08 11:44:45 +08:00
Ivan Grokhotkov 33b8b7855e Merge branch 'bugfix/spiflash_fatfs_fixes_and_tests' into 'master'
FATFS fixes and tests

This MR includes a set of fixes related to FATFS, SDMMC, and wear levelling:

- `esp_vfs_fat_spiflash_mount` uses `FM_SFD` flag when creating the partition. The volume layout (given in `VolToPart` variable) was not compatible with SFD mode, so mkfs was failing. This fixes the volume layout to use "autodetect" for both volumes. Merges https://github.com/espressif/esp-idf/pull/559.

- fix `prepend_drive_to_path`function, which didn't prepend drive to path (while consuming 2k of stack space)

- fix stack overflow in vfs_fat_link function which allocated two 4kbyte `FIL` structures on the stack

- fix support for having two FATFS instances (in flash and SD) mounted at the same time

- unit tests written for FATFS on SDMMC are made common between SDMMC and WL implementations; FATFS unit tests on WL will run during CI

- fix inconsistent definition of PATH_MAX and ARG_MAX (TW12207, TW12104, https://github.com/espressif/esp-idf/issues/289)

See merge request !732
2017-05-05 17:03:17 +08:00
Ivan Grokhotkov a428af8c9f unit tests: change type of flash_test partition to ‘fat’
This change makes the spi_flash test partition usable for WL and FATFS
tests.
2017-05-05 15:21:37 +08:00
Angus Gratton 72c7941b5e Unit tests: Add FreeRTOS timer tests 2017-05-05 14:38:15 +10:00
He Yin Ling 2b273388dd CI: save download config in CI build jobs:
IDF built app download config may change with some modification.
save the download configs for built APP in build stage.
then we can use the correct download config in test stage.
2017-05-02 13:17:56 +08:00
Angus Gratton 66726ec166 freertos: Enable vTaskSuspend()/vTaskResume() API
Adds relevant unit tests.

TW11878
2017-04-26 12:50:20 +10:00
Ivan Grokhotkov b540322dc1 Merge branch 'feature/wear_levelling' into 'master'
wear levelling

This MR adds wear levelling component. It presents an interface similar to the interface of spi_flash and esp_partition. Inside, it stores data inside a partition to in a way that reduces worst case number of erase cycles for any given sector.

Also included are APIs similar to the ones provided for SDMMC to mount FAT filesystem on top of the wear levelling partition. A simple example shows how this API can be used.

Ref TW10338.

See merge request !567
2017-04-25 19:46:11 +08:00
Alexey Gerenkov 55f1a63faf esp32: Adds functionality for application tracing over JTAG
- Implements application tracing module which allows to send arbitrary
   data to host over JTAG. This feature is useful for analyzing
   program modules behavior, dumping run-time application data etc.
 - Implements printf-like logging functions on top of apptrace module.
   This feature is a kind of semihosted printf functionality with lower
   overhead and impact on system behaviour as compared to standard printf.
2017-04-17 23:26:29 +03:00
Ivan Grokhotkov 8f76fe1d7f move Catch framework header into tools directory 2017-04-17 11:01:18 +08:00
Angus Gratton b99d5df922 unit tests: Shrink unit test partition table so tests can run on 2MB of flash 2017-04-13 17:55:49 +10:00
He Yin Ling 6a759e7cef CI: fix bug in generating UT CI runner config:
the first case ID in filter is incorrect. Should put test case ID but
not test case itself to the filter.
2017-04-10 15:35:32 +08:00