{"id":15007274,"url":"https://github.com/famez/j1939-framework","last_synced_at":"2025-09-02T00:33:51.783Z","repository":{"id":30980549,"uuid":"104978785","full_name":"famez/J1939-Framework","owner":"famez","description":"Framework to work with J1939 Frames used in CAN bus in bus, car and trucks industries","archived":false,"fork":false,"pushed_at":"2024-02-18T12:08:43.000Z","size":1687,"stargazers_count":167,"open_issues_count":9,"forks_count":57,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-05-25T08:38:18.849Z","etag":null,"topics":["angularjs","bus","c","can-bus","cplusplus-11","html","j1939","javascript","linux-distribution","protobuf","test","travis-ci","websockets"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/famez.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":"2017-09-27T06:07:06.000Z","updated_at":"2025-05-14T11:43:27.000Z","dependencies_parsed_at":"2024-09-24T19:07:53.909Z","dependency_job_id":"f12ce86b-8590-4bd9-8143-7f2541bda518","html_url":"https://github.com/famez/J1939-Framework","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/famez/J1939-Framework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/famez%2FJ1939-Framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/famez%2FJ1939-Framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/famez%2FJ1939-Framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/famez%2FJ1939-Framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/famez","download_url":"https://codeload.github.com/famez/J1939-Framework/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/famez%2FJ1939-Framework/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273213894,"owners_count":25065058,"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","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"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":["angularjs","bus","c","can-bus","cplusplus-11","html","j1939","javascript","linux-distribution","protobuf","test","travis-ci","websockets"],"created_at":"2024-09-24T19:07:25.170Z","updated_at":"2025-09-02T00:33:51.724Z","avatar_url":"https://github.com/famez.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Travis Build Status](https://travis-ci.org/famez/J1939-Framework.svg?branch=master)](https://travis-ci.com/famez/J1939-Framework)\n\n# J1939-Framework\nFramework to work with J1939 protocol. \n\nJ1939 protocol is a standard used in different systems compliant with CAN 2.0B specification.\n\nThe framework has been developed in C++ in a Linux distribution and compiled using the GNU toolchain. No dependencies are required for the compilation of any of the projects except from SocketCan compiled in the Linux Kernel.\n\n\n\n## What can you do with J1939-Framework\n\n- Save can frames from the Can Bus into recordings in TRC format with BinUtils/TRCDumper.\n- Play can frames from recordings in TRC format into the Can Bus with BinUtils/TRCPlayer.\n- Convert TRC files into pcap files readable by wireshark with BinUtils/TRCToCap.\n- Dissect pcap files with wireshark and the J1939 plugin dissector (wireshark/dissector).\n- Sniff frames from the Can Bus compliant with J1939 protocol with BinUtils/j1939Sniffer.\n- Decode raw J1939 data to human readable data with BinUtils/j1939Decoder.\n- Craft your own J1939 frames and send them to the Can Bus with BinUtils/j1939Sender. The functionality can be extended with the help of bash scripts located in Scripts (some examples are listed).\n- Visualize what is going on in the Can Bus with GUI_WEB. You will be able to craft, send and visualize the frames that are flowing in the Bus as well as visualizing graphics of their content (SPNs).\n- Discover J1939 devices with BinUtils/j1939AddressMapper.\n- Simulation of the Address Claim Process with BinUtils/j1939AddrClaim.\n\n### And of course, develop!!:\n\n- In CAN/ folder we can find a library in C++ (libCAN.so) with methods to generate and sniff can frames with support for PeakCan and SocketCan.\n- In J1939/ folder we can find a library in C++ (libJ1939.so) to easily manipulate J1939 frames and work with the J1939 protocol. Some features are:\n\tSupport of BAM protocol.\n\tA factory class in charge of generating the J1939 frames.\n\tA database loaded by the factory located in Database/frames.json with a list of the most used Application Layer frames (including the FMS protocol).\n\tCoding/Decoding DM1 (Diagnosis), FMS1 (TTS), Request and Address Claim frames.\n\tCoding/Decoding of SPNs (String, status and numeric).\n\n\n## Installing and compiling\n\n# Installation:\nUbuntu 18.10 or higher\n```bash\n\nsudo apt-get install libgtest-dev protobuf-compiler libprotobuf-dev libncurses-dev libwebsockets cmake\ncd /usr/src/gtest\nsudo env \"PATH=$PATH\" cmake CMakeLists.txt\nsudo make\nsudo cp *.a /usr/lib\ngit clone https://github.com/open-source-parsers/jsoncpp.git\n\n \ncd jsoncpp\ngit checkout 863aa36165acfdbaf22447f4934f5adc327692a0\ncmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON \nsudo make install\ncd ~\ngit clone https://github.com/famez/J1939-Framework.git\ncd J1939-Framework\ncmake . \ncmake --build .\nsudo make install\n\n```\n\n# Usage with SocketCan:\n\nTo make SocketCan available in your system, you should execute the following commands:\n\n```bash\nsudo apt-get install can-utils\n```\n\nTo enable the drivers if they not enabled by default:\n\n```bash\nsudo modprobe can\nsudo modprobe vcan\n```\n\nTo generate a virtual interface for test purposes.\n\n```bash\nsudo ip link add name vcan0 type vcan\n```\n\nTo test over vcan0.\n\n```bash\n./Scripts/gear_level.sh vcan0 | j1939Sender --silent --file Scripts/define_frames.j1939\ncandump vcan0\n```\n\n## TRCPlayer\n\n![alt text](https://github.com/famez/J1939-Framework/blob/master/BinUtils/TRCPlayer/TRCPlayer.png)\n\n    \n## Wireshark dissector\n\n![alt text](https://github.com/famez/J1939-Framework/blob/master/wireshark/dissector/J1939-plugin.png)\n\n## J1939GUI\n\n![alt text](https://github.com/famez/J1939-Framework/blob/master/Graph.png)\n\n![alt text](https://github.com/famez/J1939-Framework/blob/master/GUI_WEB/J1939GUI.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffamez%2Fj1939-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffamez%2Fj1939-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffamez%2Fj1939-framework/lists"}