/* * Copyright (c) 2022 Martin Jäger * Copyright (c) 2022 tado GmbH * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_SUBSYS_LORAWAN_SERVICES_LORAWAN_SERVICES_H_ #define ZEPHYR_SUBSYS_LORAWAN_SERVICES_LORAWAN_SERVICES_H_ #include #include /** * Unique package identifiers used for LoRaWAN services. */ enum lorawan_package_id { LORAWAN_PACKAGE_ID_COMPLIANCE = 0, LORAWAN_PACKAGE_ID_CLOCK_SYNC = 1, LORAWAN_PACKAGE_ID_REMOTE_MULTICAST_SETUP = 2, LORAWAN_PACKAGE_ID_FRAG_TRANSPORT_BLOCK = 3, }; /** * Default ports used for LoRaWAN services. */ enum lorawan_services_port { LORAWAN_PORT_MULTICAST = 200, LORAWAN_PORT_FRAG_TRANSPORT = 201, LORAWAN_PORT_CLOCK_SYNC = 202, }; /** * @brief Send unconfirmed LoRaWAN uplink message after the specified timeout * * @param port Port to be used for sending data. * @param data Data buffer to be sent. * @param len Length of the data to be sent. Maximum length of the * buffer is 18 bytes. * @param timeout Relative timeout in milliseconds when the uplink message * should be scheduled. * * @return 0 if message was successfully queued, negative errno otherwise. */ int lorawan_services_schedule_uplink(uint8_t port, uint8_t *data, uint8_t len, uint32_t timeout); /** * @brief Reschedule a delayable work item to the LoRaWAN services work queue * * This work queue is used to schedule the uplink messages, but can be used by * any of the services for internal tasks. * * @param dwork pointer to the delayable work item. * @param delay the time to wait before submitting the work item. * @returns Result of call to k_work_reschedule_for_queue() */ int lorawan_services_reschedule_work(struct k_work_delayable *dwork, k_timeout_t delay); #endif /* ZEPHYR_SUBSYS_LORAWAN_SERVICES_LORAWAN_SERVICES_H_ */