C,C++ Code Style Guide

This guide provides step-by-step instructions for setting up consistent formatting, rules checking, and documentation for C/C++ code using clang-format, clang-tidy, and Doxygen in VS Code. Follow this guide to ensure uniformity across the team. 1. Prerequisites Before starting, ensure you have the following tools installed: VS Code (latest version) Extensions for VS Code: C/C++ (Microsoft) Doxygen Documentation Generator Command-line tools: clang-format clang-tidy doxygen Python (for pre-commit hooks) 2. Auto-Formatting Using clang-format clang-format is used for consistent code formatting. ...

November 28, 2024 · 3 min

Kernel Log Level

Number Macro Log Level Description Equivalent 0 pr_emerg Emergency System is unusable. KERN_EMERG 1 pr_alert Alert Action must be taken immediately. KERN_ALERT 2 pr_crit Critical Critical conditions. KERN_CRIT 3 pr_err Error Error conditions. KERN_ERR 4 pr_warn Warning Warning conditions. KERN_WARNING 5 pr_notice Notice Normal but significant condition. KERN_NOTICE 6 pr_info Informational Informational messages. KERN_INFO 7 pr_debug Debug Debugging messages. KERN_DEBUG The number corresponds to the log level used by the Linux kernel, with lower numbers indicating higher severity. For example, if the log level is set to 4 (Warning), only messages from pr_emerg to pr_warn will appear in the system logs. Default log level is generally set to 6.

November 20, 2024 · 1 min

I2C

Basics of I2C Overview Synchronous, multi-master, multi-slave serial bus. Half-duplex communication (bidirectional SDA line). Uses 2 wires: SCL (clock), SDA (data). Speeds: Standard (100 kHz), Fast (400 kHz), High-Speed (3.4 MHz). Physical Layer Open-drain outputs – requires pull-up resistors. 7-bit or 10-bit addressing (supports up to 128/1024 devices). Data Frame Structure Start condition: SDA ↓ while SCL is high. Address frame: 7/10-bit address + R/W bit. ACK/NACK: Slave pulls SDA low to acknowledge. Data frames (8-bit chunks, MSB-first). Stop condition: SDA ↑ while SCL is high. Start | Address | Read/Write | ACK/NACK | Data | Stop Key Features Clock stretching: Slaves can hold SCL low to pause communication. Multi-master arbitration: Masters detect collisions via SDA monitoring. Speeds: Standard (100 kbps), Fast (400 kbps), High-Speed (3.4 Mbps). Use Cases Sensors (temperature, accelerometers). EEPROMs, RTC (Real-Time Clock) modules. Device Tree TODO Writing client device drivers TODO I2C-Tools Package in Userspace Useful for debugging, testing, some simple prototyping Accesses the I²C bus via /dev/i2c-0, /dev/i2c-1… Assume devices have registers, SMBus-like i2cdetect scan an I2C bus for devices No guarantee it works (I²C is not discoverable by the spec) [rishav] ➜ ~ i2cdetect -l i2c-0 i2c i915 gmbus dpc I2C adapter i2c-1 i2c i915 gmbus dpb I2C adapter i2c-2 i2c i915 gmbus dpd I2C adapter i2c-3 i2c AUX A/DDI A/PHY A I2C adapter i2c-4 unknown Synopsys DesignWare I2C adapter N/A i2c-5 unknown Synopsys DesignWare I2C adapter N/A i2c-6 unknown SMBus I801 adapter at f040 N/A [rishav] ➜ ~ i2cdetect -y 2 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- -- 30: -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- No response 28 Response from address 28 UU Address in use (by driver) i2cget, i2cset i2cget: read a register value i2cset: set a register value Can use various types of SMBus and I2C transactions Limited to 8-bit register address # i2cget -y 2 0x28 0x1b 0x21 # i2cset -y 2 0x28 0x55 # i2cdump dump value of all registers i2ctransfer i2ctransfer: the “swiss army knife of Linux I2C”, in userspace Example: reimplement the i2cget -y 2 0x28 0x1b command: # i2ctransfer -y 2 w1@0x28 0x1b r1@0x28 0x21 # w1@0x28 Write transaction, 1 byte, client address 0x28 0x1b Data to send in the write transaction r1@0x28 Read transaction, 1 byte, client address 0x28 Troubleshooting Return code from i2c_*() functions — Never ignore errors! Kernel logs i2c-tools Oscilloscope or logic analyzer No ACK from client - systematic Problem: a client never responds to transactions ...

