#ifndef AQ_PROGRAMMER_H_ #define AQ_PROGRAMMER_H_ #include //#include "aqualink.h" #define PROGRAMMING_POLL_DELAY_TIME 10 //#define PROGRAMMING_POLL_DELAY_TIME 2 //#define PROGRAMMING_POLL_DELAY_TIME 5 #define PROGRAMMING_POLL_COUNTER 200 // need to get the C values from aqualink manual and add those just incase // someone has the controller set to C. #define HEATER_MAX_F 104 #define HEATER_MIN_F 36 #define FREEZE_PT_MAX_F 42 #define FREEZE_PT_MIN_F 34 #define HEATER_MAX_C 40 #define HEATER_MIN_C 0 #define FREEZE_PT_MAX_C 5 #define FREEZE_PT_MIN_C 1 #define SWG_PERCENT_MAX 101 #define SWG_PERCENT_MIN 0 #define PTHREAD_ARG 25 #define LIGHT_MODE_BUFER PTHREAD_ARG typedef enum emulation_type{ SIM_NONE = -1, ALLBUTTON, RSSADAPTER, ONETOUCH, IAQTOUCH, AQUAPDA, // AQUAPALM and PDA are taken as specific type. IAQUALNK, // iAqualink (wifi extra ID) JANDY_DEVICE, // Very rarley used. SIMULATOR } emulation_type; typedef enum { AQP_NULL = -1, // ********* Generic Programming options, these are Allbutton by Default AQ_GET_POOL_SPA_HEATER_TEMPS, AQ_GET_FREEZE_PROTECT_TEMP, AQ_SET_TIME, AQ_SET_POOL_HEATER_TEMP, AQ_SET_SPA_HEATER_TEMP, AQ_SET_FRZ_PROTECTION_TEMP, AQ_GET_DIAGNOSTICS_MODEL, AQ_GET_PROGRAMS, AQ_SET_LIGHTPROGRAM_MODE, AQ_SET_LIGHTCOLOR_MODE, AQ_SET_SWG_PERCENT, AQ_GET_AUX_LABELS, AQ_SET_BOOST, AQ_SET_PUMP_RPM, AQ_SET_PUMP_VS_PROGRAM, // ******** PDA Delimiter make sure to change MAX/MIN below AQ_PDA_INIT, AQ_PDA_WAKE_INIT, AQ_PDA_DEVICE_STATUS, AQ_PDA_DEVICE_ON_OFF, AQ_PDA_AUX_LABELS, AQ_PDA_SET_BOOST, AQ_PDA_SET_SWG_PERCENT, AQ_PDA_GET_AUX_LABELS, AQ_PDA_SET_POOL_HEATER_TEMPS, AQ_PDA_SET_SPA_HEATER_TEMPS, AQ_PDA_SET_FREEZE_PROTECT_TEMP, AQ_PDA_SET_TIME, AQ_PDA_GET_POOL_SPA_HEATER_TEMPS, AQ_PDA_GET_FREEZE_PROTECT_TEMP, // ******** OneTouch Delimiter make sure to change MAX/MIN below AQ_SET_ONETOUCH_PUMP_RPM, AQ_SET_ONETOUCH_MACRO, AQ_GET_ONETOUCH_SETPOINTS, AQ_SET_ONETOUCH_POOL_HEATER_TEMP, AQ_SET_ONETOUCH_SPA_HEATER_TEMP, AQ_GET_ONETOUCH_FREEZEPROTECT, AQ_SET_ONETOUCH_FREEZEPROTECT, AQ_SET_ONETOUCH_TIME, AQ_SET_ONETOUCH_BOOST, AQ_SET_ONETOUCH_SWG_PERCENT, // ******** iAqalink Touch Delimiter make sure to change MAX/MIN below AQ_SET_IAQTOUCH_PUMP_RPM, AQ_SET_IAQTOUCH_PUMP_VS_PROGRAM, AQ_GET_IAQTOUCH_VSP_ASSIGNMENT, AQ_GET_IAQTOUCH_SETPOINTS, AQ_GET_IAQTOUCH_FREEZEPROTECT, AQ_SET_IAQTOUCH_FREEZEPROTECT, AQ_GET_IAQTOUCH_AUX_LABELS, AQ_SET_IAQTOUCH_SWG_PERCENT, AQ_SET_IAQTOUCH_SWG_BOOST, AQ_SET_IAQTOUCH_SET_TIME, AQ_SET_IAQTOUCH_DEVICE_ON_OFF, AQ_SET_IAQTOUCH_ONETOUCH_ON_OFF, AQ_SET_IAQTOUCH_POOL_HEATER_TEMP, AQ_SET_IAQTOUCH_SPA_HEATER_TEMP, AQ_SET_IAQLINK_POOL_HEATER_TEMP, // Same as above but using iAqualink not AqualinkTouch AQ_SET_IAQLINK_SPA_HEATER_TEMP, // Same as above but using iAqualink not AqualinkTouch AQ_SET_IAQTOUCH_LIGHTCOLOR_MODE, // ******** RS Serial Adapter Delimiter make sure to change MAX/MIN below AQ_GET_RSSADAPTER_SETPOINTS, AQ_SET_RSSADAPTER_POOL_HEATER_TEMP, AQ_SET_RSSADAPTER_SPA_HEATER_TEMP, AQ_ADD_RSSADAPTER_POOL_HEATER_TEMP, AQ_ADD_RSSADAPTER_SPA_HEATER_TEMP, // ******** Delimiter make sure to change MAX/MIN below } program_type; #define AQP_GENERIC_MIN AQ_GET_POOL_SPA_HEATER_TEMPS #define AQP_GENERIC_MAX AQ_SET_PUMP_VS_PROGRAM #define AQP_ALLBUTTON_MIN AQ_GET_POOL_SPA_HEATER_TEMPS #define AQP_ALLBUTTONL_MAX AQ_SET_BOOST #define AQP_PDA_MIN AQ_PDA_INIT #define AQP_PDA_MAX AQ_SET_ONETOUCH_SWG_PERCENT #define AQP_ONETOUCH_MIN AQ_SET_ONETOUCH_PUMP_RPM #define AQP_ONETOUCH_MAX AQ_SET_ONETOUCH_SWG_PERCENT #define AQP_IAQTOUCH_MIN AQ_SET_IAQTOUCH_PUMP_RPM #define AQP_IAQTOUCH_MAX AQ_SET_IAQTOUCH_LIGHTCOLOR_MODE #define AQP_RSSADAPTER_MIN AQ_GET_RSSADAPTER_SETPOINTS #define AQP_RSSADAPTER_MAX AQ_ADD_RSSADAPTER_SPA_HEATER_TEMP struct programmingThreadCtrl { pthread_t thread_id; //void *thread_args; char thread_args[PTHREAD_ARG]; struct aqualinkdata *aq_data; }; typedef enum pump_type { PT_UNKNOWN = -1, EPUMP, // = ePump AC & Jandy ePUMP VSPUMP, // = Intelliflo VS VFPUMP // = Intelliflo VF (GPM) } pump_type; //void aq_programmer(program_type type, void *args, struct aqualinkdata *aq_data); void aq_programmer(program_type type, char *args, struct aqualinkdata *aq_data); //void kick_aq_program_thread(struct aqualinkdata *aq_data); void kick_aq_program_thread(struct aqualinkdata *aq_data, emulation_type source_type); bool in_programming_mode(struct aqualinkdata *aq_data); bool in_ot_programming_mode(struct aqualinkdata *aq_data); bool in_iaqt_programming_mode(struct aqualinkdata *aq_data); bool in_swg_programming_mode(struct aqualinkdata *aq_data); bool in_light_programming_mode(struct aqualinkdata *aq_data); bool in_allb_programming_mode(struct aqualinkdata *aq_data); //void aq_send_cmd(unsigned char cmd); void queueGetProgramData(emulation_type source_type, struct aqualinkdata *aq_data); //void queueGetExtendedProgramData(emulation_type source_type, struct aqualinkdata *aq_data, bool labels); //unsigned char pop_aq_cmd(struct aqualinkdata *aq_data); void waitForSingleThreadOrTerminate(struct programmingThreadCtrl *threadCtrl, program_type type); void cleanAndTerminateThread(struct programmingThreadCtrl *threadCtrl); //void force_queue_delete() // Yes I want compiler warning if this is used. //bool push_aq_cmd(unsigned char cmd); //void send_cmd(unsigned char cmd, struct aqualinkdata *aq_data); //void cancel_menu(struct aqualinkdata *aq_data); //void *set_aqualink_time( void *ptr ); //void *get_aqualink_pool_spa_heater_temps( void *ptr ); //int get_aq_cmd_length(); int setpoint_check(int type, int value, struct aqualinkdata *aqdata); int RPM_check(pump_type type, int value, struct aqualinkdata *aqdata); //int RPM_check(int type, int value, struct aqualinkdata *aqdata); const char *ptypeName(program_type type); const char *programtypeDisplayName(program_type type); #endif