Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // C program to illustrate
- // non I/O blocking calls
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <fcntl.h> // library for fcntl function
- #include <errno.h>
- #include "logging.h"
- #include <string.h>
- #include <time.h>
- #define MSGSIZE 6
- #define UPDATE_INTERVAL 17
- int main(int argc, char **argv) {
- int fdPipe[2]; // File descriptor för pipe
- pipe(fdPipe); // Skapar en pipe
- pid_t cpid = fork(); // Skapar en till process
- if (fcntl(fdPipe[0], F_SETFL, O_NONBLOCK) < 0)
- exit(2);
- switch(cpid) {
- // Fel
- case -1: exit(3);
- // Child process
- case 0:
- dup2(fdPipe[1], STDOUT_FILENO); // Skriva till stdout, skrivs till pipe istället
- close(fdPipe[1]); // Stäng änden som inte används
- mqtt_sub();
- break;
- // Parent process
- default:
- dup2(fdPipe[0], STDIN_FILENO);
- close(fdPipe[0]);
- parent_init();
- }
- return 0;
- }
- int parent_init(){
- int nrOfEntries = 0;
- LogEntry sensorLog[200];
- char updates[3000] = "\0";
- time_t omega;
- time_t alpha = time(NULL);
- time_t seconds = UPDATE_INTERVAL; // Hur många sekunder mellan varje thingspeak update
- omega = alpha + seconds; // Detta är början
- printf("start time is : %s", ctime(&alpha));
- // För resten av programmet, läs och logga data och uppdatera thingspeak varje UPDATE_INTERVAL
- char stdinput[MSGSIZE];
- int nread;
- while (1) {
- while (fgets(stdinput, 10, stdin) != NULL) {
- // text read
- // by default return no. of bytes
- // which read call read at that time
- fprintf(stdout,"MSG = %s", stdinput);
- // sensorLogging(sensorLog, &nrOfEntries);
- /* while (alpha < omega){ // Loggar data under UPDATE_INTERVAL
- alpha = time(NULL);
- }
- fprintf(stdout,"En minut har passerat!\n");
- sortLog(sensorLog, &nrOfEntries); // Slå ihop sensorvärden som har skett samma sekund
- buildUpdates(sensorLog, nrOfEntries); // Skapar strängar av datum,tid och effekt i CSV format
- buildURI(sensorLog, nrOfEntries, updates); // Bygger strängen av all sensordata som ska skickas till thingspeak
- if(nrOfEntries > 0){
- curling(updates);
- }
- nrOfEntries = 0; // Börjar om, obs structen har kvar sina värden tills de skrivs över
- omega = alpha + seconds; // Detta är den nya början*/
- }
- }
- }
- void sensorLogging(LogEntry *sensorLog, int *entries){
- int nread;
- char line[MSGSIZE];
- while( fgets(line, MSGSIZE,stdin) != NULL){
- fprintf(stdout,"%s",line);
- }
- // text read
- // by default return no. of bytes
- // which read call read at that time
- //fprintf(stdout,"MSG = %s, COUNT: %d\n", buf, *entries);
- //loggingParent(sensorLog, buf, entries);
- }
Advertisement
Add Comment
Please, Sign In to add comment