| /**************************************************************************** |
| * drivers/1wire/1wire_internal.h |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. The |
| * ASF licenses this file to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| * |
| ****************************************************************************/ |
| |
| #ifndef __DRIVERS_1WIRE_1WIRE_INTERNAL_H |
| #define __DRIVERS_1WIRE_1WIRE_INTERNAL_H |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| #include <nuttx/config.h> |
| |
| #include <stdbool.h> |
| #include <nuttx/mutex.h> |
| #include <nuttx/power/pm.h> |
| |
| /**************************************************************************** |
| * Public Types |
| ****************************************************************************/ |
| |
| struct onewire_dev_s; |
| |
| struct onewire_master_s |
| { |
| FAR struct onewire_dev_s *dev; /* 1-Wire lower half */ |
| rmutex_t devlock; /* Re-entrant lock */ |
| int nslaves; /* Number of 1-wire slaves */ |
| int maxslaves; /* Maximum number of 1-wire slaves */ |
| bool insearch; /* If we are in middle of 1-wire search */ |
| #ifdef CONFIG_PM |
| struct pm_callback_s pm_cb; /* PM callbacks */ |
| #endif |
| }; |
| |
| struct onewire_slave_s |
| { |
| FAR struct onewire_master_s *master; /* Slave's bus master */ |
| uint64_t romcode; /* Unique ROM id in bus */ |
| }; |
| |
| /**************************************************************************** |
| * Public Function Prototypes |
| ****************************************************************************/ |
| |
| /* Additional CRC helpers from 1wire_crc.c */ |
| |
| bool onewire_valid_rom(uint64_t rom); |
| |
| /* Rest are from 1wire.c */ |
| |
| int onewire_addslave(FAR struct onewire_master_s *master, |
| FAR struct onewire_slave_s *slave); |
| int onewire_removeslave(FAR struct onewire_master_s *master, |
| FAR struct onewire_slave_s *slave); |
| |
| /**************************************************************************** |
| * Name: onewire_reset_resume |
| * |
| * Description: |
| * |
| ****************************************************************************/ |
| |
| int onewire_reset_resume(FAR struct onewire_master_s *master); |
| |
| /**************************************************************************** |
| * Name: onewire_reset_select |
| * |
| * Description: |
| * |
| ****************************************************************************/ |
| |
| int onewire_reset_select(FAR struct onewire_master_s *master, |
| uint64_t romcode); |
| |
| /**************************************************************************** |
| * Name: onewire_triplet |
| * |
| * Description: |
| * Used by 1-wire search algorithm. Reads two bits and writes |
| * one based on comparison of read bits. |
| * |
| * Input Parameters: |
| * search_bit - Bit to write if both id_bit and cmp_id_bit match |
| * |
| * Output Parameters: |
| * taken_bit - Bit indicating the direction where the search is |
| * progressing. |
| * |
| * Return Value: |
| * Number of valid bits or negative on error. |
| * |
| ****************************************************************************/ |
| |
| int onewire_triplet(FAR struct onewire_master_s *master, |
| uint8_t search_bit, |
| FAR uint8_t *taken_bit); |
| |
| /**************************************************************************** |
| * Name: onewire_search |
| * |
| * Description: |
| * Search all devices from a 1-wire network. This is the 1-wire search |
| * algorithm from Maxim Application Note 187. Note! This is an atomic |
| * operation. The callback 'cb_search' can't execute any function that will |
| * lock this bus, because of the locked state as long the search is active. |
| * |
| * Input Parameters: |
| * master - Pointer to the allocated 1-wire interface |
| * family - Limit search to devices of matching family |
| * alarmonly - Limit search to devices on alarm state |
| * cb_search - Callback to call on each device found |
| * arg - Argument passed to cb_search |
| * |
| * Return Value: |
| * Number of slaves present and matching family. |
| * |
| ****************************************************************************/ |
| |
| int onewire_search(FAR struct onewire_master_s *master, |
| int family, |
| bool alarmonly, |
| CODE void (*cb_search)(int family, |
| uint64_t romcode, |
| FAR void *arg), |
| FAR void *arg); |
| |
| #endif /* __DRIVERS_1WIRE_1WIRE_INTERNAL_H */ |