# Copyright 2024 The Pigweed Authors
#
# Licensed 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
#
#     https://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.

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "bme688",
    srcs = ["bme688.cc"],
    hdrs = ["bme688.h"],
    implementation_deps = [
        "@pigweed//pw_assert",
        "@pigweed//pw_bytes",
        "@pigweed//pw_function",
        "@pigweed//pw_log",
        "@pigweed//pw_span",
        "@pigweed//pw_thread:sleep",
    ],
    deps = [
        "//modules/air_sensor",
        "//modules/worker",
        "@bme68x_sensor_api//:bme68x",
        "@pigweed//pw_chrono:system_clock",
        "@pigweed//pw_chrono:system_timer",
        "@pigweed//pw_i2c:initiator",
        "@pigweed//pw_i2c:register_device",
        "@pigweed//pw_log",
        "@pigweed//pw_status",
    ],
)

cc_library(
    name = "ltr559",
    srcs = ["ltr559_light_and_prox_sensor.cc"],
    hdrs = ["ltr559_light_and_prox_sensor.h"],
    implementation_deps = [
        "@pigweed//pw_log",
    ],
    deps = [
        "//modules/light:sensor",
        "//modules/proximity:sensor",
        "@pigweed//pw_chrono:system_clock",
        "@pigweed//pw_i2c:initiator",
        "@pigweed//pw_i2c:register_device",
        "@pigweed//pw_result",
        "@pigweed//pw_status",
    ],
)

cc_library(
    name = "pico_board",
    srcs = ["pico_board.cc"],
    hdrs = ["pico_board.h"],
    implementation_deps = [
        "@pico-sdk//src/rp2_common/hardware_flash",
        "@pigweed//pw_bytes",
    ],
    deps = [
        "//modules/board",
        "@pico-sdk//src/rp2_common/hardware_adc",
        "@pico-sdk//src/rp2_common/pico_bootrom",
        "@pico-sdk//src/rp2_common/pico_stdlib:pico_stdlib",
    ],
)

cc_library(
    name = "pico_pwm_gpio",
    srcs = ["pico_pwm_gpio.cc"],
    hdrs = ["pico_pwm_gpio.h"],
    implementation_deps = [
        "@pico-sdk//src/rp2_common/hardware_gpio",
        "@pico-sdk//src/rp2_common/hardware_irq",
        "@pico-sdk//src/rp2_common/pico_stdlib:pico_stdlib",
        "@pigweed//pw_assert",
        "@pigweed//pw_log",
    ],
    deps = [
        "//modules/pwm:digital_out",
        "@pico-sdk//src/rp2_common/hardware_pwm",
        "@pigweed//pw_chrono:system_clock",
        "@pigweed//pw_digital_io",
        "@pigweed//pw_digital_io_rp2040",
        "@pigweed//pw_function",
    ],
)
