diff --git a/README_CANABLE_V_2_0.txt b/README_CANABLE_V_2_0.txt new file mode 100644 index 0000000..92d6654 --- /dev/null +++ b/README_CANABLE_V_2_0.txt @@ -0,0 +1,17 @@ +# the CANable V2.0 does not seem to obej the sjw argument. +# hence it will miss can bus messages esp 0x0F1FD000 etc. +# 10DEC2024 + +sudo ip link set dev can0 down +sudo ip link set dev can0 up type can bitrate 100000 sjw 4 +sudo ip link set dev can0 up + + +# +# SJW cannot be changed currently using slcan (which is a serial terminal such as /dev/ttyACM0 linked to the linux kernel) +# see +# https://github.com/linux-can/can-utils/issues/30 +# https://github.com/torvalds/linux/commit/80bcf5ec9927 +# +sudo ip --details link show can0 + diff --git a/README_USB2CANFD_V1.txt b/README_USB2CANFD_V1.txt new file mode 100644 index 0000000..d902466 --- /dev/null +++ b/README_USB2CANFD_V1.txt @@ -0,0 +1,12 @@ + + + + Commands to get the USB2CANFD V1 working. +========================================== + +$ sudo slcand -o -s3 -t hw -S 3000000 /dev/ttyACM0 +$ sudo ip link set up slcan0 + + +RPC 28NOV2025 +============================================================ diff --git a/bash.bashrc b/bash.bashrc index c1d374a..68c37d7 100644 --- a/bash.bashrc +++ b/bash.bashrc @@ -140,8 +140,8 @@ export EDITOR vi RED="\[\033[0;31m\]" YELLOW="\[\033[0;33m\]" GREEN="\[\033[0;32m\]" - -PS1="$GREEN\$(date +%Y-%m-%d_%H:%M) \w$RED \$(formattedGitBranch)$GREEN \n\$ " +hn=`hostname` +PS1="$GREEN\$(date +%Y-%m-%d_%H:%M) $YELLOW $hn $GREEN \w $RED \$(formattedGitBranch)$GREEN \n\$ " export PATH="$PATH:"/opt/microchip/xc8/v1.34/bin"" diff --git a/can_logging/crontab.list b/can_logging/crontab.list new file mode 100644 index 0000000..4b2757b --- /dev/null +++ b/can_logging/crontab.list @@ -0,0 +1,25 @@ +# Edit this file to introduce tasks to be run by cron. +# +# Each task to run has to be defined through a single line +# indicating with different fields when the task will be run +# and what command to run for the task +# +# To define the time you can provide concrete values for +# minute (m), hour (h), day of month (dom), month (mon), +# and day of week (dow) or use '*' in these fields (for 'any'). +# +# Notice that tasks will be started based on the cron's system +# daemon's notion of time and timezones. +# +# Output of the crontab jobs (including errors) is sent through +# email to the user the crontab file belongs to (unless redirected). +# +# For example, you can run a backup of all your user accounts +# at 5 a.m every week with: +# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ +# +# For more information see the manual pages of crontab(5) and cron(8) +# +# m h dom mon dow command +25 8 * * * /home/robin/reset_can.sh >> /home/robin/can_logs/cronlog.log 2>&1 +#34 10 * * * /home/robin/reset_can.sh >> /home/robin/can_logs/cronlog.log 2>&1 diff --git a/can_logging/reset_can.sh b/can_logging/reset_can.sh new file mode 100755 index 0000000..c3ba5cf --- /dev/null +++ b/can_logging/reset_can.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# crontab starts bash minimally, so +export PATH=/usr/local/bin:/usr/bin:/bin + +# debugging +set -eux + +sudo ip link set can0 down || { echo "Failed to bring down CAN interface"; exit 1; } + +# NON FD or classical only set up +# sudo ip link set can0 type can bitrate 100000 sjw 128 +sudo ip link set can0 type can bitrate 100000 sjw 128 dbitrate 400000 fd on +sudo ip link set can0 up + +mkdir -p ~/can_logs +cd ~/can_logs/ + +d=`date` + +echo "-----------------------------------------------------------" >> can_reset_log.txt +/usr/sbin/ifconfig can0 >> can_reset_log.txt +echo "CAN NOW RESET" $d >> can_reset_log.txt +sudo ip link show can0 >> can_reset_log.txt +echo "-----------------------------------------------------------" >> can_reset_log.txt + +# Compress any old log files +# +find . -type f -name "*.log" -exec zip {}.zip {} \; +# delete uncompressed log files +find . -type f -name "*.log" -exec rm -f {} \; + +/usr/bin/candump -l -t A can0 & + + +# Find and delete .log.zip files older than one month +# +find . -type f -name "*.log.zip" -mtime +30 -exec rm -f {} \; + diff --git a/git_hub_reset_codes.txt b/git_hub_reset_codes.txt new file mode 100644 index 0000000..06b20d4 --- /dev/null +++ b/git_hub_reset_codes.txt @@ -0,0 +1,16 @@ +b2ef2-46e05 +1bd6d-f3a35 +57c22-85e82 +31fde-6551c +78bb1-c8f88 +633a1-0c05b +1e3c0-e3e77 +e7aad-62ae5 +60d1a-9ee24 +b8e33-f7b1d +2580a-5fb93 +47db7-000df +05667-25d14 +08460-3cc2a +e6aba-cc300 +7dde9-81492 diff --git a/ppt2png.sh b/ppt2png.sh new file mode 100755 index 0000000..651c69c --- /dev/null +++ b/ppt2png.sh @@ -0,0 +1,29 @@ +#!/usr/bin/bash +################################################################################ +# Generate temporary file safely +temp_file=$(mktemp) +ppt "$1" > "$temp_file" + +# Count lines directly +line_count=$(wc -l < "$temp_file") + +# Calculate image height (e.g., 20 pixels per line, with a minimum height) +line_height=20 +image_height=$((line_count * line_height)) +[ "$image_height" -lt 70 ] && image_height=70 # Ensure a minimum height of 70 pixels + +# Generate image with dynamic height and fixed-width font +convert \ + -size 165x${image_height} \ + xc:lightblue \ + -font Courier \ + -pointsize 12 \ + -fill blue \ + -gravity center \ + -draw "text 0,0 '$(cat "$temp_file")'" \ + image.png + +# Clean up temporary file +gwenview image.png +rm $temp_file +################################################################################ diff --git a/reset_can.sh b/reset_can.sh new file mode 100755 index 0000000..644b756 --- /dev/null +++ b/reset_can.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +sudo ip link set can0 down +# NON FD or classical only set up +# sudo ip link set can0 type can bitrate 100000 sjw 128 +sudo ip link set can0 type can bitrate 100000 sjw 128 dbitrate 400000 fd on +sudo ip link set can0 up + +mkdir -p ~/can_logs +cd ~/can_logs/ + +d=`date` + +echo "-----------------------------------------------------------" >> can_reset_log.txt +ifconfig can0 >> can_reset_log.txt +echo "CAN NOW RESET" $d >> can_reset_log.txt +sudo ip link show can0 >> can_reset_log.txt +echo "-----------------------------------------------------------" >> can_reset_log.txt + +# Compress any old log files +# +find . -type f -name "*.log" -exec zip {}.zip {} \; +# delete uncompressed log files +find . -type f -name "*.log" -exec rm -f {} \; + +/usr/bin/candump -l -t A can0 & + + +# Find and delete .log.zip files older than one month +# +find . -type f -name "*.log.zip" -mtime +30 -exec rm -f {} \; + diff --git a/set_up_can_usb.md b/set_up_can_usb.md new file mode 100644 index 0000000..d2d709b --- /dev/null +++ b/set_up_can_usb.md @@ -0,0 +1,101 @@ + + +# Example binding slcan to a USB tty serial port +sudo slcand -o -s3 -t hw -S 3000000 /dev/ttyACM3 +sudo ip link set dev can0 up type can bitrate 100000 + +# Example seting up can0 for an SDS CAN HAT for Raspberry pi + +sudo ip link set can0 down +sudo ip link set can0 type can bitrate 100000 sjw 128 +sudo ip link set can0 up + + + +# to upgrade usb devices in chromium + +Creating a udev rule to grant write permissions to a USB device and automate updating a dongle involves the following steps: +1. Identify the USB Device + +Plug in the USB device or dongle and identify its attributes using lsusb or udevadm. +Using lsusb: + +Run: + +lsusb + +Find your device in the list. It will look something like this: + +Bus 001 Device 004: ID 1234:5678 Vendor_Name Product_Name + + Vendor ID: 1234 + Product ID: 5678 + +Using udevadm: + +Run: + +udevadm info --query=all --name=/dev/bus/usb/001/004 + +(Replace 001 and 004 with the values from lsusb.) + +This command provides detailed information about the device, such as the idVendor and idProduct. +2. Create a udev Rule + +Create a new file for your custom udev rules in /etc/udev/rules.d/. + +For example: + +sudo nano /etc/udev/rules.d/99-usb-dongle.rules + +Add the following rule: + +SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", MODE="0666" + + Replace 1234 and 5678 with your device's Vendor and Product IDs. + MODE="0666" grants read and write permissions to all users. For more restricted access, specify a group and set group ownership (e.g., GROUP="usbusers" and MODE="0660"). + +3. Reload udev Rules + +After saving the rule, reload udev rules and trigger them: + +sudo udevadm control --reload-rules +sudo udevadm trigger + +4. Test Permissions + +Unplug and replug your device, then check the permissions: + +ls -l /dev/bus/usb/001/004 + +(Replace 001 and 004 with the actual bus and device numbers.) + +It should now show the updated permissions. +5. Automate Dongle Updates + +If you have a script or tool to update the dongle, ensure it runs as the user with proper permissions. For example, create an update script: + +#!/bin/bash +echo "Updating dongle..." +# Replace with the actual command to update your dongle +your-update-command --device=/dev/bus/usb/001/004 + +Make it executable: + +chmod +x update_dongle.sh + +Run the script after ensuring permissions are correct. +6. Optional: Match by Serial Number or Other Attributes + +If multiple devices share the same Vendor/Product IDs, you can refine the rule by matching additional attributes like serial, idProduct, or idVendor. + +Example: + +SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", ATTR{serial}=="ABCDEFG12345", MODE="0666" + +You can find these attributes using: + +udevadm info --attribute-walk --name=/dev/bus/usb/001/004 + + + diff --git a/time_stamp.py b/time_stamp.py new file mode 100644 index 0000000..2c922b9 --- /dev/null +++ b/time_stamp.py @@ -0,0 +1,20 @@ + + +# Time stamp CAN messages from the serial stream. + +import sys +from datetime import datetime +import io + +def add_timestamp_to_lines(): + # Ensure stdin is read with a fallback encoding + with io.TextIOWrapper(sys.stdin.buffer, encoding='ISO8859-1', errors='replace') as stdin: + for line in stdin: + if 'CANMSG' in line or 'CMQ' in line: + timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S.%f] ") + sys.stdout.write(timestamp + line) + #else: + #sys.stdout.write(line) + +if __name__ == "__main__": + add_timestamp_to_lines()