예제 #1
0
파일: py_gpio.c 프로젝트: LeMaker/LMK.GPIO
// python function cleanup(channel=None)
static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
{
	int i = 0;
	int found = 0,v = 0;
	int channel = -666;
	unsigned int gpio;
    	unsigned int sys_gpio;
	static char *kwlist[] = {"channel", NULL};
	v = get_lmk_revision();
	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, &channel))
		return NULL;

	if (channel != -666 && get_gpio_number(channel, &gpio, &sys_gpio))
		return NULL;

   if (module_setup && !setup_error) {
      if (channel == -666) {
         // clean up any /sys/class exports
         event_cleanup_all();
         
         // set everything back to input
         for (i=0; i<256; i++) {
            if (gpio_direction[i] != -1) {
				debug("Clean %d \n",i);
				if(v == BANANAPRO){
					setup_gpio(*(pinTobcm_BP+i), INPUT, PUD_OFF);//take care
				} else if(v == LEMAKER_GUITAR){
					setup_gpio(*(pinTobcm_GT+i), INPUT, PUD_OFF);//take care
				}
				gpio_direction[i] = -1;
				found = 1;
            }
         }
      } else {
         // clean up any /sys/class exports
         event_cleanup(sys_gpio);

         // set everything back to input
         if (gpio_direction[sys_gpio] != -1) {
            setup_gpio(gpio, INPUT, PUD_OFF);
            gpio_direction[i] = -1;
            found = 1;
         }
      }
   }

	//printf("-->Before set warning\n");
	//printf("found %d \t gpio_warnings %d\n",found,gpio_warnings);
   // check if any channels set up - if not warn about misuse of GPIO.cleanup()
   if (!found && gpio_warnings) {
      PyErr_WarnEx(NULL, "No channels have been set up yet - nothing to clean up!  Try cleaning up at the end of your program instead!", 1);
   }
	//printf("-->After set warning\n");

   Py_RETURN_NONE;
}
// python function cleanup(channel=None)
static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
{
   int i;
   int found = 0;
   int channel = -666;
   unsigned int gpio;
   static char *kwlist[] = {"channel", NULL};

   if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, &channel))
      return NULL;

   if (channel != -666 && get_gpio_number(channel, &gpio))
      return NULL;

   if (module_setup && !setup_error) {
      if (channel == -666) {
         // clean up any /sys/class exports
         event_cleanup_all();

         // set everything back to input
         for (i=0; i<54; i++) {
            if (gpio_direction[i] != -1) {
               setup_gpio(i, INPUT, PUD_OFF);
               gpio_direction[i] = -1;
               found = 1;
            }
         }
      } else {
         // clean up any /sys/class exports
         event_cleanup(gpio);

         // set everything back to input
         if (gpio_direction[gpio] != -1) {
            setup_gpio(gpio, INPUT, PUD_OFF);
            gpio_direction[i] = -1;
            found = 1;
         }
      }
   }

   // check if any channels set up - if not warn about misuse of GPIO.cleanup()
   if (!found && gpio_warnings) {
      PyErr_WarnEx(NULL, "No channels have been set up yet - nothing to clean up!  Try cleaning up at the end of your program instead!", 1);
   }

   Py_RETURN_NONE;
}