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)17 void 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)42 nrfs_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)53 void nrfs_reset_uninit(void)
54 {
55 	m_cb.is_initialized = false;
56 }
57 
nrfs_request_reset(void)58 nrfs_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