parent
1f0a5872c3
commit
3c6c2b7d55
5 changed files with 9 additions and 164 deletions
|
|
@ -36,7 +36,7 @@ BLEAdafruitSensor::BLEAdafruitSensor(BLEUuid service_uuid, BLEUuid data_uuid)
|
|||
_notify_cb = NULL;
|
||||
}
|
||||
|
||||
err_t BLEAdafruitSensor::_begin(int32_t ms)
|
||||
err_t BLEAdafruitSensor::_begin(int ms)
|
||||
{
|
||||
// Invoke base class begin()
|
||||
VERIFY_STATUS( BLEService::begin() );
|
||||
|
|
@ -59,19 +59,19 @@ err_t BLEAdafruitSensor::_begin(int32_t ms)
|
|||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
err_t BLEAdafruitSensor::begin(measure_callback_t fp, int32_t ms)
|
||||
err_t BLEAdafruitSensor::begin(measure_callback_t fp, int ms)
|
||||
{
|
||||
_measure_cb = fp;
|
||||
return _begin(ms);
|
||||
}
|
||||
|
||||
err_t BLEAdafruitSensor::begin(Adafruit_Sensor* sensor, int32_t ms)
|
||||
err_t BLEAdafruitSensor::begin(Adafruit_Sensor* sensor, int ms)
|
||||
{
|
||||
_sensor = sensor;
|
||||
return _begin(ms);
|
||||
}
|
||||
|
||||
void BLEAdafruitSensor::setPeriod(int32_t period_ms)
|
||||
void BLEAdafruitSensor::setPeriod(int period_ms)
|
||||
{
|
||||
_period.write32(period_ms);
|
||||
_update_timer(period_ms);
|
||||
|
|
|
|||
|
|
@ -30,17 +30,17 @@
|
|||
class BLEAdafruitSensor : public BLEService
|
||||
{
|
||||
public:
|
||||
static const int32_t DEFAULT_PERIOD = 1000;
|
||||
static const int DEFAULT_PERIOD = 1000;
|
||||
|
||||
typedef void (*notify_callback_t)(uint16_t conn_hdl, bool enabled);
|
||||
typedef uint16_t (*measure_callback_t )(uint8_t* buf, uint16_t bufsize);
|
||||
|
||||
BLEAdafruitSensor(BLEUuid service_uuid, BLEUuid data_uuid);
|
||||
|
||||
virtual err_t begin(measure_callback_t fp, int32_t ms = DEFAULT_PERIOD);
|
||||
virtual err_t begin(Adafruit_Sensor* sensor, int32_t ms = DEFAULT_PERIOD);
|
||||
virtual err_t begin(measure_callback_t fp, int ms = DEFAULT_PERIOD);
|
||||
virtual err_t begin(Adafruit_Sensor* sensor, int ms = DEFAULT_PERIOD);
|
||||
|
||||
void setPeriod(int32_t period_ms);
|
||||
void setPeriod(int period_ms);
|
||||
void setNotifyCallback(notify_callback_t fp);
|
||||
|
||||
protected:
|
||||
|
|
@ -54,7 +54,7 @@ class BLEAdafruitSensor : public BLEService
|
|||
|
||||
SoftwareTimer _timer;
|
||||
|
||||
err_t _begin(int32_t ms);
|
||||
err_t _begin(int ms);
|
||||
|
||||
virtual void _update_timer(int32_t ms);
|
||||
virtual void _measure_handler(void);
|
||||
|
|
|
|||
|
|
@ -564,11 +564,6 @@ uint16_t BLECharacteristic::write32(int num)
|
|||
return write32( (uint32_t) num );
|
||||
}
|
||||
|
||||
uint16_t BLECharacteristic::write32(int32_t num)
|
||||
{
|
||||
return write32( (uint32_t) num );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
/* READ
|
||||
*------------------------------------------------------------------*/
|
||||
|
|
|
|||
|
|
@ -129,7 +129,6 @@ class BLECharacteristic
|
|||
uint16_t write16 (uint16_t num);
|
||||
uint16_t write32 (uint32_t num);
|
||||
uint16_t write32 (int num);
|
||||
uint16_t write32 (int32_t num);
|
||||
|
||||
/*------------- Read -------------*/
|
||||
uint16_t read (void* buffer, uint16_t bufsize, uint16_t offset = 0);
|
||||
|
|
|
|||
|
|
@ -1,149 +0,0 @@
|
|||
import os
|
||||
import glob
|
||||
import sys
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
travis = False
|
||||
if "TRAVIS" in os.environ and os.environ["TRAVIS"] == "true":
|
||||
travis = True
|
||||
|
||||
all_warnings = False
|
||||
if "ALL_WARNINGS" in os.environ and os.environ["ALL_WARNINGS"] == "true":
|
||||
all_warnings = True
|
||||
|
||||
ENV_VARIABLE_NAME = 'VARIANT'
|
||||
|
||||
|
||||
exit_status = 0
|
||||
success_count = 0
|
||||
fail_count = 0
|
||||
|
||||
build_format = '| {:20} | {:30} | {:9} '
|
||||
build_separator = '-' * 78
|
||||
|
||||
variants_dict = {
|
||||
'feather52840': 'Feather nRF52840 Express',
|
||||
'cplaynrf52840': 'Circuit Playground Bluefruit Express',
|
||||
'itsybitsy52840': 'ItsyBitsy nRF52840 Express',
|
||||
'cluenrf52840': 'Clue nRF52840',
|
||||
'feather52832': 'Feather nRF52832'
|
||||
}
|
||||
|
||||
# STDERR receives output that starts with the following text, none of which should be considered a warning or error...
|
||||
output_to_ignore = (
|
||||
'Picked up JAVA_TOOL_OPTIONS:',
|
||||
'Loading configuration...',
|
||||
'Initializing packages...',
|
||||
'Preparing boards...',
|
||||
'Verifying...',
|
||||
)
|
||||
|
||||
def errorOutputFilter(line):
|
||||
if len(line) == 0:
|
||||
return False
|
||||
if line.isspace(): # Note: empty string does not match here!
|
||||
return False
|
||||
if line.startswith(output_to_ignore): # alternatively, can trim() each line, but that would create lots of short-lived strings...
|
||||
return False
|
||||
# TODO: additional items to remove?
|
||||
return True
|
||||
|
||||
|
||||
def build_examples(variant):
|
||||
global exit_status, success_count, fail_count, build_format, build_separator
|
||||
|
||||
print('\n')
|
||||
print(build_separator)
|
||||
print('| {:^74} |'.format(variants_dict[variant]))
|
||||
print(build_separator)
|
||||
print((build_format + '| {:6} |').format('Library', 'Example', 'Result', 'Time'))
|
||||
print(build_separator)
|
||||
subprocess.run("arduino --board adafruit:nrf52:{}:softdevice={},debug=l0 --save-prefs".format(variant, 's140v6' if variant != 'feather52832' else 's132v6'), shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
if all_warnings:
|
||||
subprocess.run("arduino --pref 'compiler.warning_level=all' --save-prefs", shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
for sketch in glob.iglob('libraries/**/*.ino', recursive=True):
|
||||
start_time = time.monotonic()
|
||||
|
||||
# skip if example contains: ".skip" or ".skip.variant"
|
||||
# however ".build.variant" file can overwrite ".skip", used to build a specific variant only
|
||||
sketchdir = os.path.dirname(sketch)
|
||||
if ( (os.path.exists(sketchdir + '/.skip') or os.path.exists(sketchdir + '/.skip.' + variant)) and
|
||||
not os.path.exists(sketchdir + '/.build.' + variant)):
|
||||
success = "skipped"
|
||||
else:
|
||||
# TODO - preferably, would have STDERR show up in **both** STDOUT and STDERR.
|
||||
# preferably, would use Python logging handler to get both distinct outputs and one merged output
|
||||
# for now, split STDERR when building with all warnings enabled, so can detect warning/error output.
|
||||
if all_warnings:
|
||||
build_result = subprocess.run("arduino --verify {}".format(sketch), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
else:
|
||||
build_result = subprocess.run("arduino --verify {}".format(sketch), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
# get stderr into a form where len(warningLines) indicates a true warning was output to stderr
|
||||
warningLines = [];
|
||||
if all_warnings and build_result.stderr:
|
||||
tmpWarningLines = build_result.stderr.decode("utf-8").splitlines()
|
||||
warningLines = list(filter(errorOutputFilter, (tmpWarningLines)))
|
||||
|
||||
if build_result.returncode != 0:
|
||||
exit_status = build_result.returncode
|
||||
success = "\033[31mfailed\033[0m "
|
||||
fail_count += 1
|
||||
elif len(warningLines) != 0:
|
||||
exit_status = -1
|
||||
success = "\033[31mwarnings\033[0m "
|
||||
fail_count += 1
|
||||
else:
|
||||
success = "\033[32msucceeded\033[0m"
|
||||
success_count += 1
|
||||
|
||||
build_duration = time.monotonic() - start_time
|
||||
|
||||
if travis:
|
||||
print('travis_fold:start:build-{}\\r'.format(sketch))
|
||||
|
||||
print((build_format + '| {:5.2f}s |').format(sketch.split(os.path.sep)[1], os.path.basename(sketch), success, build_duration))
|
||||
|
||||
if success != "skipped":
|
||||
if build_result.returncode != 0:
|
||||
print(build_result.stdout.decode("utf-8"))
|
||||
if (build_result.stderr):
|
||||
print(build_result.stderr.decode("utf-8"))
|
||||
if len(warningLines) != 0:
|
||||
for line in warningLines:
|
||||
print(line)
|
||||
|
||||
if travis:
|
||||
print('travis_fold:end:build-{}\\r'.format(sketch))
|
||||
|
||||
|
||||
build_time = time.monotonic()
|
||||
|
||||
|
||||
# build only one variant if the environment variable is specified
|
||||
if (ENV_VARIABLE_NAME in os.environ):
|
||||
variant = os.environ.get(ENV_VARIABLE_NAME)
|
||||
# only use the environment variable if the variant exists in the dictionary
|
||||
if (variant in variants_dict):
|
||||
build_examples(variant)
|
||||
else:
|
||||
print('\033[31INTERNAL ERR\033[0m - invalid variant name "{}"'.format(variant))
|
||||
fail_count += 1
|
||||
exit_status = -1
|
||||
|
||||
else: # no environment variable specified, so build all variants
|
||||
for var in variants_dict:
|
||||
build_examples(var)
|
||||
|
||||
|
||||
print(build_separator)
|
||||
build_time = time.monotonic() - build_time
|
||||
print("Build Summary: {} \033[32msucceeded\033[0m, {} \033[31mfailed\033[0m and took {:.2f}s".format(success_count, fail_count, build_time))
|
||||
print(build_separator)
|
||||
|
||||
sys.exit(exit_status)
|
||||
Loading…
Reference in a new issue