车载信息服务软件开发包使用指南(18)

281 篇文章 30 订阅

4.7 电源

  • 获取 TCU 电源状态更新
  • 在主动模式下设置 TCU 活动状态
  • 在被动模式下设置 TCU 活动状态

4.7.1 获取 TCU 电源状态更新

此示例应用程序演示了如何注册 TCU 活动电源状态通知,以便在电源状态转换之前执行任何任务。 这些在 ACTIVE 和 PASSIVE 模式下均有效。

  1. 实现ITcuActivityListener和IServiceStatusListener接口
class MyTcuActivityStateListener : public ITcuActivityListener, public IServiceStatusListener {
public:
    void onTcuActivityStateUpdate(TcuActivityState state) override;
    void onServiceStatusChange(ServiceStatus status) override;
};

  1. 获取PowerFactory实例
    auto &powerFactory = PowerFactory::getInstance();

  2. 获取 clientType 为 SLAVE 的 TCU-activity manager 实例
    auto tcuActivityManager = powerFactory.getTcuActivityManager(ClientType::SLAVE);

  3. 等待TCU-活动管理服务初始化就绪

bool isReady = tcuActivityManager->isReady();
if(!isReady) {
    std::cout << "TCU-activity management service is not ready" << std::endl;
    std::cout << "Waiting uncondotionally for it to be ready " << std::endl;
    std::future<bool> f = tcuActivityManager->onReady();
    isReady = f.get();
}

  1. 如果SDK无法初始化tcu活动管理服务,则退出应用程序
if(isReady) {
    std::cout << " *** TCU-activity management service is Ready *** " << std::endl;
} else {
    std::cout << " *** ERROR - Unable to initialize TCU-activity management service" << std::endl;
    return 1;
}
  1. 实例化MyTcuActivityStateListener
    auto myTcuStateListener = std::make_shared<MyTcuActivityStateListener>();

  2. 注册以更新tcu活动状态及其管理服务状态

tcuActivityManager->registerListener(myTcuStateListener);
tcuActivityManager->registerServiceStateListener(myTcuStateListener);
  1. 等待 TCU 活动状态更新
void MyTcuActivityStateListener::onTcuActivityStateUpdate(TcuActivityState state) {
    std::cout << std::endl << "********* TCU-activity state update *********" << std::endl;
    // Avoid long blocking calls when handling notifications
}
  1. 在SUSPEND/SHUTDOWN通知上,保存任何必需的信息并发送一个(尽管有多个侦听器)确认
    tcuActivityManager->sendActivityStateAck(TcuActivityStateAck);

  2. 实现onServiceStatusChange回调,以了解tcu活动管理服务何时停止

// When the TCU-activity management service goes down, this API is invoked
// with status UNAVAILABLE. All TCU-activity state notifications will be
// stopped until the status becomes AVAILABLE again.
void MyTcuActivityStateListener::onServiceStatusChange(ServiceStatus status) {
    std::cout << std::endl << "****** TCU-activity management service status update ******" << std::endl;
    // Avoid long blocking calls when handling notifications
}

4.7.2 在主动模式下设置 TCU 活动状态

这个示例应用程序演示了如何在活动模式下更改tcu活动电源状态。

  1. 实现一个命令响应回调方法
// This is invoked with error code indicating whether the request
// was SUCCESS or FAILURE
void commandResponse(ErrorCode error) {
    if (error == ErrorCode::SUCCESS) {
        std::cout << " Command executed successfully" << std::endl;
    } else {
        std::cout << " Command failed, errorCode: " << static_cast<int>(error) << std::endl;
    }
}

  1. 实现ITcuActivityListener和IServiceStatusListener接口
class MyTcuActivityStateListener : public ITcuActivityListener, public IServiceStatusListener {
public:
    void onTcuActivityStateUpdate(TcuActivityState state) override;
    void onServiceStatusChange(ServiceStatus status) override;
};
  1. 获取一个PowerFactory实例
    auto &powerFactory = PowerFactory::getInstance();

  2. 获取ClientType为MASTER的tcu活动管理器实例
    auto tcuActivityManager = powerFactory.getTcuActivityManager(ClientType::MASTER);

  3. 等待TCU-活动管理服务初始化就绪

bool isReady = tcuActivityManager->isReady();
if(!isReady) {
    std::cout << "TCU-activity management service is not ready" << std::endl;
    std::cout << "Waiting uncondotionally for it to be ready " << std::endl;
    std::future<bool> f = tcuActivityManager->onReady();
    isReady = f.get();
}

  1. 如果SDK无法初始化TCU-activity management服务,则退出应用
if(isReady) {
    std::cout << " *** TCU-activity management service is Ready *** " << std::endl;
} else {
    std::cout << " *** ERROR - Unable to initialize TCU-activity management service" << std::endl;
    return 1;
}

  1. 实例化MyTcuActivityStateListener
    auto myTcuStateListener = std::make_shared<MyTcuActivityStateListener>();

  2. 注册更新 TCU 活动状态及其管理服务状态

