// Rapsberry Pi: 1-wire in C - Versione 0.7 - Luglio 2014 // Copyright (c) 2013, Vincenzo Villa (https://www.vincenzov.net) // Creative Commons | Attribuzione-Condividi allo stesso modo 3.0 Unported. // Creative Commons | Attribution-Share Alike 3.0 Unported // https://www.vincenzov.net/tutorial/RaspberryPi/1-wire.htm // Compile: gcc 1-wire-th.c -std=gnu99 -o 1-wire-th // vv@vvrpi ~ $ ./1-wire-th [addr2] [addr1] [addr3] ... // addrX = Optional ROM-ID (e.g.: 10-000802d3a98b) - Up to 10 // Using 1-wire #include #include #include #include #include #include #include #include #include #include #define MAX_WIRE 10 // Driver limite #define ONE_WIRE_DIR "/sys/devices/w1_bus_master1/" #define ONE_WIRE_FILE "/w1_slave" #define SEARCH_ONE_WIRE "ls /sys/devices/w1_bus_master1/*/w1_slave" #define RECORD 255 static void exit_on_error (const char *s) // Exit and print error code { perror(s); abort(); } int main(int argc, char *argv[]) { char one_wire_file_name[MAX_WIRE][255]; // device filename int one_wire_found=0; // Device found (or user supplied) FILE *command; // Output for search device FILE *device; // Slave file char device_line[RECORD]; char *device_substring; printf("Rapsberry Pi: 1-wire in C - Versione 0.7 - Luglio 2014\n"); printf("Copyright (c) 2013, Vincenzo Villa (https://www.vincenzov.net)\n"); printf("Creative Commons | Attribuzione-Condividi allo stesso modo 3.0 Unported.\n"); printf("Creative Commons | Attribution-Share Alike 3.0 Unported\n"); printf("https://www.vincenzov.net/tutorial/RaspberryPi/1-wire.htm\n\n"); printf ( "Usage: \n rpi ~ $ ./1-wire-th [ROM-ID-1] [ROM-ID-2] [ROM-ID-3]...\n ROM-ID-X = Optional ROM-ID (e.g.: 10-000802d3a98b) - Up to 10\n\n"); if (argc < 2) { printf("No user data, autodetect 1-wire devices...\n\n"); command = popen (SEARCH_ONE_WIRE, "r"); if (command == NULL) exit_on_error("Failed to run command\n" ); for (one_wire_found; one_wire_found MAX_WIRE) exit_on_error ("Too many ROM-ID"); for (int i=2; i <= argc; i++, one_wire_found++) { strcpy (one_wire_file_name[i-2], ONE_WIRE_DIR); strcat (one_wire_file_name[i-2], argv[i-1]); strcat (one_wire_file_name[i-2], ONE_WIRE_FILE); } } printf("\n\nTesting %d 1-wire devices:\n\n", one_wire_found); for (int i=0; i