#include #include #include #include "packetLogger.h" #include "aq_serial.h" #include "utils.h" #include "config.h" static FILE *_packetLogFile = NULL; static FILE *_byteLogFile = NULL; static bool _logfile_raw = false; static bool _logfile_packets = false; //static bool _includePentair = false; void _logPacket(int16_t from, unsigned char *packet_buffer, int packet_length, bool error, bool force, bool is_read); int _beautifyPacket(char *buff, unsigned char *packet_buffer, int packet_length, bool error, bool is_read); //void startPacketLogger(bool debug_RSProtocol_packets) { void startPacketLogger() { // Make local copy of variables so we can turn on/off as needed. _logfile_raw = _aqconfig_.log_raw_bytes; _logfile_packets = _aqconfig_.log_protocol_packets; } void startPacketLogging(bool log_protocol_packets, bool log_raw_bytes) { _logfile_raw = log_raw_bytes; _logfile_packets = log_protocol_packets; } void stopPacketLogger() { if (_packetLogFile != NULL) fclose(_packetLogFile); if (_byteLogFile != NULL) fclose(_byteLogFile); _logfile_raw = false; _logfile_packets = false; } // Log passed packets void writePacketLog(char *buffer) { if (!_logfile_packets) return; if (_packetLogFile == NULL) _packetLogFile = fopen(RS485LOGFILE, "w"); if (_packetLogFile != NULL) { fputs(buffer, _packetLogFile); } } // Log Raw Bytes void logPacketByte(unsigned char *byte) { if (!_logfile_raw) return; char buff[10]; if (_byteLogFile == NULL) _byteLogFile = fopen(RS485BYTELOGFILE, "w"); if (_byteLogFile != NULL) { sprintf(buff, "0x%02hhx|",*byte); fputs( buff, _byteLogFile); } //} } /* void logPacket(unsigned char *packet_buffer, int packet_length) { _logPacket(RSSD_LOG, packet_buffer, packet_length, false, false); } */ void logPacketRead(unsigned char *packet_buffer, int packet_length) { _logPacket(RSSD_LOG, packet_buffer, packet_length, false, false, true); } void logPacketWrite(unsigned char *packet_buffer, int packet_length) { _logPacket(RSSD_LOG, packet_buffer, packet_length, false, false, false); } void logPacketError(unsigned char *packet_buffer, int packet_length) { _logPacket(RSSD_LOG, packet_buffer, packet_length, true, false, true); } void debuglogPacket(int16_t from, unsigned char *packet_buffer, int packet_length, bool is_read) { if ( getLogLevel(from) >= LOG_DEBUG ) _logPacket(from, packet_buffer, packet_length, false, true, is_read); } void _logPacket(int16_t from, unsigned char *packet_buffer, int packet_length, bool error, bool force, bool is_read) { // No point in continuing if loglevel is < debug_serial and not writing to file if ( force == false && error == false && getLogLevel(from) < LOG_DEBUG_SERIAL /*&& _logfile_raw == false*/ && _logfile_packets == false) { return; } char buff[1000]; _beautifyPacket(buff, packet_buffer, packet_length, error, is_read); if (_logfile_packets) writePacketLog(buff); if (error == true) LOG(from,LOG_WARNING, "%s", buff); else { if (force) LOG(from,LOG_DEBUG, "%s", buff); else LOG(from,LOG_DEBUG_SERIAL, "%s", buff); } } int beautifyPacket(char *buff, unsigned char *packet_buffer, int packet_length, bool is_read) { return _beautifyPacket(buff, packet_buffer, packet_length, false, is_read); } int _beautifyPacket(char *buff, unsigned char *packet_buffer, int packet_length, bool error, bool is_read) { int i = 0; int cnt = 0; if (getProtocolType(packet_buffer)==PENTAIR) { // Listing Jandy below if redundant. need to clean this up. cnt = sprintf(buff, "%5.5s %s%8.8s Packet | HEX: ",(is_read?"Read":"Write"),(error?"BAD PACKET ":""),getProtocolType(packet_buffer)==PENTAIR?"Pentair":"Jandy"); } else { cnt = sprintf(buff, "%5.5s %sTo 0x%02hhx of type %16.16s | HEX: ",(is_read?"Read":"Write"),(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"); return cnt; }