November 8, 2024 · 4 min

Flattened Devicetree (DTB) Format

Device Tree !assets/Pasted image 20241108115912.png Standard Properties compatible The compatible property value consists of one or more strings that define the specific programming model for the device. This list of strings should be used by a client program for device driver selection. The property value consists of a concatenated list of null terminated strings, from most specific to most general. They allow a device to express its compatibility with a family of similar devices, potentially allowing a single device driver to match against several devices. ...

November 8, 2024 · 1 min

Format Comparison

Compression Format Comparison Format Compression Ratio Speed (Compression/Decompression) Encryption Speciality/Uniqueness Open Source/ License gz (.gz) Moderate Fast / Fast No native (use gpg) Widely supported and fast for most general uses. YesGNU GPL bzip2 (.bz2) Better than gzip Slow / Moderate No native (use gpg) Higher compression ratio and robust error detection. YesBSD xz (.xz) Best Very slow / Fast No native (use gpg) Highest compression ratio; slow compression speed. YesGNU GPL zip (.zip) Moderate Fast / Fast Built-in encryption Commonly used with built-in encryption and wide software support. YesVarious (Info-ZIP) tar (.tar) Depends on method Fast (archive only) / Fast (archive only) No native (use gpg) Primarily used for archiving; compression depends on additional tools. YesGNU GPL 7z (.7z) Excellent Moderate / Slow at high settings AES-256 encryption Excellent compression with advanced encryption options. YesLGPL rar (.rar) Good Moderate / Moderate AES-256 encryption Includes error recovery and strong encryption; proprietary format. NoProprietary lzma (.lzma) Very high Very slow / Moderate No native (use gpg) High compression ratio with reliable decompression; requires separate decompressor. YesGNU GPL Key Points gz (.gz): Well-rounded for speed and compatibility, commonly used for general purposes. bzip2 (.bz2): Provides a higher compression ratio compared to gzip, though slower. xz (.xz): Offers the best compression ratio but at the cost of slower compression speed. zip (.zip): Convenient with built-in encryption and broad compatibility. tar (.tar): Primarily an archiving format; often used in combination with other compression methods. 7z (.7z): Excellent compression and strong encryption; requires specific software for full support. rar (.rar): Known for robust recovery features and encryption, but is proprietary. lzma (.lzma): Delivers a high compression ratio and reliable decompression, though it’s slow.

August 7, 2024 · 2 min

CU (call up another system)

Official Description The cu command is used to call up another system and act as a dial-in terminal (mostly on a serial line ie. serial monitor). It can also do simple file transfers with no error checking. cu is part of the UUCP(Unix to Unix Copy Program) source but has been split into its own package because it can be useful even if you do not do uucp. Usage Start ...

June 18, 2024 · 1 min

Hola Bot

