|
|
@@ -36,7 +36,16 @@ static uint8_t crc8x_fast(void const *mem, uint16_t len)
|
|
|
return crc;
|
|
|
}
|
|
|
|
|
|
-NbusBridge::NbusBridge(NbusCommunicator *nc) {
|
|
|
+NbusBridge::NbusBridge() {
|
|
|
+
|
|
|
+ _communicator = NULL;
|
|
|
+ _num_slaves = 0;
|
|
|
+ _run_state = STATE_STOPPED;
|
|
|
+ _pdu.sa = BROADCAST_ADDRESS;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void NbusBridge::setCommunicator(NbusCommunicator *nc){
|
|
|
if(nc == NULL)
|
|
|
{
|
|
|
while(1){
|
|
|
@@ -49,7 +58,6 @@ NbusBridge::NbusBridge(NbusCommunicator *nc) {
|
|
|
_run_state = STATE_STOPPED;
|
|
|
_pdu.sa = BROADCAST_ADDRESS;
|
|
|
_dataFrame = new DataFrame(_dataPacket, sizeof(_dataPacket), TYPE_RAW, CRC_OFF);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
NbusBridge::~NbusBridge() {
|
|
|
@@ -98,6 +106,7 @@ uint8_t NbusBridge::getNumSlaves(){
|
|
|
return _num_slaves;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
bool NbusBridge::call_echo(uint8_t slave){
|
|
|
if(slave >= _num_slaves){
|
|
|
return false;
|
|
|
@@ -111,6 +120,7 @@ bool NbusBridge::call_echo(uint8_t slave){
|
|
|
getSlave(slave)->nbus_echo();
|
|
|
return true;
|
|
|
}
|
|
|
+*/
|
|
|
|
|
|
void NbusBridge::sendResponseToMaster(DataFrame *response_frame){
|
|
|
if(response_frame !=NULL && response_frame->IsEmpty() == false) {
|
|
|
@@ -147,7 +157,6 @@ void NbusBridge::process_broadcast(uint8_t *rxFrame){
|
|
|
;//nothing
|
|
|
}
|
|
|
|
|
|
- HAL_Delay(1); /// send BC and wait TX complete
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -180,7 +189,7 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size){
|
|
|
break;
|
|
|
|
|
|
case FC_ECHO: /* 1 */
|
|
|
- _frame_nbus_internal = selected_slave->nbus_echo();
|
|
|
+ _frame_nbus_internal = selected_slave->nbus_echo(&rxFrame[3], size - 4);
|
|
|
break;
|
|
|
|
|
|
case FC_PARAM: /* 4 */
|
|
|
@@ -239,6 +248,7 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size){
|
|
|
}
|
|
|
|
|
|
void NbusBridge::processRunningState(){
|
|
|
+
|
|
|
if (_run_state == STATE_STOPPED){
|
|
|
return;
|
|
|
}
|
|
|
@@ -250,14 +260,16 @@ void NbusBridge::processRunningState(){
|
|
|
}
|
|
|
|
|
|
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
|
|
- NbusSlave *slave;
|
|
|
+ NbusSlave *slave = NULL;
|
|
|
uint8_t *slaveFrameResponse;
|
|
|
+ _dataFrame->Init();
|
|
|
+ _dataFrame->AddHeader(TYPE_HEADER_2B);
|
|
|
+ _dataFrame->AddInt32(HAL_GetTick());
|
|
|
+
|
|
|
+
|
|
|
for(uint32_t i=0; i< _num_slaves; i++){
|
|
|
slave = getSlave(_slave_adress[i]);
|
|
|
if(slave != NULL && slave->isActive()){
|
|
|
- _dataFrame->Init();
|
|
|
- _dataFrame->AddHeader(TYPE_HEADER_2B);
|
|
|
- _dataFrame->AddInt32(HAL_GetTick());
|
|
|
for(uint32_t k = 1 ; k <= slave->nbus_get_sensor_count(false) ; k++){
|
|
|
_dataFrame->AddInt8(slave->getModuleAddress());
|
|
|
_workerFrame = slave->nbus_sensor_getData(k);
|
|
|
@@ -265,12 +277,16 @@ void NbusBridge::processRunningState(){
|
|
|
_dataFrame->AddInt8(slave->getSensorAddress());
|
|
|
_dataFrame->AddArray(&slaveFrameResponse[3], _workerFrame->GetLength()-3);
|
|
|
}
|
|
|
- _dataFrame->AddInt8(0xFF);
|
|
|
- _dataFrame->AddInt8(0xFF);
|
|
|
- _dataFrame->Commit();
|
|
|
- sendResponseToMaster(_dataFrame);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ _dataFrame->AddInt8(0xFF);
|
|
|
+ _dataFrame->AddInt8(0xFF);
|
|
|
+ _dataFrame->Commit();
|
|
|
+ // TODO problem: v stavi RUNNING pride STOP prikaz, ale ten sa nespracuje, pretoze bezi obsluha tejto funkcie.
|
|
|
+ if(_run_state == STATE_RUNNING){
|
|
|
+ sendResponseToMaster(_dataFrame);
|
|
|
}
|
|
|
- HAL_Delay(1); // TREBA VYSKUSAT
|
|
|
+
|
|
|
+ HAL_Delay(50); // TREBA VYSKUSAT
|
|
|
}
|