SmartCradle v1
Baby smart cradle
main.c File Reference

Main process implementation. More...

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h>
#include <errno.h>
#include <string.h>
#include <mqueue.h>
#include <sys/mman.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <linux/types.h>
#include <signal.h>
#include <sys/time.h>
#include "../inc/database.h"
#include "../inc/microphone.h"
#include "../inc/livestream.h"
#include "../inc/motor.h"
#include "../inc/dht.h"
Include dependency graph for main.c:

Go to the source code of this file.

Macros

#define SHMEMOBJ_NAME   "/shLocalDaemon"
 
#define MSGQOBJ_NAME   "/mqLocalDaemon"
 
#define MAX_MSG_LEN   10
 
#define streamPrio   2
 
#define motorPrio   2
 
#define updateDatabasePrio   3
 
#define sensorPrio   4
 
#define motorTimeout   10
 
#define sensorSample   10
 

Functions

void initThread (int priority, pthread_attr_t *pthread_attr, struct sched_param *pthread_param)
 Initializes the thread parameters with defined priority. More...
 
void checkErrors (int status)
 Check for errors upon creating threads. More...
 
static void signalHandler (int signo)
 Proces signal handler. More...
 
void * tReadSensor (void *arg)
 Reads from temperature and humidity sensor and stores values. More...
 
void * tStartStopStream (void *arg)
 Controls the livestream depending on livestream flag value. More...
 
void * tStartStopMotor (void *arg)
 Controls the motor depending on swing flag value. More...
 
void * tUpdateDatabase (void *arg)
 Update values to/from database. More...
 
int main (int argc, char *argv[])
 

Variables

mqd_t msgq_id
 
struct mq_attr msgq_attr
 
_Bool motorFlag = 0
 
_Bool streamFlag = 0
 
_Bool sensorFlag = 0
 
pthread_mutex_t motorFlag_mutex = PTHREAD_MUTEX_INITIALIZER
 
pthread_mutex_t streamFlag_mutex = PTHREAD_MUTEX_INITIALIZER
 
pthread_mutex_t sensorFlag_mutex = PTHREAD_MUTEX_INITIALIZER
 
float databaseTemperature = 0
 
float databaseHumidity = 0
 
pid_t daemonPID
 

Detailed Description

Main process implementation.

Author
José Carvalho, João Carneiro
Date
2022-01-13

Definition in file main.c.

Macro Definition Documentation

◆ MAX_MSG_LEN

#define MAX_MSG_LEN   10

Message queue maximum message size

Definition at line 34 of file main.c.

◆ motorPrio

#define motorPrio   2

tStartStopMotor priority

Definition at line 39 of file main.c.

◆ motorTimeout

#define motorTimeout   10

Motor timeout in minutes

Definition at line 43 of file main.c.

◆ MSGQOBJ_NAME

#define MSGQOBJ_NAME   "/mqLocalDaemon"

Message queue name

Definition at line 33 of file main.c.

◆ sensorPrio

#define sensorPrio   4

tReadSensor priority

Definition at line 41 of file main.c.

◆ sensorSample

#define sensorSample   10

Sensor sampling time in minutes

Definition at line 44 of file main.c.

◆ SHMEMOBJ_NAME

#define SHMEMOBJ_NAME   "/shLocalDaemon"

Shared memory name

Definition at line 32 of file main.c.

◆ streamPrio

#define streamPrio   2

tStartStopStream priority

Definition at line 38 of file main.c.

◆ updateDatabasePrio

#define updateDatabasePrio   3

tUpdateDatabase priority

Definition at line 40 of file main.c.

Function Documentation

◆ checkErrors()

void checkErrors ( int  status)

Check for errors upon creating threads.

Parameters
status: Value returned from functions

Definition at line 472 of file main.c.

◆ initThread()

void initThread ( int  priority,
pthread_attr_t *  pthread_attr,
struct sched_param *  pthread_param 
)

Initializes the thread parameters with defined priority.

Parameters
priorityThread priority
pthread_attrThread attributes structure
pthread_paramThread parameters structure

Definition at line 457 of file main.c.

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 317 of file main.c.

◆ signalHandler()

static void signalHandler ( int  signo)
static

Proces signal handler.

Parameters
signoSignal received

Definition at line 80 of file main.c.

◆ tReadSensor()

void * tReadSensor ( void *  arg)

Reads from temperature and humidity sensor and stores values.

If sampling fails, there will be another 2 consecutive samplings. If it fails again, the thread will go into sleep until next sample time

Definition at line 119 of file main.c.

◆ tStartStopMotor()

void * tStartStopMotor ( void *  arg)

Controls the motor depending on swing flag value.

Definition at line 196 of file main.c.

◆ tStartStopStream()

void * tStartStopStream ( void *  arg)

Controls the livestream depending on livestream flag value.

Definition at line 176 of file main.c.

◆ tUpdateDatabase()

void * tUpdateDatabase ( void *  arg)

Update values to/from database.

Updates temperature and humidity in database, get livestream flag and swing flag values from database

Definition at line 239 of file main.c.

Variable Documentation

◆ daemonPID

pid_t daemonPID

Daemon PID

Definition at line 57 of file main.c.

◆ databaseHumidity

float databaseHumidity = 0

Humidity to send to database

Definition at line 55 of file main.c.

◆ databaseTemperature

float databaseTemperature = 0

Temperature to send to database

Definition at line 54 of file main.c.

◆ motorFlag

_Bool motorFlag = 0

Motor flag

Definition at line 46 of file main.c.

◆ motorFlag_mutex

pthread_mutex_t motorFlag_mutex = PTHREAD_MUTEX_INITIALIZER

shared variable (motorFlag)

Definition at line 50 of file main.c.

◆ msgq_attr

struct mq_attr msgq_attr

Message queue attributes

Definition at line 36 of file main.c.

◆ msgq_id

mqd_t msgq_id

Message queue ID

Definition at line 35 of file main.c.

◆ sensorFlag

_Bool sensorFlag = 0

Sensor sample successful flag

Definition at line 48 of file main.c.

◆ sensorFlag_mutex

pthread_mutex_t sensorFlag_mutex = PTHREAD_MUTEX_INITIALIZER

shared variable (sensorFlag)

Definition at line 52 of file main.c.

◆ streamFlag

_Bool streamFlag = 0

Livestream flag

Definition at line 47 of file main.c.

◆ streamFlag_mutex

pthread_mutex_t streamFlag_mutex = PTHREAD_MUTEX_INITIALIZER

shared variable (streamFlag)

Definition at line 51 of file main.c.