char supla_client_connect(void *_suplaclient) { TSuplaClientData *suplaclient = (TSuplaClientData *)_suplaclient; supla_client_disconnect(_suplaclient); supla_client_clean(_suplaclient); if ( ssocket_client_connect(suplaclient->ssd, NULL) == 1 ) { suplaclient->eh = eh_init(); TsrpcParams srpc_params; srpc_params_init(&srpc_params); srpc_params.user_params = _suplaclient; srpc_params.data_read = &supla_client_socket_read; srpc_params.data_write = &supla_client_socket_write; srpc_params.on_remote_call_received = &supla_client_on_remote_call_received; srpc_params.before_async_call = &supla_client_before_async_call; srpc_params.eh = suplaclient->eh; suplaclient->srpc = srpc_init(&srpc_params); eh_add_fd(suplaclient->eh, ssocket_get_fd(suplaclient->ssd)); suplaclient->connected = 1; supla_client_set_registered(_suplaclient, 0); if ( suplaclient->cfg.cb_on_connected ) suplaclient->cfg.cb_on_connected(_suplaclient, suplaclient->cfg.user_data); return 1; } return 0; }
bool SuplaDeviceClass::begin(IPAddress *local_ip, char GUID[SUPLA_GUID_SIZE], uint8_t mac[6], const char *Server, int LocationID, const char *LocationPWD) { unsigned char a; if ( isInitialized(true) ) return false; if ( Params.cb.tcp_read == NULL || Params.cb.tcp_write == NULL || Params.cb.eth_setup == NULL || Params.cb.svr_connected == NULL || Params.cb.svr_connect == NULL || Params.cb.svr_disconnect == NULL ) { supla_log(LOG_DEBUG, "Callbacks not assigned!"); return false; } if ( local_ip ) { Params.local_ip = *local_ip; Params.use_local_ip = true; } else { Params.use_local_ip = false; } memcpy(Params.reg_dev.GUID, GUID, SUPLA_GUID_SIZE); memcpy(Params.mac, mac, 6); Params.reg_dev.LocationID = LocationID; setString(Params.reg_dev.LocationPWD, LocationPWD, SUPLA_LOCATION_PWD_MAXSIZE); Params.server = strdup(Server); for(a=0; a<SUPLA_GUID_SIZE; a++) if ( Params.reg_dev.GUID[a] != 0 ) break; if ( a == SUPLA_GUID_SIZE ) { supla_log(LOG_DEBUG, "Invalid GUID"); return false; } if ( Params.server == NULL || Params.server[0] == NULL ) { supla_log(LOG_DEBUG, "Unknown server address"); return false; } if ( Params.reg_dev.LocationID == 0 ) { supla_log(LOG_DEBUG, "Unknown LocationID"); return false; } setString(Params.reg_dev.Name, "ARDUINO", SUPLA_DEVICE_NAME_MAXSIZE); setString(Params.reg_dev.SoftVer, "1.1", SUPLA_SOFTVER_MAXSIZE); Params.cb.eth_setup(Params.mac, Params.use_local_ip ? &Params.local_ip : NULL); TsrpcParams srpc_params; srpc_params_init(&srpc_params); srpc_params.data_read = &supla_arduino_data_read; srpc_params.data_write = &supla_arduino_data_write; srpc_params.on_remote_call_received = &supla_arduino_on_remote_call_received; srpc_params.user_params = this; srpc = srpc_init(&srpc_params); supla_log(LOG_DEBUG, "SuplaDevice initialized"); }