@@ -35,6 +35,7 @@ typedef struct {
3535
3636typedef struct ds18b20_device_t {
3737 onewire_bus_handle_t bus ;
38+ bool single_mode ;
3839 onewire_device_address_t addr ;
3940 uint8_t th_user1 ;
4041 uint8_t tl_user2 ;
@@ -61,6 +62,22 @@ esp_err_t ds18b20_new_device(onewire_device_t *device, const ds18b20_config_t *c
6162 return ESP_OK ;
6263}
6364
65+ esp_err_t ds18b20_new_single_device (onewire_bus_handle_t bus , const ds18b20_config_t * config , ds18b20_device_handle_t * ret_ds18b20 )
66+ {
67+ ds18b20_device_t * ds18b20 = NULL ;
68+ ESP_RETURN_ON_FALSE (bus && config && ret_ds18b20 , ESP_ERR_INVALID_ARG , TAG , "invalid argument" );
69+
70+ ds18b20 = calloc (1 , sizeof (ds18b20_device_t ));
71+ ESP_RETURN_ON_FALSE (ds18b20 , ESP_ERR_NO_MEM , TAG , "no mem for ds18b20" );
72+ ds18b20 -> bus = bus ;
73+ ds18b20 -> addr = 0 ;
74+ ds18b20 -> single_mode = true;
75+ ds18b20 -> resolution = DS18B20_RESOLUTION_12B ; // DS18B20 default resolution is 12 bits
76+
77+ * ret_ds18b20 = ds18b20 ;
78+ return ESP_OK ;
79+ }
80+
6481esp_err_t ds18b20_del_device (ds18b20_device_handle_t ds18b20 )
6582{
6683 ESP_RETURN_ON_FALSE (ds18b20 , ESP_ERR_INVALID_ARG , TAG , "invalid argument" );
@@ -70,6 +87,11 @@ esp_err_t ds18b20_del_device(ds18b20_device_handle_t ds18b20)
7087
7188static esp_err_t ds18b20_send_command (ds18b20_device_handle_t ds18b20 , uint8_t cmd )
7289{
90+ // No addres mode (singe device connectd to the bus) created using ds18b20_new_single_device
91+ if (ds18b20 -> single_mode ) {
92+ uint8_t tx_buffer [2 ] = {ONEWIRE_CMD_SKIP_ROM , cmd };
93+ return onewire_bus_write_bytes (ds18b20 -> bus , tx_buffer , sizeof (tx_buffer ));
94+ }
7395 // send command
7496 uint8_t tx_buffer [10 ] = {0 };
7597 tx_buffer [0 ] = ONEWIRE_CMD_MATCH_ROM ;
0 commit comments