Holonomic Drive Robot: A Versatile Path-Planning Machine !assets/Pasted image 20241201191055.png Overview The Holonomic Drive Robot is an innovative, three-wheeled robot designed for precision path planning and image-based drawing. It combines advanced robotics algorithms, custom hardware, and creative problem-solving to deliver exceptional performance in a variety of tasks, from geometric pattern generation to drawing intricate images like logos. Key Highlights 1. Motion Planning and Control Implemented a novel path-planning approach to optimize motor velocity and trajectory precision. Designed custom algorithms to address trajectory distortion caused by motor speed limitations. 2. Hardware and Software Integration Successfully integrated ESP32, eYFI Mega, stepper motors, and LiPo batteries into a cohesive system. Overcame challenges such as faulty motor drivers and optimized power delivery for reliability. 3. Image Processing and Simulation Extracted contours from images and translated them into robot motion commands. Utilized ROS and Gazebo for testing and refining the system in a simulated environment. 4. Real-Time Problem Solving Debugged critical hardware issues, such as malfunctioning motor drivers and damaged LiPo cells. Enhanced communication latency between the laptop and ESP32 from 1 second to 200ms by identifying and resolving protocol bottlenecks. 5. Creative Outputs Enabled the robot to draw patterns such as Lissajous figures (infinity loops) and complex logos. Developed a custom ink mixture to ensure visibility and erasability for pattern drawing. Technologies Used Hardware: ESP32, eYFI Mega, LiPo batteries, and stepper motors. Software: ROS for robot control, Gazebo for simulation, and Python, C for software logic. Tools & Libraries: OpenCV for image processing, AccelStepper for motor control, and custom ROS packages for integration. Development Timeline January - February 2023: Prototyping and Hardware Development Designed and built the physical robot body, integrating motor drivers, sensors, and controllers. Calibrated the camera with over 100 samples for precise localization. Debugged and optimized motor driver configurations, achieving simultaneous operation of all wheels. Developed non-blocking motor control using the AccelStepper library. March 2023: Software Refinement and Final Tests Created a contour extraction function for converting images into path points for drawing. Integrated a servo-based pen mechanism for on/off control during drawing operations. Conducted intensive testing, fixing indexing bugs, and optimizing scripts for various patterns, including the Snapchat logo and infinity shapes. Demonstrated successful path-following in a simulation environment using Gazebo. !assets/hola-collage 1.jpg Challenges Overcome Latency in Data Transmission: Resolved slow communication by identifying a missing newline character in transmitted data, reducing latency from 1 second to 200ms. Battery and Power Issues: Diagnosed and replaced faulty LiPo battery cells, ensuring uninterrupted operation. Hardware Failures: Addressed motor driver failures and loose connections with creative soldering solutions and robust wiring techniques. Achievements Successfully implemented conditional path-following to optimize motor velocity during complex path execution. Demonstrated precise image drawing with minimal distortion using camera-calibrated localization. Created a detailed documentation repository and shared project outcomes through YouTube videos, showcasing the robot’s capabilities. Media Video Demonstrations: Watch Demo Video Conclusion The Holonomic Drive Robot is a testament to innovative thinking, technical expertise, and perseverance. It serves as a versatile platform for robotics experimentation, offering potential applications in art, industrial automation, and beyond. ...

March 30, 2023 · 3 min

Man Pages

Sections Executable programs or shell commands System calls (functions provided by the kernel) Library calls (functions within program libraries) Special files (usually found in /dev) File formats and conventions, e.g. /etc/passwd Games Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7), man-pages(7) System administration commands (usually only for root) Kernel routines (Non standard) To see if any COMMAND has available sections use whatis of man -f man -f COMMAND

October 18, 2022 · 1 min

Introduction to Linux

What is Operating System ? An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs. What is Kernel? The kernel is a part of operating system which has complete control over everything in the system. It is the portion of the operating system code that is always resident in memory,[2] and facilitates interactions between hardware and software components. What is Linux? Linux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance. ...

July 12, 2022 · 6 min

degoogle rom

/e/ OS settings put global captive_portal_http_url http://204.ecloud.global settings put global captive_portal_https_url https://e.foundation/net_204/ change ntp settings put global ntp_server pool.ntp.org DeBlot pre-installed apps Use this command to list all the apps installed adb shell pm list packages To search any particular keyword use grep command adb shell pm list packages | grep 'keyword' Package names will be somewhat like this, eg. for Google Assistant its com.android.hotwordenrollment.okgoogle, for Google Auto its com.google.android.projection.gearhead Copy the name of the package you want to uninstall and use the following command ...

November 23, 2021 · 1 min