From f2613a61548301de504bbaa1af06ab81c59f0685 Mon Sep 17 00:00:00 2001 From: Ari Parkkila Date: Mon, 19 Feb 2018 12:44:24 +0200 Subject: [PATCH] Cellular logging to use mbed_trace --- .../TESTS/cellular/cellular_all/network.cpp | 24 ++--- .../TESTS/cellular/cellular_all/power.cpp | 4 +- .../TESTS/cellular/cellular_all/sim.cpp | 2 +- .../TESTS/cellular/cellular_all/stack.cpp | 4 +- .../test_at_cellularnetwork.cpp | 2 - .../at/at_cellularsim/test_at_cellularsim.cpp | 2 - .../at/at_cellularsms/test_at_cellularsms.cpp | 2 - .../test_at_cellularstack.cpp | 2 - .../UNITTESTS/at/athandler/test_athandler.cpp | 2 - .../easy_cellular/CellularConnectionUtil.cpp | 88 +++++++++---------- .../easy_cellular/EasyCellularConnection.cpp | 10 +-- features/cellular/framework/AT/ATHandler.cpp | 74 ++++++++-------- .../framework/AT/AT_CellularMultiplexer.cpp | 2 +- .../framework/AT/AT_CellularNetwork.cpp | 34 +++---- .../framework/AT/AT_CellularPower.cpp | 2 +- .../cellular/framework/AT/AT_CellularSIM.cpp | 4 +- .../cellular/framework/AT/AT_CellularSMS.cpp | 14 +-- .../cellular/framework/common/CellularLog.cpp | 67 -------------- .../cellular/framework/common/CellularLog.h | 69 +++------------ 19 files changed, 144 insertions(+), 264 deletions(-) delete mode 100644 features/cellular/framework/common/CellularLog.cpp diff --git a/features/cellular/TESTS/cellular/cellular_all/network.cpp b/features/cellular/TESTS/cellular/cellular_all/network.cpp index cb1589a846..2229dba1bd 100644 --- a/features/cellular/TESTS/cellular/cellular_all/network.cpp +++ b/features/cellular/TESTS/cellular/cellular_all/network.cpp @@ -21,39 +21,39 @@ using namespace mbed; static bool wait_register() { - log_info("Try registering to network..."); + tr_info("Try registering to network..."); if (network->set_registration() != NSAPI_ERROR_OK) { - log_error("Network registration request failed."); + tr_error("Network registration request failed."); return false; } CellularNetwork::RegistrationStatus status; for (int i=0; i<180; i++) { - log_info("Register to network %d...", i); + tr_info("Register to network %d...", i); for (int type = 0; type < CellularNetwork::C_MAX; type++) { if (network->get_registration_status((CellularNetwork::RegistrationType)type, status) == NSAPI_ERROR_OK) { - log_info("status %d...", status); + tr_info("status %d...", status); switch (status) { case CellularNetwork::RegisteredRoaming: // fall-through case CellularNetwork::RegisteredHomeNetwork: - log_info("Registered to network."); + tr_info("Registered to network."); return true; case CellularNetwork::RegisteredSMSOnlyRoaming: // fall-through case CellularNetwork::RegisteredSMSOnlyHome: - log_warn("SMS only network registration!"); + tr_warn("SMS only network registration!"); return true; case CellularNetwork::RegisteredCSFBNotPreferredRoaming: // fall-through case CellularNetwork::RegisteredCSFBNotPreferredHome: - log_warn("Not preferred network registration!"); + tr_warn("Not preferred network registration!"); return true; case CellularNetwork::AttachedEmergencyOnly: - log_warn("Emergency only network registration!"); + tr_warn("Emergency only network registration!"); return true; case CellularNetwork::RegistrationDenied: - log_warn("Network registration denied!"); + tr_warn("Network registration denied!"); wait(i); break; case CellularNetwork::NotRegistered: @@ -71,9 +71,9 @@ static bool wait_register() void test_attach() { - log_info("Register to network."); + tr_info("Register to network."); TEST_ASSERT(wait_register()); - log_info("Attach to network."); + tr_info("Attach to network."); nsapi_error_t err = network->set_attach(); TEST_ASSERT(!err); CellularNetwork::AttachStatus status; @@ -91,7 +91,7 @@ void test_get_ip_address() { const char *ip = network->get_ip_address(); TEST_ASSERT(ip && ip[0]); - log_info("IP: %s\r\n", ip); + tr_info("IP: %s\r\n", ip); } void test_disconnect() diff --git a/features/cellular/TESTS/cellular/cellular_all/power.cpp b/features/cellular/TESTS/cellular/cellular_all/power.cpp index db5c382917..b6d4a434b6 100644 --- a/features/cellular/TESTS/cellular/cellular_all/power.cpp +++ b/features/cellular/TESTS/cellular/cellular_all/power.cpp @@ -30,7 +30,7 @@ static bool start_cellular_at(CellularPower *pwr) if (err != NSAPI_ERROR_OK && err != NSAPI_ERROR_UNSUPPORTED) { return false; } - log_info("Wait for cellular device 180 seconds..."); + tr_info("Wait for cellular device 180 seconds..."); for (int i = 0; i < 180; i++) { if (pwr->set_at_mode() == NSAPI_ERROR_OK) { return true; @@ -44,7 +44,7 @@ void test_create_power() { TEST_ASSERT(start_cellular_at(pwr)); - log_info("Cellular device is ready!"); + tr_info("Cellular device is ready!"); } // TODO: tests still missing for off, sleep, opt_power_save_mode, opt_receive_period diff --git a/features/cellular/TESTS/cellular/cellular_all/sim.cpp b/features/cellular/TESTS/cellular/cellular_all/sim.cpp index 7a544f8073..d95069baaf 100644 --- a/features/cellular/TESTS/cellular/cellular_all/sim.cpp +++ b/features/cellular/TESTS/cellular/cellular_all/sim.cpp @@ -26,7 +26,7 @@ void test_get_sim_state() { wait(1); CellularSIM::SimState state = CellularSIM::SimStateUnknown; - log_info("Wait SIM for 180 seconds..."); + tr_info("Wait SIM for 180 seconds..."); for (int i = 0; i < 180; i++) { CellularSIM::SimState tmp_state; if ((sim->get_sim_state(tmp_state) == NSAPI_ERROR_OK) && tmp_state != CellularSIM::SimStateUnknown) { diff --git a/features/cellular/TESTS/cellular/cellular_all/stack.cpp b/features/cellular/TESTS/cellular/cellular_all/stack.cpp index 1cd2e271ed..d4f58c2ede 100644 --- a/features/cellular/TESTS/cellular/cellular_all/stack.cpp +++ b/features/cellular/TESTS/cellular/cellular_all/stack.cpp @@ -54,7 +54,7 @@ void test_socket_send_receive_blocking() // Send to echo server while (send_tries <= max_send_tries) { - log_info("ONE!!!"); + tr_info("ONE!!!"); send_count = socket.sendto(SERVER_IP_ADDR, SERVER_UDP_PORT, send_buffer, sizeof(send_buffer)); TEST_ASSERT_MESSAGE(send_count == sizeof(send_buffer), "Sent count doesnt match sent buffer!"); send_tries++; @@ -65,7 +65,7 @@ void test_socket_send_receive_blocking() // 2 tries. First recv attempt should be blocked and wait for a max 5 seconds for socket read flag int recv_tries = 2; while (recv_tries >= 0) { - log_info("RECV!!!"); + tr_info("RECV!!!"); receive_count = socket.recvfrom(&address, receive_buffer, sizeof(receive_buffer)); if (receive_count > 0) { break; diff --git a/features/cellular/UNITTESTS/at/at_cellularnetwork/test_at_cellularnetwork.cpp b/features/cellular/UNITTESTS/at/at_cellularnetwork/test_at_cellularnetwork.cpp index 7a5ca66af6..a542bc0488 100644 --- a/features/cellular/UNITTESTS/at/at_cellularnetwork/test_at_cellularnetwork.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularnetwork/test_at_cellularnetwork.cpp @@ -28,8 +28,6 @@ using namespace mbed; using namespace events; -uint32_t mbed::cellular_log_time = 0; - void conn_stat_cb(nsapi_error_t error) { diff --git a/features/cellular/UNITTESTS/at/at_cellularsim/test_at_cellularsim.cpp b/features/cellular/UNITTESTS/at/at_cellularsim/test_at_cellularsim.cpp index 195c9ccf4e..529475a88e 100644 --- a/features/cellular/UNITTESTS/at/at_cellularsim/test_at_cellularsim.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularsim/test_at_cellularsim.cpp @@ -28,8 +28,6 @@ using namespace mbed; using namespace events; -uint32_t mbed::cellular_log_time = 0; - Test_AT_CellularSIM::Test_AT_CellularSIM() { ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK; diff --git a/features/cellular/UNITTESTS/at/at_cellularsms/test_at_cellularsms.cpp b/features/cellular/UNITTESTS/at/at_cellularsms/test_at_cellularsms.cpp index f09e961ac7..d6ae16ffe7 100644 --- a/features/cellular/UNITTESTS/at/at_cellularsms/test_at_cellularsms.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularsms/test_at_cellularsms.cpp @@ -28,8 +28,6 @@ using namespace mbed; using namespace events; -uint32_t mbed::cellular_log_time = 0; - Test_AT_CellularSMS::Test_AT_CellularSMS() { ATHandler_stub::return_given_size = false; diff --git a/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp b/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp index 77f72ef012..a5f655b815 100644 --- a/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp @@ -29,8 +29,6 @@ using namespace mbed; using namespace events; -uint32_t mbed::cellular_log_time = 0; - class MyStack : public AT_CellularStack { public: bool bool_value; diff --git a/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp b/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp index fd4a9186ce..9166a32ab7 100644 --- a/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp +++ b/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp @@ -30,8 +30,6 @@ using namespace mbed; using namespace events; -uint32_t mbed::cellular_log_time = 0; - void urc_callback() { } diff --git a/features/cellular/easy_cellular/CellularConnectionUtil.cpp b/features/cellular/easy_cellular/CellularConnectionUtil.cpp index ebdb9f4177..15a7aa9348 100644 --- a/features/cellular/easy_cellular/CellularConnectionUtil.cpp +++ b/features/cellular/easy_cellular/CellularConnectionUtil.cpp @@ -62,7 +62,7 @@ nsapi_error_t CellularConnectionUtil::init() at_queue.chain(&_queue); - log_info("init done..."); + tr_info("init done..."); return NSAPI_ERROR_OK; } @@ -77,10 +77,10 @@ bool CellularConnectionUtil::open_power(FileHandle *fh) nsapi_error_t err = _power->on(); if (err != NSAPI_ERROR_OK && err != NSAPI_ERROR_UNSUPPORTED) { - log_warn("Cellular start failed. Power off/on."); + tr_warn("Cellular start failed. Power off/on."); err = _power->off(); if (err != NSAPI_ERROR_OK && err != NSAPI_ERROR_UNSUPPORTED) { - log_error("Cellular power down failed!"); + tr_error("Cellular power down failed!"); } return false; } @@ -107,14 +107,14 @@ bool CellularConnectionUtil::open_sim() // wait until SIM is readable // here you could add wait(secs) if you know start delay of your SIM while (sim->get_sim_state(state) != NSAPI_ERROR_OK || state == CellularSIM::SimStateUnknown) { - log_debug("Waiting for SIM (state %d)...", state); + tr_debug("Waiting for SIM (state %d)...", state); return false; } if (state == CellularSIM::SimStatePinNeeded) { - log_info("SIM pin required, entering pin: %s", _sim_pin); + tr_info("SIM pin required, entering pin: %s", _sim_pin); err = sim->set_pin(_sim_pin); if (err) { - log_error("SIM pin set failed with: %d, bailing out...", err); + tr_error("SIM pin set failed with: %d, bailing out...", err); return false; } // here you could add wait(secs) if you know delay of changing PIN on your SIM @@ -122,13 +122,13 @@ bool CellularConnectionUtil::open_sim() if (sim->get_sim_state(state) == NSAPI_ERROR_OK && state == CellularSIM::SimStateReady) { break; } - log_debug("SIM state: %d", state); + tr_debug("SIM state: %d", state); return false; } } return state == CellularSIM::SimStateReady; } else { - log_info("Continue without SIM."); + tr_info("Continue without SIM."); return true; } } @@ -138,13 +138,13 @@ void CellularConnectionUtil::device_ready() CellularInformation *info = _cellularDevice->open_information(_serial); if (info->get_manufacturer(device_info_buf, sizeof(device_info_buf)) == NSAPI_ERROR_OK) { - log_info("Cellular device manufacturer: %s", device_info_buf); + tr_info("Cellular device manufacturer: %s", device_info_buf); } if (info->get_model(device_info_buf, sizeof(device_info_buf)) == NSAPI_ERROR_OK) { - log_info("Cellular device model: %s", device_info_buf); + tr_info("Cellular device model: %s", device_info_buf); } if (info->get_revision(device_info_buf, sizeof(device_info_buf)) == NSAPI_ERROR_OK) { - log_info("Cellular device revision: %s", device_info_buf); + tr_info("Cellular device revision: %s", device_info_buf); } } @@ -159,7 +159,7 @@ bool CellularConnectionUtil::open_network() bool CellularConnectionUtil::set_network_registration(char *plmn) { if (_network->set_registration(plmn) != NSAPI_ERROR_OK) { - log_error("Failed to set network registration."); + tr_error("Failed to set network registration."); return false; } return true; @@ -173,7 +173,7 @@ bool CellularConnectionUtil::get_network_registration(CellularNetwork::Registrat nsapi_error_t err = _network->get_registration_status(type, status); if (err != NSAPI_ERROR_OK) { if (err != NSAPI_ERROR_UNSUPPORTED) { - log_warn("Get network registration failed (type %d)!", type); + tr_warn("Get network registration failed (type %d)!", type); } return false; } @@ -188,16 +188,16 @@ bool CellularConnectionUtil::get_network_registration(CellularNetwork::Registrat is_roaming = true; // fall-through case CellularNetwork::RegisteredSMSOnlyHome: - log_warn("SMS only network registration!"); + tr_warn("SMS only network registration!"); break; case CellularNetwork::RegisteredCSFBNotPreferredRoaming: is_roaming = true; // fall-through case CellularNetwork::RegisteredCSFBNotPreferredHome: - log_warn("Not preferred network registration!"); + tr_warn("Not preferred network registration!"); break; case CellularNetwork::AttachedEmergencyOnly: - log_warn("Emergency only network registration!"); + tr_warn("Emergency only network registration!"); break; case CellularNetwork::RegistrationDenied: case CellularNetwork::NotRegistered: @@ -208,7 +208,7 @@ bool CellularConnectionUtil::get_network_registration(CellularNetwork::Registrat } if (is_roaming) { - log_warn("Roaming cellular network!"); + tr_warn("Roaming cellular network!"); } return true; @@ -234,7 +234,7 @@ bool CellularConnectionUtil::set_attach_network() void CellularConnectionUtil::report_failure(const char* msg) { - log_error("Cellular network failed: %s", msg); + tr_error("Cellular network failed: %s", msg); if (_status_callback) { _status_callback(_state, _next_state); } @@ -261,13 +261,13 @@ void CellularConnectionUtil::event() switch (_state) { case STATE_POWER_ON: cellularDevice.set_timeout(TIMEOUT_POWER_ON); - log_info("Cellular power ON (timeout %d ms)", TIMEOUT_POWER_ON); + tr_info("Cellular power ON (timeout %d ms)", TIMEOUT_POWER_ON); if (open_power(_serial)) { _next_state = STATE_DEVICE_READY; } else { static int retry_count; if (++retry_count <= 10) { - log_warn("Power ON retry %d", retry_count); + tr_warn("Power ON retry %d", retry_count); event_timeout = 1000; } else { report_failure("Power"); @@ -278,12 +278,12 @@ void CellularConnectionUtil::event() case STATE_DEVICE_READY: cellularDevice.set_timeout(TIMEOUT_POWER_ON); if (_power->set_at_mode() == NSAPI_ERROR_OK) { - log_info("Cellular device ready"); + tr_info("Cellular device ready"); _next_state = STATE_START_CELLULAR; device_ready(); } else { static int retry_count = 0; - log_info("Waiting for cellular device (retry %d/10, timeout %d ms)", retry_count, TIMEOUT_POWER_ON); + tr_info("Waiting for cellular device (retry %d/10, timeout %d ms)", retry_count, TIMEOUT_POWER_ON); if (++retry_count <= 10) { event_timeout = 1000; } else { @@ -294,20 +294,20 @@ void CellularConnectionUtil::event() break; case STATE_START_CELLULAR: cellularDevice.set_timeout(TIMEOUT_NETWORK); - log_info("Start cellular (timeout %d ms)", TIMEOUT_NETWORK); + tr_info("Start cellular (timeout %d ms)", TIMEOUT_NETWORK); open_network(); _next_state = STATE_SIM_PIN; break; case STATE_SIM_PIN: cellularDevice.set_timeout(TIMEOUT_SIM_PIN); - log_info("Start cellular (timeout %d ms)", TIMEOUT_SIM_PIN); + tr_info("Start cellular (timeout %d ms)", TIMEOUT_SIM_PIN); if (open_sim()) { _next_state = STATE_REGISTERING_NETWORK; - log_info("Check for network registration"); + tr_info("Check for network registration"); } else { static int retry_count; if (++retry_count <= 10) { - log_warn("Waiting for SIM %d", retry_count); + tr_warn("Waiting for SIM %d", retry_count); event_timeout = 1000; } else { report_failure("Entering SIM PIN"); @@ -322,27 +322,27 @@ void CellularConnectionUtil::event() _next_state = STATE_REGISTER_NETWORK; for (int type = 0; type < CellularNetwork::C_MAX; type++) { if (get_network_registration((CellularNetwork::RegistrationType)type, status, is_registered)) { - log_debug("get_network_registration: type=%d, status=%d", type, status); + tr_debug("get_network_registration: type=%d, status=%d", type, status); if (is_registered) { - log_info("Registered to cellular network (type %d, status %d)", type, status); + tr_info("Registered to cellular network (type %d, status %d)", type, status); _next_state = STATE_ATTACH_NETWORK; - log_info("Check cellular network attach state"); + tr_info("Check cellular network attach state"); break; } else { if (status == CellularNetwork::RegistrationDenied) { static int backoff_timeout = 1; - log_warn("Network registration denied (type %d)! Retry after %d seconds.", type, backoff_timeout); + tr_warn("Network registration denied (type %d)! Retry after %d seconds.", type, backoff_timeout); event_timeout = backoff_timeout * 1000; backoff_timeout *= 2; break; } else if (status != CellularNetwork::NotRegistered) { static int retry_count; if (++retry_count <= 180) { - log_info("Waiting for registration %d/180 (type %d, status %d)", retry_count, type, status); + tr_info("Waiting for registration %d/180 (type %d, status %d)", retry_count, type, status); event_timeout = 1*1000; _next_state = STATE_REGISTERING_NETWORK; } else { - log_info("Start cellular registration"); + tr_info("Start cellular registration"); _next_state = STATE_REGISTER_NETWORK; retry_count = 0; break; @@ -356,7 +356,7 @@ void CellularConnectionUtil::event() break; case STATE_REGISTER_NETWORK: cellularDevice.set_timeout(TIMEOUT_REGISTRATION); - log_info("Register to cellular network (timeout %d ms)", TIMEOUT_REGISTRATION); + tr_info("Register to cellular network (timeout %d ms)", TIMEOUT_REGISTRATION); if (set_network_registration()) { _next_state = STATE_REGISTERING_NETWORK; } else { @@ -384,17 +384,17 @@ void CellularConnectionUtil::event() break; case STATE_ATTACH_NETWORK: cellularDevice.set_timeout(TIMEOUT_NETWORK); - log_info("Attach to cellular network (timeout %d ms)", TIMEOUT_NETWORK); + tr_info("Attach to cellular network (timeout %d ms)", TIMEOUT_NETWORK); if (set_attach_network()) { _next_state = STATE_ATTACHING_NETWORK; - log_info("Cellular network attaching"); + tr_info("Cellular network attaching"); } else { event_timeout = 0; } break; case STATE_CONNECT_NETWORK: cellularDevice.set_timeout(TIMEOUT_NETWORK); - log_info("Connect to cellular network (timeout %d ms)", TIMEOUT_NETWORK); + tr_info("Connect to cellular network (timeout %d ms)", TIMEOUT_NETWORK); err = _network->connect(); if (!err) { _next_state = STATE_CONNECTED; @@ -405,7 +405,7 @@ void CellularConnectionUtil::event() break; case STATE_CONNECTED: cellularDevice.set_timeout(TIMEOUT_NETWORK); - log_debug("Cellular ready! (timeout %d ms)", TIMEOUT_NETWORK); + tr_debug("Cellular ready! (timeout %d ms)", TIMEOUT_NETWORK); if (_status_callback) { if (!_status_callback(_state, _next_state)) { return; @@ -419,7 +419,7 @@ void CellularConnectionUtil::event() if (_next_state != _state || event_timeout >= 0) { if (_next_state != _state) { - log_info("Cellular state from %d to %d", _state, _next_state); + tr_info("Cellular state from %d to %d", _state, _next_state); if (_status_callback) { if (!_status_callback(_state, _next_state)) { return; @@ -429,13 +429,13 @@ void CellularConnectionUtil::event() if (event_timeout == 0) { static int retry_count = 0; if (++retry_count <= 3) { - log_info("Cellular event retry %d", retry_count); + tr_info("Cellular event retry %d", retry_count); } else { report_failure("Cellular connection failed!"); return; } } else { - log_info("Cellular event in %d milliseconds", event_timeout); + tr_info("Cellular event in %d milliseconds", event_timeout); } } _state = _next_state; @@ -451,8 +451,8 @@ void CellularConnectionUtil::event() nsapi_error_t CellularConnectionUtil::start_dispatch() { - log_info("CellularConnectionUtil::start"); - log_info("Create cellular thread"); + tr_info("CellularConnectionUtil::start"); + tr_info("Create cellular thread"); MBED_ASSERT(!_queue_thread); @@ -466,13 +466,13 @@ nsapi_error_t CellularConnectionUtil::start_dispatch() return NSAPI_ERROR_NO_MEMORY; } - log_info("CellularConnectionUtil::started"); + tr_info("CellularConnectionUtil::started"); return NSAPI_ERROR_OK; } void CellularConnectionUtil::stop() { - log_info("CellularConnectionUtil::stop"); + tr_info("CellularConnectionUtil::stop"); _cellularDevice->close_power(); _cellularDevice->close_network(); if (_queue_thread) { diff --git a/features/cellular/easy_cellular/EasyCellularConnection.cpp b/features/cellular/easy_cellular/EasyCellularConnection.cpp index 784952fdb6..cb0360bf87 100644 --- a/features/cellular/easy_cellular/EasyCellularConnection.cpp +++ b/features/cellular/easy_cellular/EasyCellularConnection.cpp @@ -38,7 +38,7 @@ static UARTSerial cellularSerial(MDMTXD, MDMRXD, MBED_CONF_PLATFORM_DEFAULT_SERI bool EasyCellularConnection::cellular_status(int state, int next_state) { - log_info("cellular_status %d=>%d", state, next_state); + tr_info("cellular_status %d=>%d", state, next_state); if (_target_state == state) { if (state == CellularConnectionUtil::STATE_CONNECTED) { _is_connected = true; @@ -56,7 +56,7 @@ bool EasyCellularConnection::cellular_status(int state, int next_state) EasyCellularConnection::EasyCellularConnection() : _is_connected(false), _target_state(CellularConnectionUtil::STATE_POWER_ON) { - log_info("EasyCellularConnection()"); + tr_info("EasyCellularConnection()"); } EasyCellularConnection::~EasyCellularConnection() @@ -66,8 +66,6 @@ EasyCellularConnection::~EasyCellularConnection() nsapi_error_t EasyCellularConnection::init() { - log_init(STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE); - #if defined (MDMRTS) && defined (MDMCTS) cellularSerial.set_flow_control(SerialBase::RTSCTS, MDMRTS, MDMCTS); #endif @@ -89,7 +87,7 @@ void EasyCellularConnection::set_credentials(const char *apn, const char *uname, if (network) { network->set_credentials(apn, uname, pwd); } else { - log_error("NO Network..."); + tr_error("NO Network..."); } } @@ -112,7 +110,7 @@ nsapi_error_t EasyCellularConnection::connect() if (err == NSAPI_ERROR_OK) { int ret_wait = cellularSemaphore.wait(10*60*1000); // cellular network searching may take several minutes if (ret_wait != 1) { - log_info("No cellular connection"); + tr_info("No cellular connection"); err = NSAPI_ERROR_NO_CONNECTION; } } diff --git a/features/cellular/framework/AT/ATHandler.cpp b/features/cellular/framework/AT/ATHandler.cpp index 44c7ec832d..2f927da73b 100644 --- a/features/cellular/framework/AT/ATHandler.cpp +++ b/features/cellular/framework/AT/ATHandler.cpp @@ -228,7 +228,7 @@ void ATHandler::restore_at_timeout() void ATHandler::process_oob() { lock(); - log_debug("process_oob %d", (_fileHandle->readable() || (_recv_pos < _recv_len))); + tr_debug("process_oob %d", (_fileHandle->readable() || (_recv_pos < _recv_len))); if (_fileHandle->readable() || (_recv_pos < _recv_len)) { _current_scope = NotSet; Timer timer; @@ -254,7 +254,7 @@ void ATHandler::process_oob() } } while (timer.read_ms() < 20); // URC's are very short so 20ms should be enough } - log_debug("process_oob exit"); + tr_debug("process_oob exit"); flush(); // consume anything that could not be handled @@ -272,13 +272,13 @@ void ATHandler::set_filehandle_sigio() void ATHandler::reset_buffer() { - log_debug("%s", __func__); + tr_debug("%s", __func__); _recv_pos = 0; _recv_len = 0; } void ATHandler::rewind_buffer() { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (_recv_pos > 0 && _recv_len >= _recv_pos) { _recv_len -= _recv_pos; // move what is not read to beginning of buffer @@ -290,7 +290,7 @@ void ATHandler::rewind_buffer() // we are always expecting to receive something so there is wait timeout void ATHandler::fill_buffer() { - log_debug("%s", __func__); + tr_debug("%s", __func__); // Reset buffer when full if (sizeof(_recv_buff) == _recv_len) { reset_buffer(); @@ -309,7 +309,7 @@ void ATHandler::fill_buffer() at_debug("\n----------readable----------\n"); return; } else if (len != -EAGAIN && len != 0) { - log_warn("%s error: %d while reading", __func__, len); + tr_warn("%s error: %d while reading", __func__, len); break; } #ifdef MBED_CONF_RTOS_PRESENT @@ -318,29 +318,29 @@ void ATHandler::fill_buffer() } while ((uint32_t)timer.read_ms() < _at_timeout); set_error(NSAPI_ERROR_DEVICE_ERROR); - log_error("AT TIMEOUT, scope: %d timeout: %d", _current_scope, _at_timeout); + tr_error("AT TIMEOUT, scope: %d timeout: %lu", _current_scope, _at_timeout); } int ATHandler::get_char() { if (_recv_pos == _recv_len) { - log_debug("%s", __func__); + tr_debug("%s", __func__); reset_buffer(); // try to read as much as possible fill_buffer(); if (get_last_error()) { - log_debug("%s: -1", __func__); + tr_debug("%s: -1", __func__); return -1; // timeout to read } } - log_debug("%s: %c", __func__, _recv_buff[_recv_pos]); + tr_debug("%s: %c", __func__, _recv_buff[_recv_pos]); return _recv_buff[_recv_pos++]; } void ATHandler::skip_param(uint32_t count) { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (_last_err || !_stop_tag || _stop_tag->found) { return; } @@ -370,7 +370,7 @@ void ATHandler::skip_param(uint32_t count) void ATHandler::skip_param(ssize_t len, uint32_t count) { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (_last_err || !_stop_tag || _stop_tag->found) { return; } @@ -391,7 +391,7 @@ void ATHandler::skip_param(ssize_t len, uint32_t count) ssize_t ATHandler::read_bytes(uint8_t *buf, size_t len) { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (_last_err) { return -1; } @@ -410,7 +410,7 @@ ssize_t ATHandler::read_bytes(uint8_t *buf, size_t len) ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag) { - log_debug("%s", __func__); + tr_debug("%s", __func__); at_debug("\n----------buff:----------\n"); for (size_t i = _recv_pos; i < _recv_len; i++) { at_debug("%c", _recv_buff[i]); @@ -463,7 +463,7 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag) int32_t ATHandler::read_int() { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (_last_err || !_stop_tag || _stop_tag->found) { return -1; @@ -507,7 +507,7 @@ void ATHandler::set_stop_tag(const char *stop_tag_seq) void ATHandler::set_scope(ScopeType scope_type) { - log_debug("%s: %d", __func__, scope_type); + tr_debug("%s: %d", __func__, scope_type); if (_current_scope != scope_type) { _current_scope = scope_type; switch (_current_scope) { @@ -536,7 +536,7 @@ void ATHandler::set_scope(ScopeType scope_type) // should match from recv_pos? bool ATHandler::match(const char* str, size_t size) { - log_debug("%s: %s", __func__, str); + tr_debug("%s: %s", __func__, str); rewind_buffer(); if ((_recv_len - _recv_pos) < size) { @@ -553,14 +553,14 @@ bool ATHandler::match(const char* str, size_t size) bool ATHandler::match_urc() { - log_debug("%s", __func__); + tr_debug("%s", __func__); rewind_buffer(); size_t prefix_len = 0; for (struct oob_t *oob = _oobs; oob; oob = oob->next) { prefix_len = strlen(oob->prefix); if (_recv_len >= prefix_len) { if (match(oob->prefix, prefix_len)) { - log_debug("URC!"); + tr_debug("URC!"); set_scope(InfoType); if (oob->cb) { oob->cb(); @@ -575,7 +575,7 @@ bool ATHandler::match_urc() bool ATHandler::match_error() { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (match(CME_ERROR, CME_ERROR_LENGTH)) { at_error(true, DeviceErrorTypeErrorCME); @@ -616,7 +616,7 @@ void ATHandler::set_error(nsapi_error_t err) } if (_last_err != err) { - log_warn("AT error code changed from %d to %d!", _last_err, err); + tr_warn("AT error code changed from %d to %d!", _last_err, err); } } @@ -638,7 +638,7 @@ void ATHandler::set_3gpp_error(int err, DeviceErrorType error_type) for (size_t i = 0; ifound) || _error_found) { return true; @@ -861,7 +861,7 @@ bool ATHandler::consume_to_stop_tag() return true; } - log_error("consume_to_stop_tag not found"); + tr_error("consume_to_stop_tag not found"); set_error(NSAPI_ERROR_DEVICE_ERROR); return false; } @@ -872,7 +872,7 @@ void ATHandler::resp_stop() { // Do not return on error so that we can consume whatever there is in the buffer - log_debug("%s", __func__); + tr_debug("%s", __func__); if (_current_scope == ElemType) { information_response_element_stop(); @@ -896,7 +896,7 @@ void ATHandler::resp_stop() void ATHandler::information_response_stop() { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (consume_to_stop_tag()) { set_scope(RespType); } @@ -904,7 +904,7 @@ void ATHandler::information_response_stop() void ATHandler::information_response_element_stop() { - log_debug("%s", __func__); + tr_debug("%s", __func__); if (consume_to_stop_tag()) { set_scope(InfoType); } @@ -936,7 +936,7 @@ const char* ATHandler::mem_str(const char* dest, size_t dest_len, const char* sr void ATHandler::cmd_start(const char* cmd) { - log_debug("AT> %s", cmd); + tr_debug("AT> %s", cmd); if (_last_err != NSAPI_ERROR_OK) { return; diff --git a/features/cellular/framework/AT/AT_CellularMultiplexer.cpp b/features/cellular/framework/AT/AT_CellularMultiplexer.cpp index 10cc70f3dc..f4d580963c 100644 --- a/features/cellular/framework/AT/AT_CellularMultiplexer.cpp +++ b/features/cellular/framework/AT/AT_CellularMultiplexer.cpp @@ -30,7 +30,7 @@ AT_CellularMultiplexer::~AT_CellularMultiplexer() nsapi_error_t AT_CellularMultiplexer::multiplexer_mode_start() { - log_info("multiplexer_mode_start()"); + tr_info("multiplexer_mode_start()"); _at.lock(); diff --git a/features/cellular/framework/AT/AT_CellularNetwork.cpp b/features/cellular/framework/AT/AT_CellularNetwork.cpp index 9b25f87b98..13cc959f6a 100644 --- a/features/cellular/framework/AT/AT_CellularNetwork.cpp +++ b/features/cellular/framework/AT/AT_CellularNetwork.cpp @@ -48,7 +48,7 @@ AT_CellularNetwork::AT_CellularNetwork(ATHandler &atHandler) : AT_CellularBase(a #ifdef MBED_CONF_APP_CELLULAR_APN strncpy(_apn, MBED_CONF_APP_CELLULAR_APN, MAX_ACCESSPOINT_NAME_LENGTH); - log_debug("Using APN [%s] from json", _apn); + tr_debug("Using APN [%s] from json", _apn); #endif } @@ -108,7 +108,7 @@ nsapi_error_t AT_CellularNetwork::connect() nsapi_error_t err = set_context_to_be_activated(); if (err != NSAPI_ERROR_OK) { _at.unlock(); - log_error("Failed to activate network context!"); + tr_error("Failed to activate network context!"); _connect_status = NSAPI_STATUS_DISCONNECTED; if (_connection_status_cb) { @@ -121,7 +121,7 @@ nsapi_error_t AT_CellularNetwork::connect() err = open_data_channel(); if (err != NSAPI_ERROR_OK) { _at.unlock(); - log_error("Failed to open data channel!"); + tr_error("Failed to open data channel!"); _connect_status = NSAPI_STATUS_DISCONNECTED; if (_connection_status_cb) { @@ -148,14 +148,14 @@ nsapi_error_t AT_CellularNetwork::open_data_channel() //old way: _at.send("ATD*99***%d#", _cid) && _at.recv("CONNECT"); nsapi_error_t err = NSAPI_ERROR_NO_CONNECTION; #if NSAPI_PPP_AVAILABLE - log_info("Open data channel in PPP mode"); + tr_info("Open data channel in PPP mode"); _at.cmd_start("AT+CGDATA=\"PPP\","); _at.write_int(_cid); _at.cmd_stop(); _at.resp_start("CONNECT", true); if (_at.get_last_error()) { - log_warn("Failed to CONNECT"); + tr_warn("Failed to CONNECT"); } /* Initialize PPP * mbed_ppp_init() is a blocking call, it will block until @@ -182,7 +182,7 @@ nsapi_error_t AT_CellularNetwork::open_data_channel() _at.resp_stop(); if (!is_context_active) { - log_info("Activate PDP context"); + tr_info("Activate PDP context"); _at.cmd_start("AT+CGACT=1,"); _at.write_int(_cid); _at.cmd_stop(); @@ -399,7 +399,7 @@ bool AT_CellularNetwork::get_context(nsapi_ip_stack_t requested_stack) strncpy(_apn, apn, MAX_ACCESSPOINT_NAME_LENGTH); } - log_debug("Context id %d", _cid); + tr_debug("Context id %d", _cid); return true; } @@ -446,18 +446,18 @@ nsapi_error_t AT_CellularNetwork::set_registration(const char *plmn) nsapi_error_t ret = set_registration_urc(false); if (ret) { - log_error("Setting registration URC failed!"); + tr_error("Setting registration URC failed!"); _at.clear_error(); // allow temporary failures here } if (!plmn) { - log_debug("Automatic network registration"); + tr_debug("Automatic network registration"); _at.cmd_start("AT+COPS=0"); _at.cmd_stop(); _at.resp_start(); _at.resp_stop(); } else { - log_debug("Manual network registration to %s", plmn); + tr_debug("Manual network registration to %s", plmn); _at.cmd_start("AT+COPS=4,2,"); _at.write_string(plmn); _at.cmd_stop(); @@ -525,12 +525,12 @@ nsapi_error_t AT_CellularNetwork::get_registration_status(RegistrationType type, if (lac_read) { _lac = hex_str_to_int(lac_string, LAC_LENGTH); - log_debug("lac %s %d", lac_string, _lac ); + tr_debug("lac %s %d", lac_string, _lac ); } if (cell_id_read) { _cell_id = hex_str_to_int(cell_id_string, CELL_ID_LENGTH); - log_debug("cell_id %s %d", cell_id_string, _cell_id ); + tr_debug("cell_id %s %d", cell_id_string, _cell_id ); } return ret; @@ -563,7 +563,7 @@ nsapi_error_t AT_CellularNetwork::set_attach(int timeout) int attached_state = _at.read_int(); _at.resp_stop(); if (attached_state != 1) { - log_debug("Network attach"); + tr_debug("Network attach"); _at.cmd_start("AT+CGATT=1"); _at.cmd_stop(); _at.resp_start(); @@ -776,7 +776,7 @@ nsapi_error_t AT_CellularNetwork::get_rate_control( int next_element = _at.read_int(); if (next_element >= 0) { reports = (RateControlExceptionReports)next_element; - log_debug("reports %d",reports); + tr_debug("reports %d",reports); next_element = _at.read_int(); } else { comma_found = false; @@ -784,7 +784,7 @@ nsapi_error_t AT_CellularNetwork::get_rate_control( if (comma_found && next_element >= 0) { timeUnit = (RateControlUplinkTimeUnit)next_element; - log_debug("time %d",timeUnit); + tr_debug("time %d",timeUnit); next_element = _at.read_int(); } else { comma_found = false; @@ -792,7 +792,7 @@ nsapi_error_t AT_CellularNetwork::get_rate_control( if (comma_found && next_element >= 0) { uplinkRate = next_element; - log_debug("rate %d",uplinkRate); + tr_debug("rate %d",uplinkRate); } } _at.resp_stop(); @@ -828,7 +828,7 @@ nsapi_error_t AT_CellularNetwork::get_pdpcontext_params(pdpContextList_t& params while (_at.info_resp()) { // response can be zero or many +CGDCONT lines params = params_list.add_new(); if (!params) { - log_warn("Could not allocate new pdpcontext_params_t"); + tr_warn("Could not allocate new pdpcontext_params_t"); params_list.delete_all(); _at.resp_stop(); free(temp); diff --git a/features/cellular/framework/AT/AT_CellularPower.cpp b/features/cellular/framework/AT/AT_CellularPower.cpp index ab0013ddc0..e6d21a39c1 100644 --- a/features/cellular/framework/AT/AT_CellularPower.cpp +++ b/features/cellular/framework/AT/AT_CellularPower.cpp @@ -203,7 +203,7 @@ nsapi_error_t AT_CellularPower::opt_power_save_mode(int periodic_time, int activ if (_at.get_last_error() != NSAPI_ERROR_OK) { - log_warn("Power save mode not enabled!"); + tr_warn("Power save mode not enabled!"); } else { // network may not agree with power save options but // that should be fine as timeout is not longer than requested diff --git a/features/cellular/framework/AT/AT_CellularSIM.cpp b/features/cellular/framework/AT/AT_CellularSIM.cpp index 20e828c99a..e66154791d 100644 --- a/features/cellular/framework/AT/AT_CellularSIM.cpp +++ b/features/cellular/framework/AT/AT_CellularSIM.cpp @@ -48,11 +48,11 @@ nsapi_error_t AT_CellularSIM::get_sim_state(SimState &state) state = SimStatePukNeeded; } else { simstr[len] = '\0'; - log_error("Unknown SIM state %s", simstr); + tr_error("Unknown SIM state %s", simstr); state = SimStateUnknown; } } else { - log_warn("SIM not readable."); + tr_warn("SIM not readable."); state = SimStateUnknown; // SIM may not be ready yet or +CPIN may be unsupported command } _at.resp_stop(); diff --git a/features/cellular/framework/AT/AT_CellularSMS.cpp b/features/cellular/framework/AT/AT_CellularSMS.cpp index 9e304d9d1c..5378495109 100644 --- a/features/cellular/framework/AT/AT_CellularSMS.cpp +++ b/features/cellular/framework/AT/AT_CellularSMS.cpp @@ -187,26 +187,26 @@ AT_CellularSMS::~AT_CellularSMS() void AT_CellularSMS::cmt_urc() { - log_debug("CMT_URC called"); + tr_debug("CMT_URC called"); //+CMT: ,[],[,,,,,,,] _at.consume_to_stop_tag(); // call user defined callback function if (_cb) { _cb(); } else { - log_warn("cmt_urc, no user defined callback for receiving sms!"); + tr_warn("cmt_urc, no user defined callback for receiving sms!"); } } void AT_CellularSMS::cmti_urc() { //+CMTI: ,, - log_debug("CMTI_URC called"); + tr_debug("CMTI_URC called"); // call user defined callback function if (_cb) { _cb(); } else { - log_warn("cmti_urc, no user defined callback for receiving sms!"); + tr_warn("cmti_urc, no user defined callback for receiving sms!"); } } @@ -718,7 +718,7 @@ nsapi_size_or_error_t AT_CellularSMS::read_sms(sms_info_t* sms, char* buf, char* } } else { - log_warn("NOT all concatenated parts were received..."); + tr_warn("NOT all concatenated parts were received..."); index = SMS_ERROR_MULTIPART_ALL_PARTS_NOT_READ; } @@ -743,7 +743,7 @@ nsapi_size_or_error_t AT_CellularSMS::get_sms(char* buf, uint16_t len, char* pho if (info) { if (info->msg_size+1 > len) { // +1 for '\0' - log_warn("Given buf too small, len is: %d but is must be: %d", len, info->msg_size); + tr_warn("Given buf too small, len is: %d but is must be: %d", len, info->msg_size); if (buf_size) { *buf_size = info->msg_size; } @@ -978,7 +978,7 @@ nsapi_size_or_error_t AT_CellularSMS::read_pdu_payload(const char* pdu, int sche // 8bit scheme so just convert hexstring to charstring return hex_str_to_char_str(pdu, strlen(pdu), msg); } else { - log_error("Received unsupported data coding scheme: 0x%02x", scheme); + tr_error("Received unsupported data coding scheme: 0x%02x", scheme); return NSAPI_ERROR_UNSUPPORTED; } } diff --git a/features/cellular/framework/common/CellularLog.cpp b/features/cellular/framework/common/CellularLog.cpp deleted file mode 100644 index 48d77e4701..0000000000 --- a/features/cellular/framework/common/CellularLog.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) , Arm Limited and affiliates. - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include -#include "CellularLog.h" -#include "us_ticker_api.h" -#include "serial_api.h" -#include "rtos/Mutex.h" - -extern serial_t stdio_uart; -extern int stdio_uart_inited; - -namespace mbed { - -uint32_t cellular_log_time = us_ticker_read() / 1000L; - -/** - * Local mutex object for synchronization - */ -static rtos::Mutex mutex; - -/** - * Lock provided for serial printing used by trace library - */ -static void serial_lock() -{ - mutex.lock(); -} - -/** - * Releasing lock provided for serial printing used by trace library - */ -static void serial_unlock() -{ - mutex.unlock(); -} - -void log_init(PinName tx, PinName rx, int baud) -{ -#ifdef FEATURE_COMMON_PAL - mbed_trace_mutex_wait_function_set(serial_lock); - mbed_trace_mutex_release_function_set(serial_unlock); - mbed_trace_init(); -#else - serial_init(&stdio_uart, tx, rx); - serial_baud(&stdio_uart, baud); - stdio_uart_inited = 1; -#endif - log_info("\r\n\r\n**************************************"); - log_info("Hellular says Cellular Hello!"); - log_info("Build time %s %s", __DATE__, __TIME__); -} -} // namespace mbed diff --git a/features/cellular/framework/common/CellularLog.h b/features/cellular/framework/common/CellularLog.h index 3f0b1f4cf5..1cba633fa7 100644 --- a/features/cellular/framework/common/CellularLog.h +++ b/features/cellular/framework/common/CellularLog.h @@ -18,65 +18,24 @@ #ifndef CELLULAR_LOG_H_ #define CELLULAR_LOG_H_ -#include -#ifdef FEATURE_COMMON_PAL -#include -#endif // FEATURE_COMMON_PAL -#include "PinNames.h" -#include "us_ticker_api.h" -#include "mbed_debug.h" - -namespace mbed { - -/** this print is some deep information for debug purpose */ -#define TRACE_LEVEL_DEBUG 0x10 -/** Info print, for general purpose prints */ -#define TRACE_LEVEL_INFO 0x08 -/** warning prints, which shouldn't causes any huge problems */ -#define TRACE_LEVEL_WARN 0x04 -/** Error prints, which causes probably problems, e.g. out of mem. */ -#define TRACE_LEVEL_ERROR 0x02 -/** special level for cmdline. Behaviours like "plain mode" */ -#define TRACE_LEVEL_CMD 0x01 - -#define TRACE_GROUP "cellular" - -#ifndef MBED_TRACE_MAX_LEVEL -#define MBED_TRACE_MAX_LEVEL TRACE_LEVEL_ERROR +#if defined(HAVE_DEBUG) && !defined(FEA_TRACE_SUPPORT) +#define FEA_TRACE_SUPPORT #endif -#ifdef FEATURE_COMMON_PAL +#if defined(FEATURE_COMMON_PAL) + #include "mbed-trace/mbed_trace.h" -#define log_debug tr_debug -#define log_info tr_info -#define log_warn tr_warn -#define log_error tr_error -#else -extern uint32_t cellular_log_time; -#if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_DEBUG) -#define log_debug(format, ...) do { debug("DEBUG" " [" TRACE_GROUP " %ums] " format "\r\n", (us_ticker_read()-cellular_log_time) / 1000L, ## __VA_ARGS__); } while (0) -#else -#define log_debug(...) -#endif -#if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_INFO) -#define log_info(format, ...) do { debug("INFO" " [" TRACE_GROUP " %ums] " format "\r\n", (us_ticker_read()-cellular_log_time) / 1000L, ## __VA_ARGS__); } while (0) -#else -#define log_info(...) -#endif -#if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_WARN) -#define log_warn(format, ...) do { debug("WARN" " [" TRACE_GROUP " %ums] " format "\r\n", (us_ticker_read()-cellular_log_time) / 1000L, ## __VA_ARGS__); } while (0) -#else -#define log_warn(...) -#endif -#if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_ERROR) -#define log_error(format, ...) do { debug("ERROR" " [" TRACE_GROUP " %ums] " format "\r\n", (us_ticker_read()-cellular_log_time) / 1000L, ## __VA_ARGS__); } while (0) -#else -#define log_error(...) -#endif -#endif +#ifndef TRACE_GROUP +#define TRACE_GROUP "cellular" +#endif // TRACE_GROUP -extern void log_init(PinName tx, PinName rx, int baud); +#else -} // namespace mbed +#define tr_debug(...) (void(0)) +#define tr_info(...) (void(0)) +#define tr_error(...) (void(0)) +#define tr_warn(...) (void(0)) + +#endif // FEATURE_COMMON_PAL #endif // CELLULAR_LOG_H_