From 72f30ad950522ad4791e1e6998f546e9afbc8e8a Mon Sep 17 00:00:00 2001 From: Grzegorz Hetman Date: Thu, 18 Feb 2016 13:51:16 +0100 Subject: [PATCH] Add ds18b20 udp broadcaster example. Add license and readme details. Rid of compile-time switches. Rid of lazy initialization of sensor. Minor code fixing. --- examples/ds18b20_broadcaster/LICENSE | 22 ++++ examples/ds18b20_broadcaster/Makefile | 3 + examples/ds18b20_broadcaster/README.md | 20 +++ .../ds18b20_broadcaster/ds18b20_broadcaster.c | 118 ++++++++++++++++++ examples/ds18b20_onewire/LICENSE | 22 ++++ examples/ds18b20_onewire/ds18b20_onewire.c | 16 ++- extras/ds18b20/LICENSE | 22 ++++ extras/ds18b20/ds18b20.c | 20 ++- extras/ds18b20/ds18b20.h | 8 +- extras/onewire/LICENSE | 22 ++++ extras/onewire/README.md | 4 +- extras/onewire/onewire.c | 72 ++++------- extras/onewire/onewire.h | 31 +---- 13 files changed, 278 insertions(+), 102 deletions(-) create mode 100644 examples/ds18b20_broadcaster/LICENSE create mode 100644 examples/ds18b20_broadcaster/Makefile create mode 100644 examples/ds18b20_broadcaster/README.md create mode 100644 examples/ds18b20_broadcaster/ds18b20_broadcaster.c create mode 100644 examples/ds18b20_onewire/LICENSE create mode 100644 extras/ds18b20/LICENSE create mode 100644 extras/onewire/LICENSE diff --git a/examples/ds18b20_broadcaster/LICENSE b/examples/ds18b20_broadcaster/LICENSE new file mode 100644 index 0000000..0b7ce5f --- /dev/null +++ b/examples/ds18b20_broadcaster/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2016 Grzegorz Hetman : ghetman@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/examples/ds18b20_broadcaster/Makefile b/examples/ds18b20_broadcaster/Makefile new file mode 100644 index 0000000..833c3e7 --- /dev/null +++ b/examples/ds18b20_broadcaster/Makefile @@ -0,0 +1,3 @@ +PROGRAM=ds18b20_broadcaster +EXTRA_COMPONENTS = extras/onewire extras/ds18b20 +include ../../common.mk diff --git a/examples/ds18b20_broadcaster/README.md b/examples/ds18b20_broadcaster/README.md new file mode 100644 index 0000000..75029bf --- /dev/null +++ b/examples/ds18b20_broadcaster/README.md @@ -0,0 +1,20 @@ +# DS19B20 Broadcaster + +>In this example you can see how to get data from multiple +>ds18b20 sensor and emit result over udb broadcaster address. + +As a client server, you can use this simple udp receiver, writen in python: + +``` +import select, socket + +s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +s.bind(('', 8005)) +s.setblocking(0) + +while True: + result = select.select([s],[],[]) + msg = result[0][0].recv(1024) + print msg.strip() + +``` \ No newline at end of file diff --git a/examples/ds18b20_broadcaster/ds18b20_broadcaster.c b/examples/ds18b20_broadcaster/ds18b20_broadcaster.c new file mode 100644 index 0000000..926dbad --- /dev/null +++ b/examples/ds18b20_broadcaster/ds18b20_broadcaster.c @@ -0,0 +1,118 @@ +#include + +#include "espressif/esp_common.h" +#include "esp/uart.h" +#include "FreeRTOS.h" +#include "task.h" +#include "timers.h" +#include "queue.h" +#include "lwip/api.h" +#include "ssid_config.h" + +// DS18B20 driver +#include "ds18b20/ds18b20.h" +// Onewire init +#include "onewire/onewire.h" + +void broadcast_temperature(void *pvParameters) +{ + + uint8_t amount = 0; + uint8_t sensors = 2; + ds_sensor_t t[sensors]; + + // Use GPIO 13 as one wire pin. + uint8_t GPIO_FOR_ONE_WIRE = 13; + + char msg[100]; + + // Broadcaster part + err_t err; + // Initialize one wire bus. + onewire_init(GPIO_FOR_ONE_WIRE); + + while(1) { + + // Send out some UDP data + struct netconn* conn; + + // Create UDP connection + conn = netconn_new(NETCONN_UDP); + + // Connect to local port + err = netconn_bind(conn, IP_ADDR_ANY, 8004); + + if (err != ERR_OK) { + netconn_delete(conn); + printf("%s : Could not bind! (%s)\n", __FUNCTION__, lwip_strerr(err)); + continue; + } + + err = netconn_connect(conn, IP_ADDR_BROADCAST, 8005); + + if (err != ERR_OK) { + netconn_delete(conn); + printf("%s : Could not connect! (%s)\n", __FUNCTION__, lwip_strerr(err)); + continue; + } + + for(;;) { + // Search all DS18B20, return its amount and feed 't' structure with result data. + amount = readDS18B20(GPIO_FOR_ONE_WIRE, t); + + if (amount < sensors){ + printf("Something is wrong, I expect to see %d sensors \nbut just %d was detected!\n", sensors, amount); + } + + for (int i = 0; i < amount; ++i) + { + // Multiple "" here is just to satisfy compiler and don`t raise 'hex escape sequence out of range' warning. + sprintf(msg, "Sensor %d report: %d.%d ""\xC2""\xB0""C\n",t[i].id, t[i].major, t[i].minor); + printf("%s", msg); + + struct netbuf* buf = netbuf_new(); + void* data = netbuf_alloc(buf, strlen(msg)); + + memcpy (data, msg, strlen(msg)); + err = netconn_send(conn, buf); + + if (err != ERR_OK) { + printf("%s : Could not send data!!! (%s)\n", __FUNCTION__, lwip_strerr(err)); + continue; + } + netbuf_delete(buf); // De-allocate packet buffer + } + vTaskDelay(1000/portTICK_RATE_MS); + } + + err = netconn_disconnect(conn); + printf("%s : Disconnected from IP_ADDR_BROADCAST port 12346 (%s)\n", __FUNCTION__, lwip_strerr(err)); + + err = netconn_delete(conn); + printf("%s : Deleted connection (%s)\n", __FUNCTION__, lwip_strerr(err)); + + vTaskDelay(1000/portTICK_RATE_MS); + } +} + +void user_init(void) +{ + uart_set_baud(0, 115200); + + printf("SDK version:%s\n", sdk_system_get_sdk_version()); + + // Set led to indicate wifi status. + sdk_wifi_status_led_install(2, PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); + + struct sdk_station_config config = { + .ssid = WIFI_SSID, + .password = WIFI_PASS, + }; + + // Required to call wifi_set_opmode before station_set_config. + sdk_wifi_set_opmode(STATION_MODE); + sdk_wifi_station_set_config(&config); + + xTaskCreate(&broadcast_temperature, (signed char *)"broadcast_temperature", 256, NULL, 2, NULL); +} + diff --git a/examples/ds18b20_onewire/LICENSE b/examples/ds18b20_onewire/LICENSE new file mode 100644 index 0000000..0b7ce5f --- /dev/null +++ b/examples/ds18b20_onewire/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2016 Grzegorz Hetman : ghetman@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/examples/ds18b20_onewire/ds18b20_onewire.c b/examples/ds18b20_onewire/ds18b20_onewire.c index d856344..39db124 100644 --- a/examples/ds18b20_onewire/ds18b20_onewire.c +++ b/examples/ds18b20_onewire/ds18b20_onewire.c @@ -12,17 +12,22 @@ // DS18B20 driver #include "ds18b20/ds18b20.h" - +// Onewire init +#include "onewire/onewire.h" + void print_temperature(void *pvParameters) { int delay = 500; uint8_t amount = 0; + // Declare amount of sensors uint8_t sensors = 2; - DSENSOR t[sensors]; + ds_sensor_t t[sensors]; // Use GPIO 13 as one wire pin. uint8_t GPIO_FOR_ONE_WIRE = 13; - + + onewire_init(GPIO_FOR_ONE_WIRE); + while(1) { // Search all DS18B20, return its amount and feed 't' structure with result data. amount = readDS18B20(GPIO_FOR_ONE_WIRE, t); @@ -33,7 +38,8 @@ void print_temperature(void *pvParameters) for (int i = 0; i < amount; ++i) { - printf("Sensor %d report: %d.%d C\n",t[i].id, t[i].major, t[i].minor); + // Multiple "" here is just to satisfy compiler and don`t raise 'hex escape sequence out of range' warning. + printf("Sensor %d report: %d.%d ""\xC2""\xB0""C\n",t[i].id, t[i].major, t[i].minor); } printf("\n"); vTaskDelay(delay / portTICK_RATE_MS); @@ -46,6 +52,6 @@ void user_init(void) printf("SDK version:%s\n", sdk_system_get_sdk_version()); - xTaskCreate(&print_temperature, (signed char *)"get_task", 256, NULL, 2, NULL); + xTaskCreate(&print_temperature, (signed char *)"print_temperature", 256, NULL, 2, NULL); } diff --git a/extras/ds18b20/LICENSE b/extras/ds18b20/LICENSE new file mode 100644 index 0000000..0b7ce5f --- /dev/null +++ b/extras/ds18b20/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2016 Grzegorz Hetman : ghetman@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/extras/ds18b20/ds18b20.c b/extras/ds18b20/ds18b20.c index 0cd213b..1dc657b 100644 --- a/extras/ds18b20/ds18b20.c +++ b/extras/ds18b20/ds18b20.c @@ -13,14 +13,8 @@ #define DS1820_ALARMSEARCH 0xEC #define DS1820_CONVERT_T 0x44 -uint8_t readDS18B20(uint8_t pin, DSENSOR *result){ - static uint8_t one_time = 1; +uint8_t readDS18B20(uint8_t pin, ds_sensor_t *result){ - if (one_time){ - onewire_init(pin); - one_time = 0; - } - uint8_t addr[8]; uint8_t sensor_id = 0; onewire_reset_search(pin); @@ -34,11 +28,11 @@ uint8_t readDS18B20(uint8_t pin, DSENSOR *result){ onewire_reset(pin); onewire_select(pin, addr); - onewire_write(pin, DS1820_CONVERT_T, owDefaultPower); + onewire_write(pin, DS1820_CONVERT_T, ONEWIRE_DEFAULT_POWER); sdk_os_delay_us(750); onewire_reset(pin); onewire_select(pin, addr); - onewire_write(pin, DS1820_READ_SCRATCHPAD, owDefaultPower); + onewire_write(pin, DS1820_READ_SCRATCHPAD, ONEWIRE_DEFAULT_POWER); uint8_t get[10]; @@ -75,14 +69,14 @@ float read_single_DS18B20(uint8_t pin){ onewire_init(pin); onewire_reset(pin); - onewire_write(pin, DS1820_SKIP_ROM, owDefaultPower); - onewire_write(pin, DS1820_CONVERT_T, owDefaultPower); + onewire_write(pin, DS1820_SKIP_ROM, ONEWIRE_DEFAULT_POWER); + onewire_write(pin, DS1820_CONVERT_T, ONEWIRE_DEFAULT_POWER); sdk_os_delay_us(750); onewire_reset(pin); - onewire_write(pin, DS1820_SKIP_ROM, owDefaultPower); - onewire_write(pin, DS1820_READ_SCRATCHPAD, owDefaultPower); + onewire_write(pin, DS1820_SKIP_ROM, ONEWIRE_DEFAULT_POWER); + onewire_write(pin, DS1820_READ_SCRATCHPAD, ONEWIRE_DEFAULT_POWER); uint8_t get[10]; diff --git a/extras/ds18b20/ds18b20.h b/extras/ds18b20/ds18b20.h index b957a4e..415b803 100644 --- a/extras/ds18b20/ds18b20.h +++ b/extras/ds18b20/ds18b20.h @@ -1,17 +1,17 @@ #ifndef DRIVER_DS18B20_H_ #define DRIVER_DS18B20_H_ -typedef struct DSENSOR { +typedef struct { uint8_t id; uint8_t major; uint8_t minor; -} DSENSOR; +} ds_sensor_t; // Scan all ds18b20 sensors on bus and return its amount. -// Result are saved in array of DSENSOR structure. +// Result are saved in array of ds_sensor_t structure. // Cause printf in esp sdk don`t support float, // I split result as two number (major, minor). -uint8_t readDS18B20(uint8_t pin, DSENSOR *result); +uint8_t readDS18B20(uint8_t pin, ds_sensor_t *result); // This method is just to demonstrate how to read // temperature from single dallas chip. diff --git a/extras/onewire/LICENSE b/extras/onewire/LICENSE new file mode 100644 index 0000000..18a75d3 --- /dev/null +++ b/extras/onewire/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014 zeroday nodemcu.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/extras/onewire/README.md b/extras/onewire/README.md index 288f50b..f849550 100644 --- a/extras/onewire/README.md +++ b/extras/onewire/README.md @@ -2,6 +2,6 @@ This is a port of bit banging one wire driver based on nodemcu implementaion. -For all aspect regarding license, please check in their code. - +Seams that they port it from https://www.pjrc.com/teensy/td_libs_OneWire.html +For all aspect regarding license, please check LICENSE file and coresponding projects. \ No newline at end of file diff --git a/extras/onewire/onewire.c b/extras/onewire/onewire.c index eb034b0..3a946ba 100644 --- a/extras/onewire/onewire.c +++ b/extras/onewire/onewire.c @@ -1,27 +1,17 @@ #include "onewire.h" -#if ONEWIRE_SEARCH // global search state -static unsigned char ROM_NO[NUM_OW][8]; -static uint8_t LastDiscrepancy[NUM_OW]; -static uint8_t LastFamilyDiscrepancy[NUM_OW]; -static uint8_t LastDeviceFlag[NUM_OW]; -#endif - -//#define noInterrupts void() -// gpio_enable(gpio, GPIO_OUTPUT); +static unsigned char ROM_NO[ONEWIRE_NUM][8]; +static uint8_t LastDiscrepancy[ONEWIRE_NUM]; +static uint8_t LastFamilyDiscrepancy[ONEWIRE_NUM]; +static uint8_t LastDeviceFlag[ONEWIRE_NUM]; void onewire_init(uint8_t pin) { - // pinMode(pin, INPUT); gpio_enable(pin, GPIO_INPUT); - //platform_gpio_mode(pin, PLATFORM_GPIO_INPUT, PLATFORM_GPIO_PULLUP); -#if ONEWIRE_SEARCH - onewire_reset_search(pin); -#endif + onewire_reset_search(pin); } - // Perform the onewire reset function. We will wait up to 250uS for // the bus to come high, if it doesn't then it is broken or shorted // and we return a 0; @@ -56,7 +46,6 @@ uint8_t onewire_reset(uint8_t pin) return r; } -// // Write a bit. Port and bit is used to cut lookup time and provide // more certain timing. // @@ -81,7 +70,6 @@ static void onewire_write_bit(uint8_t pin, uint8_t v) } } -// // Read a bit. Port and bit is used to cut lookup time and provide // more certain timing. // @@ -101,7 +89,6 @@ static uint8_t onewire_read_bit(uint8_t pin) return r; } -// // Write a byte. The writing code uses the active drivers to raise the // pin high, if you need power after the write (e.g. DS18S20 in // parasite power mode) then set 'power' to 1, otherwise the pin will @@ -125,7 +112,7 @@ void onewire_write(uint8_t pin, uint8_t v, uint8_t power /* = 0 */) { void onewire_write_bytes(uint8_t pin, const uint8_t *buf, uint16_t count, bool power /* = 0 */) { uint16_t i; for (i = 0 ; i < count ; i++) - onewire_write(pin, buf[i], owDefaultPower); + onewire_write(pin, buf[i], ONEWIRE_DEFAULT_POWER); if (!power) { noInterrupts(); DIRECT_MODE_INPUT(pin); @@ -134,7 +121,6 @@ void onewire_write_bytes(uint8_t pin, const uint8_t *buf, uint16_t count, bool p } } -// // Read a byte // uint8_t onewire_read(uint8_t pin) { @@ -153,24 +139,22 @@ void onewire_read_bytes(uint8_t pin, uint8_t *buf, uint16_t count) { buf[i] = onewire_read(pin); } -// // Do a ROM select // void onewire_select(uint8_t pin, const uint8_t rom[8]) { uint8_t i; - onewire_write(pin, 0x55, owDefaultPower); // Choose ROM + onewire_write(pin, 0x55, ONEWIRE_DEFAULT_POWER); // Choose ROM - for (i = 0; i < 8; i++) onewire_write(pin, rom[i], owDefaultPower); + for (i = 0; i < 8; i++) onewire_write(pin, rom[i], ONEWIRE_DEFAULT_POWER); } -// // Do a ROM skip // void onewire_skip(uint8_t pin) { - onewire_write(pin, 0xCC, owDefaultPower); // Skip ROM + onewire_write(pin, 0xCC, ONEWIRE_DEFAULT_POWER); // Skip ROM } void onewire_depower(uint8_t pin) @@ -180,9 +164,6 @@ void onewire_depower(uint8_t pin) interrupts(); } -#if ONEWIRE_SEARCH - -// // You need to use this function to start a search again from the beginning. // You do not need to do it for the first search, though you could. // @@ -190,7 +171,7 @@ void onewire_reset_search(uint8_t pin) { // reset the search state LastDiscrepancy[pin] = 0; - LastDeviceFlag[pin] = FALSE; + LastDeviceFlag[pin] = 0; LastFamilyDiscrepancy[pin] = 0; int i; for(i = 7; ; i--) { @@ -211,10 +192,9 @@ void onewire_target_search(uint8_t pin, uint8_t family_code) ROM_NO[pin][i] = 0; LastDiscrepancy[pin] = 64; LastFamilyDiscrepancy[pin] = 0; - LastDeviceFlag[pin] = FALSE; + LastDeviceFlag[pin] = 0; } -// // Perform a search. If this function returns a '1' then it has // enumerated the next device and you may retrieve the ROM from the // OneWire::address variable. If there are no devices, no further @@ -227,8 +207,8 @@ void onewire_target_search(uint8_t pin, uint8_t family_code) //-------------------------------------------------------------------------- // Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing // search state. -// Return TRUE : device found, ROM number in ROM_NO buffer -// FALSE : device not found, end of search +// Return 1 : device found, ROM number in ROM_NO buffer +// 0 : device not found, end of search // uint8_t onewire_search(uint8_t pin, uint8_t *newAddr) { @@ -253,13 +233,13 @@ uint8_t onewire_search(uint8_t pin, uint8_t *newAddr) { // reset the search LastDiscrepancy[pin] = 0; - LastDeviceFlag[pin] = FALSE; + LastDeviceFlag[pin] = 0; LastFamilyDiscrepancy[pin] = 0; - return FALSE; + return 0; } // issue the search command - onewire_write(pin, 0xF0, owDefaultPower); + onewire_write(pin, 0xF0, ONEWIRE_DEFAULT_POWER); // loop to do the search do @@ -330,9 +310,9 @@ uint8_t onewire_search(uint8_t pin, uint8_t *newAddr) // check for last device if (LastDiscrepancy[pin] == 0) - LastDeviceFlag[pin] = TRUE; + LastDeviceFlag[pin] = 1; - search_result = TRUE; + search_result = 1; } } @@ -340,9 +320,9 @@ uint8_t onewire_search(uint8_t pin, uint8_t *newAddr) if (!search_result || !ROM_NO[pin][0]) { LastDiscrepancy[pin] = 0; - LastDeviceFlag[pin] = FALSE; + LastDeviceFlag[pin] = 0; LastFamilyDiscrepancy[pin] = 0; - search_result = FALSE; + search_result = 0; } else { @@ -355,10 +335,6 @@ uint8_t onewire_search(uint8_t pin, uint8_t *newAddr) return search_result; } -#endif - - -#if ONEWIRE_CRC // The 1-Wire CRC scheme is described in Maxim Application Note 27: // "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products" // @@ -427,7 +403,6 @@ uint8_t onewire_crc8(const uint8_t *addr, uint8_t len) } #endif -#if ONEWIRE_CRC16 // Compute the 1-Wire CRC16 and compare it against the received CRC. // Example usage (reading a DS2408): // // Put everything in a buffer so we can compute the CRC easily. @@ -447,7 +422,7 @@ uint8_t onewire_crc8(const uint8_t *addr, uint8_t len) // This should just point into the received data, // *not* at a 16-bit integer. // @param crc - The crc starting value (optional) -// @return True, iff the CRC matches. +// @return 1, iff the CRC matches. bool onewire_check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc) { crc = ~onewire_crc16(input, len, crc); @@ -488,7 +463,4 @@ uint16_t onewire_crc16(const uint8_t* input, uint16_t len, uint16_t crc) crc ^= cdata; } return crc; -} -#endif - -#endif +} \ No newline at end of file diff --git a/extras/onewire/onewire.h b/extras/onewire/onewire.h index 7c86baa..1a0b15d 100644 --- a/extras/onewire/onewire.h +++ b/extras/onewire/onewire.h @@ -5,11 +5,10 @@ #include "FreeRTOS.h" // 1 for keeping the parasitic power on H -#define owDefaultPower 1 +#define ONEWIRE_DEFAULT_POWER 1 -#define NUM_OW 20 -#define FALSE 0 -#define TRUE 1 +// Maximum number of devices. +#define ONEWIRE_NUM 20 // You can exclude certain features from OneWire. In theory, this // might save some space. In practice, the compiler automatically @@ -21,32 +20,15 @@ // is the exception, because it selects a fast but large algorithm // or a small but slow algorithm. -// you can exclude onewire_search by defining that to 0 -#ifndef ONEWIRE_SEARCH -#define ONEWIRE_SEARCH 1 -#endif - -// You can exclude CRC checks altogether by defining this to 0 -#ifndef ONEWIRE_CRC -#define ONEWIRE_CRC 1 -#endif - // Select the table-lookup method of computing the 8-bit CRC // by setting this to 1. The lookup table enlarges code size by // about 250 bytes. It does NOT consume RAM (but did in very // old versions of OneWire). If you disable this, a slower // but very compact algorithm is used. #ifndef ONEWIRE_CRC8_TABLE -//#define ONEWIRE_CRC8_TABLE 0 #define ONEWIRE_CRC8_TABLE 0 #endif -// You can allow 16-bit CRC checks by defining this to 1 -// (Note that ONEWIRE_CRC must also be 1.) -#ifndef ONEWIRE_CRC16 -#define ONEWIRE_CRC16 1 -#endif - // Platform specific I/O definitions #define noInterrupts portDISABLE_INTERRUPTS #define interrupts portENABLE_INTERRUPTS @@ -58,7 +40,6 @@ #define DIRECT_WRITE_LOW(pin) gpio_write(pin, 0) #define DIRECT_WRITE_HIGH(pin) gpio_write(pin, 1) - void onewire_init(uint8_t pin); // Perform a 1-Wire reset cycle. Returns 1 if a device responds @@ -99,7 +80,6 @@ void onewire_read_bytes(uint8_t pin, uint8_t *buf, uint16_t count); // someone shorts your bus. void onewire_depower(uint8_t pin); -#if ONEWIRE_SEARCH // Clear the search state so that if will start from the beginning again. void onewire_reset_search(uint8_t pin); @@ -114,14 +94,11 @@ void onewire_target_search(uint8_t pin, uint8_t family_code); // get garbage. The order is deterministic. You will always get // the same devices in the same order. uint8_t onewire_search(uint8_t pin, uint8_t *newAddr); -#endif -#if ONEWIRE_CRC // Compute a Dallas Semiconductor 8 bit CRC, these are used in the // ROM and scratchpad registers. uint8_t onewire_crc8(const uint8_t *addr, uint8_t len); -#if ONEWIRE_CRC16 // Compute the 1-Wire CRC16 and compare it against the received CRC. // Example usage (reading a DS2408): // // Put everything in a buffer so we can compute the CRC easily. @@ -157,7 +134,5 @@ bool onewire_check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inve // @param crc - The crc starting value (optional) // @return The CRC16, as defined by Dallas Semiconductor. uint16_t onewire_crc16(const uint8_t* input, uint16_t len, uint16_t crc); -#endif -#endif #endif