Line data Source code
1 : /* 2 : This program is free software: you can redistribute it and/or modify 3 : it under the terms of the GNU General Public License as published by 4 : the Free Software Foundation, either version 3 of the License, or 5 : (at your option) any later version. 6 : 7 : This program is distributed in the hope that it will be useful, 8 : but WITHOUT ANY WARRANTY; without even the implied warranty of 9 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 : GNU General Public License for more details. 11 : 12 : You should have received a copy of the GNU General Public License 13 : along with this program. If not, see <http://www.gnu.org/licenses/>. 14 : */ 15 : 16 : #include "AP_Compass_MSP.h" 17 : 18 : #if AP_COMPASS_MSP_ENABLED 19 : 20 : #include <AP_HAL/AP_HAL.h> 21 : 22 0 : AP_Compass_Backend *AP_Compass_MSP::probe(uint8_t _msp_instance) 23 : { 24 0 : auto *ret = NEW_NOTHROW AP_Compass_MSP(_msp_instance); 25 0 : if (ret == nullptr) { 26 0 : return nullptr; 27 : } 28 0 : if (!ret->init()) { 29 0 : delete ret; 30 0 : return nullptr; 31 : } 32 0 : return ret; 33 : } 34 : 35 0 : bool AP_Compass_MSP::init() 36 : { 37 0 : auto devid = AP_HAL::Device::make_bus_id(AP_HAL::Device::BUS_TYPE_MSP, 0, msp_instance, 0); 38 0 : if (!register_compass(devid)) { 39 0 : return false; 40 : } 41 : 42 0 : set_external(true); 43 : 44 0 : return true; 45 : } 46 : 47 0 : void AP_Compass_MSP::handle_msp(const MSP::msp_compass_data_message_t &pkt) 48 : { 49 0 : if (pkt.instance != msp_instance) { 50 0 : return; 51 : } 52 0 : Vector3f field(pkt.magX, pkt.magY, pkt.magZ); 53 0 : accumulate_sample(field, instance); 54 : } 55 : 56 : #endif // AP_COMPASS_MSP_ENABLED 57 :