tcuActivityManager->registerListener(myTcuStateListener);
tcuActivityManager->registerServiceStateListener(myTcuStateListener);
  1. 设置TCU活动电源状态
    tcuActivityManager->setActivityState(state,&commandResponse);

  2. 实施 onTcuActivityStateUpdate,它被调用以通知 TCU 活动状态正在更改为所需状态

void MyTcuActivityStateListener::onTcuActivityStateUpdate(TcuActivityState state) {
    std::cout << std::endl << "********* TCU-activity state update *********" << std::endl;
    // Avoid long blocking calls when handling notifications
}

  1. 在 SUSPEND/SHUTDOWN 通知中,保存所有需要的信息并发送一个(尽管有多个监听者)确认
    tcuActivityManager->sendActivityStateAck(TcuActivityStateAck);

  2. 实施 onServiceStatusChange 回调以了解 TCU 活动管理服务何时关闭

// When the TCU-activity management service goes down, this API is invoked
// with status UNAVAILABLE. All TCU-activity state notifications will be
// stopped until the status becomes AVAILABLE again.
void MyTcuActivityStateListener::onServiceStatusChange(ServiceStatus status) {
    std::cout << std::endl << "****** TCU-activity management service status update ******" << std::endl;
    // Avoid long blocking calls when handling notifications
}

4.7.3 设置TCU被动激活状态

此示例应用演示了如何在被动模式下更改 TCU 活动电源状态。

  1. 实现命令响应回调方法
// This is invoked with error code indicating whether the request
// was SUCCESS or FAILURE
void commandResponse(ErrorCode error) {
    if (error == ErrorCode::SUCCESS) {
        std::cout << " Command executed successfully" << std::endl;
    } else {
        std::cout << " Command failed, errorCode: " << static_cast<int>(error) << std::endl;
    }
}

  1. 实现ITcuActivityListener和IServiceStatusListener接口
class MyTcuActivityStateListener : public ITcuActivityListener, public IServiceStatusListener {
public:
    void onTcuActivityStateUpdate(TcuActivityState state) override;
    void onSlaveAckStatusUpdate(telux::common::Status status);
    void onServiceStatusChange(ServiceStatus status) override;
};
  1. 获取一个PowerFactory实例
    auto &powerFactory = PowerFactory::getInstance();

  2. 获取 ClientType 为 MASTER 的 TCU 活动管理器实例
    auto tcuActivityManager = powerFactory.getTcuActivityManager(ClientType::MASTER);

  3. 等待TCU-活动管理服务初始化就绪

bool isReady = tcuActivityManager->isReady();
if(!isReady) {
    std::cout << "TCU-activity management service is not ready" << std::endl;
    std::cout << "Waiting uncondotionally for it to be ready " << std::endl;
    std::future<bool> f = tcuActivityManager->onReady();
    isReady = f.get();
}

  1. 如果SDK无法初始化TCU-activity management服务,则退出应用
if(isReady) {
    std::cout << " *** TCU-activity management service is Ready *** " << std::endl;
} else {
    std::cout << " *** ERROR - Unable to initialize TCU-activity management service" << std::endl;
    return 1;
}

  1. 实例化MyTcuActivityStateListener
    auto myTcuStateListener = std::make_shared<MyTcuActivityStateListener>();

  2. 注册更新 TCU 活动状态及其管理服务状态

tcuActivityManager->registerListener(myTcuStateListener);
tcuActivityManager->registerServiceStateListener(myTcuStateListener);

  1. 设置 TCU 活动状态
    tcuActivityManager->setActivityState(state,&commandResponse);

  2. 实施 onTcuActivityStateUpdate,它被调用以通知 TCU 活动状态正在更改为所需状态

void MyTcuActivityStateListener::onTcuActivityStateUpdate(TcuActivityState state) {
    std::cout << std::endl << "********* TCU-activity state update *********" << std::endl;
    // Avoid long blocking calls when handling notifications
}

  1. 在 SUSPEND/SHUTDOWN 通知中,保存所有需要的信息并发送一个(尽管有多个监听者)确认
    tcuActivityManager->sendActivityStateAck(TcuActivityStateAck);

  2. 调用下面的监听API通知系统中所有客户端的确认状态

void MyTcuActivityStateListener::onSlaveAckStatusUpdate(telux::common::Status status) {
    if (status == telux::common::Status::SUCCESS) {
        std::cout << " All clients acknowledged successfully" << std::endl;
    } else if (status == telux::common::Status::EXPIRED) {
        std::cout << " Timeout occured while waiting for all acknowledgements" << std::endl;
    } else {
        std::cout << " Failed to receive all acknowledgements, status: " << static_cast<int>(status) <<
        std::endl;
    }
}

  1. 实施 onServiceStatusChange 回调以了解 TCU 活动管理服务何时关闭
// When the TCU-activity management service goes down, this API is invoked
// with status UNAVAILABLE. All TCU-activity state notifications will be
// stopped until the status becomes AVAILABLE again.
void MyTcuActivityStateListener::onServiceStatusChange(ServiceStatus status) {
    std::cout << std::endl << "****** TCU-activity management service status update ******" << std::endl;
    // Avoid long blocking calls when handling notifications
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值