1 /* 2 * Copyright (c) 2024 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #include <internal/nrfs_backend.h> 8 #include <internal/nrfs_callbacks.h> 9 #include <nrfs_reset.h> 10 11 typedef struct { 12 nrfs_reset_evt_handler_t handler; 13 bool is_initialized; 14 } nrfs_reset_cb_t; 15 static nrfs_reset_cb_t m_cb; 16 nrfs_reset_service_notify(void * p_notification,size_t size)17void nrfs_reset_service_notify(void *p_notification, size_t size) 18 { 19 if (!m_cb.handler || !m_cb.is_initialized) { 20 return; 21 } 22 23 nrfs_reset_evt_t evt; 24 nrfs_generic_t *p_data = (nrfs_generic_t *)p_notification; 25 if (NRFS_HDR_FILTER_ERR_GET(&p_data->hdr)) { 26 evt.type = NRFS_RESET_EVT_REJECT; 27 m_cb.handler(&evt); 28 return; 29 } 30 31 switch (p_data->hdr.req) { 32 case NRFS_RESET_REQ: 33 evt.type = NRFS_RESET_EVT_DONE; 34 m_cb.handler(&evt); 35 break; 36 37 default: 38 break; 39 } 40 } 41 nrfs_reset_init(nrfs_reset_evt_handler_t handler)42nrfs_err_t nrfs_reset_init(nrfs_reset_evt_handler_t handler) 43 { 44 if (m_cb.is_initialized) { 45 return NRFS_ERR_INVALID_STATE; 46 } 47 48 m_cb.handler = handler; 49 m_cb.is_initialized = true; 50 return NRFS_SUCCESS; 51 } 52 nrfs_reset_uninit(void)53void nrfs_reset_uninit(void) 54 { 55 m_cb.is_initialized = false; 56 } 57 nrfs_request_reset(void)58nrfs_err_t nrfs_request_reset(void) 59 { 60 nrfs_reset_req_t req; 61 62 NRFS_SERVICE_HDR_FILL(&req, NRFS_RESET_REQ); 63 req.ctx.ctx = (uint32_t)0; 64 65 return nrfs_backend_send(&req, sizeof(req)); 66 } 67