AqualinkD/packetLogger.c

71 lines
1.9 KiB
C

#include <stdio.h>
#include <stdarg.h>
#include "packetLogger.h"
#include "aq_serial.h"
#include "utils.h"
static FILE *_packetLogFile = NULL;
static bool _log2file = false;
static bool _includePentair = false;
void _logPacket(unsigned char *packet_buffer, int packet_length, bool error);
void startPacketLogger(bool debug_RSProtocol_packets, bool read_pentair_packets) {
_log2file = debug_RSProtocol_packets;
_includePentair = read_pentair_packets;
}
void stopPacketLogger() {
if (_packetLogFile != NULL)
fclose(_packetLogFile);
}
void writePacketLog(char *buffer) {
if (_packetLogFile == NULL)
_packetLogFile = fopen(RS485LOGFILE, "a");
if (_packetLogFile != NULL) {
fputs(buffer, _packetLogFile);
}
}
void logPacket(unsigned char *packet_buffer, int packet_length) {
_logPacket(packet_buffer, packet_length, false);
}
void logPacketError(unsigned char *packet_buffer, int packet_length) {
_logPacket(packet_buffer, packet_length, true);
}
void _logPacket(unsigned char *packet_buffer, int packet_length, bool error)
{
// No point in continuing if loglevel is < debug_serial and not writing to file
if ( error == false && getLogLevel() < LOG_DEBUG_SERIAL && _log2file == false)
return;
char buff[1000];
int i = 0;
int cnt = 0;
if (_includePentair) {
cnt = sprintf(buff, "%s%8.8s Packet | HEX: ",(error?"BAD PACKET ":""),getProtocolType(packet_buffer)==JANDY?"Jandy":"Pentair");
} else {
cnt = sprintf(buff, "%sTo 0x%02hhx of type %8.8s | HEX: ",(error?"BAD PACKET ":""), packet_buffer[PKT_DEST], get_packet_type(packet_buffer, packet_length));
}
for (i = 0; i < packet_length; i++)
cnt += sprintf(buff + cnt, "0x%02hhx|", packet_buffer[i]);
cnt += sprintf(buff + cnt, "\n");
if (_log2file)
writePacketLog(buff);
if (error == true)
logMessage(LOG_WARNING, "%s", buff);
else
logMessage(LOG_DEBUG_SERIAL, "%s", buff);
}