LCOV - code coverage report
Current view: top level - Filter - AP_Filter.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 33 37 89.2 %
Date: 2026-09-09 11:02:08 Functions: 6 6 100.0 %

          Line data    Source code
       1             : #include "AP_Filter_config.h"
       2             : 
       3             : #if AP_FILTER_ENABLED
       4             : 
       5             : #include "AP_Filter.h"
       6             : #include <AP_BoardConfig/AP_BoardConfig.h>
       7             : #include <AP_Vehicle/AP_Vehicle_Type.h>
       8             : #include <AP_HAL/AP_HAL_Boards.h>
       9             : 
      10             : extern const AP_HAL::HAL& hal;
      11             : 
      12             : const AP_Param::GroupInfo AP_Filters::var_info[] = {
      13             : 
      14             : #if AP_FILTER_NUM_FILTERS >= 1
      15             :     // @Group: 1_
      16             :     // @Path: AP_Filter_params.cpp
      17             :     AP_SUBGROUPINFO(params[0], "1_", 2, AP_Filters, AP_Filter_params),
      18             :     // @Group: 1_
      19             :     // @Path: AP_NotchFilter_params.cpp
      20             :     AP_SUBGROUPVARPTR(filters[0], "1_", 3, AP_Filters, backend_var_info[0]),
      21             : #endif
      22             : #if AP_FILTER_NUM_FILTERS >= 2
      23             :     // @Group: 2_
      24             :     // @Path: AP_Filter_params.cpp
      25             :     AP_SUBGROUPINFO(params[1], "2_", 4, AP_Filters, AP_Filter_params),
      26             :     // @Group: 2_
      27             :     // @Path: AP_NotchFilter_params.cpp
      28             :     AP_SUBGROUPVARPTR(filters[1], "2_", 5, AP_Filters, backend_var_info[1]),
      29             : #endif
      30             : #if AP_FILTER_NUM_FILTERS >= 3
      31             :     // @Group: 3_
      32             :     // @Path: AP_Filter_params.cpp
      33             :     AP_SUBGROUPINFO(params[2], "3_", 6, AP_Filters, AP_Filter_params),
      34             :     // @Group: 3_
      35             :     // @Path: AP_NotchFilter_params.cpp
      36             :     AP_SUBGROUPVARPTR(filters[2], "3_", 7, AP_Filters, backend_var_info[2]),
      37             : #endif
      38             : #if AP_FILTER_NUM_FILTERS >= 4
      39             :     // @Group: 4_
      40             :     // @Path: AP_Filter_params.cpp
      41             :     AP_SUBGROUPINFO(params[3], "4_", 8, AP_Filters, AP_Filter_params),
      42             :     // @Group: 4_
      43             :     // @Path: AP_NotchFilter_params.cpp
      44             :     AP_SUBGROUPVARPTR(filters[3], "4_", 9, AP_Filters, backend_var_info[3]),
      45             : #endif
      46             : #if AP_FILTER_NUM_FILTERS >= 5
      47             :     // @Group: 5_
      48             :     // @Path: AP_Filter_params.cpp
      49             :     AP_SUBGROUPINFO(params[4], "5_", 10, AP_Filters, AP_Filter_params),
      50             :     // @Group: 5_
      51             :     // @Path: AP_NotchFilter_params.cpp
      52             :     AP_SUBGROUPVARPTR(filters[4], "5_", 11, AP_Filters, backend_var_info[4]),
      53             : #endif
      54             : #if AP_FILTER_NUM_FILTERS >= 6
      55             :     // @Group: 6_
      56             :     // @Path: AP_Filter_params.cpp
      57             :     AP_SUBGROUPINFO(params[5], "6_", 12, AP_Filters, AP_Filter_params),
      58             :     // @Group: 6_
      59             :     // @Path: AP_NotchFilter_params.cpp
      60             :     AP_SUBGROUPVARPTR(filters[5], "6_", 13, AP_Filters, backend_var_info[5]),
      61             : #endif
      62             : #if AP_FILTER_NUM_FILTERS >= 7
      63             :     // @Group: 7_
      64             :     // @Path: AP_Filter_params.cpp
      65             :     AP_SUBGROUPINFO(params[6], "7_", 14, AP_Filters, AP_Filter_params),
      66             :     // @Group: 7_
      67             :     // @Path: AP_NotchFilter_params.cpp
      68             :     AP_SUBGROUPVARPTR(filters[6], "7_", 15, AP_Filters, backend_var_info[6]),
      69             : #endif
      70             : #if AP_FILTER_NUM_FILTERS >= 8
      71             :     // @Group: 8_
      72             :     // @Path: AP_Filter_params.cpp
      73             :     AP_SUBGROUPINFO(params[7], "8_", 16, AP_Filters, AP_Filter_params),
      74             :     // @Group: 8_
      75             :     // @Path: AP_NotchFilter_params.cpp
      76             :     AP_SUBGROUPVARPTR(filters[7], "8_", 17, AP_Filters, backend_var_info[7]),
      77             : #endif
      78             :     AP_GROUPEND
      79             : };
      80             : 
      81             : const AP_Param::GroupInfo *AP_Filters::backend_var_info[AP_FILTER_NUM_FILTERS];
      82             : 
      83          17 : AP_Filter::AP_Filter(FilterType type):
      84          17 :     _type(type)
      85             : {
      86          17 : }
      87             : 
      88       18882 : AP_Filters::AP_Filters()
      89             : {
      90        2098 :     AP_Param::setup_object_defaults(this, var_info);
      91             : 
      92             : #if CONFIG_HAL_BOARD == HAL_BOARD_SITL
      93        2096 :     if (singleton != nullptr) {
      94           0 :         AP_HAL::panic("AP_Filters must be singleton");
      95             :     }
      96             : #endif
      97        2098 :     singleton = this;
      98        2098 : }
      99             : 
     100        2086 : void AP_Filters::init()
     101             : {
     102        2086 :     update();
     103        2086 : }
     104             : 
     105             : // 1Hz update to process config changes
     106      151303 : void AP_Filters::update()
     107             : {
     108      151303 :     if (hal.util->get_soft_armed()) {
     109      100449 :         return;
     110             :     }
     111             : 
     112             :     // make sure all filters are allocated
     113      457686 :     for (uint8_t i = 0; i < AP_FILTER_NUM_FILTERS; i++) {
     114      406832 :         bool update = false;
     115      406832 :         switch (AP_Filter::FilterType(params[i]._type)) {
     116      406732 :             case AP_Filter::FilterType::FILTER_NONE:
     117      406732 :                 break;
     118         100 :             case AP_Filter::FilterType::FILTER_NOTCH:
     119         100 :                 if (filters[i] == nullptr) {
     120          17 :                     filters[i] = NEW_NOTHROW AP_NotchFilter_params();
     121          17 :                     backend_var_info[i] = AP_NotchFilter_params::var_info;
     122          17 :                     update = true;
     123             :                 }
     124         100 :                 break;
     125           0 :             default:
     126           0 :                 return;
     127             :         }
     128             : 
     129      406832 :         if (update) {
     130          17 :             AP_Param::load_object_from_eeprom(filters[i], backend_var_info[i]);
     131          17 :             AP_Param::invalidate_count();
     132             :         }
     133             :     }
     134             : }
     135             : 
     136         723 : AP_Filter* AP_Filters::get_filter(uint8_t index)
     137             : {
     138         723 :     if (index >= AP_FILTER_NUM_FILTERS) {
     139           0 :         return nullptr;
     140             :     }
     141             : 
     142         723 :     return filters[index-1];
     143             : }
     144             : 
     145             : // singleton instance
     146             : AP_Filters *AP_Filters::singleton;
     147             : 
     148             : namespace AP {
     149             : 
     150         723 : AP_Filters &filters()
     151             : {
     152         723 :     return *AP_Filters::get_singleton();
     153             : }
     154             : 
     155             : }
     156             : 
     157             : #endif // AP_FILTER_ENABLED

Generated by: LCOV version 1.14