Skip to main content
SDK 还可以将外围设备配置为保持空闲状态,这意味着交易流程将从外围设备端开始,通过发送带有相关商品信息的“Vend Request”(出货请求)来启动(而不是由外围设备在商品选择后启用设备的读卡器,然后设备针对消费者出示的卡片响应“Begin Session”(开始会话),之后外围设备才发送“Vend Request”)。 本页将更详细地指导您在 C SDK 中实现始终空闲状态。为了更好地说明此流程,代码实现分为以下几个步骤:
  1. 包含库文件
  2. 设置宏和全局变量
  3. 设置私有函数
  4. 添加初始化函数
  5. 实现主函数
有关每个步骤的更多详情,请参阅以下各部分。

步骤 1:包含库文件

首先包含 SDK 所需的库文件。请参见下方代码块:
C

步骤 2:设置宏和全局变量

下方代码定义了用于日志记录/调试的模块名称宏,并设置了用于存储配置和会话相关数据的全局变量。
C
在哪里:
  • config:存储自动售货机配置。
  • session_product:表示单个售卖商品。
  • session:存储会话详情。
  • menu:存储菜单相关设置。
  • com_id:表示通信 ID。

步骤 3:设置私有函数

实现用于调试、处理事件和处理交易的辅助函数。以下各节将提供更多详细信息。

调试输出函数

此函数确定调试信息的输出流,支持不同的平台:
  • Linux/X8:使用 printf()。
  • STM32 微控制器:使用 drv_usart_tx_data()。
请参阅以下代码。
C
在哪里:
  • str:包含调试信息的 string。

CPU 定时器节拍

此函数由平台定时器定期调用(每 5-10 毫秒一次)。
C
在哪里:
  • p:指向可选参数的指针(此函数中未使用)。

VMC 链路事件处理程序

此函数处理链路事件并记录相关信息。
C
在哪里:
  • event_id:链接事件的类型。
  • data:指向可选参数的指针(根据事件类型而变化)。
该函数将始终返回布尔值 __false,因为未确定成功/失败。

出货请求处理程序

此函数用于处理会话及其包含的项目。请参阅下方代码块:
C

出货事件处理程序

此函数用于处理出货事件并记录相关信息。
C
在哪里:
  • event_id:售卖事件的类型。
  • data:指向可选参数的指针。根据事件类型而变化。
此函数将返回一个布尔值:
  • 大多数情况下为 __false。
  • __true 用于vmc_vend_event_on_vend_approved,表示出货批准成功。

步骤 4:设置初始化函数

添加辅助函数后,您需要实现用于初始化 VMC 配置和菜单处理程序的函数。请参见下方各部分了解更多详情。

初始化 VMC

此函数用于初始化 VMC 配置并注册事件处理程序。请参见下方代码:
C
由于您希望使 status 保持为 always idle,请将 config.always_idle 设置为 __true。

初始化菜单

在初始化菜单之前,请添加必要的处理程序函数。请参见下方代码:
C
现在,您可以通过调用之前创建的处理程序来初始化菜单。请参见以下代码。
C

步骤 5:实现主函数

在实现所有其他部分之后,您可以添加程序的主入口点,该入口点会初始化与外围设备的链路及菜单,然后启动一个运行菜单的无限循环。请参见下方代码:
C