/* * @file AppBridge.cpp * @brief Implemetnácia modulu nBus Slave z pohľadu nBus Bridge * @date Mar 2, 2025 * @author Juraj Dudak */ #include NbusSlave::NbusSlave() { _address = 0; _communicator = NULL; _pdu.ma = 0; } NbusSlave::NbusSlave(uint8_t address, NbusCommunicator *comm) { _address = address; _communicator = comm; _pdu.ma = address; } NbusSlave::~NbusSlave() { // empty } void NbusSlave::setCommunicator(NbusCommunicator* comm){ _communicator = comm; } void NbusSlave::setAddress(uint8_t address){ _address = address; _pdu.ma = _address; } bool NbusSlave::isActive(){ return _communicator != NULL && _address != 0; } DataFrame* NbusSlave::nbus_echo() { _pdu.sa = SLAVE_ADDRESS_MODULE; _pdu.fc = FC_ECHO; _sensor_cache[0] = 60 + _pdu.ma; _sensor_cache[1] = 61 + _pdu.ma; _sensor_cache[2] = 62 + _pdu.ma; _sensor_cache[3] = 63 + _pdu.ma; _sensor_count = 0; return _communicator->sendAndReceive(&_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_sensors_formats() { // return nbus_sensor_formats(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_format(uint8_t sensor_address, uint8_t sensor_index) { // _pdu.sa = sensor_address; // _pdu.fc = FC_SENSOR_FORMAT; // _sensor_cache[0] = sensor_index; // return _communicator->sendAndReceive(&_pdu, _sensor_cache, 1); //} 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); }