{"id":25382583,"url":"https://github.com/tweichselbaumer/linkup","last_synced_at":"2026-04-09T02:01:44.927Z","repository":{"id":65946324,"uuid":"67714768","full_name":"tweichselbaumer/LinkUp","owner":"tweichselbaumer","description":"Label based communicaton library.","archived":false,"fork":false,"pushed_at":"2023-09-19T19:12:06.000Z","size":616,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-18T21:03:40.692Z","etag":null,"topics":["arduino","arduino-library","communication","cpp","csharp","dotnet","nuget","packets"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tweichselbaumer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-08T15:18:20.000Z","updated_at":"2019-05-14T08:50:53.000Z","dependencies_parsed_at":"2025-02-15T07:29:11.967Z","dependency_job_id":"aafc7311-2f00-49ae-95bf-2b39dba2b7e3","html_url":"https://github.com/tweichselbaumer/LinkUp","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/tweichselbaumer/LinkUp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tweichselbaumer%2FLinkUp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tweichselbaumer%2FLinkUp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tweichselbaumer%2FLinkUp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tweichselbaumer%2FLinkUp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tweichselbaumer","download_url":"https://codeload.github.com/tweichselbaumer/LinkUp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tweichselbaumer%2FLinkUp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31581864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","arduino-library","communication","cpp","csharp","dotnet","nuget","packets"],"created_at":"2025-02-15T07:28:48.962Z","updated_at":"2026-04-09T02:01:44.900Z","avatar_url":"https://github.com/tweichselbaumer.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![LinkUp](https://raw.githubusercontent.com/tweichselbaumer/LinkUp/master/Graphics/Raw/LinkUp-logo.png)\n\n## About\nLinkUp is a cross platform lightweight communication library. The framework is able to transmit data between different microcontrollers, mobile devices and computers.\n\n## Build\n[![Build status](https://ci.appveyor.com/api/projects/status/u8krtoysxm048o7x?svg=true)](https://ci.appveyor.com/project/tweichselbaumer/linkup)\n\n## Installation\nThe current version of the library is released on [nuget](https://www.nuget.org/packages/LinkUp).\n\n### Arduino/C/C++\nIf you use Visual Studio for developing your Arduino/C/C++ Project, you can install the nessesary files by adding a nuget package with the nuget packages manager.\n\nAlternatively, download the package from [nuget](https://www.nuget.org/packages/LinkUp), unzip the file and extract the files from *content\\native*. Add these files to your project.\n\n### C\\#/.net/Xamarin/Portable\nThe C# version of the library can be installed by the nuget package manager.\nIf you create a portable library, make sure to use this LinkUp nuget package also at the nativ project to support the full functionality.\n\n## Architecture\nThe LinkUp protocol is splitted into several layer. The LinkUpRaw layer which provides a communication protocol between two endpoints. The LinkUpLogic organizes nodes in a hirachical tree. Each node can provide there one labels. Labels represents different kinds of functionalties and are accessable from there node and all it's parent nodes.\n\n### LinkUpRaw Layer\nLinkUpRaw provides basic data transmissions between two endpoints. It encapsulats binary data into a header with preamble, length, data, CRC16 and EOP(end of packet). It has the capability to detect bit errors. The m Bytes with the value of preamble, EOP, skip pattern are replaced by the skip pattern and the actual value XOR 0x20.\n\n#### LinkUpPacket\nName | Size (Byte) | Offset (Byte)\n---- | ---- | ----\nPreamble | 1 | 0\nLength | 4 | 1\nData | n (max 2^32) | 5\nCRC16 | 2 | n + 5\nEOP | 1 |n + 7\n\n## Get Started\n### C\\# - LinkUpRaw (single process)\nIn this sample the basic usage of LinkUpRaw will be demonstrated. In this case we use the LinkUpMemoryConnector which only provieds communication in the same programm. This code is mostly useful for testing purpose.\n\n[Code](https://github.com/tweichselbaumer/LinkUp/tree/master/src/Testing/Example/Example1)\n\n#### Initialisation\n```cs\nBlockingCollection\u003cbyte[]\u003e col1 = new BlockingCollection\u003cbyte[]\u003e();\nBlockingCollection\u003cbyte[]\u003e col2 = new BlockingCollection\u003cbyte[]\u003e();\n\nLinkUpMemoryConnector slaveToMaster = new LinkUpMemoryConnector(col1, col2);\nLinkUpMemoryConnector masterToSlave = new LinkUpMemoryConnector(col2, col1);\n```\n\n#### Send Packet\n```cs\nslaveToMaster.SendPacket(new LinkUpPacket() { Data = data });\n```\n\n#### Receive Packet\n```cs\nmasterToSlave.ReveivedPacket += MasterToSlave_ReveivedPacket;\n```\n\n### C\\#/Arduino - LinkUpRaw (Serial Port)\nThe next example will show a basic communication between a C\\# programm and an Arduino microcontroller.\n\n[Code](https://github.com/tweichselbaumer/LinkUp/tree/master/src/Testing/Example/Example2)\n\n#### Initialisation\n\n##### C\\# Program\n```cs\nLinkUpSerialPortConnector dataPort = new LinkUpSerialPortConnector(portName, baudRate);\n```\n\n##### Arduino\n```cpp\nLinkUpRaw connector;\n```\n\n#### Send Packet\n\n##### C\\# Program\n```cs\ndataPort.SendPacket(new LinkUpPacket() { Data = data });\n```\n\n##### Arduino\n```cpp\nLinkUpPacket packet;\nconnector.send(packet);\nnBytesToSend = connector.getRaw(pBuffer, BUFFER_SIZE);\n```\n\n#### Receive Packet\n\n##### C\\# Program\n```cs\ndataPort.ReveivedPacket += DataPort_ReveivedPacket;\n```\n\n##### Arduino\n```cpp\nconnector.progress(pBuffer, nBytesRead);\n\nif (connector.hasNext())\n{\n    LinkUpPacket packet = connector.next();\n}\n```\n\n### C\\#/C\\# - LinkUpRaw (UDP)\nThe next example will show a basic communication between a C\\# programm and an other C\\# programm over UDP.\n\n[Code](https://github.com/tweichselbaumer/LinkUp/tree/master/src/Testing/Example/Example4)\n\n#### Initialisation\n\n##### C\\# Program\n```cs\nLinkUpUdpConnector connector = new LinkUpUdpConnector(sourceIp, destinationIp, sourcePort, destinationPort);\n```\n\n#### Send Packet\n\n##### C\\# Program\n```cs\nconnector.SendPacket(new LinkUpPacket() { Data = data });\n```\n\n#### Receive Packet\n\n##### C\\# Program\n```cs\nconnector.ReveivedPacket += DataPort_ReveivedPacket;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftweichselbaumer%2Flinkup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftweichselbaumer%2Flinkup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftweichselbaumer%2Flinkup/lists"}