{"id":22819844,"url":"https://github.com/aemarkov/packetbuilderlibrary","last_synced_at":"2025-03-30T23:15:24.876Z","repository":{"id":86786004,"uuid":"132810991","full_name":"aemarkov/PacketBuilderLibrary","owner":"aemarkov","description":"Merge some packet splitted into several buffers","archived":false,"fork":false,"pushed_at":"2018-05-09T21:21:43.000Z","size":11,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-06T04:43:37.513Z","etag":null,"topics":["csharp","serialport","uart"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aemarkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-05-09T20:45:24.000Z","updated_at":"2023-03-03T21:23:58.000Z","dependencies_parsed_at":"2023-03-13T19:53:09.223Z","dependency_job_id":null,"html_url":"https://github.com/aemarkov/PacketBuilderLibrary","commit_stats":null,"previous_names":["aemarkov/packetbuilderlibrary"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FPacketBuilderLibrary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FPacketBuilderLibrary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FPacketBuilderLibrary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FPacketBuilderLibrary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aemarkov","download_url":"https://codeload.github.com/aemarkov/PacketBuilderLibrary/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246390860,"owners_count":20769478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["csharp","serialport","uart"],"created_at":"2024-12-12T15:14:30.006Z","updated_at":"2025-03-30T23:15:24.859Z","avatar_url":"https://github.com/aemarkov.png","language":"C#","readme":"# PacketBuilderLibrary\nMerge some packet splitted into several buffers\n\n### Why\nIf you have worked with SerialPort you know, that the data packet can be splitted into two or more `DataReceived` calls or there can be \nsome trash before first data.\n\nIf your packets are fixed-length, this simplies library will help you with this problem. Just add some header before your data and use this\nlibrary\n\n### Example\n#### Sender\n\nThis is an example of some data sender stuff (e.g. Arduino)\n```c++\nuint8_t my_header[] = {0x34, 0x75}; // some random header\nuint8_t my_data[] = \"Hello!\";       // some data\n\nvoid setup()\n{\n  Serial.begin(9600);\n}\n\nvoid loop()\n{\n  Serial.write(my_header, sizeof(my_header));\n\n  // Send first 3 bytes of data, wait 100ms and send rest bytes\n  Serial.write(my_data, 3);\n  delay(100);\n  Serial.write(my_data+3, sizeof(my_data)-3);\n  delay(500);\n\n  delay(500);\n}\n```\n\n#### Receiver (C#)\n\nThis is a simple C# console-app\n\n```c#\nusing System;\nusing System.Text;\nusing System.IO.Ports;\nusing Markov.PacketBuilderLibrary;\n\nnamespace ReceiverExample\n{\n    class Program\n    {\n        private static SerialPort com;\n        private static PacketBuilder builder;\n\n        static void Main(string[] args)\n        {\n            com = new SerialPort(\"COM3\", 9600);  // Change for your port\n\n            // Setup builder - set same header and payload length as in Sender code\n            builder = new PacketBuilder(new byte[] {0x34, 0x75}, 7);\n\n            // Subscribe events\n            com.DataReceived += Com_DataReceived;\n            builder.PackageReceived += Builder_PackageReceived;\n\n            com.Open();\n            Console.ReadKey();\n            com.Close();            \n        }\n\n        private static void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)\n        {\n            // Receive all available bytes from SerialPort\n            int size = com.BytesToRead;\n            byte[] buffer = new byte[size];\n            com.Read(buffer, 0, size);\n\n            // Push data to the PacketBuilder\n            builder.ProcessPart(buffer);\n        }\n\n        private static void Builder_PackageReceived(object sender, byte[] packet)\n        {\n            // This event fires when packet is fully received\n            // packet variable contains packet payload (without header)        \n            string text = Encoding.ASCII.GetString(packet);\n            Console.WriteLine(text);\n        }\n    }\n}\n\n```\n\nExample of receiving without `PacketBuilder`\n```\n                                                                   Hel \nlo!\n\nHe\nl\nlo!\nHel\nl\no!\nHel\nlo\n!\nHel\nlo\n!\nH\nel\nlo!\n```\n\nAnd now example of receiving with `PacketBuilder`\n```\nHello!\nHello!\nHello!\nHello!\nHello!\n```\n\n```\nMarkov Alexey, 2018\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faemarkov%2Fpacketbuilderlibrary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faemarkov%2Fpacketbuilderlibrary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faemarkov%2Fpacketbuilderlibrary/lists"}