EXPORT int dht11Read(int type, int *data) { clearLastError(); int ret = -1; char *dht11Path = (char *) malloc(FILE_PATH_LENGTH); memset(dht11Path, 0, FILE_PATH_LENGTH); strcpy(dht11Path, DHT11_PATH); switch(type) { case DHT_TEMP: strcat(dht11Path, "in_temp_input"); ret = readIntValueFromFile(dht11Path); break; case DHT_HUMIDITY: strcat(dht11Path, "in_humidityrelative_input"); ret = readIntValueFromFile(dht11Path); break; default: setLastError("Unsupport dht11 data type %d", type); break; } if (ret != -1) { *data = ret; ret = 0; } else { setLastError("Invalid dht11 data"); } free(dht11Path); return ret; }
static int pcf8591Read(int channel, int *value) { int existFlag = 0; DIR *d; struct dirent *de; char pcfFile[FILE_PATH_LENGTH]; if (!(d = opendir(PCF8591_SYS_PATH))) { PyErr_SetString(PyExc_RuntimeError, "Fail to opendir pcf8591 directory"); return -1; } while ((de = readdir(d))) { if (de->d_name[0] == '.') continue; sprintf(pcfFile, "%s%s/in%d_input", PCF8591_SYS_PATH, de->d_name, channel); if (access(pcfFile, F_OK) != -1) { existFlag = 1; break; } } closedir(d); if (existFlag == 0) { PyErr_SetString(PyExc_RuntimeError, "Fail to access pcf8591 sys file"); return -1; } if ((*value = readIntValueFromFile(pcfFile)) != -1) { return 0; } else { PyErr_SetString(PyExc_RuntimeError, "Invalid pcf8591 data"); return -1; } }
EXPORT int dht11Read(int type, int *data) { clearLastError(); int ret = -1; DIR *d; struct dirent *de; if (!(d = opendir(DHT11_SYS_PATH))) { setLastError("Fail to opendir %s", DHT11_SYS_PATH); return 0; } char dht11File[FILE_PATH_LENGTH]; while ((de = readdir(d))) { if (de->d_name[0] == '.') continue; if (type == DHT_HUMIDITY) sprintf(dht11File, "%s%s/in_humidityrelative_input", DHT11_SYS_PATH, de->d_name); else if(type == DHT_TEMP) sprintf(dht11File, "%s%s/in_temp_input", DHT11_SYS_PATH, de->d_name); if (access(dht11File, F_OK) != -1) { break; } } closedir(d); switch(type) { case DHT_TEMP: ret = readIntValueFromFile(dht11File); break; case DHT_HUMIDITY: ret = readIntValueFromFile(dht11File); break; default: setLastError("Unsupport dht11 data type %d", type); break; } if (ret != -1) { *data = ret; ret = 0; } else { setLastError("Invalid dht11 data"); } return ret; }
EXPORT int Hcsr04Read(int *distance) { clearLastError(); int ret = HCSR04_MAX_DISTANCE + 1; char *hcsr04Path = (char *) malloc(FILE_PATH_LENGTH); memset(hcsr04Path, 0, FILE_PATH_LENGTH); strcpy(hcsr04Path, HCSR04_PATH); ret = readIntValueFromFile(hcsr04Path); *distance = (int)(ret / HCSR04_PER_METRE); free(hcsr04Path); return ret; }