xref: /btstack/port/wiced-h4/create_examples.py (revision b4d037a24c23172b3e590c6d8da437b3d0863c16)
16ccd8248SMilanka Ringwald#!/usr/bin/env python3
286a86a65SMatthias Ringwald#
386a86a65SMatthias Ringwald# Create project files for all BTstack embedded examples in WICED/apps/btstack
486a86a65SMatthias Ringwald
586a86a65SMatthias Ringwaldimport os
686a86a65SMatthias Ringwaldimport shutil
786a86a65SMatthias Ringwaldimport sys
886a86a65SMatthias Ringwaldimport time
986a86a65SMatthias Ringwaldimport subprocess
1086a86a65SMatthias Ringwald
1186a86a65SMatthias Ringwaldmk_template = '''#
1286a86a65SMatthias Ringwald# BTstack example 'EXAMPLE' for WICED port
1386a86a65SMatthias Ringwald#
1486a86a65SMatthias Ringwald# Generated by TOOL
1586a86a65SMatthias Ringwald# On DATE
1686a86a65SMatthias Ringwald
1786a86a65SMatthias RingwaldNAME := EXAMPLE
1886a86a65SMatthias Ringwald
1986a86a65SMatthias RingwaldGLOBAL_INCLUDES += .
2086a86a65SMatthias Ringwald
21e0ba407fSMatthias Ringwald# Replace Linefeed with -> CRLF
22e0ba407fSMatthias RingwaldGLOBAL_DEFINES += CRLF_STDIO_REPLACEMENT
23e0ba407fSMatthias Ringwald
2486a86a65SMatthias Ringwald$(NAME)_SOURCES := ../../../libraries/btstack/example/EXAMPLE.c
250a11ef38SMatthias Ringwald$(NAME)_COMPONENTS += btstack/port/wiced-h4
2620334a06SMatthias Ringwald
27b25ef1bbSMatthias Ringwald# micro-ecc of WICED tree used for SECP256R1 in LE Secure Connections
28b25ef1bbSMatthias RingwaldMICRO_ECC := MICRO_ECC_COMPONENT
29b25ef1bbSMatthias Ringwald
30ab379a4aSMatthias Ringwald# Additional CFLAGS for BTstack Component compilation
31ab379a4aSMatthias RingwaldBTSTACK_CFLAGS += ADDITIONAL_CFLAGS
32ab379a4aSMatthias Ringwald
33ab379a4aSMatthias Ringwald# Name of Firmware file
3420334a06SMatthias RingwaldBT_FIRMWARE_FILE := BLUETOOTH_FIRMWARE_FILE
3586a86a65SMatthias Ringwald'''
3686a86a65SMatthias Ringwald
3786a86a65SMatthias Ringwaldgatt_update_template = '''#!/bin/sh
3886a86a65SMatthias RingwaldDIR=`dirname $0`
3986a86a65SMatthias RingwaldBTSTACK_ROOT=$DIR/../../../libraries/btstack
4086a86a65SMatthias Ringwaldecho "Creating EXAMPLE.h from EXAMPLE.gatt"
4186a86a65SMatthias Ringwald$BTSTACK_ROOT/tool/compile_gatt.py $BTSTACK_ROOT/example/EXAMPLE.gatt $DIR/EXAMPLE.h
4286a86a65SMatthias Ringwald'''
4386a86a65SMatthias Ringwald
4486a86a65SMatthias Ringwald# get script path
4586a86a65SMatthias Ringwaldscript_path = os.path.abspath(os.path.dirname(sys.argv[0]))
4686a86a65SMatthias Ringwald
4786a86a65SMatthias Ringwald# validate WICED root by reading version.txt
4886a86a65SMatthias Ringwaldwiced_root = script_path + "/../../../../"
4920334a06SMatthias Ringwaldwiced_version_txt = ""
5086a86a65SMatthias Ringwaldtry:
5186a86a65SMatthias Ringwald    with open(wiced_root + 'version.txt', 'r') as fin:
5220334a06SMatthias Ringwald        wiced_version_txt = fin.read()  # Read the contents of the file into memory.
5386a86a65SMatthias Ringwaldexcept:
5486a86a65SMatthias Ringwald    pass
5520334a06SMatthias Ringwaldif not "WICED Version" in wiced_version_txt:
5686a86a65SMatthias Ringwald    print("Cannot find WICED root. Make sure BTstack is checked out in WICED-SDK-X/libraries")
5786a86a65SMatthias Ringwald    sys.exit(1)
5886a86a65SMatthias Ringwald
5920334a06SMatthias Ringwald# check for 5.2+ version syntax
6020334a06SMatthias Ringwaldif 'Wiced_' in wiced_version_txt:
6120334a06SMatthias Ringwald    wiced_version_string = (wiced_version_txt.split()[2]).split('_')[1]
6220334a06SMatthias Ringwald    wiced_version_major = int(wiced_version_string.split('.')[0])
6320334a06SMatthias Ringwald    wiced_version_minor = int(wiced_version_string.split('.')[1])
6420334a06SMatthias Ringwaldelse:
6520334a06SMatthias Ringwald    wiced_version = wiced_version_txt.split()[2]
6620334a06SMatthias Ringwald    wiced_version_major = int(wiced_version.split('.')[0])
6720334a06SMatthias Ringwald    wiced_version_minor = int(wiced_version.split('.')[1])
6820334a06SMatthias Ringwald
6920334a06SMatthias Ringwaldwiced_version = "%u.%u" % (wiced_version_major, wiced_version_minor)
7020334a06SMatthias Ringwald
7186a86a65SMatthias Ringwald# show WICED version
72b25ef1bbSMatthias Ringwaldprint("\nFound WICED SDK version: %s" % wiced_version)
7386a86a65SMatthias Ringwald
7486a86a65SMatthias Ringwaldadditional_cflags = ""
7586a86a65SMatthias Ringwaldif wiced_version < "3.4.0":
7686a86a65SMatthias Ringwald    print("Adding WICED_UART_READ_DOES_NOT_RETURN_BYTES_READ for SDK < 3.4.0")
7786a86a65SMatthias Ringwald    additional_cflags = "-DWICED_UART_READ_DOES_NOT_RETURN_BYTES_READ"
7886a86a65SMatthias Ringwald
7920334a06SMatthias Ringwald# NOTE: it would be more robust to check for files on disk
8020334a06SMatthias Ringwald
8120334a06SMatthias Ringwald# bluetooth firmware image name changed in 5.2
8220334a06SMatthias Ringwaldif wiced_version < "5.2":
8320334a06SMatthias Ringwald    bluetooth_firmware_file = 'bt_firmware_image.c'
8420334a06SMatthias Ringwaldelse:
8520334a06SMatthias Ringwald    bluetooth_firmware_file = 'bt_firmware_controller.c'
8620334a06SMatthias Ringwaldprint("Bluetooth Firmware name: %s" % bluetooth_firmware_file)
8786a86a65SMatthias Ringwald
88b25ef1bbSMatthias Ringwald# micro-ecc moved in 6.2 from libraries/crypto/micro-ecc to WICED/security/BESL/crypto_internal/micro-ecc
89b25ef1bbSMatthias Ringwaldif wiced_version < "6.2":
90b25ef1bbSMatthias Ringwald    micro_ecc_component = "crypto/micro-ecc"
91b25ef1bbSMatthias Ringwaldelse:
92b25ef1bbSMatthias Ringwald    micro_ecc_component = "BESL/crypto_internal/micro-ecc"
93b25ef1bbSMatthias Ringwaldprint("micro-ecc component: %s" % micro_ecc_component)
94b25ef1bbSMatthias Ringwald
9586a86a65SMatthias Ringwald# path to examples
9686a86a65SMatthias Ringwaldexamples_embedded = script_path + "/../../example/"
9786a86a65SMatthias Ringwald
9886a86a65SMatthias Ringwald# path to WICED/apps/btstack
9986a86a65SMatthias Ringwaldapps_btstack = wiced_root + "/apps/btstack/"
10086a86a65SMatthias Ringwald
101b25ef1bbSMatthias Ringwaldprint("\nCreating examples in apps/btstack:")
10286a86a65SMatthias Ringwald
10386a86a65SMatthias Ringwald# iterate over btstack examples
10486a86a65SMatthias Ringwaldfor file in os.listdir(examples_embedded):
10586a86a65SMatthias Ringwald    if not file.endswith(".c"):
10686a86a65SMatthias Ringwald        continue
107*b4d037a2SMatthias Ringwald    if file in ['panu_demo.c', 'ant_test.c', 'pan_lwip_http_server.c']:
10897dc5e69SMatthias Ringwald        continue
109*b4d037a2SMatthias Ringwald    if 'demo_util' in file:
110*b4d037a2SMatthias Ringwald        continue
111*b4d037a2SMatthias Ringwald
11286a86a65SMatthias Ringwald    example = file[:-2]
11386a86a65SMatthias Ringwald
11486a86a65SMatthias Ringwald    # create folder
11586a86a65SMatthias Ringwald    apps_folder = apps_btstack + example + "/"
11686a86a65SMatthias Ringwald    if not os.path.exists(apps_folder):
11786a86a65SMatthias Ringwald        os.makedirs(apps_folder)
11886a86a65SMatthias Ringwald
11986a86a65SMatthias Ringwald    # create .mk file
12086a86a65SMatthias Ringwald    with open(apps_folder + example + ".mk", "wt") as fout:
121b25ef1bbSMatthias Ringwald        fout.write(mk_template.replace("EXAMPLE", example)
122b25ef1bbSMatthias Ringwald            .replace("TOOL", script_path)
123b25ef1bbSMatthias Ringwald            .replace("ADDITIONAL_CFLAGS", additional_cflags)
124b25ef1bbSMatthias Ringwald            .replace("DATE",time.strftime("%c"))
125b25ef1bbSMatthias Ringwald            .replace('BLUETOOTH_FIRMWARE_FILE', bluetooth_firmware_file)
126b25ef1bbSMatthias Ringwald            .replace('MICRO_ECC_COMPONENT', micro_ecc_component))
12786a86a65SMatthias Ringwald
12886a86a65SMatthias Ringwald    # create update_gatt.sh if .gatt file is present
12986a86a65SMatthias Ringwald    gatt_path = examples_embedded + example + ".gatt"
13086a86a65SMatthias Ringwald    if os.path.exists(gatt_path):
13186a86a65SMatthias Ringwald        update_gatt_script = apps_folder + "update_gatt_db.sh"
13286a86a65SMatthias Ringwald        with open(update_gatt_script, "wt") as fout:
13386a86a65SMatthias Ringwald            fout.write(gatt_update_template.replace("EXAMPLE", example))
13486a86a65SMatthias Ringwald        os.chmod(update_gatt_script, 0o755)
13586a86a65SMatthias Ringwald        subprocess.call(update_gatt_script + "> /dev/null", shell=True)
13686a86a65SMatthias Ringwald        print("- %s including compiled GATT DB" % example)
13786a86a65SMatthias Ringwald    else:
13886a86a65SMatthias Ringwald        print("- %s" % example)
13986a86a65SMatthias Ringwald
140