Example #1
0
void digitalWrite(int pin, int value) {
	if(platform != NULL) {
		if(platform->digitalWrite) {
			if(platform->digitalWrite(pin, value) == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling digitalWrite", platform->name);
				wiringXGC();
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support digitalWrite", platform->name);
			wiringXGC();
		}
	}
}
Example #2
0
void pinMode(int pin, int mode) {
	if(device) {
		if(device->pinMode) {
			if(device->pinMode(pin, mode) == -1) {
				fprintf(stderr, "%s: error while calling pinMode\n", device->name);
				wiringXGC();
			}
		} else {
			fprintf(stderr, "%s: device doesn't support pinMode\n", device->name);
			wiringXGC();
		}
	}
}
Example #3
0
void pinMode(int pin, int mode) {
	if(platform != NULL) {
		if(platform->pinMode) {
			if(platform->pinMode(pin, mode) == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling pinMode", platform->name);
				wiringXGC();
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support pinMode", platform->name);
			wiringXGC();
		}
	}
}
Example #4
0
void digitalWrite(int pin, int value) {
	if(device) {
		if(device->digitalWrite) {
			if(device->digitalWrite(pin, value) == -1) {
				fprintf(stderr, "%s: error while calling digitalWrite\n", device->name);
				wiringXGC();
			}
		} else {
			fprintf(stderr, "%s: device doesn't support digitalWrite\n", device->name);
			wiringXGC();
		}
	}
}
Example #5
0
int wiringXSetup(void) {
	if(setup == -2) {
		hummingboardInit();
		raspberrypiInit();
		bananapiInit();
		radxaInit();

		int match = 0;
		struct devices_t *tmp = devices;
		while(tmp) {
			if(tmp->identify() >= 0) {
				device = tmp;
				match = 1;
				break;
			}
			tmp = tmp->next;
		}

		if(match == 0) {
			fprintf(stderr, "wiringX: hardware not supported\n");
			wiringXGC();
			return -1;
		}
		printf("running on a %s\n", device->name);
		setup = device->setup();
		return setup;
	} else {
		return setup;
	}
}
Example #6
0
int wiringXSPISetup(int channel, int speed) {
	if(platform != NULL) {
		if(platform->SPISetup) {
			int x = platform->SPISetup(channel, speed);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling SPISetup", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support SPISetup", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #7
0
int wiringXI2CSetup(int devId) {
	if(platform != NULL) {
		if(platform->I2CSetup) {
			int x = platform->I2CSetup(devId);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling I2CSetup", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support I2CSetup", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #8
0
int wiringXSPIDataRW(int channel, unsigned char *data, int len) {
	if(platform != NULL) {
		if(platform->SPIDataRW) {
			int x = platform->SPIDataRW(channel, data, len);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling SPIDataRW", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support SPIDataRW", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #9
0
int wiringXI2CWriteReg16(int fd, int reg, int data) {
	if(platform != NULL) {
		if(platform->I2CWriteReg16) {
			int x = platform->I2CWriteReg16(fd, reg, data);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling I2CWriteReg16", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support I2CWriteReg16", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #10
0
int wiringXI2CReadReg8(int fd, int reg) {
	if(platform != NULL) {
		if(platform->I2CReadReg8) {
			int x = platform->I2CReadReg8(fd, reg);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling I2CReadReg8", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support I2CReadReg8", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #11
0
int wiringXISR(int pin, int mode) {
	if(platform != NULL) {
		if(platform->isr) {
			int x = platform->isr(pin, mode);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling isr", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support isr", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #12
0
int wiringXAnalogRead(int channel){
	if(platform != NULL) {
		if(platform->analogRead) {
			int x = platform->analogRead(channel);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling analogRead", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support analogRead", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #13
0
int digitalRead(int pin) {
	if(device) {
		if(device->digitalRead) {
			int x = device->digitalRead(pin);
			if(x == -1) {
				fprintf(stderr, "%s: error while calling digitalRead\n", device->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			fprintf(stderr, "%s: device doesn't support digitalRead\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #14
0
int digitalRead(int pin) {
	if(platform != NULL) {
		if(platform->digitalRead) {
			int x = platform->digitalRead(pin);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling digitalRead", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support digitalRead", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #15
0
int wiringXI2CWriteReg16(int fd, int reg, int data) {
	if(device) {
		if(device->I2CWriteReg16) {
			int x = device->I2CWriteReg16(fd, reg, data);
			if(x == -1) {
				fprintf(stderr, "%s: error while calling I2CWriteReg16\n", device->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			fprintf(stderr, "%s: device doesn't support I2CWriteReg16\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #16
0
int wiringXI2CSetup(int devId) {
	if(device) {
		if(device->I2CSetup) {
			int x = device->I2CSetup(devId);
			if(x == -1) {
				fprintf(stderr, "%s: error while calling I2CSetup\n", device->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			fprintf(stderr, "%s: device doesn't support I2CSetup\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #17
0
int wiringXI2CReadReg8(int fd, int reg) {
	if(device) {
		if(device->I2CReadReg8) {
			int x = device->I2CReadReg8(fd, reg);
			if(x == -1) {
				fprintf(stderr, "%s: error while calling I2CReadReg8\n", device->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			fprintf(stderr, "%s: device doesn't support I2CReadReg8\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #18
0
int wiringXISR(int pin, int mode) {
	if(device) {
		if(device->isr) {
			int x = device->isr(pin, mode);
			if(x == -1) {
				fprintf(stderr, "%s: error while calling isr\n", device->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			fprintf(stderr, "%s: device doesn't support isr\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #19
0
int waitForInterrupt(int pin, int ms) {
	if(device) {
		if(device->waitForInterrupt) {
			int x = device->waitForInterrupt(pin, ms);
			if(x == -1) {
				fprintf(stderr, "%s: error while calling waitForInterrupt\n", device->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			fprintf(stderr, "%s: device doesn't support waitForInterrupt\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #20
0
int waitForInterrupt(int pin, int ms) {
	if(platform != NULL) {
		if(platform->waitForInterrupt) {
			int x = platform->waitForInterrupt(pin, ms);
			if(x == -1) {
				wiringXLog(LOG_ERR, "%s: error while calling waitForInterrupt", platform->name);
				wiringXGC();
			} else {
				return x;
			}
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support waitForInterrupt", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #21
0
void Java_eu_jm0_wiringX_wiringX_GC(JNIEnv *env, jclass c) {
	// call original function
	wiringXGC();

	// free handle on logger
	deregisterLogConsumer();

	// clear object cache
	cache_clear(env);
}
Example #22
0
int wiringXValidGPIO(int gpio) {
	if(platform != NULL) {
		if(platform->validGPIO) {
			return platform->validGPIO(gpio);
		} else {
			wiringXLog(LOG_ERR, "%s: platform doesn't support gpio number validation", platform->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #23
0
int wiringXValidGPIO(int gpio) {
	if(device) {
		if(device->validGPIO) {
			return device->validGPIO(gpio);
		} else {
			fprintf(stderr, "%s: device doesn't support gpio number validation\n", device->name);
			wiringXGC();
		}
	}
	return -1;
}
Example #24
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 #25
0
int wiringXSetup(void) {
#ifndef _WIN32	
	if(wiringXLog == NULL) {
		wiringXLog = _fprintf;
	}

	if(wiringXSupported() == 0) {
		if(setup == -2) {
			hummingboardInit();
			raspberrypiInit();
			bananapiInit();
			ci20Init();
			radxaInit();
			odroidInit();

			int match = 0;
			struct platform_t *tmp = platforms;
			while(tmp) {
				if(tmp->identify() >= 0) {
					platform = tmp;
					match = 1;
					break;
				}
				tmp = tmp->next;
			}

			if(match == 0) {
				wiringXLog(LOG_ERR, "hardware not supported");
				wiringXGC();
				return -1;
			} else {
				wiringXLog(LOG_DEBUG, "running on a %s", platform->name);
			}
			setup = platform->setup();
			return setup;
		} else {
			return setup;
		}
	}
#endif
	return -1;
}
Example #26
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 #27
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;
	}
}