bleSDK_expansion_board/projects/blezongkong/src/app_control_out.c

205 lines
6.8 KiB
C
Raw Normal View History

#include "b6x.h"
#include "drvs.h"
#include "dbg.h"
#include "sftmr.h"
#include "app_uart.h"
#include "app_speed_governor.h"
#include "app_control_out.h"
// 使能电平
bool app_control_en[PA_MAX]={
[IN_GPS] =OE_LOW, // GPS超距 /L:超出活动区域(同)
[IN_EXTI0_Custom0] =OE_LOW, // 管理员模式
[OUT_Door_lock] =OE_HIGH, // 开锁 /H:开锁(同)
[OUT_Push_key] =OE_HIGH, // 开启推车 /L:开启推车(反)
[OUT_Switch_gear] =OE_LOW, // 限速/H:限速(反)
[OUT_High_speed] =OE_LOW, // 使能高速档位 /H:高使能(反)
[OUT_Low_speed] =OE_HIGH, // 使能低速档位 /L:低使能(反)
[OUT_Back_car] =OE_HIGH, // 使能倒车 /L:低使能倒车(反)
[OUT_Low_brake] =OE_HIGH, // 使能低制动 /L:低使能(反)
[OUT_High_brake] =OE_LOW // 使能高制动 /H:高使能(反)
};
//中控控制IO初始化
void app_control_init(void){
// out
gpio_dir_output(OUT_Door_lock,OE_LOW);// 默认锁车
gpio_dir_output(OUT_Push_key,OE_LOW);// 默认关闭推车模式
gpio_dir_output(OUT_Switch_gear,OE_LOW);// 默认转把调速模式
gpio_dir_output(OUT_High_speed,OE_LOW);// 高速档位,默认失能
gpio_dir_output(OUT_Low_speed,OE_LOW);// 低速档位,默认失能
gpio_dir_output(OUT_Back_car,OE_LOW);// 默认前进模式
gpio_dir_output(OUT_Low_brake,OE_LOW);// 默认关低制动
gpio_dir_output(OUT_High_brake,OE_HIGH);// 默认关高制动
//in
gpio_dir_input(OUT_Door_lock,IE_DOWN);// 默认锁车
gpio_dir_input(OUT_Push_key,IE_DOWN);// 默认关闭推车模式
gpio_dir_input(OUT_Switch_gear,IE_DOWN);// 默认转把调速模式
gpio_dir_input(OUT_High_speed,IE_DOWN);// 高速档位,默认失能
gpio_dir_input(OUT_Low_speed,IE_DOWN);// 低速档位,默认失能
gpio_dir_input(OUT_Back_car,IE_DOWN);// 默认前进模式
gpio_dir_input(OUT_Low_brake,IE_DOWN);// 默认关低制动
gpio_dir_input(OUT_High_brake,IE_UP);// 默认关高制动
//默认都失能
Set_Status(OUT_Door_lock,0);
Set_Status(OUT_Push_key,0);
Set_Status(OUT_Switch_gear,0);
Set_Status(OUT_High_speed,0);
Set_Status(OUT_Low_speed,0);
Set_Status(OUT_Back_car,0); //失能倒车
Set_Status(OUT_Low_brake,0);
Set_Status(OUT_High_brake,0);
// app_set_Door_lock_status(0);// 默认锁车
// app_set_Push_status(0);// 默认关闭推车模式
// app_set_gears_status(0);// 默认转把调速模式
// app_set_brake_status(0);// 默认关制动
// app_set_Back_car_status(0);// 默认前进模式
// in
gpio_dir_input(IN_EXTI0_Custom0, IE_UP); // Input enable, pull-up
// gpio_dir_input(IN_EXTI1_Custom1, IE_UP);
gpio_dir_input(IN_GPS, IE_UP);
// EXTI config
exti_init(EXTI_DBC(15, 4));
exti_set(EXTI_FTS, EXTI_SRC(IN_EXTI0_Custom0) | EXTI_SRC(IN_GPS)); // falling
exti_set(EXTI_DBE, EXTI_SRC(IN_EXTI0_Custom0) | EXTI_SRC(IN_GPS));
exti_set(EXTI_IER, EXTI_SRC(IN_EXTI0_Custom0) | EXTI_SRC(IN_GPS));
// IRQ enable
NVIC_EnableIRQ(EXTI_IRQn);
__enable_irq();
}
//获取档位状态/0管理员模式速度无限制/1游客模式油门限速/2低速档/3高速档
uint8_t app_get_gears_status(void){
uint8_t ret=0;
if(0 ==Get_Status(OUT_Switch_gear) && 1 ==Get_Status(OUT_High_speed) && 0 ==Get_Status(OUT_Low_speed)){
ret =0;
}else if(0 ==Get_Status(OUT_Switch_gear) && 0 ==Get_Status(OUT_High_speed) && 1 ==Get_Status(OUT_Low_speed)){
ret =1;
}else if(1 ==Get_Status(OUT_Switch_gear) && 0 ==Get_Status(OUT_High_speed) && 0 ==Get_Status(OUT_Low_speed)){
ret =2;
}else if(0 ==Get_Status(OUT_Switch_gear) && 0 ==Get_Status(OUT_High_speed) && 0 ==Get_Status(OUT_Low_speed)){
ret =3;
}
return ret;
}
//设置档位状态/0管理员模式速度无限制/1游客模式油门限速/2低速档/3高速档
uint8_t app_set_gears_status(uint8_t val){
if(0 ==val){ //管理员模式速度无限制
Set_Status(OUT_Switch_gear,0);
Set_Status(OUT_High_speed,1);
Set_Status(OUT_Low_speed,0);
}else if(1 ==val){//游客模式油门限速
Set_Status(OUT_Switch_gear,0);
Set_Status(OUT_High_speed,0);
Set_Status(OUT_Low_speed,1);
}else if(2 ==val){//低速模式
Set_Status(OUT_Switch_gear,1);
Set_Status(OUT_High_speed,0);
Set_Status(OUT_Low_speed,0);
}else if(3 ==val){//高速模式
Set_Status(OUT_Switch_gear,0);
Set_Status(OUT_High_speed,0);
Set_Status(OUT_Low_speed,0);
}
return app_get_gears_status();
}
//获取刹车状态/0取消刹车/1低刹/2高刹
uint8_t app_get_brake_status(void){
uint8_t ret=0;
if(0 ==Get_Status(OUT_Low_brake) && 0 ==Get_Status(OUT_High_brake)){
ret =0;
}else if(1 ==Get_Status(OUT_Low_brake) && 0 ==Get_Status(OUT_High_brake)){
ret =1;
}else if(0 ==Get_Status(OUT_Low_brake) && 1 ==Get_Status(OUT_High_brake)){
ret =2;
}
return ret;
}
//设置刹车状态/0取消刹车/1低刹/2高刹
uint8_t app_set_brake_status(uint8_t val){
if(1 ==val){//低刹
Set_Status(OUT_Low_brake,1);
Set_Status(OUT_High_brake,0);
}else if(2 ==val){//高刹
Set_Status(OUT_Low_brake,0);
Set_Status(OUT_High_brake,1);
}else{ //无刹
Set_Status(OUT_Low_brake,0);
Set_Status(OUT_High_brake,0);
}
return app_get_brake_status();
}
//获取电门锁状态设置/0锁车状态/1开锁状态
uint8_t app_get_Door_lock_status(void){
return Get_Status(OUT_Door_lock);
}
//电门锁状态设置/0锁车/1开锁
uint8_t app_set_Door_lock_status(bool val){
Set_Status(OUT_Door_lock,val);
return Get_Status(OUT_Door_lock);
}
//推车模式设置/0退出推车状态/1推车状态
uint8_t app_set_Push_status(bool val){
Set_Status(OUT_Push_key,val);
return Get_Status(OUT_Push_key);
}
//设置行驶方向/0前进1倒车
uint8_t app_set_Back_car_status(bool val){
Set_Status(OUT_Back_car,val);
return Get_Status(OUT_Back_car);
}
// GPIO外部中端处理
void EXTI_IRQHandler(void)
{
uint32_t irq_sta = EXTI->RIF.Word;
if (irq_sta & EXTI_SRC(IN_GPS))//
{
EXTI->ICR.Word = EXTI_SRC(IN_GPS);
if(1==Get_Status(IN_GPS)){
Set_Status(OUT_Door_lock,0);//GPS超出范围直接锁车
}
}
if (irq_sta & EXTI_SRC(IN_EXTI0_Custom0))
{
EXTI->ICR.Word = EXTI_SRC(IN_EXTI0_Custom0);
if(1==Get_Status(IN_EXTI0_Custom0)){ //进入管理员模式
Set_Status(OUT_High_speed,1);//开启高速模式
}
}
if (irq_sta & EXTI_SRC(IN_EXTI1_Custom1))
{
EXTI->ICR.Word = EXTI_SRC(IN_EXTI1_Custom1);
}
}