1 /*
2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 * Description: log oml ota module to rom implementation
15 * Author:
16 * Create: 2020-4-17
17 */
18
19 #include "non_os.h"
20 #include "log_buffer.h"
21 #include "log_oam_ota.h"
22 #include "log_oam_status.h"
23 #include "log_oam_pcm.h"
24
25 #ifdef __cplusplus
26 #if __cplusplus
27 extern "C" {
28 #endif
29 #endif
30
31 #define BUFFER_ARRAY_LEN 4
32
33 static uint32_t g_ota_start = OM_OTA_OPEN;
34
35 static log_oml_ota_write_handler g_log_oml_ota_write_deal = log_oml_ota_write_deal;
36
37 static log_oam_status_store_handler g_log_oam_status_store_deal = log_oam_status_store_deal;
38
39 static log_oml_bt_sdw_handler g_log_oml_bt_sdw_deal = log_oml_bt_sample_data_write_deal;
40
log_oml_ota_set(om_ota_config_t value)41 void log_oml_ota_set(om_ota_config_t value)
42 {
43 if (value > OM_OTA_CLOSED) {
44 return;
45 }
46 non_os_enter_critical();
47 g_ota_start = (uint32_t)value;
48 non_os_exit_critical();
49 }
50
log_oml_ota_get(void)51 uint32_t log_oml_ota_get(void)
52 {
53 return g_ota_start;
54 }
55
log_oml_ota_write(uint8_t mode_id,uint16_t msg_id,uint16_t length,const uint8_t * msg_buffer)56 void log_oml_ota_write(uint8_t mode_id, uint16_t msg_id, uint16_t length, const uint8_t *msg_buffer)
57 {
58 log_oml_ota_write_trigger_callback(mode_id, msg_id, length, msg_buffer);
59 }
60
log_oml_ota_write_register_callback(log_oml_ota_write_handler callback)61 void log_oml_ota_write_register_callback(log_oml_ota_write_handler callback)
62 {
63 if (callback != NULL) {
64 g_log_oml_ota_write_deal = callback;
65 }
66 }
67
log_oml_ota_write_unregister_callback(void)68 void log_oml_ota_write_unregister_callback(void)
69 {
70 g_log_oml_ota_write_deal = NULL;
71 }
72
log_oml_ota_write_trigger_callback(uint8_t mode_id,uint16_t msg_id,uint16_t length,const uint8_t * msg_buffer)73 void log_oml_ota_write_trigger_callback(uint8_t mode_id, uint16_t msg_id, uint16_t length, const uint8_t *msg_buffer)
74 {
75 if (g_log_oml_ota_write_deal != NULL) {
76 g_log_oml_ota_write_deal(mode_id, msg_id, length, msg_buffer);
77 }
78 }
79
log_oam_status_store(uint8_t prime_id,uint16_t msg_id,uint16_t mode,uint32_t length,...)80 void log_oam_status_store(uint8_t prime_id, uint16_t msg_id, uint16_t mode, uint32_t length, ...)
81 {
82 uint32_t buffer[BUFFER_ARRAY_LEN] = {0};
83 uint8_t len;
84 va_list args;
85
86 if (length > BUFFER_ARRAY_LEN) {
87 return;
88 }
89
90 va_start(args, length);
91 for (len = 0; len < length; len++) {
92 buffer[len] = (uint32_t)va_arg(args, uint32_t);
93 }
94 va_end(args);
95
96 log_oam_status_store_trigger_callback(prime_id, msg_id, mode, (uint16_t)length, buffer);
97 }
98
log_oam_status_store_register_callback(log_oam_status_store_handler callback)99 void log_oam_status_store_register_callback(log_oam_status_store_handler callback)
100 {
101 if (callback != NULL) {
102 g_log_oam_status_store_deal = callback;
103 }
104 }
105
log_oam_status_store_unregister_callback(void)106 void log_oam_status_store_unregister_callback(void)
107 {
108 g_log_oam_status_store_deal = NULL;
109 }
110
log_oam_status_store_trigger_callback(uint8_t prime_id,uint16_t msg_id,uint16_t mode,uint16_t length,const uint32_t * param)111 void log_oam_status_store_trigger_callback(uint8_t prime_id, uint16_t msg_id, uint16_t mode,
112 uint16_t length, const uint32_t *param)
113 {
114 if (g_log_oam_status_store_deal != NULL) {
115 g_log_oam_status_store_deal(prime_id, msg_id, mode, length, param);
116 }
117 }
118
log_oml_bt_sample_data_write(uint8_t mode_id,uint16_t msg_id,uint16_t length,const uint8_t * buffer)119 void log_oml_bt_sample_data_write(uint8_t mode_id, uint16_t msg_id, uint16_t length, const uint8_t *buffer)
120 {
121 log_oml_bt_sample_data_write_trigger_callback(mode_id, msg_id, length, buffer);
122 }
123
log_oml_bt_sample_data_write_register_callback(log_oml_bt_sdw_handler callback)124 void log_oml_bt_sample_data_write_register_callback(log_oml_bt_sdw_handler callback)
125 {
126 if (callback != NULL) {
127 g_log_oml_bt_sdw_deal = callback;
128 }
129 }
130
log_oml_bt_sample_data_write_unregister_callback(void)131 void log_oml_bt_sample_data_write_unregister_callback(void)
132 {
133 g_log_oml_bt_sdw_deal = NULL;
134 }
135
log_oml_bt_sample_data_write_trigger_callback(uint8_t mode_id,uint16_t msg_id,uint16_t length,const uint8_t * buffer)136 void log_oml_bt_sample_data_write_trigger_callback(uint8_t mode_id, uint16_t msg_id, uint16_t length,
137 const uint8_t *buffer)
138 {
139 if (g_log_oml_bt_sdw_deal != NULL) {
140 g_log_oml_bt_sdw_deal(mode_id, msg_id, length, buffer);
141 }
142 }
143
144 #ifdef __cplusplus
145 #if __cplusplus
146 }
147 #endif
148 #endif
149