# pyXCP
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/85f774708b2542d98d02df55c743d24a)](https://app.codacy.com/app/christoph2/pyxcp?utm_source=github.com&utm_medium=referral&utm_content=christoph2/pyxcp&utm_campaign=Badge_Grade_Settings)
[![Maintainability](https://api.codeclimate.com/v1/badges/4c639f3695f2725e392a/maintainability)](https://codeclimate.com/github/christoph2/pyxcp/maintainability)
[![Build Status](https://github.com/christoph2/pyxcp/workflows/Python%20application/badge.svg)](https://github.com/christoph2/pyxcp/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/r00l4i4co095e9ht?svg=true)](https://ci.appveyor.com/project/christoph2/pyxcp)
[![Coverage Status](https://coveralls.io/repos/github/christoph2/pyxcp/badge.svg?branch=master)](https://coveralls.io/github/christoph2/pyxcp?branch=master)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg)](http://opensource.org/licenses/GPL-2.0)
pyXCP is a lightweight Python library which talks to ASAM MCD-1 XCP enabled devices.
These are mainly, but not only, automotive ECUs (Electronic Control Units).
XCP is used to take measurements, to adjust parameters, and to flash during the development process.
XCP also replaces the older CCP (CAN Calibration Protocol).
---
## Installation
pyXCP is hosted on Github, get the latest release: [https://github.com/christoph2/pyxcp](https://github.com/christoph2/pyxcp)
You can install pyxcp from source:
```
pip install -r requirements.txt
python setup.py install
```
Alternatively, you can install pyxcp from source with pip:
```
pip install git+https://github.com/christoph2/pyxcp.git
```
Alternatively, get pyxcp from [PyPI](https://pypi.org/project/pyxcp/):
```
pip install pyxcp
```
### Requirements
- Python >= 3.7
- A running XCP slave (of course).
- If you are using a 64bit Windows version and want to use seed-and-key .dlls (to unlock resources), a GCC compiler capable of creating 32bit
executables is required:
These .dlls almost always ship as 32bit versions, but you can't load a 32bit .dll into a 64bit process, so a small bridging program (asamkeydll.exe) is
required.
## First steps
T.B.D.
## Features
T.B.D.
## References
- [Offical home of XCP](https://www.asam.net/standards/detail/mcd-1-xcp/)
## License
GNU Lesser General Public License v3 or later (LGPLv3+)
Raw data
{
"_id": null,
"home_page": null,
"name": "pyxcp",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0.0,>=3.8.1",
"maintainer_email": null,
"keywords": "automotive, ecu, xcp, asam, autosar",
"author": "Christoph Schueler",
"author_email": "cpu.gems@googlemail.com",
"download_url": "https://files.pythonhosted.org/packages/67/26/4107da014f731fac4b1d6e87effd532549c8de24ec0d19210ba9b0281ade/pyxcp-0.22.23.tar.gz",
"platform": null,
"description": "# pyXCP\n\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/85f774708b2542d98d02df55c743d24a)](https://app.codacy.com/app/christoph2/pyxcp?utm_source=github.com&utm_medium=referral&utm_content=christoph2/pyxcp&utm_campaign=Badge_Grade_Settings)\n[![Maintainability](https://api.codeclimate.com/v1/badges/4c639f3695f2725e392a/maintainability)](https://codeclimate.com/github/christoph2/pyxcp/maintainability)\n[![Build Status](https://github.com/christoph2/pyxcp/workflows/Python%20application/badge.svg)](https://github.com/christoph2/pyxcp/actions)\n[![Build status](https://ci.appveyor.com/api/projects/status/r00l4i4co095e9ht?svg=true)](https://ci.appveyor.com/project/christoph2/pyxcp)\n[![Coverage Status](https://coveralls.io/repos/github/christoph2/pyxcp/badge.svg?branch=master)](https://coveralls.io/github/christoph2/pyxcp?branch=master)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg)](http://opensource.org/licenses/GPL-2.0)\n\npyXCP is a lightweight Python library which talks to ASAM MCD-1 XCP enabled devices.\nThese are mainly, but not only, automotive ECUs (Electronic Control Units).\n\nXCP is used to take measurements, to adjust parameters, and to flash during the development process.\n\nXCP also replaces the older CCP (CAN Calibration Protocol).\n\n---\n\n## Installation\n\npyXCP is hosted on Github, get the latest release: [https://github.com/christoph2/pyxcp](https://github.com/christoph2/pyxcp)\n\nYou can install pyxcp from source:\n\n```\npip install -r requirements.txt\npython setup.py install\n```\n\nAlternatively, you can install pyxcp from source with pip:\n\n```\npip install git+https://github.com/christoph2/pyxcp.git\n```\n\nAlternatively, get pyxcp from [PyPI](https://pypi.org/project/pyxcp/):\n\n```\npip install pyxcp\n```\n\n### Requirements\n\n- Python >= 3.7\n- A running XCP slave (of course).\n- If you are using a 64bit Windows version and want to use seed-and-key .dlls (to unlock resources), a GCC compiler capable of creating 32bit\n executables is required:\n\n These .dlls almost always ship as 32bit versions, but you can't load a 32bit .dll into a 64bit process, so a small bridging program (asamkeydll.exe) is\n required.\n\n## First steps\n\nT.B.D.\n\n## Features\n\nT.B.D.\n\n## References\n\n- [Offical home of XCP](https://www.asam.net/standards/detail/mcd-1-xcp/)\n\n## License\n\nGNU Lesser General Public License v3 or later (LGPLv3+)\n\n",
"bugtrack_url": null,
"license": "LGPLv3",
"summary": "Universal Calibration Protocol for Python",
"version": "0.22.23",
"project_urls": {
"Homepage": "https://github.com/christoph2/pyxcp"
},
"split_keywords": [
"automotive",
" ecu",
" xcp",
" asam",
" autosar"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fabf8bb0fd9e6c0ec027be69e947785dbb32a47bfc35742a060cd1d5ba6d2b5a",
"md5": "7ef1e2d16b532b78c39f271ccadc528d",
"sha256": "2b584d9591ca3b20abc2f1eeeb643457f721285ee785bd9d166df1cdaf3c26ae"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp310-cp310-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"has_sig": false,
"md5_digest": "7ef1e2d16b532b78c39f271ccadc528d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0.0,>=3.8.1",
"size": 1329776,
"upload_time": "2025-01-15T05:58:12",
"upload_time_iso_8601": "2025-01-15T05:58:12.489262Z",
"url": "https://files.pythonhosted.org/packages/fa/bf/8bb0fd9e6c0ec027be69e947785dbb32a47bfc35742a060cd1d5ba6d2b5a/pyxcp-0.22.23-cp310-cp310-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "33038dacfe53d4ba0a1b6c45fda60df8c873d7155a40b6f4038ba40157fafc56",
"md5": "7d706aa848be34d71aa0e3b9c656ed59",
"sha256": "f085d5c4cfb19fd0b836fb0c6b6d7903371f3896015d41c1723dfb260e8f5588"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "7d706aa848be34d71aa0e3b9c656ed59",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0.0,>=3.8.1",
"size": 1342050,
"upload_time": "2025-01-15T05:58:15",
"upload_time_iso_8601": "2025-01-15T05:58:15.307235Z",
"url": "https://files.pythonhosted.org/packages/33/03/8dacfe53d4ba0a1b6c45fda60df8c873d7155a40b6f4038ba40157fafc56/pyxcp-0.22.23-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d3d56a763f17938e83ecc0843e84aec16f62668c55545f75881600ef5ed0ec20",
"md5": "9bd49590e03af59026b1772ef1e989b2",
"sha256": "21f702273570ccff80eef61c968bb38ecbf14901cf59970ee8341d4f11ff9ca8"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"has_sig": false,
"md5_digest": "9bd49590e03af59026b1772ef1e989b2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0.0,>=3.8.1",
"size": 1873673,
"upload_time": "2025-01-15T05:58:17",
"upload_time_iso_8601": "2025-01-15T05:58:17.874959Z",
"url": "https://files.pythonhosted.org/packages/d3/d5/6a763f17938e83ecc0843e84aec16f62668c55545f75881600ef5ed0ec20/pyxcp-0.22.23-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b8be42f983efa754f220a6024efba09d21bd497860aceeb69000b68e564afa3e",
"md5": "10d48e4322b3bd4f0b3243f8069f7423",
"sha256": "3d4652574402bc96c7321d841f932f69d94e370b50cd22a08a2d7d67bd3e63b4"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "10d48e4322b3bd4f0b3243f8069f7423",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0.0,>=3.8.1",
"size": 1711613,
"upload_time": "2025-01-15T05:58:20",
"upload_time_iso_8601": "2025-01-15T05:58:20.656219Z",
"url": "https://files.pythonhosted.org/packages/b8/be/42f983efa754f220a6024efba09d21bd497860aceeb69000b68e564afa3e/pyxcp-0.22.23-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6af6eb263e377ca8806c52867b0a69a6581cb0432fc588bc84e756d7bf88c0bc",
"md5": "7cff6d6dd2934db13f7d61dce7f482d5",
"sha256": "95979f88fe364762835e0b71d3c92bd2eeccc5192c138e1dc2ce7279d63bfee6"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"has_sig": false,
"md5_digest": "7cff6d6dd2934db13f7d61dce7f482d5",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0.0,>=3.8.1",
"size": 2414108,
"upload_time": "2025-01-15T05:58:23",
"upload_time_iso_8601": "2025-01-15T05:58:23.162430Z",
"url": "https://files.pythonhosted.org/packages/6a/f6/eb263e377ca8806c52867b0a69a6581cb0432fc588bc84e756d7bf88c0bc/pyxcp-0.22.23-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e77e31994d4fc809e85f8fdb081d086f690a61826849ec43543f059ef81ccc5b",
"md5": "25b3fb5d0416e30bfcfa35e6542287c3",
"sha256": "0c9bd87aa85330988914f996a1c5bc786b6a0ea790961d3b1aa5608dd4b1f088"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "25b3fb5d0416e30bfcfa35e6542287c3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0.0,>=3.8.1",
"size": 2082513,
"upload_time": "2025-01-15T05:58:24",
"upload_time_iso_8601": "2025-01-15T05:58:24.533193Z",
"url": "https://files.pythonhosted.org/packages/e7/7e/31994d4fc809e85f8fdb081d086f690a61826849ec43543f059ef81ccc5b/pyxcp-0.22.23-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b686ec7da13c6f9c0000d1358f793bae1ef01c9abc31de7e2bbf25d4958d7ebb",
"md5": "31422244ba8460459e7ce4c0104724bb",
"sha256": "1ffa331d8bbf32d0dd63b6334ed8efb95afc9e714e9745220f07ea0f8e38a933"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"has_sig": false,
"md5_digest": "31422244ba8460459e7ce4c0104724bb",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0.0,>=3.8.1",
"size": 2955343,
"upload_time": "2025-01-15T05:58:27",
"upload_time_iso_8601": "2025-01-15T05:58:27.181790Z",
"url": "https://files.pythonhosted.org/packages/b6/86/ec7da13c6f9c0000d1358f793bae1ef01c9abc31de7e2bbf25d4958d7ebb/pyxcp-0.22.23-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "413ad284faa5fd3daa6ea07d73c83d9258dbc149aed1bf9af6acdb97f7804dec",
"md5": "5ab15681157a9415f3a74a92da3a83a7",
"sha256": "4034275643d339ee59e1f540a14b6e04abc01e4de62d2aec60fd481c8afeea1a"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "5ab15681157a9415f3a74a92da3a83a7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0.0,>=3.8.1",
"size": 2453384,
"upload_time": "2025-01-15T05:58:30",
"upload_time_iso_8601": "2025-01-15T05:58:30.034952Z",
"url": "https://files.pythonhosted.org/packages/41/3a/d284faa5fd3daa6ea07d73c83d9258dbc149aed1bf9af6acdb97f7804dec/pyxcp-0.22.23-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4b47efa126570c53707d7b8ce0a8d4a7daa015818ef0b16198c856466b2f8365",
"md5": "7fafd940129871f4de4d343178752eba",
"sha256": "e7708e213fd315e06776f6043d4ac69b8a0a649e1b8a72817f8af370b0a2ba94"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "7fafd940129871f4de4d343178752eba",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4.0.0,>=3.8.1",
"size": 616375,
"upload_time": "2025-01-15T05:58:31",
"upload_time_iso_8601": "2025-01-15T05:58:31.613378Z",
"url": "https://files.pythonhosted.org/packages/4b/47/efa126570c53707d7b8ce0a8d4a7daa015818ef0b16198c856466b2f8365/pyxcp-0.22.23-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aa45a1697786447f8ec10959dc5d10506eb7aa7b772a6d95c0792db09bc28a8d",
"md5": "b81dec48ae8e57c655733ead3b64b67a",
"sha256": "9f77481eeef60b0b8cb6e3c008b57ce3fb222223fb9c96954c4ec461ed24ffa4"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp39-cp39-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"has_sig": false,
"md5_digest": "b81dec48ae8e57c655733ead3b64b67a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0.0,>=3.8.1",
"size": 791516,
"upload_time": "2025-01-15T05:58:34",
"upload_time_iso_8601": "2025-01-15T05:58:34.048992Z",
"url": "https://files.pythonhosted.org/packages/aa/45/a1697786447f8ec10959dc5d10506eb7aa7b772a6d95c0792db09bc28a8d/pyxcp-0.22.23-cp39-cp39-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e79e9d835cfbe2109d3bf6093ae9f1c6d05714e594043dd7d67d8e0214612af8",
"md5": "88932d4e4324fd18ef0d924735a934bd",
"sha256": "8c43705db35b105d2770589665ee481ffb9cd7d6d679e4ee6657a7ef0f80c02b"
},
"downloads": -1,
"filename": "pyxcp-0.22.23-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "88932d4e4324fd18ef0d924735a934bd",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4.0.0,>=3.8.1",
"size": 976055,
"upload_time": "2025-01-15T05:58:37",
"upload_time_iso_8601": "2025-01-15T05:58:37.576867Z",
"url": "https://files.pythonhosted.org/packages/e7/9e/9d835cfbe2109d3bf6093ae9f1c6d05714e594043dd7d67d8e0214612af8/pyxcp-0.22.23-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "67264107da014f731fac4b1d6e87effd532549c8de24ec0d19210ba9b0281ade",
"md5": "86e015f42076fb71645d6aa9f8c4fd47",
"sha256": "6ecd33b3fba04ef0b8055a06b5a8775b696d8fe3ce7a029f5eaac7093725fbcd"
},
"downloads": -1,
"filename": "pyxcp-0.22.23.tar.gz",
"has_sig": false,
"md5_digest": "86e015f42076fb71645d6aa9f8c4fd47",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0.0,>=3.8.1",
"size": 212363,
"upload_time": "2025-01-15T05:58:40",
"upload_time_iso_8601": "2025-01-15T05:58:40.133553Z",
"url": "https://files.pythonhosted.org/packages/67/26/4107da014f731fac4b1d6e87effd532549c8de24ec0d19210ba9b0281ade/pyxcp-0.22.23.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-15 05:58:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "christoph2",
"github_project": "pyxcp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"appveyor": true,
"lcname": "pyxcp"
}