WiFiPowerMeter/gateway.cpp

107 lines
3.3 KiB
C++
Raw Permalink Normal View History

2015-05-02 00:14:40 +02:00
/*
* 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() {
}