| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- #pragma GCC diagnostic error "-Wall"
 
- #pragma GCC diagnostic error "-Wextra"
 
- #if defined(HARDWARE_BT6711) && !defined(BT6702_SERVICE)
 
- #include "common_config.h"
 
- #include "syslog.h"
 
- #include "settings_api.h"
 
- #include "tcpip.h"
 
- #include "udp.h"
 
- #include "rtc.h"
 
- static struct udp_pcb *upcb;
 
- // TODO either lock the buffers against race conditions or raise the task stack sizes, or lower the memory consumption
 
- static char packet[256];
 
- static char msg[200];
 
- void openlog(void)
 
- {
 
- 	upcb = udp_new();
 
- 	udp_bind(upcb, IP_ADDR_ANY, 0);
 
- }
 
- static void timestamp_rfc3339(char *ts)
 
- {
 
- 	TM_RTC_t data;
 
- 	uint16_t sys_year;
 
- 	TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
 
- 	sys_year = 2000 + data.year;
 
- 	uint32_t subseconds = (1024 - data.subseconds) * 999999 / 1024;
 
- 	// TODO timezone?
 
- 	sprintf(ts, "%04i-%02i-%02iT%02i:%02i:%02i.%06luZ", sys_year, data.month, data.date, data.hours, data.minutes, data.seconds, subseconds);
 
- }
 
- void syslog(char *fmt, ...)
 
- {
 
- 	//char msg[200]; // arbitrary length; "Any transport receiver MUST be able to accept messages of up to and including 480 octets in length."
 
- 	va_list va;
 
- 	va_start(va, fmt);
 
- 	vsnprintf(msg, sizeof(msg), fmt, va);
 
- 	syslog_str(msg);
 
- 	va_end(va);
 
- }
 
- void syslog_str(char *msg)
 
- {
 
- 	uint8_t priority = 13;
 
- #define SYSLOG_VERSION "1" // as defined in RFC5424
 
- #define BOM "\xef\xbb\xbf"
 
- 	struct pbuf* psend;
 
- 	// TODO to reduce memory consumption one can use a scatter-gather I/O instead of packet[]
 
- 	//char packet[256]; // arbitrary length; "Any transport receiver MUST be able to accept messages of up to and including 480 octets in length."
 
- 	char timestamp[30] = "-";
 
- 	timestamp_rfc3339(timestamp);
 
- 	unsigned len = snprintf(packet, sizeof(packet), "<%u>" SYSLOG_VERSION " %s - " HW_REV "_" VERSION " - - - " BOM "%s", priority, timestamp, msg);
 
- 	//psend = pbuf_alloc(PBUF_RAW, sizeof(packet), PBUF_REF);
 
- 	psend = pbuf_alloc(PBUF_RAW, len, PBUF_REF);
 
- 	psend->payload = packet;
 
- 	//psend->len = len;
 
- 	udp_sendto(upcb, psend, &sSettings.sSyslog.server_ip, sSettings.sSyslog.server_port);
 
- 	pbuf_free(psend);
 
- }
 
- #endif // defined(HARDWARE_BT6711) && !defined(BT6702_SERVICE)
 
 
  |