Example #1
0
jint Java_eu_jm0_wiringX_wiringX_Setup(JNIEnv *env, jclass c, jstring platform, jobject logger) {
	// create UTF-8 encoded C-string from given jstring
	const char *platformc = (*env)->GetStringUTFChars(env, platform, NULL);
	if(platformc == NULL) {
		// allocating a C-String failed!
		// at this point an exception should have already been thrown.
		// The return value is now irrelevant.
		return 0;
	}

	// register logger, if any
	void *handler = NULL;
	if(logger != NULL) {
		int r = registerLogConsumer(env, logger);
		if(r != 0) {
			// unexpected failure
			// exceptions have already been thrown
			return -1;
		}

		// looks good
		handler = &logconsumerhandler;
	}

	// call original function
	int r = wiringXSetup(platformc, handler);

	// free resources
	(*env)->ReleaseStringUTFChars(env, platform, platformc);
	
	// return result
	return r;
}
Example #2
0
static struct threadqueue_t *initDev(JsonNode *jdevice) {
	char *platform = GPIO_PLATFORM;

	if(config_setting_get_string("gpio-platform", 0, &platform) != 0) {
		logprintf(LOG_ERR, "no gpio-platform configured");
		return NULL;
	}
	if(strcmp(platform, "none") == 0) {
		FREE(platform);
		logprintf(LOG_ERR, "no gpio-platform configured");
		return NULL;
	}
	if(wiringXSetup(platform, logprintf1) < 0) {
		FREE(platform);
		return NULL;
	}
	FREE(platform);

	loop = 1;
	char *output = json_stringify(jdevice, NULL);
	JsonNode *json = json_decode(output);
	json_free(output);

	struct protocol_threads_t *node = protocol_thread_init(gpio_switch, json);
	return threads_register("gpio_switch", &thread, (void *)node, 0);
}
Example #3
0
static struct threadqueue_t *dht22InitDev(JsonNode *jdevice) {
	dht22_loop = 1;
	wiringXSetup();
	char *output = json_stringify(jdevice, NULL);
	JsonNode *json = json_decode(output);
	json_free(output);

