Files
bizhang_-obav/src/platforms/posix/px4_layer/px4_log.c

98 lines
2.6 KiB
C
Raw Normal View History

#include <stdlib.h>
Fixes for qurt HIL build Workaround required Eigen downgrade to 3.2. Hexagon toolchain does not support C++11 features of newest version of Eigen. Running make qurt_fixup will downgrade and patch Eigen for qurt. Running make restore will revert the patch and do a git submodule update to restore the expected Eigen version. Added a "restore" target to undo qurt_fixup Before doing a qurt build run: make qurt_fixup That will downgrade Eigen to 3.2 and apply the require patch. To build another target after downgrading: make restore Them make the desired target (other than qurt). Fixed type used in orb_priority to be consistent with the code (int* was used in declaration but int32_t* used in code) Removed unused class member variable in sensors.cpp Added cmake fix for unit tests. The location of px4_log.c changed. Fixed the qurt drv_hrt.c implementation to use us instead of ms for time resolution Added px4_led.c to nuttx platform layer Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files. It was moved out of common because it is not used by qurt. Changed PX4_DEBUG to PX4_WARN when checking for the error condition for store_poll_waiter in vdev.cpp Updated the px4_log.h file to make calls to the qurt_log functions. The qurt_log function is defined in the platforms/qurt layer. Added an option to control starting the commander module in HIL mode. Moved the flight specific drivers to the configuration file instead of adding them to the common tool chain file because HIL mode does not need them. Added the uorb Subscriber and Publisher classes Call PX4_ISFINITE macro instead of isfinite(). Added px4_led.c to nuttx platform layer Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files. It was moved out of common because it is not used by qurt. Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-08-25 21:59:01 -07:00
#include <px4_log.h>
2015-10-19 09:48:27 +02:00
#ifdef __PX4_POSIX
#include <execinfo.h>
2015-10-19 09:48:27 +02:00
#endif
#include <uORB/uORB.h>
#include <uORB/topics/log_message.h>
#include <drivers/drv_hrt.h>
Fixes for qurt HIL build Workaround required Eigen downgrade to 3.2. Hexagon toolchain does not support C++11 features of newest version of Eigen. Running make qurt_fixup will downgrade and patch Eigen for qurt. Running make restore will revert the patch and do a git submodule update to restore the expected Eigen version. Added a "restore" target to undo qurt_fixup Before doing a qurt build run: make qurt_fixup That will downgrade Eigen to 3.2 and apply the require patch. To build another target after downgrading: make restore Them make the desired target (other than qurt). Fixed type used in orb_priority to be consistent with the code (int* was used in declaration but int32_t* used in code) Removed unused class member variable in sensors.cpp Added cmake fix for unit tests. The location of px4_log.c changed. Fixed the qurt drv_hrt.c implementation to use us instead of ms for time resolution Added px4_led.c to nuttx platform layer Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files. It was moved out of common because it is not used by qurt. Changed PX4_DEBUG to PX4_WARN when checking for the error condition for store_poll_waiter in vdev.cpp Updated the px4_log.h file to make calls to the qurt_log functions. The qurt_log function is defined in the platforms/qurt layer. Added an option to control starting the commander module in HIL mode. Moved the flight specific drivers to the configuration file instead of adding them to the common tool chain file because HIL mode does not need them. Added the uorb Subscriber and Publisher classes Call PX4_ISFINITE macro instead of isfinite(). Added px4_led.c to nuttx platform layer Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files. It was moved out of common because it is not used by qurt. Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-08-25 21:59:01 -07:00
static orb_advert_t orb_log_message_pub = NULL;
Fixes for qurt HIL build Workaround required Eigen downgrade to 3.2. Hexagon toolchain does not support C++11 features of newest version of Eigen. Running make qurt_fixup will downgrade and patch Eigen for qurt. Running make restore will revert the patch and do a git submodule update to restore the expected Eigen version. Added a "restore" target to undo qurt_fixup Before doing a qurt build run: make qurt_fixup That will downgrade Eigen to 3.2 and apply the require patch. To build another target after downgrading: make restore Them make the desired target (other than qurt). Fixed type used in orb_priority to be consistent with the code (int* was used in declaration but int32_t* used in code) Removed unused class member variable in sensors.cpp Added cmake fix for unit tests. The location of px4_log.c changed. Fixed the qurt drv_hrt.c implementation to use us instead of ms for time resolution Added px4_led.c to nuttx platform layer Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files. It was moved out of common because it is not used by qurt. Changed PX4_DEBUG to PX4_WARN when checking for the error condition for store_poll_waiter in vdev.cpp Updated the px4_log.h file to make calls to the qurt_log functions. The qurt_log function is defined in the platforms/qurt layer. Added an option to control starting the commander module in HIL mode. Moved the flight specific drivers to the configuration file instead of adding them to the common tool chain file because HIL mode does not need them. Added the uorb Subscriber and Publisher classes Call PX4_ISFINITE macro instead of isfinite(). Added px4_led.c to nuttx platform layer Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files. It was moved out of common because it is not used by qurt. Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-08-25 21:59:01 -07:00
2015-10-19 09:48:27 +02:00
__EXPORT const char *__px4_log_level_str[_PX4_LOG_LEVEL_PANIC + 1] = { "INFO", "DEBUG", "WARN", "ERROR", "PANIC" };
__EXPORT const char *__px4_log_level_color[_PX4_LOG_LEVEL_PANIC + 1] =
2016-06-09 13:16:04 +02:00
{ PX4_ANSI_COLOR_RESET, PX4_ANSI_COLOR_GREEN, PX4_ANSI_COLOR_YELLOW, PX4_ANSI_COLOR_RED, PX4_ANSI_COLOR_RED };
void px4_log_initialize(void)
{
ASSERT(orb_log_message_pub == NULL);
/* we need to advertise with a valid message */
struct log_message_s log_message;
log_message.timestamp = hrt_absolute_time();
log_message.severity = 6; //info
strcpy((char *)log_message.text, "initialized uORB logging");
orb_log_message_pub = orb_advertise_queue(ORB_ID(log_message), &log_message, 2);
if (!orb_log_message_pub) {
PX4_ERR("failed to advertise log_message");
}
}
void px4_backtrace()
{
2015-10-19 09:48:27 +02:00
#ifdef __PX4_POSIX
void *buffer[10];
char **callstack;
int bt_size;
int idx;
bt_size = backtrace(buffer, 10);
callstack = backtrace_symbols(buffer, bt_size);
2015-10-19 09:48:27 +02:00
PX4_INFO("Backtrace: %d", bt_size);
2015-10-19 09:48:27 +02:00
for (idx = 0; idx < bt_size; idx++) {
PX4_INFO("%s", callstack[idx]);
2015-10-19 09:48:27 +02:00
}
free(callstack);
2015-10-19 09:48:27 +02:00
#endif
}
__EXPORT void px4_log_modulename(int level, const char *moduleName, const char *fmt, ...)
{
PX4_LOG_COLOR_START
printf(__px4__log_level_fmt __px4__log_level_arg(level));
PX4_LOG_COLOR_MODULE
printf(__px4__log_modulename_pfmt, moduleName);
PX4_LOG_COLOR_MESSAGE
va_list argptr;
va_start(argptr, fmt);
vprintf(fmt, argptr);
va_end(argptr);
PX4_LOG_COLOR_END
printf("\n");
/* publish an orb log message */
if (level >= _PX4_LOG_LEVEL_WARN && orb_log_message_pub) { //only publish important messages
struct log_message_s log_message;
const unsigned max_length = sizeof(log_message.text);
log_message.timestamp = hrt_absolute_time();
const uint8_t log_level_table[] = {
6, /* _PX4_LOG_LEVEL_ALWAYS */
7, /* _PX4_LOG_LEVEL_DEBUG */
4, /* _PX4_LOG_LEVEL_WARN */
3, /* _PX4_LOG_LEVEL_ERROR */
0 /* _PX4_LOG_LEVEL_PANIC */
};
log_message.severity = log_level_table[level];
unsigned pos = 0;
pos += snprintf((char *)log_message.text + pos, max_length - pos, __px4__log_modulename_pfmt, moduleName);
va_start(argptr, fmt);
pos += vsnprintf((char *)log_message.text + pos, max_length - pos, fmt, argptr);
va_end(argptr);
log_message.text[max_length - 1] = 0; //ensure 0-termination
orb_publish(ORB_ID(log_message), orb_log_message_pub, &log_message);
}
}