From c72d79dd1f4a93c0c7cd07821d8e6416eb48952f Mon Sep 17 00:00:00 2001 From: henyxia Date: Wed, 1 Apr 2015 20:09:16 +0200 Subject: [PATCH] Semaphores controlled --- bus.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- main.c | 5 ++++- 2 files changed, 98 insertions(+), 8 deletions(-) diff --git a/bus.c b/bus.c index 38a3d5d..d52312a 100644 --- a/bus.c +++ b/bus.c @@ -6,16 +6,95 @@ #include #include #include +#include +#include #include "printx.h" #include "ui.h" #include "nfc.h" #include "hvc.h" -#define CMD_MAX 70 +#define CMD_MAX 70 +#define KEY 1100 +#define SEM_NUMBER 2 +#define SEM_INPUT 0 +#define SEM_OUTPUT 1 int bus; bool busFree = true; bool busStop = false; +int mySem; + +int get_sem(int i) +{ + ushort semarr[30]; + union semun + { + int val; + struct semid_ds *buf; + ushort *array; + }arg; + + arg.array = semarr; + semctl(mySem, i, GETALL, arg); + return semarr[i]; +} + +void show_sem(int i) +{ + int val; + val = get_sem(i); + printf("semaphore[%d]=%d\n", i, val); +} + +void create_sem(int N) +{ + printx(DEBUG, BUS, "create %d semaphores\n", N); + mySem = semget(KEY, N, 0666 | IPC_CREAT); + if(mySem < 0) + printx(ERROR, BUS, "Unable to create the semaphore\n"); +} + +void init_sem(int N) +{ + int j; + int retval; + union semun + { + int val; + struct semid_ds *buf; + ushort *array; + }arg; + arg.val = 1; + for (j=0; j