% -------------------------------------- % CHAPTER: Operating System % -------------------------------------- \section{Operating System} \label{sec:Operating System} The software running on the MPU is based on a preemtive real time operating systems and manages the tasks the satellite has to fulfill. The Operating system, on which the whole software is based on, is FreeRTOS. %\hyperlink{http://www.freertos.org}{FreeRTOS}.\\ \url{http://www.freertos.org} \subsection{FreeRTOS} FreeRTOS is a preemtive multitasking real time operating sytem. It provides methods for creating and sceduling tasks and implements queues and semaphores for communication between, and synchronisazion of the tasks. \subsection{MPU Tasks} The MPU gets commands from the low level control interface IHU and from the Hackled Handheld Transceiver. The IHU sends mainly commands which are related to the power management, whereby the Hackeld Handheld Transceiver is the command communication interface between the satellite and a base station on earth. The satellite has to send its bacon signal permanently. This way it can be located in space. When the satellite gets in communication distance to a base station on earth, a special signal is sent to the satellite which is received by the IHU via the Hacked Handheld Scanner. The IHU then tells the MPU to swith on the Hacked Handheld Transceiver. From now on a communication between the base station and the satellite is possible. The satellite can receive configuration commands and data request commands from the base station. The configuration commands are used to set parameters like e.g. the sampling rate of the microphone (piezzo element), or to set parameters for the camera, as well as to tell the satellite when and how often to take pictures. \subsubsection{Messages} The communication inside the operatin system is based on a message system. Tasks can send messages to each others. FreeRTOS provides with an object called xQueue. This is used to communnicate between tasks in FreeRTOS. An xQueue is primarily a void pointer which can be sent to a task. This pointer can point to any address in the memory. In this implementation xQueues are used to point to structures which represent "Messages". \begin{lstlisting} typedef struct { void *pData; Sender_t Sender; }Message_t; \end{lstlisting} A message consists of a pointer to the data which shall be sent and an identifier of the sender. The Sender type is just an enumeration of the tasks that want to communicate with each others. \subsubsection{Kernel Process Task} The Kernel Process Task is reponsible for dispatching the jobs and assigning them to the according tasks. Each time a communication interface (UART, SPI, I2C) receives data, its interrupt service routine notifies the Communication Process about this event. The Communication Process collects all arriving data and when a comand is completely received, the Kernel Process Task is notified, gets the command via a message, checks this command and sends the respective message to the task which is responsible for the execution of the command. \subsubsection{IHU Process Task} It seems that the IHU Process Task is not needed, so it will be taken out of the operating system. Actually the Internal Householding Unit IHU is providing the satellite with energy which is a rather limited ressource. Therefore it is necessary to implement some kind of protocol to manage the energy consumtion of all satellite components. This IHU Process Tasks was ment to handle this protocol, but right now it looks like if this task is taken over by the Kernel Processing Task. \subsubsection{Communication Process Task} This tasks purpose is to receive commands and send responses over the respecting interface (UART, SPI, I2C). When ever a byte arrives at one of the interfaces, the respective interrupt service routine ISR is triggert. The ISR copies the received byte to a buffer and if the end of frame EOF character is received, it sends a message to the communication task. The communication task then analyses the received frame and informs the Kernel Process Task. The Communication Task can also receive messages from other tasks. These messages contain data frames that shall be sent via one of the interfaces. When such a message is received by the Communication Task, it sends the messages data over the respective interface. \subsubsection{Alien Encounter Process Task} The Alien Encounter Task is waiting for a message which is sent by the interrupt service routine of the according external interrupt. When ever an alien is passing by the satellite who is willing to press the Alien Encounter Button, and also can manage to do so, an external interrupt is triggert. \subsubsection{Light Sensor Process Task} The Light Sensor Process Task is responsible for handling light sensor related jobs. The light sensors are placed such way that they detect light in all three dimmensions in relation to the satellites local coordinate system. When sampling the intensity of light for these directions it shall be possible to calculate the satellites, especially the cameras orintation related to sun and earth. This should help to decide at which moment a picture of the earth can be taken. The sampling rate of the light sensors can be adjusted and is depending of the angular velocity of the satellites rotation. \subsubsection{Camera Process Task} The Camera Process Task handels all camera related jobs. It triggers the camera to take pictures and reads the cammeras data (pictures) from the cameras memory to a buffer. When ever the buffer is filled, this task sends a message to the Memory Process Task to store the data in the SD-Card. \subsubsection{Memory Process Task} The responsibility of the Memory Process Task is to read and write data from and to the SD-Card. This task can receive messages from any other task. If a message sender wants to write data to the SD-Card, the Memory Process Task reads the data from the message and sends it to the SD-Card. If a task wants to read data from the SD-Card, the Memory Process Task reads the desired data from the SD-Card and writes it to a message which is then sent to the requesting task.