void DSL_DRV_DeviceDelete(void)
{
   DSL_int_t i;

   printf("Module will be unloaded"DSL_DRV_CRLF);

   DSL_DRV_Cleanup();

   for (i = 0; i < DSL_DRV_MAX_ENTITIES; i++)
   {
      iosDevDelete(&DSL_DevHeader[i].DevHdr);
   }

   /* remove the driver also */
   iosDrvRemove(DSL_DRV_DrvNum, IFX_TRUE);

   /* and allow new DevCreate */
   DSL_DRV_DrvNum = -1;
}
Beispiel #2
0
/**
 * @brief Retirer le driver.
 * @return OK en cas de succès, ERROR sinon.
 */
int pe_driverUninstall()
{
	int i;
	if(driver_id != -1)
	{
		/* L'appel ne renvoit pas d'erreur bien que des capteurs soient ouverts.
		 * Nous vérifions donc qu'aucun capteur ne soit ouvert.
		 */
		
		semTake(mut_table_capt, WAIT_FOREVER);
		for(i=0; i < DEVICE_MAX_COUNT; ++i)
		{
			if(table_capt[i].specific.state == opened)
			{
				errnoSet(ECPTBUSY);
				return ERROR;
			}
		}
		semGive(mut_table_capt);
		
		if(iosDrvRemove(driver_id, FALSE) == ERROR)
		{
			// The driver has open files.
			errnoSet(ECPTBUSY);
			return ERROR;
		}
		
		driver_id = -1;
		
		if(pe_cleanup_resources() == ERROR)
		{
			return ERROR;
		}
	}
	else
	{
		errnoSet(ENINSTALLED);
		return ERROR;
	}
	
	return OK;
}
Beispiel #3
0
int drvRemove()
{
	myDev * i = first;
	myDev * drv;
	if (semMAdmin == 0)
	{
		errnoSet(NOT_INSTALLED);
		return -1;
	}
	if (semTake(semMAdmin,WAIT_FOREVER)==-1)
	{
		errnoSet(SEM_ERR);
		return -1;
	}
	if (iosDrvRemove(numPilote,1) == -1) //And force closure of open files
	{
		errnoSet(REMOVE_ERROR);
		semGive(semMAdmin);
		return -1;
	}
	taskDelete(tMsgDispatchID);
	msgQDelete(isrmq);
	//Delete all devices  : 
	while (i!=NULL)
	{
		drv = i;
		i = drv->next;
		iosDevDelete((DEV_HDR*)drv);
		semTake(drv->semMData,WAIT_FOREVER); //Let pending ops finish
		semDelete(drv->semMData);
		free(drv);
	}
	numPilote = -1;
	first = NULL;
	semDelete(semMAdmin);
	semMAdmin=0;
	return 0;
}