/* * gateway.cpp * * Created on: 26.10.2014 * Author: wn */ #include "gateway.h" #include "Streaming.h" void Gateway::prepareAssignments() { for (uint8_t i = 0; i < TOTAL_NO_OF_PACKETS; i++) { m_gatewayAssignments[i].id = 0; m_gatewayAssignments[i].function = 0; m_gatewayAssignments[i].address = 0; m_gatewayAssignments[i].data = 0; m_gatewayAssignments[i].mudbusIndex = 0; } } void Gateway::assignPacket(uint8_t packetIdx, uint8_t id, uint8_t function, uint16_t address, uint16_t data, uint16_t mudbusIdx) { m_packets[packetIdx].id = id; m_packets[packetIdx].function = function; m_packets[packetIdx].address = address; m_packets[packetIdx].data = data; m_packets[packetIdx].register_array = (unsigned int*) &(m_mudbus->R[mudbusIdx]); m_packets[packetIdx].connection = 1; m_packets[packetIdx].connectionValid = &(m_mudbus->C[mudbusIdx + CONNECTION_STATUS_OFFSET]); m_packets[packetIdx].valueValid = &(m_mudbus->C[mudbusIdx + VALUE_STATUS_OFFSET]); } void Gateway::begin() { for (uint8_t i = 0; i < TOTAL_NO_OF_PACKETS; i++) { if (m_gatewayAssignments[i].id != 0) { assignPacket(i, m_gatewayAssignments[i].id, m_gatewayAssignments[i].function, m_gatewayAssignments[i].address, m_gatewayAssignments[i].data, m_gatewayAssignments[i].mudbusIndex); } else { m_packets[i].connection = 0; } } // modbus_configure(&Serial2, MODBUS_BAUD, SERIAL_8N2, MODBUS_TIMEOUT, MODBUS_SCANRATE, MODBUS_RETRY_COUNT, MODBUS_TX_ENABLE_PIN, m_packets, TOTAL_NO_OF_PACKETS); } void Gateway::reactivate() { for (uint8_t i = 0; i < TOTAL_NO_OF_PACKETS; i++) { if (m_gatewayAssignments[i].id != 0) { if (! m_packets[i].connectionValid) { m_packets[i].connection = 1; Serial << "Reactivated assignment " << i << endl; } } } } void Gateway::show() { for (uint8_t i = 0; i < TOTAL_NO_OF_PACKETS; i++) { if (m_gatewayAssignments[i].id != 0) { Serial << i << ": ID: " << m_gatewayAssignments[i].id << ", Func: " << m_gatewayAssignments[i].function << ", Addr: " << _HEX(m_gatewayAssignments[i].address) << ", Len: " << m_gatewayAssignments[i].data << ", MbIdx: " << m_gatewayAssignments[i].mudbusIndex << endl; Serial << " " << "ConnectionStatus: " << m_mudbus->C[m_gatewayAssignments[i].mudbusIndex + CONNECTION_STATUS_OFFSET] << ", ValueStatus: " << m_mudbus->C[m_gatewayAssignments[i].mudbusIndex + VALUE_STATUS_OFFSET] << endl; Serial << " "; for (uint8_t j = 0; j < m_gatewayAssignments[i].data; j++) { Serial << _HEX(((unsigned int) m_mudbus->R[m_gatewayAssignments[i].mudbusIndex + j])) << " "; } Serial << endl; } } } void Gateway::assign(uint8_t id, uint8_t function, uint16_t address, uint16_t data) { uint16_t nextMudbusIndex = 0; for (uint8_t i = 0; i < TOTAL_NO_OF_PACKETS; i++) { if (m_gatewayAssignments[i].id != 0) { nextMudbusIndex += m_gatewayAssignments[i].data; } else { m_gatewayAssignments[i].id = id; m_gatewayAssignments[i].function = function; m_gatewayAssignments[i].address = address; m_gatewayAssignments[i].data = data; m_gatewayAssignments[i].mudbusIndex = nextMudbusIndex; assignPacket(i, m_gatewayAssignments[i].id, m_gatewayAssignments[i].function, m_gatewayAssignments[i].address, m_gatewayAssignments[i].data, m_gatewayAssignments[i].mudbusIndex); break; } } } void Gateway::exec() { }