mirror of https://github.com/sfeakes/AqualinkD.git
205 lines
6.0 KiB
C
205 lines
6.0 KiB
C
|
|
#ifndef AQ_SERIAL_H_
|
|
#define AQ_SERIAL_H_
|
|
|
|
#include <termios.h>
|
|
|
|
#define CONNECTION_ERROR "ERROR No connection to RS control panel"
|
|
|
|
// packet offsets
|
|
#define PKT_DEST 2
|
|
#define PKT_CMD 3
|
|
#define PKT_DATA 4
|
|
|
|
#define PKT_STATUS_BYTES 5
|
|
|
|
|
|
#define DEV_MASTER 0x00
|
|
#define SWG_DEV_ID 0x50
|
|
|
|
// PACKET DEFINES
|
|
#define NUL 0x00
|
|
#define DLE 0x10
|
|
#define STX 0x02
|
|
#define ETX 0x03
|
|
|
|
#define AQ_MINPKTLEN 5
|
|
#define AQ_MAXPKTLEN 64
|
|
#define AQ_PSTLEN 5
|
|
#define AQ_MSGLEN 16
|
|
#define AQ_MSGLONGLEN 128
|
|
#define AQ_TADLEN 13
|
|
|
|
/* COMMANDS */
|
|
#define CMD_PROBE 0x00
|
|
#define CMD_ACK 0x01
|
|
#define CMD_STATUS 0x02
|
|
#define CMD_MSG 0x03
|
|
#define CMD_MSG_LONG 0x04
|
|
|
|
/* ACK RETURN COMMANDS */
|
|
#define ACK_NORMAL 0x00
|
|
#define ACK_SCREEN_BUSY 0x01 // Seems to be busy but can cache a message,
|
|
#define ACK_SCREEN_BUSY_BLOCK 0x03 // Seems to be don't send me shit.
|
|
#define ACK_PDA 0x40
|
|
|
|
/* AquaRite commands */
|
|
#define CMD_GETID 0x14 // May be remote control control
|
|
#define CMD_PERCENT 0x11 // Set Percent
|
|
#define CMD_PPM 0x16 // Received PPM
|
|
|
|
/* PDA KEY CODES */ // Just plating at the moment
|
|
#define KEY_PDA_UP 0x06
|
|
#define KEY_PDA_DOWN 0x05
|
|
#define KEY_PDA_BACK 0x02
|
|
#define KEY_PDA_SELECT 0x04
|
|
#define KEY_PDA_PGUP 0x01
|
|
#define KEY_PDA_PGDN 0x03
|
|
|
|
/* KEY/BUTTON CODES */
|
|
#define KEY_PUMP 0x02
|
|
#define KEY_SPA 0x01
|
|
#define KEY_AUX1 0x05
|
|
#define KEY_AUX2 0x0a
|
|
#define KEY_AUX3 0x0f
|
|
#define KEY_AUX4 0x06
|
|
#define KEY_AUX5 0x0b
|
|
#define KEY_AUX6 0x10
|
|
#define KEY_AUX7 0x15
|
|
#define KEY_POOL_HTR 0x12
|
|
#define KEY_SPA_HTR 0x17
|
|
#define KEY_SOLAR_HTR 0x1c
|
|
#define KEY_MENU 0x09
|
|
#define KEY_CANCEL 0x0e
|
|
#define KEY_LEFT 0x13
|
|
#define KEY_RIGHT 0x18
|
|
#define KEY_HOLD 0x19
|
|
#define KEY_OVERRIDE 0x1e
|
|
#define KEY_ENTER 0x1d
|
|
|
|
#define BTN_PUMP "Filter_Pump"
|
|
#define BTN_SPA "Spa_Mode"
|
|
#define BTN_AUX1 "Aux_1"
|
|
#define BTN_AUX2 "Aux_2"
|
|
#define BTN_AUX3 "Aux_3"
|
|
#define BTN_AUX4 "Aux_4"
|
|
#define BTN_AUX5 "Aux_5"
|
|
#define BTN_AUX6 "Aux_6"
|
|
#define BTN_AUX7 "Aux_7"
|
|
#define BTN_POOL_HTR "Pool_Heater"
|
|
#define BTN_SPA_HTR "Spa_Heater"
|
|
#define BTN_SOLAR_HTR "Solar_Heater"
|
|
|
|
#define BTN_PDA_PUMP "FILTER PUMP"
|
|
#define BTN_PDA_SPA "SPA"
|
|
#define BTN_PDA_AUX1 "AUX1"
|
|
#define BTN_PDA_AUX2 "AUX2"
|
|
#define BTN_PDA_AUX3 "AUX3"
|
|
#define BTN_PDA_AUX4 "AUX4"
|
|
#define BTN_PDA_AUX5 "AUX5"
|
|
#define BTN_PDA_AUX6 "AUX6"
|
|
#define BTN_PDA_AUX7 "AUX7"
|
|
#define BTN_PDA_POOL_HTR "POOL HEAT"
|
|
#define BTN_PDA_SPA_HTR "SPA HEAT"
|
|
#define BTN_PDA_SOLAR_HTR "EXTRA AUX"
|
|
|
|
#define BUTTON_LABEL_LENGTH 20
|
|
#define TOTAL_LEDS 20
|
|
|
|
// Index starting at 1
|
|
#define POOL_HTR_LED_INDEX 15
|
|
#define SPA_HTR_LED_INDEX 17
|
|
#define SOLAR_HTR_LED_INDEX 19
|
|
|
|
#define LNG_MSG_SERVICE_ACTIVE "SERVICE MODE IS ACTIVE"
|
|
#define LNG_MSG_POOL_TEMP_SET "POOL TEMP IS SET TO"
|
|
#define LNG_MSG_SPA_TEMP_SET "SPA TEMP IS SET TO"
|
|
#define LNG_MSG_FREEZE_PROTECTION_SET "FREEZE PROTECTION IS SET TO"
|
|
#define LNG_MSG_CLEANER_DELAY "CLEANER WILL TURN ON AFTER SAFETY DELAY"
|
|
#define LNG_MSG_BATTERY_LOW "BATTERY LOW"
|
|
|
|
|
|
|
|
#define MSG_AIR_TEMP "AIR TEMP"
|
|
#define MSG_POOL_TEMP "POOL TEMP"
|
|
#define MSG_SPA_TEMP "SPA TEMP"
|
|
#define MSG_AIR_TEMP_LEN 8
|
|
#define MSG_POOL_TEMP_LEN 9
|
|
#define MSG_SPA_TEMP_LEN 8
|
|
|
|
// Will get water temp rather than pool in some cases. not sure if it's REV specific or device (ie no spa) specific yet
|
|
#define MSG_WATER_TEMP "WATER TEMP"
|
|
#define MSG_WATER_TEMP_LEN 10
|
|
#define LNG_MSG_WATER_TEMP1_SET "TEMP1 (HIGH TEMP) IS SET TO"
|
|
#define LNG_MSG_WATER_TEMP2_SET "TEMP2 (LOW TEMP) IS SET TO"
|
|
|
|
#define LNG_MSG_FREEZE_PROTECTION_ACTIVATED "FREEZE PROTECTION ACTIVATED"
|
|
|
|
#define MSG_SWG_PCT "AQUAPURE" // AquaPure 55%
|
|
#define MSG_SWG_PPM "SALT" // Salt 3000 PPM
|
|
#define MSG_SWG_PCT_LEN 8
|
|
#define MSG_SWG_PPM_LEN 4
|
|
|
|
|
|
/* AQUAPURE SWG */
|
|
// These are madeup.
|
|
#define SWG_STATUS_OFF 0xFF
|
|
#define SWG_STATUS_UNKNOWN -128
|
|
// These are actual from RS485
|
|
|
|
#define SWG_STATUS_ON 0x00
|
|
#define SWG_STATUS_NO_FLOW 0x01 // no flow 0x01
|
|
#define SWG_STATUS_LOW_SALT 0x02 // low salt 0x02
|
|
#define SWG_STATUS_VLOW_SALT 0x04 // very low salt 0x04
|
|
#define SWG_STATUS_CLEAN_CELL 0x08 // clean cell 0x10
|
|
#define SWG_STATUS_TURNING_OFF 0x09 // turning off 0x09
|
|
#define SWG_STATUS_HIGH_CURRENT 0x10 // high current 0x08
|
|
#define SWG_STATUS_LOW_VOLTS 0x20 // low voltage 0x20
|
|
#define SWG_STATUS_LOW_TEMP 0x40 // low watertemp 0x40
|
|
#define SWG_STATUS_CHECK_PCB 0x80 // check PCB 0x80
|
|
|
|
#define CMD_PDA_0x05 0x05
|
|
#define CMD_PDA_HIGHLIGHT 0x08
|
|
#define CMD_PDA_CLEAR 0x09
|
|
#define CMD_PDA_SHIFTLINES 0x0F
|
|
#define CMD_PDA_HIGHLIGHTCHARS 0x10
|
|
|
|
typedef enum {
|
|
ON,
|
|
OFF,
|
|
FLASH,
|
|
ENABLE,
|
|
LED_S_UNKNOWN
|
|
} aqledstate;
|
|
|
|
typedef struct aqualinkled
|
|
{
|
|
//int number;
|
|
aqledstate state;
|
|
} aqled;
|
|
|
|
// Battery Status Identifiers
|
|
enum {
|
|
OK = 0,
|
|
LOW
|
|
};
|
|
|
|
|
|
int init_serial_port(char* tty);
|
|
void close_serial_port(int file_descriptor);
|
|
void set_pda_mode(bool mode);
|
|
bool pda_mode();
|
|
int generate_checksum(unsigned char* packet, int length);
|
|
void send_ack(int file_descriptor, unsigned char command);
|
|
void send_extended_ack(int fd, unsigned char ack_type, unsigned char command);
|
|
//void send_cmd(int file_descriptor, unsigned char cmd, unsigned char args);
|
|
int get_packet(int file_descriptor, unsigned char* packet);
|
|
//void close_serial_port(int file_descriptor, struct termios* oldtio);
|
|
//void process_status(void const * const ptr);
|
|
void process_status(unsigned char* ptr);
|
|
const char* get_packet_type(unsigned char* packet , int length);
|
|
void send_test_cmd(int fd, unsigned char destination, unsigned char b1, unsigned char b2, unsigned char b3);
|
|
void send_command(int fd, unsigned char destination, unsigned char b1, unsigned char b2, unsigned char b3);
|
|
void send_messaged(int fd, unsigned char destination, char *message);
|
|
#endif // AQ_SERIAL_H_
|