	struct protocol_threads_t *node = protocol_thread_init(dht22, json);
	return threads_register("dht22", &dht22Parse, (void *)node, 0);
}
Example #4
0
int main(void) {
	wiringXSetup();

	pinMode(0, OUTPUT);
	while(1) {
		digitalWrite(0, HIGH);
		sleep(1);
		digitalWrite(0, LOW);
		sleep(1);
	}
}
Example #5
0
File: pwm.c Project: radxa/wiringX
int main(void) {
	int pin = 4;

	wiringXSetup();
	pinMode(pin, PWM_OUTPUT);

	wiringXPWMEnable(pin, 0);
	wiringXSetPWM(pin, 1000, 50);
	wiringXPWMEnable(pin, 1);

	sleep(15);
	wiringXPWMEnable(pin, 0);
}
int main(void) {
	int fd;
	char s[5];

	wiringXSetup();

	pinMode(blinkPin, OUTPUT);
	
	if ((fd = wiringXserialOpen ("/dev/ttyS0", 115200)) < 0)	{
	    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
	    return -1;
	}

	interruptSetup();

	while(1){
		
		wiringXserialPutchar(fd, 0x53);
		sprintf(s, "%d", Signal);
		wiringXserialPuts (fd , s);
		wiringXserialPutchar(fd, 0x0D);
		wiringXserialPutchar(fd, 0x0A);

		if (QS == 1){     //  A Heartbeat Was Found
				       // BPM and IBI have been Determined
				       // Quantified Self "QS" true when arduino finds a heartbeat
			digitalWrite(blinkPin,LOW);     // Blink LED, we got a beat. 

			wiringXserialPutchar(fd, 0x42);
			sprintf(s, "%d", BPM);
			wiringXserialPuts (fd , s);
			wiringXserialPutchar(fd, 0x0D);
			wiringXserialPutchar(fd, 0x0A);

			wiringXserialPutchar(fd, 0x51);
			sprintf(s, "%d", IBI);
			wiringXserialPuts (fd , s);
			wiringXserialPutchar(fd, 0x0D);
			wiringXserialPutchar(fd, 0x0A);

			QS = 0;                      // reset the Quantified Self flag for next time  
		} 
		else { 
			digitalWrite(blinkPin,HIGH);            // There is not beat, turn off pin 13 LED
		}
		usleep(20000);
	}
}
Example #7
0
static int checkValues(struct JsonNode *jvalues) {
	double readonly = 0.0;
	char *platform = GPIO_PLATFORM;

	if(config_setting_get_string("gpio-platform", 0, &platform) != 0) {
		logprintf(LOG_ERR, "no gpio-platform configured");
		return -1;
	}
	if(strcmp(platform, "none") == 0) {
		FREE(platform);
		logprintf(LOG_ERR, "no gpio-platform configured");
		return -1;
	}
	if(wiringXSetup(platform, logprintf1) < 0) {
		FREE(platform);
		return -1;
	}
	FREE(platform);

	struct JsonNode *jid = NULL;
	if((jid = json_find_member(jvalues, "id"))) {
		struct JsonNode *jchild = NULL;
		struct JsonNode *jchild1 = NULL;

		jchild = json_first_child(jid);
		while(jchild) {
			jchild1 = json_first_child(jchild);
			while(jchild1) {
				if(strcmp(jchild1->key, "gpio") == 0) {
					if(wiringXValidGPIO((int)round(jchild1->number_)) != 0) {
						return -1;
					}
				}
				jchild1 = jchild1->next;
			}
			jchild = jchild->next;
		}
	}

	if(json_find_number(jvalues, "readonly", &readonly) == 0) {
		if((int)readonly != 1) {
			return -1;
		}
	}

	return 0;
}
Example #8
0
void gpio_initpgm(PROGRAMMER *pgm)
{
#if defined(__arm__) || defined(__mips__)
  strcpy(pgm->type, "GPIO");
	char *platform = GPIO_PLATFORM;

	if(config_setting_get_string("gpio-platform", 0, &platform) != 0) {
		logprintf(LOG_ERR, "no gpio-platform configured");
		exit(EXIT_FAILURE);
	}
	if(strcmp(platform, "none") == 0) {
		FREE(platform);
		logprintf(LOG_ERR, "no gpio-platform configured");
		exit(EXIT_FAILURE);
	}
	if(wiringXSetup(platform, logprintf1) < 0) {
		FREE(platform);
		exit(EXIT_FAILURE);
	}
	FREE(platform);

  pgm->rdy_led        = bitbang_rdy_led;
  pgm->err_led        = bitbang_err_led;
  pgm->pgm_led        = bitbang_pgm_led;
  pgm->vfy_led        = bitbang_vfy_led;
  pgm->initialize     = bitbang_initialize;
  pgm->display        = gpio_display;
  pgm->enable         = gpio_enable;
  pgm->disable        = gpio_disable;
  pgm->powerup        = gpio_powerup;
  pgm->powerdown      = gpio_powerdown;
  pgm->program_enable = bitbang_program_enable;
  pgm->chip_erase     = bitbang_chip_erase;
  pgm->cmd            = bitbang_cmd;
  pgm->open           = gpio_open;
  pgm->close          = gpio_close;
  pgm->setpin         = gpio_setpin;
  pgm->getpin         = gpio_getpin;
  pgm->highpulsepin   = gpio_highpulsepin;
  pgm->read_byte      = avr_read_byte_default;
  pgm->write_byte     = avr_write_byte_default;
#else
	logprintf(LOG_WARNING, "gpio firmware flashing is not supported on this hardware");
	exit(EXIT_FAILURE);
#endif
}
Example #9
0
int main(void) {
	int data = 0;

	if(wiringXSetup("pcduino1", NULL) == -1) {
		wiringXGC();
		return -1;
	}

	while(1) {
		data = wiringXAnalogRead(0);
		printf("result:%d\n", data);
		data = wiringXAnalogRead(1);
		printf("result:%d\n", data);
		data = wiringXAnalogRead(2);
		printf("result:%d\n", data);

		sleep(2);
	}
}
Example #10
0
int main(int argc, char *argv[]) {
	pthread_t pth;
	char *str = NULL, *platform = NULL;
	char usagestr[190];
	int gpio_out = 0, gpio_in = 0;
	int i = 0, err = 0, invalid = 0;

	memset(usagestr, '\0', 190);

	// expect 2 arguments => argc must be 3
	if(argc != 4) {
		snprintf(usagestr, 189, usage, argv[0], argv[0]);
		puts(usagestr);
		return -1;
	}

	// check for valid, numeric arguments
	for(i=2; i<argc; i++) {
		str = argv[i];
		while(*str != '\0') {
			if(!isdigit(*str)) {
				invalid = 1;
			}
			str++;
		}
		if(invalid == 1) {
			printf("%s: Invalid GPIO %s\n", argv[0], argv[i]);
	        return -1;
		}
	}

	platform = argv[1];
	gpio_out = atoi(argv[2]);
	gpio_in = atoi(argv[3]);
	if(gpio_out == gpio_in) {
		printf("%s: GPIO for output and input (interrupt) should not be the same\n", argv[0]);
		return -1;
	}

	if(wiringXSetup(platform, NULL) == -1) {
		wiringXGC();
		return -1;
	}

	if(wiringXValidGPIO(gpio_out) != 0) {
		printf("%s: Invalid GPIO %d for output\n", argv[0], gpio_out);
		wiringXGC();
		return -1;
	}

	if(wiringXValidGPIO(gpio_in) != 0) {
		printf("%s: Invalid GPIO %d for input (interrupt)\n", argv[0], gpio_in);
		wiringXGC();
		return -1;
	}

	pinMode(gpio_out, PINMODE_OUTPUT);
	if((wiringXISR(gpio_in, ISR_MODE_BOTH)) != 0) {
		printf("%s: Cannot set GPIO %d to interrupt BOTH\n", argv[0], gpio_in);
		wiringXGC();
		return -1;
	}

	err = pthread_create(&pth, NULL, interrupt, &gpio_in);
	if(err != 0) {
		printf("Can't create thread: [%s]\n", strerror(err));
		wiringXGC();
		return -1;
	} else {
		printf("Thread created succesfully\n");
	}

	for(i=0; i<5; i++) {
		printf("  Writing to GPIO %d: High\n", gpio_out);
		digitalWrite(gpio_out, HIGH);
		sleep(1);
		printf("  Writing to GPIO %d: Low\n", gpio_out);
		digitalWrite(gpio_out, LOW);
		sleep(2);
	}

	printf("Main finished, waiting for thread ...\n");
	pthread_join(pth, NULL);
	wiringXGC();

	return 0;
}
Example #11
0
static int createCode(JsonNode *code) {
	int free_def = 0;
	int gpio = -1;
	int state = -1;
	double itmp = -1;
	char *def = NULL;
	int have_error = 0;

	relay->rawlen = 0;
	if(json_find_string(code, "default-state", &def) != 0) {
		if((def = MALLOC(4)) == NULL) {
			fprintf(stderr, "out of memory\n");
			exit(EXIT_FAILURE);
		}
		strcpy(def, "off");
		free_def = 1;
	}

	if(json_find_number(code, "gpio", &itmp) == 0)
		gpio = (int)round(itmp);
	if(json_find_number(code, "off", &itmp) == 0)
		state=0;
	else if(json_find_number(code, "on", &itmp) == 0)
		state=1;

	if(gpio == -1 || state == -1) {
		logprintf(LOG_ERR, "relay: insufficient number of arguments");
		have_error = 1;
		goto clear;
	} else if(wiringXSupported() == 0) {
		if(wiringXSetup() < 0) {
			logprintf(LOG_ERR, "unable to setup wiringX") ;
			return EXIT_FAILURE;
		} else {
			if(wiringXValidGPIO(gpio) != 0) {
				logprintf(LOG_ERR, "relay: invalid gpio range");
				have_error = 1;
				goto clear;
			} else {
				if(strstr(progname, "daemon") != NULL) {
					pinMode(gpio, OUTPUT);
					if(strcmp(def, "off") == 0) {
						if(state == 1) {
							digitalWrite(gpio, LOW);
						} else if(state == 0) {
							digitalWrite(gpio, HIGH);
						}
					} else {
						if(state == 0) {
							digitalWrite(gpio, LOW);
						} else if(state == 1) {
							digitalWrite(gpio, HIGH);
						}
					}
				} else {
					wiringXGC();
				}
			createMessage(gpio, state);
			goto clear;
			}
		}
	}

clear:
	if(free_def == 1) {
		FREE(def);
	}
	if(have_error) {
		return EXIT_FAILURE;
	} else {
		return EXIT_SUCCESS;
	}
}
Example #12
0
static int checkValues(JsonNode *code) {
	char *def = NULL;
	struct JsonNode *jid = NULL;
	struct JsonNode *jchild = NULL;
	int free_def = 0;
	double itmp = -1;

	if(json_find_string(code, "default-state", &def) != 0) {
		if((def = MALLOC(4)) == NULL) {
			fprintf(stderr, "out of memory\n");
			exit(EXIT_FAILURE);
		}
		strcpy(def, "off");
		free_def = 1;
	}
	if(strcmp(def, "on") != 0 && strcmp(def, "off") != 0) {
		if(free_def == 1) {
			FREE(def);
		}
		return 1;
	}

	/* Get current relay state and validate GPIO number */
	if((jid = json_find_member(code, "id")) != NULL) {
		if((jchild = json_find_element(jid, 0)) != NULL) {
			if(json_find_number(jchild, "gpio", &itmp) == 0) {
				if(wiringXSupported() == 0) {
					int gpio = (int)itmp;
					int state = -1;
					if(wiringXSetup() < 0) {
						logprintf(LOG_ERR, "unable to setup wiringX") ;
						return -1;
					} else if(wiringXValidGPIO(gpio) != 0) {
						logprintf(LOG_ERR, "relay: invalid gpio range");
						return -1;
					} else {
						pinMode(gpio, INPUT);
						state = digitalRead(gpio);
						if(strcmp(def, "on") == 0) {
							state ^= 1;
						}

						relay->message = json_mkobject();
						JsonNode *code = json_mkobject();
						json_append_member(code, "gpio", json_mknumber(gpio, 0));
						if(state == 1) {
							json_append_member(code, "state", json_mkstring("on"));
						} else {
							json_append_member(code, "state", json_mkstring("off"));
						}

						json_append_member(relay->message, "message", code);
						json_append_member(relay->message, "origin", json_mkstring("sender"));
						json_append_member(relay->message, "protocol", json_mkstring(relay->id));
						if(pilight.broadcast != NULL) {
							pilight.broadcast(relay->id, relay->message, PROTOCOL);
						}
						json_delete(relay->message);
						relay->message = NULL;
					}
				}
			}
		}
	}

	if(free_def == 1) {
		FREE(def);
	}
	return 0;
}