\documentclass{report} \author{xengineering} \title{soundbox documentation} \usepackage{graphicx} \graphicspath{ {./diagrams/} } \usepackage{hyperref} \usepackage{parskip} \begin{document} \maketitle \newpage \tableofcontents \newpage \listoffigures \newpage \chapter{Introduction} \label{chap:introduction} \texttt{soundbox} is a device to connect classic audio systems to the network. \section{Versioning} This device is versioned with Semantic Versioning\footnote{\href{https://semver.org}{https://semver.org}}. The resulting version numbers have the format \texttt{..} like e.g. \texttt{2.0.3}. While Semantic Versioning is usually targeted at software only it is here used for the whole device. This includes mechanical, electronic and software aspects as shown in figure \ref{diagram:device-semver}. \begin{figure}[h] \centering \includegraphics[width=\textwidth]{device-semver.pdf} \caption{API for a device versioned with Semantic Versioning} \label{diagram:device-semver} \end{figure} This versioning makes sure that users do not have to care about the device internals at all. Devices can be seen as atomic from a user's perspective. This level of granularity is choosen because users are not expected to disassemble devices or to care about the software internals. %\section{Licensing} \chapter{User guide} In addition to \autoref{chap:introduction} `\nameref{chap:introduction}` the following sections document everything required to use \texttt{soundbox} devices.. %\section{Device setup} \section{Playing audio} For a simple audio streaming test the following commands from the FFmpeg streaming guide\footnote{\href{https://trac.ffmpeg.org/wiki/StreamingGuide\#StreamingasimpleRTPaudiostreamfromFFmpeg}{https://trac.ffmpeg.org/wiki/StreamingGuide\#StreamingasimpleRTPaudiostreamfromFFmpeg}} can be used. The following command has to be executed on the soundbox to start listening on port \texttt{5316} for incoming audio streams: \begin{verbatim} ffplay rtp://127.0.0.1:5316 \end{verbatim} As soon as the soundbox is listening the stream can be send from another computer in the same network with this command: \begin{verbatim} ffmpeg -re -f lavfi -i aevalsrc="sin(400*2*PI*t)" -ar 8000 -f mulaw \ -f rtp rtp://:5316 \end{verbatim} It will send a simple sine wave with 400~Hz to the soundbox device. Alternatively a mp3 file can be sent like this: \begin{verbatim} ffmpeg -re -i '/path/to/file.mp3' -acodec libmp3lame -ar 11025 \ -f rtp rtp://:5316 \end{verbatim} These commands allow to test the \texttt{soundbox} device setup. \chapter{Production} The given chapter contains documentation about how to produce a \texttt{soundbox} device. %\section{Printing mechanical parts} \section{Alpine Linux installation on a Raspberry Pi} Alpine Linux for the Raspberry Pi can be downloaded from the Alpine Linux\footnote{\href{https://alpinelinux.org/}{https://alpinelinux.org/}} download page. This section describes the installation procedure for the variant targeting the AArch64 architecture provided as a compressed image file. It can be downloaded and verified against a checksum with the \texttt{wget} and \texttt{sha256sum} utilities. \begin{verbatim} wget https://dl-cdn.alpinelinux.org/alpine/v3.19/releases\ /aarch64/alpine-rpi-3.19.0-aarch64.img.gz wget https://dl-cdn.alpinelinux.org/alpine/v3.19/releases\ /aarch64/alpine-rpi-3.19.0-aarch64.img.gz.sha256 sha256sum -c alpine-rpi-3.19.0-aarch64.img.gz.sha256 \end{verbatim} The image has to be flashed to a SD card which will be inserted into the Raspberry Pi. This SD card has to be put into a Linux PC first. In Linux every SD card is represented as a block device like \texttt{sda} or \texttt{sdb} with a file path like \texttt{/dev/sda}. Possibly existing partitions on the SD card are represented with that path and a number as suffix like in \texttt{/dev/sda1}. The program \texttt{lsblk} gives an overview of the currently connected block devices. The correct device name for the SD card can be identified by its size. \begin{verbatim} $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 1 59,5G 0 disk `-sda1 8:1 1 59,5G 0 part \end{verbatim} If the correct SD card file path is determined the downloaded image can be decompressed with \texttt{gzip} and flashed with \texttt{dd}. The \texttt{dd} call requires the privileges of the root user which might be temporarily accessed by prefixing \texttt{sudo}. \textbf{Warning}: \texttt{dd} will write the image to the specified block device. If that block device is the primary hard drive of the computer it will do that without further confirmation. This will make the operating system of the PC unusable. After flashing it is required to synchronize all write operations to the card with \texttt{sync}. \begin{verbatim} gzip -d alpine-rpi-3.19.0-aarch64.img.gz dd if=alpine-rpi-3.19.0-aarch64.img of= sync \end{verbatim} Afterwards the SD card can be inserted into the Raspberry Pi. To do initial configuration it should be connected to a screen via HDMI. Also a keyboard has to be connected via USB. A mouse is not required. Finally the Pi should be powered up by connecting a USB power supply to the corresponding USB power input of the Raspberry Pi. Text from the boot process should be displayed on the screen. After logging in with the username \texttt{root} and no password basic system configuration on Alpine Linux can be done interactively with \texttt{setup-alpine}. The Alpine Linux installation guide\footnote{\href{https://wiki.alpinelinux.org/wiki/Installation}{https://wiki.alpinelinux.org/wiki/Installation}} contains further details. When a diskless installation is choosen the configuration changes have to be made persistent with the \texttt{lbu} command. Otherwise they will be lost on the next reboot. \begin{verbatim} setup-alpine lbu commit -d \end{verbatim} With this setup the Alpine Linux installation is completed. %\section{Final assembly} %\chapter{Device internals} %\section{Mechanical design} %\section{Electronics} %\section{Operating system} %\section{Software} \end{document}