feat: 06-17 신규 작업본 반영 (개발사양서/기능검토/승인원/Source 등 추가)
.claude/ 제외(.gitignore 추가). 기존 초기커밋(5a96a69) 위에 신규·수정·이동분 커밋.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,733 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "Nano100Series.h"
|
||||
#include "adc.h"
|
||||
#include "gpio.h"
|
||||
#include "pwm.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
#include "sys.h"
|
||||
#include "clk.h"
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
extern volatile uint8_t Rx_rs485_TimeOut ;
|
||||
|
||||
extern volatile uint8_t Power_On;
|
||||
extern volatile uint8_t Tx_Run_Mode;
|
||||
extern volatile uint8_t Tx_Fan_Speed;
|
||||
extern volatile uint8_t Tx_Reservation_Hour;
|
||||
|
||||
|
||||
extern uint8_t Ventilation_SA[5];
|
||||
extern uint8_t Ventilation_EA[5];
|
||||
extern uint8_t AirClean_SA[5];
|
||||
extern uint8_t AirClean_EA[5];
|
||||
extern uint8_t Bypass_SA[5];
|
||||
extern uint8_t Bypass_EA[5];
|
||||
extern uint8_t Test_Mode_Step;
|
||||
|
||||
volatile uint8_t Tx_Data_Mode = TX_DATA_MODE_REQUEST1;
|
||||
uint16_t Main_Err_Code = 0;
|
||||
|
||||
volatile uint16_t Update_Event = 0;
|
||||
|
||||
|
||||
const unsigned char auchCRCHi[] = {
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
|
||||
} ;
|
||||
|
||||
// Table of CRC values for low-order byte
|
||||
const unsigned char auchCRCLo[] = {
|
||||
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
|
||||
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
|
||||
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
|
||||
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
|
||||
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
|
||||
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
|
||||
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
|
||||
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
|
||||
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
|
||||
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
|
||||
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
|
||||
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
|
||||
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
|
||||
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
|
||||
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
|
||||
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
|
||||
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
|
||||
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
|
||||
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
|
||||
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
|
||||
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
|
||||
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
|
||||
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
|
||||
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
|
||||
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
|
||||
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
|
||||
} ;
|
||||
|
||||
uint16_t CRC16(uint8_t *puchMsg, uint16_t usDataLen)
|
||||
{
|
||||
uint8_t uchCRCHi = 0xFF ; // high CRC byte initialized
|
||||
uint8_t uchCRCLo = 0xFF ; // low CRC byte initialized
|
||||
uint8_t uIndex ; // will index into CRC lookup table
|
||||
|
||||
while (usDataLen--) // pass through message buffer
|
||||
{
|
||||
uIndex = uchCRCHi ^ *puchMsg++ ; // calculate the CRC
|
||||
|
||||
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
|
||||
uchCRCLo = auchCRCLo[uIndex] ;
|
||||
}
|
||||
return ((uint16_t)uchCRCHi << 8 | (uint16_t)uchCRCLo) ;
|
||||
|
||||
}
|
||||
|
||||
uint16_t Aeverage_calculator(uint16_t val, uint16_t * array_val)
|
||||
{
|
||||
uint8_t i;
|
||||
uint16_t max = 0;
|
||||
uint16_t min = 10000;
|
||||
uint32_t sum = 0;
|
||||
uint16_t Rval = 0;
|
||||
|
||||
for(i=9; i>0; i--)
|
||||
{
|
||||
*(array_val+i) = *(array_val+i-1);
|
||||
}
|
||||
*array_val = val;
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
{
|
||||
if(array_val[i] >= max)
|
||||
{
|
||||
max = array_val[i];
|
||||
}
|
||||
if(array_val[i] <= min)
|
||||
{
|
||||
min = array_val[i];
|
||||
}
|
||||
sum += array_val[i];
|
||||
}
|
||||
Rval = (uint16_t)((sum - max - min)/8);
|
||||
|
||||
return(Rval);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////
|
||||
extern volatile uint8_t Rx_modbus_TimeOut;
|
||||
|
||||
void Rx_modbus_Check(uint8_t data)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void SC0_IRQHandler(void)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
data = SCUART_READ(SC0);
|
||||
Rx_modbus_Check(data);
|
||||
Rx_modbus_TimeOut = 5;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
uint8_t Tx_rs485_buffer[25];
|
||||
uint8_t Rx_rs485_buffer[25];
|
||||
uint8_t Rx_rs485_Pos = 0;
|
||||
volatile uint8_t Rx_rs485_complete = 0;
|
||||
|
||||
void Rx_rs485_Check(uint8_t data)
|
||||
{
|
||||
uint16_t cksum = 0, iTmp = 0;
|
||||
|
||||
if(Rx_rs485_TimeOut == 0)Rx_rs485_Pos = 0;
|
||||
switch(Rx_rs485_Pos)
|
||||
{
|
||||
case 0:
|
||||
if(data != 0xAA)break;
|
||||
Rx_rs485_buffer[Rx_rs485_Pos++] = data;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
Rx_rs485_buffer[Rx_rs485_Pos++] = data;
|
||||
break;
|
||||
case 20:
|
||||
Rx_rs485_buffer[Rx_rs485_Pos++] = data;
|
||||
iTmp = (uint16_t)Rx_rs485_buffer[19]<<8;
|
||||
cksum = iTmp + (uint16_t)Rx_rs485_buffer[20] ;
|
||||
if(cksum == CRC16(Rx_rs485_buffer, 19))
|
||||
{
|
||||
Rx_rs485_complete = 1;
|
||||
}
|
||||
Rx_rs485_Pos = 0;
|
||||
break;
|
||||
default:
|
||||
Rx_rs485_Pos = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
extern uint8_t In_Com_Error_Count;
|
||||
extern uint8_t Out_Com_Error_Count ;
|
||||
extern uint8_t Sensor_Error_Count;
|
||||
|
||||
void com_rs485_process(void)
|
||||
{
|
||||
if(Rx_rs485_complete == 1)
|
||||
{
|
||||
Rx_rs485_complete = 0;
|
||||
|
||||
if(Rx_rs485_buffer[1] == 0x10)//main
|
||||
{
|
||||
Rx_Main_Parsing();
|
||||
In_Com_Error_Count = 0;
|
||||
Main_Err_Code &= ~ERROR_IN_COM;
|
||||
}
|
||||
else if(Rx_rs485_buffer[1] == 0x01)
|
||||
{
|
||||
if(Rx_rs485_buffer[2] == 1) // id 1 - sensor pack
|
||||
{
|
||||
Rx_Sensor_Parsing();
|
||||
Sensor_Error_Count = 0;
|
||||
Main_Err_Code &= ~(ERROR_CO2 | ERROR_DUST);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
volatile uint8_t Filter_Reset_Flag = 0;
|
||||
|
||||
uint16_t Used_Filter_Time = 0;
|
||||
uint16_t Used_Soja_Time = 0;
|
||||
uint8_t Main_BxD_Version = 0;
|
||||
int8_t Ex_Temperature = 0;
|
||||
int8_t In_Temperature = 0;
|
||||
uint16_t SA_rpm = 0, EA_rpm = 0;
|
||||
|
||||
uint8_t Vsp_Mode = 0;
|
||||
uint8_t Wifi_Status = 0;
|
||||
extern uint8_t Main_Modbus_ID;
|
||||
|
||||
uint8_t Main_BxD_FW_Version[3];
|
||||
|
||||
void Rx_Main_Parsing(void)
|
||||
{
|
||||
uint16_t Tmp_Err = 0;
|
||||
|
||||
if(Rx_rs485_buffer[2] != 0x00)return; // My id = 0
|
||||
|
||||
Vsp_Mode = Rx_rs485_buffer[3];
|
||||
|
||||
switch(Vsp_Mode)
|
||||
{
|
||||
case 0x00: // nomal mode
|
||||
if(Rx_rs485_buffer[4] & 0x10)
|
||||
{
|
||||
Tx_Run_Mode = Rx_rs485_buffer[4]&0x0F;
|
||||
if(Rx_rs485_buffer[4] == 0x10)
|
||||
{
|
||||
if((Power_On == 1)&&(Tx_Run_Mode == MODE_OFF))power_off_process();
|
||||
}
|
||||
else
|
||||
{
|
||||
if((Power_On == 0)&&(Tx_Run_Mode != MODE_OFF))power_on_process_by_roomcon();
|
||||
}
|
||||
}
|
||||
if(Rx_rs485_buffer[5] & 0x10)Tx_Fan_Speed = Rx_rs485_buffer[5]&0x0F;
|
||||
if(Rx_rs485_buffer[6] & 0x10)
|
||||
{
|
||||
Tx_Reservation_Hour = Rx_rs485_buffer[6]&0x0F;
|
||||
}
|
||||
|
||||
Tmp_Err = (((uint16_t)Rx_rs485_buffer[7]<<8) |( (uint16_t)Rx_rs485_buffer[8]&0x00FF))&0x00FF;
|
||||
Main_Err_Code &= ~0x00FF;
|
||||
Main_Err_Code |= Tmp_Err;
|
||||
|
||||
if(Filter_Reset_Flag == 1)
|
||||
{
|
||||
if((Main_Err_Code&0x000F) == 0)Filter_Reset_Flag = 0;
|
||||
}
|
||||
|
||||
Used_Filter_Time = ((uint16_t)Rx_rs485_buffer[11]<<8) |( (uint16_t)Rx_rs485_buffer[12]&0x00FF);
|
||||
Used_Soja_Time = ((uint16_t)Rx_rs485_buffer[13]<<8) |( (uint16_t)Rx_rs485_buffer[14]&0x00FF);
|
||||
|
||||
Main_BxD_FW_Version[0] = Rx_rs485_buffer[15];
|
||||
Main_BxD_FW_Version[1] = Rx_rs485_buffer[16];
|
||||
Main_BxD_FW_Version[2] = Rx_rs485_buffer[17];
|
||||
|
||||
Wifi_Status = Rx_rs485_buffer[18];
|
||||
|
||||
break;
|
||||
case 0x01: // vent request mode
|
||||
Ventilation_SA[0] = Rx_rs485_buffer[4]; // VENT 1 SA
|
||||
Ventilation_EA[0] = Rx_rs485_buffer[5]; // VENT 1 EA
|
||||
Ventilation_SA[1] = Rx_rs485_buffer[6]; // VENT 2 SA
|
||||
Ventilation_EA[1] = Rx_rs485_buffer[7]; // VENT 2 EA
|
||||
Ventilation_SA[2] = Rx_rs485_buffer[8]; // VENT 3 SA
|
||||
Ventilation_EA[2] = Rx_rs485_buffer[9];// VENT 3 EA
|
||||
Ventilation_SA[3] = Rx_rs485_buffer[10]; // VENT 4 SA
|
||||
Ventilation_EA[3] = Rx_rs485_buffer[11]; // VENT 4 EA
|
||||
Ventilation_SA[4] = Rx_rs485_buffer[12]; // VENT 5 SA
|
||||
Ventilation_EA[4] = Rx_rs485_buffer[13]; // VENT 6 EA
|
||||
|
||||
Main_Modbus_ID = Rx_rs485_buffer[14]; // Modbus set id
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_REQUEST2;
|
||||
break;
|
||||
case 0x02: // air request mode
|
||||
AirClean_SA[0] = Rx_rs485_buffer[4]; // AIR 1 SA
|
||||
AirClean_EA[0] = Rx_rs485_buffer[5]; // AIR 1 EA
|
||||
AirClean_SA[1] = Rx_rs485_buffer[6]; // AIR 2 SA
|
||||
AirClean_EA[1] = Rx_rs485_buffer[7]; // AIR 2 EA
|
||||
AirClean_SA[2] = Rx_rs485_buffer[8]; // AIR 3 SA
|
||||
AirClean_EA[2] = Rx_rs485_buffer[9];// AIR 3 EA
|
||||
AirClean_SA[3] = Rx_rs485_buffer[10]; // AIR 4 SA
|
||||
AirClean_EA[3] = Rx_rs485_buffer[11]; // AIR 4 EA
|
||||
AirClean_SA[4] = Rx_rs485_buffer[12]; // AIR 5 SA
|
||||
AirClean_EA[4] = Rx_rs485_buffer[13]; // AIR 6 EA
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_REQUEST3;
|
||||
break;
|
||||
case 0x03: // bypass request mode
|
||||
Bypass_SA[0] = Rx_rs485_buffer[4]; // BY 1 SA
|
||||
Bypass_EA[0] = Rx_rs485_buffer[5]; // BY 1 EA
|
||||
Bypass_SA[1] = Rx_rs485_buffer[6]; // BY 2 SA
|
||||
Bypass_EA[1] = Rx_rs485_buffer[7]; // BY 2 EA
|
||||
Bypass_SA[2] = Rx_rs485_buffer[8]; // BY 3 SA
|
||||
Bypass_EA[2] = Rx_rs485_buffer[9];// BY 3 EA
|
||||
Bypass_SA[3] = Rx_rs485_buffer[10]; // BY 4 SA
|
||||
Bypass_EA[3] = Rx_rs485_buffer[11]; // BY 4 EA
|
||||
Bypass_SA[4] = Rx_rs485_buffer[12]; // BY 5 SA
|
||||
Bypass_EA[4] = Rx_rs485_buffer[13]; // BY 6 EA
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_NORMAL;
|
||||
break;
|
||||
case 0x10:
|
||||
SA_rpm = ((uint16_t)Rx_rs485_buffer[10]<<8) |( (uint16_t)Rx_rs485_buffer[11]&0x00FF);
|
||||
EA_rpm = ((uint16_t)Rx_rs485_buffer[12]<<8) |( (uint16_t)Rx_rs485_buffer[13]&0x00FF);
|
||||
break;
|
||||
default:
|
||||
Tx_Data_Mode = TX_DATA_MODE_NORMAL;
|
||||
break;
|
||||
}
|
||||
|
||||
Tx_Main_process();
|
||||
|
||||
}
|
||||
|
||||
uint8_t CheckSum_Creator(uint8_t *buf, uint8_t len)
|
||||
{
|
||||
uint8_t i, rt;
|
||||
|
||||
rt = 0;
|
||||
|
||||
for(i=0; i<len; i++)
|
||||
{
|
||||
rt ^= buf[i];
|
||||
}
|
||||
|
||||
return(rt);
|
||||
}
|
||||
|
||||
extern volatile uint8_t Tx_Mode_Event, Tx_Fan_Event, Tx_Reserve_Event;
|
||||
extern uint8_t Wifi_Command ;
|
||||
void Tx_Main_process(void)
|
||||
{
|
||||
uint16_t cksum = 0;
|
||||
uint8_t i = 0;
|
||||
|
||||
for(i=0; i<20; i++)Tx_rs485_buffer[i] = 0;
|
||||
|
||||
Tx_rs485_buffer[0] = 0xAA;
|
||||
Tx_rs485_buffer[1] = 0x01;
|
||||
Tx_rs485_buffer[2] = 0x00; // ID = 0
|
||||
Tx_rs485_buffer[3] = Tx_Data_Mode;
|
||||
|
||||
switch(Tx_Data_Mode)
|
||||
{
|
||||
case TX_DATA_MODE_NORMAL:
|
||||
Tx_rs485_buffer[4] = Tx_Run_Mode|Tx_Mode_Event;
|
||||
Tx_rs485_buffer[5] = Tx_Fan_Speed|Tx_Fan_Event;
|
||||
Tx_rs485_buffer[6] = Tx_Reservation_Hour|Tx_Reserve_Event;
|
||||
|
||||
Tx_Mode_Event = 0;
|
||||
Tx_Fan_Event = 0;
|
||||
Tx_Reserve_Event = 0;
|
||||
|
||||
Tx_rs485_buffer[7] = 0x00;
|
||||
Tx_rs485_buffer[8] = Filter_Reset_Flag;
|
||||
Tx_rs485_buffer[9] = 0;//(signed char)Out_Temperature;
|
||||
Tx_rs485_buffer[10] = 0;//(signed char)In_Temperature;
|
||||
Tx_rs485_buffer[11] = (uint8_t)(Used_Filter_Time>>8);
|
||||
Tx_rs485_buffer[12] = (uint8_t)(Used_Filter_Time&0x00FF);
|
||||
Tx_rs485_buffer[13] = (uint8_t)(Used_Soja_Time>>8);
|
||||
Tx_rs485_buffer[14] = (uint8_t)(Used_Soja_Time&0x00FF);
|
||||
Tx_rs485_buffer[15] = 'S';
|
||||
Tx_rs485_buffer[16] = 'I';
|
||||
Tx_rs485_buffer[17] = ROOMCON_FW_VERSION;
|
||||
Tx_rs485_buffer[18] = Wifi_Command;
|
||||
Wifi_Command = 0;
|
||||
break;
|
||||
case TX_DATA_MODE_REQUEST1:
|
||||
break;
|
||||
case TX_DATA_MODE_REQUEST2:
|
||||
break;
|
||||
case TX_DATA_MODE_REQUEST3:
|
||||
break;
|
||||
case TX_DATA_MODE_SETTING:
|
||||
Tx_rs485_buffer[4] = Test_Mode_Step;
|
||||
switch(Test_Mode_Step)
|
||||
{
|
||||
case 0x01:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[0];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[0];
|
||||
break;
|
||||
case 0x02:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[1];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[1];
|
||||
break;
|
||||
case 0x03:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[2];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[2];
|
||||
break;
|
||||
case 0x04:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[3];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[3];
|
||||
break;
|
||||
case 0x05:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[4];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[4];
|
||||
break;
|
||||
case 0x06:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[0];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[0];
|
||||
break;
|
||||
case 0x07:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[1];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[1];
|
||||
break;
|
||||
case 0x08:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[2];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[2];
|
||||
break;
|
||||
case 0x09:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[3];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[3];
|
||||
break;
|
||||
case 0x0A:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[4];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[4];
|
||||
break;
|
||||
case 0x0B:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[0];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[0];
|
||||
break;
|
||||
case 0x0C:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[1];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[1];
|
||||
break;
|
||||
case 0x0D:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[2];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[2];
|
||||
break;
|
||||
case 0x0E:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[3];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[3];
|
||||
break;
|
||||
case 0x0F:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[4];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[4];
|
||||
break;
|
||||
case 0x10:
|
||||
Tx_rs485_buffer[5] = Main_Modbus_ID;
|
||||
Tx_rs485_buffer[6] = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
cksum = CRC16(Tx_rs485_buffer, 19) ;
|
||||
|
||||
Tx_rs485_buffer[19] = (uint8_t)(cksum>>8) ;
|
||||
Tx_rs485_buffer[20] = (uint8_t)cksum & 0x00FF ;
|
||||
|
||||
delay_ms(1);
|
||||
|
||||
PB6 = 1; // DIR
|
||||
UART_Write(UART1, Tx_rs485_buffer, 21);
|
||||
while ( !(UART1->FSR & UART_FSR_TX_EMPTY_F_Msk) );
|
||||
while ( !(UART1->FSR & UART_FSR_TE_F_Msk) );
|
||||
PB6 = 0; // DIR
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void UART1_HANDLE() // modbus
|
||||
{
|
||||
uint8_t u8InChar=0xFF;
|
||||
uint32_t u32IntSts= UART1->ISR;
|
||||
|
||||
if(u32IntSts & UART_ISR_RDA_IS_Msk)
|
||||
{
|
||||
u8InChar = UART_READ(UART1); /* Rx trigger level is 1 byte*/
|
||||
|
||||
Rx_rs485_Check(u8InChar);
|
||||
Rx_rs485_TimeOut = 5;
|
||||
}
|
||||
|
||||
if(u32IntSts & UART_ISR_THRE_IS_Msk)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UART1_IRQHandler(void) // modbus
|
||||
{
|
||||
UART1_HANDLE();
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
uint16_t CO2_Value = 0;
|
||||
uint16_t Pm_1_0_value = 0;
|
||||
uint16_t Pm_2_5_value = 0;
|
||||
uint16_t Pm_10_value = 0;
|
||||
signed int temperature_val = 0, humidity_val = 0;
|
||||
signed int tvoc_val = 0;
|
||||
uint8_t Sensor_BxD_Version = 0;
|
||||
extern uint8_t IR_Event_Code;
|
||||
extern volatile uint8_t IR_Event_Flag;
|
||||
void Rx_Sensor_Parsing(void)
|
||||
{
|
||||
uint16_t iTmp, cksum;
|
||||
uint8_t Sensor_id = 0;
|
||||
|
||||
uint16_t temp_pm10 = 0;
|
||||
uint16_t temp_pm2_5 = 0;
|
||||
uint16_t temp_pm1_0 = 0;
|
||||
uint16_t temp_co2 = 0;
|
||||
uint16_t temp_humi = 0;
|
||||
uint16_t temp_temp = 0; // signed
|
||||
uint16_t temp_voc = 0;
|
||||
|
||||
iTmp = (uint16_t)Rx_rs485_buffer[19]<<8;
|
||||
cksum = iTmp + (uint16_t)Rx_rs485_buffer[20] ;
|
||||
if(cksum != CRC16(Rx_rs485_buffer, 19))return;
|
||||
|
||||
|
||||
temp_pm10 = (uint16_t)Rx_rs485_buffer[3]<<8;
|
||||
temp_pm10 += (uint16_t)Rx_rs485_buffer[4];
|
||||
|
||||
temp_pm2_5 = (uint16_t)Rx_rs485_buffer[5]<<8;
|
||||
temp_pm2_5 += (uint16_t)Rx_rs485_buffer[6];
|
||||
|
||||
temp_pm1_0 = (uint16_t)Rx_rs485_buffer[7]<<8;
|
||||
temp_pm1_0 += (uint16_t)Rx_rs485_buffer[8];
|
||||
|
||||
temp_co2 = (uint16_t)Rx_rs485_buffer[9]<<8;
|
||||
temp_co2 += (uint16_t)Rx_rs485_buffer[10];
|
||||
|
||||
temp_humi = (uint16_t)Rx_rs485_buffer[11]<<8;
|
||||
temp_humi += (uint16_t)Rx_rs485_buffer[12];
|
||||
|
||||
temp_temp = (uint16_t)Rx_rs485_buffer[13]<<8;
|
||||
temp_temp += (uint16_t)Rx_rs485_buffer[14];
|
||||
|
||||
temp_voc = (uint16_t)Rx_rs485_buffer[15]<<8;
|
||||
temp_voc += (uint16_t)Rx_rs485_buffer[16];
|
||||
|
||||
IR_Event_Code = Rx_rs485_buffer[18];
|
||||
if(IR_Event_Code)IR_Event_Flag = 1;
|
||||
|
||||
Pm_10_value = temp_pm10;
|
||||
Pm_2_5_value = temp_pm2_5;
|
||||
Pm_1_0_value = temp_pm1_0;
|
||||
CO2_Value = temp_co2;
|
||||
|
||||
if(temp_temp & 0x8000)
|
||||
{
|
||||
temp_temp &= ~0x8000;
|
||||
temperature_val = (signed int)temp_temp * -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
temperature_val = (signed int)temp_temp;
|
||||
}
|
||||
humidity_val = (signed int)temp_humi;
|
||||
tvoc_val = (signed int)temp_voc;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void UART0_HANDLE() // co2
|
||||
{
|
||||
uint8_t u8InChar=0xFF;
|
||||
uint32_t u32IntSts= UART0->ISR;
|
||||
|
||||
if(u32IntSts & UART_ISR_RDA_IS_Msk)
|
||||
{
|
||||
u8InChar = UART_READ(UART0); /* Rx trigger level is 1 byte*/
|
||||
|
||||
}
|
||||
|
||||
if(u32IntSts & UART_ISR_THRE_IS_Msk)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
void UART0_IRQHandler(void) // co2
|
||||
{
|
||||
UART0_HANDLE();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
void Tx_modbus_process(void)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
for(i=0; i<7; i++)
|
||||
{
|
||||
//UART_WRITE(UART1, Tx_modbus_Buff[i]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
|
||||
extern volatile uint8_t Rx_wifi_TimeOut;
|
||||
|
||||
volatile uint8_t Rx_wifi_complete = 0;
|
||||
|
||||
uint8_t Rx_wifi_buffer[40];
|
||||
uint8_t Tx_wifi_buffer[40];
|
||||
|
||||
|
||||
uint8_t Rx_wifi_Pos = 0;
|
||||
|
||||
void Rx_wifi_Check(uint8_t data)
|
||||
{
|
||||
if(Rx_wifi_TimeOut == 0)Rx_wifi_Pos = 0;
|
||||
switch(Rx_wifi_Pos)
|
||||
{
|
||||
case 0:
|
||||
if(data != 0x42){Rx_wifi_Pos = 0;break;}
|
||||
Rx_wifi_buffer[Rx_wifi_Pos++]=data;
|
||||
break;
|
||||
case 31:
|
||||
Rx_wifi_buffer[Rx_wifi_Pos]=data;
|
||||
Rx_wifi_complete = 1;
|
||||
Rx_wifi_Pos = 0;
|
||||
break;
|
||||
default:
|
||||
Rx_wifi_buffer[Rx_wifi_Pos++] = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Tx_wifi_data(uint8_t *buf, uint8_t Len)
|
||||
{
|
||||
SCUART_Write(SC1, buf, Len);
|
||||
}
|
||||
|
||||
void SC1_IRQHandler(void) // wifi
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
data = SCUART_READ(SC1);
|
||||
|
||||
Rx_wifi_Check(data);
|
||||
Rx_wifi_TimeOut = 5;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void Rx_wifi_Parsing(void)
|
||||
{
|
||||
;
|
||||
|
||||
}
|
||||
|
||||
void tx_wifi_data(void)
|
||||
{
|
||||
Tx_wifi_buffer[0] = 0x11;
|
||||
Tx_wifi_buffer[1] = 0x02;
|
||||
Tx_wifi_buffer[2] = 0x0B;
|
||||
Tx_wifi_buffer[3] = 0x07;
|
||||
Tx_wifi_buffer[4] = 0xDB;
|
||||
Tx_wifi_data(Tx_wifi_buffer, 5);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
|
||||
|
||||
|
||||
|
||||
void Display_update(void);
|
||||
void Display_process(void);
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4,uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
void delay_ms(uint32_t ms);
|
||||
void delay_us(uint32_t us);
|
||||
void PowerDownFunction(void);
|
||||
void GPIO_Init(void);
|
||||
void PWM_Init(void);
|
||||
void Timer0_Init(void);
|
||||
void Timer1_Init(void);
|
||||
void Timer2_Init(void);
|
||||
void SYS_Init(void);
|
||||
void UART0_Init(void);
|
||||
void UART1_Init(void);
|
||||
void SC0_Init();
|
||||
void SC1_Init();
|
||||
void ADC_Init(void);
|
||||
|
||||
|
||||
void Processor_Init(void);
|
||||
void Error_process(void);
|
||||
void Test_exit_process(void);
|
||||
void Test_vsp_into_process(void);
|
||||
|
||||
void Touch_process(void);
|
||||
void power_off_process(void);
|
||||
void power_on_process(void);
|
||||
void power_on_process_by_roomcon(void); //iot
|
||||
void power_off_process_by_roomcon(void);
|
||||
|
||||
|
||||
void IR_Remocon_process(void);
|
||||
|
||||
extern uint8_t touch_i2c_read(uint8_t index, uint8_t *value);
|
||||
extern uint8_t touch_i2c_write(uint8_t index, uint8_t d);
|
||||
extern void touch_i2c_init();
|
||||
|
||||
|
||||
extern void Melody_process(void);
|
||||
|
||||
|
||||
|
||||
void Air_Quality_process(void);
|
||||
|
||||
void com_rs485_process(void);
|
||||
void Tx_Main_process(void);
|
||||
|
||||
void Rx_rs485_Check(uint8_t data);
|
||||
|
||||
void Rx_Main_Parsing(void);
|
||||
void Rx_Sensor_Parsing(void);
|
||||
|
||||
|
||||
void Rx_wifi_Check(uint8_t data);
|
||||
void Rx_wifi_Parsing(void);
|
||||
|
||||
uint8_t CheckSum_Creator(uint8_t *buf, uint8_t len);
|
||||
|
||||
#define TX_EVENT 0x10
|
||||
|
||||
#define MELODY_OFF 0
|
||||
#define MELODY_POWER_ON 1
|
||||
#define MELODY_POWER_OFF 2
|
||||
#define MELODY_TOUCH 3
|
||||
#define MELODY_NG 4
|
||||
|
||||
|
||||
#define MODE_OFF 0
|
||||
#define MODE_VENT 1
|
||||
#define MODE_AUTO 2
|
||||
#define MODE_AIR_CLEAN 3
|
||||
#define MODE_BYPASS 4
|
||||
|
||||
|
||||
#define ERROR_SA 0x0040
|
||||
#define ERROR_EA 0x0080
|
||||
#define ERROR_FILTER_CLEAN 0x0001 // FILTER & SOJA
|
||||
#define ERROR_FILTER_CHANGE 0x0002
|
||||
#define ERROR_SOJA_CHANGE 0x0004
|
||||
#define ERROR_IN_COM 0x0010
|
||||
#define ERROR_OUT_COM 0x0020
|
||||
#define ERROR_TEMP 0x0800
|
||||
#define ERROR_HUMI 0x1000
|
||||
#define ERROR_TVOC 0x2000
|
||||
#define ERROR_DUST 0x4000
|
||||
#define ERROR_CO2 0x8000
|
||||
|
||||
|
||||
|
||||
#define EVENT_POWER 0x01
|
||||
#define EVENT_MODE 0x02
|
||||
#define EVENT_WIND 0x04
|
||||
#define EVENT_TIME 0x08
|
||||
|
||||
#define TX_DATA_MODE_NORMAL 0x00
|
||||
#define TX_DATA_MODE_REQUEST1 0x01
|
||||
#define TX_DATA_MODE_REQUEST2 0x02
|
||||
#define TX_DATA_MODE_REQUEST3 0x03
|
||||
#define TX_DATA_MODE_SETTING 0x10
|
||||
|
||||
|
||||
#define ROOMCON_VERSION 0x01
|
||||
#define CO2_VERSION 0x01
|
||||
|
||||
|
||||
#define EEP_ADDR_START 0x01
|
||||
#define EEP_ADDR_MODBUS_ID 0x05
|
||||
|
||||
|
||||
// S1000
|
||||
#define WIND_CMH_0 0
|
||||
#define WIND_CMH_1 400
|
||||
#define WIND_CMH_2 750
|
||||
#define WIND_CMH_3 1000
|
||||
|
||||
|
||||
|
||||
#define ROOMCON_FW_VERSION 22
|
||||
extern uint8_t Main_BxD_FW_Version[3];
|
||||
extern uint8_t Sensor_BxD_Version;
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
|
||||
|
||||
|
||||
|
||||
void Display_update(void);
|
||||
void Display_process(void);
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4,uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
void delay_ms(uint32_t ms);
|
||||
void delay_us(uint32_t us);
|
||||
void PowerDownFunction(void);
|
||||
void GPIO_Init(void);
|
||||
void PWM_Init(void);
|
||||
void Timer0_Init(void);
|
||||
void Timer1_Init(void);
|
||||
void Timer2_Init(void);
|
||||
void SYS_Init(void);
|
||||
void UART0_Init(void);
|
||||
void UART1_Init(void);
|
||||
void SC0_Init();
|
||||
void SC1_Init();
|
||||
void ADC_Init(void);
|
||||
|
||||
|
||||
void Processor_Init(void);
|
||||
void Error_process(void);
|
||||
|
||||
|
||||
#define ST_LED PA11
|
||||
#define IN485_DIR PB6
|
||||
|
||||
#define FND_POWER PA1
|
||||
|
||||
#define FND_VERSION 1
|
||||
|
||||
|
||||
extern uint16_t SEN66_pm10p0;
|
||||
extern uint16_t SEN66_pm4p0;
|
||||
extern uint16_t SEN66_pm2p5;
|
||||
extern uint16_t SEN66_pm1p0;
|
||||
extern uint16_t SEN66_humidity_value;
|
||||
extern uint16_t SEN66_temperature_value;
|
||||
extern uint16_t SEN66_VOC_value;
|
||||
extern uint16_t SEN66_NOx_value;
|
||||
extern uint16_t SEN66_CO2_value;
|
||||
|
||||
|
||||
|
||||
extern volatile uint8_t Run_Timer;
|
||||
extern volatile uint16_t mSec_Timer;
|
||||
extern volatile uint16_t Blink_Timer;
|
||||
extern volatile uint8_t Rx_FND_TimeOut;
|
||||
extern volatile uint16_t FastBlink_Timer;
|
||||
@@ -0,0 +1,749 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "Nano100Series.h"
|
||||
#include "adc.h"
|
||||
#include "gpio.h"
|
||||
#include "pwm.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
#include "sys.h"
|
||||
#include "clk.h"
|
||||
#include "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
|
||||
|
||||
extern uint8_t Melody_Mode;
|
||||
|
||||
extern volatile uint8_t Power_On;
|
||||
extern volatile uint8_t Tx_Run_Mode;
|
||||
extern volatile uint8_t Tx_Fan_Speed;
|
||||
extern volatile uint8_t Tx_Reservation_Hour;
|
||||
|
||||
|
||||
extern uint16_t Main_Err_Code;
|
||||
extern uint8_t Vsp_Mode;
|
||||
|
||||
|
||||
void delay_us(uint32_t us)
|
||||
{
|
||||
CLK_SysTickDelay(us);
|
||||
}
|
||||
|
||||
|
||||
void delay_ms(uint32_t ms)
|
||||
{
|
||||
while(ms--)
|
||||
{
|
||||
delay_us(1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UART0_Init()//co2
|
||||
{
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
/* Init UART */
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
SYS_ResetModule(UART0_RST);
|
||||
UART_Open(UART0, 115200);
|
||||
|
||||
|
||||
UART_EnableInt(UART0, UART_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(UART0_IRQn);
|
||||
}
|
||||
|
||||
|
||||
void UART1_Init()
|
||||
{
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
/* Init UART */
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
SYS_ResetModule(UART1_RST);
|
||||
UART_Open(UART1, 115200);
|
||||
|
||||
UART_EnableInt(UART1, UART_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(UART1_IRQn);
|
||||
}
|
||||
|
||||
void SC0_Init() // to main
|
||||
{
|
||||
SCUART_Open(SC0, 1200);
|
||||
// Enable smartcard receive interrupt
|
||||
SCUART_ENABLE_INT(SC0, SC_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(SC0_IRQn);
|
||||
}
|
||||
|
||||
|
||||
void SC1_Init() // to dust
|
||||
{
|
||||
SCUART_Open(SC1, 9600);
|
||||
// Enable smartcard receive interrupt
|
||||
SCUART_ENABLE_INT(SC1, SC_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(SC1_IRQn);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void PowerDownFunction(void)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define IR_EVENT_POWER 0x01
|
||||
#define IR_EVENT_MODE 0x02
|
||||
#define IR_EVENT_WIND_UP 0x04
|
||||
#define IR_EVENT_WIND_DN 0x05
|
||||
#define IR_EVENT_TIME_1 0x06
|
||||
#define IR_EVENT_TIME_2 0x07
|
||||
#define IR_EVENT_TIME_3 0x08
|
||||
#define IR_EVENT_FILTER_RESET 0x09
|
||||
|
||||
#define IR_START 13500
|
||||
#define IR_HIGH 2260
|
||||
#define IR_LOW 1180
|
||||
#define IR_STOP 600
|
||||
#define IR_REPEAT 11200
|
||||
|
||||
uint16_t long_timer1 = 0;
|
||||
uint16_t remocon_buff[4];
|
||||
uint8_t remocon_pos = 0;
|
||||
uint8_t remocon_bit_count = 0;
|
||||
|
||||
uint8_t IR_Event_Code = 0;
|
||||
volatile uint8_t IR_Event_Flag = 0;
|
||||
void IR_Receive(void)
|
||||
{
|
||||
uint16_t tmp = 0;
|
||||
|
||||
long_timer1 = TIMER2->DR/12;
|
||||
TIMER2->CTL |= TIMER_CTL_SW_RST_Msk;
|
||||
TIMER_Start(TIMER2);
|
||||
|
||||
if((long_timer1 > IR_START-300)&&(long_timer1 < IR_START+300))
|
||||
{
|
||||
remocon_buff[0] = 0;
|
||||
remocon_buff[1] = 0;
|
||||
remocon_bit_count = 0;
|
||||
remocon_pos = 0;
|
||||
}
|
||||
else if((long_timer1 > IR_REPEAT-300)&&(long_timer1 < IR_REPEAT+300))
|
||||
{
|
||||
remocon_buff[0] = 0;
|
||||
remocon_buff[1] = 0;
|
||||
remocon_bit_count = 0;
|
||||
remocon_pos = 0;
|
||||
}
|
||||
else if((long_timer1 > IR_HIGH-200)&&(long_timer1 < IR_HIGH+200))
|
||||
{
|
||||
remocon_buff[remocon_pos] |= 0x8000;
|
||||
if(remocon_bit_count++ >= 15){remocon_bit_count = 0;remocon_pos=1;}
|
||||
else {remocon_buff[remocon_pos] >>= 1;}
|
||||
}
|
||||
else if((long_timer1 > IR_LOW-200)&&(long_timer1 < IR_LOW+200))
|
||||
{
|
||||
remocon_buff[remocon_pos] &= ~0x8000;
|
||||
if(remocon_bit_count++ >= 15){remocon_bit_count = 0;remocon_pos=1;}
|
||||
else {remocon_buff[remocon_pos] >>= 1;}
|
||||
}
|
||||
|
||||
if((remocon_pos == 1)&&(remocon_bit_count == 15))
|
||||
{
|
||||
if(remocon_buff[0] == 0xA55A)
|
||||
{
|
||||
tmp = remocon_buff[1];
|
||||
/* switch(tmp)
|
||||
{
|
||||
case 0x6E11: // Power
|
||||
IR_Event_Code = IR_EVENT_POWER;
|
||||
break;
|
||||
case 0x6D12: // mode
|
||||
IR_Event_Code = IR_EVENT_MODE;
|
||||
break;
|
||||
case 0x6C13: // up
|
||||
IR_Event_Code = IR_EVENT_WIND_UP;
|
||||
break;
|
||||
case 0x6817: // dn
|
||||
IR_Event_Code = IR_EVENT_WIND_DN;
|
||||
break;
|
||||
case 0x6718: // 1hour
|
||||
IR_Event_Code = IR_EVENT_TIME_1 ;
|
||||
break;
|
||||
case 0x6619: // 2hour
|
||||
IR_Event_Code = IR_EVENT_TIME_2 ;
|
||||
break;
|
||||
case 0x215E: // 3hour
|
||||
IR_Event_Code = IR_EVENT_TIME_3 ;
|
||||
break;
|
||||
case 0x354A: // filter reset
|
||||
IR_Event_Code = IR_EVENT_FILTER_RESET;
|
||||
break;
|
||||
default:
|
||||
IR_Event_Code = 0;
|
||||
break;
|
||||
}
|
||||
if(IR_Event_Code)
|
||||
{
|
||||
IR_Event_Flag = 1;
|
||||
}
|
||||
*/
|
||||
}
|
||||
remocon_buff[0] = 0;
|
||||
remocon_buff[1] = 0;
|
||||
remocon_bit_count = 0;
|
||||
remocon_pos = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
volatile uint8_t Touch_Event = 0;
|
||||
|
||||
void GPABC_IRQHandler(void)
|
||||
{
|
||||
uint32_t reg;
|
||||
|
||||
if(GPIO_GET_INT_FLAG(PB, BIT12))
|
||||
{
|
||||
GPIO_CLR_INT_FLAG(PB, BIT12);
|
||||
CLK->WK_INTSTS = 1; /* clear interrupt status */
|
||||
if(PB12 == 0)Touch_Event = 1;
|
||||
else Touch_Event = 2;
|
||||
}
|
||||
else if(GPIO_GET_INT_FLAG(PB, BIT14))
|
||||
{
|
||||
GPIO_CLR_INT_FLAG(PB, BIT14);
|
||||
CLK->WK_INTSTS = 1; /* clear interrupt status */
|
||||
IR_Receive();
|
||||
}
|
||||
else
|
||||
{
|
||||
reg = PA->ISRC; PA->ISRC = reg;
|
||||
reg = PB->ISRC; PB->ISRC = reg;
|
||||
reg = PC->ISRC; PC->ISRC = reg;
|
||||
}
|
||||
}
|
||||
|
||||
volatile uint8_t Run_Timer = 0;
|
||||
volatile uint16_t mSec_Timer = 0;
|
||||
volatile uint16_t Touch_Event_Timer = 0;
|
||||
volatile uint16_t Blink_Timer = 0;
|
||||
volatile uint8_t Rx_rs485_TimeOut = 0;
|
||||
volatile uint8_t Rx_modbus_TimeOut = 0;
|
||||
volatile uint8_t Rx_wifi_TimeOut = 0;
|
||||
volatile uint16_t FastBlink_Timer = 0;
|
||||
|
||||
void TMR0_IRQHandler(void)
|
||||
{
|
||||
Touch_Event_Timer++;
|
||||
|
||||
if(Run_Timer)Run_Timer--;
|
||||
if(mSec_Timer)mSec_Timer--;
|
||||
if(Blink_Timer)Blink_Timer--;
|
||||
if(FastBlink_Timer)FastBlink_Timer--;
|
||||
if(Rx_rs485_TimeOut)Rx_rs485_TimeOut--;
|
||||
if(Rx_modbus_TimeOut)Rx_modbus_TimeOut--;
|
||||
if(Rx_wifi_TimeOut)Rx_wifi_TimeOut--;
|
||||
|
||||
// clear timer interrupt flag
|
||||
TIMER_ClearIntFlag(TIMER0);
|
||||
}
|
||||
|
||||
// TIMER_ClearWakeupFlag(TIMER0);
|
||||
void Timer0_Init(void)
|
||||
{
|
||||
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000); // 1ms -> HZ
|
||||
|
||||
// Enable timer interrupt
|
||||
TIMER_EnableInt(TIMER0);
|
||||
NVIC_EnableIRQ(TMR0_IRQn);
|
||||
|
||||
|
||||
// Start Timer 0
|
||||
TIMER_Start(TIMER0);
|
||||
}
|
||||
|
||||
|
||||
void TMR1_IRQHandler(void)
|
||||
{
|
||||
Melody_process();
|
||||
|
||||
|
||||
// clear timer interrupt flag
|
||||
TIMER_ClearIntFlag(TIMER1);
|
||||
}
|
||||
|
||||
void Timer1_Init(void)
|
||||
{
|
||||
TIMER_Open(TIMER1, TIMER_PERIODIC_MODE, 100); // 10ms -> HZ
|
||||
|
||||
// Enable timer interrupt
|
||||
TIMER_EnableInt(TIMER1);
|
||||
NVIC_EnableIRQ(TMR1_IRQn);
|
||||
|
||||
|
||||
// Start Timer 0
|
||||
TIMER_Start(TIMER1);
|
||||
}
|
||||
void Timer2_Init(void) ///////////////////////////////////////////////////////////////////
|
||||
{
|
||||
TIMER_Open(TIMER2, TIMER_PERIODIC_MODE, 1); // 1000ms -> HZ
|
||||
|
||||
// Enable timer interrupt
|
||||
TIMER_EnableInt(TIMER2);
|
||||
// NVIC_EnableIRQ(TMR2_IRQn);
|
||||
|
||||
|
||||
// Start Timer 0
|
||||
TIMER_Start(TIMER2);
|
||||
}/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
void PWM_Init(void)
|
||||
{
|
||||
// PWM0 frequency is 300Hz, duty 50%
|
||||
// PWM_ConfigOutputChannel(PWM0, 3, 960, 50); // LCD Backlight
|
||||
PWM_ConfigOutputChannel(PWM1, 0, 100, 0); // buzzer
|
||||
|
||||
// Enable output of all PWM channels
|
||||
// PWM_EnableOutput(PWM0, 1<<3); // ch3
|
||||
PWM_EnableOutput(PWM1, 0x01);
|
||||
|
||||
// Start
|
||||
// PWM_Start(PWM0, 1<<3); // pwm0_ch3
|
||||
PWM_Start(PWM1, 0x01);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
volatile uint32_t ADC3_Value = 0;;
|
||||
void ADC_IRQHandler(void)
|
||||
{
|
||||
uint32_t u32Flag;
|
||||
|
||||
// Get ADC conversion finish interrupt flag
|
||||
u32Flag = ADC_GET_INT_FLAG(ADC, ADC_ADF_INT);
|
||||
|
||||
if(u32Flag & ADC_ADF_INT)
|
||||
{
|
||||
ADC3_Value = ADC_GET_CONVERSION_DATA(ADC, 3);
|
||||
}
|
||||
ADC_CLR_INT_FLAG(ADC, u32Flag);
|
||||
|
||||
}
|
||||
|
||||
void ADC_Init(void)
|
||||
{
|
||||
|
||||
// Enable channel 1
|
||||
ADC_Open(ADC, ADC_INPUT_MODE_SINGLE_END, ADC_OPERATION_MODE_SINGLE, ADC_CH_1_MASK);
|
||||
|
||||
// Set reference voltage to AVDD
|
||||
ADC_SET_REF_VOLTAGE(ADC, ADC_REFSEL_POWER);
|
||||
|
||||
|
||||
// Power on ADC
|
||||
ADC_POWER_ON(ADC);
|
||||
|
||||
// Enable ADC ADC_IF interrupt
|
||||
ADC_EnableInt(ADC, ADC_ADF_INT);
|
||||
NVIC_EnableIRQ(ADC_IRQn);
|
||||
|
||||
|
||||
ADC_START_CONV(ADC);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void GPIO_Init(void)
|
||||
{
|
||||
|
||||
GPIO_SetMode(PA, BIT2|BIT3|BIT4, GPIO_PMD_OUTPUT); // A_2002
|
||||
PA2 = 0;
|
||||
PA3 = 0;
|
||||
PA4 = 0;
|
||||
GPIO_SetMode(PA, BIT13|BIT14|BIT15, GPIO_PMD_OUTPUT); // B_2002
|
||||
PA13 = 0;
|
||||
PA14 = 0;
|
||||
PA15 = 0;
|
||||
GPIO_SetMode(PC, BIT9|BIT10|BIT11, GPIO_PMD_OUTPUT); // C_2002
|
||||
PC9 = 0;
|
||||
PC10 = 0;
|
||||
PC11 = 0;
|
||||
GPIO_SetMode(PD, BIT7|BIT14|BIT15, GPIO_PMD_OUTPUT); // D_2002
|
||||
PD7 = 0;
|
||||
PD14 = 0;
|
||||
PD15 = 0;
|
||||
|
||||
|
||||
GPIO_SetMode(PB, BIT6, GPIO_PMD_OUTPUT); // 485 DIR
|
||||
PB6 = 0;
|
||||
|
||||
|
||||
GPIO_SetMode(PA, BIT10, GPIO_PMD_OPEN_DRAIN); // touch
|
||||
GPIO_SetMode(PA, BIT11, GPIO_PMD_OPEN_DRAIN);
|
||||
|
||||
|
||||
GPIO_SetMode(PB, BIT12, GPIO_PMD_INPUT); // touch int
|
||||
GPIO_ENABLE_PULL_UP(PB, BIT12);
|
||||
GPIO_EnableInt(PB, 12, GPIO_INT_BOTH_EDGE);
|
||||
|
||||
|
||||
GPIO_SetMode(PB, BIT14, GPIO_PMD_INPUT); // ir int
|
||||
GPIO_ENABLE_PULL_UP(PB, BIT14);
|
||||
GPIO_EnableInt(PB, 14, GPIO_INT_FALLING);
|
||||
|
||||
NVIC_EnableIRQ(GPABC_IRQn);
|
||||
|
||||
/* Enable interrupt de-bounce function and select de-bounce sampling cycle time */
|
||||
GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_HCLK, GPIO_DBCLKSEL_1);
|
||||
GPIO_ENABLE_DEBOUNCE(PB, BIT12|BIT14);
|
||||
|
||||
}
|
||||
|
||||
void SYS_Init(void)
|
||||
{
|
||||
/* Unlock protected registers */
|
||||
SYS_UnlockReg();
|
||||
|
||||
/* Enable clock source */
|
||||
CLK_EnableXtalRC(CLK_PWRCTL_LIRC_EN_Msk|CLK_PWRCTL_HIRC_EN_Msk);
|
||||
|
||||
/* Waiting for clock source ready */
|
||||
CLK_WaitClockReady(CLK_CLKSTATUS_LIRC_STB_Msk|CLK_CLKSTATUS_HIRC_STB_Msk);
|
||||
|
||||
/* If the defines do not exist in your project, please refer to the related clk.h in the Header folder appended to the tool package. */
|
||||
/* Set HCLK clock */
|
||||
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_HCLK_CLK_DIVIDER(1));
|
||||
|
||||
/* Enable IP clock */
|
||||
CLK_EnableModuleClock(GPIO_MODULE);
|
||||
CLK_EnableModuleClock(WDT_MODULE);
|
||||
// CLK_EnableModuleClock(I2C0_MODULE);
|
||||
// CLK_EnableModuleClock(I2C1_MODULE);
|
||||
// CLK_EnableModuleClock(PWM0_CH23_MODULE);
|
||||
CLK_EnableModuleClock(PWM1_CH01_MODULE);
|
||||
CLK_EnableModuleClock(ISP_MODULE);
|
||||
CLK_EnableModuleClock(SC0_MODULE);
|
||||
// CLK_EnableModuleClock(SC1_MODULE);
|
||||
CLK_EnableModuleClock(SRAM_MODULE);
|
||||
CLK_EnableModuleClock(TICK_MODULE);
|
||||
CLK_EnableModuleClock(TMR0_MODULE);
|
||||
CLK_EnableModuleClock(TMR1_MODULE);
|
||||
CLK_EnableModuleClock(TMR2_MODULE);
|
||||
// CLK_EnableModuleClock(UART0_MODULE);
|
||||
CLK_EnableModuleClock(UART1_MODULE);
|
||||
CLK_EnableModuleClock(WDT_MODULE);
|
||||
|
||||
/* Set IP clock */
|
||||
|
||||
// CLK_SetModuleClock(PWM0_CH23_MODULE, CLK_CLKSEL1_PWM0_CH23_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(PWM1_CH01_MODULE, CLK_CLKSEL2_PWM1_CH01_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(SC0_MODULE, CLK_CLKSEL2_SC_S_HIRC, CLK_SC0_CLK_DIVIDER(6));
|
||||
// CLK_SetModuleClock(SC1_MODULE, CLK_CLKSEL2_SC_S_HIRC, CLK_SC1_CLK_DIVIDER(1));
|
||||
CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL2_TMR2_S_HIRC, MODULE_NoMsk);
|
||||
// CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_UART_CLK_DIVIDER(1));
|
||||
CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_UART_CLK_DIVIDER(1));
|
||||
CLK_SetModuleClock(WDT_MODULE, 0, 0);
|
||||
|
||||
/* Update System Core Clock */
|
||||
/* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
|
||||
SystemCoreClockUpdate();
|
||||
|
||||
|
||||
|
||||
//If the defines do not exist in your project, please refer to the corresponding sys.h in the Header folder appended to the tool package.
|
||||
SYS->PA_H_MFP = SYS_PA_H_MFP_PA9_MFP_SC0_DAT | SYS_PA_H_MFP_PA8_MFP_SC0_CLK;
|
||||
SYS->PB_H_MFP = SYS_PB_H_MFP_PB11_MFP_PWM1_CH0;
|
||||
SYS->PB_L_MFP = SYS_PB_L_MFP_PB5_MFP_UART1_TX | SYS_PB_L_MFP_PB4_MFP_UART1_RX ;
|
||||
SYS->PC_H_MFP = 0x00000000;
|
||||
SYS->PC_L_MFP = 0x00000000;
|
||||
SYS->PD_H_MFP = 0x00000000;
|
||||
SYS->PD_L_MFP = 0x00000000;
|
||||
SYS->PE_L_MFP = 0x00000000;
|
||||
SYS->PF_L_MFP = SYS_PF_L_MFP_PF1_MFP_ICE_CLK | SYS_PF_L_MFP_PF0_MFP_ICE_DAT;
|
||||
|
||||
|
||||
|
||||
/* Lock protected registers */
|
||||
SYS_LockReg();
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
extern uint8_t Main_Modbus_ID;
|
||||
|
||||
void Processor_Init(void)
|
||||
{
|
||||
// 0 1 2 3 4 5 6 7 8 9 , ' ' , E , A
|
||||
|
||||
uint8_t eep_check[20];
|
||||
uint8_t i;
|
||||
|
||||
Power_On = 0;
|
||||
Tx_Run_Mode = 0;
|
||||
Tx_Fan_Speed = 0;
|
||||
Tx_Reservation_Hour = 0;
|
||||
|
||||
|
||||
Led_OnOff(100,1);//all on
|
||||
Disp_Segdata(0, 8, 8, 8, 8);
|
||||
Disp_Segdata(1, 8, 8, 8, 8);
|
||||
Disp_Segdata(2, 8, 8, 8, 8);
|
||||
for(i=0; i<10; i++)Display_process();
|
||||
|
||||
touch_i2c_init() ;
|
||||
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
delay_ms(2000);
|
||||
|
||||
|
||||
Led_OnOff(100, 0); // all off
|
||||
Disp_Segdata(0, 14, 14, 5, 2); // s2
|
||||
Disp_Segdata(1, 1, 0, 0, 0); // 1000
|
||||
Disp_Segdata(2, 16, 13, ROOMCON_VERSION>>4, ROOMCON_VERSION&0x0F); // R-01
|
||||
for(i=0; i<10; i++)Display_process();
|
||||
|
||||
delay_ms(2000);
|
||||
|
||||
power_off_process();
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
{
|
||||
Read_Data(i, &eep_check[i]);
|
||||
}
|
||||
|
||||
if((eep_check[EEP_ADDR_START] == 0x55)&&(eep_check[EEP_ADDR_START+1] == 0xAA))
|
||||
{
|
||||
// Main_Modbus_ID = eep_check[EEP_ADDR_MODBUS_ID];
|
||||
}
|
||||
else
|
||||
{
|
||||
Main_Modbus_ID = 1;
|
||||
|
||||
Write_Data(EEP_ADDR_START, 0x55);
|
||||
Write_Data(EEP_ADDR_START+1, 0xAA);
|
||||
|
||||
// Write_Data(EEP_ADDR_MODBUS_ID, Main_Modbus_ID);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern uint16_t Pm_1_0_value, Pm_2_5_value, Pm_10_value;
|
||||
extern uint16_t CO2_Value;
|
||||
uint8_t CO2_quality = 0;
|
||||
uint8_t PM2_5_quality = 0;
|
||||
uint8_t PM10_quality = 0;
|
||||
uint8_t temp_fan_speed = 0;
|
||||
uint8_t temp_pm_quality = 0;
|
||||
|
||||
#define CO2_HISTERISE 0
|
||||
#define DUST_HISTERISE 0
|
||||
|
||||
void Air_Quality_process(void)
|
||||
{
|
||||
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(CO2_Value <= 500-CO2_HISTERISE) CO2_quality = 0;
|
||||
else if((CO2_Value > 500+CO2_HISTERISE)&&(CO2_Value <= 1000-CO2_HISTERISE)) CO2_quality = 0x01;
|
||||
else if((CO2_Value > 1000+CO2_HISTERISE)&&(CO2_Value <= 1500-CO2_HISTERISE)) CO2_quality = 0x02;
|
||||
else if(CO2_Value > 1500+CO2_HISTERISE)CO2_quality = 0x04;
|
||||
|
||||
//2020.5.26 PM2.5 기준변경
|
||||
if(Pm_2_5_value <= 15-DUST_HISTERISE) PM2_5_quality = 0;
|
||||
else if((Pm_2_5_value > 15+DUST_HISTERISE)&&(Pm_2_5_value <= 35-DUST_HISTERISE)) PM2_5_quality = 0x01;
|
||||
else if((Pm_2_5_value > 35+DUST_HISTERISE)&&(Pm_2_5_value <= 75-DUST_HISTERISE)) PM2_5_quality = 0x02;
|
||||
else if(Pm_2_5_value > 75+DUST_HISTERISE)PM2_5_quality = 0x04;
|
||||
|
||||
if(Pm_10_value <= 30-DUST_HISTERISE) PM10_quality = 0;
|
||||
else if((Pm_10_value > 30+DUST_HISTERISE)&&(Pm_10_value <= 80-DUST_HISTERISE)) PM10_quality = 0x01;
|
||||
else if((Pm_10_value > 80+DUST_HISTERISE)&&(Pm_10_value <= 150-DUST_HISTERISE)) PM10_quality = 0x02;
|
||||
else if(Pm_10_value > 150+DUST_HISTERISE)PM10_quality = 0x04;
|
||||
|
||||
|
||||
temp_pm_quality = PM2_5_quality | PM10_quality;
|
||||
|
||||
|
||||
if(Tx_Run_Mode == MODE_AUTO)
|
||||
{
|
||||
if(CO2_quality == 0)
|
||||
{
|
||||
if(temp_pm_quality < 1)temp_fan_speed = 0;
|
||||
else if(temp_pm_quality < 2)temp_fan_speed = 2;
|
||||
else if(temp_pm_quality < 4)temp_fan_speed = 3;
|
||||
else temp_fan_speed = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(CO2_quality == 0x01)
|
||||
{
|
||||
if(temp_pm_quality < 2)temp_fan_speed = 2;
|
||||
else if(temp_pm_quality < 4)temp_fan_speed = 3;
|
||||
else temp_fan_speed = 4;
|
||||
}
|
||||
else if(CO2_quality == 0x02)
|
||||
{
|
||||
if(temp_pm_quality < 4)temp_fan_speed = 3;
|
||||
else temp_fan_speed = 4;
|
||||
}
|
||||
else if(CO2_quality == 0x04)
|
||||
{
|
||||
temp_fan_speed = 4;
|
||||
}
|
||||
}
|
||||
|
||||
Tx_Fan_Speed = temp_fan_speed;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
extern uint8_t Blinking_Count, Blink_Toggle;
|
||||
|
||||
extern volatile uint8_t Filter_Reset_Flag;
|
||||
extern volatile uint8_t Tx_Mode_Event , Tx_Fan_Event , Tx_Reserve_Event ;
|
||||
volatile uint16_t Fan_Setting_Timer = 0;
|
||||
|
||||
void IR_Remocon_process(void)
|
||||
{
|
||||
switch(IR_Event_Code)
|
||||
{
|
||||
case IR_EVENT_POWER:
|
||||
if(Power_On == 0)power_on_process();
|
||||
else power_off_process();
|
||||
break;
|
||||
case IR_EVENT_WIND_UP:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if((Tx_Run_Mode == MODE_AUTO)||(Tx_Run_Mode == MODE_BYPASS))
|
||||
{
|
||||
Melody_Mode = MELODY_NG;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Tx_Fan_Speed<5)Tx_Fan_Speed++;
|
||||
|
||||
Tx_Fan_Event = TX_EVENT;
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_WIND_DN:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if((Tx_Run_Mode == MODE_AUTO)||(Tx_Run_Mode == MODE_BYPASS))
|
||||
{
|
||||
Melody_Mode = MELODY_NG;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Tx_Fan_Speed > 1)Tx_Fan_Speed--;
|
||||
|
||||
Tx_Fan_Event = TX_EVENT;
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_TIME_1:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Reservation_Hour == 1)Tx_Reservation_Hour = 0;
|
||||
else Tx_Reservation_Hour = 1;
|
||||
|
||||
if(Blinking_Count == 0)
|
||||
{
|
||||
Blink_Timer = 0;
|
||||
Blink_Toggle = 0;
|
||||
}
|
||||
Blinking_Count = 3;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_TIME_2:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Reservation_Hour == 4)Tx_Reservation_Hour = 0;
|
||||
else Tx_Reservation_Hour = 4;
|
||||
|
||||
if(Blinking_Count == 0)
|
||||
{
|
||||
Blink_Timer = 0;
|
||||
Blink_Toggle = 0;
|
||||
}
|
||||
Blinking_Count = 3;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
}
|
||||
|
||||
break;
|
||||
case IR_EVENT_TIME_3:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Reservation_Hour == 8)Tx_Reservation_Hour = 0;
|
||||
else Tx_Reservation_Hour = 8;
|
||||
|
||||
if(Blinking_Count == 0)
|
||||
{
|
||||
Blink_Timer = 0;
|
||||
Blink_Toggle = 0;
|
||||
}
|
||||
Blinking_Count = 3;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
}
|
||||
|
||||
break;
|
||||
case IR_EVENT_MODE:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Run_Mode == MODE_VENT)Tx_Run_Mode = MODE_AUTO;
|
||||
else if(Tx_Run_Mode == MODE_AUTO)Tx_Run_Mode = MODE_VENT;
|
||||
|
||||
|
||||
Tx_Reservation_Hour = 0;
|
||||
Tx_Fan_Speed = 3;
|
||||
|
||||
Tx_Mode_Event = TX_EVENT;
|
||||
Tx_Fan_Event = TX_EVENT;
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_FILTER_RESET:
|
||||
Filter_Reset_Flag = 1;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(IR_Event_Code)IR_Event_Code = 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
/**************************************************************************//**
|
||||
* @file main.c
|
||||
* @version V1.00
|
||||
* $Revision: 4 $
|
||||
* $Date: 14/09/11 5:23p $
|
||||
* @brief Show how to pixel on and off on LCD panel.
|
||||
*
|
||||
* @note
|
||||
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
|
||||
*****************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "Nano100Series.h"
|
||||
#include "adc.h"
|
||||
#include "gpio.h"
|
||||
#include "pwm.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
#include "sys.h"
|
||||
#include "clk.h"
|
||||
#include "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
#define __wdt_setting() SYS_UnlockReg(); WDT_Open(WDT_TIMEOUT_2POW14, 0, TRUE, FALSE); SYS_LockReg();
|
||||
#define __wdt_reset() SYS_UnlockReg(); WDT_RESET_COUNTER(); SYS_LockReg();
|
||||
|
||||
extern volatile uint8_t Run_Timer;
|
||||
extern volatile uint16_t mSec_Timer;
|
||||
extern volatile uint16_t Blink_Timer;
|
||||
extern volatile uint8_t Tx_Reservation_Hour, Rx_Reservation_Hour;
|
||||
extern volatile uint8_t Reservation_Min;
|
||||
|
||||
extern volatile uint8_t Rx_Main_complete;
|
||||
extern volatile uint8_t Tx_Data_Mode;
|
||||
extern volatile uint8_t Tx_Main_Event_Flag;
|
||||
|
||||
extern uint16_t Main_Err_Code;
|
||||
|
||||
uint8_t Sec_Timer = 0;
|
||||
uint8_t Blink_Toggle = 0;
|
||||
uint8_t Blinking_Count = 0;
|
||||
uint8_t In_Com_Error_Count = 0;
|
||||
uint8_t Out_Com_Error_Count = 0;
|
||||
uint8_t Sensor_Error_Count = 0;
|
||||
|
||||
extern volatile uint8_t IR_Event_Flag;
|
||||
extern volatile uint8_t Rx_wifi_complete;
|
||||
extern volatile uint16_t FastBlink_Timer;
|
||||
uint8_t FastBlink_Toggle;
|
||||
uint32_t Reset_src_value = 0;
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
__disable_interrupt();
|
||||
SYS_Init();
|
||||
|
||||
SYS_EnableBOD(SYS_BODCTL_BOD25_RST_EN_Msk, SYS_BODCTL_BOD25_EN_Msk);
|
||||
|
||||
// ADC_Init();
|
||||
|
||||
GPIO_Init();
|
||||
PWM_Init();
|
||||
Timer0_Init();
|
||||
Timer1_Init();
|
||||
Timer2_Init();
|
||||
|
||||
// UART0_Init(); //
|
||||
UART1_Init(); // to rs485 - internal
|
||||
SC0_Init(); // to external
|
||||
//SC1_Init(); // to wifi
|
||||
|
||||
Init_EEPROM(eep_data_size, eep_page_amount);
|
||||
Search_Valid_Page();
|
||||
|
||||
__enable_interrupt();
|
||||
|
||||
Reset_src_value = SYS_GetResetSrc();
|
||||
if((Reset_src_value & 0x00000037) != 0x00000004) // WDT reset
|
||||
{
|
||||
Processor_Init();
|
||||
}
|
||||
SYS_ClearResetSrc(Reset_src_value);
|
||||
|
||||
__wdt_setting();
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_REQUEST1;
|
||||
|
||||
while(1)
|
||||
{
|
||||
Touch_process();
|
||||
com_rs485_process();
|
||||
|
||||
if(IR_Event_Flag == 1)
|
||||
{
|
||||
IR_Event_Flag = 0;
|
||||
IR_Remocon_process();
|
||||
}
|
||||
|
||||
|
||||
if(Run_Timer == 0)
|
||||
{
|
||||
Run_Timer = 25;
|
||||
Display_update();
|
||||
Display_process();
|
||||
}
|
||||
|
||||
|
||||
if(mSec_Timer == 0)
|
||||
{
|
||||
mSec_Timer = 999;
|
||||
|
||||
if(In_Com_Error_Count++ >= 10){In_Com_Error_Count = 10;Main_Err_Code |= ERROR_IN_COM;}
|
||||
if(Sensor_Error_Count++ >= 10){Sensor_Error_Count = 10;Main_Err_Code |= ERROR_CO2|ERROR_DUST;}
|
||||
|
||||
Air_Quality_process();
|
||||
|
||||
}
|
||||
|
||||
if(FastBlink_Timer == 0)
|
||||
{
|
||||
FastBlink_Timer = 249;
|
||||
FastBlink_Toggle ^= 1;
|
||||
}
|
||||
|
||||
if(Blink_Timer == 0)
|
||||
{
|
||||
Blink_Timer = 499;
|
||||
|
||||
if(Blink_Toggle == 0)
|
||||
{
|
||||
Blink_Toggle = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Blink_Toggle = 0;
|
||||
if(Blinking_Count)
|
||||
{
|
||||
Blinking_Count--;
|
||||
}
|
||||
}
|
||||
__wdt_reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,986 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "Nano100Series.h"
|
||||
#include "adc.h"
|
||||
#include "gpio.h"
|
||||
#include "pwm.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
#include "sys.h"
|
||||
#include "clk.h"
|
||||
#include "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
|
||||
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
|
||||
uint8_t Font_Data[18]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67,\
|
||||
0x80, 0x58, 0x79, 0x40, 0x00, 0x50, 0x77, 0x5E };
|
||||
// . , c , E , - , ' ' , r , A , d
|
||||
uint8_t seg_data[4][14];
|
||||
|
||||
|
||||
|
||||
#define A_DATA PA4
|
||||
#define A_CLK PA3
|
||||
#define A_STB PA2
|
||||
|
||||
#define B_DATA PA13
|
||||
#define B_CLK PA14
|
||||
#define B_STB PA15
|
||||
|
||||
#define C_DATA PC9
|
||||
#define C_CLK PC10
|
||||
#define C_STB PC11
|
||||
|
||||
#define D_DATA PD15
|
||||
#define D_CLK PD14
|
||||
#define D_STB PD7
|
||||
|
||||
|
||||
|
||||
|
||||
void Initial_Signal()
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0001B) -> 5grid 8seg
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==0)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==6)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
// A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<112; i++) //data
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==3 || i==7)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
}
|
||||
|
||||
uint16_t one_sec = 0;
|
||||
extern uint8_t Tmperature_Error;
|
||||
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1)
|
||||
{
|
||||
|
||||
seg_data[Sel][0] = Font_Data[digit4];
|
||||
seg_data[Sel][1] = Font_Data[digit4]>>3;
|
||||
|
||||
seg_data[Sel][2] = Font_Data[digit3];
|
||||
seg_data[Sel][3] = Font_Data[digit3]>>3;
|
||||
|
||||
seg_data[Sel][4] = Font_Data[digit2];
|
||||
seg_data[Sel][5] = Font_Data[digit2]>>3;
|
||||
|
||||
seg_data[Sel][6] = Font_Data[digit1];
|
||||
seg_data[Sel][7] = Font_Data[digit1]>>3;
|
||||
|
||||
}
|
||||
|
||||
enum{
|
||||
K_VENT,
|
||||
K_AUTO,
|
||||
K_AIR,
|
||||
K_WIND1,
|
||||
K_WIND2,
|
||||
K_WIND3,
|
||||
K_WIND4,
|
||||
K_WIND5,
|
||||
K_PM25_1,
|
||||
K_PM25_2,
|
||||
K_PM25_4,
|
||||
K_PM25_3,
|
||||
|
||||
K_PM10_1,
|
||||
K_PM10_2,
|
||||
K_PM10_4,
|
||||
K_PM10_3,
|
||||
|
||||
K_TIME_1,
|
||||
K_TIME_4,
|
||||
K_TIME_8,
|
||||
K_LOCK,
|
||||
|
||||
K_JUMKEOM,
|
||||
K_FILTER_CLEAN,
|
||||
K_FILTER_CHANGE,
|
||||
K_EXTRA1,
|
||||
|
||||
K_CO2_1,
|
||||
K_CO2_2,
|
||||
K_CO2_4,
|
||||
K_CO2_3,
|
||||
|
||||
K_SOJA_CLEAN,
|
||||
K_SOJA_CHANGE,
|
||||
K_IOT,
|
||||
K_EXTRA2,
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff)
|
||||
{
|
||||
if(onoff == 1)
|
||||
{
|
||||
if(kind < 6)
|
||||
{
|
||||
seg_data[3][0] |= 0x01<<kind;
|
||||
}
|
||||
else if(kind < 8)
|
||||
{
|
||||
seg_data[3][1] |= 0x01<<(kind-3);
|
||||
}
|
||||
else if(kind < 14)
|
||||
{
|
||||
seg_data[3][2] |= 0x01<<(kind-8);
|
||||
}
|
||||
else if(kind < 16)
|
||||
{
|
||||
seg_data[3][3] |=0x01<<(kind-8-3);
|
||||
}
|
||||
else if(kind < 22)
|
||||
{
|
||||
seg_data[3][4] |= 0x01<<(kind-16);
|
||||
}
|
||||
else if(kind < 24)
|
||||
{
|
||||
seg_data[3][5] |=0x01<<(kind-16-3);
|
||||
}
|
||||
else if(kind < 30)
|
||||
{
|
||||
seg_data[3][6] |= 0x01<<(kind-24);
|
||||
}
|
||||
else if(kind < 32)
|
||||
{
|
||||
seg_data[3][7] |=0x01<<(kind-24-3);
|
||||
}
|
||||
else // all on
|
||||
{
|
||||
seg_data[3][0] = 0xFF;
|
||||
seg_data[3][1] = 0xFF;
|
||||
seg_data[3][2] = 0xFF;
|
||||
seg_data[3][3] = 0xFF;
|
||||
seg_data[3][4] = 0xFF;
|
||||
seg_data[3][5] = 0xFF;
|
||||
seg_data[3][6] = 0xFF;
|
||||
seg_data[3][7] = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(kind < 6)
|
||||
{
|
||||
seg_data[3][0] &= ~(0x01<<kind);
|
||||
}
|
||||
else if(kind < 8)
|
||||
{
|
||||
seg_data[3][1] &= ~(0x01<<(kind-3));
|
||||
}
|
||||
else if(kind < 14)
|
||||
{
|
||||
seg_data[3][2] &= ~(0x01<<(kind-8));
|
||||
}
|
||||
else if(kind < 16)
|
||||
{
|
||||
seg_data[3][3] &= ~(0x01<<(kind-8-3));
|
||||
}
|
||||
else if(kind < 22)
|
||||
{
|
||||
seg_data[3][4] &= ~(0x01<<kind-16);
|
||||
}
|
||||
else if(kind < 24)
|
||||
{
|
||||
seg_data[3][5] &= ~(0x01<<(kind-16-3));
|
||||
}
|
||||
else if(kind < 30)
|
||||
{
|
||||
seg_data[3][6] &= ~(0x01<<kind-24);
|
||||
}
|
||||
else if(kind < 32)
|
||||
{
|
||||
seg_data[3][7] &= ~(0x01<<(kind-24-3));
|
||||
}
|
||||
else // all off
|
||||
{
|
||||
seg_data[3][0] = 0;
|
||||
seg_data[3][1] = 0;
|
||||
seg_data[3][2] = 0;
|
||||
seg_data[3][3] = 0;
|
||||
seg_data[3][4] = 0;
|
||||
seg_data[3][5] = 0;
|
||||
seg_data[3][6] = 0;
|
||||
seg_data[3][7] = 0;
|
||||
} }
|
||||
}
|
||||
|
||||
void Make_A(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
A_STB = 1;
|
||||
A_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(seg_data[0][i] & Mask)A_DATA = 1;
|
||||
else A_DATA = 0;
|
||||
A_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Make_B(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
B_STB = 1;
|
||||
B_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
B_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
B_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if(seg_data[1][i] & Mask)B_DATA = 1;
|
||||
else B_DATA = 0;
|
||||
B_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
B_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
B_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
void Make_C(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
C_STB = 1;
|
||||
C_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
C_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
C_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if(seg_data[2][i] & Mask)C_DATA = 1;
|
||||
else C_DATA = 0;
|
||||
C_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
C_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
C_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
void Make_D(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
D_STB = 1;
|
||||
D_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if(seg_data[3][i] & Mask)D_DATA = 1;
|
||||
else D_DATA = 0;
|
||||
D_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
D_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
D_STB = 1;
|
||||
}
|
||||
|
||||
extern volatile uint8_t Power_On;
|
||||
extern volatile uint8_t Tx_Run_Mode;
|
||||
extern volatile uint8_t Tx_Fan_Speed;
|
||||
extern volatile uint8_t Tx_Reservation_Hour;
|
||||
|
||||
extern uint16_t Pm_1_0_value, Pm_2_5_value, Pm_10_value;
|
||||
extern uint16_t CO2_Value;
|
||||
extern uint8_t CO2_quality;
|
||||
extern uint8_t PM2_5_quality;
|
||||
extern uint8_t PM10_quality;
|
||||
extern uint8_t Kids_Lock;
|
||||
extern uint16_t Main_Err_Code;
|
||||
extern uint8_t Vsp_Mode;
|
||||
extern uint8_t Test_Mode_Step;
|
||||
extern uint8_t Test_Mode_Sa_Ea_Sel;
|
||||
|
||||
extern uint8_t Main_Modbus_ID;
|
||||
|
||||
extern uint8_t Ventilation_SA[5];
|
||||
extern uint8_t Ventilation_EA[5];
|
||||
extern uint8_t AirClean_SA[5];
|
||||
extern uint8_t AirClean_EA[5];
|
||||
extern uint8_t Bypass_SA[5];
|
||||
extern uint8_t Bypass_EA[5];
|
||||
extern uint16_t SA_rpm, EA_rpm;
|
||||
extern uint8_t Wifi_Status;
|
||||
|
||||
extern uint8_t Blink_Toggle, FastBlink_Toggle;
|
||||
|
||||
void Display_update(void)
|
||||
{
|
||||
uint8_t Num_1000, Num_100, Num_10, Num_1;
|
||||
uint8_t Tmp_Speed = 0;
|
||||
uint16_t Err;
|
||||
|
||||
if(Vsp_Mode == TX_DATA_MODE_SETTING)
|
||||
{
|
||||
Led_OnOff(100, 0); // all off
|
||||
Disp_Segdata(2, 14, 14, 14, 14); // ALL OFF
|
||||
|
||||
if((Test_Mode_Step >= 1)&&(Test_Mode_Step <= 5)) // vent
|
||||
{
|
||||
Led_OnOff(K_VENT, 1);
|
||||
|
||||
Tmp_Speed = Test_Mode_Step-1;
|
||||
|
||||
if(Test_Mode_Sa_Ea_Sel == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 5, 16, 14); // " SA "
|
||||
Num_10 = Ventilation_SA[Tmp_Speed]%100/10;
|
||||
Num_1 = Ventilation_SA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(SA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(SA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(SA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(SA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Disp_Segdata(0, 14, 12, 16, 14); // " EA "
|
||||
Num_10 = Ventilation_EA[Tmp_Speed]%100/10;
|
||||
Num_1 = Ventilation_EA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(EA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(EA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(EA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(EA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
}
|
||||
else if((Test_Mode_Step >= 6)&&(Test_Mode_Step <= 10)) // air
|
||||
{
|
||||
Led_OnOff(K_AIR, 1);
|
||||
|
||||
Tmp_Speed = Test_Mode_Step-6;
|
||||
|
||||
if(Test_Mode_Sa_Ea_Sel == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 5, 16, 14); // " SA "
|
||||
Num_10 = AirClean_SA[Tmp_Speed]%100/10;
|
||||
Num_1 = AirClean_SA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(SA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(SA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(SA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(SA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Disp_Segdata(0, 14, 12, 16, 14); // " EA "
|
||||
Num_10 = AirClean_EA[Tmp_Speed]%100/10;
|
||||
Num_1 = AirClean_EA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(EA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(EA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(EA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(EA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
}
|
||||
switch(Test_Mode_Step)
|
||||
{
|
||||
case 1:
|
||||
case 6:
|
||||
case 11:
|
||||
Led_OnOff(K_WIND1, 1);
|
||||
break;
|
||||
case 2:
|
||||
case 7:
|
||||
case 12:
|
||||
Led_OnOff(K_WIND2, 1);
|
||||
break;
|
||||
case 3:
|
||||
case 8:
|
||||
case 13:
|
||||
Led_OnOff(K_WIND3, 1);
|
||||
break;
|
||||
case 4:
|
||||
case 9:
|
||||
case 14:
|
||||
Led_OnOff(K_WIND4, 1);
|
||||
break;
|
||||
case 5:
|
||||
case 10:
|
||||
case 15:
|
||||
Led_OnOff(K_WIND5, 1);
|
||||
break;
|
||||
case 16:
|
||||
Disp_Segdata(0, 14, 1, 17, 14); // " Id "
|
||||
Num_10 = Main_Modbus_ID%100/10;
|
||||
Num_1 = Main_Modbus_ID%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
break;
|
||||
case 0x11:
|
||||
if(Main_BxD_FW_Version[1] == 'J')Num_1000 = 18; //J
|
||||
else if(Main_BxD_FW_Version[1] == 'I')Num_1000 = 1; //I
|
||||
else Num_1000 = 13; //-
|
||||
|
||||
Num_10 = Main_BxD_FW_Version[2]/10;
|
||||
Num_1 = Main_BxD_FW_Version[2]%10;
|
||||
Disp_Segdata(0, Num_1000, 13, Num_10, Num_1); // " J- " 메인 버전
|
||||
|
||||
|
||||
Num_10 = ROOMCON_FW_VERSION/10;
|
||||
Num_1 = ROOMCON_FW_VERSION%10;
|
||||
Disp_Segdata(1, 1, 13, Num_10, Num_1); // " I- " 룸콘 버전
|
||||
|
||||
|
||||
Num_10 = Sensor_BxD_Version/10;
|
||||
Num_1 = Sensor_BxD_Version%10;
|
||||
Disp_Segdata(2, 5, 13, Num_10, Num_1); // " S- " 센서보드 버전
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
Led_OnOff(100, 0); // all off
|
||||
|
||||
|
||||
if(Wifi_Status == 1) // connect
|
||||
{
|
||||
Led_OnOff(K_IOT, 1);
|
||||
}
|
||||
else if(Wifi_Status == 2) // wait slow
|
||||
{
|
||||
Led_OnOff(K_IOT, Blink_Toggle);
|
||||
}
|
||||
else if(Wifi_Status == 3) // fast
|
||||
{
|
||||
Led_OnOff(K_IOT, FastBlink_Toggle);
|
||||
}
|
||||
else // dis connect
|
||||
{
|
||||
Led_OnOff(K_IOT, 0);
|
||||
}
|
||||
|
||||
|
||||
Err = Main_Err_Code&(ERROR_FILTER_CLEAN|ERROR_FILTER_CHANGE|ERROR_SOJA_CHANGE|ERROR_SA|ERROR_EA|ERROR_TEMP|ERROR_CO2|ERROR_DUST|ERROR_IN_COM);
|
||||
|
||||
if(Err)Led_OnOff(K_JUMKEOM, 1);
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
if(Power_On == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 14, 14, 14); // ALL OFF
|
||||
Disp_Segdata(1, 14, 14, 14, 14); // ALL OFF
|
||||
Disp_Segdata(2, 14, 14, 14, 14); // ALL OFF
|
||||
|
||||
|
||||
if(Main_Err_Code)Led_OnOff(K_JUMKEOM, 1);
|
||||
|
||||
if(Main_Err_Code&ERROR_FILTER_CLEAN)
|
||||
{
|
||||
Led_OnOff(K_FILTER_CLEAN, 1);
|
||||
Led_OnOff(K_SOJA_CLEAN, 1);
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_FILTER_CHANGE)
|
||||
{
|
||||
Led_OnOff(K_FILTER_CHANGE, 1);
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_SOJA_CHANGE)
|
||||
{
|
||||
Led_OnOff(K_SOJA_CHANGE, 1);
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_SA)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 9); // E-09
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_EA)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 1, 0); // E-10
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_TEMP)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 2); // E-02
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_HUMI)
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_TVOC)
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_CO2)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 6); // E-06
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_DUST)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 1, 8); // E-08
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_IN_COM)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 7); // E-07
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Num_1000= Num_100= Num_10= Num_1= 14; // blank
|
||||
if(CO2_Value>=1000)Num_1000 = CO2_Value%10000/1000;
|
||||
if(CO2_Value>=100)Num_100 = CO2_Value%1000/100;
|
||||
if(CO2_Value>=10)Num_10 = CO2_Value%100/10;
|
||||
Num_1 = CO2_Value%10;
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
|
||||
Num_1000= Num_100= Num_10= Num_1= 14; // blank
|
||||
if(Pm_10_value>=1000)Num_1000 = Pm_10_value%10000/1000;
|
||||
if(Pm_10_value>=100)Num_100 = Pm_10_value%1000/100;
|
||||
if(Pm_10_value>=10)Num_10 = Pm_10_value%100/10;
|
||||
Num_1 = Pm_10_value%10;
|
||||
Disp_Segdata(1, Num_1000, Num_100, Num_10, Num_1);
|
||||
|
||||
Num_1000= Num_100= Num_10= Num_1= 14; // blank
|
||||
if(Pm_2_5_value>=1000)Num_1000 = Pm_2_5_value%10000/1000;
|
||||
if(Pm_2_5_value>=100)Num_100 = Pm_2_5_value%1000/100;
|
||||
if(Pm_2_5_value>=10)Num_10 = Pm_2_5_value%100/10;
|
||||
Num_1 = Pm_2_5_value%10;
|
||||
Disp_Segdata(0, Num_1000, Num_100, Num_10, Num_1);
|
||||
|
||||
|
||||
|
||||
switch(CO2_quality)
|
||||
{
|
||||
case 0x00: Led_OnOff(K_CO2_1, 1);break;
|
||||
case 0x01: Led_OnOff(K_CO2_2, 1);break;
|
||||
case 0x02: Led_OnOff(K_CO2_3, 1);break;
|
||||
case 0x04:
|
||||
default:
|
||||
Led_OnOff(K_CO2_3, 1);
|
||||
Led_OnOff(K_CO2_4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(PM2_5_quality)
|
||||
{
|
||||
case 0x00: Led_OnOff(K_PM25_1, 1);break;
|
||||
case 0x01: Led_OnOff(K_PM25_2, 1); break;
|
||||
case 0x02: Led_OnOff(K_PM25_3, 1); break;
|
||||
case 0x04:
|
||||
default:
|
||||
Led_OnOff(K_PM25_3, 1);
|
||||
Led_OnOff(K_PM25_4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(PM10_quality)
|
||||
{
|
||||
case 0:
|
||||
Led_OnOff(K_PM10_1, 1);
|
||||
break;
|
||||
case 0x01:
|
||||
Led_OnOff(K_PM10_2, 1);
|
||||
break;
|
||||
case 0x02:
|
||||
Led_OnOff(K_PM10_3, 1);
|
||||
break;
|
||||
case 0x04:
|
||||
default:
|
||||
Led_OnOff(K_PM10_3, 1);
|
||||
Led_OnOff(K_PM10_4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(Tx_Run_Mode)
|
||||
{
|
||||
case MODE_VENT: Led_OnOff(K_VENT, 1); break;
|
||||
case MODE_AUTO: Led_OnOff(K_AUTO, 1);break;
|
||||
case MODE_AIR_CLEAN: Led_OnOff(K_AIR, 1); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(Tx_Fan_Speed)
|
||||
{
|
||||
case 1: Led_OnOff(K_WIND1, 1);break;
|
||||
case 2: Led_OnOff(K_WIND2, 1);break;
|
||||
case 3: Led_OnOff(K_WIND3, 1);break;
|
||||
case 4: Led_OnOff(K_WIND4, 1);break;
|
||||
case 5: Led_OnOff(K_WIND5, 1);break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(Tx_Reservation_Hour)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
Led_OnOff(K_TIME_1, 1);
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
Led_OnOff(K_TIME_4, 1);
|
||||
break;
|
||||
case 8:
|
||||
Led_OnOff(K_TIME_8, 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Led_OnOff(K_LOCK, Kids_Lock);
|
||||
}
|
||||
|
||||
|
||||
uint8_t Sel_Pos = 0;
|
||||
void Display_process(void)
|
||||
{
|
||||
|
||||
switch(Sel_Pos)
|
||||
{
|
||||
case 0:
|
||||
Make_A();
|
||||
Sel_Pos++;
|
||||
break;
|
||||
case 1:
|
||||
Make_B();
|
||||
Sel_Pos++;
|
||||
break;
|
||||
case 2:
|
||||
Make_C();
|
||||
Sel_Pos++;
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
Make_D();
|
||||
Sel_Pos = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user