2024-12-05 16:57:19 +08:00
|
|
|
|
/*
|
|
|
|
|
* @Author: mbw
|
|
|
|
|
* @Date: 2024-10-09 08:42:14
|
|
|
|
|
* @LastEditors: mbw && 1600520629@qq.com
|
2025-01-02 15:12:34 +08:00
|
|
|
|
* @LastEditTime: 2025-01-02 09:45:39
|
2024-12-05 16:57:19 +08:00
|
|
|
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_emv.c
|
|
|
|
|
* @Description:
|
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
|
|
|
|
*/
|
|
|
|
|
#include "bsp_emv.h"
|
|
|
|
|
#include "rtthread.h"
|
|
|
|
|
#include "pin.h"
|
|
|
|
|
#include "bsp_flash.h"
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define LOG_TAG "bsp.emv"
|
|
|
|
|
#define LOG_LVL LOG_LVL_DBG
|
|
|
|
|
#include <ulog.h>
|
|
|
|
|
|
|
|
|
|
#define EMV_LINKED 0x02
|
|
|
|
|
#define EMV_FUNCTION_ON 0x04
|
|
|
|
|
#define EMV_STATUS_OPEN 0x07
|
|
|
|
|
#define EMV_STATUS_CLOSE 0x06
|
|
|
|
|
#define EMV_NOT_CONNECTED 0x04
|
|
|
|
|
#define EMV_FUNCTION_OFF 0x00
|
|
|
|
|
|
|
|
|
|
// volatile rt_uint16_t emv_state_flag = 0; // 0:关闭,1:打开
|
|
|
|
|
// struct rt_timer emv_timer;
|
|
|
|
|
|
|
|
|
|
// // 获取电磁阀连接状态
|
|
|
|
|
// static int Get_Emv_Link_Status(void)
|
|
|
|
|
// {
|
|
|
|
|
// // TODO: 需要有检测功能,默认连接,其实只要有这个功能开关就行,连接状态只对上报服务器相关,本地动作不受影响
|
|
|
|
|
// return EMV_LINKED;
|
|
|
|
|
// // return EMV_NOT_CONNECTED;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // 获取电磁阀状态
|
|
|
|
|
// int Get_Emv_Status(void)
|
|
|
|
|
// {
|
|
|
|
|
// rt_uint8_t emv_state = (rt_uint8_t)Flash_Get_SysCfg(kEmagneticSwitchId) & 0x07; // 获取开关阀功能开关状态
|
|
|
|
|
// if (emv_state & EMV_FUNCTION_ON) // 阀门功能开启了
|
|
|
|
|
// {
|
|
|
|
|
// LOG_D("具备阀门功能");
|
|
|
|
|
// if (Get_Emv_Link_Status() & EMV_LINKED)
|
|
|
|
|
// {
|
|
|
|
|
// LOG_D("阀门已经连接");
|
|
|
|
|
// if (rt_pin_read(EMV_PIN)) // 高电平
|
|
|
|
|
// {
|
|
|
|
|
// return EMV_STATUS_OPEN;
|
|
|
|
|
// }
|
|
|
|
|
// else // 低电平
|
|
|
|
|
// {
|
|
|
|
|
// return EMV_STATUS_CLOSE;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// LOG_D("阀门未连接");
|
|
|
|
|
// return EMV_NOT_CONNECTED; // 0x04为未连接
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// return EMV_FUNCTION_OFF; // 0阀门功能未开启
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// /*
|
|
|
|
|
// * @brief 设置电磁阀状态
|
|
|
|
|
// * 0x07 为打开,0x06为关闭
|
|
|
|
|
// */
|
|
|
|
|
// int BSP_Set_Emv_Status(rt_bool_t status)
|
|
|
|
|
// {
|
|
|
|
|
// rt_uint8_t ret = Get_Emv_Status();
|
|
|
|
|
// if (ret == EMV_FUNCTION_OFF || ret == EMV_NOT_CONNECTED) // 功能未开启或未连接
|
|
|
|
|
// {
|
|
|
|
|
// return (ret | 0xB0);
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// if (status == 0)//关阀指令
|
|
|
|
|
// {
|
|
|
|
|
// if (ret == EMV_STATUS_CLOSE) // 阀门已经关闭
|
|
|
|
|
// {
|
|
|
|
|
// return EMV_STATUS_CLOSE;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// emv_state_flag = 0;
|
|
|
|
|
// return EMV_STATUS_CLOSE;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else //开阀指令
|
|
|
|
|
// {
|
|
|
|
|
// if (ret == EMV_STATUS_OPEN) // 阀门已经打开
|
|
|
|
|
// {
|
|
|
|
|
// return EMV_STATUS_OPEN;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// emv_state_flag = 1;
|
|
|
|
|
// return EMV_STATUS_OPEN;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // 定时器回调函数
|
|
|
|
|
// void BSP_EMV_Timer_Callback(void *parameter)
|
|
|
|
|
// {
|
|
|
|
|
// static rt_uint8_t last_pos = 0;
|
|
|
|
|
// rt_uint8_t pos = 0;
|
|
|
|
|
|
|
|
|
|
// pos = emv_state_flag;
|
|
|
|
|
|
|
|
|
|
// // 执行电磁阀动作逻辑
|
|
|
|
|
// if (last_pos != pos)
|
|
|
|
|
// {
|
|
|
|
|
// if (pos == 1)
|
|
|
|
|
// {
|
|
|
|
|
// LOG_D("EMV_ON");
|
|
|
|
|
// rt_pin_write(EMV_PIN, 1); //关闭电磁阀
|
|
|
|
|
// }
|
|
|
|
|
// else if (pos == 0)
|
|
|
|
|
// {
|
|
|
|
|
// LOG_D("EMV_OFF");
|
|
|
|
|
// rt_pin_write(EMV_PIN, 0);// 断开连接
|
|
|
|
|
// }
|
|
|
|
|
// last_pos = pos;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// 初始化电磁阀
|
|
|
|
|
int BSP_EMV_Init(void)
|
|
|
|
|
{
|
|
|
|
|
rt_pin_mode(MACHINE_HAND_SLEEP_PIN, PIN_MODE_OUTPUT);
|
|
|
|
|
rt_pin_mode(MACHINE_HAND_COIL_A_PIN, PIN_MODE_OUTPUT);
|
|
|
|
|
rt_pin_mode(MACHINE_HAND_COIL_B_PIN, PIN_MODE_OUTPUT);
|
|
|
|
|
rt_pin_write(MACHINE_HAND_COIL_B_PIN, PIN_LOW);
|
|
|
|
|
rt_pin_write(MACHINE_HAND_SLEEP_PIN, PIN_LOW);
|
|
|
|
|
rt_pin_write(MACHINE_HAND_COIL_A_PIN, PIN_LOW);
|
|
|
|
|
// rt_pin_mode(EMV_PIN, PIN_MODE_OUTPUT);
|
|
|
|
|
// EMV_ON;
|
|
|
|
|
|
|
|
|
|
LOG_D("BSP_EMV_Init");
|
|
|
|
|
// rt_timer_init(&emv_timer, "emv_timer", BSP_EMV_Timer_Callback, RT_NULL, 10, RT_TIMER_FLAG_PERIODIC);
|
|
|
|
|
// rt_timer_start(&emv_timer); // 启动定时器
|
|
|
|
|
return RT_EOK;
|
|
|
|
|
}
|
2025-01-04 17:19:34 +08:00
|
|
|
|
// INIT_DEVICE_EXPORT(BSP_EMV_Init);
|
2024-12-05 16:57:19 +08:00
|
|
|
|
|
|
|
|
|
static void TEST_Jxs(int argc, char **argv)
|
|
|
|
|
{
|
|
|
|
|
if (argc == 3)
|
|
|
|
|
{
|
|
|
|
|
rt_uint8_t direction = atoi(argv[1]);
|
|
|
|
|
rt_uint16_t time = atoi(argv[2]);
|
|
|
|
|
LOG_D("direction:%d,time:%d",direction,time);
|
|
|
|
|
if (direction)
|
|
|
|
|
{
|
|
|
|
|
EMV_FORWARD_ON(time);
|
|
|
|
|
}
|
|
|
|
|
else if (direction == 2)
|
|
|
|
|
{
|
|
|
|
|
EMV_BACKWARD_ON(time);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
MSH_CMD_EXPORT(TEST_Jxs,"TEST_Jxs 方向 时间ms");
|
|
|
|
|
|