Implement a secure ICS protocol targeting LoRa Node151 microcontroller for controlling irrigation.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

126 lignes
3.8 KiB

  1. /**
  2. * \file
  3. *
  4. * \brief Events declaration.
  5. *
  6. * Copyright (C) 2015 Atmel Corporation. All rights reserved.
  7. *
  8. * \asf_license_start
  9. *
  10. * \page License
  11. *
  12. * Redistribution and use in source and binary forms, with or without
  13. * modification, are permitted provided that the following conditions are met:
  14. *
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. *
  18. * 2. Redistributions in binary form must reproduce the above copyright notice,
  19. * this list of conditions and the following disclaimer in the documentation
  20. * and/or other materials provided with the distribution.
  21. *
  22. * 3. The name of Atmel may not be used to endorse or promote products derived
  23. * from this software without specific prior written permission.
  24. *
  25. * 4. This software may only be redistributed and used in connection with an
  26. * Atmel microcontroller product.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
  29. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  30. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  31. * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
  32. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  33. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  34. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  35. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  36. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  37. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  38. * POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. * \asf_license_stop
  41. *
  42. */
  43. #ifndef _UTILS_EVENT_H_INCLUDED
  44. #define _UTILS_EVENT_H_INCLUDED
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48. #include <utils.h>
  49. #include <utils_list.h>
  50. #include <events.h>
  51. /**
  52. * \brief The maximum amount of events
  53. */
  54. #define EVENT_MAX_AMOUNT 8
  55. /**
  56. * \brief The size of event mask used, it is EVENT_MAX_AMOUNT rounded up to the
  57. * closest number divisible by 8.
  58. */
  59. #define EVENT_MASK_SIZE (round_up(EVENT_MAX_AMOUNT, 8))
  60. /**
  61. * \brief The type of event ID. IDs should start with 0 and be in numerical order.
  62. */
  63. typedef uint8_t event_id_t;
  64. /**
  65. * \brief The type of returned parameter. This type is big enough to contain
  66. * pointer to data on any platform.
  67. */
  68. typedef uintptr_t event_data_t;
  69. /**
  70. * \brief The type of returned parameter. This type is big enough to contain
  71. * pointer to data on any platform.
  72. */
  73. typedef void (*event_cb_t)(event_id_t id, event_data_t data);
  74. /**
  75. * \brief Event structure
  76. */
  77. struct event {
  78. struct list_element elem; /*! The pointer to next event */
  79. uint8_t mask[EVENT_MASK_SIZE]; /*! Mask of event IDs callback is called for */
  80. event_cb_t cb; /*! Callback to be called when an event occurs */
  81. };
  82. /**
  83. * \brief Subscribe to event
  84. *
  85. * \param[in] event The pointer to event structure
  86. * \param[in] id The event ID to subscribe to
  87. * \param[in] cb The callback function to call when the given event occurs
  88. *
  89. * \return The status of subscription
  90. */
  91. int32_t event_subscribe(struct event *const event, const event_id_t id, event_cb_t cb);
  92. /**
  93. * \brief Remove event from subscription
  94. *
  95. * \param[in] event The pointer to event structure
  96. * \param[in] id The event ID to remove subscription from
  97. *
  98. * \return The status of subscription removing
  99. */
  100. int32_t event_unsubscribe(struct event *const event, const event_id_t id);
  101. /**
  102. * \brief Post event
  103. *
  104. * \param[in] id The event ID to post
  105. * \param[in] data The event data to be passed to event subscribers
  106. */
  107. void event_post(const event_id_t id, const event_data_t data);
  108. #ifdef __cplusplus
  109. }
  110. #endif
  111. #endif /* _UTILS_EVENT_H_INCLUDED */