|
|
@@ -43,10 +43,13 @@ NbusBridge::NbusBridge(NbusCommunicator *nc) {
|
|
|
__NOP();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
_communicator = nc;
|
|
|
_num_slaves = 0;
|
|
|
_run_state = STATE_STOPPED;
|
|
|
_pdu.sa = BROADCAST_ADDRESS;
|
|
|
+ _dataFrame = new DataFrame(_dataPacket, sizeof(_dataPacket), TYPE_RAW, CRC_OFF);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
NbusBridge::~NbusBridge() {
|
|
|
@@ -126,7 +129,7 @@ void NbusBridge::broadcastStop(){
|
|
|
_pdu.fc = FC_STOP;
|
|
|
_pdu.ma = BROADCAST_ADDRESS;
|
|
|
_communicator->send(&_pdu, NULL, 0);
|
|
|
- _run_state = STATE_STOPPED;
|
|
|
+ _run_state = STATE_TO_STOP;
|
|
|
}
|
|
|
|
|
|
void NbusBridge::process_broadcast(uint8_t *rxFrame){
|
|
|
@@ -140,7 +143,11 @@ void NbusBridge::process_broadcast(uint8_t *rxFrame){
|
|
|
this->broadcastStart();
|
|
|
break;
|
|
|
|
|
|
+ default:
|
|
|
+ ;//nothing
|
|
|
}
|
|
|
+
|
|
|
+ HAL_Delay(1); /// send BC and wait TX complete
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -204,6 +211,7 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size){
|
|
|
break;
|
|
|
|
|
|
case FC_DATA: /* 0xB => 11 */
|
|
|
+ // NO NEED TO IMPLEMENT on NBUS BRIDGE
|
|
|
break;
|
|
|
|
|
|
case FC_SYNC: /* 0xC => 12 */
|
|
|
@@ -231,20 +239,36 @@ void NbusBridge::processRequest(uint8_t *rxFrame, uint8_t size){
|
|
|
}
|
|
|
|
|
|
void NbusBridge::processRunningState(){
|
|
|
- if (_run_state == STATE_STOPPED ){
|
|
|
+ if (_run_state == STATE_STOPPED){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_run_state == STATE_TO_STOP){
|
|
|
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
|
|
+ _run_state = STATE_STOPPED;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
|
|
NbusSlave *slave;
|
|
|
+ uint8_t *slaveFrameResponse;
|
|
|
for(uint32_t i=0; i< _num_slaves; i++){
|
|
|
slave = getSlave(_slave_adress[i]);
|
|
|
if(slave != NULL && slave->isActive()){
|
|
|
- for(uint32_t k = 0 ; k <= slave->nbus_get_sensor_count(false) ; k++){
|
|
|
+ _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);
|
|
|
- sendResponseToMaster(_workerFrame);
|
|
|
+ slaveFrameResponse = _workerFrame->GetFrame();
|
|
|
+ _dataFrame->AddInt8(slave->getSensorAddress());
|
|
|
+ _dataFrame->AddArray(&slaveFrameResponse[3], _workerFrame->GetLength()-3);
|
|
|
}
|
|
|
+ _dataFrame->AddInt8(0xFF);
|
|
|
+ _dataFrame->AddInt8(0xFF);
|
|
|
+ _dataFrame->Commit();
|
|
|
+ sendResponseToMaster(_dataFrame);
|
|
|
}
|
|
|
|
|
|
}
|