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