/* * @file AppBridge.cpp * @brief Implemetnácia modulu nBus Slave z pohľadu nBus Bridge * @date Mar 2, 2025 * @author Juraj Dudak */ #include NbusSlave::NbusSlave() { _communicator = NULL; _pdu.ma = 0; _pdu.sa = 0; } NbusSlave::NbusSlave(uint8_t address, NbusCommunicator *comm) { _communicator = comm; _pdu.ma = address; } NbusSlave::~NbusSlave() { // empty } void NbusSlave::setCommunicator(NbusCommunicator* comm){ _communicator = comm; } void NbusSlave::setAddress(uint8_t address){ _pdu.ma = address; } uint8_t NbusSlave::getModuleAddress(){ return _pdu.ma; } uint8_t NbusSlave::getSensorAddress(){ return _pdu.sa; } bool NbusSlave::isActive(){ // return _communicator != NULL; return _communicator != NULL && _pdu.ma != 0; } DataFrame* NbusSlave::nbus_echo(uint8_t *echo_data, uint8_t size) { _pdu.sa = SLAVE_ADDRESS_MODULE; _pdu.fc = FC_ECHO; for(uint32_t i=0;isendAndReceive(&_pdu, _sensor_cache, 4); } uint8_t NbusSlave::nbus_get_sensor_count(bool check_hw) { if (_sensor_count == 0 || check_hw == true) { nbus_sensor_count(); } return _sensor_count; } DataFrame* NbusSlave::nbus_sensor_count() { _pdu.sa = SLAVE_ADDRESS_MODULE; _pdu.fc = FC_SENSOR_CNT; DataFrame* df = _communicator->sendAndReceive(&_pdu, _sensor_cache, 0); _sensor_count = df->GetFrame()[3]; return df; } DataFrame* NbusSlave::nbus_sensor_type(uint8_t sensor_index) { _pdu.sa = sensor_index; _pdu.fc = FC_SENSOR_TYPE; return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0); } DataFrame* NbusSlave::nbus_module_info() { _pdu.sa = SLAVE_ADDRESS_MODULE; _pdu.fc = FC_INFO; return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0); } DataFrame* NbusSlave::nbus_sensor_format(uint8_t sensor_index) { _pdu.sa = sensor_index; _pdu.fc = FC_SENSOR_FORMAT; return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0); } DataFrame* NbusSlave::nbus_sensor_getData(uint8_t sensor_address) { _pdu.sa = sensor_address; _pdu.fc = FC_DATA; return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0); } DataFrame* NbusSlave::nbus_sensor_parameter(uint8_t sensor_address, uint8_t parameter) { _pdu.sa = sensor_address; _pdu.fc = FC_PARAM; _sensor_cache[0] = parameter; return _communicator->sendAndReceive(&_pdu, _sensor_cache, 1); } DataFrame* NbusSlave::nbus_sensor_parameters(uint8_t sensor_address) { _pdu.sa = sensor_address; _pdu.fc = FC_PARAM; return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0); }