ArduPilot开源代码之AP_OSD_MSP

1. 源由

前面讨论了

本章将针对具体的AP_OSD_MSP类进行研讨。

2. 结构设计

2.1 成员变量

无增加

2.2 OSD 符号

无自定义,将会保持与 AP_OSD_Backend 一致。

3. 接口设计

3.1 一次性接口

3.1.1 init

// initialise backend
bool AP_OSD_MSP::init(void)
{
    return true;
}

3.1.2 osd_thread_run_once

无,使用AP_OSD_Backend::osd_thread_run_once

3.1.3 init_symbol_set

无,使用AP_OSD_Backend::init_symbol_set

3.1.4 probe

最初的初始化,直接在AP_OSD::init_backend中进行,详见:ArduPilot开源代码之AP_OSD

AP_OSD_Backend *AP_OSD_MSP::probe(AP_OSD &osd)
{
    AP_OSD_MSP *backend = NEW_NOTHROW AP_OSD_MSP(osd);
    if (!backend) {
        return nullptr;
    }
    if (!backend->init()) {
        delete backend;
        return nullptr;
    }
    return backend;
}

3.2 基本操作

3.2.1 write

无实现代码???

    //draw given text to framebuffer
    void write(uint8_t x, uint8_t y, const char* text) override {};

3.2.2 flush

无实现代码???

    //flush framebuffer to screen
    void flush() override {};

3.2.3 clear

无实现代码???

    //clear framebuffer
    void clear() override {};

3.3 功能函数

3.3.1 is_compatible_with_backend_type

  • 不兼容:AP_OSD_MSP/AP_OSD_MSP_DISPLAYPORT
  • 兼容:AP_OSD_MAX7456/AP_OSD_SITL

什么情况??能兼容吗????

    bool is_compatible_with_backend_type(AP_OSD::osd_types type) const override {
        switch(type) {
        case AP_OSD::osd_types::OSD_MSP:
        case AP_OSD::osd_types::OSD_MSP_DISPLAYPORT:
            return false;
        case AP_OSD::osd_types::OSD_NONE:
        case AP_OSD::osd_types::OSD_TXONLY:
        case AP_OSD::osd_types::OSD_MAX7456:
        case AP_OSD::osd_types::OSD_SITL:
            return true;
        }
        return false;
    }

3.3.2 get_backend_type

    AP_OSD::osd_types get_backend_type() const override {
        return AP_OSD::osd_types::OSD_MSP;
    }

3.3.3 get_aspect_ratio_correction

无,使用AP_OSD_Backend::get_aspect_ratio_correction

4. 总结

AP_OSD_MSP类应该是没有实现,其实现应该在AP_OSD_MSP_DisplayPort::init_symbol_set中增加的那个AP_MSP::Option::DISPLAYPORT_BTFL_SYMBOLS来做区分了。

因此,这部分代码需要重构,或者直接删除。

void AP_OSD_MSP_DisplayPort::init_symbol_set(uint8_t *lookup_table, const uint8_t size)
{
    const AP_MSP *msp = AP::msp();
    // do we use backend specific symbols table?
    if (msp && msp->is_option_enabled(AP_MSP::Option::DISPLAYPORT_BTFL_SYMBOLS)) {
        memcpy(lookup_table, symbols, size);
    } else {
        memcpy(lookup_table, AP_OSD_Backend::symbols, size);
    }
}

5. 参考资料

【1】ArduPilot开源飞控系统之简单介绍
【2】ArduPilot之开源代码Task介绍
【3】ArduPilot飞控启动&运行过程简介
【4】ArduPilot之开源代码Library&Sketches设计
【5】ArduPilot之开源代码Sensor Drivers设计
【6】ArduPilot开源代码之AP_OSD_Backend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值