diff --git a/boards/wr3.json b/boards/wr3.json new file mode 100644 index 0000000..0b9985e --- /dev/null +++ b/boards/wr3.json @@ -0,0 +1,18 @@ +{ + "build": { + "mcu": "rtl8710bn", + "f_cpu": "125000000L", + "amb_ota1_offset": "0x0800B000", + "amb_ota2_offset": "0x080D0000" + }, + "frameworks": [ + "realtek-ambz-sdk" + ], + "upload": { + "maximum_size": 2097152, + "maximum_ram_size": 262144 + }, + "name": "WR3 Wi-Fi Module", + "url": "", + "vendor": "Tuya" +} diff --git a/builder/frameworks/realtek-ambz-sdk.py b/builder/frameworks/realtek-ambz-sdk.py new file mode 100644 index 0000000..4f206e6 --- /dev/null +++ b/builder/frameworks/realtek-ambz-sdk.py @@ -0,0 +1,586 @@ +from os.path import join, isdir +from SCons.Script import DefaultEnvironment, Builder + +env = DefaultEnvironment() +platform = env.PioPlatform() +board = env.BoardConfig() + +SDK_DIR = platform.get_package_dir("framework-realtek-amb1") +assert isdir(SDK_DIR) + +ota1_offset = board.get("build.amb_ota1_offset") +ota2_offset = board.get("build.amb_ota2_offset") + +# Firmware name +if env.get("PROGNAME", "program") == "program": + env.Replace(PROGNAME="firmware") +env.Replace( + PROGSUFFIX=".elf", +) + +# Outputs +env.Replace( + IMG_FW="image2_all_ota1.bin", + IMG_OTA="ota_all.bin", +) + +# Tools +# fmt: off +TOOL_DIR = join(SDK_DIR, "component", "soc", "realtek", "8711b", "misc", "iar_utility", "common", "tools") +# fmt: on +assert isdir(SDK_DIR) +env.Replace( + PICK=join(TOOL_DIR, "pick"), + PAD=join(TOOL_DIR, "pad"), + CHECKSUM=join(TOOL_DIR, "checksum"), + OTA=join(TOOL_DIR, "ota"), +) + +# Flags +env.Replace( + CCFLAGS=[ + "-mcpu=cortex-m4", + "-mthumb", + "-mfloat-abi=hard", + "-mfpu=fpv4-sp-d16", + "-g2", + "-w", + "-O2", + "-Wno-pointer-sign", + "-fno-common", + "-fmessage-length=0", + "-ffunction-sections", + "-fdata-sections", + "-fomit-frame-pointer", + "-fno-short-enums", + "-std=gnu99", + "-fsigned-char", + ], + CPPDEFINES=[ + "M3", + "CONFIG_PLATFORM_8711B", + ("F_CPU", "166000000L"), + ], + LINKFLAGS=[ + "-mcpu=cortex-m4", + "-mthumb", + "-mfloat-abi=hard", + "-mfpu=fpv4-sp-d16", + "-g", + "--specs=nano.specs", + "-nostartfiles", + "-Wl,-Map=" + join("$BUILD_DIR", "${PROGNAME}.map"), + "-Os", + "-Wl,--gc-sections", + "-Wl,--cref", + "-Wl,--entry=gImage2EntryFun0", + "-Wl,--no-enum-size-warning", + "-Wl,--no-wchar-size-warning", + "-Wl,-wrap,malloc", + "-Wl,-wrap,free", + "-Wl,-wrap,realloc", + "-Wl,-wrap,rom_psk_CalcGTK", + "-Wl,-wrap,rom_psk_CalcPTK", + "-Wl,-wrap,CalcMIC", + "-Wl,-wrap,CheckMIC", + "-Wl,-wrap,aes_80211_encrypt", + "-Wl,-wrap,aes_80211_decrypt", + "-Wl,-wrap,DecGTK", + ], +) + +# Includes +env.Append( + CPPPATH=[ + # fmt: off + join(SDK_DIR, "project", "realtek_amebaz_va0_example", "inc"), + join(SDK_DIR, "component", "os", "freertos"), + join(SDK_DIR, "component", "os", "freertos", "freertos_v8.1.2", "Source", "include"), + join(SDK_DIR, "component", "os", "freertos", "freertos_v8.1.2", "Source", "portable", "GCC", "ARM_CM4F"), + join(SDK_DIR, "component", "os", "os_dep", "include"), + join(SDK_DIR, "component", "common", "api", "network", "include"), + join(SDK_DIR, "component", "common", "api"), + join(SDK_DIR, "component", "common", "api", "at_cmd"), + join(SDK_DIR, "component", "common", "api", "platform"), + join(SDK_DIR, "component", "common", "api", "wifi"), + join(SDK_DIR, "component", "common", "api", "wifi", "rtw_wpa_supplicant", "src"), + join(SDK_DIR, "component", "common", "api", "wifi", "rtw_wowlan"), + join(SDK_DIR, "component", "common", "api", "wifi", "rtw_wpa_supplicant", "wpa_supplicant"), + join(SDK_DIR, "component", "common", "application"), + join(SDK_DIR, "component", "common", "application", "mqtt", "MQTTClient"), + join(SDK_DIR, "component", "common", "application", "mqtt", "MQTTPacket"), + join(SDK_DIR, "component", "common", "example"), + join(SDK_DIR, "component", "common", "example", "wlan_fast_connect"), + join(SDK_DIR, "component", "common", "drivers", "modules"), + join(SDK_DIR, "component", "common", "drivers", "sdio", "realtek", "sdio_host", "inc"), + join(SDK_DIR, "component", "common", "drivers", "inic", "rtl8711b"), + join(SDK_DIR, "component", "common", "drivers", "usb_class", "device"), + join(SDK_DIR, "component", "common", "drivers", "usb_class", "device", "class"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "include"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "src", "osdep"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "src", "hci"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "src", "hal"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "src", "hal", "rtl8711b"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "src", "hal", "OUTSRC"), + join(SDK_DIR, "component", "common", "drivers", "wlan", "realtek", "wlan_ram_map", "rom"), + join(SDK_DIR, "component", "common", "file_system"), + join(SDK_DIR, "component", "common", "network"), + join(SDK_DIR, "component", "common", "network", "lwip", "lwip_v1.4.1", "port", "realtek", "freertos"), + join(SDK_DIR, "component", "common", "network", "lwip", "lwip_v1.4.1", "src", "include"), + join(SDK_DIR, "component", "common", "network", "lwip", "lwip_v1.4.1", "src", "include", "lwip"), + join(SDK_DIR, "component", "common", "network", "lwip", "lwip_v1.4.1", "src", "include", "ipv4"), + join(SDK_DIR, "component", "common", "network", "lwip", "lwip_v1.4.1", "port", "realtek"), + join(SDK_DIR, "component", "common", "network", "ssl", "polarssl-1.3.8", "include"), + join(SDK_DIR, "component", "common", "network", "ssl", "ssl_ram_map", "rom"), + join(SDK_DIR, "component", "common", "test"), + join(SDK_DIR, "component", "common", "utilities"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "app", "monitor", "include"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "cmsis"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "cmsis", "device"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "fwlib"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "fwlib", "include"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "fwlib", "ram_lib", "crypto"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "fwlib", "rom_lib"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "swlib", "os_dep", "include"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "swlib", "std_lib", "include"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "swlib", "std_lib", "libc", "include"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "swlib", "std_lib", "libc", "rom", "string"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "swlib", "std_lib", "libgcc", "rtl8195a", "include"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "swlib", "rtl_lib"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "misc"), + join(SDK_DIR, "component", "soc", "realtek", "8711b", "misc", "os"), + join(SDK_DIR, "component", "common", "mbed", "api"), + join(SDK_DIR, "component", "common", "mbed", "hal"), + join(SDK_DIR, "component", "common", "mbed", "hal_ext"), + join(SDK_DIR, "component", "common", "mbed", "targets", "cmsis"), + join(SDK_DIR, "component", "common", "mbed", "targets", "hal", "rtl8711b"), + join(SDK_DIR, "project", "realtek_8195a_gen_project", "rtl8195a", "sw", "lib", "sw_lib", "mbed", "api"), + join(SDK_DIR, "component", "common", "application", "mqtt", "MQTTClient"), + join(SDK_DIR, "component", "common", "network", "websocket"), + # fmt: on + ], +) + +# Sources - from SDK project/realtek_amebaz_va0_example/GCC-RELEASE/application.mk +# - "console" is disabled as it introduces build error, and is generally useless +# - "utilities example" are also not really needed +sources = [ + # fmt: off + # app uart_adapter + "+<" + SDK_DIR +"/component/common/application/uart_adapter/uart_adapter.c>", + # cmsis + "+<" + SDK_DIR +"/component/soc/realtek/8711b/cmsis/device/app_start.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/fwlib/ram_lib/startup.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/cmsis/device/system_8195a.c>", + # console + # "+<" + SDK_DIR +"/component/common/api/at_cmd/atcmd_lwip.c>", + # "+<" + SDK_DIR +"/component/common/api/at_cmd/atcmd_sys.c>", + # "+<" + SDK_DIR +"/component/common/api/at_cmd/atcmd_wifi.c>", + # "+<" + SDK_DIR +"/component/common/api/at_cmd/log_service.c>", + # "+<" + SDK_DIR +"/component/soc/realtek/8711b/app/monitor/ram/low_level_io.c>", + # "+<" + SDK_DIR +"/component/soc/realtek/8711b/app/monitor/ram/monitor.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/app/monitor/ram/rtl_consol.c>", + # "+<" + SDK_DIR +"/component/soc/realtek/8711b/app/monitor/ram/rtl_trace.c>", + # network api wifi rtw_wpa_supplicant + "+<" + SDK_DIR +"/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c>", + "+<" + SDK_DIR +"/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_p2p_config.c>", + "+<" + SDK_DIR +"/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c>", + # network api wifi + "+<" + SDK_DIR +"/component/common/api/wifi/wifi_conf.c>", + "+<" + SDK_DIR +"/component/common/api/wifi/wifi_ind.c>", + "+<" + SDK_DIR +"/component/common/api/wifi/wifi_promisc.c>", + "+<" + SDK_DIR +"/component/common/api/wifi/wifi_simple_config.c>", + "+<" + SDK_DIR +"/component/common/api/wifi/wifi_util.c>", + # network api + "+<" + SDK_DIR +"/component/common/api/lwip_netconf.c>", + # network app + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTClient/MQTTClient.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTConnectClient.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTConnectServer.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTDeserializePublish.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTFormat.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTClient/MQTTFreertos.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTPacket.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTSerializePublish.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTSubscribeClient.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTSubscribeServer.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTUnsubscribeClient.c>", + "+<" + SDK_DIR +"/component/common/application/mqtt/MQTTPacket/MQTTUnsubscribeServer.c>", + "+<" + SDK_DIR +"/component/common/api/network/src/ping_test.c>", + "+<" + SDK_DIR +"/component/common/utilities/ssl_client.c>", + "+<" + SDK_DIR +"/component/common/utilities/tcptest.c>", + "+<" + SDK_DIR +"/component/common/api/network/src/wlan_network.c>", + # network lwip api + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/api_lib.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/api_msg.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/err.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/netbuf.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/netdb.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/netifapi.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/sockets.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/api/tcpip.c>", + # network lwip core ipv4 + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/autoip.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/icmp.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/igmp.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/inet.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/inet_chksum.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip_addr.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/ipv4/ip_frag.c>", + # network lwip core + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/def.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/dhcp.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/dns.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/init.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/lwip_timers.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/mem.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/memp.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/netif.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/pbuf.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/raw.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/stats.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/sys.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/tcp.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/tcp_in.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/tcp_out.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/core/udp.c>", + # network lwip netif + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/src/netif/etharp.c>", + # network lwip port + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/ethernetif.c>", + "+<" + SDK_DIR +"/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c>", + "+<" + SDK_DIR +"/component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/sys_arch.c>", + # network - wsclient + "+<" + SDK_DIR +"/component/common/network/websocket/wsclient_tls.c>", + # network lwip + "+<" + SDK_DIR +"/component/common/network/dhcp/dhcps.c>", + "+<" + SDK_DIR +"/component/common/network/sntp/sntp.c>", + # network polarssl polarssl + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/aesni.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/blowfish.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/camellia.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ccm.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/certs.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/cipher.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/cipher_wrap.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/debug.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ecp_ram.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/entropy.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/entropy_poll.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/error.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/gcm.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/havege.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/md2.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/md4.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/memory_buffer_alloc.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/net.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/padlock.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/pbkdf2.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/pkcs11.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/pkcs12.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/pkcs5.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/pkparse.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/platform.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ripemd160.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ssl_cache.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ssl_ciphersuites.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ssl_cli.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ssl_srv.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/ssl_tls.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/threading.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/timing.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/version.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/version_features.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509_create.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509_crl.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509_crt.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509_csr.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509write_crt.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/x509write_csr.c>", + "+<" + SDK_DIR +"/component/common/network/ssl/polarssl-1.3.8/library/xtea.c>", + # network polarssl ssl_ram_map + "+<" + SDK_DIR +"/component/common/network/ssl/ssl_ram_map/ssl_ram_map.c>", + # os freertos portable + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/portable/MemMang/heap_5.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/portable/GCC/ARM_CM4F/port.c>", + # "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/portable/IAR/ARM_CM4F/portasm.s>", + # os freertos + "+<" + SDK_DIR +"/component/os/freertos/cmsis_os.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/croutine.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/event_groups.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_service.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/list.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/queue.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/tasks.c>", + "+<" + SDK_DIR +"/component/os/freertos/freertos_v8.1.2/Source/timers.c>", + # os osdep + "+<" + SDK_DIR +"/component/os/os_dep/device_lock.c>", + "+<" + SDK_DIR +"/component/os/os_dep/osdep_service.c>", + # peripheral api + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/analogin_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/dma_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/efuse_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/flash_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/gpio_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/gpio_irq_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/i2c_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/i2s_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/nfc_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/pinmap.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/pinmap_common.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/port_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/pwmout_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/rtc_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/serial_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/sleep.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/spi_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/sys_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/timer_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/us_ticker.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/us_ticker_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/wait_api.c>", + "+<" + SDK_DIR +"/component/common/mbed/targets/hal/rtl8711b/wdt_api.c>", + # peripheral rtl8710b + "+<" + SDK_DIR +"/component/soc/realtek/8711b/fwlib/ram_lib/rtl8710b_dsleepcfg.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/fwlib/ram_lib/rtl8710b_dstandbycfg.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/fwlib/ram_lib/rtl8710b_intfcfg.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/misc/rtl8710b_ota.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/fwlib/ram_lib/rtl8710b_pinmapcfg.c>", + "+<" + SDK_DIR +"/component/soc/realtek/8711b/fwlib/ram_lib/rtl8710b_sleepcfg.c>", + # utilities example + # "+<" + SDK_DIR +"/component/common/example/bcast/example_bcast.c>", + # "+<" + SDK_DIR +"/component/common/example/dct/example_dct.c>", + # "+<" + SDK_DIR +"/component/common/example/eap/example_eap.c>", + # "+<" + SDK_DIR +"/component/common/example/example_entry.c>", + # "+<" + SDK_DIR +"/component/common/example/get_beacon_frame/example_get_beacon_frame.c>", + # "+<" + SDK_DIR +"/component/common/example/high_load_memory_use/example_high_load_memory_use.c>", + # "+<" + SDK_DIR +"/component/common/example/http_client/example_http_client.c>", + # "+<" + SDK_DIR +"/component/common/example/httpc/example_httpc.c>", + # "+<" + SDK_DIR +"/component/common/example/httpd/example_httpd.c>", + # "+<" + SDK_DIR +"/component/common/example/http_download/example_http_download.c>", + # "+<" + SDK_DIR +"/component/common/example/mcast/example_mcast.c>", + # "+<" + SDK_DIR +"/component/common/example/mdns/example_mdns.c>", + # "+<" + SDK_DIR +"/component/common/example/mqtt/example_mqtt.c>", + # "+<" + SDK_DIR +"/component/common/example/nonblock_connect/example_nonblock_connect.c>", + # "+<" + SDK_DIR +"/component/common/example/rarp/example_rarp.c>", + # "+<" + SDK_DIR +"/component/common/example/sntp_showtime/example_sntp_showtime.c>", + # "+<" + SDK_DIR +"/component/common/example/socket_select/example_socket_select.c>", + # "+<" + SDK_DIR +"/component/common/example/socket_tcp_trx/example_socket_tcp_trx_1.c>", + # "+<" + SDK_DIR +"/component/common/example/socket_tcp_trx/example_socket_tcp_trx_2.c>", + # "+<" + SDK_DIR +"/component/common/example/ssl_download/example_ssl_download.c>", + # "+<" + SDK_DIR +"/component/common/example/ssl_server/example_ssl_server.c>", + # "+<" + SDK_DIR +"/component/common/example/tcp_keepalive/example_tcp_keepalive.c>", + # "+<" + SDK_DIR +"/component/common/example/uart_atcmd/example_uart_atcmd.c>", + # "+<" + SDK_DIR +"/component/common/example/wifi_mac_monitor/example_wifi_mac_monitor.c>", + # "+<" + SDK_DIR +"/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c>", + # "+<" + SDK_DIR +"/component/common/example/wlan_scenario/example_wlan_scenario.c>", + # "+<" + SDK_DIR +"/component/common/example/websocket/example_wsclient.c>", + # "+<" + SDK_DIR +"/component/common/example/xml/example_xml.c>", + # "+<" + SDK_DIR +"/component/common/example/uart_firmware_update/example_uart_update.c>", + # network - httpc + "+<" + SDK_DIR +"/component/common/network/httpc/httpc_tls.c>", + # network - httpd + "+<" + SDK_DIR +"/component/common/network/httpd/httpd_tls.c>", + # utilities + "+<" + SDK_DIR +"/component/common/utilities/cJSON.c>", + "+<" + SDK_DIR +"/component/common/utilities/http_client.c>", + "+<" + SDK_DIR +"/component/common/utilities/uart_socket.c>", + "+<" + SDK_DIR +"/component/common/utilities/xml.c>", + # fmt: on +] + +# Libs & linker config +env.Append( + LIBPATH=[ + # fmt: off + join(SDK_DIR, "component", "soc", "realtek", "8711b", "misc", "bsp", "lib", "common", "GCC"), + # linker script path + join(SDK_DIR, "project", "realtek_amebaz_va0_example", "GCC-RELEASE"), + # fmt: on + ], + LIBS=[ + "_platform", + "_wlan", + "_wps", + "_p2p", + "_dct", + "_rtlstd", + "m", + "c", + "nosys", + "gcc", + "_websocket", + "_http", + "_mdns", + ], +) +env.Replace( + LDSCRIPT_PATH=[ + # fmt: off + join(SDK_DIR, "project", "realtek_amebaz_va0_example", "GCC-RELEASE", "rlx8711B-symbol-v02-img2_xip1.ld"), + # fmt: on + ], +) + +# Misc options +env.Replace( + SIZEPROGREGEXP=r"^(?:\.ram_image2\.entry|\.ram_image2\.text|\.ram_image2\.data|\.xip_image2\.text)\s+([0-9]+).*", + SIZEDATAREGEXP=r"^(?:\.ram_image2\.entry|\.ram_image2\.data|\.ram_image2\.bss|\.ram_image2\.skb\.bss)\s+([0-9]+).*", + SIZECHECKCMD="$SIZETOOL -A -d $SOURCES", + SIZEPRINTCMD="$SIZETOOL -B -d $SOURCES", +) + +# Image conversion +def pick_tool(target, source, env): + sections = [ + "__ram_image2_text_start__", + "__ram_image2_text_end__", + "__xip_image2_start__", + ] + addrs = [None] * len(sections) + with open(env.subst("${BUILD_DIR}/${PROGNAME}.nmap")) as f: + for line in f: + for i, section in enumerate(sections): + if section not in line: + continue + addrs[i] = line.split()[0] + files = [ + join("$BUILD_DIR", "ram_2.r.bin"), # RAM image with padding + join("$BUILD_DIR", "ram_2.bin"), # RAM image, stripped + join("$BUILD_DIR", "ram_2.p.bin"), # RAM image, stripped, with header + join("$BUILD_DIR", "xip_image2.bin"), # raw firmware image + join("$BUILD_DIR", "xip_image2.p.bin"), # firmware with header + ] + commands = [ + f"$PICK 0x{addrs[0]} 0x{addrs[1]} {files[0]} {files[1]} raw", + f"$PICK 0x{addrs[0]} 0x{addrs[1]} {files[1]} {files[2]}", + f"$PICK 0x{addrs[2]} 0x{addrs[2]} {files[3]} {files[4]}", + ] + for command in commands: + status = env.Execute("@" + command + " > " + join("$BUILD_DIR", "pick.txt")) + if status: + return status + + +def concat_xip_ram(target, source, env): + with open(env.subst("${BUILD_DIR}/xip_image2.p.bin"), "rb") as f: + xip = f.read() + with open(env.subst("${BUILD_DIR}/ram_2.p.bin"), "rb") as f: + ram = f.read() + with open(env.subst("${BUILD_DIR}/${IMG_FW}"), "wb") as f: + f.write(xip) + f.write(ram) + + +def checksum_img(target, source, env): + source = join("$BUILD_DIR", "$IMG_FW") + status = env.Execute(f"@$CHECKSUM {source}") + if status: + return status + + +def package_ota(target, source, env): + source = join("$BUILD_DIR", "$IMG_FW") + target = join("$BUILD_DIR", "$IMG_OTA") + status = env.Execute( + f"@$OTA {source} {ota1_offset} {source} {ota2_offset} 0x20170111 {target}" + ) + if status: + return status + + +env.Append( + BUILDERS=dict( + BinToObj=Builder( + action=" ".join( + [ + "$OBJCOPY", + "-I binary", + "-O elf32-littlearm", + "-B arm", + "$SOURCE", + "$TARGET", + ], + ), + ) + ), +) +commands = [ + ( + "${PROGNAME}.nmap", + [ + "$NM", + "$SOURCE", + "> $BIN", + ], + ), + ( + "ram_2.r.bin", + [ + "$OBJCOPY", + "-j .ram_image2.entry", + "-j .ram_image2.data", + "-j .ram_image2.bss", + "-j .ram_image2.skb.bss", + "-j .ram_heap.data", + "-O binary", + "$SOURCE", + "$BIN", + ], + ), + ( + "xip_image2.bin", + [ + "$OBJCOPY", + "-j .xip_image2.text", + "-O binary", + "$SOURCE", + "$BIN", + ], + ), + ( + "rdp.bin", + [ + "$OBJCOPY", + "-j .ram_rdp.text", + "-O binary", + "$SOURCE", + "$BIN", + ], + ), +] +actions = [ + env.VerboseAction( + " ".join(command).replace("$BIN", join("$BUILD_DIR", target)), + f"Generating {target}", + ) + for target, command in commands +] +actions.append(env.VerboseAction(pick_tool, "Wrapping binary images")) +actions.append(env.VerboseAction(concat_xip_ram, "Packaging firmware image - $IMG_FW")) +# actions.append(env.VerboseAction(checksum_img, "Generating checksum")) +actions.append(env.VerboseAction(package_ota, "Packaging OTA image - $IMG_OTA")) +actions.append(env.VerboseAction("true", f"- OTA1 flash offset: {ota1_offset}")) +actions.append(env.VerboseAction("true", f"- OTA2 flash offset: {ota2_offset}")) + +# SDK library target +target_sdk = env.BuildLibrary(join("$BUILD_DIR", "SDK"), SDK_DIR, sources) +target_boot = env.StaticLibrary( + join("$BUILD_DIR", "boot_all"), + env.BinToObj( + join("$BUILD_DIR", "boot_all.o"), + # fmt: off + join(SDK_DIR, "component", "soc", "realtek", "8711b", "misc", "bsp", "image", "boot_all.bin"), + # fmt: on + ), +) +env.Prepend(LIBS=[target_sdk, target_boot]) + +# Main firmware binary builder +env.Append( + BUILDERS=dict( + DumpFirmwareBinary=Builder(action=actions), + ), +)