else:
hex = env.Command(name + '.hex', source, 'arm-none-eabi-objcopy -O binary $SOURCE $TARGET')
+#Currently supporting only megaADK build
+def __upload(env, binary):
+ if target_arch == 'avr':
+ protocol = __get_board_info(board, '.upload.protocol')
+ speed = __get_board_info(board, '.upload.speed')
+ port = '/dev/ttyACM0'
+ upload_cmd = arduino_home + '/hardware/tools/avr/bin/avrdude -C' + arduino_home +'/hardware/tools/avr/etc/avrdude.conf -p' \
+ + mcu + ' -c' + protocol + ' -P' + port + ' -b' + speed + ' -D -Uflash:w:' + binary + ':i'
+
+ print "Upload command: %s" %upload_cmd
+ install_cmd = env.Command('install_cmd', None, upload_cmd)
+ env.Default('install_cmd')
+
# Print the command line that to upload binary to the board
def __upload_help(env):
if target_arch == 'avr':
Help(help_vars.GenerateHelpText(env))
target_arch = env.get('TARGET_ARCH')
+
+# Verify that the arduino, time, red bear, and nordic libraries are
+# installed. If not, get them and install them.
+SConscript(env.get('SRC_DIR') + '/extlibs/arduino/SConscript')
arduino_home = env.get('ARDUINO_HOME')
-if not arduino_home:
- print '''
-************************************* Error ***********************************
-* Arduino root directory isn't set, you can set enviornment variable *
-* ARDUINO_HOME or add it in command line as: *
-* # scons ARDUINO_HOME=<path to arduino root directory> ... *
-*******************************************************************************
-'''
- Exit(1)
+print 'ARDUINO_HOME = ' + env.get('ARDUINO_HOME')
# Overwrite suffixes and prefixes
if env['HOST_OS'] == 'win32':
env.AddMethod(__import_lib, "ImportLib") #import arduino library
#env.AddMethod(__build_core, "BuildCore") #build arduino core
env.AddMethod(__create_bin, "CreateBin") #create binary files(.eep and .hex)
+env.AddMethod(__upload, "Upload") #Upload binary to board
env.AddMethod(__upload_help, "UploadHelp") #print the command line that to upload binary to the boardf
--- /dev/null
+##
+# Script to install (if they do not exist) the Arduino library, Time library,
+# Red Bear Library, and Nordic library.
+##
+
+import os, subprocess, struct
+import urllib2, urlparse
+import SCons.Errors
+import shutil
+
+Import('env')
+
+target_os = env.get('TARGET_OS')
+src_dir = env.get('SRC_DIR')
+
+SConscript(src_dir + '/build_common/tools/UnpackAll.py')
+SConscript(src_dir + '/build_common/external_libs.scons')
+
+# Download
+if target_os == 'arduino':
+ arduino_home = env.get('ARDUINO_HOME')
+ if not arduino_home:
+ print 'Creating ARDUINO_HOME for Arduino lib'
+ print '''
+ *******************************************************************************
+ * Arduino root directory isn't set, you can set enviornment variable *
+ * ARDUINO_HOME or add it in command line as follows (Only set if your *
+ * version has fixes applied as depicted below. Press ctrl+c now if you *
+ * wish to manually set ARDUINO_HOME.): *
+ * # scons ARDUINO_HOME=<path to arduino root directory> ... *
+ *******************************************************************************
+ '''
+ arduinolib_dir = src_dir + '/extlibs/arduino/arduino-1.5.8'
+
+ if not os.path.exists(arduinolib_dir):
+ from sys import platform as _platform
+ if _platform == "linux" or _platform == "linux2":
+ archType = 8 * struct.calcsize("P")
+ print 'On %s-bit machine.' % (archType)
+ if archType == 32:
+ arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-linux32.tgz'
+ arduinolib_url = 'http://arduino.cc/download.php?f=/arduino-1.5.8-linux32.tgz'
+ else:
+ arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-linux64.tgz'
+ arduinolib_url = 'http://arduino.cc/download.php?f=/arduino-1.5.8-linux64.tgz'
+ elif _platform == "darwin":
+ arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-macosx.zip'
+ arduinolib_url = 'http://arduino.cc/download.php?f=/arduino-1.5.8-macosx.zip'
+ elif _platform == "win32":
+ arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-windows.zip'
+ arduinolib_url = src_dir + 'http://arduino.cc/download.php?f=/arduino-1.5.8-windows.zip'
+
+ # If the zip file is not already present, download it
+ if not os.path.exists(arduinolib_zip_file):
+ arduinolib_zip = env.Download(arduinolib_zip_file, arduinolib_url)
+ else:
+ arduinolib_zip = arduinolib_zip_file
+
+ # Unzip the lib
+ print 'Unzipping arduino lib...'
+ env.UnpackAll(arduinolib_dir, arduinolib_zip)
+ print 'Unzipping arduino lib complete'
+
+ # Remove downloaded file
+ os.remove(arduinolib_zip_file)
+ else:
+ arduinolib_dir = env.get('ARDUINO_HOME')
+
+ timelib_dir = arduinolib_dir + '/libraries/Time'
+
+ if not os.path.exists(timelib_dir):
+ timelib_zip_file = src_dir + '/extlibs/arduino/Time.zip'
+ timelib_url = 'http://playground.arduino.cc/uploads/Code/Time.zip'
+ # Install Arduino Time library
+ # If the zip file is not already present, download it
+ os.mkdir(timelib_dir)
+ os.chdir(timelib_dir)
+ if not os.path.exists(timelib_zip_file):
+ timelib_zip = env.Download(timelib_zip_file, timelib_url)
+ else:
+ timelib_zip = timelib_zip_file
+
+ # Unzip the lib
+ print 'Unzipping Arduino Time lib...'
+ env.UnpackAll(timelib_dir + '/Time', timelib_zip)
+
+ # Apply patches to ARDUINO_HOME directory.
+ os.chdir(arduinolib_dir)
+ print 'Patching Arduino libraries...'
+ os.system("find ./libraries/Time/Time/DateStrings.cpp -type f -exec dos2unix {} \;")
+ os.system("patch -p1 < " + src_dir + "/resource/csdk/connectivity/lib/arduino/arduino_libraries.patch --directory=" + arduinolib_dir)
+
+ # Remove downloaded file
+ os.remove(timelib_zip_file)
+
+ redbearlib_dir = arduinolib_dir + '/libraries/RBL_nRF8001'
+
+ if not os.path.exists(redbearlib_dir):
+ redbearlib_zip_file = src_dir + '/extlibs/arduino/25643e7b1b7da3740406325a471e3faa4b948747.zip'
+ redbearlib_url = 'https://github.com/RedBearLab/nRF8001/archive/25643e7b1b7da3740406325a471e3faa4b948747.zip'
+ if not os.path.exists(redbearlib_zip_file):
+ redbearlib_zip = env.Download(redbearlib_zip_file, redbearlib_url)
+ else:
+ redbearlib_zip = redbearlib_zip_file
+
+ # Unzip the lib
+ print 'Unzipping Red Bear lib...'
+ os.chdir(arduinolib_dir + '/libraries')
+ env.UnpackAll(redbearlib_dir, redbearlib_zip)
+
+ # Because the way Red Bear lib is distributed... All Red Bear source files must be moved up a few directories.
+ shutil.move('nRF8001-25643e7b1b7da3740406325a471e3faa4b948747/Arduino/libraries/RBL_nRF8001/', '.')
+ shutil.rmtree('nRF8001-25643e7b1b7da3740406325a471e3faa4b948747')
+
+ # Apply Red Bear patches
+ print 'Patching Red Bear library...'
+ os.chdir(arduinolib_dir + '/libraries/RBL_nRF8001/')
+ os.system("find . -type f -exec dos2unix {} \;")
+ os.system("patch -p1 < " + src_dir + "/resource/csdk/connectivity/lib/arduino/RBL_nRF8001.patch")
+
+ # Remove downloaded file
+ os.remove(redbearlib_zip_file)
+
+ nordiclib_dir = arduinolib_dir + '/libraries/BLE'
+
+ if not os.path.exists(nordiclib_dir):
+ nordiclib_zip_file = src_dir + '/extlibs/arduino/ble-sdk-arduino-0.9.5.beta.zip'
+ nordiclib_url = 'https://github.com/NordicSemiconductor/ble-sdk-arduino/archive/0.9.5.beta.zip'
+ if not os.path.exists(nordiclib_zip_file):
+ nordiclib_zip = env.Download(nordiclib_zip_file, nordiclib_url)
+ else:
+ nordiclib_zip = nordiclib_zip_file
+
+ # Unzip the lib
+ print 'Unzipping Nordic lib...'
+ os.chdir(arduinolib_dir + '/libraries')
+ env.UnpackAll(nordiclib_dir, nordiclib_zip)
+
+ # Because the way Nordic lib is distributed... All Nordic source files must be moved up a few directories.
+ shutil.move('ble-sdk-arduino-0.9.5.beta/libraries/BLE/', '.')
+ shutil.rmtree('ble-sdk-arduino-0.9.5.beta')
+
+ # Remove downloaded file
+ os.remove(nordiclib_zip_file)
+
+# Set the ARDUINO_HOME
+env.Replace(ARDUINO_HOME = arduinolib_dir)
+print 'ARDUINO_HOME = ' + env.get('ARDUINO_HOME')