Despite the widespread production of various custom computer peripherals, accessible resources for
creating custom computer mice can be relatively scarce. In response to this, this work describes
the establishment of a platform for creating computer mice, providing individuals with less
advanced knowledge a valuable source of information to achieve their goals.
The first part of the thesis provides a rough overview of the offerings of computer mice, followed
by a breakdown of the main components of a basic computer mouse into hardware and software.
Hardware is further divided into the casing and the printed circuit board.
The second part of the task focuses on the design and manufacture of hardware. Firstly, through a
description of the selection of individual electronic components, attention is given to the printed
circuit board. After describing the component selection, the preparation of the working environment
follows, resulting in the design of the circuit in the KiCAD program. This is followed by the
design of the schematic connection, where we encounter minor challenges, such as addressing signal
reflections, and later, the design of the specific circuit shape. Finally, some words are dedicated
to the process of ordering the circuit from an external supplier and comments on the difficulties
encountered during the design process.
In the last part, the development of software is described through a comparison of the C and Rust
programming languages. We begin with setting up the requirements that we expect the software to
fulfill. We then proceed with hardware and workspace preparations, reviewing tools offered by
various manufacturers, open-source tools, and less established alternatives. After the
preparations, we focus on the operation of individual components that the software must communicate
with or must "understand". This includes the USB interface in HID mode, motion sensor, and
incremental encoder.
The implementation of the software begins with the C programming language. We perform workspace
preparations, categorizing selected tools into groups according to their usage type, followed by a
description of the implementation of the connection with the previously described electronic
components. At the end of this section, we encounter an issue with the lack of modularity in the
developed software, prompting us to attempt a restructuring of the program's structure using the
same tools to achieve better abstraction for our needs.
The implementation then starts from scratch using different tools, primarily the Rust programming
language. Using the same tool categorization as with the C programming language, we attempt to
compare the tools used, expressing the advantages of one over the other. The same is done with the
implementation, where we highlight some advantages of developing with the Rust programming language
through a breakdown into user code and libraries.
In the final part, we focus on a direct comparison of the development tools used and express
general challenges and limitations encountered.
Within this work, we have developed an open-source modular platform consisting of a casing, printed
circuit board, and software. These project components can assist users in the assembly of their
computer mice either collectively or individually, serving as a starting point for creating their
custom computer mice. With an emphasis on the comparison of technologies during software
development, we have arrived at an interesting conclusion that choosing the Rust programming
language is often sensible, even though the initial step compared to the C language is more
challenging due to its more complex nature. Choosing the Rust programming language, especially in
the world of embedded systems during the development phase, can lead to faster production, while
also contributing to improved memory security and program structure.
|