| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571 |
- /*
- * @Description:
- * @Version: 2.0
- * @Author: Seven
- * @Date: 2022-06-14 14:01:56
- * @LastEditors: Seven
- * @LastEditTime: 2022-08-31 11:04:05
- */
- #include "led.h"
- #include "includes.h"
- #include "gw_ctrl.h"
- ///
- uint8_t LED_STATUS = 0;
- uint8_t uninit_led_state = 0; //未初始化时灯的开关状态
- uint8_t loraindex_led_flag = 0;//lora信道索引指示灯显示标记
- led_info_t led_info;
- void LED_Init(void)
- {
- //LED_RUN(PE14)
- GPIO_COMM_Init(RCC_APB2Periph_GPIOE, GPIOE,
- GPIO_Pin_14, GPIO_Mode_Out_PP, GPIO_Speed_50MHz);
- LED_RUN_ON();
-
- if(hd_id == PCB_V0)
- {
- //8引脚灯
- GPIO_COMM_Init(RCC_APB2Periph_GPIOD, GPIOD,
- GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15, GPIO_Mode_Out_PP, GPIO_Speed_50MHz);
- GPIO_COMM_Init(RCC_APB2Periph_GPIOC, GPIOC,
- GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9, GPIO_Mode_Out_PP, GPIO_Speed_50MHz);
- led_run_set(LED_ALL,LED_OFF);
- }
- else if(hd_id == PCB_V1)
- {
- //74hc595
- // led_run_set(LED_ALL,LED_OFF);
- GPIO_COMM_Init(RCC_APB2Periph_GPIOE, GPIOE,
- GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_11, GPIO_Mode_Out_PP, GPIO_Speed_50MHz);
- led_run_set(LED_ALL,LED_OFF);
-
- }
-
- led_info_init();
- }
- //输出0灯亮,输出1灯灭
- void led_send_byte(uint8_t data)
- {
-
- uint8_t i;
- LED_RCK_LOW();
- delay_us(2);
- LED_SCK_HIGH();
- delay_us(4);
- for(i = 0; i < 8; i++)
- {
- if(data&0x80)
- LED_SER_HIGH();
- else
- LED_SER_LOW();
- data <<= 1;
- LED_SCK_LOW();
- delay_us(4);
- LED_SCK_HIGH();
- delay_us(4);
- }
- LED_RCK_HIGH();
- // LED_SCK_LOW();
- delay_us(4);
- // LED_SCK_HIGH();
- // delay_us(4);
- LED_RCK_LOW();
-
- }
- //设置led灯
- //status:灯的状态
- //led:灯的编号
- void led_run_set(uint8_t led, uint8_t status)
- {
- if(hd_id == PCB_V0)
- {
- switch(led)
- {
- case LED0:
- if(status == LED_ON)
- {
- LED0_ON();
- }
- else if(status == LED_OFF)
- {
- LED0_OFF();
- }
- break;
- case LED1:
- if(status == LED_ON)
- {
- LED1_ON();
- }
- else if(status == LED_OFF)
- {
- LED1_OFF();
- }
- break;
- case LED2:
- if(status == LED_ON)
- {
- LED2_ON();
- }
- else if(status == LED_OFF)
- {
- LED2_OFF();
- }
- break;
- case LED3:
- if(status == LED_ON)
- {
- LED3_ON();
- }
- else if(status == LED_OFF)
- {
- LED3_OFF();
- }
- break;
- case LED4:
- if(status == LED_ON)
- {
- LED4_ON();
- }
- else if(status == LED_OFF)
- {
- LED4_OFF();
- }
- break;
- case LED5:
- if(status == LED_ON)
- {
- LED5_ON();
- }
- else if(status == LED_OFF)
- {
- LED5_OFF();
- }
- break;
- case LED6:
- if(status == LED_ON)
- {
- LED6_ON();
- }
- else if(status == LED_OFF)
- {
- LED6_OFF();
- }
- break;
- case LED7:
- if(status == LED_ON)
- {
- LED7_ON();
- }
- else if(status == LED_OFF)
- {
- LED7_OFF();
- }
- break;
- case LED_ALL:
- if(status == LED_ON)
- {
- LED_ON_ALL();
- }
- else if(status == LED_OFF)
- {
- LED_OFF_ALL();
- }
- break;
- default:
- break;
- }
- }
- else if(hd_id == PCB_V1)
- {
- switch(led)
- {
- case LED0:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<0);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<0);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED1:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<1);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<1);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED2:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<2);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<2);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED3:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<3);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<3);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED4:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<4);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<4);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED5:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<5);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<5);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED6:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<6);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<6);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED7:
- if(status == LED_ON)//输出低
- {
- LED_STATUS &= ~(1<<7);
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS |= (1<<7);
- }
- led_send_byte(LED_STATUS);
- break;
- case LED_ALL:
- if(status == LED_ON)//输出低
- {
- LED_STATUS = 0;
- }
- else if(status == LED_OFF)//输出高
- {
- LED_STATUS = 0xff;
- }
- led_send_byte(LED_STATUS);
- break;
- default:
- break;
- }
- }
- }
- //单个灯状态设置
- void Led_Single_State_Set(uint8_t led, uint8_t state)
- {
- led_run_set(led,state);
- }
- //指示灯初始化
- void led_info_init(void)
- {
- memset(&led_info,0,sizeof(led_info_t));
- //运行指示灯
- led_info.run_led.flag = 0xff;
- led_info.run_led.timeout = LED_RUN_SLOW_TIME;
- //报税口指示灯
- led_info.tax1_rcv_led.timeout = TAX1_RCV_LED_TIME;
- led_info.tax1_send_led.timeout = TAX1_SEND_LED_TIME;
- led_info.tax2_rcv_led.timeout = TAX2_RCV_LED_TIME;
- led_info.tax2_send_led.timeout = TAX2_SEND_LED_TIME;
- //Lora指示灯
- led_info.lora_rcv_led.timeout = LORA_RCV_LED_TIME;
- led_info.lora_send_led.timeout = LORA_SEND_LED_TIME;
- //未配置sn指示灯
- if(device_fixed_info.Work_State == DEV_WORK_STATE_UNINIT) //未配置sn
- {
- led_info.uninit_led.flag = 0xff;
- led_info.uninit_led.timeout = LED_RUN_FAST_TIME;
- }
-
- //显示屏指示灯
- led_info.display_rcv_led.timeout = DISPLAY_RCV_LED_TIME;
- led_info.display_send_led.timeout = DISPLAY_SEND_LED_TIME;
- }
- //关闭其他所有指示灯
- void close_all_led(void)
- {
- led_info.tax1_rcv_led.flag = 0;
- led_info.tax1_send_led.flag = 0;
- led_info.tax2_rcv_led.flag = 0;
- led_info.tax2_send_led.flag = 0;
- led_info.lora_rcv_led.flag = 0;
- led_info.lora_send_led.flag = 0;
- led_info.display_rcv_led.flag = 0;
- led_info.display_send_led.flag = 0;
- led_run_set(LED_ALL,LED_OFF);
- }
- //功能指示灯开始指示
- void led_start(uint8_t state)
- {
- if(device_fixed_info.Work_State==DEV_WORK_STATE_NORMAL && loraindex_led_flag==0)//正常工作模式和未打开lora信道指示灯时
- {
- switch(state)
- {
- case TAX1_RCV_LED:
- timeout_start(&led_info.tax1_rcv_led,1);
- Led_Single_State_Set(TAX1_RCV_LED,LED_OFF);
- break;
- case TAX1_SEND_LED:
- timeout_start(&led_info.tax1_send_led,1);
- Led_Single_State_Set(TAX1_SEND_LED,LED_OFF);
- break;
- case TAX2_RCV_LED:
- timeout_start(&led_info.tax2_rcv_led,1);
- Led_Single_State_Set(TAX2_RCV_LED,LED_OFF);
- break;
- case TAX2_SEND_LED:
- timeout_start(&led_info.tax2_send_led,1);
- Led_Single_State_Set(TAX2_SEND_LED,LED_OFF);
- break;
- case LORA_RCV_LED:
- timeout_start(&led_info.lora_rcv_led,1);
- Led_Single_State_Set(LORA_RCV_LED,LED_OFF);
- break;
- case LORA_SEND_LED:
- timeout_start(&led_info.lora_send_led,1);
- Led_Single_State_Set(LORA_SEND_LED,LED_OFF);
- break;
- case DISPLAY_RCV_LED:
- timeout_start(&led_info.display_rcv_led,1);
- Led_Single_State_Set(DISPLAY_RCV_LED,LED_OFF);
- break;
- case DISPLAY_SEND_LED:
- timeout_start(&led_info.display_send_led,1);
- Led_Single_State_Set(DISPLAY_SEND_LED,LED_OFF);
- break;
- default:
- break;
- }
- }
- }
- //led运行处理
- void led_run(void)
- {
- //未初始化运行指示灯开关判断
- if(key_info[KEY0_PRES-1].execute)//按键功能正在执行,关闭未初始化指示灯
- {
- timeout_stop(&led_info.uninit_led);
- }
- else//按键功能执行结束,根据模式判断未初始化指示灯
- {
- if(device_fixed_info.Work_State == DEV_WORK_STATE_UNINIT)
- {
- if(!led_info.uninit_led.flag)//未打开,打开
- {
- timeout_start(&led_info.uninit_led,0xff);
- }
- }
- else
- {
- if(led_info.uninit_led.flag)//已打开,关闭
- {
- timeout_stop(&led_info.uninit_led);
- }
- }
- }
-
- //运行指示灯
- if(timeout_isOut(&led_info.run_led))
- {
- LED_RUN = !LED_RUN;
- }
-
- //未初始化运行指示灯
- if(timeout_isOut(&led_info.uninit_led))
- {
- Led_Single_State_Set(LED_ALL,uninit_led_state);
- uninit_led_state = !uninit_led_state;
- }
-
- //报税口指示灯
- if(timeout_isOut(&led_info.tax1_rcv_led))
- {
- Led_Single_State_Set(TAX1_RCV_LED,LED_ON);
- }
- if(timeout_isOut(&led_info.tax1_send_led))
- {
- Led_Single_State_Set(TAX1_SEND_LED,LED_ON);
- }
- if(timeout_isOut(&led_info.tax2_rcv_led))
- {
- Led_Single_State_Set(TAX2_RCV_LED,LED_ON);
- }
- if(timeout_isOut(&led_info.tax2_send_led))
- {
- Led_Single_State_Set(TAX2_SEND_LED,LED_ON);
- }
-
- //lora指示灯
- if(timeout_isOut(&led_info.lora_rcv_led))
- {
- Led_Single_State_Set(LORA_RCV_LED,LED_ON);
- }
- if(timeout_isOut(&led_info.lora_send_led))
- {
- Led_Single_State_Set(LORA_SEND_LED,LED_ON);
- }
-
- //显示屏指示灯
- if(timeout_isOut(&led_info.display_rcv_led))
- {
- Led_Single_State_Set(DISPLAY_RCV_LED,LED_ON);
- }
- if(timeout_isOut(&led_info.display_send_led))
- {
- Led_Single_State_Set(DISPLAY_SEND_LED,LED_ON);
- }
-
- //lora信道指示灯
- if(timeout_isOut(&led_info.tt_loraindex_led_state))
- {
- loraindex_led_flag = 0;
- close_all_led();
- key_info[KEY0_PRES-1].execute = 0;
- }
- }
- ////明文密文指示灯运行
- void Encryption_type_led_run_state(uint8_t state)
- {
- int i;
- uint8_t cip_led = LED_ON;//密文指示灯
- OS_ERR err;
- if(state == CIPHERTEXT) //密文
- {
- //8个灯快闪
- for(i = 0; i < 5; i++)
- {
- led_run_set(LED_ALL,cip_led);
- cip_led = !cip_led;
- OSTimeDlyHMSM(0, 0, 0, CIPHERTEXT_LED_TIME, OS_OPT_TIME_DLY, &err);
- }
- led_run_set(LED_ALL,LED_OFF);
- }
- else if(state == PLAINTEXT)//明文
- {
- //8个灯全亮
- led_run_set(LED_ALL,LED_ON);
- OSTimeDlyHMSM(0, 0, PLAINTEXT_LED_TIME_S, 0, OS_OPT_TIME_DLY, &err);
- led_run_set(LED_ALL,LED_OFF);
- }
- }
- //升级开始指示灯处理
- void ota_start_led_init(void)
- {
- close_all_led();
- Led_Single_State_Set(UPDATA_START_LED,LED_ON);
- }
- //led显示一个数的后N位,bit最大为8
- void Data_lastNbit_led(uint32_t data, uint8_t bit, uint8_t signal)
- {
- int i;
- int state = 0,signal_tmp = 0;
- if(bit <= 4)
- {
- if(signal == 0)
- {
- signal_tmp = 0;
- }
- else
- {
- signal_tmp = 4;
- }
- for(i = 0; i < bit; i++)
- {
- state = (data>>i) & 0x00000001;
- Led_Single_State_Set(i+signal_tmp,state);
- }
- }
- else if(bit <= 8)
- {
- Data_last4bit_led(SOFTWARE_VERSION_APP,1);
- for(i = 0; i < bit-4; i++)
- {
- state = (data>>i) & 0x00000001;
- Led_Single_State_Set(i+0,state);
- }
- }
- }
- //显示一个数的后4位
- void Data_last4bit_led(uint32_t data, uint8_t signal)
- {
- int i;
- int state = 0,signal_tmp = 0;
- if(signal == 0)
- {
- signal_tmp = 0;
- }
- else
- {
- signal_tmp = 4;
- }
- for(i = 0; i < 4; i++)
- {
- state = (data>>i) & 0x00000001;
- Led_Single_State_Set(i+signal_tmp,state);
- }
- }
- //APP版本指示灯运行
- void APP_edittion_led_run(void)
- {
- OS_ERR err;
- Data_last4bit_led(SOFTWARE_VERSION_APP,1);
- Data_last4bit_led((SOFTWARE_VERSION_APP>>4),0);
- OSTimeDlyHMSM(0, 0, 0, LED_APP_TIME, OS_OPT_TIME_DLY, &err);
- led_run_set(LED_ALL,LED_OFF);
- }
|