diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 4fb657b2..5b15da20 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,3 +1,3 @@ [bumpversion] tag_name = rc/v{new_version} -current_version = 1.2.14 +current_version = 1.2.15 diff --git a/.github/workflows/python-integration-test.yml b/.github/workflows/python-integration-test.yml deleted file mode 100644 index 55e19231..00000000 --- a/.github/workflows/python-integration-test.yml +++ /dev/null @@ -1,50 +0,0 @@ -# This workflow will install Python dependencies, run tests using PyTest. - -name: PyTest Integration Test - -on: - push: - branches: - - 'dev' - pull_request: - branches: - - 'dev' - -jobs: - test: - name: Integration Tests - runs-on: [self-hosted, linux, ARM64, integration] - strategy: - fail-fast: false - matrix: - python-version: ["3.9"] - - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Install Dependencies - run: | - python -m pip install --upgrade pip - python -m venv venv_test - source venv_test/bin/activate - python -m pip install pytest - if [ -f requirements_test.txt ]; then pip install -r requirements_test.txt; fi - - name: Test with pytest - run: | - source venv_test/bin/activate - python -m pytest ./src/test_edgepi/integration_tests - # python -m pytest ../tests/integration_tests --cov --cov-report=xml - # - name: Code Coverage Summary Report - # uses: irongut/CodeCoverageSummary@v1.2.0 - # with: - # filename: test_cov/coverage.xml - # badge: true - # format: markdown - # hide_complexity: true - # indicators: true - # output: both - # - name: Add Coverage PR Comment - # uses: marocchino/sticky-pull-request-comment@v2 - # with: - # recreate: true - # path: code-coverage-results.md diff --git a/pytest.ini b/pytest.ini index 94e3436f..73fc10dc 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,6 +1,6 @@ [pytest] ; faulthandler_timeout=5 -; log_cli=TRUE +log_cli=False log_level=INFO log_format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] %(message)s # ********************** diff --git a/setup.py b/setup.py index c1bd2030..56a2dd07 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setuptools.setup( name="edgepi-python-sdk", - version="1.2.14", + version="1.2.15", author="S.Park", author_email="spark@osensa.com", description="EdgePi Python SDK package", diff --git a/src/edgepi/led/README.md b/src/edgepi/led/README.md index f2c68b5a..5842b282 100644 --- a/src/edgepi/led/README.md +++ b/src/edgepi/led/README.md @@ -12,9 +12,9 @@ from edgepi.led.led_constants import LEDPins leds = EdgePiLED() -leds.turn_on(LEDPins.LED1) +leds.turn_led_on(LEDPins.LED1) -leds.turn_off(LEDPins.LED1) +leds.turn_led_off(LEDPins.LED1) ``` # Functionalities @@ -28,9 +28,9 @@ Currently, the LED module offers the following functionalities: ## Turn an LED on/off ```python -leds.turn_on(LEDPins.LED1) +leds.turn_led_on(LEDPins.LED1) -leds.turn_off(LEDPins.LED1) +leds.turn_led_off(LEDPins.LED1) ``` ## Toggle an LED to the opposite state diff --git a/src/test_edgepi/unit_tests/test_calibration/test_protobuf_mapping.py b/src/test_edgepi/unit_tests/test_calibration/test_protobuf_mapping.py new file mode 100644 index 00000000..8a0d7d52 --- /dev/null +++ b/src/test_edgepi/unit_tests/test_calibration/test_protobuf_mapping.py @@ -0,0 +1,96 @@ +'''unit test for access eeprom''' +# pylint: disable=C0413 +# pylint: disable=no-member +# pylint: disable=no-name-in-module +# https://github.com/protocolbuffers/protobuf/issues/10372 +from unittest import mock +import os +PATH = os.path.dirname(os.path.abspath(__file__)) +import sys +sys.modules['periphery'] = mock.MagicMock() + +import pytest +from edgepi.calibration.protobuf_mapping import EdgePiEEPROMData +from edgepi.calibration.calibration_constants import CalibParam +from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout + +def read_binfile(): + """Read the dummy serializedFile and return byte string""" + with open(PATH+"/serializedFile","rb") as fd: + b_string = fd.read() + return b_string + +dac_dict_calib = {0:CalibParam(gain = 1.02383653, offset=-0.0164757), + 1:CalibParam(gain = 1.02283154, offset=-0.018963), + 2:CalibParam(gain = 1.02610898, offset=-0.0153855), + 3:CalibParam(gain = 1.02465811, offset=-0.0182012), + 4:CalibParam(gain = 1.02623188, offset=-0.0179865), + 5:CalibParam(gain = 1.02696733, offset=-0.0169919), + 6:CalibParam(gain = 1.0248366, offset=-0.0195936), + 7:CalibParam(gain = 1.02198715, offset=-0.0179717)} + +adc_dict_calib = {0:CalibParam(gain = 0.998441907, offset=0.035948182), + 1:CalibParam(gain = 0.998551392, offset=0.03190953), + 2:CalibParam(gain = 1.004123580, offset=-0.039846713), + 3:CalibParam(gain = 0.996197528, offset=0.05191299), + 4:CalibParam(gain = 1.000529260, offset=0.00375247), + 5:CalibParam(gain = 0.995760365, offset=0.05806301), + 6:CalibParam(gain = 0.993060022, offset=0.09193925), + 7:CalibParam(gain = 0.997010247, offset=0.04080028), + 8:CalibParam(gain = 0.998583581, offset=-0.004391864), + 9:CalibParam(gain = 0.996344494, offset=0.09228059), + 10:CalibParam(gain = 0.995856966, offset=0.05618589), + 11:CalibParam(gain = 0.997157199, offset=-0.049672102)} + +rtd_dict_calib = {0:CalibParam(gain = 1, offset=0)} +rtd_dict_hw= {0:1985.60} +tc_dict_calib = {0:CalibParam(gain = 1.024272873, offset=-0.018334615)} +tc_dict_hw = {0:1} + + +KEYS = '-----BEGIN RSA PRIVATE KEY-----\r\nMIIEpQIBAAKCAQEAnwu+S/OI3Hl0BCNQASv0HU5Jc4KUT2X4/tLykG+T\ +mZQcd6pE\r\nv7fji6ZoW/dl8dKwwdi/cfSS/J5Iv+5FwQU4KGNBbhVAnmJeLd+PMUT4bQTf9rVF\r\nHsDoIPoQLDH7jmBu8ai\ +7jQ0hY5SqPbynPGELFrk/vEpHwg/8fO4lbw1YxwgGc0SR\r\n8k1tFdi4On7NymBiv88HOsrrziAPGCd7Hc07s+SdFQF+nDPidy\ +M1pMqvUC25c5Sk\r\ncsrBlMgmcSRY8y6MJFPObg0ahLsI/YT+jT2G6AioQOz9ZJ89DSzjEfoFK9KlIzq1\r\n46THPR8Tdc9qu\ +chsqfX1zvxKdrQPbdtC7ZnMhQIDAQABAoIBAQCccv3PUpGXZzVz\r\neJUTgfwQ89iW8qUXcVS8vh7za35CvYo/QFN+T9JapefU\ +R4mVlk5fcOnpm88XBlDD\r\n1AvzskGqoPBU7DzzUAoaj+YYbiL9gqUY1vlWJiZxgep0vvoX9M5Nk1BikL7+aNgK\r\nANB1OXS\ +h9ro2as8pm3YgIlbaZcOli7doqtDM4kzxpKOhSAwtQqAS15GwMsKyhs1q\r\nvN6BqTBQE7XjdO5k1GCT4+vWEnptKMlLxi/zj1\ +uAXuAmujKHf3FcNqnrmNQ2v5+g\r\nNmuFCiknrtK5p5va67g6JgWqy45EG5CJLupIpM31xmewFXtlsfh3/fYSzkZqK9jX\r\nH\ +g/Wq7ShAoGBAMqzZTr2kjxtP0UjN4S5L0da7k4UX+4GEJRrQgG6RUgrL5eq4tfc\r\nT4DU7mp7SAb7FVwZmJ5kXZ33aQBF6UYR\ +uIpzUWRT+QOfzeTeJSQGAR8Ng/STNaUt\r\nD9XalRJSYn49LMGTgFebKJakIUC7lZ0ZZxpP1yFZbmYtJN1xFB/jhfGdAoGBAMj\ +d\r\nwuzc5VPJV5fQte6lTcnTzkqnPXnSvpf4sK+22i/1xGi0kbdimQiXHPj2xnwQmygN\r\n3a+l2ysChimOx2qqVdeFQbAveK\ +wYYSk41R10PmsQE14CgREN3r1XcXGz4mqXpL8l\r\n7Ry2HOIDQjTRVye2YdRO0zu3+egdFz4UTnxE8yYJAoGBAIM5+MNfdfTg1\ +SExV3P5\r\nX35WhAjQb/psurcbaTQtH0VFkB4kZ49P9bh2IZOWFF9Qldd2SrPgTitCTRv8JrVS\r\nK6KWXY8SPhf2kRkmJ+1W\ +ZctwuIjR9Nzme2X7iJ6/7zvC5wK7N0+AB5rezxhVWNrH\r\n41PJdIEGoM5NU5x45IpwhfqRAoGANpYdbOUy5SwoQ7eSWYJOu3R\ +18U+1oy+kYART\r\nb80PSk1NzO6VUvLWh8EZPIdDtV+F6sKp5hv6jZun/g8xHkmf/mvWSBz+fDY74Uny\r\nkIiQlePOf5PKo2\ +nTiD0FNVMfSrxfJxsVbuIGw10DVvs05jPoLhwlx2rd3ThaoqI+\r\nGgNa2JECgYEAwEEEq7dxGXYmlIhTs5IiEleLjBydQ9B1P\ +8zIIApLJdHuu50K7ifq\r\nVYWC0QMrAr4lWmJ3ZAmewtrgDh4/6JBWKdpKfX6qm88MpID0arS+jJkQBuMNIafI\r\nGqnLR1sn\ +5N91UjPItE3NPhYX5LvQMjIuHt8AiyNepTxS32VzVTx2z+A=\r\n-----END RSA PRIVATE KEY-----\r\n' + +def test_edgepi_eeprom_data(): + memory_map = EepromLayout() + memory_map.ParseFromString(read_binfile()) + eeprom_data = EdgePiEEPROMData(memory_map) + for key, value in eeprom_data.dac_calib_params.items(): + assert value.gain == pytest.approx(dac_dict_calib[key].gain) + assert value.offset == pytest.approx(dac_dict_calib[key].offset) + for key, value in eeprom_data.adc_calib_params.items(): + assert value.gain == pytest.approx(adc_dict_calib[key].gain) + assert value.offset == pytest.approx(adc_dict_calib[key].offset) + for key, value in eeprom_data.tc_calib_params.items(): + assert value.gain == pytest.approx(tc_dict_calib[key].gain) + assert value.offset == pytest.approx(tc_dict_calib[key].offset) + for key, value in eeprom_data.tc_hw_params.items(): + assert value == pytest.approx(tc_dict_hw[key]) + for key, value in eeprom_data.rtd_calib_params.items(): + assert value.gain == pytest.approx(rtd_dict_calib[key].gain) + assert value.offset == pytest.approx(rtd_dict_calib[key].offset) + for key, value in eeprom_data.rtd_hw_params.items(): + assert value == pytest.approx(rtd_dict_hw[key]) + assert eeprom_data.serial == '20221110-021' + assert eeprom_data.model == 'EdgePi-Bearbone' + assert eeprom_data.client_id == 'SO-2022-1023' + assert eeprom_data.config_key.certificate == KEYS + assert eeprom_data.config_key.private == KEYS + assert eeprom_data.data_key.certificate == KEYS + assert eeprom_data.data_key.certificate == KEYS diff --git a/tests/integration_tests/test_digital_out/__init__.py b/tests/integration_tests/test_digital_out/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration_tests/test_digital_out/test_digital_out.py b/tests/integration_tests/test_digital_out/test_digital_out.py new file mode 100644 index 00000000..f1989b4d --- /dev/null +++ b/tests/integration_tests/test_digital_out/test_digital_out.py @@ -0,0 +1,36 @@ +'''Integration tests for edgepi_digital_output.py module''' + +import time +import pytest +from edgepi.digital_output.edgepi_digital_output import EdgePiDigitalOutput +from edgepi.gpio.gpio_constants import GpioPins + +@pytest.mark.parametrize("pin_name", [ + (GpioPins.DOUT1), + (GpioPins.DOUT2), + (GpioPins.DOUT3), + (GpioPins.DOUT4), + (GpioPins.DOUT5), + (GpioPins.DOUT6), + (GpioPins.DOUT7), + (GpioPins.DOUT8), +]) +def test_output_high(pin_name): + dout=EdgePiDigitalOutput() + dout.digital_output_state(pin_name, True) + time.sleep(1) + +@pytest.mark.parametrize("pin_name", [ + (GpioPins.DOUT1), + (GpioPins.DOUT2), + (GpioPins.DOUT3), + (GpioPins.DOUT4), + (GpioPins.DOUT5), + (GpioPins.DOUT6), + (GpioPins.DOUT7), + (GpioPins.DOUT8), +]) +def test_output_low(pin_name): + dout=EdgePiDigitalOutput() + dout.digital_output_state(pin_name, False) + time.sleep(1)