diff --git a/.ci/before_install.sh b/.ci/before_install.sh
index a30637171..e589294eb 100644
--- a/.ci/before_install.sh
+++ b/.ci/before_install.sh
@@ -29,4 +29,5 @@ fi
pip install PrettyTable || die
pip install colorama || die
pip install configparser || die
+ pip install requests || die
}
diff --git a/.ci/build.py b/.ci/build.py
index 9ef8e4c09..f8ed46ddc 100644
--- a/.ci/build.py
+++ b/.ci/build.py
@@ -2,6 +2,7 @@
import json
import os
import sys
+import requests
from prettytable import PrettyTable
from colorama import Fore, Back, Style
from configparser import ConfigParser
@@ -374,14 +375,38 @@ def get_expected_result(expected_file, app_path, board, bd_ver):
return result
+def send_pull_request_comment(columns, results):
+ job = os.environ.get("NAME")
+ pr_number = os.environ.get("TRAVIS_PULL_REQUEST")
+ if all([job, pr_number]):
+ comment_job = "## " + job + "\n"
+ if len(results)>0:
+ head = "|".join(columns) + "\n"
+ table_format = "|".join(["---"]*len(columns)) + "\n"
+ table_head =head +table_format
+ comments = ""
+ comment = ""
+ for result in results:
+ for k in result:
+ comment += (k.replace(Fore.RED, "")).replace("\n", "
") +" |"
+ comment = comment.rstrip("|") + "\n"
+ comments += comment
+ comment_on_pull_request(comment_job + table_head + comments)
+ else:
+ print("WARNING:Only send pull request comment in travis ci!")
+
+ pass
+
+
def show_results(results, expected=None):
- columns = ['TOOLCHAIN', 'APP', "TOOLCHAIN_VER", 'CONF', 'PASS']
+ columns = ["TOOLCHAIN_VER", 'TOOLCHAIN', 'APP', 'CONF', 'PASS']
failed_pt = PrettyTable(columns)
failed_results = []
success_results = []
expected_results = None
success_pt = PrettyTable(columns)
expected_pt = PrettyTable(columns)
+
for result in results:
status = result.pop("status")
if status != 0:
@@ -398,6 +423,7 @@ def show_results(results, expected=None):
if expected is not None:
expected_results = failed_results
+ send_pull_request_comment(columns, expected_results)
for result in expected_results:
if len(result) > 0:
expected_pt.add_row(result)
@@ -413,6 +439,8 @@ def show_results(results, expected=None):
success_pt.add_row(result)
print Fore.GREEN + "Successfull results"
print success_pt
+
+
print Style.RESET_ALL
sys.stdout.flush()
@@ -427,6 +455,7 @@ def show_results(results, expected=None):
print Fore.RED + "Failed result:"
print failed_pt
+
print Style.RESET_ALL
sys.stdout.flush()
@@ -529,7 +558,7 @@ def build_makefiles_project(config):
diff_expected_differents[app_path] = copy.deepcopy(expected_different[app_path])
print "There are {} projects, and they are compiled for {} times".format(app_count, count)
- results_list = build_result_combine_tail(apps_results)
+ results_list = copy.deepcopy(build_result_combine_tail(apps_results))
show_results(results_list)
expected_differents_list = build_result_combine_tail(diff_expected_differents)
show_results(expected_differents_list, expected=True)
@@ -537,6 +566,23 @@ def build_makefiles_project(config):
return applications_failed, diff_expected_differents
+def comment_on_pull_request(comment):
+ pr_number = os.environ.get("TRAVIS_PULL_REQUEST")
+ slug = os.environ.get("TRAVIS_REPO_SLUG")
+ token = os.environ.get("GH_TOKEN")
+ request_config = [pr_number, slug, token, comment]
+ for i in range(len(request_config)):
+ if request_config[i] == "false":
+ request_config[i] = False
+ if all(request_config):
+ url = 'https://api.github.com/repos/{slug}/issues/{number}/comments'.format(
+ slug=slug, number=pr_number)
+ response = requests.post(url, data=json.dumps({'body': comment}),
+ headers={'Authorization': 'token ' + token})
+ print(">>>>Travis send pull request comment to {}, repsonse status code {}.".format(url, response.status_code))
+ return response.json()
+
+
def get_options_parser():
configs = dict()
toolchainlist = ["gnu", "mw"]
@@ -590,4 +636,6 @@ def get_options_parser():
else:
print "these applications failed with some configuration: "
print expected_differents.keys()
+ comment = "applications failed with some configuration: \n" + "\n".join(expected_differents.keys())
+ comment_on_pull_request(comment)
sys.exit(1)
diff --git a/.ci/deploy_doc.sh b/.ci/deploy_doc.sh
index 56ec1de55..7a78eb0ad 100644
--- a/.ci/deploy_doc.sh
+++ b/.ci/deploy_doc.sh
@@ -25,6 +25,13 @@ make html &> build_html.log || { tail -n 100 build_html.log ; die "Build sphinx
# Check if this is a pull request
if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then
echo "Don't push built docs to gh-pages for pull request "
+
+ make linkcheck -k 2>&1
+ COMMENT_CONTENT=$(sed 's/$/&
/g' build/linkcheck/output.txt)
+ COMMENT_HEAD="# Sphinx link check result \n***********************\n
" + COMMENT_TAIL="" + COMMENT="${COMMENT_HEAD}${COMMENT_CONTENT}${COMMENT_TAIL}" + bash -c "$COMMENTS" exit 0 fi diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0d607d259..2790c7064 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,6 @@ variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache" OSP_ROOT: "." TOOLCHAIN: "gnu" - CUR_CORE: "none" TOOLCHAIN_VER: "2017.09" EXPECTED: ".ci/expected.ini" PARALLEL: "" diff --git a/.travis.yml b/.travis.yml index c662abb45..7398f9ef4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,13 @@ env: "context": "travis-ci/$NAME", "target_url": "https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID" }\nDATA' + + COMMENT=none + COMMENTS=$'curl -so/dev/null --user "$EMBARC_BOT" --request POST + https://api.github.com/repos/$TRAVIS_REPO_SLUG/issues/$TRAVIS_PULL_REQUEST/comments + --data @- << DATA\n{ + "body": "$COMMENT" + }\nDATA' cache: pip: true @@ -28,7 +35,7 @@ branches: before_install: - bash .ci/before_install.sh - # setup git config + # setup git config - git config --global user.name "embARC Automated Bot" - git config --global user.email "Huaqi.Fang@synopsys.com" diff --git a/middleware/u8glib/csrc/u8g.h b/middleware/u8glib/csrc/u8g.h index 02205333b..9eb18f313 100644 --- a/middleware/u8glib/csrc/u8g.h +++ b/middleware/u8glib/csrc/u8g.h @@ -691,6 +691,7 @@ uint8_t u8g_com_msp430_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void uint8_t u8g_com_raspberrypi_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_rasperrypi_hw_spi.c */ uint8_t u8g_com_raspberrypi_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_raspberrypi_ssd_i2c.c */ +uint8_t u8g_com_embarc_ssd_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); uint8_t u8g_com_embarc_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); @@ -703,6 +704,7 @@ uint8_t u8g_com_embarc_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void U8G_COM_T6963 U8G_COM_FAST_PARALLEL U8G_COM_SSD_I2C + U8G_COM_SSD_SPI U8G_COM_UC_I2C defined(__18CXX) || defined(__PIC32MX) @@ -856,6 +858,17 @@ defined(__18CXX) || defined(__PIC32MX) #endif #endif +/* ==== HW SPI, embARC ====*/ +#if defined(PLATFORM_EMBARC) +#define U8G_COM_SSD_SPI u8g_com_embarc_ssd_spi_fn + +#ifndef U8G_COM_SSD_SPI +#define U8G_COM_SSD_SPI u8g_com_null_fn +#endif + +#endif + + #ifndef U8G_COM_UC_I2C #if defined(__AVR__) /* AVR variant can use the arduino version at the moment */ diff --git a/middleware/u8glib/csrc/u8g_com_embarc_ssd1306_spi.c b/middleware/u8glib/csrc/u8g_com_embarc_ssd1306_spi.c new file mode 100644 index 000000000..7ab1ecdda --- /dev/null +++ b/middleware/u8glib/csrc/u8g_com_embarc_ssd1306_spi.c @@ -0,0 +1,275 @@ +/* + + u8g.h + + Universal 8bit Graphics Library + + Copyright (c) 2011, olikraus@gmail.com + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ +/* + * Modified for port to ARC embARC platform + * by Wayne Ren wei.ren@synopsys.com, Synopsys, Inc. + */ + +#include "u8g.h" +#include "embARC.h" +#include "dev_gpio.h" +#include "ssd1306_app_config.h" + +#ifndef SSD1306_SPI_ID +#define SSD1306_SPI_ID 0 +#endif + +#ifndef SSD1306_SPI_CS +#define SSD1306_SPI_CS DEV_SPI_CS_LINE_1 +#endif + +#ifndef SSD1306_USE_CS_PIN + #define SSD1306_USE_CS_PIN 1 +#endif + +#if SSD1306_USE_CS_PIN +# ifndef SSD1306_CS_GPIO + #define SSD1306_CS_GPIO (DEV_GPIO_PORT_A) +# endif + +# ifndef SSD1306_CS_PIN + #define SSD1306_CS_PIN 24 +# endif +static void oled_ssd1306_chip_select(DEV_SPI* _oled_spi, bool select) +{ + static DEV_GPIO *oled_gpio_cs = NULL; + if(!oled_gpio_cs) { + oled_gpio_cs = gpio_get_dev(SSD1306_CS_GPIO); + if(oled_gpio_cs) { + oled_gpio_cs->gpio_open(1<