void OTGWSerial::SendTime() { time_t atime = mytime(NULL); struct tm ltime; localtime_r(&atime, <ime); int lday = 0; if (ltime.tm_wday == 0) lday = 7; else lday = ltime.tm_wday; char szCmd[20]; sprintf(szCmd, "SC=%d:%02d/%d\r\n", ltime.tm_hour, ltime.tm_min, lday); WriteToHardware((const char*)&szCmd, strlen(szCmd)); }
bool DomoticzTCP::ConnectInternal() { m_socket = socket(info->ai_family, info->ai_socktype, info->ai_protocol); if (m_socket == INVALID_SOCKET) { _log.Log(LOG_ERROR,"Domoticz: TCP could not create a TCP/IP socket!"); return false; } /* //Set socket timeout to 2 minutes #if !defined WIN32 struct timeval tv; tv.tv_sec = 120; setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&tv,sizeof(struct timeval)); #else unsigned long nTimeout = 120*1000; setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&nTimeout, sizeof(DWORD)); #endif */ // connect to the server int nRet; nRet = connect(m_socket,info->ai_addr, info->ai_addrlen); if (nRet == SOCKET_ERROR) { closesocket(m_socket); m_socket=INVALID_SOCKET; _log.Log(LOG_ERROR,"Domoticz: TCP could not connect to: %s:%ld",m_szIPAddress.c_str(),m_usIPPort); return false; } _log.Log(LOG_STATUS, "Domoticz: TCP connected to: %s:%ld",m_szIPAddress.c_str(),m_usIPPort); if (m_username!="") { char szAuth[300]; sprintf(szAuth,"AUTH;%s;%s",m_username.c_str(),m_password.c_str()); WriteToHardware((const char*)&szAuth,(const unsigned char)strlen(szAuth)); } sOnConnected(this); return true; }
void CRego6XXSerial::Do_Work() { int sec_counter = 0; while (!m_stoprequested) { sleep_seconds(1); if (m_stoprequested) break; sec_counter++; if (sec_counter % 12 == 0) { m_LastHeartbeat=mytime(NULL); } if (!isOpen()) { if (m_retrycntr==0) { _log.Log(LOG_STATUS,"Rego6XX: serial retrying in %d seconds...", Rego6XX_RETRY_DELAY); } m_retrycntr++; if (m_retrycntr>=Rego6XX_RETRY_DELAY) { m_retrycntr=0; m_pollcntr = 0; m_pollDelaycntr = 0; m_readBufferHead = 0; m_readBufferTail = 0; OpenSerialDevice(); } } else if(m_errorcntr > Rego6XX_MAX_ERRORS_UNITL_RESTART) { // Reopen the port and clear the error counter. try { clearReadCallback(); close(); doClose(); setErrorStatus(true); } catch(...) { //Don't throw from a Stop command } _log.Log(LOG_ERROR,"Rego6XX: Reopening serial port"); sleep_seconds(2); m_retrycntr=0; m_pollcntr = 0; m_pollDelaycntr = 0; m_readBufferHead = 0; m_readBufferTail = 0; m_errorcntr = 0; OpenSerialDevice(); } else { m_pollDelaycntr++; if (m_pollDelaycntr>=Rego6XX_COMMAND_DELAY) { // Before issueing a new command, the recieve buffer must be empty. // It seems that there are errors sometimes and this will take care // of any problems even if it bypasses the circular buffer concept. // There should not be any data left to recieve anyway since commands // are sent with 5 seconds in between. m_readBufferHead = 0; m_readBufferTail = 0; m_pollDelaycntr = 0; if(g_allRegisters[m_pollcntr].type != REGO_TYPE_NONE) { RegoCommand cmd; cmd.data.address = 0x81; cmd.data.command = 0x02; switch(m_regoType) { case 0: cmd.data.regNum[0] = (g_allRegisters[m_pollcntr].regNum_type1 & 0xC000) >> 14 ; cmd.data.regNum[1] = (g_allRegisters[m_pollcntr].regNum_type1 & 0x3F80) >> 7 ; cmd.data.regNum[2] = g_allRegisters[m_pollcntr].regNum_type1 & 0x007F; break; case 1: cmd.data.regNum[0] = (g_allRegisters[m_pollcntr].regNum_type2 & 0xC000) >> 14 ; cmd.data.regNum[1] = (g_allRegisters[m_pollcntr].regNum_type2 & 0x3F80) >> 7 ; cmd.data.regNum[2] = g_allRegisters[m_pollcntr].regNum_type2 & 0x007F; break; case 2: cmd.data.regNum[0] = (g_allRegisters[m_pollcntr].regNum_type3 & 0xC000) >> 14 ; cmd.data.regNum[1] = (g_allRegisters[m_pollcntr].regNum_type3 & 0x3F80) >> 7 ; cmd.data.regNum[2] = g_allRegisters[m_pollcntr].regNum_type3 & 0x007F; break; default: _log.Log(LOG_ERROR,"Rego6XX: Unknown type!"); break; } cmd.data.value[0] = 0; cmd.data.value[1] = 0; cmd.data.value[2] = 0; cmd.data.crc = 0; for ( int i = 2; i < 8; i++ ) cmd.data.crc ^= cmd.raw[ i ]; WriteToHardware((char*)cmd.raw, sizeof(cmd.raw)); } else { m_pollcntr = 0; } }
void OTGWSerial::GetGatewayDetails() { char szCmd[10]; strcpy(szCmd,"PS=1\r\n"); WriteToHardware((const char*)&szCmd,strlen(szCmd)); }