/*Initialisation des outils necessaires au fontionnement du thread*/
void commande_windows(arg_commande_windows_t* ipc)
{	
	statut = ipc->shm_statut;
	lot = ipc->shm_lot;
	entrepot = ipc->shm_entrepot;
	mtx_entrepot = ipc->entrepot;
	sem_erreur_palette = ipc->palette;
	sem_erreur_carton = ipc->carton;
	sem_AU = ipc->AU;
	sem_clapet = ipc->clapet;
	wait_order(my_socket);
}
/*
 * contol read/write threads by handling global_run_operation
 */
void *rw_ctl_loop(int ctl_fd)
{
	ssize_t rlen;
	char buf[HOST_MSG_SIZE];
	int ret;

	/* Setup signal handlers */
	signal(SIGTERM, signal_handler);
	signal(SIGINT, signal_handler);
	signal(SIGQUIT, signal_handler);

	while (!global_sig_receive) {

		ret = wait_order(ctl_fd);
		if (ret < 0)
			break;

		rlen = read(ctl_fd, buf, sizeof(buf));
		if (rlen < 0) {
			pr_err("read data error in ctl thread\n");
			goto error;
		}

		if (rlen == 2 && buf[0] == '1') {
			/*
			 * If host writes '1' to a control path,
			 * this controller wakes all read/write threads.
			 */
			global_run_operation = true;
			pthread_cond_broadcast(&cond_wakeup);
			pr_debug("Wake up all read/write threads\n");
		} else if (rlen == 2 && buf[0] == '0') {
			/*
			 * If host writes '0' to a control path, read/write
			 * threads will wait for notification from Host.
			 */
			global_run_operation = false;
			pr_debug("Stop all read/write threads\n");
		} else
			pr_info("Invalid host notification: %s\n", buf);
	}

	return NULL;

error:
	exit(EXIT_FAILURE);
}