fix:修改UDP通讯中,取电变化上报机制

1、问题点:当RCU网络状态异常的情况下,网络还处于协商状态下,还未进入正常通讯环节时,取电变化不会进行判断。这会导致取电变化上报与实际产生取电状态时间点对不上。
2、将BLV_C1F_Module代码上传至Gitea,之前代码修改记录请查看 .\BasicCode\Readme.txt
This commit is contained in:
caocong
2026-01-23 09:23:12 +08:00
commit 95916b9995
622 changed files with 1336094 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@

*.o
*.d
*.crf
*.__i

View File

@@ -0,0 +1,219 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : KEY.c
* Author : WCH
* Version : V1.0
* Date : 2014/05/12
* Description :
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CH57x_common.h"
#include "HAL.h"
/**************************************************************************************************
* GLOBAL VARIABLES
**************************************************************************************************/
uint8 Hal_KeyIntEnable; /* interrupt enable/disable flag */
// Registered keys task ID, initialized to NOT USED.
static uint8 registeredKeysTaskID = TASK_NO_TASK;
static uint8 halKeySavedKeys; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ѯ<EFBFBD>Ƿ<EFBFBD><C7B7>м<EFBFBD>ֵ<EFBFBD>仯 */
static uint8 KeyConfigFlag; /* <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ñ<EFBFBD>־λ */
/**************************************************************************************************
* FUNCTIONS - Local
**************************************************************************************************/
static halKeyCBack_t pHalKeyProcessFunction; /* callback function */
/**************************************************************************************************
* @fn HAL_KeyInit
*
* @brief Initilize Key Service
*
* @param none
*
* @return None
**************************************************************************************************/
void HAL_KeyInit( void )
{
/* Initialize previous key to 0 */
halKeySavedKeys = 0;
/* Initialize callback function */
pHalKeyProcessFunction = NULL;
/* Start with key is not configured */
KeyConfigFlag = FALSE;
KEY1_DIR; //IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
KEY1_PU; //<2F><><EFBFBD><EFBFBD>
HalKeyConfig( HAL_KEY_INTERRUPT_DISABLE, HalKeyCallback );
}
void HAL_KEY_RegisterForKeys( tmosTaskID id )
{
registeredKeysTaskID = id;
}
/**************************************************************************************************
* @fn HalKeyConfig
*
* @brief Configure the Key serivce
*
* @param interruptEnable - TRUE/FALSE, enable/disable interrupt
* cback - pointer to the CallBack function
*
* @return None
**************************************************************************************************/
void HalKeyConfig (uint8 interruptEnable, halKeyCBack_t cback)
{
/* Enable/Disable Interrupt or */
Hal_KeyIntEnable = interruptEnable;
/* Register the callback fucntion */
pHalKeyProcessFunction = cback;
/* Determine if interrupt is enable or not */
if (Hal_KeyIntEnable){
/* Do this only after the hal_key is configured - to work with sleep stuff */
if (KeyConfigFlag == TRUE){
tmos_stop_task( halTaskID, HAL_KEY_EVENT ); /* Cancel polling if active */
}
}
else{ /* Interrupts NOT enabled */
tmos_start_task( halTaskID, HAL_KEY_EVENT, HAL_KEY_POLLING_VALUE); /* Kick off polling <20><>ʼ<EFBFBD><CABC>ѵ*/
}
/* Key now is configured */
KeyConfigFlag = TRUE;
}
/*********************************************************************
* @fn OnBoard_SendKeys
*
* @brief Send "Key Pressed" message to application.
* <09><>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
* @param keys - keys that were pressed
* state - shifted
*
* @return status
*********************************************************************/
uint8 OnBoard_SendKeys( uint8 keys, uint8 state )
{
keyChange_t *msgPtr;
if ( registeredKeysTaskID != TASK_NO_TASK ){
// Send the address to the task
msgPtr = (keyChange_t *)tmos_msg_allocate( sizeof(keyChange_t) );
if ( msgPtr ){
msgPtr->hdr.event = KEY_CHANGE;
msgPtr->state = state;
msgPtr->keys = keys;
tmos_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );
}
return ( SUCCESS );
}
else{
return ( FAILURE );
}
}
/*********************************************************************
* @fn OnBoard_KeyCallback
*
* @brief Callback service for keys
*
* @param keys - keys that were pressed
* state - shifted
*
* @return void
*********************************************************************/
void HalKeyCallback ( uint8 keys, uint8 state )
{
(void)state;
if ( OnBoard_SendKeys( keys, state ) != SUCCESS ){
// Process SW1 here
if ( keys & HAL_KEY_SW_1 ){ // Switch 1
}
// Process SW2 here
if ( keys & HAL_KEY_SW_2 ){ // Switch 2
}
// Process SW3 here
if ( keys & HAL_KEY_SW_3 ){ // Switch 3
}
// Process SW4 here
if ( keys & HAL_KEY_SW_4 ){ // Switch 4
}
}
}
/**************************************************************************************************
* @fn HalKeyRead
*
* @brief Read the current value of a key
*
* @param None
*
* @return keys - current keys status
**************************************************************************************************/
uint8 HalKeyRead ( void )
{
uint8 keys = 0;
if (HAL_PUSH_BUTTON1()){ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
keys |= HAL_KEY_SW_1;
}
if (HAL_PUSH_BUTTON2()){ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
keys |= HAL_KEY_SW_2;
}
if (HAL_PUSH_BUTTON3()){ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
keys |= HAL_KEY_SW_3;
}
if (HAL_PUSH_BUTTON4()){ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
keys |= HAL_KEY_SW_4;
}
return keys;
}
/**************************************************************************************************
* @fn HAL_KeyPoll
*
* @brief Called by hal_driver to poll the keys
*
* @param None
*
* @return None
**************************************************************************************************/
void HAL_KeyPoll (void)
{
uint8 keys = 0;
if( HAL_PUSH_BUTTON1() ){
keys |= HAL_KEY_SW_1;
}
if( HAL_PUSH_BUTTON2() ){
keys |= HAL_KEY_SW_2;
}
if( HAL_PUSH_BUTTON3() ){
keys |= HAL_KEY_SW_3;
}
if( HAL_PUSH_BUTTON4() ){
keys |= HAL_KEY_SW_4;
}
if (!Hal_KeyIntEnable){ /* <20>ж<EFBFBD>δʹ<CEB4><CAB9> */
if(keys == halKeySavedKeys){ /* Exit - since no keys have changed */
return;
}
halKeySavedKeys = keys; /* Store the current keys for comparation next time */
}
/* Invoke Callback if new keys were depressed */
if (keys && (pHalKeyProcessFunction)){
(pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
}
}
/******************************** endfile @ key ******************************/

View File

@@ -0,0 +1,316 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : LED.c
* Author : WCH
* Version : V1.0
* Date : 2014/05/12
* Description :
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CH57x_common.h"
#include "HAL.h"
/* LED control structure */
typedef struct {
uint8 mode; /* Operation mode */
uint8 todo; /* Blink cycles left */
uint8 onPct; /* On cycle percentage */
uint16 time; /* On/off cycle time (msec) */
uint32 next; /* Time for next change */
} HalLedControl_t;
typedef struct
{
HalLedControl_t HalLedControlTable[HAL_LED_DEFAULT_MAX_LEDS];
uint8 sleepActive;
} HalLedStatus_t;
/***************************************************************************************************
* GLOBAL VARIABLES
***************************************************************************************************/
static uint8 HalLedState; // LED state at last set/clr/blink update
static uint8 preBlinkState; // Original State before going to blink mode
// bit 0, 1, 2, 3 represent led 0, 1, 2, 3
static HalLedStatus_t HalLedStatusControl;
/***************************************************************************************************
* LOCAL FUNCTION
***************************************************************************************************/
void HalLedOnOff (uint8 leds, uint8 mode);
/***************************************************************************************************
* FUNCTIONS - API
***************************************************************************************************/
/***************************************************************************************************
* @fn : HAL_LedInit
*
* @brief : Initialize LED Service
*
* @param : None
*
* @return : None
*/
void HAL_LedInit (void)
{
/* Initialize all LEDs to OFF */
LED1_DDR;
HalLedSet(HAL_LED_ALL, HAL_LED_MODE_OFF);
// just test
HalLedBlink( HAL_LED_1, 10, 30 , 4000);
/* Initialize sleepActive to FALSE */
HalLedStatusControl.sleepActive = FALSE;
}
/***************************************************************************************************
* @fn <20><>HalLedSet
*
* @brief <20><>Tun ON/OFF/TOGGLE given LEDs
*
* @param <20><>led - bit mask value of leds to be turned ON/OFF/TOGGLE
* mode - BLINK, FLASH, TOGGLE, ON, OFF
*
* @return <20><>None
*/
uint8 HalLedSet (uint8 leds, uint8 mode)
{
uint8 led;
HalLedControl_t *sts;
switch (mode){
case HAL_LED_MODE_BLINK:
/* Default blink, 1 time, D% duty cycle */
HalLedBlink (leds, 1, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);
break;
case HAL_LED_MODE_FLASH:
/* Default flash, N times, D% duty cycle */
HalLedBlink (leds, HAL_LED_DEFAULT_FLASH_COUNT, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);
break;
case HAL_LED_MODE_ON:
case HAL_LED_MODE_OFF:
case HAL_LED_MODE_TOGGLE:
led = HAL_LED_1;
leds &= HAL_LED_ALL;
sts = HalLedStatusControl.HalLedControlTable;
while (leds){
if (leds & led){
if (mode != HAL_LED_MODE_TOGGLE){
sts->mode = mode; /* ON or OFF */
}
else{
sts->mode ^= HAL_LED_MODE_ON; /* Toggle */
}
HalLedOnOff (led, sts->mode);
leds ^= led;
}
led <<= 1;
sts++;
}
break;
default:
break;
}
return ( NULL );
}
/***************************************************************************************************
* @fn : HalLedBlink
*
* @brief : Blink the leds
*
* @param : leds - bit mask value of leds to be blinked
* numBlinks - number of blinks
* percent - the percentage in each period where the led will be on
* period - length of each cycle in milliseconds
*
* @return : None
*/
void HalLedBlink (uint8 leds, uint8 numBlinks, uint8 percent, uint16 period)
{
uint8 led;
HalLedControl_t *sts;
if (leds && percent && period){
if (percent < 100){
led = HAL_LED_1;
leds &= HAL_LED_ALL;
sts = HalLedStatusControl.HalLedControlTable;
while (leds){
if (leds & led){
/* Store the current state of the led before going to blinking */
preBlinkState |= (led & HalLedState);
sts->mode = HAL_LED_MODE_OFF; /* Stop previous blink */
sts->time = period; /* Time for one on/off cycle */
sts->onPct = percent; /* % of cycle LED is on */
sts->todo = numBlinks; /* Number of blink cycles */
if (!numBlinks) sts->mode |= HAL_LED_MODE_FLASH; /* Continuous */
sts->next = TMOS_GetSystemClock(); /* Start now */
sts->mode |= HAL_LED_MODE_BLINK; /* Enable blinking */
leds ^= led;
}
led <<= 1;
sts++;
}
tmos_start_task( halTaskID, LED_BLINK_EVENT, NULL);
}
else{
HalLedSet (leds, HAL_LED_MODE_ON); /* >= 100%, turn on */
}
}
else{
HalLedSet (leds, HAL_LED_MODE_OFF); /* No on time, turn off */
}
}
/***************************************************************************************************
* @fn : HalLedUpdate
*
* @brief : Update leds to work with blink
*
* @param : none
*
* @return : none
*/
void HalLedUpdate (void)
{
uint8 led,pct,leds;
uint16 next,wait;
uint32 time;
HalLedControl_t *sts;
next = 0;
led = HAL_LED_1;
leds = HAL_LED_ALL;
sts = HalLedStatusControl.HalLedControlTable;
/* Check if sleep is active or not */
if (!HalLedStatusControl.sleepActive){
while (leds){
if (leds & led){
if(sts->mode & HAL_LED_MODE_BLINK){
time = TMOS_GetSystemClock();
if (time >= sts->next){
if (sts->mode & HAL_LED_MODE_ON){
pct = 100 - sts->onPct; /* Percentage of cycle for off */
sts->mode &= ~HAL_LED_MODE_ON; /* Say it's not on */
HalLedOnOff (led, HAL_LED_MODE_OFF); /* Turn it off */
if (!(sts->mode & HAL_LED_MODE_FLASH)){
if( sts->todo != 0xff ) sts->todo--; /* Not continuous, reduce count */
if (!sts->todo){
sts->mode ^= HAL_LED_MODE_BLINK; /* No more blinks */
}
}
}
else{
pct = sts->onPct; /* Percentage of cycle for on */
sts->mode |= HAL_LED_MODE_ON; /* Say it's on */
HalLedOnOff(led, HAL_LED_MODE_ON); /* Turn it on */
}
if (sts->mode & HAL_LED_MODE_BLINK){
wait = (((uint32)pct * (uint32)sts->time) / 100);
sts->next = time + wait;
}
else{
/* no more blink, no more wait */
wait = 0;
/* After blinking, set the LED back to the state before it blinks */
HalLedSet (led, ((preBlinkState & led)!=0)?HAL_LED_MODE_ON:HAL_LED_MODE_OFF);
/* Clear the saved bit */
preBlinkState &= (led ^ 0xFF);
}
}
else{
wait = sts->next - time; /* Time left */
}
if (!next || ( wait && (wait < next) )){
next = wait;
}
}
leds ^= led;
}
led <<= 1;
sts++;
}
if (next){
tmos_start_task( halTaskID, LED_BLINK_EVENT, next); /* Schedule event */
}
}
}
/***************************************************************************************************
* @fn : HalLedOnOff
*
* @brief : Turns specified LED ON or OFF
*
* @param : leds - LED bit mask
* mode - LED_ON,LED_OFF,
*
* @return : none
*/
void HalLedOnOff (uint8 leds, uint8 mode)
{
if (leds & HAL_LED_1){
if (mode == HAL_LED_MODE_ON){
HAL_TURN_ON_LED1();
}
else{
HAL_TURN_OFF_LED1();
}
}
if (leds & HAL_LED_2){
if (mode == HAL_LED_MODE_ON){
HAL_TURN_ON_LED2();
}
else{
HAL_TURN_OFF_LED2();
}
}
if (leds & HAL_LED_3){
if (mode == HAL_LED_MODE_ON){
HAL_TURN_ON_LED3();
}
else{
HAL_TURN_OFF_LED3();
}
}
if (leds & HAL_LED_4){
if (mode == HAL_LED_MODE_ON){
HAL_TURN_ON_LED4();
}
else{
HAL_TURN_OFF_LED4();
}
}
/* Remember current state */
if (mode){
HalLedState |= leds;
}
else{
HalLedState &= (leds ^ 0xFF);
}
}
/***************************************************************************************************
* @fn HalGetLedState
*
* @brief Dim LED2 - Dim (set level) of LED2
*
* @param none
*
* @return led state
***************************************************************************************************/
uint8 HalLedGetState ()
{
return HalLedState;
}
/******************************** endfile @ led ******************************/

View File

@@ -0,0 +1,273 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : MCU.c
* Author : WCH
* Version : V1.1
* Date : 2019/11/05
* Description : Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BLE<4C><45>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CH57x_common.h"
#include "HAL.h"
tmosTaskID halTaskID;
#if BLE_CODE_EN
__align(4) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4]; //<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ջ<EFBFBD><D5BB>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD>
#endif
/*******************************************************************************
* @fn Lib_Calibration_LSI
*
* @brief <20>ڲ<EFBFBD>32kУ׼
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void Lib_Calibration_LSI( void )
{
if( Calibration_LSI() > 2 )
{
Calibration_LSI();
}
}
/*******************************************************************************
* @fn CH57X_BLEInit
*
* @brief BLE <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
#if BLE_CODE_EN
void CH57X_BLEInit( void )
{
uint8 i;
bleConfig_t cfg;
if( tmos_memcmp( VER_LIB,VER_FILE,strlen(VER_FILE)) == FALSE ){
PRINT("head file error...\n");
while(1);
}
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1; //д<><D0B4>0x57
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2; //<2F><>д<EFBFBD><D0B4>0xA8<41><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ16<31><36><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>򿪰<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>밲ȫ<EBB0B2><C8AB><EFBFBD><EFBFBD>ģʽ
R16_CLK_SYS_CFG = RB_CLK_OSC32M_XT|(2<<6)|0x08; // 32M -> Fsys <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳʱ<CDB3>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32M<32><4D>Ϊϵͳ<CFB5><CDB3>Ƶ<EFBFBD><C6B5>
R8_SAFE_ACCESS_SIG = 0; //<2F>˳<EFBFBD><CBB3><EFBFBD>ȫģʽ
// SysTick_Config( SysTick_LOAD_RELOAD_Msk ); //<2F><><EFBFBD>õδ<C3B5><CEB4><EFBFBD>ʱ<EFBFBD><CAB1>
// SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk ; /* disable SysTick IRQ */
tmos_memset(&cfg,0,sizeof(bleConfig_t));
cfg.MEMAddr = (u32)MEM_BUF;
cfg.MEMLen = (u32)BLE_MEMHEAP_SIZE; //<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ջʹ<D5BB>õ<EFBFBD>RAM<41><4D>С<EFBFBD><D0A1><EFBFBD><EFBFBD>С<EFBFBD><D0A1>6K
cfg.BufMaxLen = (u32)BLE_BUFF_MAX_LEN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cfg.BufNumber = (u32)BLE_BUFF_NUM; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD>
cfg.TxNumEvent = (u32)BLE_TX_NUM_EVENT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>ݰ<EFBFBD>
cfg.TxPower = (u32)BLE_TX_POWER; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B9A6>
#if (defined (BLE_SNV)) && (BLE_SNV == TRUE)
cfg.SNVAddr = (u32)BLE_SNV_ADDR;
#endif
#if( CLK_OSC32K )
cfg.SelRTCClock = (u32)CLK_OSC32K;
#endif
cfg.ConnectNumber = (PERIPHERAL_MAX_CONNECTION&3)|(CENTRAL_MAX_CONNECTION<<2); //
cfg.srandCB = SYS_GetSysTickCnt; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵij<D3B5><C4B3><EFBFBD>
#if (defined TEM_SAMPLE) && (TEM_SAMPLE == TRUE)
cfg.tsCB = HAL_GetInterTempValue; // <20><><EFBFBD><EFBFBD><EFBFBD>¶ȱ仯У׼RF<52><46><EFBFBD>ڲ<EFBFBD>RC( <20><><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD>϶<EFBFBD> )
#if( CLK_OSC32K )
cfg.rcCB = Lib_Calibration_LSI; // <20>ڲ<EFBFBD>32Kʱ<4B><CAB1>У׼
#endif
#endif
#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)
cfg.WakeUpTime = WAKE_UP_RTC_MAX_TIME;
cfg.sleepCB = CH57X_LowPower; // <20><><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>
#endif
#if (defined (BLE_MAC)) && (BLE_MAC == TRUE)
for(i=0;i<6;i++) cfg.MacAddr[i] = MACAddr[5-i]; //MAC<41><43>ַ
#endif
if( !cfg.MEMAddr || cfg.MEMLen < 4*1024 )while(1);
#if (defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
if( (u32)MEM_BUF < (u32)0x20003800 ){
PRINT("RAM config error...\n");
PRINT("MEM_BUF<EFBFBD><EFBFBD>%p\n", MEM_BUF);
PRINT("BLE_MEMHEAP_SIZE<EFBFBD><EFBFBD>%d\n", BLE_MEMHEAP_SIZE);
while(1);
}
#endif
i = BLE_LibInit( &cfg );
if(i){
PRINT("LIB init error code: %x ...\n",i);
while(1);
}
}
#endif
/*******************************************************************************
* @fn HAL_ProcessEvent
*
* @brief Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* input parameters
*
* @param task_id.
* @param events.
*
* output parameters
*
* @param events.
*
* @return None.
*/
tmosEvents HAL_ProcessEvent( tmosTaskID task_id, tmosEvents events )
{
uint8 * msgPtr;
if( events & SYS_EVENT_MSG ){ // <20><><EFBFBD><EFBFBD>HAL<41><4C><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tmos_msg_receive<76><65>ȡ<EFBFBD><C8A1>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
msgPtr = tmos_msg_receive(task_id); //receive a msg
if( msgPtr ){
/* De-allocate */
tmos_msg_deallocate( msgPtr ); //delete a msg
}
return events ^ SYS_EVENT_MSG;
}
if ( events & LED_BLINK_EVENT ){
#if (defined HAL_LED) && (HAL_LED == TRUE)
HalLedUpdate( );
#endif // HAL_LED
return events ^ LED_BLINK_EVENT;
}
if( events & HAL_KEY_EVENT ){
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
HAL_KeyPoll(); /* Check for keys */
if (!Hal_KeyIntEnable){
tmos_start_task( halTaskID, HAL_KEY_EVENT, MS1_TO_SYSTEM_TIME(100) );
}
return events ^ HAL_KEY_EVENT;
#endif
}
if( events & HAL_REG_INIT_EVENT ){
#if (defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE) // У׼<D0A3><D7BC><EFBFBD>񣬵<EFBFBD><F1A3ACB5><EFBFBD>У׼<D0A3><D7BC>ʱС<CAB1><D0A1>10ms
BLE_RegInit(); // У׼RF
#if( CLK_OSC32K )
Lib_Calibration_LSI(); // У׼<D0A3>ڲ<EFBFBD>RC
#endif
tmos_start_task( halTaskID , HAL_REG_INIT_EVENT ,MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD) );
return events ^ HAL_REG_INIT_EVENT;
#endif
}
if( events & HAL_TEST_EVENT ){
PRINT("* ");
tmos_start_task( halTaskID , HAL_TEST_EVENT ,MS1_TO_SYSTEM_TIME(10000) );
return events ^ HAL_TEST_EVENT;
}
return 0;
}
/*******************************************************************************
* @fn HAL_Init
*
* @brief Ӳ<><D3B2><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void HAL_Init( )
{
halTaskID = TMOS_ProcessEventRegister( HAL_ProcessEvent ); //ע<><D7A2>һ<EFBFBD><D2BB> TMOS <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
HAL_TimeInit( );
#if (defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
HAL_SleepInit( );
#endif
#if (defined HAL_LED) && (HAL_LED == TRUE)
HAL_LedInit( );
#endif
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
HAL_KeyInit( );
#endif
__enable_irq();
#if (defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE)
tmos_start_task( halTaskID , HAL_REG_INIT_EVENT ,MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD) ); // <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD>񣬵<EFBFBD><F1A3ACB5><EFBFBD>У׼<D0A3><D7BC>ʱС<CAB1><D0A1>10ms
#endif
// tmos_start_task( halTaskID , HAL_TEST_EVENT ,1000 ); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*******************************************************************************
* @fn LLE_IRQHandler
*
* @brief LLE interrupt function
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void LLE_IRQHandler(void)
{
BLE_IRQHandler();
}
/*******************************************************************************
* @fn HAL_GetInterTempValue
*
* @brief None.
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
uint16 HAL_GetInterTempValue( void )
{
uint8 sensor,channel,config;
uint16 adc_data;
sensor = R8_TEM_SENSOR;
channel = R8_ADC_CHANNEL;
config = R8_ADC_CFG;
R8_TEM_SENSOR |= RB_TEM_SEN_PWR_ON;
R8_ADC_CHANNEL = CH_INTE_VTEMP;
R8_ADC_CFG = RB_ADC_POWER_ON|( 2<<4 ) ;
R8_ADC_CONVERT |= RB_ADC_START;
while( R8_ADC_CONVERT & RB_ADC_START );
adc_data = R16_ADC_DATA;
R8_TEM_SENSOR = sensor;
R8_ADC_CHANNEL = channel;
R8_ADC_CFG = config;
return( adc_data );
}
/******************************** endfile @ mcu ******************************/

View File

@@ -0,0 +1,92 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : RTC.c
* Author : WCH
* Version : V1.1
* Date : 2019/11/05
* Description : RTC<54><43><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CH57x_common.h"
#include "HAL.h"
/*********************************************************************
* CONSTANTS
*/
#define RTC_INIT_TIME_HOUR 0
#define RTC_INIT_TIME_MINUTE 0
#define RTC_INIT_TIME_SECEND 0
/***************************************************
* Global variables
*/
u32V RTCTigFlag;
/*******************************************************************************
* Function Name : RTC_SetTignTime
* Description : <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
* Input :
* Output : None
* Return : None
*******************************************************************************/
void RTC_SetTignTime( u32 time )
{
if( time&0xffff ) time += (1<<16);
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R32_RTC_TRIG = time;
RTCTigFlag = 0;
}
/*******************************************************************************
* @fn RTC_IRQHandler
*
* @brief RTC<54>жϴ<D0B6><CFB4><EFBFBD>
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void RTC_IRQHandler( void )
{
R8_RTC_FLAG_CTRL =(RB_RTC_TMR_CLR|RB_RTC_TRIG_CLR);
RTCTigFlag = 1;
}
/*******************************************************************************
* @fn HAL_Time0Init
*
* @brief ϵͳ<CFB5><CDB3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void HAL_TimeInit( void )
{
#if( CLK_OSC32K )
Calibration_LSI();
#else
R8_SAFE_ACCESS_SIG = 0x57;
R8_SAFE_ACCESS_SIG = 0xa8;
R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON; // 4 | 2 | 1
R8_SAFE_ACCESS_SIG = 0;
#endif
RTC_InitTime( RTC_INIT_TIME_HOUR, RTC_INIT_TIME_MINUTE, RTC_INIT_TIME_SECEND ); //RTCʱ<43>ӳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰʱ<C7B0><CAB1>
TMOS_TimerInit( 0 ); //ϵͳʱ<CDB3>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
}
/******************************** endfile @ time ******************************/

View File

@@ -0,0 +1,85 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : SLEEP.c
* Author : WCH
* Version : V1.1
* Date : 2019/11/05
* Description : ˯<><CBAF><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CH57x_common.h"
#include "HAL.h"
/*******************************************************************************
* @fn CH57X_LowPower
*
* @brief <20><><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>
*
* input parameters
*
* @param time-<2D><><EFBFBD>ѵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>㣨RTC<54><43><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
*
* output parameters
*
* @param
*
* @return None.
*/
u32 CH57X_LowPower( u32 time )
{
#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)
u32 tmp,irq_status;
SYS_DisableAllIrq( &irq_status );
tmp = RTC_GetCycle32k();
if( (time < tmp) || ((time - tmp) < 30) ){ // <20><><EFBFBD><EFBFBD>˯<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
SYS_RecoverIrq( irq_status );
return 2;
}
RTC_SetTignTime( time );
SYS_RecoverIrq( irq_status );
#if( DEBUG == Debug_UART1 )
while((R8_UART1_LSR&RB_LSR_TX_ALL_EMP)== 0 ) __nop();// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ϣ<EFBFBD><CFA2>Ҫ<EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
#endif
// LOW POWER-sleepģʽ
if( !RTCTigFlag ){
LowPower_Sleep(RB_PWR_RAM2K|RB_PWR_RAM14K|RB_PWR_EXTEND );
SetSysClock( CLK_SOURCE_HSI_32MHz );
DelayUs(1500);
SetSysClock( CLK_SOURCE_HSE_32MHz );
}
else{
return 3;
}
#endif
return 0;
}
/*******************************************************************************
* @fn HAL_SleepInit
*
* @brief <20><><EFBFBD><EFBFBD>˯<EFBFBD>߻<EFBFBD><DFBB>ѵķ<D1B5>ʽ-RTC<54><43><EFBFBD>ѣ<EFBFBD><D1A3><EFBFBD><EFBFBD><EFBFBD>ģʽ
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param
*
* @return None.
*/
void HAL_SleepInit( void )
{
#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R8_SLP_WAKE_CTRL |= RB_SLP_RTC_WAKE; // RTC<54><43><EFBFBD><EFBFBD>
R8_RTC_MODE_CTRL |= RB_RTC_TRIG_EN; // <20><><EFBFBD><EFBFBD>ģʽ
R8_SAFE_ACCESS_SIG = 0; //
NVIC_EnableIRQ(RTC_IRQn);
#endif
}

View File

@@ -0,0 +1,67 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : HAL.h
* Author : WCH
* Version : V1.0
* Date : 2016/05/05
* Description :
*******************************************************************************/
/******************************************************************************/
#ifndef __HAL_H
#define __HAL_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "RTC.h"
#include "SLEEP.h"
#include "LED.h"
#include "KEY.h"
/* hal task Event */
#define LED_BLINK_EVENT 0x0001
#define HAL_KEY_EVENT 0x0002
#define HAL_REG_INIT_EVENT 0x2000
#define HAL_TEST_EVENT 0x4000
// hal sys_message
#define MESSAGE_UART 0xA0 // UART message
#define UART0_MESSAGE (MESSAGE_UART|0 ) // UART0 message
#define UART1_MESSAGE (MESSAGE_UART|1 ) // UART1 message
#define USB_MESSAGE 0xB0 // USB message
/*********************************************************************
* GLOBAL VARIABLES
*/
extern tmosTaskID halTaskID;
typedef struct tag_uart_package
{
tmos_event_hdr_t hdr;
uint8 *pData;
} uartPacket_t;
/*********************************************************************
* GLOBAL FUNCTIONS
*/
extern void HAL_Init( void );
extern tmosEvents HAL_ProcessEvent( tmosTaskID task_id, tmosEvents events );
extern void CH57X_BLEInit( void );
extern uint16 HAL_GetInterTempValue( void );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,146 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : KEY.h
* Author : WCH
* Version : V1.0
* Date : 2016/04/12
* Description :
*******************************************************************************/
/******************************************************************************/
#ifndef __KEY_H
#define __KEY_H
#ifdef __cplusplus
extern "C"
{
#endif
/**************************************************************************************************
* MACROS
**************************************************************************************************/
#define KEY_CHANGE 0xC0 // Key message
#define HAL_KEY_RISING_EDGE 0
#define HAL_KEY_FALLING_EDGE 1
#define HAL_KEY_DEBOUNCE_VALUE 25
#define HAL_KEY_POLLING_VALUE 100
/* Interrupt option - Enable or disable */
#define HAL_KEY_INTERRUPT_DISABLE 0x00
#define HAL_KEY_INTERRUPT_ENABLE 0x01
/* Key state - shift or nornal */
#define HAL_KEY_STATE_NORMAL 0x00
#define HAL_KEY_STATE_SHIFT 0x01
/* Switches (keys) */
#define HAL_KEY_SW_1 0x01 // key1
#define HAL_KEY_SW_2 0x02 // key2
#define HAL_KEY_SW_3 0x04 // key3
#define HAL_KEY_SW_4 0x08 // key4
#define HAL_KEY_SW_5 0x10 // key5
/* Joystick */
#define HAL_KEY_UP 0x01 // Joystick up
#define HAL_KEY_RIGHT 0x02 // Joystick right
#define HAL_KEY_CENTER 0x04 // Joystick center
#define HAL_KEY_LEFT 0x08 // Joystick left
#define HAL_KEY_DOWN 0x10 // Joystick down
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* 1 - KEY */
#define KEY1_BV BV(22)
#define KEY2_BV
#define KEY3_BV
#define KEY4_BV
#define KEY1_PU (R32_PB_PU |= KEY1_BV)
#define KEY2_PU ()
#define KEY3_PU ()
#define KEY4_PU ()
#define KEY1_DIR (R32_PB_DIR &= ~KEY1_BV)
#define KEY2_PU ()
#define KEY3_PU ()
#define KEY4_PU ()
#define KEY1_IN (ACTIVE_LOW(R32_PB_PIN&KEY1_BV))
#define KEY2_IN ()
#define KEY3_IN ()
#define KEY4_IN ()
#define HAL_PUSH_BUTTON1() ( KEY1_IN ) //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><E5B0B4>
#define HAL_PUSH_BUTTON2() ( 0 )
#define HAL_PUSH_BUTTON3() ( 0 )
#define HAL_PUSH_BUTTON4() ( 0 )
/**************************************************************************************************
* TYPEDEFS
**************************************************************************************************/
typedef void (*halKeyCBack_t) (uint8 keys, uint8 state);
typedef struct
{
tmos_event_hdr_t hdr;
uint8 state; // shift
uint8 keys; // keys
} keyChange_t;
/**************************************************************************************************
* GLOBAL VARIABLES
**************************************************************************************************/
extern uint8 Hal_KeyIntEnable;
/*********************************************************************
* FUNCTIONS
*/
/*
* Initialize the Key Service
*/
void HAL_KeyInit( void );
/*
* This is for internal used by hal_driver
*/
void HAL_KeyPoll( void );
/*
* Register the Key Service
*/
void HAL_KEY_RegisterForKeys( tmosTaskID id );
/*
* Configure the Key Service
*/
void HalKeyConfig( uint8 interruptEnable, const halKeyCBack_t cback);
/*
* Read the Key callback
*/
void HalKeyCallback ( uint8 keys, uint8 state );
/*
* Read the Key status
*/
uint8 HalKeyRead( void);
/**************************************************************************************************
**************************************************************************************************/
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,128 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : LED.h
* Author : WCH
* Version : V1.0
* Date : 2016/04/12
* Description :
*******************************************************************************/
/******************************************************************************/
#ifndef __LED_H
#define __LED_H
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* CONSTANTS
*/
/* LEDS - The LED number is the same as the bit position */
#define HAL_LED_1 0x01
#define HAL_LED_2 0x02
#define HAL_LED_3 0x04
#define HAL_LED_4 0x08
#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4)
/* Modes */
#define HAL_LED_MODE_OFF 0x00
#define HAL_LED_MODE_ON 0x01
#define HAL_LED_MODE_BLINK 0x02
#define HAL_LED_MODE_FLASH 0x04
#define HAL_LED_MODE_TOGGLE 0x08
/* Defaults */
#define HAL_LED_DEFAULT_MAX_LEDS 4
#define HAL_LED_DEFAULT_DUTY_CYCLE 5
#define HAL_LED_DEFAULT_FLASH_COUNT 50
#define HAL_LED_DEFAULT_FLASH_TIME 1000
/*********************************************************************
* TYPEDEFS
*/
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>LED<45><44><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>,<2C>͵<EFBFBD>ƽLED<45><44> */
/* 1 - LED */
#define LED1_BV BV(0)
#define LED2_BV
#define LED3_BV
#define LED1_OUT (R32_PB_OUT)
#define LED2_OUT 0
#define LED3_OUT 0
#define LED4_OUT 0
#define LED1_DDR (R32_PB_DIR|=LED1_BV)
#define LED2_DDR 0
#define LED3_DDR 0
#define HAL_TURN_OFF_LED1() (LED1_OUT |= LED1_BV)
#define HAL_TURN_OFF_LED2()
#define HAL_TURN_OFF_LED3()
#define HAL_TURN_OFF_LED4()
#define HAL_TURN_ON_LED1() (LED1_OUT &= (~LED1_BV))
#define HAL_TURN_ON_LED2()
#define HAL_TURN_ON_LED3()
#define HAL_TURN_ON_LED4()
#define HAL_STATE_LED1() 0
#define HAL_STATE_LED2() 0
#define HAL_STATE_LED3() 0
#define HAL_STATE_LED4() 0
/*********************************************************************
* GLOBAL VARIABLES
*/
/*
* Initialize LED Service.
*/
void HAL_LedInit( void );
/*
* update time LED Service.
*/
void HalLedUpdate (void);
/*
* Set the LED ON/OFF/TOGGLE.
*/
extern uint8 HalLedSet( uint8 led, uint8 mode );
/*
* Blink the LED.
*/
extern void HalLedBlink( uint8 leds, uint8 cnt, uint8 duty, uint16 time );
/*
* Put LEDs in sleep state - store current values
*/
extern void HalLedEnterSleep( void );
/*
* Retore LEDs from sleep state
*/
extern void HalLedExitSleep( void );
/*
* Return LED state
*/
extern uint8 HalLedGetState ( void );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,40 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : RTC.h
* Author : WCH
* Version : V1.0
* Date : 2016/04/12
* Description :
*******************************************************************************/
/******************************************************************************/
#ifndef __RTC_H
#define __RTC_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "config.h"
#define RTC_TIMER_MAX_VALUE 0xa8c00000
extern u32V RTCTigFlag;
/*
* Initialize time Service.
*/
void HAL_TimeInit( void );
/*
* System Clock Service.
*/
extern void RTC_SetTignTime( u32 time );
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,38 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : SLEEP.h
* Author : WCH
* Version : V1.0
* Date : 2018/11/12
* Description :
*******************************************************************************/
/******************************************************************************/
#ifndef __SLEEP_H
#define __SLEEP_H
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* GLOBAL VARIABLES
*/
/*********************************************************************
* FUNCTIONS
*/
extern void HAL_SleepInit( void );
extern u32 CH57X_LowPower( u32 time );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,128 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : CONFIG.h
* Author : WCH
* Version : V1.10
* Date : 2019/11/05
* Description : <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ĵ<DEB8>ǰֵ
*******************************************************************************/
/******************************************************************************/
#ifndef __CONFIG_H
#define __CONFIG_H
#define ID_CH577 0x77
#define ID_CH578 0x78
#define ID_CH579 0x79
#define CHIP_ID ID_CH579
#ifdef CH57xBLE_ROM
#include "CH57xBLE_ROM.H"
#else
#include "CH57xBLE_LIB.H"
#endif
/*********************************************************************
<EFBFBD><EFBFBD>MAC<EFBFBD><EFBFBD>
BLE_MAC - <20>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mac<61><63>ַ ( Ĭ<><C4AC>:FALSE - ʹ<><CAB9>оƬMac<61><63>ַ )<29><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>main.c<>޸<EFBFBD>Mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>SLEEP<EFBFBD><EFBFBD>
HAL_SLEEP - <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD>߹<EFBFBD><DFB9><EFBFBD> ( Ĭ<><C4AC>:FALSE )
WAKE_UP_RTC_MAX_TIME - ˯<>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD>ݲ<EFBFBD>ͬ˯<CDAC><CBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ<C8A1>ɷ<EFBFBD>Ϊ<EFBFBD><CEAA>˯<EFBFBD><CBAF>ģʽ/<2F>µ<EFBFBD>ģʽ - 65(Ĭ<><C4AC>)
<09><>ͣģʽ - 65
<09><><EFBFBD><EFBFBD>ģʽ - 5
<EFBFBD><EFBFBD>TEMPERATION<EFBFBD><EFBFBD>
TEM_SAMPLE - <20>Ƿ<EFBFBD><C7B7>򿪸<EFBFBD><F2BFAAB8><EFBFBD><EFBFBD>¶ȱ仯У׼<D0A3>Ĺ<EFBFBD><C4B9>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>У׼<D0A3><D7BC>ʱС<CAB1><D0A1>10ms( Ĭ<><C4AC>:TRUE )
<EFBFBD><EFBFBD>CALIBRATION<EFBFBD><EFBFBD>
BLE_CALIBRATION_ENABLE - <20>Ƿ<EFBFBD><C7B7>򿪶<EFBFBD>ʱУ׼<D0A3>Ĺ<EFBFBD><C4B9>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>У׼<D0A3><D7BC>ʱС<CAB1><D0A1>10ms( Ĭ<><C4AC>:TRUE )
BLE_CALIBRATION_PERIOD - <20><>ʱУ׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>λms( Ĭ<><C4AC>:120000 )
<EFBFBD><EFBFBD>SNV<EFBFBD><EFBFBD>
BLE_SNV - <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>SNV<4E><56><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ( Ĭ<><C4AC>:TRUE )
BLE_SNV_ADDR - SNV<4E><56>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʹ<EFBFBD><CAB9>data flash<73><68><EFBFBD><EFBFBD>( Ĭ<><C4AC>:0x3EC00 )
<EFBFBD><EFBFBD>RTC<EFBFBD><EFBFBD>
CLK_OSC32K - RTCʱ<43><CAB1>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ⲿ32K( Ĭ<><C4AC>:0 <20>ⲿ(32768Hz)<29><>1<EFBFBD><31><EFBFBD>ڲ<EFBFBD>(32000Hz)<29><>2<EFBFBD><32><EFBFBD>ڲ<EFBFBD>(32768Hz) )
<EFBFBD><EFBFBD>MEMORY<EFBFBD><EFBFBD>
BLE_MEMHEAP_SIZE - <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ջʹ<D5BB>õ<EFBFBD>RAM<41><4D>С<EFBFBD><D0A1><EFBFBD><EFBFBD>С<EFBFBD><D0A1>6K ( Ĭ<><C4AC>:(1024*8) )
<EFBFBD><EFBFBD>DATA<EFBFBD><EFBFBD>
BLE_BUFF_MAX_LEN - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>( Ĭ<><C4AC>:27 (ATT_MTU=23)<29><>ȡֵ<C8A1><D6B5>Χ[27~251] )
BLE_BUFF_NUM - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD>( Ĭ<><C4AC>:5 )
BLE_TX_NUM_EVENT - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>ݰ<EFBFBD>( Ĭ<><C4AC>:1 )
BLE_TX_POWER - <20><><EFBFBD><EFBFBD><E4B9A6>( Ĭ<><C4AC>:LL_TX_POWEER_0_DBM (0dBm) )
<EFBFBD><EFBFBD>MULTICONN<EFBFBD><EFBFBD>
PERIPHERAL_MAX_CONNECTION - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD>ٴӻ<D9B4><D3BB><EFBFBD>ɫ( Ĭ<><C4AC>:1 )
CENTRAL_MAX_CONNECTION - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ( Ĭ<><C4AC>:3 )
**********************************************************************/
/*********************************************************************
* Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
#ifndef BLE_MAC
#define BLE_MAC /*FALSE*/TRUE
#endif
#ifndef HAL_SLEEP
#define HAL_SLEEP FALSE
#endif
#ifndef WAKE_UP_RTC_MAX_TIME
#define WAKE_UP_RTC_MAX_TIME 65
#endif
#ifndef HAL_KEY
#define HAL_KEY FALSE
#endif
#ifndef HAL_LED
#define HAL_LED FALSE
#endif
#ifndef TEM_SAMPLE
#define TEM_SAMPLE TRUE
#endif
#ifndef BLE_CALIBRATION_ENABLE
#define BLE_CALIBRATION_ENABLE TRUE
#endif
#ifndef BLE_CALIBRATION_PERIOD
#define BLE_CALIBRATION_PERIOD 120000
#endif
#ifndef BLE_SNV
#define BLE_SNV TRUE
#endif
#ifndef BLE_SNV_ADDR
#define BLE_SNV_ADDR 0x3EC00
#endif
#ifndef CLK_OSC32K
#define CLK_OSC32K 2 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ģ<DEB8><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ⲿ32K
#endif
#ifndef BLE_MEMHEAP_SIZE
#define BLE_MEMHEAP_SIZE (1024*8)
#endif
#ifndef BLE_BUFF_MAX_LEN
#define BLE_BUFF_MAX_LEN 145
#endif
#ifndef BLE_BUFF_NUM
#define BLE_BUFF_NUM 5
#endif
#ifndef BLE_TX_NUM_EVENT
#define BLE_TX_NUM_EVENT 1
#endif
#ifndef BLE_TX_POWER
#define BLE_TX_POWER LL_TX_POWEER_0_DBM
#endif
#ifndef PERIPHERAL_MAX_CONNECTION
#define PERIPHERAL_MAX_CONNECTION 1
#endif
#ifndef CENTRAL_MAX_CONNECTION
#define CENTRAL_MAX_CONNECTION 3
#endif
#if BLE_CODE_EN
extern u32 MEM_BUF[BLE_MEMHEAP_SIZE/4];
#endif
extern u8 MACAddr[6];
#endif
/******************************* endfile @ config ******************************/

View File

@@ -0,0 +1,631 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : devinfoservice.c
* Author : WCH
* Version : V1.0
* Date : 2018/12/10
* Description : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
*******************************************************************************/
/*********************************************************************
* INCLUDES
*/
#include "CONFIG.h"
#include "devinfoservice.h"
/*********************************************************************
* MACROS
*/
/*********************************************************************
* CONSTANTS
*/
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* GLOBAL VARIABLES
*/
// Device information service
CONST uint8 devInfoServUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(DEVINFO_SERV_UUID), HI_UINT16(DEVINFO_SERV_UUID)
};
// System ID
CONST uint8 devInfoSystemIdUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SYSTEM_ID_UUID), HI_UINT16(SYSTEM_ID_UUID)
};
// Model Number String
CONST uint8 devInfoModelNumberUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(MODEL_NUMBER_UUID), HI_UINT16(MODEL_NUMBER_UUID)
};
// Serial Number String
CONST uint8 devInfoSerialNumberUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SERIAL_NUMBER_UUID), HI_UINT16(SERIAL_NUMBER_UUID)
};
// Firmware Revision String
CONST uint8 devInfoFirmwareRevUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(FIRMWARE_REV_UUID), HI_UINT16(FIRMWARE_REV_UUID)
};
// Hardware Revision String
CONST uint8 devInfoHardwareRevUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(HARDWARE_REV_UUID), HI_UINT16(HARDWARE_REV_UUID)
};
// Software Revision String
CONST uint8 devInfoSoftwareRevUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SOFTWARE_REV_UUID), HI_UINT16(SOFTWARE_REV_UUID)
};
// Manufacturer Name String
CONST uint8 devInfoMfrNameUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(MANUFACTURER_NAME_UUID), HI_UINT16(MANUFACTURER_NAME_UUID)
};
// IEEE 11073-20601 Regulatory Certification Data List
CONST uint8 devInfo11073CertUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(IEEE_11073_CERT_DATA_UUID), HI_UINT16(IEEE_11073_CERT_DATA_UUID)
};
// PnP ID
CONST uint8 devInfoPnpIdUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(PNP_ID_UUID), HI_UINT16(PNP_ID_UUID)
};
/*********************************************************************
* EXTERNAL VARIABLES
*/
/*********************************************************************
* EXTERNAL FUNCTIONS
*/
/*********************************************************************
* LOCAL VARIABLES
*/
/*********************************************************************
* Profile Attributes - variables
*/
// Device Information Service attribute
static CONST gattAttrType_t devInfoService = { ATT_BT_UUID_SIZE, devInfoServUUID };
// System ID characteristic
static uint8 devInfoSystemIdProps = GATT_PROP_READ;
static uint8 devInfoSystemId[DEVINFO_SYSTEM_ID_LEN] = {0, 0, 0, 0, 0, 0, 0, 0};
// Model Number String characteristic
static uint8 devInfoModelNumberProps = GATT_PROP_READ;
static const uint8 devInfoModelNumber[] = "Model Number";
// Serial Number String characteristic
static uint8 devInfoSerialNumberProps = GATT_PROP_READ;
static const uint8 devInfoSerialNumber[] = "Serial Number";
// Firmware Revision String characteristic
static uint8 devInfoFirmwareRevProps = GATT_PROP_READ;
static const uint8 devInfoFirmwareRev[] = "Firmware Revision";
// Hardware Revision String characteristic
static uint8 devInfoHardwareRevProps = GATT_PROP_READ;
static const uint8 devInfoHardwareRev[] = "Hardware Revision";
// Software Revision String characteristic
static uint8 devInfoSoftwareRevProps = GATT_PROP_READ;
static const uint8 devInfoSoftwareRev[] = "Software Revision";
// Manufacturer Name String characteristic
static uint8 devInfoMfrNameProps = GATT_PROP_READ;
static const uint8 devInfoMfrName[] = "Manufacturer Name";
// IEEE 11073-20601 Regulatory Certification Data List characteristic
static uint8 devInfo11073CertProps = GATT_PROP_READ;
static const uint8 devInfo11073Cert[] =
{
DEVINFO_11073_BODY_EXP, // authoritative body type
0x00, // authoritative body structure type
// authoritative body data follows below:
'e', 'x', 'p', 'e', 'r', 'i', 'm', 'e', 'n', 't', 'a', 'l'
};
// System ID characteristic
static uint8 devInfoPnpIdProps = GATT_PROP_READ;
static uint8 devInfoPnpId[DEVINFO_PNP_ID_LEN] =
{
1, // Vendor ID source (1=Bluetooth SIG)
LO_UINT16(0x07D7), HI_UINT16(0x07D7), // Vendor ID (WCH)
LO_UINT16(0x0000), HI_UINT16(0x0000), // Product ID (vendor-specific)
LO_UINT16(0x0110), HI_UINT16(0x0110) // Product version (JJ.M.N)
};
/*********************************************************************
* Profile Attributes - Table
*/
static gattAttribute_t devInfoAttrTbl[] =
{
// Device Information Service
{
{ ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */
GATT_PERMIT_READ, /* permissions */
0, /* handle */
(uint8 *)&devInfoService /* pValue */
},
// System ID Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoSystemIdProps
},
// System ID Value
{
{ ATT_BT_UUID_SIZE, devInfoSystemIdUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoSystemId
},
// Model Number String Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoModelNumberProps
},
// Model Number Value
{
{ ATT_BT_UUID_SIZE, devInfoModelNumberUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoModelNumber
},
// Serial Number String Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoSerialNumberProps
},
// Serial Number Value
{
{ ATT_BT_UUID_SIZE, devInfoSerialNumberUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoSerialNumber
},
// Firmware Revision String Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoFirmwareRevProps
},
// Firmware Revision Value
{
{ ATT_BT_UUID_SIZE, devInfoFirmwareRevUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoFirmwareRev
},
// Hardware Revision String Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoHardwareRevProps
},
// Hardware Revision Value
{
{ ATT_BT_UUID_SIZE, devInfoHardwareRevUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoHardwareRev
},
// Software Revision String Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoSoftwareRevProps
},
// Software Revision Value
{
{ ATT_BT_UUID_SIZE, devInfoSoftwareRevUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoSoftwareRev
},
// Manufacturer Name String Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoMfrNameProps
},
// Manufacturer Name Value
{
{ ATT_BT_UUID_SIZE, devInfoMfrNameUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoMfrName
},
// IEEE 11073-20601 Regulatory Certification Data List Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfo11073CertProps
},
// IEEE 11073-20601 Regulatory Certification Data List Value
{
{ ATT_BT_UUID_SIZE, devInfo11073CertUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfo11073Cert
},
// PnP ID Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&devInfoPnpIdProps
},
// PnP ID Value
{
{ ATT_BT_UUID_SIZE, devInfoPnpIdUUID },
GATT_PERMIT_READ,
0,
(uint8 *) devInfoPnpId
}
};
/*********************************************************************
* LOCAL FUNCTIONS
*/
static bStatus_t devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 *pLen, uint16 offset, uint16 maxLen,uint8 method );
/*********************************************************************
* PROFILE CALLBACKS
*/
// Device Info Service Callbacks
gattServiceCBs_t devInfoCBs =
{
devInfo_ReadAttrCB, // Read callback function pointer
NULL, // Write callback function pointer
NULL // Authorization callback function pointer
};
/*********************************************************************
* NETWORK LAYER CALLBACKS
*/
/*********************************************************************
* PUBLIC FUNCTIONS
*/
/*********************************************************************
* @fn DevInfo_AddService
*
* @brief Initializes the Device Information service by registering
* GATT attributes with the GATT server.
*
* @return Success or Failure
*/
bStatus_t DevInfo_AddService( void )
{
// Register GATT attribute list and CBs with GATT Server App
return GATTServApp_RegisterService( devInfoAttrTbl,
GATT_NUM_ATTRS( devInfoAttrTbl ),
GATT_MAX_ENCRYPT_KEY_SIZE,
&devInfoCBs );
}
/*********************************************************************
* @fn DevInfo_SetParameter
*
* @brief Set a Device Information parameter.
*
* @param param - Profile parameter ID
* @param len - length of data to write
* @param value - pointer to data to write. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*
* @return bStatus_t
*/
bStatus_t DevInfo_SetParameter( uint8 param, uint8 len, void *value )
{
bStatus_t ret = SUCCESS;
switch ( param )
{
case DEVINFO_SYSTEM_ID:
tmos_memcpy(devInfoSystemId, value, len);
break;
default:
ret = INVALIDPARAMETER;
break;
}
return ( ret );
}
/*********************************************************************
* @fn DevInfo_GetParameter
*
* @brief Get a Device Information parameter.
*
* @param param - Profile parameter ID
* @param value - pointer to data to get. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*
* @return bStatus_t
*/
bStatus_t DevInfo_GetParameter( uint8 param, void *value )
{
bStatus_t ret = SUCCESS;
switch ( param )
{
case DEVINFO_SYSTEM_ID:
tmos_memcpy(value, devInfoSystemId, sizeof(devInfoSystemId));
break;
case DEVINFO_MODEL_NUMBER:
tmos_memcpy(value, devInfoModelNumber, sizeof(devInfoModelNumber));
break;
case DEVINFO_SERIAL_NUMBER:
tmos_memcpy(value, devInfoSerialNumber, sizeof(devInfoSerialNumber));
break;
case DEVINFO_FIRMWARE_REV:
tmos_memcpy(value, devInfoFirmwareRev, sizeof(devInfoFirmwareRev));
break;
case DEVINFO_HARDWARE_REV:
tmos_memcpy(value, devInfoHardwareRev, sizeof(devInfoHardwareRev));
break;
case DEVINFO_SOFTWARE_REV:
tmos_memcpy(value, devInfoSoftwareRev, sizeof(devInfoSoftwareRev));
break;
case DEVINFO_MANUFACTURER_NAME:
tmos_memcpy(value, devInfoMfrName, sizeof(devInfoMfrName));
break;
case DEVINFO_11073_CERT_DATA:
tmos_memcpy(value, devInfo11073Cert, sizeof(devInfo11073Cert));
break;
case DEVINFO_PNP_ID:
tmos_memcpy(value, devInfoPnpId, sizeof(devInfoPnpId));
break;
default:
ret = INVALIDPARAMETER;
break;
}
return ( ret );
}
/*********************************************************************
* @fn devInfo_ReadAttrCB
*
* @brief Read an attribute.
*
* @param connHandle - connection message was received on
* @param pAttr - pointer to attribute
* @param pValue - pointer to data to be read
* @param pLen - length of data to be read
* @param offset - offset of the first octet to be read
* @param maxLen - maximum length of data to be read
*
* @return Success or Failure
*/
static bStatus_t devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 *pLen, uint16 offset, uint16 maxLen,uint8 method )
{
bStatus_t status = SUCCESS;
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
switch (uuid)
{
case SYSTEM_ID_UUID:
// verify offset
if (offset >= sizeof(devInfoSystemId))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length
*pLen = MIN(maxLen, (sizeof(devInfoSystemId) - offset));
// copy data
tmos_memcpy(pValue, &devInfoSystemId[offset], *pLen);
}
break;
case MODEL_NUMBER_UUID:
// verify offset
if (offset >= (sizeof(devInfoModelNumber) - 1))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length (exclude null terminating character)
*pLen = MIN(maxLen, ((sizeof(devInfoModelNumber) - 1) - offset));
// copy data
tmos_memcpy(pValue, &devInfoModelNumber[offset], *pLen);
}
break;
case SERIAL_NUMBER_UUID:
// verify offset
if (offset >= (sizeof(devInfoSerialNumber) - 1))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length (exclude null terminating character)
*pLen = MIN(maxLen, ((sizeof(devInfoSerialNumber) - 1) - offset));
// copy data
tmos_memcpy(pValue, &devInfoSerialNumber[offset], *pLen);
}
break;
case FIRMWARE_REV_UUID:
// verify offset
if (offset >= (sizeof(devInfoFirmwareRev) - 1))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length (exclude null terminating character)
*pLen = MIN(maxLen, ((sizeof(devInfoFirmwareRev) - 1) - offset));
// copy data
tmos_memcpy(pValue, &devInfoFirmwareRev[offset], *pLen);
}
break;
case HARDWARE_REV_UUID:
// verify offset
if (offset >= (sizeof(devInfoHardwareRev) - 1))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length (exclude null terminating character)
*pLen = MIN(maxLen, ((sizeof(devInfoHardwareRev) - 1) - offset));
// copy data
tmos_memcpy(pValue, &devInfoHardwareRev[offset], *pLen);
}
break;
case SOFTWARE_REV_UUID:
// verify offset
if (offset >= (sizeof(devInfoSoftwareRev) - 1))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length (exclude null terminating character)
*pLen = MIN(maxLen, ((sizeof(devInfoSoftwareRev) - 1) - offset));
// copy data
tmos_memcpy(pValue, &devInfoSoftwareRev[offset], *pLen);
}
break;
case MANUFACTURER_NAME_UUID:
// verify offset
if (offset >= (sizeof(devInfoMfrName) - 1))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length (exclude null terminating character)
*pLen = MIN(maxLen, ((sizeof(devInfoMfrName) - 1) - offset));
// copy data
tmos_memcpy(pValue, &devInfoMfrName[offset], *pLen);
}
break;
case IEEE_11073_CERT_DATA_UUID:
// verify offset
if (offset >= sizeof(devInfo11073Cert))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length
*pLen = MIN(maxLen, (sizeof(devInfo11073Cert) - offset));
// copy data
tmos_memcpy(pValue, &devInfo11073Cert[offset], *pLen);
}
break;
case PNP_ID_UUID:
// verify offset
if (offset >= sizeof(devInfoPnpId))
{
status = ATT_ERR_INVALID_OFFSET;
}
else
{
// determine read length
*pLen = MIN(maxLen, (sizeof(devInfoPnpId) - offset));
// copy data
tmos_memcpy(pValue, &devInfoPnpId[offset], *pLen);
}
break;
default:
*pLen = 0;
status = ATT_ERR_ATTR_NOT_FOUND;
break;
}
return ( status );
}
/*********************************************************************
*********************************************************************/

View File

@@ -0,0 +1,886 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : gattprofile.C
* Author : WCH
* Version : V1.0
* Date : 2018/12/10
* Description : <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Եķ<D4B5><C4B7>񣬰<EFBFBD><F1A3ACB0><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>֪ͨ<CDA8><D6AA><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ȫ<EFBFBD>ɶ<EFBFBD>
*******************************************************************************/
/*********************************************************************
* INCLUDES
*/
//#include "CONFIG.h"
#include "gattprofile.h"
#include "net.h"
#include "peripheral.h"
#include "aLiYun.h"
#include "SPI_SRAM.h"
/*********************************************************************
* MACROS
*/
/*********************************************************************
* CONSTANTS
*/
// Position of simpleProfilechar4 value in attribute array
#define SIMPLEPROFILE_CHAR4_VALUE_POS 11
/*********************************************************************
* TYPEDEFS
*/
BLE_SEND_INFO ble_send_info = {0};
BLE_DEVICE_CONFIG* Ble_Device_Info_Ptr = NULL; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD>
/*********************************************************************
* GLOBAL VARIABLES
*/
// Simple GATT Profile Service UUID: 0xFFF0
CONST uint8 simpleProfileServUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE_SERV_UUID)
};
// Characteristic 1 UUID: 0xFFF1
CONST uint8 simpleProfilechar1UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR1_UUID), HI_UINT16(SIMPLEPROFILE_CHAR1_UUID)
};
// Characteristic 2 UUID: 0xFFF2
CONST uint8 simpleProfilechar2UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR2_UUID), HI_UINT16(SIMPLEPROFILE_CHAR2_UUID)
};
// Characteristic 3 UUID: 0xFFF3
CONST uint8 simpleProfilechar3UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR3_UUID), HI_UINT16(SIMPLEPROFILE_CHAR3_UUID)
};
// Characteristic 4 UUID: 0xFFF4
CONST uint8 simpleProfilechar4UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR4_UUID), HI_UINT16(SIMPLEPROFILE_CHAR4_UUID)
};
// Characteristic 5 UUID: 0xFFF5
CONST uint8 simpleProfilechar5UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR5_UUID), HI_UINT16(SIMPLEPROFILE_CHAR5_UUID)
};
// GAP GATT Attributes
uint8 attDeviceName[BLE_DEVICE_NAME_LEN] = "BLV-C1 RCU:8888";
static simpleProfileCBs_t *simpleProfile_AppCBs = NULL;
/*********************************************************************
* Profile Attributes - variables
*/
// Simple Profile Service attribute
static CONST gattAttrType_t simpleProfileService = { ATT_BT_UUID_SIZE, simpleProfileServUUID };
// Simple Profile Characteristic 1 Properties
static uint8 simpleProfileChar1Props = GATT_PROP_WRITE;
// Characteristic 1 Value
static uint8 simpleProfileChar1[SIMPLEPROFILE_CHAR1_LEN] = { 0 };
// Simple Profile Characteristic 1 User Description
static uint8 simpleProfileChar1UserDesp[] = "Characteristic 1\0";
// Simple Profile Characteristic 2 Properties
//static uint8 simpleProfileChar2Props = GATT_PROP_READ;
static uint8 simpleProfileChar2Props = GATT_PROP_READ | GATT_PROP_WRITE;
// Characteristic 2 Value
static uint8 simpleProfileChar2[SIMPLEPROFILE_CHAR2_LEN] = {192,168,1,202};
// Simple Profile Characteristic 2 User Description
static uint8 simpleProfileChar2UserDesp[] = "Characteristic 2, R/W ip addr\0";
// Simple Profile Characteristic 3 Properties
static uint8 simpleProfileChar3Props = GATT_PROP_READ | GATT_PROP_WRITE;
// Characteristic 3 Value
//static uint8 simpleProfileChar3[SIMPLEPROFILE_CHAR3_LEN] = { 0 };
// Simple Profile Characteristic 3 User Description
static uint8 simpleProfileChar3UserDesp[] = "Characteristic 3 R/W dev_name MAXlen:20\0";
// Simple Profile Characteristic 4 Properties
static uint8 simpleProfileChar4Props = GATT_PROP_NOTIFY;
// Characteristic 4 Value
static uint8 simpleProfileChar4[SIMPLEPROFILE_CHAR4_LEN] = { 0 };
// Simple Profile Characteristic 4 Configuration Each client has its own
// instantiation of the Client Characteristic Configuration. Reads of the
// Client Characteristic Configuration only shows the configuration for
// that client and writes only affect the configuration of that client.
static gattCharCfg_t simpleProfileChar4Config[4];
// Simple Profile Characteristic 4 User Description
static uint8 simpleProfileChar4UserDesp[] = "Characteristic 4\0";
// Simple Profile Characteristic 5 Properties
static uint8 simpleProfileChar5Props = GATT_PROP_READ | GATT_PROP_WRITE;
// Characteristic 5 Value
static uint8 simpleProfileChar5[SIMPLEPROFILE_CHAR5_LEN] = { 0 };
// Simple Profile Characteristic 5 User Description
static uint8 simpleProfileChar5UserDesp[] = "Characteristic 5 R/W DHCP ENABLE\0";
/*********************************************************************
* Profile Attributes - Table
*/
static gattAttribute_t simpleProfileAttrTbl[] =
{
/*******************<2A><><EFBFBD><EFBFBD>**************************************************************************************************/
{
{ ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */
GATT_PERMIT_READ, /* permissions */
0, /* handle */
(uint8 *)&simpleProfileService /* pValue */ //FFE0
},
/*****************<2A><><EFBFBD><EFBFBD>1*************************************************************/
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar1Props //ֻд
},
// Characteristic Value 1
{
{ ATT_BT_UUID_SIZE, simpleProfilechar1UUID }, //FFE1
GATT_PERMIT_WRITE,
0,
simpleProfileChar1 //<2F><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
},
// Characteristic 1 User Description
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar1UserDesp //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
},
/*****************<2A><><EFBFBD><EFBFBD>2*************************************************************/
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar2Props //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
},
// Characteristic Value 2
{
{ ATT_BT_UUID_SIZE, simpleProfilechar2UUID }, //0xFFE2
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
simpleProfileChar2 //<2F><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ip<69><70>ַ)
},
// Characteristic 2 User Description
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar2UserDesp //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
},
/*****************<2A><><EFBFBD><EFBFBD>3*************************************************************/
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar3Props //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
},
// Characteristic Value 3
{
{ ATT_BT_UUID_SIZE, simpleProfilechar3UUID }, //0xFFE3
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
attDeviceName //<2F><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// &dataFlash_save_t.scanRspData[2]
},
// Characteristic 3 User Description
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar3UserDesp //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
},
/*****************<2A><><EFBFBD><EFBFBD>4*************************************************************/
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar4Props //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
},
// Characteristic Value 4
{
{ ATT_BT_UUID_SIZE, simpleProfilechar4UUID }, //0xFFE4
0,
0,
simpleProfileChar4 //<2F><>Ҫ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
},
// Characteristic 4 configuration
{
{ ATT_BT_UUID_SIZE, clientCharCfgUUID },
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
(uint8 *)simpleProfileChar4Config //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
},
// Characteristic 4 User Description
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar4UserDesp //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
},
/*****************<2A><><EFBFBD><EFBFBD>5*************************************************************/
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar5Props //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
},
// Characteristic Value 5
{
{ ATT_BT_UUID_SIZE, simpleProfilechar5UUID }, //0xFFE5
GATT_PERMIT_READ | GATT_PERMIT_WRITE, //<2F><>д
0,
simpleProfileChar5 //<2F><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
},
// Characteristic 5 User Description
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar5UserDesp //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
},
};
/*********************************************************************
* LOCAL FUNCTIONS
*/
static bStatus_t simpleProfile_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 *pLen, uint16 offset, uint16 maxLen,uint8 method );
static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 len, uint16 offset,uint8 method );
static void simpleProfile_HandleConnStatusCB( uint16 connHandle, uint8 changeType );
/*********************************************************************
* PROFILE CALLBACKS
*/
// Simple Profile Service Callbacks
gattServiceCBs_t simpleProfileCBs =
{
simpleProfile_ReadAttrCB, // Read callback function pointer
simpleProfile_WriteAttrCB, // Write callback function pointer
NULL // Authorization callback function pointer
};
/*********************************************************************
* PUBLIC FUNCTIONS
*/
/*********************************************************************
* @fn SimpleProfile_AddService
*
* @brief Initializes the Simple Profile service by registering
* GATT attributes with the GATT server.
*
* @param services - services to add. This is a bit map and can
* contain more than one service.
*
* @return Success or Failure
*/
bStatus_t SimpleProfile_AddService( uint32 services )
{
uint8 status = SUCCESS;
// Initialize Client Characteristic Configuration attributes
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GATTServApp_InitCharCfg( INVALID_CONNHANDLE, simpleProfileChar4Config );
// Register with Link DB to receive link status change callback
linkDB_Register( simpleProfile_HandleConnStatusCB ); //ʹ<>ô˺<C3B4><CBBA><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ջص<D5BB><D8B5><EFBFBD>
if ( services & SIMPLEPROFILE_SERVICE )
{
// Register GATT attribute list and CBs with GATT Server App
status = GATTServApp_RegisterService( simpleProfileAttrTbl,
GATT_NUM_ATTRS( simpleProfileAttrTbl ),
GATT_MAX_ENCRYPT_KEY_SIZE,
&simpleProfileCBs );
}
return ( status );
}
/*********************************************************************
* @fn SimpleProfile_RegisterAppCBs
*
* @brief Registers the application callback function. Only call
* this function once.
*
* @param callbacks - pointer to application callbacks.
*
* @return SUCCESS or bleAlreadyInRequestedMode
*/
bStatus_t SimpleProfile_RegisterAppCBs( simpleProfileCBs_t *appCallbacks )
{
if ( appCallbacks )
{
simpleProfile_AppCBs = appCallbacks;
return ( SUCCESS );
}
else
{
return ( bleAlreadyInRequestedMode );
}
}
/*********************************************************************
* @fn SimpleProfile_SetParameter
*
* @brief Set a Simple Profile parameter.
*
* @param param - Profile parameter ID
* @param len - length of data to right
* @param value - pointer to data to write. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*
* @return bStatus_t
*/
bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )
{
bStatus_t ret = SUCCESS;
switch ( param )
{
case SIMPLEPROFILE_CHAR1:
if ( len == SIMPLEPROFILE_CHAR1_LEN )
{
tmos_memcpy( simpleProfileChar1, value, SIMPLEPROFILE_CHAR1_LEN );
}
else
{
ret = bleInvalidRange;
}
break;
case SIMPLEPROFILE_CHAR2:
if ( len == SIMPLEPROFILE_CHAR2_LEN )
{
tmos_memcpy( simpleProfileChar2, value, SIMPLEPROFILE_CHAR2_LEN );
}
else
{
ret = bleInvalidRange;
}
break;
case SIMPLEPROFILE_CHAR3:
if ( len < BLE_DEVICE_NAME_LEN )
{
// tmos_memcpy( &dataFlash_save_t.scanRspData[2], value, len ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmos_memcpy( attDeviceName, value, len ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
// tmos_memcpy( &dataFlash_save_t.scanRspData[2], value, BLE_DEVICE_NAME_LEN ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmos_memcpy( attDeviceName, value, BLE_DEVICE_NAME_LEN ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case SIMPLEPROFILE_CHAR4:
if ( len == SIMPLEPROFILE_CHAR4_LEN )
{
tmos_memcpy( simpleProfileChar4, value, SIMPLEPROFILE_CHAR4_LEN );
}
else
{
ret = bleInvalidRange;
}
break;
case SIMPLEPROFILE_CHAR5:
if ( len == SIMPLEPROFILE_CHAR5_LEN )
{
tmos_memcpy( simpleProfileChar5, value, SIMPLEPROFILE_CHAR5_LEN );
}
else
{
ret = bleInvalidRange;
}
break;
default:
ret = INVALIDPARAMETER;
break;
}
return ( ret );
}
/*********************************************************************
* @fn SimpleProfile_GetParameter
*
* @brief Get a Simple Profile parameter.
*
* @param param - Profile parameter ID
* @param value - pointer to data to put. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*
* @return bStatus_t
*/
bStatus_t SimpleProfile_GetParameter( uint8 param, void *value )
{
bStatus_t ret = SUCCESS;
switch ( param )
{
case SIMPLEPROFILE_CHAR1:
tmos_memcpy( value, simpleProfileChar1, SIMPLEPROFILE_CHAR1_LEN );
break;
case SIMPLEPROFILE_CHAR2:
tmos_memcpy( value, simpleProfileChar2, SIMPLEPROFILE_CHAR2_LEN );
break;
case SIMPLEPROFILE_CHAR3:
// tmos_memcpy( value, &dataFlash_save_t.scanRspData[2], dataFlash_save_t.bleName_len ); //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>
tmos_memcpy( value, attDeviceName, strlen((char*)attDeviceName) ); //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>
break;
case SIMPLEPROFILE_CHAR4:
tmos_memcpy( value, simpleProfileChar4, SIMPLEPROFILE_CHAR4_LEN );
break;
case SIMPLEPROFILE_CHAR5:
tmos_memcpy( value, simpleProfileChar5, SIMPLEPROFILE_CHAR5_LEN );
break;
default:
ret = INVALIDPARAMETER;
break;
}
return ( ret );
}
/*********************************************************************
* @fn simpleProfile_Notify
*
* @brief Send a notification containing a heart rate
* measurement.
*
* @param connHandle - connection handle
* @param pNoti - pointer to notification structure
*
* @return Success or Failure
*/
bStatus_t simpleProfile_Notify( uint16 connHandle, attHandleValueNoti_t *pNoti )
{
uint16 value = GATTServApp_ReadCharCfg( connHandle, simpleProfileChar4Config );
// If notifications enabled
if ( value & GATT_CLIENT_CFG_NOTIFY )
{
// Set the handle
pNoti->handle = simpleProfileAttrTbl[SIMPLEPROFILE_CHAR4_VALUE_POS].handle;
// Send the notification
return GATT_Notification( connHandle, pNoti, FALSE );
}
return bleIncorrectMode;
}
/*********************************************************************
* @fn simpleProfile_ReadAttrCB
*
* @brief Read an attribute.
*
* @param connHandle - connection message was received on
* @param pAttr - pointer to attribute
* @param pValue - pointer to data to be read
* @param pLen - length of data to be read
* @param offset - offset of the first octet to be read
* @param maxLen - maximum length of data to be read
*
* @return Success or Failure
*/
static bStatus_t simpleProfile_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 *pLen, uint16 offset, uint16 maxLen,uint8 method )
{
bStatus_t status = SUCCESS;
// If attribute permissions require authorization to read, return error
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ȩ<EFBFBD><C8A8><EFBFBD>ܶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>򷵻ش<F2B7B5BB><D8B4><EFBFBD>
if ( gattPermitAuthorRead( pAttr->permissions ) )
{
// Insufficient authorization
return ( ATT_ERR_INSUFFICIENT_AUTHOR );
}
// Make sure it's not a blob operation (no attributes in the profile are long)
if ( offset > 0 )
{
return ( ATT_ERR_ATTR_NOT_LONG );
}
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
{
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
switch ( uuid )
{
// No need for "GATT_SERVICE_UUID" or "GATT_CLIENT_CHAR_CFG_UUID" cases;
// gattserverapp handles those reads
// characteristics 1 and 2 have read permissions
// characteritisc 3 does not have read permissions; therefore it is not
// included here
// characteristic 4 does not have read permissions, but because it
// can be sent as a notification, it is included here
case SIMPLEPROFILE_CHAR1_UUID:
*pLen = SIMPLEPROFILE_CHAR1_LEN;
tmos_memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR1_LEN );
break;
case SIMPLEPROFILE_CHAR2_UUID:
*pLen = SIMPLEPROFILE_CHAR2_LEN;
tmos_memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR2_LEN );
break;
case SIMPLEPROFILE_CHAR3_UUID:
*pLen = strlen((char*)attDeviceName);
// *pLen = dataFlash_save_t.bleName_len;
tmos_memcpy( pValue, pAttr->pValue, *pLen );
break;
case SIMPLEPROFILE_CHAR4_UUID:
*pLen = SIMPLEPROFILE_CHAR4_LEN;
tmos_memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR4_LEN );
break;
case SIMPLEPROFILE_CHAR5_UUID:
*pLen = SIMPLEPROFILE_CHAR5_LEN;
tmos_memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR5_LEN );
break;
default:
// Should never get here! (characteristics 3 and 4 do not have read permissions)
*pLen = 0;
status = ATT_ERR_ATTR_NOT_FOUND;
break;
}
}
else
{
// 128-bit UUID
*pLen = 0;
status = ATT_ERR_INVALID_HANDLE;
}
return ( status );
}
/*********************************************************************
* @fn simpleProfile_WriteAttrCB
*
* @brief Validate attribute data prior to a write operation
*
* @param connHandle - connection message was received on
* @param pAttr - pointer to attribute
* @param pValue - pointer to data to be written
* @param len - length of data
* @param offset - offset of the first octet to be written
*
* @return Success or Failure
*/
static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 len, uint16 offset,uint8 method )
{
bStatus_t status = SUCCESS;
uint8 notifyApp = 0xFF;
// If attribute permissions require authorization to write, return error
if ( gattPermitAuthorWrite( pAttr->permissions ) )
{
// Insufficient authorization
return ( ATT_ERR_INSUFFICIENT_AUTHOR );
}
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
{
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
switch ( uuid )
{
case SIMPLEPROFILE_CHAR1_UUID:
//Validate the value
// Make sure it's not a blob oper
if ( offset == 0 )
{
if ( len > SIMPLEPROFILE_CHAR1_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
//Write the value
if ( status == SUCCESS )
{
tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR1_LEN );
if(ble_send_info.BLE_WriteAddr != NULL )
{
SRAM_Write_Byte(len, ble_send_info.BLE_WriteAddr); //<2F><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>
SRAM_Write_Buff(pValue, len, ble_send_info.BLE_WriteAddr +1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ble_send_info.BLE_WriteAddr += BLE_BUFF_MAX_LEN;
if(ble_send_info.BLE_WriteAddr >= SRAM_BLE_RECEIVE_END)
{
ble_send_info.BLE_WriteAddr = SRAM_BLE_RECEIVE_START;
}
}
notifyApp = SIMPLEPROFILE_CHAR1;
}
break;
case SIMPLEPROFILE_CHAR2_UUID:
if ( offset == 0 )
{
if ( len > SIMPLEPROFILE_CHAR2_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
//Write the value
if ( status == SUCCESS )
{
// if(server_info.ip_auto_flg == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6>޸<EFBFBD>ip
// {
// //tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR2_LEN );
// if(memcmp(net_info.local_ip, pValue, SIMPLEPROFILE_CHAR2_LEN) != 0) //ble<6C>޸<EFBFBD>ip<69><70><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// memcpy(net_info.local_ip, pValue, SIMPLEPROFILE_CHAR2_LEN);
// Dbg_Print(DBG_BIT_NET_STATUS_bit,"ble, NetWork_Restart!\n");
// NetWork_Restart(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// server_info.ble_setip_flg = 1; //<2F><><EFBFBD><EFBFBD>ble<6C>޸<EFBFBD>ip
// }
// notifyApp = SIMPLEPROFILE_CHAR2;
// }
// else status = ATT_ERR_WRITE_NOT_PERMITTED;
}
break;
case SIMPLEPROFILE_CHAR3_UUID:
//Validate the value
// Make sure it's not a blob oper
if ( offset == 0 )
{
// if ( len > BLE_DEVICE_NAME_LEN )
// {
// status = ATT_ERR_INVALID_VALUE_SIZE;
// }
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
//Write the value
if ( status == SUCCESS )
{
if ( len >= BLE_DEVICE_NAME_LEN )
{
tmos_memcpy( pAttr->pValue, pValue, BLE_DEVICE_NAME_LEN );
// Set_BleDevice_Name(pValue, BLE_DEVICE_NAME_LEN);
}
else
{
tmos_memset(pAttr->pValue, 0, BLE_DEVICE_NAME_LEN);
tmos_memcpy( pAttr->pValue, pValue, len );
// Set_BleDevice_Name(pValue, len);
}
notifyApp = SIMPLEPROFILE_CHAR3;
}
break;
case SIMPLEPROFILE_CHAR5_UUID:
if ( offset == 0 )
{
if ( len > SIMPLEPROFILE_CHAR5_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
//Write the value
if ( status == SUCCESS )
{
// tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR5_LEN ); //<2F>޸<EFBFBD>ip<69><70>ȡ<EFBFBD><C8A1>ʽ
// server_info.ip_auto_flg = *pValue;
notifyApp = SIMPLEPROFILE_CHAR5;
}
break;
case GATT_CLIENT_CHAR_CFG_UUID:
status = GATTServApp_ProcessCCCWriteReq( connHandle, pAttr, pValue, len,
offset, GATT_CLIENT_CFG_NOTIFY );
break;
default:
// Should never get here! (characteristics 2 and 4 do not have write permissions)
status = ATT_ERR_ATTR_NOT_FOUND;
break;
}
}
else
{
// 128-bit UUID
status = ATT_ERR_INVALID_HANDLE;
}
// If a charactersitic value changed then callback function to notify application of change
if ( (notifyApp != 0xFF ) && simpleProfile_AppCBs && simpleProfile_AppCBs->pfnSimpleProfileChange )
{
simpleProfile_AppCBs->pfnSimpleProfileChange( notifyApp );
}
return ( status );
}
/*********************************************************************
* @fn simpleProfile_HandleConnStatusCB
*
* @brief Simple Profile link status change handler function.
*
* @param connHandle - connection handle
* @param changeType - type of change
*
* @return none
*/
static void simpleProfile_HandleConnStatusCB( uint16 connHandle, uint8 changeType )
{
// Make sure this is not loopback connection
//ȷ<><C8B7><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( connHandle != LOOPBACK_CONNHANDLE )
{
// Reset Client Char Config if connection has dropped
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѶϿ<D1B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿͻ<C3BF><CDBB><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
if ( ( changeType == LINKDB_STATUS_UPDATE_REMOVED ) ||
( ( changeType == LINKDB_STATUS_UPDATE_STATEFLAGS ) &&
( !linkDB_Up( connHandle ) ) ) )
{
GATTServApp_InitCharCfg( connHandle, simpleProfileChar4Config );
}
}
}
/*****************************************
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ble_Parameter_Init
*<2A><> <20>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
*****************************************/
void Ble_Parameter_Init()
{
ble_send_info.BLE_WriteAddr = SRAM_BLE_RECEIVE_START;
ble_send_info.BLE_ReadAddr = SRAM_BLE_RECEIVE_START;
ble_send_info.BLE_SendAddr = SRAM_BLE_SEND_START;
}
/*****************************************
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ble_Recive_Task
*<2A><> <20>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
*****************************************/
void Ble_Recive_Task(void)
{
if(ble_send_info.BLE_ReadAddr != ble_send_info.BLE_WriteAddr)
{
uint8_t len = SRAM_Read_Byte(ble_send_info.BLE_ReadAddr);
uint8_t* data = malloc(len);
if(data == NULL) return;
SRAM_Read_Buff(data, len, ble_send_info.BLE_ReadAddr +1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PRINT("Ble Recive data: %s, len: %d\r\n", data, len); //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
// if(mqtt_info.con_flag) //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD>
// MQTT_Publish(mqtt_info.mqtt_socket, mqtt_info.pub_topic, (uint8*)data, len, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
free(data);
// if(ble_send_info.send_flg == 0)
// {
// memcpy(ble_send_info.sendDATA, &BLE_ReadAddr[1], BLE_ReadAddr[0]); //<2F><><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>
// ble_send_info.sendLEN = BLE_ReadAddr[0];
// ble_send_info.ble_type = BLE_TYPE_PERIPHERAL;
// ble_send_info.device_type = 0x01; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// ble_send_info.device_addr = 0x00; //<2F><EFBFBD><E8B1B8>ַ
// ble_send_info.char_uuid = SIMPLEPROFILE_CHAR1_UUID;
// ble_send_info.send_flg = 1;
// }
ble_send_info.BLE_ReadAddr += BLE_BUFF_MAX_LEN;
if(ble_send_info.BLE_ReadAddr > SRAM_BLE_RECEIVE_END)
{
ble_send_info.BLE_ReadAddr = SRAM_BLE_RECEIVE_START;
}
}
}
/*********************************************************************
*********************************************************************/

View File

@@ -0,0 +1,108 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : devinfoservice.h
* Author : WCH
* Version : V1.0
* Date : 2018/12/11
* Description :
*******************************************************************************/
#ifndef DEVINFOSERVICE_H
#define DEVINFOSERVICE_H
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
/*********************************************************************
* CONSTANTS
*/
// Device Information Service Parameters
#define DEVINFO_SYSTEM_ID 0
#define DEVINFO_MODEL_NUMBER 1
#define DEVINFO_SERIAL_NUMBER 2
#define DEVINFO_FIRMWARE_REV 3
#define DEVINFO_HARDWARE_REV 4
#define DEVINFO_SOFTWARE_REV 5
#define DEVINFO_MANUFACTURER_NAME 6
#define DEVINFO_11073_CERT_DATA 7
#define DEVINFO_PNP_ID 8
// IEEE 11073 authoritative body values
#define DEVINFO_11073_BODY_EMPTY 0
#define DEVINFO_11073_BODY_IEEE 1
#define DEVINFO_11073_BODY_CONTINUA 2
#define DEVINFO_11073_BODY_EXP 254
// System ID length
#define DEVINFO_SYSTEM_ID_LEN 8
// PnP ID length
#define DEVINFO_PNP_ID_LEN 7
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* MACROS
*/
/*********************************************************************
* Profile Callbacks
*/
/*********************************************************************
* API FUNCTIONS
*/
/*
* DevInfo_AddService- Initializes the Device Information service by registering
* GATT attributes with the GATT server.
*
*/
extern bStatus_t DevInfo_AddService( void );
/*********************************************************************
* @fn DevInfo_SetParameter
*
* @brief Set a Device Information parameter.
*
* @param param - Profile parameter ID
* @param len - length of data to right
* @param value - pointer to data to write. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*
* @return bStatus_t
*/
bStatus_t DevInfo_SetParameter( uint8 param, uint8 len, void *value );
/*
* DevInfo_GetParameter - Get a Device Information parameter.
*
* param - Profile parameter ID
* value - pointer to data to write. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*/
extern bStatus_t DevInfo_GetParameter( uint8 param, void *value );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* DEVINFOSERVICE_H */

View File

@@ -0,0 +1,226 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : gattprofile.h
* Author : WCH
* Version : V1.0
* Date : 2018/12/11
* Description :
*******************************************************************************/
#ifndef GATTPROFILE_H
#define GATTPROFILE_H
#include "CONFIG.h"
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
/*********************************************************************
* CONSTANTS
*/
// Profile Parameters
#define SIMPLEPROFILE_CHAR1 0 // RW uint8 - Profile Characteristic 1 value
#define SIMPLEPROFILE_CHAR2 1 // RW uint8 - Profile Characteristic 2 value
#define SIMPLEPROFILE_CHAR3 2 // RW uint8 - Profile Characteristic 3 value
#define SIMPLEPROFILE_CHAR4 3 // RW uint8 - Profile Characteristic 4 value
#define SIMPLEPROFILE_CHAR5 4 // RW uint8 - Profile Characteristic 4 value
// Simple Profile Service UUID
#define SIMPLEPROFILE_SERV_UUID 0xFFE0
// Key Pressed UUID
#define SIMPLEPROFILE_CHAR1_UUID 0xFFE1
#define SIMPLEPROFILE_CHAR2_UUID 0xFFE2
#define SIMPLEPROFILE_CHAR3_UUID 0xFFE3
#define SIMPLEPROFILE_CHAR4_UUID 0xFFE4
#define SIMPLEPROFILE_CHAR5_UUID 0xFFE5
// Simple Keys Profile Services bit fields
#define SIMPLEPROFILE_SERVICE 0x00000001
// Length of characteristic in bytes ( Default MTU is 23 )
#define SIMPLEPROFILE_CHAR1_LEN BLE_BUFF_MAX_LEN-4
#define SIMPLEPROFILE_CHAR2_LEN 4
//#define SIMPLEPROFILE_CHAR3_LEN 1
#define SIMPLEPROFILE_CHAR4_LEN BLE_BUFF_MAX_LEN-4
#define SIMPLEPROFILE_CHAR5_LEN 1
#define BLE_DEVICE_NAME_LEN (GAP_DEVICE_NAME_LEN - 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
#define BLE_INFO_NUM 5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_BLE_RECEIVE_START 0x031000 //BLE<4C><45><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_BLE_RECEIVE_END (0x031000 + BLE_BUFF_MAX_LEN*BLE_INFO_NUM -1) //BLE<4C><45><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define SRAM_BLE_SEND_START (SRAM_BLE_RECEIVE_END+1) //BLE<4C><45><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_BLE_SEND_END (SRAM_BLE_SEND_START+BLE_BUFF_MAX_LEN-1) //BLE<4C><45><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_BLE_SAVE_START (SRAM_BLE_SEND_END+ 1) //BLE<4C><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_BLE_END 0x0313FF //BLE<4C><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
typedef struct DEVICE_CONFIG* DEVICE_CONFIG_Ptr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣָ<CFA2><D6B8>
typedef struct DEVICE_CONFIG{
uint8 device_type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8 device_addr; //<2F><EFBFBD><E8B1B8>ַ
uint8 ble_type:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>0:<3A><><EFBFBD><EFBFBD>/1:<3A>ӻ<EFBFBD>
uint8 connect_sta:1; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
uint8 uuid_type:1; //UUID<49><44><EFBFBD>ͣ<EFBFBD>1:128bit<69><74> 0:16bit
uint8 connecting:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1>ǣ<EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 addr_type:3; //<2F><><EFBFBD><EFBFBD>mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
uint8 mac[6]; //<2F><>Ӧ<EFBFBD><D3A6>mac<61><63>ַ
uint16 server_uuid; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>uuid
uint16 char_uuid; //<2F><><EFBFBD><EFBFBD>uuid
uint8 uuid_128bit[16]; //128bit UUID,<2C><>uuid<69><64><EFBFBD><EFBFBD>Ϊ128bitʱʹ<CAB1><CAB9>
DEVICE_CONFIG_Ptr next; //<2F><>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>
}__attribute__ ((__packed__))BLE_DEVICE_CONFIG; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLE_TYPE_CENTRAL 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLE_TYPE_PERIPHERAL 1 //<2F><><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>
#define UUID_TYPE_16BIT 0 //16bit UUID
#define UUID_TYPE_128BIT 1 //128bit UUID
#define BLE_DATA_TYPE_DATA 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLE_DATA_TYPE_CMD 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//typedef struct{
//
// uint8 ble_type:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>/<2F>ӻ<EFBFBD>
// uint8
// uint8 addr:5; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint16 server_uuid; //<2F><><EFBFBD><EFBFBD>uuid
// uint16 char_uuid; //<2F><><EFBFBD><EFBFBD>uuid
//
//}BLE_DEVICE_INFO;
typedef enum{
BLE_ERR_SUCCESS = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
BLE_ERR_WAITING_CONNECT = 1, //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
BLE_ERR_WAITING_SEND = 2, //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
BLE_ERR_CONNECT_FAIL = 3, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
BLE_ERR_DEVICE_Not_EXIST = 4, //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BLE_ERR_FAIL = 5, //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
BLE_ERR_INVALID = 6, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
}BLE_STA;
#pragma pack(1)
typedef struct{
uint8 ble_type:1; //Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>0:<3A><><EFBFBD><EFBFBD>/1:<3A>ӻ<EFBFBD>
uint8 send_flg:1; //<2F><><EFBFBD>ͱ<EFBFBD>־
uint8 wait_connected:1; //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ӱ<EFBFBD>־ 1:<3A>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
uint8 wait_send:1; //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ͱ<EFBFBD>־ 1:<3A>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
uint8 data_type:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0:<3A><><EFBFBD><EFBFBD>; 1:<3A><><EFBFBD><EFBFBD>򿪹رմӻ<D5B4> NOTIFY<46><59>
uint8 send_state:3; //<2F><><EFBFBD><EFBFBD>״̬
uint16 wait_count; //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>ֻ<EFBFBD>ܵ<EFBFBD>
uint8 device_type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8 device_addr; //<2F><EFBFBD><E8B1B8>ַ
// uint8 sendDATA[BLE_BUFF_MAX_LEN]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
// uint8 sendLEN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
uint16 server_handle; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16 char_handle; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 notify_id:4; //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>id(<28><><EFBFBD><EFBFBD>)
uint8 write_id:4; //д<><D0B4><EFBFBD><EFBFBD>id(<28><><EFBFBD><EFBFBD>)
uint32 BLE_SendAddr; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ַ
uint32 BLE_WriteAddr; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>д<EFBFBD><D0B4>ַ
uint32 BLE_ReadAddr; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
}BLE_SEND_INFO;
#pragma pack()
extern BLE_SEND_INFO ble_send_info;
extern BLE_DEVICE_CONFIG* Ble_Device_Info_Ptr;
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* MACROS
*/
/*********************************************************************
* Profile Callbacks
*/
// Callback when a characteristic value has changed
typedef void (*simpleProfileChange_t)( uint8 paramID );
typedef struct
{
simpleProfileChange_t pfnSimpleProfileChange; // Called when characteristic value changes
} simpleProfileCBs_t;
extern unsigned char attDeviceName[BLE_DEVICE_NAME_LEN];
/*********************************************************************
* API FUNCTIONS
*/
/*
* SimpleProfile_AddService- Initializes the Simple GATT Profile service by registering
* GATT attributes with the GATT server.
*
* @param services - services to add. This is a bit map and can
* contain more than one service.
*/
extern bStatus_t SimpleProfile_AddService( uint32 services );
/*
* SimpleProfile_RegisterAppCBs - Registers the application callback function.
* Only call this function once.
*
* appCallbacks - pointer to application callbacks.
*/
extern bStatus_t SimpleProfile_RegisterAppCBs( simpleProfileCBs_t *appCallbacks );
/*
* SimpleProfile_SetParameter - Set a Simple GATT Profile parameter.
*
* param - Profile parameter ID
* len - length of data to right
* value - pointer to data to write. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*/
extern bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value );
/*
* SimpleProfile_GetParameter - Get a Simple GATT Profile parameter.
*
* param - Profile parameter ID
* value - pointer to data to write. This is dependent on
* the parameter ID and WILL be cast to the appropriate
* data type (example: data type of uint16 will be cast to
* uint16 pointer).
*/
extern bStatus_t SimpleProfile_GetParameter( uint8 param, void *value );
/*
* simpleProfile_Notify - Send notification.
*
* connHandle - connect handle
* pNoti - pointer to structure to notify.
*/
extern bStatus_t simpleProfile_Notify( uint16 connHandle, attHandleValueNoti_t *pNoti );
/*********************************************************************
*********************************************************************/
void Ble_Parameter_Init(void);
void Ble_Recive_Task(void);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,107 @@
#include "data_save.h"
#include "stdlib.h"
DataFlash_Save_T dataFlash_save_t={
.flash_save_flg = 0, //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
.flash_save_head = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
.bleName_len = 15, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.scanRspData = {
// complete name
0x10, // length of this data
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
'B',
'L',
'V',
'-',
'C',
'1',
' ',
'R',
'C',
'U',
':',
'8',
'8',
'8',
'8',
// connection interval range
0x05, // length of this data
GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ), // 100ms
HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),
LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ), // 1s
HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),
},
};
void DataFlash_Save_Init()
{
//DataFlash_Save_T save_t = {0};
PRINT("flash head:%X, %X\n", (*(uint8*)DATAFLASH_SAVE_START_ADDR & 3), *(uint8*)DATAFLASH_SAVE_START_ADDR);
if( (*(uint8*)DATAFLASH_SAVE_START_ADDR & 3) == FALSH_SAVE_HEAD) //<2F><>ͷ<EFBFBD><CDB7><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
PRINT("Read flash\n");
memset(&dataFlash_save_t, 0, sizeof(DataFlash_Save_T));
memcpy((uint8*)&dataFlash_save_t, (uint8*)DATAFLASH_SAVE_START_ADDR, sizeof(DataFlash_Save_T));
PRINT("bleName_len:%d\n", dataFlash_save_t.bleName_len);
for(int i = 0; i< dataFlash_save_t.bleName_len ; i++)
{
PRINT("%c", (char)dataFlash_save_t.scanRspData[i+2]);
}
PRINT("\n");
}
else //<2F><>flashдĬ<D0B4>ϲ<EFBFBD><CFB2><EFBFBD>
{
dataFlash_save_t.flash_save_flg = 1;
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void DataFlash_Save_Task()
{
if(dataFlash_save_t.flash_save_flg)
{
PRINT("Write flash\n");
dataFlash_save_t.flash_save_flg = 0;
dataFlash_save_t.flash_save_head = FALSH_SAVE_HEAD; //дͷ<D0B4><CDB7><EFBFBD><EFBFBD>
uint8 err = FlashBlockErase(DATAFLASH_SAVE_START_ADDR); //512<31><32><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
if(err) PRINT("Erase flash err:%d\n", err);
int len = 0;
if( sizeof(DataFlash_Save_T) %4 != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
{
len = sizeof(DataFlash_Save_T) / 4 + 1;
}
else len = sizeof(DataFlash_Save_T) / 4;
// PRINT("buff size:%d\n", len);
uint32* buff = malloc(len);
if(buff == NULL) return;
for(int i = 0; i< len; i++)
{
buff[i] = 0x00000000;
}
memcpy((uint8*)buff, (uint8*)&dataFlash_save_t, sizeof(DataFlash_Save_T));
err = FlashWriteBuf(DATAFLASH_SAVE_START_ADDR, buff, len*4);
if(err) PRINT("Write flash err:%d\n", err);
free(buff);
}
}

View File

@@ -0,0 +1,46 @@
#ifndef _DATA_SAVE_H
#define _DATA_SAVE_H
#include "CH57x_common.h" //CH57X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
#include "gattprofile.h"
#include "PC_DeviceTest_Fun.h"
#define DATAFLASH_SAVE_START_ADDR FLASH_MCU_BLE_START_ADDRESS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ dataflash <20><>2K
// Minimum connection interval (units of 1.25ms, 20=25ms)
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 20
// Maximum connection interval (units of 1.25ms, 100=125ms)
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 100
#define FALSH_SAVE_HEAD 2 //flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
#pragma pack(1)
typedef struct
{
uint8 flash_save_head:2; //<2F><><EFBFBD><EFBFBD>flash<73><68><EFBFBD>ݵ<EFBFBD>ͷ
uint8 flash_save_flg:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
uint8 bleName_len:5; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 scanRspData[31]; //ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}DataFlash_Save_T;
#pragma pack()
extern DataFlash_Save_T dataFlash_save_t;
void DataFlash_Save_Init(void);
void DataFlash_Save_Task(void);
#endif

View File

@@ -0,0 +1,97 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : multiCentral.h
* Author : WCH
* Version : V1.0
* Date : 2018/11/12
* Description :
*******************************************************************************/
#ifndef MULTICENTRAL_H
#define MULTICENTRAL_H
#include "gattprofile.h"
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
#define PERIPHERAL_DEVICE_MAX_NUM 30
/*********************************************************************
* CONSTANTS
*/
// Simple BLE Observer Task Events
#define START_DEVICE_EVT 0x0001
#define START_DISCOVERY_EVT 0x0002
#define START_SCAN_EVT 0x0004
#define START_SVC_DISCOVERY_EVT 0x0008
#define START_PARAM_UPDATE_EVT 0x0010
#define START_READ_OR_WRITE_EVT 0x0020
#define START_READ_RSSI_EVT 0x0040
#define ESTABLISH_LINK_TIMEOUT_EVT 0x0080
#define CONNECT0_ITEM 0
#define CONNECT1_ITEM 1
#define CONNECT2_ITEM 2
/*********************************************************************
* MACROS
*/
#define CENTRAL_CONNECTING 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CENTRAL_IDLE 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
uint8 taskID; // Task ID for internal task/event processing
uint16 connHandle; // Connection handle of current connection
uint8 state; // Application state
//uint8 connecting; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD>־
uint8 peerAddr[B_ADDR_LEN];
uint8 discState; // Discovery state
uint8 procedureInProgress; // GATT read/write procedure state
uint16 svcStartHdl; // Discovered service start handle
uint16 svcEndHdl; // Discovered service end handle
uint16 charHdl; // Discovered characteristic handle
} centralConnItem_t;
typedef struct
{
uint8 peerAddr[B_ADDR_LEN];
} peerAddrDefItem_t;
extern BLE_DEVICE_CONFIG* Ble_Device_Head;
/*********************************************************************
* FUNCTIONS
*/
/*
* Task Initialization for the BLE Application
*/
extern void Central_Init( void );
/*
* Task Event Processor for the BLE Application
*/
extern uint16 Central_ProcessEvent( uint8 task_id, uint16 events );
void Clear_Connecting_flg(u8* addr);
void Set_Connecting_flg(u8* addr);
void BLE_Send_Task(void);
void Device_Add_List(BLE_DEVICE_CONFIG* Device_node); //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>
uint8 IS_Empty_Connection(u8 device_type, u8 device_addr); //<2F><>ѯָ<D1AF><D6B8><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 Connect_Peripheral_Device(u8 device_type, u8 device_addr); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
uint8 Disconnect_Peripheral_Device(u8 device_type, u8 device_addr); //<2F>Ͽ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
void Peripheral_Notify_Control(u8 device_type, u8 device_addr, u8 notify_id, u8 state); //<2F>򿪻<EFBFBD><F2BFAABB>ر<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><E8B1B8>֪ͨ
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* MULTICENTRAL_H */

View File

@@ -0,0 +1,71 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : peripheral.h
* Author : WCH
* Version : V1.0
* Date : 2018/12/11
* Description :
*******************************************************************************/
#ifndef PERIPHERAL_H
#define PERIPHERAL_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "CH57x_common.h" //CH57X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
//#include "data_save.h"
#define BLE_PERIPHERAL_EN 0
#define BLE_CENTRAL_EN 1
/*********************************************************************
* INCLUDES
*/
/*********************************************************************
* CONSTANTS
*/
// Peripheral Task Events
#define SBP_START_DEVICE_EVT 0x0001
#define SBP_PERIODIC_EVT 0x0002
#define SBP_READ_RSSI_EVT 0x0004
#define SBP_PARAM_UPDATE_EVT 0x0008
/*********************************************************************
* MACROS
*/
typedef struct
{
uint16 connHandle; // Connection handle of current connection
uint16 connInterval;
uint16 connSlaveLatency;
uint16 connTimeout;
} peripheralConnItem_t;
extern peripheralConnItem_t peripheralConnList;
/*********************************************************************
* FUNCTIONS
*/
//uint8 Set_BleDevice_Name(uint8* name, u8 len);
/*
* Task Initialization for the BLE Application
*/
extern void Peripheral_Init( void );
/*
* Task Event Processor for the BLE Application
*/
extern uint16 Peripheral_ProcessEvent( uint8 task_id, uint16 events );
void peripheralChar4Notify( uint8 *pValue, uint16 len );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,53 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.1
* Date : 2019/11/05
* Description :
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CONFIG.h"
#include "CH57x_common.h"
#include "HAL.h"
#include "peripheral.h"
#include "multiCentral.h"
/*********************************************************************
* GLOBAL TYPEDEFS
*/
__align(4) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4];
#if (defined (BLE_MAC)) && (BLE_MAC == TRUE)
u8C MacAddr[6] = {0x84,0xC2,0xE4,0x03,0x02,0x02};
#endif
/*******************************************************************************
* Function Name : main
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : None
* Output : None
* Return : None
*******************************************************************************/
int main( void )
{
#ifdef DEBUG
GPIOA_SetBits(bTXD1);
GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
UART1_DefInit( );
#endif
PRINT("%s\n",VER_LIB);
CH57X_BLEInit( );
HAL_Init( );
GAPRole_PeripheralInit( );
GAPRole_CentralInit( );
Peripheral_Init( );
Central_Init( );
while(1){
TMOS_SystemProcess( );
}
}
/******************************** endfile @ main ******************************/

View File

@@ -0,0 +1,688 @@
/********************************** (C) COPYRIGHT *******************************
* File Name : peripheral.C
* Author : WCH
* Version : V1.0
* Date : 2018/12/10
* Description : <20><><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3>򣬳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E3B2A5><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><E3B2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
/*********************************************************************
* INCLUDES
*/
#include "CONFIG.h"
#include "CH57x_common.h"
#include "devinfoservice.h"
#include "gattprofile.h"
#include "peripheral.h"
/*********************************************************************
* MACROS
*/
/*********************************************************************
* CONSTANTS
*/
// How often to perform periodic event
#define SBP_PERIODIC_EVT_PERIOD 1600
// How often to perform read rssi event
#define SBP_READ_RSSI_EVT_PERIOD /*3200*/4800
// Parameter update delay
#define SBP_PARAM_UPDATE_DELAY 6400
// What is the advertising interval when device is discoverable (units of 625us, 80=50ms)
#define DEFAULT_ADVERTISING_INTERVAL 80
// Limited discoverable mode advertises for 30.72s, and then stops
// General discoverable mode advertises indefinitely
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
// Minimum connection interval (units of 1.25ms, 20=25ms)
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 20
// Maximum connection interval (units of 1.25ms, 100=125ms)
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 100
// Slave latency to use parameter update
#define DEFAULT_DESIRED_SLAVE_LATENCY 0
// Supervision timeout value (units of 10ms, 100=1s)
#define DEFAULT_DESIRED_CONN_TIMEOUT 50
// Company Identifier: WCH
#define WCH_COMPANY_ID 0x07D7
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* GLOBAL VARIABLES
*/
/*********************************************************************
* EXTERNAL VARIABLES
*/
/*********************************************************************
* EXTERNAL FUNCTIONS
*/
/*********************************************************************
* LOCAL VARIABLES
*/
static uint8 Peripheral_TaskID = INVALID_TASK_ID; // Task ID for internal task/event processing
static uint8 advertData[] =
{
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
// service UUID, to notify central devices what services are included
// in this peripheral
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID )
};
// GAP - SCAN RSP data (max size = 31 bytes)
static uint8 scanRspData[31] =
{
// complete name
0x10, // length of this data
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
'B',
'L',
'V',
'-',
'C',
'1',
' ',
'R',
'C',
'U',
':',
'8',
'8',
'8',
'8',
// connection interval range
0x05, // length of this data
GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ), // 100ms
HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),
LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ), // 1s
HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),
// Tx power level
// 0x02, // length of this data
// GAP_ADTYPE_POWER_LEVEL,
// 0 // 0dBm
};
/************
**<2A><> <20><><EFBFBD><EFBFBD>Set_BleDevice_Name
**<2A><> <20>ã<EFBFBD><C3A3>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**<2A><> <20><><EFBFBD><EFBFBD>rspData: <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>buff name<6D><65>Ҫ<EFBFBD>޸ĵ<DEB8><C4B5><EFBFBD><EFBFBD>֣<EFBFBD> len<65><6E><EFBFBD><EFBFBD><EFBFBD>ֵij<D6B5><C4B3><EFBFBD>
**<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>ɹ<EFBFBD>
*************/
//uint8 Set_BleDevice_Name(uint8* name, u8 len)
//{
// if(name == NULL || len == 0) return 1; //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA>
// if(dataFlash_save_t.bleName_len == len && memcmp(name, &dataFlash_save_t.scanRspData[2], len) == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ı<EFBFBD>
// {
// return 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
// }
// memset(dataFlash_save_t.scanRspData, 0, 31);
// //memset(attDeviceName, 0, BLE_DEVICE_NAME_LEN);
// if(len < BLE_DEVICE_NAME_LEN)
// {
// memcpy(&dataFlash_save_t.scanRspData[2], name, len);
// //memcpy(attDeviceName, name, len);
// dataFlash_save_t.scanRspData[0] = len +1;
// dataFlash_save_t.bleName_len = len;
// }
// else
// {
// memcpy(&dataFlash_save_t.scanRspData[2], name, BLE_DEVICE_NAME_LEN);
// //memcpy(attDeviceName, name, BLE_DEVICE_NAME_LEN);
// dataFlash_save_t.scanRspData[0] = BLE_DEVICE_NAME_LEN + 1;
// dataFlash_save_t.bleName_len = BLE_DEVICE_NAME_LEN;
// }
// dataFlash_save_t.scanRspData[1] = GAP_ADTYPE_LOCAL_NAME_COMPLETE;
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+1] = 0x05; // length of this data
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+2] = GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE;
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+3] = LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL );
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+4] = HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL );
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+5] = LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL );
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+6] = HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL );
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+7] = 0x02; // length of this data
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+8] = GAP_ADTYPE_POWER_LEVEL;
// dataFlash_save_t.scanRspData[dataFlash_save_t.scanRspData[0]+9] = 0; // 0dBm
// // Set the GAP Characteristics д GAP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// GGS_SetParameter( GGS_DEVICE_NAME_ATT, BLE_DEVICE_NAME_LEN, &dataFlash_save_t.scanRspData[2] );
// GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( dataFlash_save_t.scanRspData ), dataFlash_save_t.scanRspData );
//
// dataFlash_save_t.flash_save_flg = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
// return 0;
//}
// Connection item list
/*static*/ peripheralConnItem_t peripheralConnList;
/*********************************************************************
* LOCAL FUNCTIONS
*/
static void Peripheral_ProcessTMOSMsg( tmos_event_hdr_t *pMsg );
static void peripheralStateNotificationCB( gapRole_States_t newState ,gapRoleEvent_t * pEvent);
static void performPeriodicTask( void );
static void simpleProfileChangeCB( uint8 paramID );
static void peripheralParamUpdateCB( uint16 connHandle, uint16 connInterval,
uint16 connSlaveLatency, uint16 connTimeout );
static void peripheralInitConnItem( peripheralConnItem_t* peripheralConnList );
static void peripheralRssiCB( uint16 connHandle, int8 rssi );
//static void peripheralChar4Notify( uint8 *pValue, uint16 len );
/*********************************************************************
* PROFILE CALLBACKS
*/
// GAP Role Callbacks
static gapRolesCBs_t Peripheral_PeripheralCBs =
{
peripheralStateNotificationCB, // Profile State Change Callbacks
peripheralRssiCB, // When a valid RSSI is read from controller (not used by application)
peripheralParamUpdateCB //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB>
};
// GAP Bond Manager Callbacks
static gapBondCBs_t Peripheral_BondMgrCBs =
{
NULL, // Passcode callback (not used by application)
NULL // Pairing / Bonding state Callback (not used by application)
};
// Simple GATT Profile Callbacks
static simpleProfileCBs_t Peripheral_SimpleProfileCBs =
{
simpleProfileChangeCB // Charactersitic value change callback
};
/*********************************************************************
* PUBLIC FUNCTIONS
*/
/*********************************************************************
* @fn Peripheral_Init
*
* @brief Initialization function for the Peripheral App Task.
* This is called during initialization and should contain
* any application specific initialization (ie. hardware
* initialization/setup, table initialization, power up
* notificaiton ... ).
*
* @param task_id - the ID assigned by TMOS. This ID should be
* used to send messages and set timers.
*
* @return none
*/
void Peripheral_Init( )
{
Peripheral_TaskID = TMOS_ProcessEventRegister( Peripheral_ProcessEvent );
// Setup the GAP Peripheral Role Profile <20><><EFBFBD><EFBFBD>GAP<41><50>Χ<EFBFBD><CEA7>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{
uint8 initial_advertising_enable = TRUE;
uint16 desired_min_interval = DEFAULT_DESIRED_MIN_CONN_INTERVAL; //<2F><>С<EFBFBD><D0A1><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>λΪ1.25ms<EFBFBD><EFBFBD>20=25ms<6D><73>
uint16 desired_max_interval = DEFAULT_DESIRED_MAX_CONN_INTERVAL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>λΪ1.25ms<EFBFBD><EFBFBD>100=25ms<6D><73>
// GAP - Advertisement data (max size = 31 bytes, though this is
// best kept short to conserve power while advertisting)
// Set the GAP Role Parameters д GAP Role <20><><EFBFBD><EFBFBD>
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
// GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( dataFlash_save_t.scanRspData ), dataFlash_save_t.scanRspData );
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );
GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );
GAPRole_SetParameter( GAPROLE_MIN_CONN_INTERVAL, sizeof( uint16 ), &desired_min_interval );
GAPRole_SetParameter( GAPROLE_MAX_CONN_INTERVAL, sizeof( uint16 ), &desired_max_interval );
}
// Set the GAP Characteristics д GAP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// GGS_SetParameter( GGS_DEVICE_NAME_ATT, dataFlash_save_t.bleName_len, &dataFlash_save_t.scanRspData[2] );
GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );
// Set advertising interval
{
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL; //<2F><EFBFBD><E3B2A5><EFBFBD><EFBFBD>
//д GAP <20><><EFBFBD><EFBFBD>
GAP_SetParamValue( TGAP_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_DISC_ADV_INT_MAX, advInt );
}
// Setup the GAP Bond Manager
{
uint32 passkey = 0; // passkey "000000"
uint8 pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ; //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
uint8 mitm = TRUE;
uint8 bonding = TRUE;
uint8 ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY; ////<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD>
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
GAPBondMgr_SetParameter( GAPBOND_PERI_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey ); //MITM<54><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1A3><EFBFBD><EFBFBD>Ϊuint32<33><32><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>0-999999<39><39>Ĭ<EFBFBD><C4AC>ֵΪ0<CEAA><30>
GAPBondMgr_SetParameter( GAPBOND_PERI_PAIRING_MODE, sizeof ( uint8 ), &pairMode ); //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>@ref GAPBOND_Pairing_Mode_defined<65><64><EFBFBD><EFBFBD><><D0B4><EFBFBD><EFBFBD>С<EFBFBD><D0A1>uint8<74><38>Ĭ<EFBFBD><C4AC>ΪGAPBOND_PAIRING_MODE_WAIT_REQ<45>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GAPBondMgr_SetParameter( GAPBOND_PERI_MITM_PROTECTION, sizeof ( uint8 ), &mitm ); //<2F><>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D0B4><EFBFBD><EFBFBD>С<EFBFBD><D0A1>uint8<74><38>Ĭ<EFBFBD><C4AC>ֵΪ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>
GAPBondMgr_SetParameter( GAPBOND_PERI_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap ); //I/O<><4F><EFBFBD>ܡ<EFBFBD><DCA1><EFBFBD><><D0B4><EFBFBD><EFBFBD>С<EFBFBD><D0A1>uint8<74><38>Ĭ<EFBFBD><C4AC>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD>ʾ<EFBFBD>
GAPBondMgr_SetParameter( GAPBOND_PERI_BONDING_ENABLED, sizeof ( uint8 ), &bonding ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󶨡<EFBFBD><F3B6A8A1><EFBFBD><><D0B4><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>uint8<74><38>Ĭ<EFBFBD><C4AC>ֵΪ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>
}
// Initialize GATT attributes
GGS_AddService( GATT_ALL_SERVICES ); // GAP
GATTServApp_AddService( GATT_ALL_SERVICES ); // GATT attributes
DevInfo_AddService(); // Device Information Service
SimpleProfile_AddService( GATT_ALL_SERVICES ); // Simple GATT Profile
// Setup the SimpleProfile Characteristic Values
{
// uint8 charValue1[SIMPLEPROFILE_CHAR1_LEN] = { 1 };
// uint8 charValue2[SIMPLEPROFILE_CHAR2_LEN] = {192,168,1,94};
//uint8 charValue3[SIMPLEPROFILE_CHAR3_LEN] = { 3 };
// uint8 charValue4[SIMPLEPROFILE_CHAR4_LEN] = { 4 };
// uint8 charValue5[SIMPLEPROFILE_CHAR5_LEN] = { 1, 2, 3, 4, 5 };
// SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR1, SIMPLEPROFILE_CHAR1_LEN, charValue1 );
// SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR2, SIMPLEPROFILE_CHAR2_LEN, charValue2 );
//SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR3, SIMPLEPROFILE_CHAR3_LEN, charValue3 );
// SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR4, SIMPLEPROFILE_CHAR4_LEN, charValue4 );
// SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR5, SIMPLEPROFILE_CHAR5_LEN, charValue5 );
}
// Init Connection Item
peripheralInitConnItem( &peripheralConnList );
// Register callback with SimpleGATTprofile //ע<><D7A2><EFBFBD>ص<EFBFBD>
SimpleProfile_RegisterAppCBs( &Peripheral_SimpleProfileCBs );
// Setup a delayed profile startup //<2F><><EFBFBD><EFBFBD><EFBFBD>ӳٵ<D3B3><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
tmos_set_event( Peripheral_TaskID, SBP_START_DEVICE_EVT );
}
/*********************************************************************
* @fn peripheralInitConnItem
*
* @brief Init Connection Item
*
* @param peripheralConnList -
*
* @return NULL
*/
static void peripheralInitConnItem( peripheralConnItem_t* peripheralConnList )
{
peripheralConnList->connHandle = GAP_CONNHANDLE_INIT;
peripheralConnList->connInterval = 0;
peripheralConnList->connSlaveLatency = 0;
peripheralConnList->connTimeout = 0;
}
/*********************************************************************
* @fn Peripheral_ProcessEvent
*
* @brief Peripheral Application Task event processor. This function
* is called to process all events for the task. Events
* include timers, messages and any other user defined events.
*
* @param task_id - The TMOS assigned task ID.
* @param events - events to process. This is a bit map and can
* contain more than one event.
*
* @return events not processed
*/
uint16 Peripheral_ProcessEvent( uint8 task_id, uint16 events )
{
// VOID task_id; // TMOS required parameter that isn't used in this function
if ( events & SYS_EVENT_MSG ){
uint8 *pMsg;
if ( (pMsg = tmos_msg_receive( Peripheral_TaskID )) != NULL ){
Peripheral_ProcessTMOSMsg( (tmos_event_hdr_t *)pMsg );
// Release the TMOS message
tmos_msg_deallocate( pMsg );
}
// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}
if ( events & SBP_START_DEVICE_EVT ){
// Start the Device
GAPRole_PeripheralStartDevice( Peripheral_TaskID, &Peripheral_BondMgrCBs, &Peripheral_PeripheralCBs );
return ( events ^ SBP_START_DEVICE_EVT );
}
if ( events & SBP_PERIODIC_EVT )
{
// Restart timer
// if ( SBP_PERIODIC_EVT_PERIOD ){
// tmos_start_task( Peripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
// }
// Perform periodic application task ִ<>ж<EFBFBD><D0B6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//performPeriodicTask(); //<2F><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>֪ͨ
return (events ^ SBP_PERIODIC_EVT);
}
if ( events & SBP_PARAM_UPDATE_EVT ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// Send connect param update request //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GAPRole_PeripheralConnParamUpdateReq( peripheralConnList.connHandle,
DEFAULT_DESIRED_MIN_CONN_INTERVAL,
DEFAULT_DESIRED_MAX_CONN_INTERVAL,
DEFAULT_DESIRED_SLAVE_LATENCY,
DEFAULT_DESIRED_CONN_TIMEOUT,
Peripheral_TaskID);
return (events ^ SBP_PARAM_UPDATE_EVT);
}
if ( events & SBP_READ_RSSI_EVT )
{
GAPRole_ReadRssiCmd(peripheralConnList.connHandle);
tmos_start_task( Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD );
return (events ^ SBP_READ_RSSI_EVT);
}
// Discard unknown events
return 0;
}
/*********************************************************************
* @fn Peripheral_ProcessTMOSMsg
*
* @brief Process an incoming task message.
*
* @param pMsg - message to process
*
* @return none
*/
static void Peripheral_ProcessTMOSMsg( tmos_event_hdr_t *pMsg )
{
switch ( pMsg->event ){
default:
break;
}
}
/*********************************************************************
* @fn Peripheral_LinkEstablished
*
* @brief Process link established.
*
* @param pEvent - event to process
*
* @return none
*/
static void Peripheral_LinkEstablished( gapRoleEvent_t * pEvent )
{
gapEstLinkReqEvent_t *event = (gapEstLinkReqEvent_t *) pEvent;
// See if already connected
if( peripheralConnList.connHandle != GAP_CONNHANDLE_INIT )
{
GAPRole_TerminateLink( pEvent->linkCmpl.connectionHandle );
PRINT( "Connection max...\n" );
}
else
{
peripheralConnList.connHandle = event->connectionHandle;
peripheralConnList.connInterval = event->connInterval;
peripheralConnList.connSlaveLatency = event->connLatency;
peripheralConnList.connTimeout = event->connTimeout;
// Set timer for periodic event
tmos_start_task( Peripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
// Set timer for param update event
tmos_start_task( Peripheral_TaskID, SBP_PARAM_UPDATE_EVT, SBP_PARAM_UPDATE_DELAY );
// Start read rssi
tmos_start_task( Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD );
printf("Conn %x - Int %x \n", event->connectionHandle, event->connInterval);
}
}
/*********************************************************************
* @fn Peripheral_LinkTerminated
*
* @brief Process link terminated.
*
* @param pEvent - event to process
*
* @return none
*/
static void Peripheral_LinkTerminated( gapRoleEvent_t * pEvent )
{
gapTerminateLinkEvent_t *event = (gapTerminateLinkEvent_t *) pEvent;
if( event->connectionHandle == peripheralConnList.connHandle )
{
peripheralConnList.connHandle = GAP_CONNHANDLE_INIT;
peripheralConnList.connInterval = 0;
peripheralConnList.connSlaveLatency = 0;
peripheralConnList.connTimeout = 0;
tmos_stop_task( Peripheral_TaskID, SBP_PERIODIC_EVT );
tmos_stop_task( Peripheral_TaskID, SBP_READ_RSSI_EVT );
// Restart advertising
{
uint8 advertising_enable = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advertising_enable );
}
}
else
{
PRINT("ERR..\n");
}
}
/*********************************************************************
* @fn peripheralRssiCB
*
* @brief RSSI callback.
*
* @param connHandle - connection handle
* @param rssi - RSSI
*
* @return none
*/
static void peripheralRssiCB( uint16 connHandle, int8 rssi )
{
PRINT( "RSSI -%d dB Conn %x \n", -rssi, connHandle);
}
/*********************************************************************
* @fn peripheralParamUpdateCB
*
* @brief Parameter update complete callback
*
* @param connHandle - connect handle
* connInterval - connect interval
* connSlaveLatency - connect slave latency
* connTimeout - connect timeout
*
* @return none
*/
static void peripheralParamUpdateCB( uint16 connHandle, uint16 connInterval,
uint16 connSlaveLatency, uint16 connTimeout )
{
if( connHandle == peripheralConnList.connHandle )
{
peripheralConnList.connInterval = connInterval;
peripheralConnList.connSlaveLatency = connSlaveLatency;
peripheralConnList.connTimeout = connTimeout;
printf("Update %x - Int %x \n", connHandle, connInterval);
}
else
{
PRINT("ERR..\n");
}
}
/*********************************************************************
* @fn peripheralStateNotificationCB
*
* @brief Notification from the profile of a state change.
*
* @param newState - new state
*
* @return none
*/
static void peripheralStateNotificationCB( gapRole_States_t newState, gapRoleEvent_t * pEvent )
{
switch ( newState )
{
case GAPROLE_STARTED:
PRINT( "Initialized..\n" );
break;
case GAPROLE_ADVERTISING:
if( pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT ) //gap<61><70><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
{
Peripheral_LinkTerminated( pEvent );
PRINT( "Disconnected..Reason:%x\n", pEvent->linkTerminate.reason );
}
PRINT( "Advertising..\n" );
break;
case GAPROLE_CONNECTED:
if( pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT ) //GAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Peripheral_LinkEstablished( pEvent );
}
PRINT( "Connected..\n" );
break;
case GAPROLE_CONNECTED_ADV: //
PRINT( "Connected Advertising..\n" );
break;
case GAPROLE_WAITING:
if( pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT )
{
PRINT( "Waiting for advertising..\n" );
}
else if( pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT )
{
Peripheral_LinkTerminated( pEvent );
PRINT( "Disconnected..Reason:%x\n", pEvent->linkTerminate.reason );
}
break;
case GAPROLE_ERROR:
PRINT( "Error..\n" );
break;
default:
break;
}
}
/*********************************************************************
* @fn performPeriodicTask
*
* @brief Perform a periodic application task. This function gets
* called every five seconds as a result of the SBP_PERIODIC_EVT
* TMOS event. In this example, the value of the third
* characteristic in the SimpleGATTProfile service is retrieved
* from the profile, and then copied into the value of the
* the fourth characteristic.
* <09><>ʱ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
* @param none
*
* @return none
*/
static void performPeriodicTask( void )
{
static uint8 count = 0;
uint8 notiData[SIMPLEPROFILE_CHAR4_LEN] = "Notify:";
sprintf((char*)&notiData[7], "%d", ++count);
peripheralChar4Notify( notiData, strlen((char*)notiData) );
}
/*********************************************************************
* @fn peripheralChar4Notify
*
* @brief Prepare and send simpleProfileChar4 notification
*
* @param pValue - data to notify
* len - length of data
*
* @return none
*/
/*static*/ void peripheralChar4Notify( uint8 *pValue, uint16 len )
{
attHandleValueNoti_t noti;
noti.len = len;
noti.pValue = GATT_bm_alloc( peripheralConnList.connHandle, ATT_HANDLE_VALUE_NOTI, noti.len, NULL, 0 );
tmos_memcpy( noti.pValue, pValue, noti.len );
if( simpleProfile_Notify( peripheralConnList.connHandle, &noti ) != SUCCESS )
{
GATT_bm_free( (gattMsg_t *)&noti, ATT_HANDLE_VALUE_NOTI );
}
}
/*********************************************************************
* @fn simpleProfileChangeCB
*
* @brief Callback from SimpleBLEProfile indicating a value change
*
* @param paramID - parameter ID of the value that was changed.
*
* @return none
*/
static void simpleProfileChangeCB( uint8 paramID )
{
switch( paramID )
{
case SIMPLEPROFILE_CHAR1:
{
uint8 newValue[SIMPLEPROFILE_CHAR1_LEN];
SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR1, newValue );
PRINT("profile ChangeCB CHAR1.. \n");
break;
}
case SIMPLEPROFILE_CHAR3:
{
uint8 newValue[GAP_DEVICE_NAME_LEN];
SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR3, newValue );
PRINT("profile ChangeCB CHAR3..\n");
break;
}
default:
// should not reach here!
break;
}
}
/*********************************************************************
*********************************************************************/

View File

@@ -0,0 +1,130 @@
#ifndef _APP_SWITCHCTRL_H_
#define _APP_SWITCHCTRL_H_
#include "stdint.h"
#include "BLV_Dev_Action.h"
#include "BLV_All_Dev_Init.h"
#define Key_BUFF_Size 32
#define KeyHoldJudgeTime 400
#define SWI_KEY_LONG_PERIOD 200
#define SWIOUTUPEXIST 0x00 //<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>־
typedef enum{
RS_SWITCH_CH1 = 0x00,
RS_SWITCH_CH2,
RS_SWITCH_CH3,
RS_SWITCH_CH4,
RS_SWITCH_CH5,
RS_SWITCH_CH6,
RS_SWITCH_CH7,
RS_SWITCH_CH8,
RS_SWITCH_CH9,
RS_SWITCH_CH10,
RS_SWITCH_CH11,
RS_SWITCH_CH12,
RS_SWITCH_CH13,
RS_SWITCH_CH14,
RS_SWITCH_CH15,
RS_SWITCH_CH16,
RS_SWITCH_CH17,
RS_SWITCH_CH18,
RS_SWITCH_CH19,
RS_SWITCH_CH20,
RS_SWITCH_CH21,
RS_SWITCH_CH22,
RS_SWITCH_CH23,
RS_SWITCH_CH24,
RS_SWITCH_CH25,
RS_SWITCH_CH26,
RS_SWITCH_CH27,
RS_SWITCH_CH28,
RS_SWITCH_CH29,
RS_SWITCH_CH30,
RS_SWITCH_CH_MAX,
}RS485_SWITCH_NUM_E;
typedef enum
{
KeyNoAction = 0x00, //<2F><><EFBFBD><EFBFBD><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
KeyPress = 0x01, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD>
KeyRelease = 0x02, //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD> <20>ͷ<EFBFBD>
KeyHold = 0x03, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
RotaryLight = 0x04, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RotaryVol = 0x05, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RotaryTemp = 0x06, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
RotaryCCT = 0x07, //<2F><>ת<EFBFBD><D7AA>ɫ<EFBFBD><C9AB>
RotaryOther = 0x08, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}keyState_Typedef; //<2F><><EFBFBD><EFBFBD><EBB0B4>״̬ö<CCAC><C3B6>
typedef struct
{
uint8_t delayCountNow; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ƴ<C2BC>
uint8_t keyThisState; //<2F><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ǰ<EFBFBD><C7B0>ƽ״̬
uint8_t keyState; //<2F><20><><EFBFBD><EFBFBD> <20><><EFBFBD>ɿ<EFBFBD>
}Swikey_Typedef;
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevReadBuf[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ水<DAB4><E6B0B4><EFBFBD><EFBFBD>״̬
uint8_t DevReadBuf_last[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ水<DAB4><E6B0B4><EFBFBD><EFBFBD>״̬
uint32_t KeyBitValue; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ֵ 32<33><32>λ<EFBFBD><CEBB><EFBFBD>Ա<EFBFBD>ʾ32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>λ<EFBFBD><CEBB>ʼ<EFBFBD>洢 OCY<43><59><EFBFBD>أ<EFBFBD>1<EFBFBD><31>ʾ<EFBFBD>г<EFBFBD><D0B3><EFBFBD> 0<><30>ʾ<EFBFBD>޳<EFBFBD><DEB3><EFBFBD>
uint8_t DevSendBuf[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ<D6BD>ָʾ<D6B8>Ƶ<EFBFBD>״̬
uint8_t DevSendBuf_last[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ<D6BD>ָʾ<D6B8>Ƶ<EFBFBD><C6B5><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t A9IORepeatFlag; //A9IO<49>ط<EFBFBD><D8B7><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־<EFBFBD><D6BE>һ<EFBFBD><D2BB>Sn<53>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־<EFBFBD><D6BE>0<EFBFBD><30>Sn<53><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SwtInputValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SwtOutputValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SwtRelayLedCtrlFlag; //<2F><><EFBFBD><EFBFBD>ָʾ<D6B8>ƿ<EFBFBD><C6BF>Ʊ<EFBFBD>־
uint8_t SwtRelayLedCtrlCnt; //ָʾ<D6B8>ƿ<EFBFBD><C6BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t KeyCntChangFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
uint8_t SwtCycleStep; //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ؿ<EFBFBD><D8BF>ƿ<EFBFBD><C6BF><EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t SwitchSn; //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ҫѯ<D2AA><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
//uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint8_t MultiValidNo[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD> 2024-05-23
uint8_t MultiNumber[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰִ<C7B0><D6B4><EFBFBD>±<EFBFBD> 2024-05-23
uint16_t RotaryValue[5]; //<2F><>ť<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>ֵ
uint8_t RotaryValue_Flag; //<2F><>ťֵ<C5A5><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
uint8_t RotaryBL; //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>״̬
uint8_t RotaryBL_Last; //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>״̬
uint8_t RotaryBL_Flag; //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
uint8_t RotaryCCTValue_Flag; //<2F><>ťɫ<C5A5><C9AB>ֵ<EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>,2025-07-10,YYW
uint8_t RL_Upper_limit; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Upper_limit_Last; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Lower_limit; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Lower_limit_Last; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Limit_Flag;
uint32_t Rotary_PageEn; //<2F><>ťҳ<C5A5><D2B3><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint32_t Rotary_PageEnLast;
uint8_t Rotary_PageFlag; //<2F><>ťҳ<C5A5><D2B3><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ͱ<EFBFBD><CDB1><EFBFBD>
}__attribute__ ((__packed__))RS485_SWI_INFO; //485<38><35><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLW_RS485_Switch_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_Switch_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint8_t Get_Switch_Online_Status(uint32_t devaddr);
uint8_t Get_Rotary_Switch_Online_Status(uint32_t devaddr);
#endif

View File

@@ -0,0 +1,597 @@
/**
******************************************************************************
* @file BLV_485_Dev_LEDFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2021<32><31>12<31><32>08<30><38>
* @brief
* PBLED<45><44><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD> ÿ<><C3BF>16<31><36> Ŀǰֻ֧<D6BB>ֵ<EFBFBD>0<EFBFBD><30>
* @log 202205261640 SongHan <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_A8PBFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
/*A8PB<50><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define A8PB_OUT_CH_MAX 0x10 //A8PB<50><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16·
#define REPEATSENDTIMEMAX 0x04 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define A8PBUPLIGHT 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80
#define A8PBDOWNLIGHT 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20
#define A8PBGRADUALTIME 30 //30 <20><>300ms
#define LEDCTRLGROUPHAVELOOP 16//0x08 //ÿ<><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7>16·
#define A8PBSnMin 0 //<2F><>СSn<53><6E>
#define A8PBSnMax 7 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define DEVA8PBTYPE 25 //A8PB<50><42><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define GLOBAL_STEP_VALUE 0x14 //<2F><><EFBFBD><EFBFBD>20
#define GLOBAL_MAX_VALUE 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GLOBAL_MIN_VALUE 0x14 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_A8PBCycleCtrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD>
uint8_t BLW_Rs485_A8PB_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD>
void BLW_Rs485_A8PB_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485A8PBInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
void BLW_Rs485_A8PB_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
void BLW_Rs485_A8PB_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
void BLW_A8PB_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_A8PB_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_A8PB_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLW_A8PBCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_A8PB_Check;
if(LoopNum >= A8PB_OUT_CH_MAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = A8PB_OUT_CH_MAX;
}
else if(0x00 == LoopNum)
{
Rs485LED->LEDLoopValidNum = 0x01;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = LoopNum;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A8PB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d", Rs485LED->LEDLoopValidNum);
}
/*******************************************************************************
* Function Name : BLW_LEDCycleCtrl
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_A8PBCycleCtrl(uint32_t dev_addr)
{
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo;
uint8_t KeepFlag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevSendBuf_last[i] != Rs485LEDInfo.DevSendBuf[i])
{
Rs485LEDInfo.LEDCtrlFlag |= (0x01<<i);
Rs485LEDInfo.DevSendBuf_last[i] = Rs485LEDInfo.DevSendBuf[i];
// Rs485LEDInfo.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
// memcpy(Rs485LEDInfo.DevSendBuf_last, Rs485LEDInfo.DevSendBuf, Rs485LEDInfo.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485LEDInfo.LEDCtrlCnt = REPEATSENDTIMEMAX;
// break;
}
}
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevCtrlWayBuf_last[i] != Rs485LEDInfo.DevCtrlWayBuf[i]) // 0x00
{
Rs485LEDInfo.LEDWayCtrlFlag |=( 0x01<<i); //<2F><>Ӧ<EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>һ
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ<EFBFBD><EFBFBD>λ:%d",Rs485LEDInfo.LEDWayCtrlFlag); //
Rs485LEDInfo.LEDWayCtrlCnt = REPEATSENDTIMEMAX;
Rs485LEDInfo.DevCtrlWayBuf_last[i] = Rs485LEDInfo.DevCtrlWayBuf[i];//<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƣ<EFBFBD>ֻ<EFBFBD><D6BB>һ·һ·<D2BB><C2B7><EFBFBD><EFBFBD>
}
}
if(Rs485LEDInfo.Dim_Global_Value != DevActionGlobal.DimGlobalValue) //2025-07-15,YYW,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȱȽ<C8B1>
{
Rs485LEDInfo.Dim_Global_Value = DevActionGlobal.DimGlobalValue;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A8PBFun--ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȸı<C8B8>:",Rs485LEDInfo.Dim_Global_Value);
}
if(Rs485LEDInfo.Dim_Global_Value_Last != Rs485LEDInfo.Dim_Global_Value) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.Dim_Global_Value_Last = Rs485LEDInfo.Dim_Global_Value;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<7);
}
if((Rs485LEDInfo.LEDUpLightLimitLast != Rs485LEDInfo.LEDUpLightLimit) || (Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit)) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.LEDUpLightLimitLast = Rs485LEDInfo.LEDUpLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<6);
Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
}
// if(Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
// {
// Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
// Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
// }
if(0x00 != Rs485LEDInfo.Dim_GV_Flag) //2024-1-30
{
BLW_A8PB_GlobalValue_Set(&BUS_Public, &Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x00 != Rs485LEDInfo.LEDCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDCtrlCnt)
{
Rs485LEDInfo.LEDCtrlCnt--;
}
else
{
Rs485LEDInfo.LEDCtrlFlag = 0x00;
}
if(0x00 != Rs485LEDInfo.LEDCtrlCnt)
{
BLW_Rs485_A8PB_Ctrl(&BUS_Public, &Rs485LEDInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME; //<2F><>0 <20><><EFBFBD><EFBFBD>
}
else
{
KeepFlag = 0x01; //Ϊ0<CEAA><30><EFBFBD><EFBFBD>
}
}
else if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDWayCtrlCnt)
{
Rs485LEDInfo.LEDWayCtrlCnt--;
}
else
{
Rs485LEDInfo.LEDWayCtrlFlag = 0x00;
}
if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
BLW_Rs485_A8PB_Way_Ctrl(&BUS_Public, &Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME; //<2F><>0<EFBFBD><30><EFBFBD><EFBFBD>
}
else
{
KeepFlag = 0x01; //Ϊ0<CEAA><30><EFBFBD><EFBFBD>
}
}
else if(Rs485LEDInfo.LEDLightnessReadFlag)//
{
if(0x00 != Rs485LEDInfo.LEDLightnessReadCnt)
{
Rs485LEDInfo.LEDLightnessReadCnt--;
}
else
{
Rs485LEDInfo.LEDLightnessReadFlag = 0x00;
}
BLW_Rs485_A8PB_Read(&BUS_Public, &Rs485LEDInfo); //<2F><>ȡ
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485LEDInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485LEDInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485A9LED DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_LEDTYPE,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LEDInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485LEDInfo.DevOffline != Rs485LEDInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LEDInfo.DevOfflineLast = Rs485LEDInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x00 != Rs485LEDInfo.Dim_GV_Flag)
{
Rs485LEDInfo.Dim_GV_Flag = 0x00;
}
}
else
{
Rs485LEDInfo.DevSendCnt++; //
}
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485LEDInfo.comm_record,0x01,0x00);
Rs485LEDInfo.inquire_tick = SysTick_1ms;
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"LED crc_val:%02X\r\n",crc_val);
}
return Ret;
}
#define CH1_A8PBLWDLIGHT_LOC 15 //ͨ<><CDA8>1<EFBFBD><31><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
/**
* @name BLW8·<38><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵõ<C8B5>
* @para
* data <09><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>·<EFBFBD><C2B7><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ȥͬ<C8A5><CDAC><EFBFBD><EFBFBD>
* CMD ȫ<><C8AB> C8 C7 C6 C5 C4 C3 C2 C1 VH VL AH AL mask1 mask2
* 80 04 25 00 0F 1D 50 64 00 00 64 50 54 0F 00 04 80 00 00 00 00 00 //mask1<6B>ǿ<EFBFBD><C7BF><EFBFBD>״̬ mask<73>ǹ<EFBFBD><C7B9><EFBFBD>״̬
*
*/
//void BLW_Rs485_A8PB_Lightness_Get(Device_Public_Information_G *BUS_Public, uint8_t *data, RS485_LED_INFO *Rs485LED)
//{
// Rs485LED->PBLEDTotVol = (data[16]<<8)+data[17]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ѹ
// if(0x00 != data[19]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
// {
// Rs485LED->PBLEDValidCur = (data[18]<<8)+data[19]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
// if(Rs485LED->PBLEDTotCur >= 0xff*10) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// Rs485LED->PBLEDUpCur = 0xff; //<2F><><EFBFBD><EFBFBD>
// }
// else
// {
// Rs485LED->PBLEDUpCur = Rs485LED->PBLEDTotCur/10; //һ<><D2BB><EFBFBD>ֽڵĵ<DAB5><C4B5><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
// }
// }
//
//
// Rs485LED->PBLEDTotCur = (data[18]<<8)+data[19]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>
//}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_LED_Check
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_A8PB_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLW_Rs485_LED_Check\r\n");
uint8_t rev = IsNotMyData;
// uint16_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
uint8_t data[RECDATALENMAX];
// uint8_t LED_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //485<38><35>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ!!");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[0] != BUS_Public.addr) || (DEVA8PBTYPE != (data[2]))
||(len != (data[4]))
) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A8PB<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD>!!");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
switch(data[6])
{
case 0x5A: //һ<>ο<EFBFBD><CEBF><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻظ<C6BB>
case 0x5B: //<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƻظ<C6BB>
case 0x50: //<2F><>ȡ<EFBFBD>ظ<EFBFBD>
case 0x35: //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûظ<C3BB>
rev = IsMyData;
if(Rs485LED.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485LED A8PB DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_LEDTYPE,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LED.DevSendCnt = 0x00;
Rs485LED.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485LED.DevOffline != Rs485LED.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LED.DevOfflineLast = Rs485LED.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485LED.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[6]) //
{
case 0x5A: //һ<>ο<EFBFBD><CEBF><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻظ<C6BB>
Rs485LED.LEDCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record3(dev_addr+Dev_port,dev_addr+Dev_baud,data_addr,len);
break;
case 0x5B: //<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƻظ<C6BB>0x54
Rs485LED.LEDWayCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record3(dev_addr+Dev_port,dev_addr+Dev_baud,data_addr,len);
break;
case 0x50: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵõ<C8B5>
// BLW_Rs485_PBLEDA8_Lightness_Get(&BUS_Public, data, &Rs485LED); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ<EFBFBD><C8BA>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD>ܵ<EFBFBD>ѹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
Rs485LED.LEDLightnessReadFlag = 0x00;
break;
case 0x35:
Rs485LED.Dim_GV_Flag = 0x00;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LED, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}else {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",data[5],SRAM_CRC16(data_addr,len - 2));
}
return rev;
}
#define A8PBCTRLSENDLEN 29 //<2F><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
#define A8PB1LOC 28 //
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_A8PB_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20>ط<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><38><CDA8> <20><><38><CDA8> <20><><EFBFBD><EFBFBD>0.1s <20><><EFBFBD><EFBFBD> CH16 CH15 CH14 CH13 CH12 CH11 CH10 CH9 CH8 CH7 CH6 CH5 CH4 CH3 CH2 CH1
uint8_t SendBuf[A8PBCTRLSENDLEN];// = {0x00, 0x00, DEVA8PBTYPE, 0x80, A8PBCTRLSENDLEN, 0x18, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x50}; //
SendBuf[0] = 0x00; //
SendBuf[1] = 0x00; //<2F><>0
SendBuf[1] |= BLV_SN_Get(&Rs485LEDInfo->LEDSn, A8PBSnMin, A8PBSnMax);
SendBuf[2] = DEVA8PBTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr; //
SendBuf[4] = A8PBCTRLSENDLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x4A; //<2F><><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = 0x01; //<2F>ط<EFBFBD>
SendBuf[8] = 0x00; //<2F><><EFBFBD><EFBFBD>
SendBuf[9] = Rs485LEDInfo->LEDCtrlFlag/0x100; //<2F><><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD>ֽ<EFBFBD>
SendBuf[10] = Rs485LEDInfo->LEDCtrlFlag%0x100; //<2F><><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD>ֽ<EFBFBD>
// SendBuf[11] = 0x64; //<2F><><EFBFBD><EFBFBD>0.1S
SendBuf[11]=Rs485LEDInfo->A8PB_Set_Time;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A8PB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:%d ",Rs485LEDInfo->A8PB_Set_Time);
SendBuf[12] = 0xF0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
SendBuf[A8PB1LOC-i] = Rs485LEDInfo->DevSendBuf[i];
}
// SendBuf[8] = A8PBGRADUALTIME; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
// for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
// {
// SendBuf[13-i] = Rs485LEDInfo->DevSendBuf[i];
// }
// memcpy(&SendBuf[14], &Rs485LEDInfo->DevSendBuf[0], Rs485LEDInfo->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A8PBCTRLSENDLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A8PBCTRLSENDLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,A8PBCTRLSENDLEN);
}
#define A8PBWAYCTRLLEN 14
/*<2A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/**
* @name BLW 4· <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* PBLEDLoop <20><>·<EFBFBD><C2B7>ַ 0~3
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> У<><D0A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mask
* 00 09 03 01 0B 51 22 0F 01 00 64
*/
void BLW_Rs485_A8PB_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[A8PBWAYCTRLLEN];// = {0x00, 0x00, DEVA8PBTYPE, 0x01, A8PBWAYCTRLLEN, 0xBD, 0x24, 0x00, 0x01, 0x02, 0x01};
// uint8_t A8PBLoop; //
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, A8PBSnMin, A8PBSnMax); //֡
SendBuf[2] = DEVA8PBTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr;
SendBuf[4] = A8PBWAYCTRLLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x4B; //<2F><><EFBFBD><EFBFBD><EEA3AC>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = 0x01; //<2F>ط<EFBFBD> //Rs485LEDInfo->LEDWayCtrlFlag; //ͨ<><CDA8>MASK Bit0~Bit3<74>ֱ<EFBFBD><D6B1><EFBFBD>Ӧ<EFBFBD><D3A6>·1<C2B7><31><EFBFBD><EFBFBD>·4
SendBuf[8] = 0x00; //<2F><><EFBFBD><EFBFBD>ַ
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
// if(Rs485LEDInfo->LEDGroupNum == i/LEDCTRLGROUPHAVELOOP) //<2F><><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD>д<EFBFBD><D0B4>б<D0B1><E4BBAF>־<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>maskλ
{
if((Rs485LEDInfo->LEDWayCtrlFlag>>i)&0x01)
{
switch(Rs485LEDInfo->DevCtrlWayBuf_last[i])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[9] |= (0x01<<(i%LEDCTRLGROUPHAVELOOP))/0x100; //<2F><>maskλ
SendBuf[10] |= (0x01<<(i%LEDCTRLGROUPHAVELOOP))%0x100; //<2F><>maskλ
SendBuf[11] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
SendBuf[12] = 0x00;
SendBuf[13] = Rs485LEDInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
SendBuf[9] |= (0x01<<(i%LEDCTRLGROUPHAVELOOP))/0x100; //<2F><>maskλ
SendBuf[10] |= (0x01<<(i%LEDCTRLGROUPHAVELOOP))%0x100; //<2F><>maskλ
SendBuf[11] = 0x01;
SendBuf[12] = 0x01;
SendBuf[13] = Rs485LEDInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case CFG_Dev_CtrlWay_Is_Dim_Stop: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
SendBuf[9] |= (0x01<<(i%LEDCTRLGROUPHAVELOOP))/0x100; //<2F><>maskλ
SendBuf[10] |= (0x01<<(i%LEDCTRLGROUPHAVELOOP))%0x100; //<2F><>maskλ
SendBuf[11] = 0x02;
SendBuf[12] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[13] = Rs485LEDInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
// break; //ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
}
}
}
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A8PBWAYCTRLLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A8PBWAYCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,A8PBCTRLSENDLEN);
}
#define A8PBREADLEN 8
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_A8PB_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[A8PBREADLEN]; // = {0x00, 0x00, DEVA8PBTYPE, 0x80, A8PBREADLEN, 0xD8, 0x40,0x00 };
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, A8PBSnMin, A8PBSnMax); //֡
SendBuf[2] = DEVA8PBTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr;
SendBuf[4] = A8PBREADLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x40;
SendBuf[7] = 0x00; //Ĭ<><C4AC>0<EFBFBD><30>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A8PBREADLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A8PBREADLEN);
}
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_A8PB_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t lens = 0x0D;
uint8_t SendBuf[lens];
memset(SendBuf,0,sizeof(SendBuf));
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, A8PBSnMax); //֡
SendBuf[2] = DEVA8PBTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr; //Addr
SendBuf[4] = lens; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x25; //Cmd
SendBuf[7] = 0x00; //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
SendBuf[8] = Rs485LEDInfo->Dim_GV_Flag;
SendBuf[9] = Rs485LEDInfo->Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[10] = Rs485LEDInfo->LEDUpLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[11] = Rs485LEDInfo->LEDDownLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[12] = 0xF1; //<2F><><EFBFBD><EFBFBD><E7B1A3>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, lens, 5);
MCU485_SendString(BUS_Public->port,SendBuf,lens);
}

View File

@@ -0,0 +1,25 @@
#ifndef _BLV_485_DEV_A8PBFUN_H_
#define _BLV_485_DEV_A8PBFUN_H_
#include "stdint.h"
//#include "BLV_485_Protocol.h"
#include "BLV_485_Dev_LEDFun.h"
void BLW_RS485_A8PB_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum);
#endif

View File

@@ -0,0 +1,479 @@
/*
******************************************************************************
<20>޸<EFBFBD><DEB8><EFBFBD>Ϣ<EFBFBD><CFA2>
2022.09.06 <09>ֿ<EFBFBD><D6BF><EFBFBD>
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>A9IO<49><4F><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_A9IO_SwiFun.h"
#include <string.h>
#include "BLV_485_Protocol.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "CH57x_common.h"
#include "check_fun.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "DBG.h"
#include "Log_api.h"
//uint8_t Dev_Swi_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
//void Dev_Swi_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType);
//uint16_t Dev_Swi_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
uint8_t BLW_A9IO_SwitchCycleDis(uint32_t DevAdd);
uint8_t BLW_Rs485_A9IO_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
#define RS485_A9_IO_QUERY(buf,x) (((buf[x/4+7]&(0x03<<((x%4)*2)))>>(x%4)*2))
//#define RS485_TOUCH_INPUT_QUERY(data,x) (((data&(0x03<<((x%4)*2)))>>(x%4)*2)) //ÿ<><C3BF><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>λ
#define REPEATSENDTIMEMAX 0x01 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLWTOUCHCTRLTIMEOUT 100 //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD>Ƴ<EFBFBD>ʱʱ<CAB1><CAB1>
#define BLWTOUCHASKTIMEOUT 10 //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD>ʱʱ<CAB1><CAB1>
#define SwitchSnMax 0x05 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define SwitchSnMin 0x00 //<2F><>СSn<53><6E>
//#define BLW_TOUCH_LOOPIN_NUM 25 //<2F><><EFBFBD>豸RS485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> 6
//#define BLW_TOUCH_LOOPOUT_NUM 25 //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> 7
//#define BLW_SWT_ASK_LEN_M (((BLW_TOUCH_LOOPOUT_NUM+7)/4)+3)
//#define BLW_SWT_BUF_LEN 0x05 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B3A4>Ϊ5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define BLW_SWT_BUF_LEN_M (((BLW_TOUCH_LOOPOUT_NUM+7)/8)+3)
#define Dev_A9IOSwitch_RecvData_Len_Max 0x18
#define Dev_A9IOSwitch_Input_NUm 24 //A9IO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>24<32><34>
#define A9IOTYPE 14
/*******************************************************************************
* Fail Description : 485<38>豸 - T1<54><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
*
*******************************************************************************/
void BLV_485_Dev_A9IO_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
Rs485SwiInfo->SwtRelayLedCtrlFlag = 0x02; //<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡA9IO <20><>ǰ״̬
Rs485SwiInfo->SwtRelayLedCtrlCnt = REPEATSENDTIMEMAX;
BUS_Public->polling_cf = (uint32_t)&BLW_A9IO_SwitchCycleDis;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_A9IO_Swi_Check;
// BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Swi_InType_Get;
// BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_Swi_Output_Ctrl;
// BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_Swi_Loop_State;
/*6<><36><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>*/
// Rs485SwiInfo.SwtInputValidNum = DevSwiInputnum; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485SwiInfo.SwtOutputValidNum = DevSwiOutputnum;
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>A9IO<49><4F><EFBFBD><EFBFBD> <20><>ַ: %d",BUS_Public->addr);
// Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO));
}
void BLW_A9IO_Rs485_Swi_Pro(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t value_buf = 0;
uint8_t i;
// uint8_t temp = 0,temp2 = 0,d_addr = 0;
/*ѡ<>񿪹<EFBFBD><F1BFAAB9><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>ַ*/
// d_addr = SRAM_Read_Byte(dev_addr + Dev_Addr);
if(Rs485SwiInfo->DevOffline == DEV_IS_OFFLINE)
{
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_A9IOSwitch LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_SWI_TYPE,BUS_Public->addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Rs485SwiInfo->comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
// Rs485SwiInfo->DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485SwiInfo->DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// temp = SRAM_Read_Byte(data_addr + 1);
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO switch Input Num:%d\r\n", Rs485SwiInfo->SwtInputValidNum);
for(i = 0; i < Rs485SwiInfo->SwtInputValidNum; i++)//18·<38><C2B7><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ֵ
{
// if(RS485_A9_IO_KEY_FLAG(data, i)) //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>һ
//<2F>㰴ֱ<E3B0B4>Ӹ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB>״̬<D7B4><CCAC><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB>״̬<D7B4><CCAC><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
{
value_buf |= RS485_A9_IO_QUERY(data, i); //<2F>±<EFBFBD><C2B1><EFBFBD>5<EFBFBD><35>ʼ
switch(value_buf)
{
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyPress Coord:%d",BUS_Public->addr, i, BUS_Public->DevCoord);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
Rs485SwiInfo->DevReadBuf[i] = KeyPress; //<2F><>ַ<EFBFBD><D6B7>1<EFBFBD><31>ʼ
Rs485SwiInfo->DevReadBuf_last[i] = Rs485SwiInfo->DevReadBuf[i]; //<2F><><EFBFBD>浱ǰ<E6B5B1><C7B0>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD>ʹ<EFBFBD><CAB9> 2025-02-27
break;
case 0x03:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyRelease Coord:%d",BUS_Public->addr, i, BUS_Public->DevCoord);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
Rs485SwiInfo->DevReadBuf[i] = KeyRelease;
Rs485SwiInfo->DevReadBuf_last[i] = Rs485SwiInfo->DevReadBuf[i]; //<2F><><EFBFBD>浱ǰ<E6B5B1><C7B0>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD>ʹ<EFBFBD><CAB9> 2025-02-27
break;
case 0x02:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyHold Coord:%d",BUS_Public->addr, i, BUS_Public->DevCoord);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
Rs485SwiInfo->DevReadBuf[i] = KeyHold;
Rs485SwiInfo->DevReadBuf_last[i] = Rs485SwiInfo->DevReadBuf[i]; //<2F><><EFBFBD>浱ǰ<E6B5B1><C7B0>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD>ʹ<EFBFBD><CAB9> 2025-02-27
break;
default:
// Rs485SwiInfo.DevReadBuf[28*data[0]+i+1] = keyInvalid;
break;
}
switch(value_buf)
{
case 0x01:
case 0x02:
case 0x03:
// Ret = 0x01;
// Rs485SwiInfo->A9IORepeatFlag = 0x00; //<2F>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־
break;
default:
// Rs485SwiInfo->A9IORepeatFlag = 0x01; //û<><C3BB><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־
break;
}
value_buf = 0;
}
}
}
void BLW_A9IO_Rs485_IO_State_Pro(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t value_buf = 0;
uint8_t i;
if(Rs485SwiInfo->DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_A9IOSwitch LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_SWI_TYPE,BUS_Public->addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Rs485SwiInfo->comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
for(i = 0; i < Rs485SwiInfo->SwtInputValidNum; i++)//18·<38><C2B7><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ֵ
{
if(i >= Dev_A9IOSwitch_Input_NUm) break;
value_buf = (Rs485SwiInfo->KeyBitValue >> i) & 0x01;
switch(value_buf)
{
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO %d Loop%02X KeyHold",BUS_Public->addr, i);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFB2BB><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ƕ<EFBFBD>ȡһ<C8A1><D2BB>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD>
Rs485SwiInfo->DevReadBuf_last[i] = KeyHold; //<2F><><EFBFBD>浱ǰ<E6B5B1><C7B0>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD>ʹ<EFBFBD><CAB9> 2025-02-27
break;
case 0x00:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO %d Loop%02X KeyRelease",BUS_Public->addr, i);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFB2BB><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ƕ<EFBFBD>ȡһ<C8A1><D2BB>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD>
Rs485SwiInfo->DevReadBuf_last[i] = KeyRelease; //<2F><><EFBFBD>浱ǰ<E6B5B1><C7B0>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>߼<EFBFBD>ʹ<EFBFBD><CAB9> 2025-02-27
break;
default:
break;
}
}
}
#define RECDATALENMAX 12 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsNotMyData 0x01
#define IsMyData 0x00
/*******************************************************************************
* Function Name : BLW_Rs485_A9IO_Swi_Check
* Description : BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
0x00<30><30><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
*******************************************************************************/
uint8_t BLW_Rs485_A9IO_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
uint8_t Crc_buf = 0;
uint8_t ret = IsNotMyData;
uint8_t data[RECDATALENMAX];
// static uint8_t A9IOSetFlag = 0; //A9IO<49>ȶ<EFBFBD><C8B6><EFBFBD>־ //2022.08.22 <09>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2025-02-28 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôҪ<C3B4><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(DataLen > RECDATALENMAX)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return ret; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
if((data[0] != BUS_Public.addr)||(DataLen < 0x05)) //ƥ<><EFBFBD>ص<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD>A9IO<49><4F><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ݣ<EFBFBD>DevAdd:%d,len:%d\r\n",data[0],DataLen);
return ret; //<2F><><EFBFBD>Ǿ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
// if(A9IOSetFlag == 0)
// {
// A9IOSetFlag = 1; //2022.08.22 <09>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2025-02-28 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôҪ<C3B4><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"A9IO<49><4F><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>");
// return ret; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
// }
Crc_buf = CheckSum_Overlook_Check(data, DataLen, 5); //<2F><>У<EFBFBD><D0A3>data[DataLen-1];
if(Crc_buf == data[5]) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO У<><D0A3>ͨ<EFBFBD><CDA8> DevAdd:%d,len:%d\r\n",data[0],DataLen);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><>A9IO<49><4F><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ݣ<EFBFBD>DevAdd:%d,len:%d\r\n",data[0],DataLen);
switch(data[6])
{
case 0x33:
case 0x31:
case 0x36:
ret = IsMyData;
Rs485SwiInfo.A9IORepeatFlag = 0x00; //<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־
Rs485SwiInfo.DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485SwiInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485SwiInfo.DevOffline != Rs485SwiInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485SwiInfo.DevOfflineLast = Rs485SwiInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
break;
}
switch(data[6])
{
case 0x33: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
BLW_A9IO_Rs485_Swi_Pro(&BUS_Public, data, &Rs485SwiInfo); //У<><D0A3>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>
break;
case 0x31: //<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ƻظ<C6BB>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>յ<EFBFBD>A9IO<49><4F><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ݣ<EFBFBD>DevAdd:%d,len:%d\r\n",data[0],DataLen);
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x00;
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,DataLen);
break;
case 0x36: //<2F><><EFBFBD><EFBFBD>bitλ
if(0x0B == DataLen)
{
Rs485SwiInfo.KeyBitValue = data[8] + (data[9]<<8) + (data[10]<<16);
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><>ȡ<EFBFBD><C8A1>A9IO IO״̬:%x\r\n",Rs485SwiInfo.KeyBitValue);
BLW_A9IO_Rs485_IO_State_Pro(&BUS_Public, data, &Rs485SwiInfo);
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x00;
}
break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
}
return ret;
}
#define A9IOCTRLLEN 12 //ָʾ<D6B8>ƿ<EFBFBD><C6BF>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @name A9IO<49><4F><EFBFBD><EFBFBD>ָʾ<D6B8>ƿ<EFBFBD><C6BF>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* BUS_Public <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Rs485SwiInfo ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <20><>
*/
void BLW_A9IO_Switch_ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD 4<><34><EFBFBD><EFBFBD>
uint8_t SendBuf[A9IOCTRLLEN] = {0x00, 0x00, A9IOTYPE, 0x00, A9IOCTRLLEN, 0x18, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00}; //
uint8_t i;
SendBuf[1] |= BLV_SN_Get(&Rs485SwiInfo->SwitchSn, SwitchSnMin, SwitchSnMax);
SendBuf[3] = BUS_Public->addr;
for(i = 0; i < Rs485SwiInfo->SwtOutputValidNum; i++)
{
if(0x00 != Rs485SwiInfo->DevSendBuf[i]) //<2F><>Ϊ0
{
SendBuf[7+i/4] |= 0x02<<((i%4)*2); //<2F><>
}
else
{
SendBuf[7+i/4] |= 0x01<<((i%4)*2); //<2F><>
}
}
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9IOCTRLLEN, 5);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s",__func__);
MCU485_SendString(BUS_Public->port,SendBuf,A9IOCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,A9IOCTRLLEN);
}
#define A9IOCYCLELEN 7 //A9_IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
/**
* @name A9IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
* @para
* BUS_Public <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Rs485SwiInfo ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <20><>
*/
void BLW_Switch_A9_IO_Cycle(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD
uint8_t SendBuf[A9IOCYCLELEN] = {0x00, 0x00, A9IOTYPE, 0x00, A9IOCYCLELEN, 0x18, 0x23,}; //
if(0x01 == Rs485SwiInfo->A9IORepeatFlag)
{
SendBuf[1] |= Rs485SwiInfo->SwitchSn;
SendBuf[1] |= (0x01<<6);
}
else
{
SendBuf[1] |= BLV_SN_Get(&Rs485SwiInfo->SwitchSn, SwitchSnMin, SwitchSnMax);
}
SendBuf[3] = BUS_Public->addr; //CfgDevAdd->DevAddr;
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9IOCYCLELEN, 5);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO switch send data---\r\n");
MCU485_SendString(BUS_Public->port,SendBuf, A9IOCYCLELEN);
}
/**
* @name A9IO<49><4F><EFBFBD><EFBFBD> - <20><>ȡIO״̬
* @para
* BUS_Public <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Rs485SwiInfo ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <20><>
*/
void BLW_Switch_A9_ReadIO_State(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD
uint8_t SendBuf[A9IOCYCLELEN] = {0x00, 0x00, A9IOTYPE, 0x00, A9IOCYCLELEN, 0x18, 0x26,};
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s...",__func__);
if(0x01 == Rs485SwiInfo->A9IORepeatFlag)
{
SendBuf[1] |= Rs485SwiInfo->SwitchSn;
SendBuf[1] |= (0x01<<6);
}
else
{
SendBuf[1] |= BLV_SN_Get(&Rs485SwiInfo->SwitchSn, SwitchSnMin, SwitchSnMax);
}
SendBuf[3] = BUS_Public->addr; //CfgDevAdd->DevAddr;
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9IOCYCLELEN, 5);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO switch send data---\r\n");
MCU485_SendString(BUS_Public->port,SendBuf, A9IOCYCLELEN);
}
/*******************************************************************************
* Function Name : BLW_A9IO_SwitchCycleDis
* Description : BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLW_A9IO_SwitchCycleDis(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t i;
uint8_t Ret = RS485OCCUPYTIME; //ÿ<>ζ<EFBFBD><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(Rs485SwiInfo.SwtRelayLedCtrlFlag != 0x02){
/*<2A>ж<EFBFBD><D0B6><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>*/
for(i = 0; i < Rs485SwiInfo.SwtOutputValidNum; i++)
{
if(Rs485SwiInfo.DevSendBuf_last[i] != Rs485SwiInfo.DevSendBuf[i])
{
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x01;
Rs485SwiInfo.SwtRelayLedCtrlCnt = REPEATSENDTIMEMAX;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_A9IOSwitch <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>Ʊ<EFBFBD>־");
memcpy(Rs485SwiInfo.DevSendBuf_last, Rs485SwiInfo.DevSendBuf, Rs485SwiInfo.SwtOutputValidNum);
break;
}
}
if(0x01 == Rs485SwiInfo.SwtRelayLedCtrlFlag)
{
if(0x00 != Rs485SwiInfo.SwtRelayLedCtrlCnt)
{
Rs485SwiInfo.SwtRelayLedCtrlCnt--;
}else{
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x00;
}
BLW_A9IO_Switch_ctrl(&BUS_Public, &Rs485SwiInfo);
}else{
BLW_Switch_A9_IO_Cycle(&BUS_Public, &Rs485SwiInfo);
}
}else{
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ǰA9IO<49><4F>ƽ״̬*/
if(0x00 != Rs485SwiInfo.SwtRelayLedCtrlCnt)
{
Rs485SwiInfo.SwtRelayLedCtrlCnt--;
}else{
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x00;
}
BLW_Switch_A9_ReadIO_State(&BUS_Public, &Rs485SwiInfo);
}
if(Rs485SwiInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485SwiInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_A9IOSwitch LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_SWI_TYPE, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485SwiInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485SwiInfo.DevOffline != Rs485SwiInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485SwiInfo.DevOfflineLast = Rs485SwiInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485SwiInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&Rs485SwiInfo.comm_record,0x01,0x00);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
return Ret;
}

View File

@@ -0,0 +1,17 @@
#ifndef _BLV_485_DEV_A9IO_SWIFUN_H_
#define _BLV_485_DEV_A9IO_SWIFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "APP_SwitchCtrl.h"
#define DEV_SWI_TYPE 0x06
/*BLVA9IO 485<38><35><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>*/
void BLV_485_Dev_A9IO_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo);
#endif

View File

@@ -0,0 +1,554 @@
/**
******************************************************************************
* @file BLV_485_Dev_A9LDFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2021<32><31>12<31><32>08<30><38>
* @brief
* A9LD<4C><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չģ<D5B9><C4A3> ÿ<><C3BF>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* @log 202205261640 SongHan <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_A9LDFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "Log_api.h"
#include "BLV_Dev_Action.h"
/*A9LD<4C><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define A9LD_OUT_CH_MAX 0x04 //A9LD<4C><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define A9LDUPLIGHT 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80
#define A9LDDOWNLIGHT 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20
#define A9LDGRADUALTIME 30 //30 <20><>300ms
#define A9LDSnMin 0 //<2F><>СSn<53><6E>
#define A9LDSnMax 15 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define DEVA9LDTYPE 03 //A9LD<4C><44><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define GLOBAL_STEP_VALUE 0x14 //<2F><><EFBFBD><EFBFBD>20
#define GLOBAL_MAX_VALUE 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GLOBAL_MIN_VALUE 0x14 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_A9LDCycleCtrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD>
uint8_t BLW_Rs485_A9LD_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD>
void BLW_Rs485_A9LD_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485A9LDInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
void BLW_Rs485_A9LD_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
void BLW_Rs485_A9LD_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
void BLW_A9LD_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_A9LD_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_A9LD_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLW_A9LDCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_A9LD_Check;
/*<2A><>ʼ<EFBFBD><CABC>LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ*/
if(LoopNum >= A9LD_OUT_CH_MAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = A9LD_OUT_CH_MAX;
}
else if(0x00 == LoopNum)
{
Rs485LED->LEDLoopValidNum = 0x01;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = LoopNum;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A9LD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d", Rs485LED->LEDLoopValidNum);
// Add_POLL_Device_To_List2(BUS_Public,(uint8_t *)Rs485LED,sizeof(RS485_LED_INFO));
}
/*******************************************************************************
* Function Name : BLW_LEDCycleCtrl
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_A9LDCycleCtrl(uint32_t dev_addr)
{
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo;
uint8_t KeepFlag = 0x00;
uint32_t temp_val = 0;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevSendBuf_last[i] != Rs485LEDInfo.DevSendBuf[i])
{
Rs485LEDInfo.LEDCtrlFlag = 0x01;
Rs485LEDInfo.LEDCtrlCnt = REPEATSENDTIMEMAX;
Rs485LEDInfo.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
memcpy(Rs485LEDInfo.DevSendBuf_last, Rs485LEDInfo.DevSendBuf, Rs485LEDInfo.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(Rs485LEDInfo.DevSendBufNext, Rs485LEDInfo.DevSendBuf, Rs485LEDInfo.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevCtrlWayBuf_last[i] != Rs485LEDInfo.DevCtrlWayBuf[i]) // 0x00
{
Rs485LEDInfo.LEDWayCtrlFlag |=(0x01<<i); //<2F><>Ӧ<EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>һ
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ<EFBFBD><CABD>λ:%d\r\n",Rs485LEDInfo.LEDWayCtrlFlag); //
Rs485LEDInfo.LEDWayCtrlCnt = REPEATSENDTIMEMAX;
Rs485LEDInfo.DevCtrlWayBuf_last[i] = Rs485LEDInfo.DevCtrlWayBuf[i];
}
}
if(Rs485LEDInfo.Dim_Global_Value != DevActionGlobal.DimGlobalValue) //2025-07-15,YYW,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȱȽ<C8B1>
{
Rs485LEDInfo.Dim_Global_Value = DevActionGlobal.DimGlobalValue;
Rs485LEDInfo.Dim_Global_Value_Last = Rs485LEDInfo.Dim_Global_Value;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9LDFun ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȸı<C8B8>: %d",Rs485LEDInfo.Dim_Global_Value);
/*A9LD <20>趨ȫ<E8B6A8><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>*/
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
Rs485LEDInfo.LEDCtrlFlag = 0x01;
Rs485LEDInfo.LEDCtrlCnt = REPEATSENDTIMEMAX;
Rs485LEDInfo.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
temp_val = Rs485LEDInfo.DevSendBuf[i];
Rs485LEDInfo.DevSendBufNext[i] = (temp_val * DevActionGlobal.DimGlobalValue) / 100;
//Rs485LEDInfo.DevSendBuf_last[i] = Rs485LEDInfo.DevSendBuf[i];
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9LDFun-CH%d<><64><EFBFBD><EFBFBD>:%d - %d",i,Rs485LEDInfo.DevSendBufNext[i],Rs485LEDInfo.DevSendBuf[i]);
}
}
if(Rs485LEDInfo.Dim_Global_Value_Last != Rs485LEDInfo.Dim_Global_Value) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.Dim_Global_Value_Last = Rs485LEDInfo.Dim_Global_Value;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<7);
}
if((Rs485LEDInfo.LEDUpLightLimitLast != Rs485LEDInfo.LEDUpLightLimit) || (Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit)) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.LEDUpLightLimitLast = Rs485LEDInfo.LEDUpLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<6);
Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
}
// if(Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
// {
// Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
// Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
// }
if(0x00 != Rs485LEDInfo.Dim_GV_Flag) //2024-1-30
{
BLW_A9LD_GlobalValue_Set(&BUS_Public, &Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Rs485LEDInfo.LEDCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDCtrlCnt)
{
Rs485LEDInfo.LEDCtrlCnt--;
}
else
{
Rs485LEDInfo.LEDCtrlFlag = 0x00;
}
BLW_Rs485_A9LD_Ctrl(&BUS_Public, &Rs485LEDInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDWayCtrlCnt)
{
Rs485LEDInfo.LEDWayCtrlCnt--;
}
else
{
Rs485LEDInfo.LEDWayCtrlFlag = 0x00;
}
if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
BLW_Rs485_A9LD_Way_Ctrl(&BUS_Public, &Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME; //<2F><>0<EFBFBD><30><EFBFBD><EFBFBD>
}
else
{
KeepFlag = 0x01; //Ϊ0<CEAA><30><EFBFBD><EFBFBD>
}
}
else if(Rs485LEDInfo.LEDLightnessReadFlag)//
{
if(0x00 != Rs485LEDInfo.LEDLightnessReadCnt)
{
Rs485LEDInfo.LEDLightnessReadCnt--;
}
else
{
Rs485LEDInfo.LEDLightnessReadFlag = 0x00;
}
BLW_Rs485_A9LD_Read(&BUS_Public, &Rs485LEDInfo); //<2F><>ȡ
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485LEDInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485LEDInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485A9LED DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_LEDTYPE,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LEDInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485LEDInfo.DevOffline != Rs485LEDInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LEDInfo.DevOfflineLast = Rs485LEDInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x00 != Rs485LEDInfo.Dim_GV_Flag)
{
Rs485LEDInfo.Dim_GV_Flag = 0x00;
}
}
else
{
Rs485LEDInfo.DevSendCnt++; //
}
Rs485LEDInfo.inquire_tick = SysTick_1ms;
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485LEDInfo.comm_record,0x01,0x00);
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_LED_Check
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_A9LD_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = IsNotMyData;
// uint16_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
uint8_t data[RECDATALENMAX];
// uint8_t LED_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //485<38><35>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ!!");
return rev; //<2F><><EFBFBD><EFBFBD>
}
if(len < 6) return rev;
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[0] != BUS_Public.addr) || (DEVA9LDTYPE != (data[2]))
|| (len != (data[4]))
) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9LD<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD>!!");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
switch(data[6])
{
case 0x31: //<2F><><EFBFBD>ƻظ<C6BB>
case 0x32: //<2F><>ʽ<EFBFBD>ظ<EFBFBD>
case 0x30: //<2F><>ȡ<EFBFBD>ظ<EFBFBD>
case 0x33: //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûظ<C3BB>
rev = IsMyData;
if(Rs485LED.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485LED DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_LEDTYPE,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LED.DevSendCnt = 0x00;
Rs485LED.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485LED.DevOffline != Rs485LED.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LED.DevOfflineLast = Rs485LED.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485LED.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[6])
{
case 0x31:
Rs485LED.LEDCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x32:
Rs485LED.LEDWayCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x30:
// BLW_Rs485_A9LD_Lightness_Get(data, CfgDevAdd);
/*<2A><><EFBFBD>⵽״̬<D7B4>ı<C4B1>ű<EFBFBD><C5B1><EFBFBD>*/
Rs485LED.LEDLightnessReadFlag = 0x00;
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"A9LD Now Buff:",data,len);
break;
case 0x33:
Rs485LED.Dim_GV_Flag = 0x00;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LED, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
return rev;
}
#define A9LDCTRLSENDLEN 14
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_A9LD_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> <20><><EFBFBD><EFBFBD>0.1s <20><><EFBFBD><EFBFBD> CH4 CH3 CH2 CH1
uint8_t SendBuf[18] = {0x00, 0x00, DEVA9LDTYPE, 0x01, A9LDCTRLSENDLEN, 0x18, 0x21, 0x0f, 0x64, 0x00, 0x50, 0x50, 0x50, 0x50};
SendBuf[1] |= BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, A9LDSnMax);
SendBuf[3] = BUS_Public->addr; //
SendBuf[8] = Rs485LEDInfo->A9LD_Set_Time; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
// SendBuf[8] = led_setime.A9LD_LED_SetTime;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9LD Dim_Time:%d \r\n",Rs485LEDInfo->A9LD_Set_Time);
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
SendBuf[13-i] = Rs485LEDInfo->DevSendBufNext[i]; //2025-08-22 <20>޸Ľ<DEB8><C4BD><EFBFBD>ȫ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// memcpy(&SendBuf[14], &Rs485LEDInfo->DevSendBuf[0], Rs485LEDInfo->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9LDCTRLSENDLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A9LDCTRLSENDLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,A9LDCTRLSENDLEN);
}
#define A9LDWAYCTRLLEN 11
/*<2A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/**
* @name BLW 4· <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* PBLEDLoop <20><>·<EFBFBD><C2B7>ַ 0~3
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> У<><D0A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mask
* 00 09 03 01 0B 51 22 0F 01 00 64
*/
void BLW_Rs485_A9LD_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[A9LDWAYCTRLLEN];// = {0x00, 0x00, DEVA9LDTYPE, 0x01, A9LDWAYCTRLLEN, 0xBD, 0x24, 0x00, 0x01, 0x02, 0x01};
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, A9LDSnMax); //֡
SendBuf[2] = DEVA9LDTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr;
SendBuf[4] = A9LDWAYCTRLLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x22; //<2F><><EFBFBD><EFBFBD><EEA3AC>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = Rs485LEDInfo->LEDWayCtrlFlag; //ͨ<><CDA8>MASK Bit0~Bit3<74>ֱ<EFBFBD><D6B1><EFBFBD>Ӧ<EFBFBD><D3A6>·1<C2B7><31><EFBFBD><EFBFBD>·4
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
if((Rs485LEDInfo->LEDWayCtrlFlag>>i)&0x01)
{
switch(Rs485LEDInfo->DevCtrlWayBuf_last[i])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[8] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
SendBuf[9] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
SendBuf[8] = 0x01;
SendBuf[9] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
SendBuf[8] = 0x00;
SendBuf[9] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
SendBuf[8] = 0x00;
SendBuf[9] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Stop: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
SendBuf[8] = 0x02;
SendBuf[9] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
break; //ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
}
}
SendBuf[10] = Rs485LEDInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9LDWAYCTRLLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A9LDWAYCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,A9LDCTRLSENDLEN);
}
#define A9LDREADLEN 7
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_A9LD_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD
uint8_t SendBuf[A9LDREADLEN]; // = {0x00, 0x00, DEVA9LDTYPE, 0x01, A9LDREADLEN, 0xD8, 0x20};
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, A9LDSnMax); //֡
SendBuf[2] = DEVA9LDTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr;
SendBuf[4] = A9LDREADLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x20;
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9LDREADLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A9LDREADLEN);
}
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_A9LD_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t lens = 0x0C;
uint8_t SendBuf[lens];
memset(SendBuf,0,sizeof(SendBuf));
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, A9LDSnMax); //֡
SendBuf[2] = DEVA9LDTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr; //Addr
SendBuf[4] = lens; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x23; //Cmd
SendBuf[7] = Rs485LEDInfo->Dim_GV_Flag;
SendBuf[8] = 100; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[9] = Rs485LEDInfo->LEDUpLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[10] = Rs485LEDInfo->LEDDownLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[11] = 0x01; //<2F><><EFBFBD><EFBFBD><E7B1A3>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, lens, 5);
MCU485_SendString(BUS_Public->port,SendBuf,lens);
}

View File

@@ -0,0 +1,24 @@
#ifndef _BLV_485_DEV_A9LDFUN_H_
#define _BLV_485_DEV_A9LDFUN_H_
#include "stdint.h"
#include "BLV_485_Dev_LEDFun.h"
void BLW_RS485_A9LD_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum);
#endif

View File

@@ -0,0 +1,699 @@
/**
******************************************************************************
* @file BLV_485_Dev_A9RELAYFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2022<32><32>03<30><33>27<32><37>
* @brief
* A9RELAY<41>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>չģ<D5B9><C4A3> ÿ<><C3BF>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_A9RELAYFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "Log_api.h"
#include "BLV_Dev_Action.h"
/*A9RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define A9EXPANDTYPE 14 //A9RELAY<41><59><EFBFBD><EFBFBD>
#define A9RELAYSnMin 0x08 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define A9RELAYSnMax 0x0F //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_A9RELAYCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_A9RELAY_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_Rs485_A9RELAY_Ctrl(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo);
void A9Relay_Cycle(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo); //2023-07-29
//void Dev_A9RELAY_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
//uint16_t Dev_A9RELAY_Read(uint32_t devaddr,uint16_t loop);
//uint16_t BLW_A9RELAY_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start);
//void BLW_A9RELAY_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_A9RELAY_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_A9RELAY_Data_Init(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo)
{
// Device_Public_Information_G BUS_Public;
// NOR_HVOUT_INFO DevHVoutInfo;
//
// memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
// memset(&DevHVoutInfo,0,sizeof(NOR_HVOUT_INFO));
//
// BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
// BUS_Public.type = DEV_A9RELAYTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
// BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
// BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
// BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public->polling_cf = (uint32_t)&BLW_A9RELAYCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_A9RELAY_Check;
// BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_A9RELAY_Ctrl;
// BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_A9RELAY_Read;
// BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl = BLW_A9RELAY_Group_Ctrl; //
// BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr = BLW_A9RELAY_Group_Read; //
//
// /*<2A><>ʼ<EFBFBD><CABC>A9RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>ʼֵ*/
// DevHVoutInfo.HVoutLoopValidNum = A9RELAY_BUFF_Size;
//
// Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO));
}
/*******************************************************************************
* Function Name : BLW_A9RELAYCycleCtrl
* Description : BLWA9RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_A9RELAYCycleCtrl(uint32_t dev_addr)
{
// uint16_t temp = 0;
// uint8_t crc_val = 0;
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
NOR_HVOUT_INFO DevHVoutInfo;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),dev_addr+Dev_Privately);
for(i = 0; i < DevHVoutInfo.HVoutLoopValidNum; i++)
{
if(DevHVoutInfo.DevHVoutStateLast[i] != DevHVoutInfo.DevHVoutState[i])
{
DevHVoutInfo.DevChangeFlag = 0x01;
DevHVoutInfo.HVoutCtrlCnt = REPEATSENDTIMEMAX;
DevHVoutInfo.DevHVoutStateLast[i] = DevHVoutInfo.DevHVoutState[i];
DevHVoutInfo.A9Relay_ReadFlag = 0x01;
}
}
if(0x01 == DevHVoutInfo.DevChangeFlag)
{
if(0x00 != DevHVoutInfo.HVoutCtrlCnt)
{
DevHVoutInfo.HVoutCtrlCnt--;
}
else
{
DevHVoutInfo.DevChangeFlag = 0x00;
}
BLW_Rs485_A9RELAY_Ctrl(&BUS_Public, &DevHVoutInfo); //9·<39><C2B7><EFBFBD>ƣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
/*ͨѶ<CDA8><D1B6>¼*/
BLV_Communication_Record(&DevHVoutInfo.comm_record,0x01,0x00);
}
else if((0x00 == DevHVoutInfo.DevChangeFlag)&&(DevHVoutInfo.A9Relay_ReadFlag==0x01))
{
if(0x00 != DevHVoutInfo.HVoutCtrlCnt)
{
DevHVoutInfo.HVoutCtrlCnt--;
}
else
{
DevHVoutInfo.A9Relay_ReadFlag = 0x00;
}
A9Relay_Cycle(&BUS_Public, &DevHVoutInfo);
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
if(DevHVoutInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(DevHVoutInfo.DevOffline != DEV_IS_OFFLINE)
{
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevHVoutInfo DEV_IS_OFFLINE");
LOG_Device_Online_Record(BUS_Public.type,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
DevHVoutInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(DevHVoutInfo.DevOffline != DevHVoutInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
DevHVoutInfo.DevOfflineLast = DevHVoutInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
DevHVoutInfo.DevSendCnt++; //
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),dev_addr+Dev_Privately);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"A9RELAY crc_val:%02X\r\n",crc_val);
}
return Ret;
}
void A9Relay_Cycle(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo)
{
uint8_t buff[7] = {0};
buff[0] = 0x00;
buff[1] = BLV_SN_Get(&DevHVoutInfo->RELAYSn, A9RELAYSnMin, A9RELAYSnMax);
buff[2] = A9EXPANDTYPE;
buff[3] = BUS_Public->addr;
buff[4] = 0x07;
buff[6] = 0x24; //cmd
buff[5] = CheckSum_Overlook_Check(buff, 0x07, 5);
MCU485_SendString(BUS_Public->port,buff,0x07);
}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_A9RELAY_Check
* Description : BLWA9RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_A9RELAY_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = IsNotMyData;
// uint8_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
Device_Public_Information_G BUS_Public;
NOR_HVOUT_INFO DevHVoutInfo;
uint8_t data[RECDATALENMAX];
uint32_t state = 0x00;
uint8_t temp_val = 0;
// uint8_t A9RELAY_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"A9IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[0] != BUS_Public.addr) || ((0x07 != len)&&(0x0A != len))) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> <20><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>!!\r\n");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
BLV_Communication_Record(&DevHVoutInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[6])
{
case 0x33: //<2F><><EFBFBD><EFBFBD>״̬
break;
case 0x30:
rev = IsMyData;
if(DevHVoutInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevHVoutInfo LogInfo_Device_Online...........");
LOG_Device_Online_Record(BUS_Public.type,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
DevHVoutInfo.DevSendCnt = 0x00;
DevHVoutInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(DevHVoutInfo.DevOffline != DevHVoutInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
DevHVoutInfo.DevOfflineLast = DevHVoutInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
DevHVoutInfo.DevChangeFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record3(dev_addr+Dev_port,dev_addr+Dev_baud,data_addr,len);
break;
case 0x34:
//2023-07-29
DevHVoutInfo.A9Relay_ReadFlag = 0x00;
DevHVoutInfo.DevSendCnt = 0x00;
state |= data[9]<<16;
state |= data[8]<<8;
state |= data[7];
for(uint8_t i = 0; i < DevHVoutInfo.HVoutLoopValidNum; i++)
{
temp_val = ( (state >> i ) & 0x01 );
if( DevHVoutInfo.DevHVoutSaveState[i] != temp_val)
{
DevHVoutInfo.DevHVoutSaveState[i] = temp_val;
if( temp_val == 0x01 )
{
Udp_Addtion_Roomstate(Dev_Host_HVout,BUS_Public.addr,i+1,0x01);
}
else if( temp_val == 0x00 )
{
Udp_Addtion_Roomstate(Dev_Host_HVout,BUS_Public.addr,i+1,0x02);
}
}
}
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),dev_addr+Dev_Privately);
}
return rev;
}
/*******************************************************************************
* Function Name : BLW_A9RELAY_Control_State
* Description : BLWA9RELAY<41><59>չ<EFBFBD><D5B9>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void BLW_A9RELAY_Control_State(uint32_t devaddr,uint8_t loop,uint8_t start)
//{
//// uint16_t temp = 0;
// uint8_t temp1 = 0;
// Device_Public_Information_G BUS_Public;
// NOR_HVOUT_INFO DevHVoutInfo;
//
// if(devaddr == 0x00) return;
//
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
// SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(loop < DevHVoutInfo.HVoutLoopValidNum) //<2F><>Ч<EFBFBD><D0A7>·
// {
// if(DevHVoutInfo.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// DevHVoutInfo.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
// }
//
// if(temp1 != 0x00)
// {
// BUS_Public.check = 0x00;
// BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
// SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
// SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// }
//}
/*******************************************************************************
* Function Name : BLW_A9RELAY_Read_State
* Description : BLWA9RELAY<41><59>չ<EFBFBD><D5B9>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
//uint8_t BLW_A9RELAY_Read_State(uint32_t devaddr,uint8_t loop)
//{
// if(devaddr == 0x00)
// return 0x00;
//
// NOR_HVOUT_INFO DevHVoutInfo;
//
// SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(loop >= DevHVoutInfo.HVoutLoopValidNum)
// {
// return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
// }
//
// return DevHVoutInfo.DevSendBuf[loop];
//
//}
/*<2A><>ȡA9RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
//uint8_t Get_BLV485_A9RELAY_Online_Status(uint32_t devaddr)
//{
// NOR_HVOUT_INFO DevHVoutInfo;
//
// SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(DevHVoutInfo.DevOffline == DEV_IS_ONLINE)
// {
// return 0x01;
// }
// return 0x02;
//}
#define A9EXPANDCTRLLEN 12 //<2F><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @name BLW 9· <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_A9RELAY_Ctrl(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo)
{
// uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port); //ͨѶ<CDA8>˿<EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD 4<><34><EFBFBD><EFBFBD>
uint8_t SendBuf[A9EXPANDCTRLLEN] = {0x00, 0x00, A9EXPANDTYPE, 0x00, A9EXPANDCTRLLEN, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}; //
uint8_t i;
SendBuf[1] |= BLV_SN_Get(&DevHVoutInfo->RELAYSn, A9RELAYSnMin, A9RELAYSnMax);
SendBuf[3] = BUS_Public->addr; // DevAddr;
// memcpy(&SendBuf[6], &RS485RelayExpandInfo.DevRelayBuf[SwiAddr*2], 2); //<2F><>չ<EFBFBD><20>±<EFBFBD><C2B1><EFBFBD>5<EFBFBD><35>ʼ
for(i = 0; i < DevHVoutInfo->HVoutLoopValidNum; i++)
{
switch(DevHVoutInfo->DevHVoutState[i])
{
case 0x01:
SendBuf[7+i/4] |= 0x02<<((i%4)*2); //<2F><>
break;
case 0x00:
SendBuf[7+i/4] |= 0x01<<((i%4)*2); //<2F><>
break;
}
}
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9EXPANDCTRLLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,A9EXPANDCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, SendBuf,A9EXPANDCTRLLEN);
}
/**@name <20><>չ<EFBFBD><D5B9>״̬<D7B4><EFBFBD><E4BBAF>
*@para <20><>
*@ret Ϊ1 <20>б仯 Ϊ0 <20>ޱ仯
*/
//uint8_t A9RELAY_State_Change_Get(uint32_t devaddr)
//{
// uint8_t i;
// uint8_t Ret = 0x00;
// uint8_t temp1 = 0;
// Device_Public_Information_G BUS_Public;
// NOR_HVOUT_INFO DevHVoutInfo;
// if(devaddr == 0x00) return 0;
//
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
// SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// for(i = 0; i < DevHVoutInfo.HVoutLoopValidNum; i ++)
// {
// if(DevHVoutInfo.DevSendBufNext[i] != DevHVoutInfo.DevSendBuf[i]) //״̬<D7B4>
// {
// Ret = 0x01; //<2F>б
// temp1++;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9RELAY<41><59>չ<EFBFBD><D5B9>״̬<D7B4>仯 DevSendBuf loop:%d,start:%d\r\n", i, DevHVoutInfo.DevSendBuf[i]); //<2F><>չ<EFBFBD><D5B9>״̬<D7B4><EFBFBD><E4BBAF>ӡ
//
// memcpy(DevHVoutInfo.DevSendBufNext, DevHVoutInfo.DevSendBuf, DevHVoutInfo.HVoutLoopValidNum); //ͬ<><CDAC>״̬
// break;
// }
// }
//
// if(temp1 != 0x00)
// {
// BUS_Public.check = 0x00;
// BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
// SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
// SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// }
//
// return Ret;
//}
/*******************************************************************************
* Function Name : BLW_A9RELAY_Control_State
* Description : BLWA9RELAY<41><59>չ<EFBFBD><D5B9>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void Dev_A9RELAY_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start)
//{
// uint8_t temp1 = 0;
// Device_Public_Information_G BUS_Public;
// NOR_HVOUT_INFO DevHVoutInfo;
//
// if(devaddr == 0x00) return;
//
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
// SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(loop < DevHVoutInfo.HVoutLoopValidNum) //<2F><>Ч<EFBFBD><D0A7>·
// {
// if(DevHVoutInfo.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// DevHVoutInfo.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9IO DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
// }
//
// if(temp1 != 0x00)
// {
// BUS_Public.check = 0x00;
// BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
// SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
// SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// }
//}
/*******************************************************************************
* Function Name : BLW_A9RELAY_Read_State
* Description : BLWA9RELAY<41><59>չ<EFBFBD><D5B9>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
//uint16_t Dev_A9RELAY_Read(uint32_t devaddr,uint16_t loop)
//{
// if(devaddr == 0x00)
// return 0x00;
//
// NOR_HVOUT_INFO DevHVoutInfo;
//
// SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(loop >= DevHVoutInfo.HVoutLoopValidNum)
// {
// return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
// }
//
// return DevHVoutInfo.DevSendBuf[loop];
//
//}
/*******************************************************************************
* Function Name : BLW_A9RELAY_Group_Ctrl
* Description : BLW<4C><57>չ<EFBFBD><D5B9>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void BLW_A9RELAY_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start)
//{
// uint8_t temp1 = 0;
//// uint1_t state; //0<><30> 1<><31>
// uint8_t i;
// Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
// NOR_HVOUT_INFO DevA9RELAYInfo; //<2F><>չ<EFBFBD><D5B9><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// if(devaddr == 0x00) return;
//
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// SRAM_DMA_Read_Buff((uint8_t *)&DevA9RELAYInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(CtrlNum >= DevA9RELAYInfo.HVoutLoopValidNum)
// {
// CtrlNum = DevA9RELAYInfo.HVoutLoopValidNum;
// }
// for(i = 0; i < CtrlNum; i++)
// {
// if(CtrlFlag&(0x0001<<i)) //<2F><><30><CEAA><EFBFBD><EFBFBD>
// {
// switch(start[i])
// {
// case 0x01: //<2F><><EFBFBD>ƿ<EFBFBD>
// case 0x02://<2F><><EFBFBD>ƹ<EFBFBD>
// DevA9RELAYInfo.DevSendBuf[i] = start[i];
// break;
// }
// }
// }
//
//
// if(temp1 != 0x00)
// {
// BUS_Public.check = 0x00;
// BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevA9RELAYInfo, sizeof(NOR_HVOUT_INFO));
// SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
// SRAM_DMA_Write_Buff((uint8_t *)&DevA9RELAYInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// }
//}
/*******************************************************************************
* Function Name : BLW_A9RELAY_Group_Ctrl
* Description : BLW<4C><57>չ<EFBFBD><D5B9>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD> <20><><EFBFBD>ؿ<EFBFBD> <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ع<EFBFBD>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//uint16_t BLW_A9RELAY_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start)
//{
// uint8_t i;
// uint8_t Ret = 0x00;
// NOR_HVOUT_INFO DevA9RELAYInfo; //<2F><>չ<EFBFBD><D5B9><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
//
// if(devaddr == 0x00) return 0x00;
//
//
//// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><>չ<EFBFBD><D5B9>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>·<EFBFBD><C2B7>־:%08X ", ReadFlag);
// SRAM_DMA_Read_Buff((uint8_t *)&DevA9RELAYInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
//
// if(ReadNum >= DevA9RELAYInfo.HVoutLoopValidNum)
// {
// ReadNum = DevA9RELAYInfo.HVoutLoopValidNum;
// }
// switch(SceneType)
// {
// case 0x01:
// for(i = 0; i < ReadNum; i++)
// {
// if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
// {
// switch(start[i])
// {
// case 0x01: //״̬<D7B4><CCAC>
// case 0x02: //״̬<D7B4><CCAC>
// if(DevA9RELAYInfo.DevSendBuf[i] != start[i])
// {
// Ret = DEV_STATE_CLOSE;
// }
// // Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><>չ<EFBFBD><D5B9>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7><EFBFBD><EFBFBD>:%04X ", start[i]);
//
// break;
// }
// }
// }
// break;
// case 0x02:
// for(i = 0; i < ReadNum; i++)
// {
// if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
// {
// if(0x01 == start[i])//״̬<D7B4><CCAC>
// {
// // Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><>չ<EFBFBD><D5B9>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7><EFBFBD><EFBFBD>:%04X ", start[i]);
// if(DevA9RELAYInfo.DevSendBuf[i] == 0x01)//Ϊ1
// {
// Ret = DEV_STATE_OPEN;
// break;
// }
//
// }
// }
// }
// break;
// }
// if(0x00 == Ret) //
// {
// switch(SceneType)
// {
// case 0x01:
// Ret = DEV_STATE_OPEN;
// break;
// case 0x02:
// Ret = DEV_STATE_CLOSE;
// break;
// }
// }
// return Ret;
//}

View File

@@ -0,0 +1,30 @@
#ifndef _BLV_485_DEV_A9RELAYFUN_H_
#define _BLV_485_DEV_A9RELAYFUN_H_
#include "stdint.h"
#include "BLV_Nor_Dev_HVoutFun.h"
void BLW_RS485_A9RELAY_Data_Init(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo);
#endif

View File

@@ -0,0 +1,661 @@
#include "BLV_485_Dev_AirDetectFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "Log_api.h"
/*AirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define AirDetectUPLIGHT 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80
//#define AirDetectDOWNLIGHT 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20
//#define AirDetectGRADUALTIME 30 //30 <20><>300ms
//#define A9EXPANDTYPE 14 //AirDetect<63><74><EFBFBD><EFBFBD>
//#define AirDetectSnMin 0x08 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
//#define AirDetectSnMax 0x0F //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define AIR_QUALITY_DETECTION_SAVE_TIME 30000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B1A3>ʱ<EFBFBD><CAB1>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_AirDetectCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_AirDetect_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
//void BLW_Rs485_AirDetect_4LOOP_Ctrl(uint32_t devaddr, RS485_AirDetect_INFO* Rs485AirDetectInfo);
void BLW_AirDetect_Cycle(Device_Public_Information_G *BUS_Public, RS485_AirDetect_INFOP Rs485AirDetectInfo);
//void Dev_AirDetect_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
uint16_t Dev_AirDetect_Read(uint32_t devaddr,uint16_t loop);
void save_air_detection_state(Device_Public_Information_G *bus,RS485_AirDetect_INFO *air_detection);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_AirDetect_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_AirDetect_Data_Init(uint8_t devaddr)
{
Device_Public_Information_G BUS_Public;
RS485_AirDetect_INFO Rs485AirDetect;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485AirDetect,0,sizeof(RS485_AirDetect_INFO));
BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = DEV_AirDetectTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x00C8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 200ms
BUS_Public.polling_cf = (uint32_t)&BLW_AirDetectCycleCtrl;
BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_AirDetect_Check;
// BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_AirDetect_Ctrl;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_AirDetect_Read;
/*<2A><>ʼ<EFBFBD><CABC>AirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ*/
Rs485AirDetect.AirDetectInputValidNum = AirDetectValidMax;
Rs485AirDetect.DevOffline = Rs485AirDetect.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO));
}
/*******************************************************************************
* Function Name : BLW_RS485_AirDetect_Data_For_Logic_Init 2022-08-30
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_AirDetect_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_AirDetect_INFO Rs485AirDetect;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485AirDetect,0,sizeof(RS485_AirDetect_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x00C8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLW_AirDetectCycleCtrl;
BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_AirDetect_Check;
BUS_Public.Protocol = 0x01; //dev_info->version
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_AirDetect_Read;
/*<2A><>ʼ<EFBFBD><CABC>AirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ*/
Rs485AirDetect.AirDetectInputValidNum = AirDetectValidMax;
Rs485AirDetect.DevOffline = Rs485AirDetect.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO));
Poll485_Info.device_num += 1;
}
/*******************************************************************************
* Function Name : BLW_AirDetectCycleCtrl
* Description : BLWAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_AirDetectCycleCtrl(uint32_t dev_addr)
{
uint16_t temp = 0;
uint8_t crc_val = 0;
// uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYTIME; //Ĭ<><C4AC>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
RS485_AirDetect_INFO Rs485AirDetectInfo;
Device_Public_Information_G BUS_Public;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetectInfo,sizeof(RS485_AirDetect_INFO),dev_addr+Dev_Privately);
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr);
// for(i = 0; i < Rs485AirDetectInfo.AirDetectInputValidNum; i++)
// {
// if(Rs485AirDetectInfo.DevSendBuf_last[i] != Rs485AirDetectInfo.DevSendBuf[i])
// {
// Rs485AirDetectInfo.AirDetectCtrlFlag = 0x01;
// Rs485AirDetectInfo.AirDetectCtrlCnt = REPEATSENDTIMEMAX;
// memcpy(Rs485AirDetectInfo.DevSendBuf_last, Rs485AirDetectInfo.DevSendBuf, Rs485AirDetectInfo.AirDetectInputValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// break;
// }
// }
// if(0x01 == Rs485AirDetectInfo.AirDetectCtrlFlag)
// {
// if(0x00 != Rs485AirDetectInfo.AirDetectCtrlCnt)
// {
// Rs485AirDetectInfo.AirDetectCtrlCnt--;
// }
// else
// {
// Rs485AirDetectInfo.AirDetectCtrlFlag = 0x00;
// }
// BLW_Rs485_AirDetect_4LOOP_Ctrl(dev_addr, &Rs485AirDetectInfo); //4·<34><C2B7><EFBFBD>ƣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
// Ret = RS485OCCUPYTIME;
//
// /*ͨѶ<CDA8><D1B6>¼*/
// BLV_Communication_Record(&Rs485AirDetectInfo.comm_record,0x01,0x00);
// }
BLW_AirDetect_Cycle(&BUS_Public, &Rs485AirDetectInfo);
// if(RS485OCCUPYTIME == Ret)
{
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485AirDetectInfo.comm_record,0x01,0x00);
Rs485AirDetectInfo.inquire_tick = SysTick_1ms;
if(Rs485AirDetectInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485AirDetectInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s DEV_OFFLINE",__func__);
LOG_Device_Online_Record(DEV_AirDetectTYPE,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485AirDetectInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485AirDetectInfo.DevOffline != Rs485AirDetectInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485AirDetectInfo.DevOfflineLast = Rs485AirDetectInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485AirDetectInfo.DevSendCnt++; //
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirDetectInfo,sizeof(RS485_AirDetect_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_AirDetect_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"AirDetect crc_val:%02X\r\n",crc_val);
}
return Ret;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>*/
#define BLWAIRDETECTCYCLELEN 0x08
void BLW_AirDetect_Cycle(Device_Public_Information_G *BUS_Public, RS485_AirDetect_INFOP Rs485AirDetectInfo)
{
uint8_t SendData[BLWAIRDETECTCYCLELEN];
SendData[0] = BUS_Public->addr; //<2F><>ַ
SendData[1] = 0x03; //<2F><>
SendData[2] = 0x00; //<2F><>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD>ֽ<EFBFBD>
SendData[3] = 0x02; //<2F><>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD>ֽ<EFBFBD>
SendData[4] = 0x00; //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
SendData[5] = 0x07; //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
NetCRC16(SendData,8);
// SendData[2] = CheckSum_Overlook_Check(SendData, BLWAIRDETECTCYCLELEN, 0x02); //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
MCU485_SendString(BUS_Public->port,SendData,BLWAIRDETECTCYCLELEN);
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*@para
* BUS_Public <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
* data <20><><EFBFBD>ݰ<EFBFBD>
* Rs485AirDetect ˽<>б<EFBFBD><D0B1><EFBFBD>
*@ret 0<><30>ʾ<EFBFBD>ޱ仯 1<><31>ʾ<EFBFBD>б
*/
uint8_t AirDetectDataProc(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_AirDetect_INFO *Rs485AirDetect)
{
uint8_t Ret = 0x00;
uint8_t i;
for(i = 0x00; i < Rs485AirDetect->AirDetectInputValidNum; i++) //
{
Rs485AirDetect->DevReadBuf[i] = (data[3+2*i]<<8)+data[3+2*i+1]; //
switch(i)
{
case AirDetectCH2O: //<2F><>ȩŨ<C8A9><C5A8> <20><>λ ug/m^3
case AirDetectTVOC: //TVOCŨ<43><C5A8> <20><>λ ug/m^3
case AirDetectPM2_5: //PM2.5Ũ<EFBFBD><EFBFBD> <20><>λ ug/m^3
case AirDetectPM10: //PM10Ũ<30><C5A8>ֵ <20><>λ ug/m^3
if(Rs485AirDetect->DevReadBuf_last[i]/20 != Rs485AirDetect->DevReadBuf[i]/20)
{
Ret = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"AirDetect :%d,<2C><><EFBFBD><EFBFBD>:%04X:%04X!", i, Rs485AirDetect->DevReadBuf_last[i]/10, Rs485AirDetect->DevReadBuf[i]/10);
Rs485AirDetect->DevReadBuf_last[i] = Rs485AirDetect->DevReadBuf[i];
}
break;
case AirDetectTemperature: //<2F><EFBFBD> <20><><EFBFBD>Ŵ<EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ <20><>
if(Rs485AirDetect->DevReadBuf_last[i]/10 != Rs485AirDetect->DevReadBuf[i]/10)
{
Ret = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"AirDetect :%d,<2C><><EFBFBD><EFBFBD>:%04X:%04X!", i, Rs485AirDetect->DevReadBuf_last[i]/10, Rs485AirDetect->DevReadBuf[i]/10);
Rs485AirDetect->DevReadBuf_last[i] = Rs485AirDetect->DevReadBuf[i];
}
break;
case AirDetectCO2: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼Ũ<CCBC><C5A8> <20><>λ ppm
case AirDetectHumidity: //ʪ<><CAAA> <20><><EFBFBD>Ŵ<EFBFBD>ʮ<EFBFBD><CAAE> <20><>λ %RH
if(Rs485AirDetect->DevReadBuf_last[i]/50 != Rs485AirDetect->DevReadBuf[i]/50)
{
Ret = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"AirDetect :%d,<2C><><EFBFBD><EFBFBD>:%04X:%04X!", i, Rs485AirDetect->DevReadBuf_last[i]/50, Rs485AirDetect->DevReadBuf[i]/50);
Rs485AirDetect->DevReadBuf_last[i] = Rs485AirDetect->DevReadBuf[i];
}
break;
}
}
return Ret;
}
#define RECDATALENMAX 19
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_AirDetect_Check
* Description : BLWAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_AirDetect_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLW_Rs485_AirDetect_Check\r\n");
uint8_t rev = IsNotMyData;
uint8_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
RS485_AirDetect_INFO Rs485AirDetect;
uint8_t data[RECDATALENMAX];
Device_Public_Information_G BUS_Public;
uint16_t crc_val; //У<><D0A3>
// uint8_t AirDetect_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Len Error",__func__);
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),dev_addr+Dev_Privately);
if((data[0] != BUS_Public.addr)|| (data[2] + 0x05 != len)) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> <20><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Check Error",__func__);
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
crc_val = data[len-2] + (data[len-1]<<8);
if(crc_val == NetCRC16_2(data, len-2)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
BLV_Communication_Record(&Rs485AirDetect.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[1])
{
case 0x03: //<2F><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>״̬<D7B4>ظ<EFBFBD>
rev = IsMyData;
if(AirDetectDataProc(&BUS_Public, data, &Rs485AirDetect))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"AirDetect Reply Change");
LOG_Device_COMM_ASK_TO_Reply_Record(BUS_Public.port, BUS_Public.baud,(SysTick_1ms - Rs485AirDetect.inquire_tick),data,len);
}
if(Rs485AirDetect.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Device_Online",__func__);
LOG_Device_Online_Record(DEV_AirDetectTYPE,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
save_air_detection_state(&BUS_Public, &Rs485AirDetect);
Rs485AirDetect.DevSendCnt = 0x00;
Rs485AirDetect.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485AirDetect.DevOffline != Rs485AirDetect.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485AirDetect.DevOfflineLast = Rs485AirDetect.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
// Rs485AirDetect.AirDetectCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
break;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_AirDetect_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
// else {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",crc_val,SRAM_CRC16(data_addr,len - 2));
//
// }
return rev;
}
/*******************************************************************************
* Function Name : BLW_AirDetect_Control_State
* Description : BLWAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void BLW_AirDetect_Control_State(uint32_t devaddr,uint8_t loop,uint8_t start)
//{
// uint16_t temp = 0;
// uint8_t crc_val = 0,temp1 = 0;
//
// if(devaddr == 0x00) return;
//
// RS485_AirDetect_INFO Rs485AirDetect;
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
//
// if(loop < Rs485AirDetect.AirDetectInputValidNum) //<2F><>Ч<EFBFBD><D0A7>·
// {
// if(Rs485AirDetect.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// Rs485AirDetect.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
// }
//
// if(temp1 != 0x00)
// {
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_AirDetect_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// }
//}
/*******************************************************************************
* Function Name : BLW_AirDetect_Read_State
* Description : BLWAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
uint8_t BLW_AirDetect_Read_State(uint32_t devaddr,uint8_t loop)
{
if(devaddr == 0x00)
return 0x00;
RS485_AirDetect_INFO Rs485AirDetect;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
if(loop >= Rs485AirDetect.AirDetectInputValidNum)
{
return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
}
return Rs485AirDetect.DevReadBuf[loop];
}
/*<2A><>ȡAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
uint8_t Get_BLV485_AirDetect_Online_Status(uint32_t devaddr)
{
RS485_AirDetect_INFO Rs485AirDetect;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
if(Rs485AirDetect.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
#define A9EXPANDCTRLLEN 12 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @name BLW 4· <20><><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
//void BLW_Rs485_AirDetect_4LOOP_Ctrl(uint32_t dev_addr, RS485_AirDetect_INFO* Rs485AirDetectInfo)
//{
// uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port); //ͨѶ<CDA8>˿<EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD 4<><34><EFBFBD><EFBFBD>
// uint8_t SendBuf[A9EXPANDCTRLLEN] = {0x00, 0x00, A9EXPANDTYPE, 0x00, A9EXPANDCTRLLEN, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}; //
// uint8_t i;
// SendBuf[1] |= BLV_SN_Get(&Rs485AirDetectInfo->AirDetectSn, AirDetectSnMin, AirDetectSnMax);
//
// SendBuf[3] = DevAddr;
//// memcpy(&SendBuf[6], &RS485RelayExpandInfo.DevRelayBuf[SwiAddr*2], 2); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20>±<EFBFBD><C2B1><EFBFBD>5<EFBFBD><35>ʼ
// for(i = 0; i < Rs485AirDetectInfo->AirDetectInputValidNum; i++)
// {
// switch(Rs485AirDetectInfo->DevSendBuf[i])
// {
// case 0x01:
// SendBuf[7+i/4] |= 0x02<<((i%4)*2); //<2F><>
// break;
// case 0x02:
// SendBuf[7+i/4] |= 0x01<<((i%4)*2); //<2F><>
// break;
// }
// }
// SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9EXPANDCTRLLEN, 5);
//
// MCU485_SendString(port,SendBuf,A9EXPANDCTRLLEN);
//
// /*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,SendBuf,A9EXPANDCTRLLEN);
//}
/**@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>
*@para <20><>
*@ret Ϊ1 <20>б仯 Ϊ0 <20>ޱ仯
*/
//uint8_t AirDetect_State_Change_Get(uint32_t devaddr)
//{
// uint8_t i;
// uint8_t Ret = 0x00;
// uint16_t temp = 0;
// uint8_t crc_val = 0,temp1 = 0;
// if(devaddr == 0x00) return 0;
//
// RS485_AirDetect_INFO Rs485AirDetectInfo;
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetectInfo,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
//
// for(i = 0; i < Rs485AirDetectInfo.AirDetectInputValidNum; i ++)
// {
// if(Rs485AirDetectInfo.DevSendBufNext[i] != Rs485AirDetectInfo.DevSendBuf[i]) //״̬<D7B4>
// {
// Ret = 0x01; //<2F>б
// temp1++;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"AirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>仯 DevSendBuf loop:%d,start:%d\r\n", i, Rs485AirDetectInfo.DevSendBuf[i]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>ӡ
//
// memcpy(Rs485AirDetectInfo.DevSendBufNext, Rs485AirDetectInfo.DevSendBuf, Rs485AirDetectInfo.AirDetectInputValidNum); //ͬ<><CDAC>״̬
// break;
// }
// }
//
// if(temp1 != 0x00)
// {
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirDetectInfo,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_AirDetect_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// }
//
// return Ret;
//}
/*******************************************************************************
* Function Name : BLW_AirDetect_Control_State
* Description : BLWAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void Dev_AirDetect_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start)
//{
// uint16_t temp = 0;
// uint8_t crc_val = 0,temp1 = 0;
//
// if(devaddr == 0x00) return;
//
// RS485_AirDetect_INFO Rs485AirDetect;
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
//
// if(loop < Rs485AirDetect.AirDetectInputValidNum) //<2F><>Ч<EFBFBD><D0A7>·
// {
// if(Rs485AirDetect.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// Rs485AirDetect.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
// }
//
// if(temp1 != 0x00)
// {
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_AirDetect_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// }
//}
/*******************************************************************************
* Function Name : BLW_AirDetect_Read_State
* Description : BLWAirDetect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
uint16_t Dev_AirDetect_Read(uint32_t devaddr,uint16_t loop)
{
if(devaddr == 0x00)
return 0x00;
RS485_AirDetect_INFO Rs485AirDetect;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),devaddr+Dev_Privately);
if(loop >= Rs485AirDetect.AirDetectInputValidNum)
{
return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
}
return Rs485AirDetect.DevReadBuf[loop];
}
/*******************************************************************************
* Function Name : read_air_detection_state
* Description : <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* Input : air_quality_detection - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ָ<EFBFBD><D6B8>
loop - <20><>ȡ<EFBFBD>Ļ<EFBFBD>·<EFBFBD><C2B7>
* Return : <20><>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ֵ
*******************************************************************************/
uint16_t read_air_detection_state(RS485_AirDetect_INFO *air_detection,uint8_t loop)
{
uint16_t temp = 0x00;
if(loop >= air_detection->AirDetectInputValidNum)
return 0;
if(loop==0x05||loop==0x06)
{
temp = air_detection->DevReadBuf[loop]/10;
if((air_detection->DevReadBuf[loop]%10)<4)
{
return temp;
}
else
{
return temp+1;
}
}
else
{
return air_detection->DevReadBuf[loop];
}
}
/*******************************************************************************
* Function Name : save_air_detection_state
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* Input : bus_public - <20><EFBFBD><E8B1B8><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>ָ<EFBFBD><D6B8>
air_quality_detection - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ָ<EFBFBD><D6B8>
* Return : none
*******************************************************************************/
void save_air_detection_state(Device_Public_Information_G *bus,RS485_AirDetect_INFO *air_detection)
{
if(SysTick_1ms >= air_detection->AirDetectCycleTime) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰʱ<C7B0><EFBFBD><E4B3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰʱ<C7B0><CAB1>
{
air_detection->AirDetectCycleTime = SysTick_1ms + AIR_QUALITY_DETECTION_SAVE_TIME; //<2F><><EFBFBD>µ<EFBFBD>ǰʱ<C7B0><CAB1>
for(uint8_t i = 0; i < air_detection->AirDetectInputValidNum; i++)
{
Udp_Addtion_Roomstate(DEV_RS485_AirDetect, bus->addr, i+1, read_air_detection_state(air_detection, i));
}
}
}

View File

@@ -0,0 +1,61 @@
#ifndef _BLV_485_DEV_AIRDETECTFUN_H_
#define _BLV_485_DEV_AIRDETECTFUN_H_
#include "includes.h"
#include "stdint.h"
#include "BLV_485_Protocol.h"
#define DEV_AirDetectTYPE 0x09
#define AirDetectCO2 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼Ũ<CCBC><C5A8> <20><>λ ppm
#define AirDetectCH2O 0x01 //<2F><>ȩŨ<C8A9><C5A8> <20><>λ ug/m^3
#define AirDetectTVOC 0x02 //TVOCŨ<43><C5A8> <20><>λ ug/m^3
#define AirDetectPM2_5 0x03 //PM2.5Ũ<EFBFBD><EFBFBD> <20><>λ ug/m^3
#define AirDetectPM10 0x04 //PM10Ũ<30><C5A8>ֵ <20><>λ ug/m^3
#define AirDetectTemperature 0x05 //<2F><EFBFBD> <20><><EFBFBD>Ŵ<EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ <20><>
#define AirDetectHumidity 0x06 //ʪ<><CAAA> <20><><EFBFBD>Ŵ<EFBFBD>ʮ<EFBFBD><CAAE> <20><>λ %RH
#define AirDetectValidMax 0x07 //7·<37><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct RS485_AirDetect_INFO* RS485_AirDetect_INFOP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
typedef struct RS485_AirDetect_INFO
{
// uint16_t CO2;
// uint16_t CH2O;
// uint16_t TVOC;
// uint16_t PM2_5;
// uint16_t PM10
// uint16_t Temperature;
// uint16_t Humidity;
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint16_t DevReadBuf[AirDetectValidMax]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF>u16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint16_t DevReadBuf_last[AirDetectValidMax]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF>u16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint64_t AirDetectCycleTime; //<2F><>ǰʱ<C7B0><CAB1>
uint8_t AirDetectInputValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_AirDetect_INFO; //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
//uint8_t Rs485_AirDetect_Data_Get(CFG_Dev_AddP CfgDevAdd);
void BLW_RS485_AirDetect_Data_Init(uint8_t devaddr);
void BLW_RS485_AirDetect_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,596 @@
#include "BLV_485_Dev_AirRevealFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "Log_api.h"
#include "BLV_Dev_Action.h"
#include "BLV_485_Dev_AirDetectFun.h"
/*AirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define AirRevealCtrlSendMax 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
#define AirRevealCtrlTIMEOUT 100 //<2F><><EFBFBD>Ƴ<EFBFBD>ʱʱ<CAB1><CAB1>
#define IRSENDCYCLETIME 1000 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define AirRevealValidMax 0x07 //7·<37><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define AirRevealReadLen 0x05 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
#define AirRevealAckLen 0x11 //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_AirRevealCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_AirReveal_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
//void BLW_Rs485_AirReveal_4LOOP_Ctrl(uint32_t devaddr, RS485_AirReveal_INFO* Rs485AirRevealInfo);
void BLW_AirReveal_Cycle(Device_Public_Information_G *BUS_Public, RS485_AirReveal_INFOP Rs485AirRevealInfo);
//void Dev_AirReveal_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
//uint16_t Dev_AirReveal_Read(uint32_t devaddr,uint16_t loop);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_AirReveal_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_AirReveal_Data_Init(uint8_t devaddr)
{
Device_Public_Information_G BUS_Public;
RS485_AirReveal_INFO Rs485AirReveal;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485AirReveal,0,sizeof(RS485_AirReveal_INFO));
BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = DEV_AirRevealTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x00C8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 200ms
// BUS_Public.polling_cf = (uint32_t)&BLW_AirRevealCycleCtrl;
BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_AirReveal_Check;
Rs485AirReveal.DevOffline = Rs485AirReveal.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
// BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_AirReveal_Ctrl;
// BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_AirReveal_Read;
/*<2A><>ʼ<EFBFBD><CABC>AirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʼֵ*/
Rs485AirReveal.CfgDevAddAirDetect = Find_AllDevice_List_Information(DEV_AirDetectTYPE, 0x01);
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO));
}
/*******************************************************************************
* Function Name : BLW_RS485_AirReveal_For_Logic_Init 2022-08-30
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_AirReveal_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_AirReveal_INFO Rs485AirReveal;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485AirReveal,0,sizeof(RS485_AirReveal_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x00C8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_AirReveal_Check;
BUS_Public.Protocol = 0x01; //dev_info->version
Rs485AirReveal.DevOffline = Rs485AirReveal.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
/*<2A><>ʼ<EFBFBD><CABC>AirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʼֵ*/
Rs485AirReveal.CfgDevAddAirDetect = Find_AllDevice_List_Information(DEV_AirDetectTYPE, 0x01);
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO));
}
/*******************************************************************************
* Function Name : BLW_AirRevealCycleCtrl
* Description : BLWAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_AirRevealCycleCtrl(uint32_t dev_addr)
{
uint16_t temp = 0;
uint8_t crc_val = 0;
// uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME; //Ĭ<>ϲ<EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
RS485_AirReveal_INFO Rs485AirRevealInfo;
Device_Public_Information_G BUS_Public;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirRevealInfo,sizeof(RS485_AirReveal_INFO),dev_addr+Dev_Privately);
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr);
if(0x01 == Rs485AirRevealInfo.AirRevealSynFlag)
{
if(0x00 != Rs485AirRevealInfo.AirRevealSynCnt)
{
Rs485AirRevealInfo.AirRevealSynCnt--;
}
else
{
Rs485AirRevealInfo.AirRevealSynFlag = 0x00;
}
// BLW_AirReveal_Ack(&BUS_Public, &Rs485AirRevealInfo); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>
Ret = RS485OCCUPYTIME; //<2F><><EFBFBD>ƾͱ<C6BE><CDB1><EFBFBD>һ
}
// BLW_AirReveal_Cycle(&BUS_Public, &Rs485AirRevealInfo);
// if(RS485OCCUPYTIME == Ret)
{
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485AirRevealInfo.comm_record,0x01,0x00);
Rs485AirRevealInfo.inquire_tick = SysTick_1ms;
if(Rs485AirRevealInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485AirRevealInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s DEV_OFFLINE",__func__);
LOG_Device_Online_Record(DEV_AirRevealTYPE,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485AirRevealInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485AirRevealInfo.DevOffline != Rs485AirRevealInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485AirRevealInfo.DevOfflineLast = Rs485AirRevealInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485AirRevealInfo.DevSendCnt++; //
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirRevealInfo,sizeof(RS485_AirReveal_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_AirReveal_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"AirReveal crc_val:%02X\r\n",crc_val);
}
return Ret;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>*/
//#define BLWAIRDETEASKLEN 17
void BLW_AirReveal_Ack(Device_Public_Information_G *BUS_Public, RS485_AirReveal_INFOP Rs485AirRevealInfo)
{
uint8_t SendData[AirRevealAckLen];
RS485_AirDetect_INFO Rs485AirDetect;
uint32_t dev_addr;
if(NULL == Rs485AirRevealInfo->CfgDevAddAirDetect)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>޿<EFBFBD><EFBFBD>õĿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return ;
}
dev_addr = Rs485AirRevealInfo->CfgDevAddAirDetect;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirDetect,sizeof(RS485_AirDetect_INFO),dev_addr+Dev_Privately);
SendData[0] = BUS_Public->addr; //<2F><>ַ
SendData[1] = 0x66; //<2F><>
memcpy(&SendData[2],(uint8_t *)Rs485AirDetect.DevReadBuf, Rs485AirDetect.AirDetectInputValidNum*2); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// NetCRC16(SendData,8);
SendData[AirRevealAckLen-1] = SOR_CRC(SendData,AirRevealAckLen-1);
MCU485_SendString(BUS_Public->port,SendData,AirRevealAckLen);
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*@para
* BUS_Public <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
* data <20><><EFBFBD>ݰ<EFBFBD>
* Rs485AirReveal ˽<>б<EFBFBD><D0B1><EFBFBD>
*@ret 0<><30>ʾ<EFBFBD>ޱ仯 1<><31>ʾ<EFBFBD>б
*/
//uint8_t AirRevealDataProc(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_AirReveal_INFO *Rs485AirReveal)
//{
// uint8_t Ret = 0x00;
// uint8_t i;
//
// return Ret;
//}
#define RECDATALENMAX AirRevealAckLen
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_AirReveal_Check
* Description : BLWAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_AirReveal_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLW_Rs485_AirReveal_Check\r\n");
uint8_t rev = IsNotMyData;
uint8_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
RS485_AirReveal_INFO Rs485AirReveal;
uint8_t data[RECDATALENMAX];
Device_Public_Information_G BUS_Public;
uint16_t crc_val; //У<><D0A3>
// uint8_t AirReveal_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),dev_addr+Dev_Privately);
if((data[0] != BUS_Public.addr)|| ((data[1] != 0x63)&&(data[1] != 0x66))) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> <20><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ж<EFBFBD>δͨ<CEB4><CDA8>!!\r\n");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>!!\r\n");
crc_val = data[len-1];//<2F><>У<EFBFBD><D0A3>
// crc_val = SOR_CRC(data, len-1);
if(crc_val == SOR_CRC(data, len-1)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>!!\r\n");
BLV_Communication_Record(&Rs485AirReveal.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[1])
{
case 0x63: //<2F><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>״̬<D7B4>ظ<EFBFBD>
rev = IsMyData;
BLW_AirReveal_Ack(&BUS_Public, &Rs485AirReveal);//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(AirRevealDataProc(&BUS_Public, data, &Rs485AirReveal))
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLV Rs485 AirReveal Reply Change\r\n");
// LOG_Device_COMM_ASK_TO_Reply_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,(SysTick_1ms - Rs485AirReveal.inquire_tick),data,len);
// }
if(Rs485AirReveal.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Device_Online",__func__);
LOG_Device_Online_Record(DEV_AirRevealTYPE,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485AirReveal.DevSendCnt = 0x00;
Rs485AirReveal.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485AirReveal.DevOffline != Rs485AirReveal.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485AirReveal.DevOfflineLast = Rs485AirReveal.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
// Rs485AirReveal.AirRevealCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
break;
case 0x66:
rev = IsMyData;
Rs485AirReveal.AirRevealSynFlag = 0x00;
Rs485AirReveal.DevSendCnt = 0x00;
Rs485AirReveal.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485AirReveal.DevOffline != Rs485AirReveal.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485AirReveal.DevOfflineLast = Rs485AirReveal.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
break;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_AirReveal_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
// else {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",crc_val,SRAM_CRC16(data_addr,len - 2));
//
// }
return rev;
}
/*******************************************************************************
* Function Name : BLW_AirReveal_Control_State
* Description : BLWAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void BLW_AirReveal_Control_State(uint32_t devaddr,uint8_t loop,uint8_t start)
//{
// uint16_t temp = 0;
// uint8_t crc_val = 0,temp1 = 0;
//
// if(devaddr == 0x00) return;
//
// RS485_AirReveal_INFO Rs485AirReveal;
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// if(loop < Rs485AirReveal.AirRevealInputValidNum) //<2F><>Ч<EFBFBD><D0A7>·
// {
// if(Rs485AirReveal.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// Rs485AirReveal.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
// }
//
// if(temp1 != 0x00)
// {
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_AirReveal_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// }
//}
/*******************************************************************************
* Function Name : BLW_AirReveal_Read_State
* Description : BLWAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
//uint8_t BLW_AirReveal_Read_State(uint32_t devaddr,uint8_t loop)
//{
// if(devaddr == 0x00)
// return 0x00;
//
// RS485_AirReveal_INFO Rs485AirReveal;
//
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// if(loop >= Rs485AirReveal.AirRevealInputValidNum)
// {
// return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
// }
//
// return Rs485AirReveal.DevReadBuf[loop];
//
//}
/*<2A><>ȡAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>״̬*/
//uint8_t Get_BLV485_AirReveal_Online_Status(uint32_t devaddr)
//{
// RS485_AirReveal_INFO Rs485AirReveal;
//
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// if(Rs485AirReveal.DevOffline == DEV_IS_ONLINE)
// {
// return 0x01;
// }
// return 0x02;
//}
#define A9EXPANDCTRLLEN 12 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @name BLW 4· <20><><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
//void BLW_Rs485_AirReveal_4LOOP_Ctrl(uint32_t dev_addr, RS485_AirReveal_INFO* Rs485AirRevealInfo)
//{
// uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port); //ͨѶ<CDA8>˿<EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD 4<><34><EFBFBD><EFBFBD>
// uint8_t SendBuf[A9EXPANDCTRLLEN] = {0x00, 0x00, A9EXPANDTYPE, 0x00, A9EXPANDCTRLLEN, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}; //
// uint8_t i;
// SendBuf[1] |= BLV_SN_Get(&Rs485AirRevealInfo->AirRevealSn, AirRevealSnMin, AirRevealSnMax);
//
// SendBuf[3] = DevAddr;
//// memcpy(&SendBuf[6], &RS485RelayExpandInfo.DevRelayBuf[SwiAddr*2], 2); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE> <20>±<EFBFBD><C2B1><EFBFBD>5<EFBFBD><35>ʼ
// for(i = 0; i < Rs485AirRevealInfo->AirRevealInputValidNum; i++)
// {
// switch(Rs485AirRevealInfo->DevSendBuf[i])
// {
// case 0x01:
// SendBuf[7+i/4] |= 0x02<<((i%4)*2); //<2F><>
// break;
// case 0x02:
// SendBuf[7+i/4] |= 0x01<<((i%4)*2); //<2F><>
// break;
// }
// }
// SendBuf[5] = CheckSum_Overlook_Check(SendBuf, A9EXPANDCTRLLEN, 5);
//
// MCU485_SendString(port,SendBuf,A9EXPANDCTRLLEN);
//
// /*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,SendBuf,A9EXPANDCTRLLEN);
//}
/**@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><EFBFBD><E4BBAF>
*@para <20><>
*@ret Ϊ1 <20>б仯 Ϊ0 <20>ޱ仯
*/
//uint8_t AirReveal_State_Change_Get(uint32_t devaddr)
//{
// uint8_t i;
// uint8_t Ret = 0x00;
// uint16_t temp = 0;
// uint8_t crc_val = 0,temp1 = 0;
// if(devaddr == 0x00) return 0;
//
// RS485_AirReveal_INFO Rs485AirRevealInfo;
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirRevealInfo,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// for(i = 0; i < Rs485AirRevealInfo.AirRevealInputValidNum; i ++)
// {
// if(Rs485AirRevealInfo.DevSendBufNext[i] != Rs485AirRevealInfo.DevSendBuf[i]) //״̬<D7B4>
// {
// Ret = 0x01; //<2F>б
// temp1++;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"AirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4>仯 DevSendBuf loop:%d,start:%d\r\n", i, Rs485AirRevealInfo.DevSendBuf[i]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><EFBFBD><E4BBAF>ӡ
//
// memcpy(Rs485AirRevealInfo.DevSendBufNext, Rs485AirRevealInfo.DevSendBuf, Rs485AirRevealInfo.AirRevealInputValidNum); //ͬ<><CDAC>״̬
// break;
// }
// }
//
// if(temp1 != 0x00)
// {
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirRevealInfo,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_AirReveal_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// }
//
// return Ret;
//}
/*******************************************************************************
* Function Name : BLW_AirReveal_Control_State
* Description : BLWAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
//void Dev_AirReveal_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start)
//{
// uint16_t temp = 0;
// uint8_t crc_val = 0,temp1 = 0;
//
// if(devaddr == 0x00) return;
//
// RS485_AirReveal_INFO Rs485AirReveal;
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// if(loop < Rs485AirReveal.AirRevealInputValidNum) //<2F><>Ч<EFBFBD><D0A7>·
// {
// if(Rs485AirReveal.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// Rs485AirReveal.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
// }
//
// if(temp1 != 0x00)
// {
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_AirReveal_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// }
//}
/*******************************************************************************
* Function Name : BLW_AirReveal_Read_State
* Description : BLWAirReveal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
//uint16_t Dev_AirReveal_Read(uint32_t devaddr,uint16_t loop)
//{
// if(devaddr == 0x00)
// return 0x00;
//
// RS485_AirReveal_INFO Rs485AirReveal;
//
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485AirReveal,sizeof(RS485_AirReveal_INFO),devaddr+Dev_Privately);
//
// if(loop >= Rs485AirReveal.AirRevealInputValidNum)
// {
// return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
// }
//
// return Rs485AirReveal.DevReadBuf[loop];
//
//}

View File

@@ -0,0 +1,60 @@
#ifndef _BLV_485_DEV_AirRevealFUN_H_
#define _BLV_485_DEV_AirRevealFUN_H_
#include "includes.h"
#include "stdint.h"
#include "BLV_485_Protocol.h"
#define DEV_AirRevealTYPE 33
#define AirRevealCO2 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼Ũ<CCBC><C5A8> <20><>λ ppm
#define AirRevealCH2O 0x01 //<2F><>ȩŨ<C8A9><C5A8> <20><>λ ug/m^3
#define AirRevealTVOC 0x02 //TVOCŨ<43><C5A8> <20><>λ ug/m^3
#define AirRevealPM2_5 0x03 //PM2.5Ũ<EFBFBD><EFBFBD> <20><>λ ug/m^3
#define AirRevealPM10 0x04 //PM10Ũ<30><C5A8>ֵ <20><>λ ug/m^3
#define AirRevealTemperature 0x05 //<2F><EFBFBD> <20><><EFBFBD>Ŵ<EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ <20><>
#define AirRevealHumidity 0x06 //ʪ<><CAAA> <20><><EFBFBD>Ŵ<EFBFBD>ʮ<EFBFBD><CAAE> <20><>λ %RH
#define AirRevealValidMax 0x07 //7·<37><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct RS485_AirReveal_INFO* RS485_AirReveal_INFOP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
typedef struct RS485_AirReveal_INFO
{
// uint16_t CO2;
// uint16_t CH2O;
// uint16_t TVOC;
// uint16_t PM2_5;
// uint16_t PM10
// uint16_t Temperature;
// uint16_t Humidity;
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t AirRevealSynFlag; //ͬ<><CDAC><EFBFBD><EFBFBD>־
uint8_t AirRevealSynCnt; //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t CfgDevAddAirDetect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_AirReveal_INFO; //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
//uint8_t Rs485_AirReveal_Data_Get(CFG_Dev_AddP CfgDevAdd);
void BLW_RS485_AirReveal_Data_Init(uint8_t devaddr);
void BLW_RS485_AirReveal_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,853 @@
/**
******************************************************************************
* @file BLV_485_Dev_BLE_Music.c
* @author BLW RCU development Team
* @version 1.0
* @date 2024<32><34>11<31><31>23<32><33>
* @brief MP2411<31><31>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "includes.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t BLV_Rs485_BLE_Music_CycleDis(uint32_t DevAdd);
uint8_t BLV_Rs485_BLE_Music_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
uint8_t Dev_BLE_Music_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
void Dev_BLE_Music_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType);
uint16_t Dev_BLE_Music_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
void BLE_Query_Status(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLE_Set_Name(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLE_Set_PlayStatus(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLE_Set_Volume(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLE_Query_VerInf(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLE_Event_Ack(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLE_ReFresh_PassWord(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo);
void BLV_RS485_BLE_Music_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
uint8_t roomnumber[50];
Device_Public_Information_G BUS_Public;
BLE_MUSIC_INFO BleMusicInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&BleMusicInfo,0,sizeof(BLE_MUSIC_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03;//dev_info->retry; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 200;//dev_info->writ_time; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLV_Rs485_BLE_Music_CycleDis;
BUS_Public.processing_cf = (uint32_t)&BLV_Rs485_BLE_Music_Check;
BUS_Public.Protocol = dev_info->version;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_BLE_Music_InType_Get;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_BLE_Music_Output_Ctrl;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_BLE_Music_Loop_State;
BleMusicInfo.InputValidNum = dev_info->input_num;
BleMusicInfo.OutputValidNum = dev_info->output_num;
BleMusicInfo.DevOffline = BleMusicInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
BleMusicInfo.SetName_Flag = 0x01;
memcpy((uint8_t *)&BleMusicInfo.Ble_Name_Prefixes,dev_info->priproperty,10);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Music Prefixes:",BleMusicInfo.Ble_Name_Prefixes,10);
SRAM_Read_Buff(roomnumber,16,SRAM_Register_Start_ADDRESS + Register_RoomNumNote_OFFSET);
snprintf((char*)BleMusicInfo.Ble_Name,sizeof(BleMusicInfo.Ble_Name),"%s%c%s",BleMusicInfo.Ble_Name_Prefixes,'-',roomnumber);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Music Name:",BleMusicInfo.Ble_Name,32);
BleMusicInfo.RState_Flag = 0x01;
BleMusicInfo.HSPlayTime = 600;
BleMusicInfo.HSPlayStartVol = 80;
BleMusicInfo.HSPlayEndVol = 10;
BleMusicInfo.CurePlayTime = 600;
BleMusicInfo.CurePlayStartVol = 80;
BleMusicInfo.CurePlayEndVol = 10;
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
uint8_t BLV_Rs485_BLE_Music_CycleDis(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
BLE_MUSIC_INFO BleMusicInfo;
uint8_t Ret = RS485OCCUPYNOTIME;
uint8_t keep_flag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
SRAM_DMA_Read_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(BleMusicInfo.RState_Flag != 0x00) //<2F><>ѯ״̬
{
BLE_Query_Status(&BUS_Public,&BleMusicInfo);
Ret = RS485OCCUPYTIME;
}
else if(BleMusicInfo.SetName_Flag != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BLE_Set_Name(&BUS_Public,&BleMusicInfo);
Ret = RS485OCCUPYTIME;
}
else if(BleMusicInfo.PlayCtrl_Flag != 0x00) //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
BLE_Set_PlayStatus(&BUS_Public,&BleMusicInfo);
Ret = RS485OCCUPYTIME;
}
else if(BleMusicInfo.SetVol_Flag != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BLE_Set_Volume(&BUS_Public,&BleMusicInfo);
Ret = RS485OCCUPYTIME;
}
else if(BleMusicInfo.ReadVer_Flag != 0x00) //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
{
BLE_Query_VerInf(&BUS_Public,&BleMusicInfo);
Ret = RS485OCCUPYTIME;
}
else if(BleMusicInfo.PSRef_Flag == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BLE_ReFresh_PassWord(&BUS_Public,&BleMusicInfo);
Ret = RS485OCCUPYTIME;
}
if((Ret == RS485OCCUPYTIME) || (keep_flag == 0x01))
{
if(BleMusicInfo.DevSendCnt >= BUS_Public.retry_num)
{
if(BleMusicInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Device_Offline",__func__);
LOG_Device_Online_Record(Dev_Rs458_RotaryCtrl, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BleMusicInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(BleMusicInfo.DevOffline != BleMusicInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
BleMusicInfo.DevOfflineLast = BleMusicInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
/*<2A>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ǿ<EFBFBD>ʼ*/
if(BleMusicInfo.RState_Flag != 0x00) //<2F><>ѯ״̬
{
BleMusicInfo.RState_Flag = 0x00;
}
else if(BleMusicInfo.SetName_Flag != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BleMusicInfo.SetName_Flag = 0x00;
}
else if(BleMusicInfo.PlayCtrl_Flag != 0x00) //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
BleMusicInfo.PlayCtrl_Flag = 0x00;
}
else if(BleMusicInfo.SetVol_Flag != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BleMusicInfo.SetVol_Flag = 0x00;
}
else if(BleMusicInfo.ReadVer_Flag != 0x00) //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
{
BleMusicInfo.ReadVer_Flag = 0x00;
}
else if(BleMusicInfo.PSRef_Flag == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BleMusicInfo.PSRef_Flag = 0x00;
}
/*<2A>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ǽ<EFBFBD><C7BD><EFBFBD>*/
BleMusicInfo.DevSendCnt = 0x00;
}
else
{
BleMusicInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&BleMusicInfo.comm_record,0x01,0x00);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&BleMusicInfo, sizeof(BLE_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),DevAdd+Dev_Privately);
}
return Ret;
}
uint8_t BLV_Rs485_BLE_Music_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
uint8_t ret = 0x01;
uint8_t data[55] = {0};
Device_Public_Information_G BUS_Public;
BLE_MUSIC_INFO BleMusicInfo;
if((DataLen < 0x08) || (DataLen > 52))
{
return ret;
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
if((data[0] != 0xA5) || (data[DataLen - 1] != 0x5A))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Head Err Not BLE Music Data");
return ret;
}
if(data[3] != DataLen)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Music Data Lens Err");
return ret;
}
if(0x00 != CheckSum(data,DataLen))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Music Data CheckSum Err");
return ret;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
if(data[2] != BUS_Public.addr)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Music Data Addr Err");
return ret;
}
SRAM_DMA_Read_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
switch(data[5])
{
case BLE_CMD_QUERY:
case BLE_CMD_SETNAME:
case BLE_CMD_PLAY:
case BLE_CMD_VOLUME:
case BLE_CMD_VERINF:
case BLE_CMD_PLAY_END:
case BLE_CMD_UPDATE_PASSWORD:
ret = 0x00;
if(BleMusicInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Music DEV_IS_ONLINE");
LOG_Device_Online_Record(Dev_485_BLE_Music,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BleMusicInfo.DevSendCnt = 0x00;
BleMusicInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(BleMusicInfo.DevOffline != BleMusicInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
BleMusicInfo.DevOfflineLast = BleMusicInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&BleMusicInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[5])
{
case BLE_CMD_QUERY:
BleMusicInfo.RState_Flag = 0x00;
BleMusicInfo.BleCon_State = data[PKG_PARA];
BleMusicInfo.Play_Now_State = data[PKG_PARA + 1];
BleMusicInfo.Play_Now_Folder = data[PKG_PARA + 2];
BleMusicInfo.Volume_Now = data[PKG_PARA + 3];
if(BleMusicInfo.Volume_Globle != data[PKG_PARA + 4])
{
BleMusicInfo.Volume_Globle = data[PKG_PARA + 4];
}
break;
case BLE_CMD_SETNAME:
BleMusicInfo.SetName_Flag = 0x00;
break;
case BLE_CMD_PLAY:
BleMusicInfo.PlayCtrl_Flag = 0x00;
break;
case BLE_CMD_VOLUME:
BleMusicInfo.SetVol_Flag = 0x00;
break;
case BLE_CMD_VERINF:
BleMusicInfo.ReadVer_Flag = 0x00;
if(memcmp(&BleMusicInfo.BLE_MAC[0],&data[1],12) != 0x00)
{
memcpy(&BleMusicInfo.BLE_MAC[0],&data[1],12);
}
if(memcmp(&BleMusicInfo.Ble_Name[0],&data[13],32) != 0x00)
{
memcpy(&BleMusicInfo.Ble_Name[0],&data[13],32);
}
break;
case BLE_CMD_PLAY_END:
BleMusicInfo.FolderPlayEnd &= 0xff00;
BleMusicInfo.FolderPlayEnd = data[PKG_PARA];
BLE_Event_Ack(&BUS_Public,&BleMusicInfo);
break;
case BLE_CMD_UPDATE_PASSWORD:
BleMusicInfo.PSRef_Flag = 0x00;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&BleMusicInfo, sizeof(BLE_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),DevAdd+Dev_Privately);
return ret;
}
uint8_t Dev_BLE_Music_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
uint8_t ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
return ret;
}
void Dev_BLE_Music_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType)
{
Device_Public_Information_G BUS_Public;
BLE_MUSIC_INFO BleMusicInfo;
// uint8_t keepflag = 0x00;
uint8_t ctrlmode = 0x00;
uint8_t ctrlstate = 0x00;
if(DevAddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
ctrlmode = DevOutputType & 0xff;
ctrlstate = (DevOutputType >> 8) & 0xff;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Music Ctrl Mode:%02X State:%02X",ctrlmode,ctrlstate);
switch(ctrlmode & 0x0f)
{
case CTRL_PLAY_MODE: //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%02X State:%d",ctrlmode & 0x0f,ctrlstate);
BleMusicInfo.PlayCtrl_Flag |= 0x01;
BleMusicInfo.PlayState = ctrlstate;
break;
case CTRL_CYCLE_STATE: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%02X State:%d",ctrlmode & 0x0f,ctrlstate);
BleMusicInfo.PlayCtrl_Flag |= 0x02;
BleMusicInfo.PlayMode = ctrlstate;
break;
case CTRL_PLAY_SPECIFY: //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>:%02X Folder:%d State:%d",ctrlmode & 0x0f,(ctrlmode >> 4) & 0x0f,ctrlstate);
BleMusicInfo.PlayCtrl_Flag |= 0x08;
BleMusicInfo.PlayFolder = (ctrlmode >> 4) & 0x0f;
BleMusicInfo.PlayFileIndex = ctrlstate;
BleMusicInfo.FolderPlayEnd = 0x00;
BleMusicInfo.FolderPlayEnd = (BleMusicInfo.PlayFolder << 8);
break;
case CTRL_VOLUME_VALUE: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%02X ѡ<><D1A1>:%d State:%d",ctrlmode & 0x0f,(ctrlmode >> 4) & 0x0f,ctrlstate);
switch((ctrlmode >> 4) & 0x0f)
{
case 0x01: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.SetVol_Flag |= 0x01;
BleMusicInfo.PlayVolume = ctrlstate * 10;
break;
case 0x02: //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.SetVol_Flag |= 0x02;
BleMusicInfo.Volume_Globle = ctrlstate * 10;
break;
case 0x03: //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.SetVol_Flag |= 0x10;
BleMusicInfo.LocalVolUp = ctrlstate * 10;
break;
case 0x04: //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.SetVol_Flag |= 0x10;
BleMusicInfo.LocalVolLow = ctrlstate * 10;
break;
case 0x05: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
BleMusicInfo.HSPlayStartVol = ctrlstate * 10;
break;
case 0x06: //<2F><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.HSPlayEndVol = ctrlstate * 10;
break;
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
BleMusicInfo.CurePlayStartVol = ctrlstate * 10;
break;
case 0x08: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.CurePlayEndVol = ctrlstate * 10;
break;
}
break;
case CTRL_VOLUME_ADVANCED: //<2F><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>:%02X ѡ<><D1A1>:%d State:%d",ctrlmode & 0x0f,(ctrlmode >> 4) & 0x0f,ctrlstate);
switch((ctrlmode >> 4) & 0x0f)
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
BleMusicInfo.SetVol_Flag |= 0x04;
BleMusicInfo.SilentState = ctrlstate;
break;
case 0x02: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.SetVol_Flag |= 0x08;
BleMusicInfo.RelativeVol = ctrlstate;
break;
}
break;
case CTRL_HSPLAY_TIME_SET: //<2F><><EFBFBD>߷<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>߲<EFBFBD><DFB2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%02X <20><>λ:%d ʱ<><CAB1>:%d",ctrlmode & 0x0f,(ctrlmode >> 4) & 0x0f,ctrlstate);
switch((ctrlmode >> 4) & 0x0f)
{
case 0x01: //<2F><>
BleMusicInfo.HSPlayTime = ctrlstate;
break;
case 0x02: //<2F><>
BleMusicInfo.HSPlayTime = ctrlstate * 60;
break;
case 0x03: //ʱ
BleMusicInfo.HSPlayTime = ctrlstate * 60 * 60;
break;
}
break;
case CTRL_CUREPLAY_TIME_SET: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%02X <20><>λ:%d ʱ<><CAB1>:%d",ctrlmode & 0x0f,(ctrlmode >> 4) & 0x0f,ctrlstate);
switch((ctrlmode >> 4) & 0x0f)
{
case 0x01: //<2F><>
BleMusicInfo.CurePlayTime = ctrlstate;
break;
case 0x02: //<2F><>
BleMusicInfo.CurePlayTime = ctrlstate * 60;
break;
case 0x03: //ʱ
BleMusicInfo.CurePlayTime = ctrlstate * 60 * 60;
break;
}
break;
case CTRL_PASSWORD_REFRESH: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BleMusicInfo.PSRef_Flag = 0x01;
break;
}
// if(0x01 == keepflag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&BleMusicInfo, sizeof(BLE_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),DevAddr+Dev_Privately);
}
}
uint16_t Dev_BLE_Music_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop)
{
BLE_MUSIC_INFO BleMusicInfo;
if(devaddr == 0x00)
return 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BleMusicInfo,sizeof(BLE_MUSIC_INFO),devaddr+Dev_Privately);
return BleMusicInfo.FolderPlayEnd;
}
/*
* Fun name: BLE_Query_Status
* Description: <20><>ѯ״̬
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_Query_Status(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 0x08;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_QUERY;
data[PKG_PARA] = 0x00;
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Query_Status:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
/*
* Fun name: BLE_Set_Name
* Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_Set_Name(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 39;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_SETNAME;
memcpy(&data[PKG_PARA],BleMusicInfo->Ble_Name,32);
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Set_Name:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
/*
* Fun name: BLE_Set_PlayStatus
* Description: ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_Set_PlayStatus(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 17;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_PLAY;
data[PKG_PARA] = BleMusicInfo->PlayCtrl_Flag;
if(BleMusicInfo->PlayCtrl_Flag & 0x01) //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
data[PKG_PARA + 1] = BleMusicInfo->PlayState;
}
if(BleMusicInfo->PlayCtrl_Flag & 0x02) //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ
{
data[PKG_PARA + 2] = BleMusicInfo->PlayMode;
}
if(BleMusicInfo->PlayCtrl_Flag & 0x04) //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
data[PKG_PARA + 3] = BleMusicInfo->PlayVolume;
}
if(BleMusicInfo->PlayCtrl_Flag & 0x08) //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{
data[PKG_PARA + 4] = BleMusicInfo->PlayFolder;
data[PKG_PARA + 5] = BleMusicInfo->PlayFileIndex;
if(BleMusicInfo->PlayFolder == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
{
data[PKG_PARA + 6] = BleMusicInfo->HSPlayTime & 0xff;
data[PKG_PARA + 7] = (BleMusicInfo->HSPlayTime >> 8) & 0xff;
data[PKG_PARA + 8] = BleMusicInfo->HSPlayStartVol;
data[PKG_PARA + 9] = BleMusicInfo->HSPlayEndVol;
}
else if(BleMusicInfo->PlayFolder == 0x02) //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
{
data[PKG_PARA + 6] = BleMusicInfo->CurePlayTime & 0xff;
data[PKG_PARA + 7] = (BleMusicInfo->CurePlayTime >> 8) & 0xff;
data[PKG_PARA + 8] = BleMusicInfo->CurePlayStartVol;
data[PKG_PARA + 9] = BleMusicInfo->CurePlayEndVol;
}
}
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Set_PlayStatus:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
/*
* Fun name: BLE_Set_Volume
* Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_Set_Volume(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 14;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_VOLUME;
data[PKG_PARA] = BleMusicInfo->SetVol_Flag;
if(BleMusicInfo->SetVol_Flag & 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
data[PKG_PARA + 1] = BleMusicInfo->PlayVolume;
}
if(BleMusicInfo->SetVol_Flag & 0x02) //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
data[PKG_PARA + 2] = BleMusicInfo->Volume_Globle;
}
if(BleMusicInfo->SetVol_Flag & 0x04) //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>״̬
{
data[PKG_PARA + 3] = BleMusicInfo->SilentState;
}
if(BleMusicInfo->SetVol_Flag & 0x08) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
data[PKG_PARA + 4] = BleMusicInfo->RelativeVol;
}
if(BleMusicInfo->SetVol_Flag & 0x10) //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
data[PKG_PARA + 5] = BleMusicInfo->LocalVolUp;
data[PKG_PARA + 6] = BleMusicInfo->LocalVolLow;
}
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Set_Volume:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
/*
* Fun name: BLE_Query_VerInf
* Description: <20><>ѯ<EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_Query_VerInf(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 0x08;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_VERINF;
data[PKG_PARA] = 0x00;
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Query_VerInf:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
/*
* Fun name: BLE_ReFresh_PassWord
* Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_ReFresh_PassWord(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 0x08;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_UPDATE_PASSWORD;
data[PKG_PARA] = 0x01;
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_ReFresh_PassWord:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
/*
* Fun name: BLE_Event_Ack
* Description: <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>ظ<EFBFBD>
* Input: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* Return: NULL
*/
void BLE_Event_Ack(Device_Public_Information_G *BUS_Public,BLE_MUSIC_INFO *BleMusicInfo)
{
uint8_t lens = 0x08;
uint8_t data[lens];
memset(data,0,sizeof(data));
data[PKG_HEAD] = 0xA5;
if(BleMusicInfo->DevSendCnt == 0x00)
{
BleMusicInfo->DevSendSN++;
if(BleMusicInfo->DevSendSN > 0x0F) BleMusicInfo->DevSendSN = 0x00;
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
data[PKG_SN] |= (BleMusicInfo->DevSendSN & 0x0F);
data[PKG_SN] |= 0x80;
}
data[PKG_ADDR] = BUS_Public->addr;
data[PKG_LENS] = lens;
data[PKG_CMD] = BLE_CMD_PLAY_END;
data[PKG_PARA] = 0x00;
data[lens - 1] = 0x5A;
data[PKG_CHSUM] = CheckSum(data,lens);
MCU485_SendString(BUS_Public->port,data, lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLE_Event_Ack:",data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}

View File

@@ -0,0 +1,97 @@
#ifndef _BLV_485_DEV_BLE_MUSIC_H
#define _BLV_485_DEV_BLE_MUSIC_H
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
#define BLE_CMD_QUERY 0x01 //<2F><>ѯ״̬
#define BLE_CMD_SETNAME 0x02 //<2F><><EFBFBD><EFBFBD>BLE<4C><45><EFBFBD><EFBFBD>
#define BLE_CMD_PLAY 0x03 //<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>״̬
#define BLE_CMD_VOLUME 0x04 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLE_CMD_VERINF 0x05 //<2F><>ѯ<EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
#define BLE_CMD_UPDATE_PASSWORD 0x06 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLE_CMD_PLAY_END 0x07 //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>ϱ<EFBFBD>
#define CTRL_PLAY_MODE 0x01 //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
#define CTRL_CYCLE_STATE 0x02 //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ
#define CTRL_PLAY_SPECIFY 0x03 //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#define CTRL_VOLUME_VALUE 0x04 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
#define CTRL_VOLUME_ADVANCED 0x05 //<2F><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
#define CTRL_HSPLAY_TIME_SET 0x06 //<2F><><EFBFBD>߲<EFBFBD><DFB2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CTRL_CUREPLAY_TIME_SET 0x07 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CTRL_PASSWORD_REFRESH 0x08 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum
{
PKG_HEAD,
PKG_SN,
PKG_ADDR,
PKG_LENS,
PKG_CHSUM,
PKG_CMD,
PKG_PARA,
}BLE_PKG_ENUM;
typedef struct{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevSendSN; //<2F><><EFBFBD><EFBFBD>SN<53><4E>
uint8_t InputValidNum;
uint8_t OutputValidNum;
uint8_t BleCon_State; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t Play_Now_State; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t Play_Now_Folder; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
uint8_t Volume_Now; //ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
uint8_t Volume_Globle; //ȫ<>ְٷֱ<D9B7><D6B1><EFBFBD><EFBFBD><EFBFBD>
uint8_t SilentState; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t RelativeVol; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x01:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x02:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LocalVolLow; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LocalVolUp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SetName_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
uint8_t Ble_Name_Prefixes[10]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ׺
uint8_t Ble_Name[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
uint8_t RState_Flag; //<2F><>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
uint8_t PlayCtrl_Flag; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD><C5BF>Ʊ<EFBFBD><C6B1><EFBFBD>
uint8_t PlayState; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t PlayMode; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ 0x01:<3A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD> 0x02:<3A>ļ<EFBFBD><C4BC><EFBFBD>ѭ<EFBFBD><D1AD> 0x03:<3A>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x04:ȫ<><C8AB>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t PlayVolume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t PlayFolder; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x00:<3A><> 0x01:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x02:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x03:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x04:˯<><CBAF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x05:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
uint8_t PlayFileIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>(<28>±<EFBFBD>) 0x00:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
uint16_t HSPlayTime; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB>
uint8_t HSPlayStartVol; //<2F><><EFBFBD>߿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t HSPlayEndVol; //<2F><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t CurePlayTime; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB>
uint8_t CurePlayStartVol; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t CurePlayEndVol; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SetVol_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t ReadVer_Flag; //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
uint8_t PSRef_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
uint8_t BLE_MAC[12]; //BLE MAXC<58><43>ַ
uint16_t FolderPlayEnd; //<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>¼<EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> - 0x01:<3A>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ģʽ 0x02:<3A>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD>ֽ<EFBFBD> - <20><><EFBFBD>ŵ<EFBFBD><C5B5>ļ<EFBFBD><C4BC><EFBFBD> 0x01:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x02:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
}__attribute__ ((__packed__)) BLE_MUSIC_INFO;
void BLV_RS485_BLE_Music_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,248 @@
#include "includes.h"
uint8_t BLVP1_Rotary_SwitchCycleDis(uint32_t DevAdd);
uint8_t BLVP1_Rs485_Rotary_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
#define REPEATSENDTIMEMAX 0x03 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dev_RotarySwitch_RecvData_Len_Max 0x18
/*******************************************************************************
* Function Name : BLVP1_485_Dev_Rotary_Switch_Init
* Description : BLVP1<50><31>ť<EFBFBD><C5A5><EFBFBD>س<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return : NULL
*******************************************************************************/
void BLVP1_485_Dev_Rotary_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLVP1_Rotary_SwitchCycleDis;
BUS_Public->processing_cf = (uint32_t)&BLVP1_Rs485_Rotary_Swi_Check;
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>BLVP1<EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ַ: %d",BUS_Public->addr);
}
/*******************************************************************************
* Function Name : BLVP1_Rotary_Rs485_Swi_Pro
* Description : BLVP1<50><31>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>485<38><35><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return : NULL
*******************************************************************************/
void BLVP1_Rotary_Rs485_Swi_Pro(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_SWI_INFO *Switch_Info)
{
uint8_t i;
if(Switch_Info->DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_TouchSwitch LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_SWI_TYPE,BUS_Public->addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Switch_Info->comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Switch_Info->DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Switch_Info->DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Switch_Info->DevOffline != Switch_Info->DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Switch_Info->DevOfflineLast = Switch_Info->DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public->type,BUS_Public->addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rotary switch Input Num:%02X", Switch_Info->SwtInputValidNum);
switch(data[1])
{
case 0x09: //2024-1-25
if(data[2] == 0x05)
{
i = data[2] - 1;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyRotary Coord:%d",BUS_Public->addr, i, BUS_Public->DevCoord);
Switch_Info->DevReadBuf[i] = RotaryLight; //<2F><>ַ<EFBFBD><D6B7>1<EFBFBD><31>ʼ
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
// if(data[3] > 0)
{
Switch_Info->RotaryValue[0] = data[3];
DevActionGlobal.DimGlobalValue = Switch_Info->RotaryValue[0];
}
}
break;
default:
break;
}
}
#define RECDATALENMAX 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
/*******************************************************************************
* Function Name : BLVP1_Rs485_Rotary_Swi_Check
* Description : BLVP1<50><31>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>485<38><35><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
0x00<30><30><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
*******************************************************************************/
uint8_t BLVP1_Rs485_Rotary_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
// uint8_t Crc_buf = 0;
uint8_t ret = 0x01;
uint8_t data[RECDATALENMAX];
// uint32_t SwiDevAdd; //<2F><><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(DataLen > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Len:%d Err",__func__,DataLen);
return ret; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
if((DataLen < 0x05)||((data[1] != 0x09)&&(data[1] != 0x0A))||(data[DataLen - 1] != SOR_CRC(data, DataLen-1))) //ƥ<><EFBFBD>ص<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>DevAdd:%d,len:%d",BUS_Public.addr,DataLen);
return ret; //<2F><><EFBFBD>Ǿ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
// if(data[0] == SRAM_Read_Byte(DevAdd+Dev_Addr)) //<2F><>ַ<EFBFBD>պ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>BUS_Public.addr
// {
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><>ť<EFBFBD><C5A5><EFBFBD>ص<EFBFBD>ַƥ<D6B7><C6A5><EFBFBD><EFBFBD> DevAdd:%d,len:%d\r\n",data[0],DataLen);
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
// }
// else //<2F><>ַû<D6B7><C3BB>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>
{
DevAdd = Find_AllDevice_List_Information2(Active_Port, 0x25, data[0]); //<2F><>ַ<EFBFBD><D6B7><EFBFBD>¸<EFBFBD>ֵ
if(NULL != DevAdd)
{
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
}
else
{
return ret;
}
}
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
switch(data[1])
{
case 0x09:
ret = 0x00;
BLVP1_Rotary_Rs485_Swi_Pro(&BUS_Public, data, &Rs485SwiInfo);
break;
case 0x0A:
ret = 0x00;
Rs485SwiInfo.DevSendCnt = 0x00;
Rs485SwiInfo.RotaryValue_Flag = 0x00;
break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,DataLen);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
return ret;
}
void BLVP1_Rotary_Switch_ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t SendLen = 0x05;
uint8_t BLW_swt_buf[SendLen];
memset(BLW_swt_buf,0,sizeof(BLW_swt_buf));
BLW_swt_buf[0] = BUS_Public->addr;
BLW_swt_buf[1] = 0x0A; //д
BLW_swt_buf[2] = 0x05; //<2F><>·
BLW_swt_buf[3] = DevActionGlobal.DimGlobalValue; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BLW_swt_buf[SendLen-1] = SOR_CRC(BLW_swt_buf,SendLen-1);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s",__func__);
MCU485_SendString(BUS_Public->port,BLW_swt_buf,SendLen);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,BLW_swt_buf,SendLen);
}
/*******************************************************************************
* Function Name : BLVP1_Rotary_SwitchCycleDis
* Description : BLVP1<50><31>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLVP1_Rotary_SwitchCycleDis(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
// uint8_t i;
uint8_t Ret = RS485OCCUPYNOTIME;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(Rs485SwiInfo.RotaryValue[0] != DevActionGlobal.DimGlobalValue) //2025-07-10,YYW,<2C><><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ȱȶ<C8B1>
{
Rs485SwiInfo.RotaryValue[0] = DevActionGlobal.DimGlobalValue;
Rs485SwiInfo.RotaryValue_Flag = 0x01;
}
if(0x01 == Rs485SwiInfo.RotaryValue_Flag)
{
BLVP1_Rotary_Switch_ctrl(&BUS_Public, &Rs485SwiInfo);
Ret = RS485OCCUPYTIME;
}
if(Ret == RS485OCCUPYTIME)
{
if(Rs485SwiInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485SwiInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_RotarySwitch LogInfo_Device_Offline...........");
LOG_Device_Online_Record(Dev_Rs458_RotaryCtrl, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485SwiInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485SwiInfo.DevOffline != Rs485SwiInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485SwiInfo.DevOfflineLast = Rs485SwiInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
Rs485SwiInfo.RotaryValue_Flag = 0x00;
}
else
{
Rs485SwiInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&Rs485SwiInfo.comm_record,0x01,0x00);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
}
return Ret;
}

View File

@@ -0,0 +1,15 @@
#ifndef _BLVP1_485_DEV_ROTARY_SWIFUN_H_
#define _BLVP1_485_DEV_ROTARY_SWIFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "APP_SwitchCtrl.h"
/*BLV485<38><35><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>*/
void BLVP1_485_Dev_Rotary_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo);
#endif

View File

@@ -0,0 +1,544 @@
#include "includes.h"
uint8_t BLVP2_Rotary_SwitchCycleDis(uint32_t DevAdd);
uint8_t BLVP2_Rs485_Rotary_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
#define ROTARYSENDTIMEMAX 0x03 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dev_RotarySwitch_RecvData_Len_Max 0x18
/*******************************************************************************
* Function Name : BLVP2_485_Dev_Rotary_Switch_Init
* Description : BLVP2<50><32>ť<EFBFBD><C5A5><EFBFBD>س<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return : NULL
*******************************************************************************/
void BLVP2_485_Dev_Rotary_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLVP2_Rotary_SwitchCycleDis;
BUS_Public->processing_cf = (uint32_t)&BLVP2_Rs485_Rotary_Swi_Check;
DevActionGlobal.DimGlobalValue = 100;
// DevActionGlobal.CCTValue = 50;
Rs485SwiInfo->RotaryBL = 0x01;
Rs485SwiInfo->Rotary_PageEn = 0x09; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5>ںͿ<DABA><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
// Rs485SwiInfo->RL_Lower_limit = DevActionGlobal.Dim_Lower_limit;
// Rs485SwiInfo->RL_Upper_limit = DevActionGlobal.Dim_Upper_limit;
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>BLVP2<EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ַ: %d",BUS_Public->addr);
}
/*******************************************************************************
* Function Name : BLVP2_Rotary_Rs485_Swi_Pro
* Description : BLVP2<50><32>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>485<38><35><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return : NULL
*******************************************************************************/
void BLVP2_Rotary_Rs485_Swi_Pro(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_SWI_INFO *Switch_Info)
{
uint8_t i;
uint16 temp = 0x00;
if(Switch_Info->DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Device_Online",__func__);
LOG_Device_Online_Record(DEV_SWI_TYPE,BUS_Public->addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Switch_Info->comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Switch_Info->DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Switch_Info->DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Switch_Info->DevOffline != Switch_Info->DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Switch_Info->DevOfflineLast = Switch_Info->DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public->type,BUS_Public->addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLV P2 Rotary switch Input Num:%02X\r\n", Switch_Info->SwtInputValidNum);
switch(data[1])
{
case 0x09:
if(data[2] == 0x05)
{
if(data[3] == 0x01) //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>
{
i = data[2] - 1;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyRotary Coord:%d",BUS_Public->addr, i, BUS_Public->DevCoord);
Switch_Info->DevReadBuf[i] = RotaryLight; //<2F><>ַ<EFBFBD><D6B7>1<EFBFBD><31>ʼ
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
if(data[4] == 0x02) //<2F><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
{
temp = data[5] + (data[6] << 8);
if((temp >= DevActionGlobal.Dim_Lower_limit) && (temp <=DevActionGlobal.Dim_Upper_limit)) //2024-11-01 ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Switch_Info->RotaryValue[data[3] - 1] = temp;
DevActionGlobal.DimGlobalValue = Switch_Info->RotaryValue[data[3] - 1];//1-1=0
}
}
}
else if(data[3] == 0x04) //ɫ<>µ<EFBFBD><C2B5><EFBFBD>
{
i = data[2] - 1;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyRotary Coord:%d",BUS_Public->addr, i, BUS_Public->DevCoord);
Switch_Info->DevReadBuf[i] = RotaryCCT; //<2F><>ַ<EFBFBD><D6B7>1<EFBFBD><31>ʼ
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
if(data[4] == 0x02) //<2F><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
{
temp = data[5] + (data[6] << 8);
// if(temp > 0)
{
Switch_Info->RotaryValue[data[3] - 1] = temp;
DevActionGlobal.CCTValue = Switch_Info->RotaryValue[data[3] - 1];//4-1=3
}
}
}
}
break;
default:
break;
}
}
#define RECDATALENMAX 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
/*******************************************************************************
* Function Name : BLVP2_Rs485_Rotary_Swi_Check
* Description : BLVP2<50><32>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>485<38><35><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
0x00<30><30><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
*******************************************************************************/
uint8_t BLVP2_Rs485_Rotary_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
// uint8_t Crc_buf = 0;
uint8_t ret = 0x01;
uint8_t data[RECDATALENMAX];
// uint32_t SwiDevAdd; //<2F><><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(DataLen > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s DataLen Err:%d",__func__,DataLen);
return ret; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
if((data[1] != 0x09) && (data[1] != 0x0A) && (data[1] != 0x0B) && (data[1] != 0x0C))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Check Err");
return ret; //<2F><><EFBFBD>Ǿ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
if((DataLen < 0x05)||(data[DataLen - 1] != SOR_CRC(data, DataLen-1))) //ƥ<><EFBFBD>ص<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>DevAdd:%d,len:%d\r\n",BUS_Public.addr,DataLen);
return ret; //<2F><><EFBFBD>Ǿ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
// if(data[0] == SRAM_Read_Byte(DevAdd+Dev_Addr)) //<2F><>ַ<EFBFBD>պ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>BUS_Public.addr
// {
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><>ť<EFBFBD><C5A5><EFBFBD>ص<EFBFBD>ַƥ<D6B7><C6A5><EFBFBD><EFBFBD> DevAdd:%d,len:%d\r\n",data[0],DataLen);
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
// }
// else //<2F><>ַû<D6B7><C3BB>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>
{
DevAdd = Find_AllDevice_List_Information2(Active_Port, 0x25, data[0]); //<2F><>ַ<EFBFBD><D6B7><EFBFBD>¸<EFBFBD>ֵ
if(NULL != DevAdd)
{
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
}
else
{
return ret;
}
}
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rotary Input Buff:",data,DataLen);
switch(data[1])
{
case 0x09:
ret = 0x00;
BLVP2_Rotary_Rs485_Swi_Pro(&BUS_Public, data, &Rs485SwiInfo);
break;
case 0x0A:
if(data[3] == 0x01)
{
ret = 0x00;
Rs485SwiInfo.DevSendCnt = 0x00;
Rs485SwiInfo.RotaryValue_Flag = 0x00;
}else if(data[3] == 0x04)
{
ret = 0x00;
Rs485SwiInfo.DevSendCnt = 0x00;
Rs485SwiInfo.RotaryCCTValue_Flag = 0x00;//2025-07-10<31><30>YYW,<2C><>ťɫ<C5A5><C9AB><EFBFBD><EFBFBD><EFBFBD>õĻظ<C4BB>
}
break;
case 0x0B:
ret = 0x00;
Rs485SwiInfo.DevSendCnt = 0x00;
Rs485SwiInfo.RL_Limit_Flag = 0x00;
break;
case 0x0C:
ret = 0x00;
Rs485SwiInfo.DevSendCnt = 0x00;
Rs485SwiInfo.RotaryBL_Flag = 0x00;
break;
case 0x0D:
ret = 0x00;
Rs485SwiInfo.DevSendCnt = 0x00;
Rs485SwiInfo.Rotary_PageFlag = 0x00;
break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,DataLen);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
return ret;
}
void BLVP2_Rotary_Switch_Ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t SendLen = 0x07;
uint8_t BLW_swt_buf[SendLen];
memset(BLW_swt_buf,0,sizeof(BLW_swt_buf));
BLW_swt_buf[0] = BUS_Public->addr;
BLW_swt_buf[1] = 0x0A; //д
BLW_swt_buf[2] = 0x05; //<2F><>·
BLW_swt_buf[3] = 0x01; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>
BLW_swt_buf[4] = DevActionGlobal.DimGlobalValue & 0xff;
BLW_swt_buf[5] = (DevActionGlobal.DimGlobalValue >> 8) & 0xff; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BLW_swt_buf[SendLen-1] = SOR_CRC(BLW_swt_buf,SendLen-1);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rotary switch send data---\r\n");
MCU485_SendString(BUS_Public->port,BLW_swt_buf,SendLen);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,BLW_swt_buf,SendLen);
}
//<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>,2025-07-10,YYW
void BLVP2_Rotary_CCTValue_Ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t SendLen = 0x07;
uint8_t BLW_swt_buf[SendLen];
memset(BLW_swt_buf,0,sizeof(BLW_swt_buf));
BLW_swt_buf[0] = BUS_Public->addr;
BLW_swt_buf[1] = 0x0A; //д
BLW_swt_buf[2] = 0x05; //<2F><>·
BLW_swt_buf[3] = 0x04; //ɫ<>µ<EFBFBD><C2B5><EFBFBD>
BLW_swt_buf[4] = DevActionGlobal.CCTValue & 0xff;
BLW_swt_buf[5] = (DevActionGlobal.CCTValue >> 8) & 0xff; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BLW_swt_buf[SendLen-1] = SOR_CRC(BLW_swt_buf,SendLen-1);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rotary CCTValue send data---\r\n");
MCU485_SendString(BUS_Public->port,BLW_swt_buf,SendLen);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,BLW_swt_buf,SendLen);
}
void BLVP2_Rotary_BL_Ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t SendLen = 0x07;
uint8_t data[SendLen];
memset(data,0,sizeof(data));
data[0] = BUS_Public->addr;
data[1] = 0x0C; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
data[2] = 0x05; //<2F><>·
data[3] = 0x01; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>
if(Rs485SwiInfo->RotaryBL == 0x01)
{
data[4] = 0x02; //<2F><>Χ<EFBFBD><CEA7>
data[5] = 0x64; //<2F><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
}
else
{
data[4] = 0x02; //<2F><>Χ<EFBFBD><CEA7>
data[5] = 0x00; //<2F><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
}
data[SendLen-1] = SOR_CRC(data,SendLen-1);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rotary BL send data---\r\n");
MCU485_SendString(BUS_Public->port,data,SendLen);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,SendLen);
}
//void BLVP2_Rotary_LightLimit_Ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
//{
// uint8_t SendLen = 0x08;
// uint8_t data[SendLen];
//
// memset(data,0,sizeof(data));
// data[0] = BUS_Public->addr;
// data[1] = 0x0B; //<2F><>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
// data[2] = 0x01; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>
// data[3] = Rs485SwiInfo->RL_Lower_limit;
// data[4] = 0x00;
// data[5] = Rs485SwiInfo->RL_Upper_limit;
// data[6] = 0x00; //<2F><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
//
// data[SendLen-1] = SOR_CRC(data,SendLen-1);
// /*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rotary_LightLimit send data---\r\n");
// MCU485_SendString(BUS_Public->port,data,SendLen);
//
// /*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,SendLen);
//}
void BLVP2_Rotary_PageEn_Ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t SendLen = 0x07;
uint8_t data[SendLen];
memset(data,0,sizeof(data));
data[0] = BUS_Public->addr;
data[1] = 0x0D; //ҳ<><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[2] = Rs485SwiInfo->Rotary_PageEn & 0xff;
data[3] = (Rs485SwiInfo->Rotary_PageEn >> 8) & 0xff;
data[4] = (Rs485SwiInfo->Rotary_PageEn >> 16) & 0xff;
data[5] = (Rs485SwiInfo->Rotary_PageEn >> 24) & 0xff;
data[SendLen-1] = SOR_CRC(data,SendLen-1);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLVP2_Rotary_PageEn_Ctrl:",data,SendLen);
MCU485_SendString(BUS_Public->port,data,SendLen);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,SendLen);
}
/*******************************************************************************
* Function Name : BLVP2_Rotary_SwitchCycleDis
* Description : BLVP2<50><32>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLVP2_Rotary_SwitchCycleDis(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
// uint8_t i;
uint8_t Ret = RS485OCCUPYNOTIME;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevActionGlobal.DevActionU64Cond.EleState == 0x01)
{
if( DevActionGlobal.SleepMode_State == 0x01 )
{
Rs485SwiInfo.RotaryBL = 0x02; //˯<><CBAF>ģʽ<C4A3>ر<EFBFBD><D8B1><EFBFBD>
}
else
{
Rs485SwiInfo.RotaryBL = 0x01; //<2F><EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else if(DevActionGlobal.DevActionU64Cond.EleState == 0x02)
{
Rs485SwiInfo.RotaryBL = 0x02; //<2F>ο<EFBFBD><CEBF>ر<EFBFBD><D8B1><EFBFBD>
}
else
{
if( DevActionGlobal.SleepMode_State == 0x01 )
{
Rs485SwiInfo.RotaryBL = 0x02; //˯<><CBAF>ģʽ<C4A3>ر<EFBFBD><D8B1><EFBFBD>
}
else
{
Rs485SwiInfo.RotaryBL = 0x01;
}
}
//2025-07-10<31><30>YYW,<2C>ȶԱ<C8B6><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ֵ<EFBFBD>͵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Rs485SwiInfo.RotaryValue[0] != DevActionGlobal.DimGlobalValue)
{
Rs485SwiInfo.RotaryValue[0] = DevActionGlobal.DimGlobalValue;
Rs485SwiInfo.RotaryValue_Flag = 0x01;
}
//2025-07-10<31><30>YYW,<2C>ȶԱ<C8B6><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ťɫ<C5A5><C9AB><EFBFBD>ϱ<EFBFBD>ֵ<EFBFBD>͵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ɫ<EFBFBD><C9AB>
if(Rs485SwiInfo.RotaryValue[3] != DevActionGlobal.CCTValue)
{
Rs485SwiInfo.RotaryValue[3] = DevActionGlobal.CCTValue;
Rs485SwiInfo.RotaryCCTValue_Flag = 0x01;
}
if(Rs485SwiInfo.RotaryBL != Rs485SwiInfo.RotaryBL_Last)
{
Rs485SwiInfo.RotaryBL_Last = Rs485SwiInfo.RotaryBL;
Rs485SwiInfo.RotaryBL_Flag = 0x01;
}
// if(Rs485SwiInfo.RL_Upper_limit != DevActionGlobal.Dim_Upper_limit)
// {
// Rs485SwiInfo.RL_Upper_limit = DevActionGlobal.Dim_Upper_limit;
// }
//
// if(Rs485SwiInfo.RL_Lower_limit != DevActionGlobal.Dim_Lower_limit)
// {
// Rs485SwiInfo.RL_Lower_limit = DevActionGlobal.Dim_Lower_limit;
// }
// if(Rs485SwiInfo.RL_Upper_limit != Rs485SwiInfo.RL_Upper_limit_Last)
// {
// Rs485SwiInfo.RL_Upper_limit_Last = Rs485SwiInfo.RL_Upper_limit;
// Rs485SwiInfo.RL_Limit_Flag = 0x01;
// }
//
// if(Rs485SwiInfo.RL_Lower_limit != Rs485SwiInfo.RL_Lower_limit_Last)
// {
// Rs485SwiInfo.RL_Lower_limit_Last = Rs485SwiInfo.RL_Lower_limit;
// Rs485SwiInfo.RL_Limit_Flag = 0x01;
// }
if(Rs485SwiInfo.Rotary_PageEn != Rs485SwiInfo.Rotary_PageEnLast)
{
Rs485SwiInfo.Rotary_PageEnLast = Rs485SwiInfo.Rotary_PageEn;
Rs485SwiInfo.Rotary_PageFlag = 0x01;
}
if(0x01 == Rs485SwiInfo.RotaryValue_Flag)
{
BLVP2_Rotary_Switch_Ctrl(&BUS_Public, &Rs485SwiInfo);
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Rs485SwiInfo.RotaryBL_Flag)
{
BLVP2_Rotary_BL_Ctrl(&BUS_Public, &Rs485SwiInfo);
Ret = RS485OCCUPYTIME;
}
else if(Rs485SwiInfo.RotaryCCTValue_Flag == 0x01) //2025-07-10<31><30>YYW,<2C>ȶԱ<C8B6><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ťɫ<C5A5><C9AB><EFBFBD>ϱ<EFBFBD>ֵ<EFBFBD>͵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ɫ<EFBFBD><C9AB>
{
BLVP2_Rotary_CCTValue_Ctrl(&BUS_Public, &Rs485SwiInfo);
Ret = RS485OCCUPYTIME;
}
// else if(0x01 == Rs485SwiInfo.RL_Limit_Flag)
// {
// BLVP2_Rotary_LightLimit_Ctrl(&BUS_Public, &Rs485SwiInfo);
// Ret = RS485OCCUPYTIME;
// }
else if(Rs485SwiInfo.Rotary_PageFlag == 0x01)
{
BLVP2_Rotary_PageEn_Ctrl(&BUS_Public, &Rs485SwiInfo);
Ret = RS485OCCUPYTIME;
}
if(Ret == RS485OCCUPYTIME)
{
if(Rs485SwiInfo.DevSendCnt > ROTARYSENDTIMEMAX)
{
if(Rs485SwiInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Device_Offline",__func__);
LOG_Device_Online_Record(Dev_Rs458_RotaryCtrl, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485SwiInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485SwiInfo.DevOffline != Rs485SwiInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485SwiInfo.DevOfflineLast = Rs485SwiInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x01 == Rs485SwiInfo.RotaryValue_Flag)
{
Rs485SwiInfo.RotaryValue_Flag = 0x00;
}
else if(0x01 == Rs485SwiInfo.RotaryBL_Flag)
{
Rs485SwiInfo.RotaryBL_Flag = 0x00;
}
else if(0x01 == Rs485SwiInfo.RL_Limit_Flag)
{
Rs485SwiInfo.RL_Limit_Flag = 0x00;
}
else if(Rs485SwiInfo.Rotary_PageFlag == 0x01)
{
Rs485SwiInfo.Rotary_PageFlag = 0x00;
}else if(Rs485SwiInfo.RotaryCCTValue_Flag == 0x01)
{
Rs485SwiInfo.RotaryCCTValue_Flag = 0x00;
}
Rs485SwiInfo.DevSendCnt = 0x00;
}
else
{
Rs485SwiInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&Rs485SwiInfo.comm_record,0x01,0x00);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
}
return Ret;
}

View File

@@ -0,0 +1,15 @@
#ifndef _BLVP2_485_DEV_ROTARY_SWIFUN_H_
#define _BLVP2_485_DEV_ROTARY_SWIFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "APP_SwitchCtrl.h"
/*BLV485<38><35><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>*/
void BLVP2_485_Dev_Rotary_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo);
#endif

View File

@@ -0,0 +1,280 @@
/**
******************************************************************************
* @file BLV_485_Dev_BLWFreshAirFun.c
* @author BLW RCU development Team <09>ֿ<EFBFBD><D6BF><EFBFBD>
* @version V1.0.0
* @date 2023<32><33>2<EFBFBD><32>24<32><34>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_BLWFloorHeatFun.h"
#define BLW_FLOORHEAT_MAX_SEND_CNT 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define BLW_FLOORHEAT_RECEIVE_MAX_DATA_LEN 0x18 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
void BLW_FloorHeat_Control(Device_Public_Information_G *BUS_Public,uint8_t function,uint8_t control); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
void BLW_FloorHeat_Poll_Order(Device_Public_Information_G *BUS_Public); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EEBAAF>
void BLW_FloorHeat_Change_Data(RS485_FloorHeat_INFO *FloorHeat_Info,uint8_t *data); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*******************************************************************************
* @brief <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* FloorHeat_Info 485<38><35>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_FloorHeat_Init(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info)
{
BUS_Public->polling_cf = (uint32_t)&BLW_FloorHeat_Polling_Ctrl; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
BUS_Public->processing_cf = (uint32_t)&BLW_FloorHeat_Data_Processing; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD>豸 %d <20><>ַ",BUS_Public->addr);
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* @retval RS485OCCUPYTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
RS485OCCUPYNOTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
* @attention None
*******************************************************************************/
uint8_t BLW_FloorHeat_Polling_Ctrl(uint32_t dev_addr)
{
uint8_t send_time = RS485OCCUPYNOTIME; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨Ĭ<E4A3A8>Ϸ<EFBFBD><CFB7>Ͳ<EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FloorHeat_Info.ctrl_flag.on_off == 0x01) //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>1
{
if(FloorHeat_Info.ctrl_cnt.on_off != 0x00) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
FloorHeat_Info.ctrl_cnt.on_off--; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>1
}
else //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>Ϊ0
{
FloorHeat_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>0
}
BLW_FloorHeat_Control(&BUS_Public, FLOORHEAT_ON_OFF_FUNCTION, FloorHeat_Info.ctrl_content.on_off); //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
else if(FloorHeat_Info.ctrl_flag.set_oc == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.ctrl_cnt.set_oc != 0x00) //<2F>¶ȿ<C2B6><C8BF>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
FloorHeat_Info.ctrl_cnt.set_oc--; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>1
}
else //<2F><><EFBFBD>ٿ<EFBFBD><D9BF>ƴ<EFBFBD><C6B4><EFBFBD>Ϊ0
{
FloorHeat_Info.ctrl_flag.set_oc = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȱ<C2B6>־<EFBFBD><D6BE>0
}
BLW_FloorHeat_Control(&BUS_Public, FLOORHEAT_SET_OC_FUNCTION, FloorHeat_Info.ctrl_content.set_oc); //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
else //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
BLW_FloorHeat_Poll_Order(&BUS_Public); //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
if(send_time == RS485OCCUPYTIME) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
{
if(FloorHeat_Info.DevSendCnt > BLW_FLOORHEAT_MAX_SEND_CNT) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.DevOffline != DEV_IS_OFFLINE) //<2F><EFBFBD><E8B1B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><D6B7><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_HEATER, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FloorHeat_Info.DevOffline = DEV_IS_OFFLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FloorHeat_Info.DevOffline != FloorHeat_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FloorHeat_Info.DevOfflineLast = FloorHeat_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ط<EFBFBD>
{
FloorHeat_Info.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&FloorHeat_Info.comm_record, 0x01, 0x00); //ͨѶͳ<D1B6><CDB3>
FloorHeat_Info.inquire_tick = SysTick_1ms; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʱ<D1AF><CAB1><EFBFBD><EFBFBD>
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return send_time;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <09><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 0-<2D>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>ݣ<EFBFBD>1-<2D><><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
* @attention None
*******************************************************************************/
uint8_t BLW_FloorHeat_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rec = 0x01, data[BLW_FLOORHEAT_RECEIVE_MAX_DATA_LEN]; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
uint16_t crc_value;
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff(data, len, data_addr); //<2F><>ȡ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((data[0] != 0x55) || ((data[1]) != 0x55) || (data[2] != 0xEE) || (data[3]+0x03 != len) || (data[4] != 0x06) || (BUS_Public.addr != data[5]))
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
return rec;
}
crc_value = data[len - 2] + (data[len - 1] << 8); //<2F><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>CRC16У<36><D0A3>ֵ
if(crc_value == NetCRC16_2(&data[3], len - 5)) //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>У<EFBFBD><D0A3><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>ͬ
{
rec = 0x00; //<2F>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FloorHeat_Info.DevOffline != DEV_IS_ONLINE)
{
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_HEATER, BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FloorHeat_Info.DevSendCnt = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
FloorHeat_Info.DevOffline = DEV_IS_ONLINE; //<2F><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FloorHeat_Info.DevOffline != FloorHeat_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FloorHeat_Info.DevOfflineLast = FloorHeat_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&FloorHeat_Info.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[3]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
case 0x15: //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EEA3A8>ȡ<EFBFBD><C8A1>ů<EFBFBD><C5AF><EFBFBD>ݣ<EFBFBD>
BLW_FloorHeat_Change_Data(&FloorHeat_Info, &data[0]); //<2F><>ů<EFBFBD><C5AF><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
break;
case 0x07: //<2F><><EFBFBD>õ<EFBFBD>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(data[7] == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
switch(data[6]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9>ܻظ<DCBB>
{
case FLOORHEAT_ON_OFF_FUNCTION: //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>Ʊ<EFBFBD>־", BUS_Public.addr);
FloorHeat_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>0
FloorHeat_Info.new_state.on_off = FloorHeat_Info.ctrl_content.on_off; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
break;
case FLOORHEAT_SET_OC_FUNCTION: //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȹ<C2B6><C8B9><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶Ȼظ<C8BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȿ<C2B6><C8BF>Ʊ<EFBFBD>־", BUS_Public.addr);
FloorHeat_Info.ctrl_flag.set_oc = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD>0
FloorHeat_Info.new_state.set_oc = FloorHeat_Info.ctrl_content.set_oc; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
break;
}
}
break;
}
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů˽<C5AF><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return rec;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* function <09><><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>
* control <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void BLW_FloorHeat_Control(Device_Public_Information_G *BUS_Public,uint8_t function,uint8_t control)
{
uint8_t data[10] = {0x55, 0x55, 0xEE, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[5] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
switch(function) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case FLOORHEAT_ON_OFF_FUNCTION: //<2F><><EFBFBD>ػ<EFBFBD>
data[6] = FLOORHEAT_ON_OFF_FUNCTION;
data[7] = control;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>ÿ<EFBFBD><C3BF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>%d ״̬<D7B4><CCAC>%d",BUS_Public->addr,control);
break;
case FLOORHEAT_SET_OC_FUNCTION: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[6] = FLOORHEAT_SET_OC_FUNCTION;
data[7] = control;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD>ȣ<C2B6><C8A3><EFBFBD>ַ<EFBFBD><D6B7>%d ״̬<D7B4><CCAC>%d",BUS_Public->addr,control);
break;
}
NetCRC16(&data[3], 7);
MCU485_SendString(BUS_Public->port, data, 10); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 10); //<2F><>־<EFBFBD><D6BE>¼
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EEBAAF>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
* @attention None
*******************************************************************************/
void BLW_FloorHeat_Poll_Order(Device_Public_Information_G *BUS_Public)
{
uint8_t data[9] = {0x55, 0x55, 0xEE, 0x06, 0x06, 0x00, 0x0A, 0x00, 0x00}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[5] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
NetCRC16(&data[3], 6);
MCU485_SendString(BUS_Public->port, data, 9); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
* @param
* FloorHeat_Info 485<38><35>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* data <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval 0 - <20><><EFBFBD><EFBFBD>û<EFBFBD>
1 - <20><><EFBFBD><EFBFBD><EFBFBD>б
* @attention None
*******************************************************************************/
void BLW_FloorHeat_Change_Data(RS485_FloorHeat_INFO *FloorHeat_Info,uint8_t *data)
{
FloorHeat_Info->new_state.on_off = data[7]; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
FloorHeat_Info->new_state.set_oc = data[10]; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(data[10] == 0x00) //<2F><EFBFBD>ת<EFBFBD><D7AA>
{
FloorHeat_Info->new_state.set_oc = 32; //<2F><EFBFBD>ת<EFBFBD><D7AA>
}
if(((data[16] & 0x08) >> 3) == FLOORHEAT_VALVE_ON) //<2F><><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>
{
FloorHeat_Info->new_state.valve = TEMP_VALVE_OPEN; //<2F><><EFBFBD><EFBFBD>
}
else //<2F><><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>
{
FloorHeat_Info->new_state.valve = TEMP_VALVE_CLOSE; //<2F><><EFBFBD><EFBFBD>
}
FloorHeat_Info->new_state.indoor_oc = data[20]; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(FloorHeat_Info->ctrl_content.on_off != FloorHeat_Info->ctrl_content_last.on_off) //״̬ͬ<CCAC><CDAC>
{
FloorHeat_Info->ctrl_content_last.on_off = FloorHeat_Info->ctrl_content.on_off;
}
if(FloorHeat_Info->ctrl_content.set_oc != FloorHeat_Info->ctrl_content_last.set_oc)
{
FloorHeat_Info->ctrl_content_last.set_oc = FloorHeat_Info->ctrl_content.set_oc;
}
if(FloorHeat_Info->ctrl_content.indoor_oc != FloorHeat_Info->ctrl_content_last.indoor_oc)
{
FloorHeat_Info->ctrl_content_last.indoor_oc = FloorHeat_Info->ctrl_content.indoor_oc;
}
if(FloorHeat_Info->ctrl_content.valve != FloorHeat_Info->ctrl_content_last.valve)
{
FloorHeat_Info->ctrl_content_last.valve = FloorHeat_Info->ctrl_content.valve;
}
}

View File

@@ -0,0 +1,8 @@
#ifndef __BLV_485_DEV_BLWFLOORHEATFUN_H
#define __BLV_485_DEV_BLWFLOORHEATFUN_H
#include "BLV_485_Dev_FloorHeatFun.h"
void BLW_RS485_FloorHeat_Init(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info); //<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
uint8_t BLW_FloorHeat_Polling_Ctrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
uint8_t BLW_FloorHeat_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><C5AF><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif

View File

@@ -0,0 +1,262 @@
/**
******************************************************************************
* @file BLV_485_Dev_BLWFreshAirFun.c
* @author BLW RCU development Team <09>ֿ<EFBFBD><D6BF><EFBFBD>
* @version V1.0.0
* @date 2023<32><33>2<EFBFBD><32>24<32><34>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_BLWFreshAirFun.h"
#define BLW_FRESHAIR_MAX_SEND_CNT 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define BLW_FRESHAIR_RECEIVE_MAX_DATA_LEN 0x18 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
void BLW_FreshAir_Control(Device_Public_Information_G *BUS_Public,uint8_t function,uint8_t control); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
void BLW_FreshAir_Poll_Order(Device_Public_Information_G *BUS_Public); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EEBAAF>
void BLW_FreshAir_Change_Data(RS485_FreshAir_INFO *FreshAir_Info,uint8_t *data); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*******************************************************************************
* @brief <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* FreshAir_Info 485<38>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_FreshAir_Init(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info)
{
BUS_Public->polling_cf = (uint32_t)&BLW_FreshAir_Polling_Ctrl; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
BUS_Public->processing_cf = (uint32_t)&BLW_FreshAir_Data_Processing; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>豸 %d <20><>ַ",BUS_Public->addr);
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* @retval RS485OCCUPYTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
RS485OCCUPYNOTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
* @attention None
*******************************************************************************/
uint8_t BLW_FreshAir_Polling_Ctrl(uint32_t dev_addr)
{
uint8_t send_time = RS485OCCUPYNOTIME; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨Ĭ<E4A3A8>Ϸ<EFBFBD><CFB7>Ͳ<EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD>
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FreshAir_Info.ctrl_flag.on_off == 0x01) //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>1
{
if(FreshAir_Info.ctrl_cnt.on_off != 0x00) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
FreshAir_Info.ctrl_cnt.on_off--; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>1
}
else //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>Ϊ0
{
FreshAir_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>0
}
BLW_FreshAir_Control(&BUS_Public, FRESHAIR_ON_OFF_FUNCTION, FreshAir_Info.ctrl_content.on_off); //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
else if(FreshAir_Info.ctrl_flag.wind_velocity == 0x01) //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
{
if(FreshAir_Info.ctrl_cnt.wind_velocity != 0x00) //<2F><><EFBFBD>ٿ<EFBFBD><D9BF>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
FreshAir_Info.ctrl_cnt.wind_velocity--; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>1
}
else //<2F><><EFBFBD>ٿ<EFBFBD><D9BF>ƴ<EFBFBD><C6B4><EFBFBD>Ϊ0
{
FreshAir_Info.ctrl_flag.wind_velocity = 0x00; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7>ٱ<EFBFBD>־<EFBFBD><D6BE>0
}
BLW_FreshAir_Control(&BUS_Public, FRESHAIR_WIND_VELOCITY_FUNCTION, FreshAir_Info.ctrl_content.wind_velocity); //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
else //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
BLW_FreshAir_Poll_Order(&BUS_Public); //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
if(send_time == RS485OCCUPYTIME) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
{
if(FreshAir_Info.DevSendCnt > BLW_FRESHAIR_MAX_SEND_CNT) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
{
if(FreshAir_Info.DevOffline != DEV_IS_OFFLINE) //<2F><EFBFBD><E8B1B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><D6B7><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_FreshAir, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FreshAir_Info.DevOffline = DEV_IS_OFFLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FreshAir_Info.DevOffline != FreshAir_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FreshAir_Info.DevOfflineLast = FreshAir_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ط<EFBFBD>
{
FreshAir_Info.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&FreshAir_Info.comm_record, 0x01, 0x00); //ͨѶͳ<D1B6><CDB3>
FreshAir_Info.inquire_tick = SysTick_1ms; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʱ<D1AF><CAB1><EFBFBD><EFBFBD>
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return send_time;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <09><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 0-<2D>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>1-<2D><><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
* @attention None
*******************************************************************************/
uint8_t BLW_FreshAir_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rec = 0x01, data[BLW_FRESHAIR_RECEIVE_MAX_DATA_LEN]; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
uint16_t crc_value;
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff(data, len, data_addr); //<2F><>ȡ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((data[0] != 0x55) || ((data[1]) != 0x55) || (data[2] != 0xEE) || (data[3]+0x03 != len) || (data[4] != 0x05) || (BUS_Public.addr != data[5]))
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return rec;
}
crc_value = data[len - 2] + (data[len - 1] << 8); //<2F><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>CRC16У<36><D0A3>ֵ
if(crc_value == NetCRC16_2(&data[3], len - 5)) //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>У<EFBFBD><D0A3><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>ͬ
{
rec = 0x00; //<2F>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FreshAir_Info.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_FreshAir, BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FreshAir_Info.DevSendCnt = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
FreshAir_Info.DevOffline = DEV_IS_ONLINE; //<2F><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FreshAir_Info.DevOffline != FreshAir_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FreshAir_Info.DevOfflineLast = FreshAir_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&FreshAir_Info.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[3]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
case 0x15: //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EEA3A8>ȡ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>
BLW_FreshAir_Change_Data(&FreshAir_Info, &data[0]); //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
break;
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(data[7] == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
switch(data[6]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9>ܻظ<DCBB>
{
case FRESHAIR_ON_OFF_FUNCTION: //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>Ʊ<EFBFBD>־", BUS_Public.addr);
FreshAir_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>0
FreshAir_Info.new_state.on_off = FreshAir_Info.ctrl_content.on_off; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
break;
case FRESHAIR_WIND_VELOCITY_FUNCTION: //<2F><><EFBFBD>ٹ<EFBFBD><D9B9><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ٻظ<D9BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ٿ<EFBFBD><D9BF>Ʊ<EFBFBD>־", BUS_Public.addr);
FreshAir_Info.ctrl_flag.wind_velocity = 0x00; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>0
FreshAir_Info.new_state.wind_velocity = FreshAir_Info.ctrl_content.wind_velocity; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
break;
}
}
break;
}
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return rec;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* function <09><><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>
* control <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void BLW_FreshAir_Control(Device_Public_Information_G *BUS_Public,uint8_t function,uint8_t control)
{
uint8_t data[10] = {0x55, 0x55, 0xEE, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[5] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
switch(function) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case FRESHAIR_ON_OFF_FUNCTION: //<2F><><EFBFBD>ػ<EFBFBD>
data[6] = FRESHAIR_ON_OFF_FUNCTION;
data[7] = control;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>%d ״̬<D7B4><CCAC>%d",BUS_Public->addr,control);
break;
case FRESHAIR_WIND_VELOCITY_FUNCTION: //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
data[6] = FRESHAIR_WIND_VELOCITY_FUNCTION;
data[7] = control;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD>٣<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>%d ״̬<D7B4><CCAC>%d",BUS_Public->addr,control);
break;
}
NetCRC16(&data[3], 7);
MCU485_SendString(BUS_Public->port, data, 10); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 10); //<2F><>־<EFBFBD><D6BE>¼
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EEBAAF>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* FreshAir_Info 485<38>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
* @attention None
*******************************************************************************/
void BLW_FreshAir_Poll_Order(Device_Public_Information_G *BUS_Public)
{
uint8_t data[9] = {0x55, 0x55, 0xEE, 0x06, 0x05, 0x00, 0x0A, 0x00, 0x00}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[5] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
NetCRC16(&data[3], 6);
MCU485_SendString(BUS_Public->port, data, 9); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
* @param
* FreshAir_Info 485<38>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* data <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval 0 - <20><><EFBFBD><EFBFBD>û<EFBFBD>
1 - <20><><EFBFBD><EFBFBD><EFBFBD>б
* @attention None
*******************************************************************************/
void BLW_FreshAir_Change_Data(RS485_FreshAir_INFO *FreshAir_Info,uint8_t *data)
{
FreshAir_Info->new_state.on_off = data[7]; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
FreshAir_Info->new_state.wind_velocity = data[13]; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(FreshAir_Info->ctrl_content.on_off != FreshAir_Info->ctrl_content_last.on_off) //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬ͬ<CCAC><CDAC>
{
FreshAir_Info->ctrl_content_last.on_off = FreshAir_Info->ctrl_content.on_off;
}
if(FreshAir_Info->ctrl_content.wind_velocity != FreshAir_Info->ctrl_content_last.wind_velocity) //<2F><><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD>״̬ͬ<CCAC><CDAC>
{
FreshAir_Info->ctrl_content_last.wind_velocity = FreshAir_Info->ctrl_content.wind_velocity;
}
}

View File

@@ -0,0 +1,8 @@
#ifndef __BLV_485_DEV_BLWFRESHAIRFUN_H
#define __BLV_485_DEV_BLWFRESHAIRFUN_H
#include "BLV_485_Dev_FreshAirFun.h"
void BLW_RS485_FreshAir_Init(Device_Public_Information_G *BUS_Public, RS485_FreshAir_INFO *FreshAir_Info); //<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
uint8_t BLW_FreshAir_Polling_Ctrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
uint8_t BLW_FreshAir_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif

View File

@@ -0,0 +1,413 @@
/**
******************************************************************************
* @file BLV_485_Dev_BLWLockFun.c
* @author BLW RCU development Team
* @version V1.0.0
* @date 2021<32><31>11<31><31>02<30><32>
* @brief ΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD> <20><><EFBFBD>Կ<EFBFBD><D4BF>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>״̬
* Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RF΢<46><CEA2><EFBFBD><EFBFBD>
*
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_BLWLockFun.h"
#include "string.h"
#define RFLOCKCYCLEWAITTIMEOUT 5000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ʱ<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
void RF_Rs485_WxLock_Pro(Device_Public_Information_G *BUS_Public, uint8_t *Data, RS485_WxLock_INFO *Rs485WxLockInfo);
uint8_t RF_Rs485_WxLock_CtrlCycle(uint32_t dev_addr);
uint8_t RF_WxLock_Read(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void RF_WxLock_TimeSet(uint32_t dev_addr, uint32_t RfGatewayHostAddr);
void RF_WxLock_Ctrl(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo);
//void RF_WxLock_Ctrl(CFG_Dev_AddP CfgDevAdd, RS485_WxLock_INFOP Rs485WxLockInfo,uint32_t dev_addr);
void RFDevRecAsk(uint32_t CfgDevAddRfGatewayHost, Device_Public_Information_G *BUS_Public, uint8_t DevType);
/*******************************************************************************
* @Function Name : BLW_RS485_BLWLockFun_Init
* @Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
* @Input :
@type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
@addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
@polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
@processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* @Return : None
*******************************************************************************/
void BLW_RS485_WxLockFun_Init(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFO *Rs485WxLockInfo)
{
BUS_Public->polling_cf = (uint32_t)&RF_Rs485_WxLock_CtrlCycle;
BUS_Public->processing_cf = (uint32_t)&RF_WxLock_Read;
Rs485WxLockInfo->RfGatewayHostAddr = Find_Device_List_Information(DEV_RS485_RFGatewayHost, RFGATEWAYADDRDEFAULT);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>*/
uint8_t RF_Rs485_WxLock_CtrlCycle(uint32_t dev_addr)
{
// static uint8_t CycleCnt = 0;
uint8_t Ret = 0x00;
Device_Public_Information_G BUS_Public;
RS485_WxLock_INFO Rs485WxLockInfo;
// CFG_Dev_Add CfgDevAdd;
// uint16_t DataLen;
// uint8_t Crc_buf;
// CfgDevAddRfGatewayHost = HostRunInfo.CfgDevAddRFGateway;
// if(0x00 == dev_addr)
// {
// return Ret;
// }
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr);
SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately);
if((NULL == Rs485WxLockInfo.RfGatewayHostAddr))
{
return Ret;
}
{
// if(DEV_IS_ONLINE == Rs485WxLockInfo.DevOffline) //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
{
if(0x01 == Rs485WxLockInfo.WeixinTimeSetFlag) //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>ʱ<EFBFBD><CAB1>
{
if(0x00 != Rs485WxLockInfo.WeixinTimeSetCnt)
{
Rs485WxLockInfo.WeixinTimeSetCnt--; //<2F>ݼ<EFBFBD>
}
else if(0x00 == Rs485WxLockInfo.WeixinTimeSetCnt)
{
Rs485WxLockInfo.WeixinTimeSetFlag = 0;
}
// RF_WxLock_TimeSet(dev_addr, Rs485WxLockInfo.RfGatewayHostAddr);//<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ڱ<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD>Ļظ<C4BB><D8B8>Ż<EFBFBD><C5BB><EFBFBD>0 <20><><EFBFBD><EFBFBD>΢<EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>֮<EFBFBD>󣬵<EFBFBD><F3A3ACB5><EFBFBD>ȡΪ<C8A1><CEAA><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ѯ
Ret = 0x01;
}
else if(0x01 == Rs485WxLockInfo.WeixinCtrlFlag) //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
{
if(SysTick_1ms >= Rs485WxLockInfo.WeixinCycleCnt) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
Rs485WxLockInfo.WeixinCycleCnt = SysTick_1ms + RFLOCKCYCLEWAITTIMEOUT;
if(0x00 != Rs485WxLockInfo.WeixinCtrlSendCnt)
{
Rs485WxLockInfo.WeixinCtrlSendCnt--; //<2F>ݼ<EFBFBD>
}
else if(0x00 == Rs485WxLockInfo.WeixinCtrlSendCnt)
{
Rs485WxLockInfo.WeixinCtrlFlag = 0;
}
RF_WxLock_Ctrl(&BUS_Public, &Rs485WxLockInfo);//<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ڱ<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD>Ļظ<C4BB><D8B8>Ż<EFBFBD><C5BB><EFBFBD>0 <20><><EFBFBD><EFBFBD>΢<EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>֮<EFBFBD>󣬵<EFBFBD><F3A3ACB5><EFBFBD>ȡΪ<C8A1><CEAA><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ѯ
Ret = 0x01;
}
}
}
}
if(0x01 == Ret)
{
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485WxLockInfo.comm_record,0x01,0x00);
if(Rs485WxLockInfo.DevSendCnt > WxLockCtrlSendMax)
{
if(Rs485WxLockInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RFGatewayHostinfo DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_RS485_WxLock,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485WxLockInfo.DevOffline != Rs485WxLockInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485WxLockInfo.DevOfflineLast = Rs485WxLockInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485WxLockInfo.DevSendCnt++;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
#define RFGatewayCTRLLEN 8 //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
* @param
* CfgDevAddOut <20><EFBFBD>ڵ<EFBFBD>
* @retval <20><>
* @attention ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void RF_WxLock_Ctrl(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
//<2F><><EFBFBD>ص<EFBFBD>ַ RFTy RFAD Sum PLEN CMD <20><><EFBFBD><EFBFBD> CTRL
uint8_t SendBuf[RFGatewayCTRLLEN];// = {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x31, 0x00};
// uint8_t RfDevAddr = SRAM_Read_Byte(RfGatewayHostAddr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
// uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port); //ͨѶ<CDA8>˿<EFBFBD>
// SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately); //<2F><>485<38><35><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[0] = RFGATEWAYADDRDEFAULT; //RfGatewayHostAddr->BUS_Public.addr;//<2F><><EFBFBD>ص<EFBFBD>ַCfgDevAdd->DevBaud;//BLV_SN_Get(&Rs485RFGatewaySwtInfo->SwtSn, RFGatewaySwtSnMin, RFGatewaySwtSnMax);
SendBuf[1] = RFGATEWAYLOCKTYPE;//CfgDevAdd->Dev485Fre; //
SendBuf[2] = BUS_Public->addr;
SendBuf[4] = 0x02;//0x01 + Rs485RFGatewaySwtInfo->SwtOutputValidNum;
SendBuf[5] = 0x06;
SendBuf[6] = 0x31;
switch(Rs485WxLockInfo->WeixinCtrlState)
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
case 0x02: //<2F>ر<EFBFBD>
SendBuf[7] = Rs485WxLockInfo->WeixinCtrlState;//;
break;
}
SendBuf[3] = CheckSum_Overlook_Check(SendBuf, RFGatewayCTRLLEN, 3);
// if(0x00 == Rs485WxLockInfo.WeixinCtrlFlag) //<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
// {
// RS485_Port_SendFun(CfgDevAdd, SendBuf, RFGatewayTimeSetLEN, RFLOCKCYCLETIMEOUT);
// }
// else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
{
MCU485_SendString(BUS_Public->port,SendBuf,RFGatewayCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, SendBuf, RFGatewayCTRLLEN);
// RS485_Port_SendFun(CfgDevAdd, SendBuf, RFGatewayCTRLLEN, RFLOCKCTRLTIMEOUT);
}
}
//#define RFGatewayTimeSetLEN 8 //΢<><CEA2><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1>ij<EFBFBD><C4B3><EFBFBD>
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
* @param
* dev_addr <20><EFBFBD>ڵ<EFBFBD>
* RfGatewayHostAddr <20><><EFBFBD>ؽڵ<D8BD>
* @retval <20><>
* @attention ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
//void RF_WxLock_TimeSet(uint32_t dev_addr, uint32_t RfGatewayHostAddr)
//{
// //<2F><><EFBFBD>ص<EFBFBD>ַ RFTy RFAD Sum PLEN CMD <20><><EFBFBD><EFBFBD> CTRL
// uint8_t SendBuf[RFGatewayTimeSetLEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x00};
// RS485_WxLock_INFOP Rs485WxLockInfo;
//
//// Rs485WxLockInfo = CfgDevAdd->DevDataStruct;
//
// SendBuf[0] = CfgDevAddRfGatewayHost->DevAddr;//<2F><><EFBFBD>ص<EFBFBD>ַCfgDevAdd->DevBaud;//BLV_SN_Get(&Rs485RFGatewaySwtInfo->SwtSn, RFGatewaySwtSnMin, RFGatewaySwtSnMax);
// SendBuf[1] = RFGATEWAYLOCKTYPE;//CfgDevAdd->Dev485Fre; //
// SendBuf[2] = CfgDevAdd->DevAddr;
// SendBuf[4] = 0x02;//0x01 + Rs485RFGatewaySwtInfo->SwtOutputValidNum;
//
// switch(Rs485WxLockInfo.WeixinTimeSetValue)
// {
// case 0x01: //˯<><CBAF>ʱ<EFBFBD><CAB1>Ϊ2<CEAA><32>
// case 0x02: //˯<><CBAF>ʱ<EFBFBD><CAB1>Ϊ4<CEAA><34>
// case 0x03: //˯<><CBAF>ʱ<EFBFBD><CAB1>Ϊ8<CEAA><38>
// case 0x04: //˯<><CBAF>ʱ<EFBFBD><CAB1>Ϊ16<31><36>
// SendBuf[7] = Rs485WxLockInfo->WeixinTimeSetValue;//;
// break;
// }
//
// SendBuf[3] = CheckSum_Overlook_Check(SendBuf, RFGatewayTimeSetLEN, 3);
//
// if(0x00 == Rs485WxLockInfo->WeixinTimeSetFlag) //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
// {
// RS485_Port_SendFun(CfgDevAdd, SendBuf, RFGatewayTimeSetLEN, RFLOCKCYCLETIMEOUT);
// }
// else
// {
// RS485_Port_SendFun(CfgDevAdd, SendBuf, RFGatewayTimeSetLEN, RFLOCKSETTIMEOUT);
// }
//}
#define IsMyData 0x00
#define IsNotMyData 0x01
#define RECLENMAX 40 //<2F><><EFBFBD><EFBFBD>40<34><30><EFBFBD>ֽڣ<D6BD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
/**
* @name <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 1 <20><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
* @attention
*
*/
uint8_t RF_WxLock_Read(uint32_t dev_addr,uint32_t data_addr,uint16_t DataLen)
{
uint8_t Crc_buf;
RS485_WxLock_INFO Rs485WxLockInfo; //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = IsNotMyData;
uint8_t Data[RECLENMAX]; //<2F>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢485<38><35><EFBFBD><EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
// CFG_Dev_Add CfgDevAdd;
Device_Public_Information_G BUS_Public;
if((NULL == dev_addr) || (DataLen > RECLENMAX)) //<2F><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><ECB3A3>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
{
return Ret;
}
SRAM_Read_Buff(Data, DataLen, data_addr); //<2F><>485<38><35><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr);
SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately);
if((NULL == Rs485WxLockInfo.RfGatewayHostAddr) || ((Data[4]+0x06) != DataLen) || (RFGATEWAYLOCKTYPE != Data[1]) || (BUS_Public.addr != Data[2])) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼̵<DFBC><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ߵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
return Ret;
}
// Rs485WxLockInfo = CfgDevAdd->DevDataStruct;
Crc_buf = CheckSum_Overlook_Check(Data, DataLen, 3); //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(Crc_buf == Data[3]) //У<><D0A3><EFBFBD>ж<EFBFBD> <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Ret = IsMyData;
if(Rs485WxLockInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485WxLock DEV_IS_ONLINE");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.DevSendCnt = 0x00;
Rs485WxLockInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BLV_Communication_Record(&Rs485WxLockInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
if(Rs485WxLockInfo.DevOffline != Rs485WxLockInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485WxLockInfo.DevOfflineLast = Rs485WxLockInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
switch(Data[5])
{
case 0x51:
switch(Data[4])
{
case 0x04: //΢<><CEA2><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><>5<EFBFBD><35><EFBFBD>ֽ<EFBFBD>
// RFLockRecAsk(CfgDevAdd, CfgDevAddRfGatewayHost); //RCU<43>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>յ<EFBFBD>
RFDevRecAsk(Rs485WxLockInfo.RfGatewayHostAddr, &BUS_Public, RFGATEWAYLOCKTYPE); //<2F>ظ<EFBFBD>ȷ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
RF_Rs485_WxLock_Pro(&BUS_Public, &Data[0], &Rs485WxLockInfo); //У<><D0A3>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>
if(0x01 == Data[7]) //״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
Rs485WxLockInfo.WeixinCtrlFlag = 0; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
Rs485WxLockInfo.WeixinCycleCnt = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´ο<C2B4><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port, BUS_Public.baud,Data,DataLen);
break;
}
break;
case 0x16: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD>ظ<EFBFBD>
if(0x02 == Data[4])
{
// RFLockRecAsk(CfgDevAdd, Rs485WxLockInfo.RfGatewayHostAddr); //RCU<43>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>յ<EFBFBD>
RFDevRecAsk(Rs485WxLockInfo.RfGatewayHostAddr, &BUS_Public, RFGATEWAYLOCKTYPE); //<2F>ظ<EFBFBD>ȷ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
Rs485WxLockInfo.WeixinTimeSetFlag = 0;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port, BUS_Public.baud,Data,DataLen);
}
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
/**
* @name <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
* @param
* CfgDevAddRfGatewayHost <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
* CfgDevAdd <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
* DevType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @retval <20><>
* @attention <20><>·״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·״̬<D7B4><CCAC><EFBFBD><EFBFBD>
*/
void RFDevRecAsk(uint32_t CfgDevAddRfGatewayHost, Device_Public_Information_G *BUS_Public, uint8_t DevType)
{
uint8_t SendBuf[7];// = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
SendBuf[0] = RFGATEWAYADDRDEFAULT ; // CfgDevAddRfGatewayHost->BUS_Public.addr;//<2F><><EFBFBD>ص<EFBFBD>ַ
SendBuf[1] = DevType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
SendBuf[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ
SendBuf[4] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[5] = 0x41; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x00;
SendBuf[3] = CheckSum_Overlook_Check(SendBuf, 0x07, 3);//[3] <20><><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, SendBuf, 0x07); //CfgDevAddRfGatewayHost->BUS_Public.port
// RS485_Port_SendFun(CfgDevAddRfGatewayHost, SendBuf, 0x07, RFDEVASKTIMEOUT);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>д<EFBFBD><D0B4><EFBFBD>*/
void RF_Rs485_WxLock_Pro(Device_Public_Information_G *BUS_Public, uint8_t *Data, RS485_WxLock_INFO *Rs485WxLockInfo)
{
// RS485_WxLock_INFOP Rs485WxLockInfo;
// Rs485WxLockInfo = CfgDevAdd->DevDataStruct;
// Service.food_plate = Data[1]; //ͬ<><CDAC>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>
switch(Data[7])
{
case 0x01:
Rs485WxLockInfo->WeixinLockState = DEV_CTRLWAY_OPEN; //<2F><>״̬ͬ<CCAC><CDAC>
break;
case 0x02:
Rs485WxLockInfo->WeixinLockState = DEV_CTRLWAY_CLOSE;
break;
default:
Rs485WxLockInfo->WeixinLockState = DEV_CTRLWAY_INVALID; //<2F><>Ч<EFBFBD>ģ<EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
break;
}
if(Rs485WxLockInfo->WeixinLockStateLast != Rs485WxLockInfo->WeixinLockState) //
{
Rs485WxLockInfo->WeixinLockStateLast = Rs485WxLockInfo->WeixinLockState;
Rs485WxLockInfo->WeixinLockAction = Rs485WxLockInfo->WeixinLockState; //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485WxLockInfo->WeixinLockUpFlag = 0x01; //΢<><CEA2><EFBFBD><EFBFBD>״̬<D7B4>ϱ<EFBFBD><CFB1><EFBFBD>־
}
Rs485WxLockInfo->DoorLockVoltage = Data[8] + (Data[9]<<8);
Rs485WxLockInfo->WeixinLockUpVol = Rs485WxLockInfo->DoorLockVoltage*10/6; //<2F><><EFBFBD><EFBFBD><EFBFBD>ٷֱ<D9B7>
// Rs485WxLockInfo->DoorLockVoltageL = Data[2];//; //0x88
// Rs485WxLockInfo->DoorLockVoltageH = Data[3];//; //0x13
}

View File

@@ -0,0 +1,18 @@
#ifndef _BLV_485_DEV_BLWLOCKFUN_H_
#define _BLV_485_DEV_BLWLOCKFUN_H_
#include "stdint.h"
#include "BLV_485_Dev_WeixinLockFun.h"
void BLW_RS485_WxLockFun_Init(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFO *Rs485WxLockInfo);
#endif

View File

@@ -0,0 +1,595 @@
/**
******************************************************************************
* @file BLV_485_Dev_BLWMusicFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2022<32><32>03<30><33>17<31><37>
* @brief
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>5<EFBFBD><35>ͨ<EFBFBD><CDA8>
******************************************************************************
*/
#include "BLV_485_Dev_BLWMusicFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
/*BLWMusic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MUSICVOICEVALUEMAX 30 //ʵ<>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define BLWMusicSnMin 0 //<2F><>СSn<53><6E>
#define BLWMusicSnMax 15 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define DEVMUSICTYPE 21 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_BLWMusicCycleCtrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD>
uint8_t BLW_Rs485_BLWMusic_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD>
void BLW_Rs485_Music_Mode_Ctrl(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo, uint16_t DevOutputLoop); //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
void BLW_Rs485_Music_Voice_Ctrl(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo, uint16_t DevOutputLoop);
void BLW_Rs485_Music_Voice_Read(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo);
void BLW_Rs485_Music_Default_Voice_Set(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_BLWMusic_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_BLWMusic_Data_Init(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485Music)
{
BUS_Public->polling_cf = (uint32_t)&BLW_BLWMusicCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_BLWMusic_Check;
Rs485Music->MusicLoopValidNum = 0x05; //2023-04-14
Rs485Music->BackMusicState[0].CtrlCont.CtrlVoice = 12;
Rs485Music->BackMusicState[1].CtrlCont.CtrlVoice = 12;
Rs485Music->room_def_volume = Rs485Music->BackMusicState[0].CtrlCont.CtrlVoice*2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music->room_max_volume = 30; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music->room_min_volume = 3; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
Rs485Music->bathroom_def_volume = Rs485Music->BackMusicState[0].CtrlCont.CtrlVoice*2; //ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music->bathroom_max_volume = 30; //ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music->bathroom_min_volume = 3; //ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
Rs485Music->doorbell_def_volume = 25;
Rs485Music->music_volume.now_volume[0] = Rs485Music->room_def_volume;
Rs485Music->music_volume.now_volume[1] = Rs485Music->bathroom_def_volume;
Rs485Music->music_volume.now_volume[2] = Rs485Music->doorbell_def_volume;
Rs485Music->BackMusicVoiceSetFlag = 0x01;
Rs485Music->BackMusicVoiceSetSendCnt = 0x03;
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>BLWMusic<69>豸");
}
/*******************************************************************************
* Function Name : BLW_MusicCycleCtrl
* Description : BLWMusic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_BLWMusicCycleCtrl(uint32_t dev_addr)
{
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_MUSIC_INFO Rs485MusicInfo;
uint8_t KeepFlag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485MusicInfo,sizeof(RS485_MUSIC_INFO),dev_addr+Dev_Privately);
for(i = 0; i < Rs485MusicInfo.MusicLoopValidNum; i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
{
if(0x01 == Rs485MusicInfo.MusicStateCtrlFlag[i].MusicModeCtrlVar) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־
{
if(0x00 != Rs485MusicInfo.MusicStateCtrlCnt[i].MusicModeCtrlVar)
{
Rs485MusicInfo.MusicStateCtrlCnt[i].MusicModeCtrlVar--;
}
else
{
Rs485MusicInfo.MusicStateCtrlFlag[i].MusicModeCtrlVar = 0x00;
}
Rs485MusicInfo.MusicChannelNo = i;
BLW_Rs485_Music_Mode_Ctrl(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>
Ret = RS485OCCUPYTIME;
break;
}
else if(0x00 != Rs485MusicInfo.MusicStateCtrlFlag[i].MusicVoiceCtrlVar)
{
if(0x00 != Rs485MusicInfo.MusicStateCtrlCnt[i].MusicVoiceCtrlVar)
{
Rs485MusicInfo.MusicStateCtrlCnt[i].MusicVoiceCtrlVar--;
Rs485MusicInfo.MusicChannelNo = i;
BLW_Rs485_Music_Voice_Ctrl(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else
{
Rs485MusicInfo.MusicStateCtrlFlag[i].MusicVoiceCtrlVar = 0x00;
}
break;
}
else if(0x01 == Rs485MusicInfo.MusicStateCtrlFlag[i].MusicReadFlagVar)
{
if(0x00 != Rs485MusicInfo.MusicStateCtrlCnt[i].MusicReadFlagVar)
{
Rs485MusicInfo.MusicStateCtrlCnt[i].MusicReadFlagVar--;
}
else
{
Rs485MusicInfo.MusicStateCtrlFlag[i].MusicReadFlagVar = 0x00;
}
BLW_Rs485_Music_Voice_Read(&BUS_Public, &Rs485MusicInfo); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
Ret = RS485OCCUPYTIME;
}
}
if(Rs485MusicInfo.BackMusicVoiceSetFlag == 0x01) //2023-04-14 <20>趨Ĭ<E8B6A8><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(0x00 != Rs485MusicInfo.BackMusicVoiceSetSendCnt)
{
Rs485MusicInfo.BackMusicVoiceSetSendCnt--;
}
else
{
Rs485MusicInfo.BackMusicVoiceSetFlag = 0x00;
Rs485MusicInfo.BackMusicVoiceSetSendCnt = 0x03;
}
BLW_Rs485_Music_Default_Voice_Set(&BUS_Public, &Rs485MusicInfo);
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485MusicInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485MusicInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485_Music DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEVMUSICTYPE,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485MusicInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485MusicInfo.DevOffline != Rs485MusicInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485MusicInfo.DevOfflineLast = Rs485MusicInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485MusicInfo.DevSendCnt++; //
}
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485MusicInfo.comm_record,0x01,0x00);
Rs485MusicInfo.inquire_tick = SysTick_1ms;
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485MusicInfo, sizeof(RS485_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485MusicInfo,sizeof(RS485_MUSIC_INFO),dev_addr+Dev_Privately);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"Music crc_val:%02X\r\n",crc_val);
}
return Ret;
}
#define BLW_MUSIC_Mode_Ctrl_LEN 0x0B
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>
void BLW_Rs485_Music_Mode_Ctrl(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo, uint16_t DevOutputLoop)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
uint8_t MusicData[BLW_MUSIC_Mode_Ctrl_LEN]; // = {0x00, 0x00, DEVMUSICTYPE, 0x01, MUSIC_BLW_Audio1802_Fun_Ctrl_LEN, 0x88, 0x22, 0x01, 0x00 ,0x00, 0x00}; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻͼ<D3BA>
// RS485_MUSIC_INFOP Rs485MusicInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ֲ<D6BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
// Rs485MusicInfo = CfgDevAdd->DevDataStruct;
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d ״̬:%08X",BUS_Public->addr,DevOutputLoop, Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir);
MusicData[0] = 0x00;
MusicData[1] = BLV_SN_Get(&Rs485MusicInfo->MusicSn, BLWMusicSnMin, BLWMusicSnMax);
MusicData[2] = DEVMUSICTYPE;
MusicData[3] = BUS_Public->addr;
MusicData[4] = BLW_MUSIC_Mode_Ctrl_LEN; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
MusicData[6] = 0x22; //<2F><><EFBFBD><EFBFBD>
MusicData[7] = DevOutputLoop+1; //<2F><>ǰͨ<C7B0><CDA8>
MusicData[10] = 0x00; //
#if LOGIC_FILE_EN
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir) //<2F><><EFBFBD><EFBFBD>
#else
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //backmusic_data[DevOutputLoop]
#endif
{
case MUSIC_PLAY: //<2F><><EFBFBD><EFBFBD>
MusicData[8] = 0x00 ;//2?? //EA ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> B7 <20><><EFBFBD><EFBFBD><EBB2A5>ģʽ
MusicData[9] = 0x00; //
break;
case MUSIC_STOP: //<2F><>ͣ
MusicData[8] = 0x01;//?Y? //B8 E4 <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ģʽ
MusicData[9] = 0x00;
// backmusic_data[8] = 0xFF;
break;
case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
MusicData[8] = 0x04;//
MusicData[9] = 0x00;
break;
case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
MusicData[8] = 0x03;//
MusicData[9] = 0x00;
break;
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
if(BUS_Public->Protocol==0x02)
{
MusicData[8] = 0x07; //С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><E9B7B4><EFBFBD><EFBFBD>
MusicData[9] = 0x00;
}
else
{
MusicData[8] = 0x00; //
MusicData[9] = 0x01; // <20><>һ<EFBFBD><D2BB>
}
break;
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
if(BUS_Public->Protocol==0x02)
{
MusicData[8] = 0x08; //С<><D0A1><EFBFBD>ر<EFBFBD>ģ<EFBFBD><EFBFBD><E9B7B4><EFBFBD><EFBFBD>
MusicData[9] = 0x00;
}
else
{
MusicData[8] = 0x00; //
MusicData[9] = 0x02; //
}
break;
case MUSIC_PLAY_SPE_3://ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
if(BUS_Public->Protocol==0x02)
{
MusicData[7] = 0x05; //С<><D0A1><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>ӭ<EFBFBD><D3AD>
MusicData[8] = 0x00;
MusicData[9] = 0x00;
}
else
{
MusicData[8] = 0x00; //
MusicData[9] = 0x03; //
}
break;
case MUSIC_PLAY_SPE_4://ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
if(BUS_Public->Protocol==0x02)
{
MusicData[7] = 0x04; //С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MusicData[8] = 0x00;
MusicData[9] = 0x00;
}
else
{
MusicData[8] = 0x00; //
MusicData[9] = 0x04; //
}
break;
case MUSIC_PLAY_SPE_5://ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
MusicData[8] = 0x00 ;//
MusicData[9] = 0x05; //
break;
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
MusicData[8] = 0x00 ;//
MusicData[9] = 0x06; //
break;
}
MusicData[5] = CheckSum_Overlook_Check(MusicData, BLW_MUSIC_Mode_Ctrl_LEN, 5);
MCU485_SendString(BUS_Public->port,MusicData,BLW_MUSIC_Mode_Ctrl_LEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,MusicData,BLW_MUSIC_Mode_Ctrl_LEN);
}
#define BLW_MUSIC_Voice_Ctrl_LEN 0x0B
/*<2A><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD> 2023-04-15*/
void BLW_Rs485_Music_Voice_Ctrl(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo, uint16_t DevOutputLoop)
{
uint8_t MusicVoice[BLW_MUSIC_Voice_Ctrl_LEN]; // = {0x00, 0x00, DEVMUSICTYPE, 0x01, MUSIC_BLW_Audio1802_Voi_Ctrl_LEN, 0x7E, 0x23, 0x02, 0x02, 0x03, 0x00}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(MusicVoice,0,sizeof(MusicVoice)/sizeof(uint8_t));
MusicVoice[0] = 0x00;
MusicVoice[1] = BLV_SN_Get(&Rs485MusicInfo->MusicSn, BLWMusicSnMin, BLWMusicSnMax);
MusicVoice[2] = DEVMUSICTYPE;
MusicVoice[3] = BUS_Public->addr; //<2F><>ַ
MusicVoice[4] = BLW_MUSIC_Voice_Ctrl_LEN; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
MusicVoice[6] = 0x23; //<2F><><EFBFBD><EFBFBD>
MusicVoice[7] = DevOutputLoop+1;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485music <20><><EFBFBD><EFBFBD>ģʽ%d\r\n",Rs485MusicInfo->MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar);
if(Rs485MusicInfo->MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar==0x01)
{
MusicVoice[8] = 0x02; //<2F><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
MusicVoice[9] = 0x00;
MusicVoice[10] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
}
else if(Rs485MusicInfo->MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar==0x02)
{
MusicVoice[8] = 0x02; //<2F><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
MusicVoice[9] = 0x00;
MusicVoice[10] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
}
else if(Rs485MusicInfo->MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar==0x03)
{
MusicVoice[8] = 0x01; //<2F><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
MusicVoice[9] = Rs485MusicInfo->music_volume.now_volume[DevOutputLoop];
MusicVoice[10] = 0x00;
}
MusicVoice[5] = CheckSum_Overlook_Check(MusicVoice, BLW_MUSIC_Voice_Ctrl_LEN, 5);
// Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"485music <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n",MusicVoice,BLW_MUSIC_Voice_Ctrl_LEN);
MCU485_SendString(BUS_Public->port,MusicVoice,BLW_MUSIC_Voice_Ctrl_LEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,MusicVoice,BLW_MUSIC_Voice_Ctrl_LEN);
}
///*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>*/
//void BLW_Rs485_Music_Voice_Ctrl(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo, uint16_t DevOutputLoop)
//{
// uint8_t MusicVoice[BLW_MUSIC_Voice_Ctrl_LEN]; // = {0x00, 0x00, DEVMUSICTYPE, 0x01, MUSIC_BLW_Audio1802_Voi_Ctrl_LEN, 0x7E, 0x23, 0x02, 0x02, 0x03, 0x00}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// MusicVoice[0] = 0x00;
// MusicVoice[1] = BLV_SN_Get(&Rs485MusicInfo->MusicSn, BLWMusicSnMin, BLWMusicSnMax);
// MusicVoice[2] = DEVMUSICTYPE;
// MusicVoice[3] = BUS_Public->addr; //<2F><>ַ
//
// MusicVoice[4] = BLW_MUSIC_Voice_Ctrl_LEN; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// MusicVoice[6] = 0x23; //<2F><><EFBFBD><EFBFBD>
// MusicVoice[7] = DevOutputLoop+1;
//
// switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //<2F><EFBFBD><E6B4A2>ģʽ
// {
// case MUSIC_VOICE_ALW_UP://<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
// MusicVoice[8] = 0x02;
// MusicVoice[9] = 0x03;
// MusicVoice[10] = 0x08;
// break;
// case MUSIC_VOICE_ALW_DOWN: //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
// MusicVoice[8] = 0x02;
// MusicVoice[9] = 0x03;
// MusicVoice[10] = 0x04;
// break;
// case MUSIC_VOICE_STOP:
// MusicVoice[8] = 0x02;
// MusicVoice[9] = 0x03;
// MusicVoice[10] = 0x10; //<2F><><EFBFBD><EFBFBD>ֹͣ
// break;
// default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// MusicVoice[8] = 0x01; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// MusicVoice[9] = Rs485MusicInfo->BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice*MUSICVOICEVALUEMAX/MUSICVOICELEVELMAX; //ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// MusicVoice[10] = 0x00;
// break;
// }
//
// MusicVoice[5] = CheckSum_Overlook_Check(MusicVoice, BLW_MUSIC_Voice_Ctrl_LEN, 5);
//
// Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"485music <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n",MusicVoice,BLW_MUSIC_Voice_Ctrl_LEN);
//
// MCU485_SendString(BUS_Public->port,MusicVoice,BLW_MUSIC_Voice_Ctrl_LEN);
// /*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,MusicVoice,BLW_MUSIC_Voice_Ctrl_LEN);
//}
#define MUSIC_VOICE_READ_LEN 7 //
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ*/
void BLW_Rs485_Music_Voice_Read(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo)
{
uint8_t MusicData[MUSIC_VOICE_READ_LEN];// = {0x00, 0x00, DEVMUSICTYPE, 0x01, MUSIC_VOICE_READ_LEN, 0x21, 0x20};
MusicData[0] = 0x00;
MusicData[1] = BLV_SN_Get(&Rs485MusicInfo->MusicSn, BLWMusicSnMin, BLWMusicSnMax);
MusicData[2] = DEVMUSICTYPE;
MusicData[3] = BUS_Public->addr;
MusicData[4] = MUSIC_VOICE_READ_LEN;
MusicData[5] = CheckSum_Overlook_Check(MusicData, MUSIC_VOICE_READ_LEN, 5);
MusicData[6] = 0x20;
MCU485_SendString(BUS_Public->port,MusicData,MUSIC_VOICE_READ_LEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,MusicData,MUSIC_VOICE_READ_LEN);
}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_Music_Check
* Description : BLWMusic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_BLWMusic_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLW_Rs485_Music_Check\r\n");
uint8_t rev = IsNotMyData;
// uint16_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
Device_Public_Information_G BUS_Public;
RS485_MUSIC_INFO Rs485Music;
uint8_t data[RECDATALENMAX];
// uint8_t Music_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //485<38><35>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Len:%d Err",__func__,len);
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[0] != BUS_Public.addr) || (DEVMUSICTYPE != (data[2]))
||(len != (data[4]))
) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Addr:%d <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>",__func__,BUS_Public.addr);
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
switch(data[6])
{
case 0x31: //<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûظ<C3BB>
case 0x32: //ģʽ<C4A3>ظ<EFBFBD>
case 0x30: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
case 0x33: //<2F><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
case 0x22:
case 0x23:
rev = IsMyData;
if(Rs485Music.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485Music DEV_IS_ONLINE");
LOG_Device_Online_Record(DEVMUSICTYPE,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485Music.DevSendCnt = 0x00;
Rs485Music.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485Music.DevOffline != Rs485Music.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485Music.DevOfflineLast = Rs485Music.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485Music.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[6])
{
case 0x31:
// Rs485Music.MusicCtrlFlag = 0x00;
Rs485Music.MusicStateCtrlFlag[Rs485Music.MusicChannelNo].MusicDefaultVoiceSetVar = 0x00;
Rs485Music.BackMusicVoiceSetFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record3(dev_addr+Dev_port,dev_addr+Dev_baud,data_addr,len);
break;
case 0x32:
case 0x22:
// Rs485Music.MusicWayCtrlFlag = 0x00;
Rs485Music.MusicStateCtrlFlag[Rs485Music.MusicChannelNo].MusicModeCtrlVar = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record3(dev_addr+Dev_port,dev_addr+Dev_baud,data_addr,len);
break;
case 0x30:
// BLW_Rs485_BLWMusic_Lightness_Get(data, CfgDevAdd);
/*<2A><><EFBFBD>⵽״̬<D7B4>ı<C4B1>ű<EFBFBD><C5B1><EFBFBD>*/
// Rs485Music.MusicLightnessReadFlag = 0x00;
Rs485Music.MusicStateCtrlFlag[Rs485Music.MusicChannelNo].MusicReadFlagVar = 0x00;
break;
case 0x33: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
case 0x23:
Rs485Music.MusicStateCtrlFlag[Rs485Music.MusicChannelNo].MusicVoiceCtrlVar = 0x00;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485Music, sizeof(RS485_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),dev_addr+Dev_Privately);
}
// else
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",data[5],SRAM_CRC16(data_addr,len - 2));
// }
return rev;
}
//<2F>趨Ĭ<E8B6A8><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_Rs485_Music_Default_Voice_Set(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo)
{
uint8_t MusicData[17];
MusicData[0] = 0x00;
MusicData[1] = BLV_SN_Get(&Rs485MusicInfo->MusicSn, BLWMusicSnMin, BLWMusicSnMax);
MusicData[2] = DEVMUSICTYPE;
MusicData[3] = BUS_Public->addr;
MusicData[4] = 0x11; //Lens
MusicData[6] = 0x21; //CMD
MusicData[7] = Rs485MusicInfo->room_def_volume;
MusicData[8] = Rs485MusicInfo->room_max_volume;
MusicData[9] = Rs485MusicInfo->room_min_volume;
MusicData[10] = 10;
MusicData[11] = Rs485MusicInfo->bathroom_def_volume;
MusicData[12] = Rs485MusicInfo->bathroom_max_volume;
MusicData[13] = Rs485MusicInfo->bathroom_min_volume;
MusicData[14] = 10;
MusicData[15] = Rs485MusicInfo->doorbell_def_volume;
MusicData[16] = 0x01;
MusicData[5] = CheckSum_Overlook_Check(MusicData, 0x11, 5);
MCU485_SendString(BUS_Public->port,MusicData,0x11);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,MusicData,0x11);
}

View File

@@ -0,0 +1,25 @@
#ifndef _BLV_485_DEV_BLWMusicFUN_H_
#define _BLV_485_DEV_BLWMusicFUN_H_
#include "stdint.h"
#include "BLV_485_Dev_MusicFun.h"
void BLW_RS485_BLWMusic_Data_Init(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485Music);
#endif

View File

@@ -0,0 +1,385 @@
/**
******************************************************************************
* @file Blv_485_Dev_BinShen_Curtain.c
* @author BLW RCU development Team
* @version V1.0.0
* @date 2024<32><34>12<31><32>04<30><34>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
******************************************************************************
*/
#include "includes.h"
uint8_t BLV_RS485_BinShen_Curtain_Cycle_Dis(uint32_t devaddr);
uint8_t BLV_RS485_BinShen_Curtain_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLV_485_Dev_BinShen_Curtain_Init(Device_Public_Information_G *BUS_Public, RS485_Cur_INFO *Rs485CurtainInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_BinShen_Curtain_Cycle_Dis;
BUS_Public->processing_cf = (uint32_t)&BLV_RS485_BinShen_Curtain_Check;
}
uint16_t CRC_Cal(uint8_t *data,uint8_t lens)
{
uint16_t sum = 0x00;
for(uint8_t i = 0; i < lens; i++)
{
if((i != 0x04) && (i != 0x05))
{
sum += data[i];
}
}
return (sum + 0x2017);
}
void BinShen_Action_Ctrl_Send(Device_Public_Information_G *BUS_Public, RS485_Cur_INFO *Rs485CurtainInfo)
{
uint8_t lens = 22;
uint8_t data[lens];
uint16_t crc = 0x00;
memset(data,0,sizeof(data));
data[0] = 0x55; //ͷ<><CDB7>
data[1] = 0xAA;
data[2] = 0xAA;
data[3] = 0x55;
data[6] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[7] = 0x0A;
data[8] = 0x0A; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[9] = 0x00;
data[10] = 0x00; //Э<><D0AD><EFBFBD>
data[11] = 0x00;
data[12] = 0x01; //<2F><>Ʒ<EFBFBD>ͺ<EFBFBD>
if(Rs485CurtainInfo->control_flag == 0x01) //<2F><><EFBFBD><EFBFBD>
{
if(Rs485CurtainInfo->reverse_enable == 0x01)
{
data[13] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}else {
data[13] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else if(Rs485CurtainInfo->control_flag == 0x02) //<2F>ر<EFBFBD>
{
if(Rs485CurtainInfo->reverse_enable == 0x01)
{
data[13] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}else {
data[13] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else if(Rs485CurtainInfo->control_flag == 0x06) //ֹͣ
{
data[13] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if(Rs485CurtainInfo->control_flag == 0x04) //<2F><><EFBFBD><EFBFBD>
{
if(Rs485CurtainInfo->DYCurtainNextState == CUR_OPEN)
{
if(Rs485CurtainInfo->reverse_enable == 0x01)
{
data[13] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}else {
data[13] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else if(Rs485CurtainInfo->DYCurtainNextState == CUR_CLOSE)
{
if(Rs485CurtainInfo->reverse_enable == 0x01)
{
data[13] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}else {
data[13] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
data[14] = 0x00; //λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[15] = BUS_Public->addr; //<2F><><EFBFBD>к<EFBFBD>
data[16] = 0x01;
data[17] = 0x01;
data[18] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[19] = 0x00;
data[20] = 0x00;
data[21] = 0x00;
crc = CRC_Cal(data,lens);
data[4] = crc & 0xff;
data[5] = (crc >> 8) & 0xff;
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BinShen_Action_Ctrl_Send:",data,lens);
MCU485_SendString(BUS_Public->port,data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
void BinShen_Percent_Ctrl_Send(Device_Public_Information_G *BUS_Public, RS485_Cur_INFO *Rs485CurtainInfo)
{
uint8_t lens = 22;
uint8_t data[lens];
uint16_t crc = 0x00;
memset(data,0,sizeof(data));
data[0] = 0x55; //ͷ<><CDB7>
data[1] = 0xAA;
data[2] = 0xAA;
data[3] = 0x55;
data[6] = 0x09; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[7] = 0x0A;
data[8] = 0x0A; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[9] = 0x00;
data[10] = 0x00; //Э<><D0AD><EFBFBD>
data[11] = 0x00;
data[12] = 0x01; //<2F><>Ʒ<EFBFBD>ͺ<EFBFBD>
data[13] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[14] = Rs485CurtainInfo->DooYaCon_data.DATE1; //λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[15] = BUS_Public->addr; //<2F><><EFBFBD>к<EFBFBD>
data[16] = 0x01;
data[17] = 0x01;
data[18] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[19] = 0x00;
data[20] = 0x00;
data[21] = 0x00;
crc = CRC_Cal(data,lens);
data[4] = crc & 0xff;
data[5] = (crc >> 8) & 0xff;
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BinShen_Percent_Ctrl_Send:",data,lens);
MCU485_SendString(BUS_Public->port,data,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,data,lens);
}
uint8_t BLV_RS485_BinShen_Curtain_Cycle_Dis(uint32_t devaddr)
{
uint8_t Ret = RS485OCCUPYNOTIME;
uint8_t tempfalg = 0x00;
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CurtainInfo,0,sizeof(RS485_Cur_INFO));
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
switch(Rs485CurtainInfo.control_flag)
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
case 0x02: //<2F>ر<EFBFBD>
case 0x04: //<2F><><EFBFBD><EFBFBD>
case 0x06: //ֹͣ
if(Rs485CurtainInfo.control_flag == 0x01)
{
Rs485CurtainInfo.DYCurtainNextState = CUR_CLOSE;
}
else if(Rs485CurtainInfo.control_flag == 0x02)
{
Rs485CurtainInfo.DYCurtainNextState = CUR_OPEN;
}
else if(Rs485CurtainInfo.control_flag == 0x06)
{
if(Rs485CurtainInfo.DYCurtainStateLast==CUR_OPEN)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_CLOSE;
}
else if(Rs485CurtainInfo.DYCurtainStateLast==CUR_CLOSE)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_OPEN;
}
}
BinShen_Action_Ctrl_Send(&BUS_Public,&Rs485CurtainInfo);
Ret = RS485OCCUPYTIME;
break;
case 0x05: //<2F>ٷֱȿ<D6B1><C8BF><EFBFBD>
BinShen_Percent_Ctrl_Send(&BUS_Public,&Rs485CurtainInfo);
Ret = RS485OCCUPYTIME;
break;
}
if((Ret == RS485OCCUPYTIME) || (tempfalg == 0x01))
{
tempfalg = 0x01;
if(Rs485CurtainInfo.DevSendCnt > 3)
{
if(Rs485CurtainInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485 BinShen Curtain LogInfo_Device_Offline...........");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485CurtainInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485CurtainInfo.DevOffline != Rs485CurtainInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CurtainInfo.DevOfflineLast = Rs485CurtainInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ǿ<EFBFBD>ʼ*/
if(Rs485CurtainInfo.control_flag != 0x00)
{
Rs485CurtainInfo.control_flag = 0x00;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ǽ<EFBFBD><C7BD><EFBFBD>*/
Rs485CurtainInfo.DevSendCnt = 0x00;
}
else
{
Rs485CurtainInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
BLV_Communication_Record(&Rs485CurtainInfo.comm_record,0x01,0x00);
if(tempfalg)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CurtainInfo, sizeof(RS485_Cur_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
}
}
return Ret;
}
uint8_t BLV_RS485_BinShen_Curtain_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = 0x01; //Ĭ<><C4AC>ʧ<EFBFBD><CAA7>
uint8_t data[30]={0};
uint16_t crc_val;
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
if((len != 22) || ( (data[8] + (data[9] << 8)) != 0x0A ) )
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Lens Err,Not BinShen Curtain Data");
return 0x01;
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
if((data[0] != 0x55) || (data[1] != 0xAA) || (data[2] != 0xAA) || (data[3] != 0x55))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Head Err,Not BinShen Curtain Data");
return 0x01;
}
// if((data[6] != 0x02) || (data[7] != 0x0A))
// {
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CMD Type Err,Not BinShen Curtain Data");
// rev=0x01;
// }
if(0x00 != (data[10] + (data[11] << 8)) )
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Protocol Err,Not BinShen Curtain Data");
return 0x01;
}
if(data[12] != 0x01)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Pro Ver Err,Not BinShen Curtain Data");
return 0x01;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[15] != BUS_Public.addr) || (data[16] != BUS_Public.addr) || (data[17] != BUS_Public.addr))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev Addr Err,Not BinShen Curtain Data");
return 0x01;
}
crc_val = data[4] + (data[5] << 8);
if(crc_val == CRC_Cal(&data[0],len)) //CRCУ<43><D0A3><EFBFBD>ɹ<EFBFBD>
{
rev = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),dev_addr+Dev_Privately);
if(Rs485CurtainInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BinShen Curtain LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_RS485_CURTAIN,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485CurtainInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485CurtainInfo.DevOffline != Rs485CurtainInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CurtainInfo.DevOfflineLast = Rs485CurtainInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485CurtainInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Rs485CurtainInfo.DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((data[6] == 0x03) && (data[7] == 0x0A))
{
switch(data[13])
{
case 0x01:
case 0x00:
case 0x02:
Rs485CurtainInfo.control_flag = 0x00;
break;
}
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CurtainInfo, sizeof(RS485_Cur_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),dev_addr+Dev_Privately);
}
return rev;
}

View File

@@ -0,0 +1,16 @@
#ifndef _BINSHEN_CURTAIN_H
#define _BINSHEN_CURTAIN_H
#include "stdint.h"
#include "BLV_Dev_Action.h"
#include "BLV_All_Dev_Init.h"
#include "Blv_485_Dev_CurtainFun.h"
void BLV_485_Dev_BinShen_Curtain_Init(Device_Public_Information_G *BUS_Public, RS485_Cur_INFO *Rs485CurtainInfo);
#endif

View File

@@ -0,0 +1,572 @@
/**
******************************************************************************
* @file BLV_485_Dev_C12DimFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2022<32><32>03<30><33>27<32><37>
* @brief
* C12Dim<69><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>C12<31><32><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>12·<32><C2B7><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_C12DimFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "Log_api.h"
#include "BLV_Dev_Action.h"
/*C12Dim<69><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define C12DIM_OUT_CH_MAX 0x0C //C12Dim<69><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>12·
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define C12DimUPLIGHT 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80
#define C12DimDOWNLIGHT 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20
#define C12DimGRADUALTIME 30 //30 <20><>300ms
#define C12DimSnMin 0 //<2F><>СSn<53><6E>
#define C12DimSnMax 15 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define C12Rs485AddrDefault 0x01 //Ĭ<><C4AC>Ϊ1<CEAA><31>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>Ȼ<EFBFBD><C8BB>Ĭ<EFBFBD>ϵ<EFBFBD>ַ
#define DEVC12DimTYPE 03 //C12Dim<69><6D><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define GLOBAL_STEP_VALUE 0x14 //<2F><><EFBFBD><EFBFBD>20
#define GLOBAL_MAX_VALUE 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GLOBAL_MIN_VALUE 0x14 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_C12DimCycleCtrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD>
uint8_t BLW_Rs485_C12Dim_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD>
void BLW_Rs485_C12Dim_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485C12DimInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
void BLW_Rs485_C12Dim_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
void BLW_Rs485_C12Dim_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
void BLW_C12_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_C12Dim_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_C12Dim_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLW_C12DimCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_C12Dim_Check;
if(LoopNum >= C12DIM_OUT_CH_MAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = C12DIM_OUT_CH_MAX;
}
else if(0x00 == LoopNum)
{
Rs485LED->LEDLoopValidNum = 0x01;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = LoopNum;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>C12Dim<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d", Rs485LED->LEDLoopValidNum);
Rs485LED->LEDCtrlFlag = 0x01;
// Add_POLL_Device_To_List2(BUS_Public,(uint8_t *)Rs485LED,sizeof(RS485_LED_INFO));
}
/*******************************************************************************
* Function Name : BLW_LEDCycleCtrl
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_C12DimCycleCtrl(uint32_t dev_addr)
{
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo;
uint8_t KeepFlag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevSendBuf_last[i] != Rs485LEDInfo.DevSendBuf[i])
{
Rs485LEDInfo.LEDCtrlFlag = 0x01;
Rs485LEDInfo.LEDCtrlCnt = REPEATSENDTIMEMAX;
Rs485LEDInfo.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
memcpy(Rs485LEDInfo.DevSendBuf_last, Rs485LEDInfo.DevSendBuf, Rs485LEDInfo.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevCtrlWayBuf_last[i] != Rs485LEDInfo.DevCtrlWayBuf[i]) // 0x00
{
Rs485LEDInfo.LEDWayCtrlFlag |=(0x01<<i); //<2F><>Ӧ<EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>һ
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ<EFBFBD><EFBFBD>λ:%d <20><>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>%d\r\n",Rs485LEDInfo.LEDWayCtrlFlag,Rs485LEDInfo.LEDLoopValidNum); //
Rs485LEDInfo.LEDWayCtrlCnt = REPEATSENDTIMEMAX;
Rs485LEDInfo.DevCtrlWayBuf_last[i] = Rs485LEDInfo.DevCtrlWayBuf[i];//<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƣ<EFBFBD>ֻ<EFBFBD><D6BB>һ·һ·<D2BB><C2B7><EFBFBD><EFBFBD>
}
}
if(Rs485LEDInfo.Dim_Global_Value != DevActionGlobal.DimGlobalValue) //2025-07-15,YYW,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȱȽ<C8B1>
{
Rs485LEDInfo.Dim_Global_Value = DevActionGlobal.DimGlobalValue;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12DimFun--ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȸı<C8B8>:",Rs485LEDInfo.Dim_Global_Value);
}
if(Rs485LEDInfo.Dim_Global_Value_Last != Rs485LEDInfo.Dim_Global_Value) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.Dim_Global_Value_Last = Rs485LEDInfo.Dim_Global_Value;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<7);
}
if((Rs485LEDInfo.LEDUpLightLimitLast != Rs485LEDInfo.LEDUpLightLimit) || (Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit)) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.LEDUpLightLimitLast = Rs485LEDInfo.LEDUpLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<6);
Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
}
// if(Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
// {
// Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
// Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
// }
if(0x00 != Rs485LEDInfo.Dim_GV_Flag) //2024-1-30
{
BLW_C12_GlobalValue_Set(&BUS_Public, &Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Rs485LEDInfo.LEDCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDCtrlCnt)
{
Rs485LEDInfo.LEDCtrlCnt--;
}
else
{
Rs485LEDInfo.LEDCtrlFlag = 0x00;
}
BLW_Rs485_C12Dim_Ctrl(&BUS_Public, &Rs485LEDInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDWayCtrlCnt)
{
Rs485LEDInfo.LEDWayCtrlCnt--;
}
else
{
Rs485LEDInfo.LEDWayCtrlFlag = 0x00;
}
if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
BLW_Rs485_C12Dim_Way_Ctrl(&BUS_Public, &Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME; //<2F><>0<EFBFBD><30><EFBFBD><EFBFBD>
}
else
{
KeepFlag = 0x01; //Ϊ0<CEAA><30><EFBFBD><EFBFBD>
}
}
else //if(Rs485LEDInfo.LEDLightnessReadFlag)//
{
// if(0x00 != Rs485LEDInfo.LEDLightnessReadCnt)
// {
// Rs485LEDInfo.LEDLightnessReadCnt--;
// }
// else
// {
// Rs485LEDInfo.LEDLightnessReadFlag = 0x00;
// }
BLW_Rs485_C12Dim_Read(&BUS_Public, &Rs485LEDInfo); //<2F><>ȡ
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485LEDInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485LEDInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485 C12 LED DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_LEDTYPE,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LEDInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485LEDInfo.DevOffline != Rs485LEDInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LEDInfo.DevOfflineLast = Rs485LEDInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x00 != Rs485LEDInfo.Dim_GV_Flag)
{
Rs485LEDInfo.Dim_GV_Flag = 0x00;
}
}
else
{
Rs485LEDInfo.DevSendCnt++; //
}
Rs485LEDInfo.inquire_tick = SysTick_1ms;
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485LEDInfo.comm_record,0x01,0x00);
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"LED crc_val:%02X\r\n",crc_val);
}
return Ret;
}
#define RECDATALENMAX 0x20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_LED_Check
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_C12Dim_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLW_Rs485_LED_Check\r\n");
uint8_t rev = IsNotMyData;
// uint16_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
uint8_t data[RECDATALENMAX];
// uint8_t LED_addr = SRAM_Read_Byte(dev_addr+Dev_Addr); //485<38><35>ַ
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[0] != C12Rs485AddrDefault) || (DEVC12DimTYPE != (data[2])) //
||(len != (data[4]))
) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12Dim <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
//Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming Recv:",data,len);
switch(data[6])
{
case 0x30: //<2F><>ȡ<EFBFBD>ظ<EFBFBD>
case 0x31: //<2F><><EFBFBD>ƻظ<C6BB>
case 0x32: //<2F><>ʽ<EFBFBD>ظ<EFBFBD>
case 0x33: //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûظ<C3BB>
rev = IsMyData;
if(Rs485LED.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485LED DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_LEDTYPE,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LED.DevSendCnt = 0x00;
Rs485LED.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485LED.DevOffline != Rs485LED.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LED.DevOfflineLast = Rs485LED.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485LED.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[6])
{
case 0x31:
Rs485LED.LEDCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x32:
Rs485LED.LEDWayCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x30:
/*<2A><><EFBFBD>⵽״̬<D7B4>ı<C4B1>ű<EFBFBD><C5B1><EFBFBD>*/
Rs485LED.LEDLightnessReadFlag = 0x00;
//Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming Recv:",data,len);
if( Rs485LED.init_flag == 0x00)
{
/*<2A><>ȡ״̬ - <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>״̬*/
for(uint8_t i = 0; i < Rs485LED.LEDLoopValidNum; i++)
{
Rs485LED.DevSendBuf[i] = data[8 + i] & 0x7F;
Rs485LED.DevSendBuf[i] = 0x00; //2025-11-05 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
Rs485LED.DevSendBuf_last[i] = Rs485LED.DevSendBuf[i];
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming CH%d Init State:%d",i,Rs485LED.DevSendBuf[i]);
}
Rs485LED.init_flag = 1;
}
break;
case 0x33:
Rs485LED.Dim_GV_Flag = 0x00;
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"C12 Global Set Ack:",data,len);
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LED, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
// else {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",data[5],SRAM_CRC16(data_addr,len - 2));
// }
return rev;
}
#define C12DimCTRLSENDLEN 22 //C12<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
/**
* @name BLW 12· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_C12Dim_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> <20><><EFBFBD><EFBFBD>0.1s <20><><EFBFBD><EFBFBD> CH4 CH3 CH2 CH1
uint8_t SendBuf[C12DimCTRLSENDLEN];// = {0x00, 0x00, DEVC12DimTYPE, 0x01, C12DimCTRLSENDLEN, 0x18, 0x21, 0x0f, 0x64, 0x00, 0x50, 0x50, 0x50, 0x50};
SendBuf[0] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
SendBuf[1] = 0x01; //<2F><>0
SendBuf[1] |= BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, C12DimSnMax);
SendBuf[2] = DEVC12DimTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
SendBuf[3] = C12Rs485AddrDefault; //BUS_Public->addr; //Ĭ<><C4AC>1<EFBFBD><31>ַ
SendBuf[4] = C12DimCTRLSENDLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x21; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = 0xff; //<2F><><EFBFBD><EFBFBD><38><CDA8>
SendBuf[8] = 0x0f; //<2F><><EFBFBD><EFBFBD><34><CDA8>
// SendBuf[9] = C12DimGRADUALTIME; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
SendBuf[9] = Rs485LEDInfo->C12_Set_Time; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:%d \r\n",Rs485LEDInfo->C12_Set_Time);
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
SendBuf[21-i] = Rs485LEDInfo->DevSendBuf[i] & 0x7F;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming CH%d:%d \r\n",i,Rs485LEDInfo->DevSendBuf[i]);
}
// memcpy(&SendBuf[14], &Rs485LEDInfo->DevSendBuf[0], Rs485LEDInfo->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, C12DimCTRLSENDLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,C12DimCTRLSENDLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,C12DimCTRLSENDLEN);
}
#define C12DimWAYCTRLLEN 12
/*<2A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/**
* @name BLW 4· <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* PBLEDLoop <20><>·<EFBFBD><C2B7>ַ 0~3
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> У<><D0A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mask
* 00 09 03 01 0B 51 22 0F 01 00 64
*/
void BLW_Rs485_C12Dim_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[C12DimWAYCTRLLEN];// = {0x00, 0x00, DEVC12DimTYPE, 0x01, C12DimWAYCTRLLEN, 0xBD, 0x24, 0x00, 0x01, 0x02, 0x01};
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, C12DimSnMax); //֡
SendBuf[2] = DEVC12DimTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = 0x01;
SendBuf[4] = C12DimWAYCTRLLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x22; //<2F><><EFBFBD><EFBFBD><EEA3AC>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = Rs485LEDInfo->LEDWayCtrlFlag&0xFF;
SendBuf[8] = (Rs485LEDInfo->LEDWayCtrlFlag>>8)&0xFF;
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
if((Rs485LEDInfo->LEDWayCtrlFlag>>i)&0x01)
{
switch(Rs485LEDInfo->DevCtrlWayBuf_last[i])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[9] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
SendBuf[10] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_CycleDown: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[9] = 0x01;
SendBuf[10] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
SendBuf[9] = 0x00;
SendBuf[10] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
SendBuf[9] = 0x00;
SendBuf[10] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_Stop: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
SendBuf[9] = 0x02;
SendBuf[10] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
break; //ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
}
}
SendBuf[11] = Rs485LEDInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, C12DimWAYCTRLLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,C12DimWAYCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,C12DimCTRLSENDLEN);
}
#define C12DimREADLEN 7
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_C12Dim_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD
uint8_t SendBuf[C12DimREADLEN]; // = {0x00, 0x00, DEVC12DimTYPE, 0x01, C12DimREADLEN, 0xD8, 0x20};
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = 0x00;
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, C12DimSnMax); //֡
SendBuf[2] = DEVC12DimTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = C12Rs485AddrDefault; //BUS_Public->addr;
SendBuf[4] = C12DimREADLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x20;
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, C12DimREADLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,C12DimREADLEN);
}
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_C12_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t lens = 0x0B;
uint8_t SendBuf[lens];
memset(SendBuf,0,sizeof(SendBuf));
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, C12DimSnMax); //֡
SendBuf[2] = DEVC12DimTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = C12Rs485AddrDefault;
SendBuf[4] = lens; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x23; //Cmd
SendBuf[7] = Rs485LEDInfo->Dim_GV_Flag;
SendBuf[8] = Rs485LEDInfo->Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[9] = Rs485LEDInfo->LEDUpLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[10] = Rs485LEDInfo->LEDDownLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, lens, 5);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLW_C12_GlobalValue_Set Buff",SendBuf,lens);
MCU485_SendString(BUS_Public->port,SendBuf,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,lens);
}

View File

@@ -0,0 +1,24 @@
#ifndef _BLV_485_DEV_C12DimFUN_H_
#define _BLV_485_DEV_C12DimFUN_H_
#include "stdint.h"
#include "BLV_485_Dev_LEDFun.h"
void BLW_RS485_C12Dim_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum);
#endif

View File

@@ -0,0 +1,229 @@
/**
******************************************************************************
* @file BLV_485_Dev_C5RELAYFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2022<32><32>03<30><33>27<32><37>
* @brief
* C5RELAY<41>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>չģ<D5B9><C4A3> <20><><EFBFBD><EFBFBD>24·<34>̵<EFBFBD><CCB5><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_C5RELAYFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "Log_api.h"
#include "BLV_Dev_Action.h"
#include "PC_DeviceTest_Fun.h"
#include "BLV_BUS_Dev_C5IOFun.h"
/*C5RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define C5EXPANDTYPE 0xF1 //C5RELAY<41><59><EFBFBD><EFBFBD>
#define C5RelayAddrDefault 0x01 //Ĭ<><C4AC>Ϊ1<CEAA><31>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>Ȼ<EFBFBD><C8BB>Ĭ<EFBFBD>ϵ<EFBFBD>ַ
#define C5RELAYSnMin 0x00 //<2F><>СSn<53><6E>
#define C5RELAYSnMax 0x0F //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_C5RELAYCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_C5RELAY_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_Rs485_C5RELAY_Ctrl(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo, BUS_C5IO_INFO *C5IO_Info);
void BLW_Rs485_C5RELAY_Read(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo, BUS_C5IO_INFO *C5IO_Info);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_C5RELAY_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_C5RELAY_Data_Init(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s",__func__);
BUS_Public->polling_cf = (uint32_t)&BLW_C5RELAYCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_C5RELAY_Check;
/* <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA>CSIO<49><4F><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><DCBF>Ƽ̵<C6BC><CCB5><EFBFBD>
<09><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡCSIO<49><4F>ַ<EFBFBD>ŵ<EFBFBD><C5B5>豸ȫ<E8B1B8><C8AB><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>CSIO<49><4F><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü̵<C3BC><CCB5><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
<09><><EFBFBD>Һ<EFBFBD><D2BA><EFBFBD><EFBFBD><EFBFBD>Dev_Coord_Get*/
//DevHVoutInfo->DevC5IOAddr = Find_AllDevice_List_Information(DEV_C5IO_Type, 0x00);
}
/*******************************************************************************
* Function Name : BLW_C5RELAYCycleCtrl
* Description : BLWC5RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_C5RELAYCycleCtrl(uint32_t dev_addr)
{
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
uint8_t keep_flag = 0;
Device_Public_Information_G BUS_Public;
NOR_HVOUT_INFO DevHVoutInfo;
Device_Public_Information_G BUS_PublicC5IO; //<2F><><EFBFBD><EFBFBD>
BUS_C5IO_INFO C5IO_Info;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),dev_addr+Dev_Privately);
if(NULL == DevHVoutInfo.DevC5IOAddr)
{
return Ret;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicC5IO,sizeof(Device_Public_Information_G),DevHVoutInfo.DevC5IOAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),DevHVoutInfo.DevC5IOAddr+Dev_Privately);
if( (DevHVoutInfo.init_flag == 0x00) && (C5IO_Info.DI_Init_flag == 0x01) ){
/*DI<44><49>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȡ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC>״̬*/
DevHVoutInfo.init_flag = 0x01;
for(i = 0; i < DevHVoutInfo.HVoutLoopValidNum; i++)
{
if( (C5IO_Info.Relay_Level_Actual_Start & (0x01<<i)) != 0x00 )
{
DevHVoutInfo.DevHVoutState[i] = 0x01;
DevHVoutInfo.DevHVoutStateLast[i] = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC>:<3A><>%d· <20><>", i);
}else {
DevHVoutInfo.DevHVoutState[i] = 0x00;
DevHVoutInfo.DevHVoutStateLast[i] = 0x00;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC>:<3A><>%d· <20><>", i);
}
}
keep_flag = 0x01;
}
for(i = 0; i < DevHVoutInfo.HVoutLoopValidNum; i++)
{
if( DevHVoutInfo.DevHVoutStateLast[i] != DevHVoutInfo.DevHVoutState[i] )
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><EFBFBD>λ:<3A><>%d·", i);
DevHVoutInfo.DevChangeFlag |= 0x01 << i;
DevHVoutInfo.HVoutCtrlCnt = REPEATSENDTIMEMAX;
DevHVoutInfo.DevHVoutStateLast[i] = DevHVoutInfo.DevHVoutState[i];//ͬ<><CDAC>
keep_flag = 0x01;
}
}
if(keep_flag == 0x01)
{
BLW_Rs485_C5RELAY_Ctrl(&BUS_Public, &DevHVoutInfo, &C5IO_Info); //9·<39><C2B7><EFBFBD>ƣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),dev_addr+Dev_Privately);
BUS_PublicC5IO.check = 0x00;
BUS_PublicC5IO.check = DoubleData_CheckSum((uint8_t *)&BUS_PublicC5IO, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_PublicC5IO, sizeof(Device_Public_Information_G),DevHVoutInfo.DevC5IOAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),DevHVoutInfo.DevC5IOAddr+Dev_Privately);
}
return Ret;
}
#define RECDATALENMAX 0x28 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_C5RELAY_Check
* Description : BLWC5RELAY<41><59>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_C5RELAY_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = IsNotMyData;
return rev;
}
#define C5EXPANDREADLEN 7 //<2F>̵<EFBFBD><CCB5><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
/**
* @name BLW <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_C5RELAY_Read(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo, BUS_C5IO_INFO *C5IO_Info)
{
}
#define C5EXPANDCTRLLEN 13 //<2F><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @name BLW <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_C5RELAY_Ctrl(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo, BUS_C5IO_INFO *C5IO_Info)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>CSIO<49><4F>*/
if( DevHVoutInfo->HVoutLoopValidNum >= HVoutNumMAX ) DevHVoutInfo->HVoutLoopValidNum = HVoutNumMAX; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
for(uint8_t i = 0; i < DevHVoutInfo->HVoutLoopValidNum; i++)
{
if( (DevHVoutInfo->DevChangeFlag & (0x01 << i)) != 0x00 )
{
switch(DevHVoutInfo->DevHVoutState[i])
{
case 0x01:
C5IO_Info->Relay_Control[i] = BUS_C5IO_OUT_HIGH;
C5IO_Info->Relay_Control_Flag |= 0x00000001<<i;
break;
case 0x00:
C5IO_Info->Relay_Control[i] = BUS_C5IO_OUT_LOW;
C5IO_Info->Relay_Control_Flag |= 0x00000001<<i;
break;
}
DevHVoutInfo->DevChangeFlag &= ~(0x01<<i);
}
}
}

View File

@@ -0,0 +1,30 @@
#ifndef _BLV_485_DEV_C5RELAYFUN_H_
#define _BLV_485_DEV_C5RELAYFUN_H_
#include "stdint.h"
#include "BLV_Nor_Dev_HVoutFun.h"
void BLW_RS485_C5RELAY_Data_Init(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo);
#endif

View File

@@ -0,0 +1,461 @@
#include "BLV_485_Dev_C7TFun.h"
#include "check_fun.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "string.h"
#include "DBG.h"
#include "rw_logging.h"
#include "BLV_NET_Function.h"
#include "rtc.h"
#include "Log_api.h"
#include "includes.h"
#define Dev_C7T_RecvData_Len_Max 7
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/**/
uint8_t BLV_RS485_C7T_TempCycleCtrl(uint32_t DevAdd);
uint8_t BLW_Rs485_C7T_Temp_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
/**/
/*******************************************************************************
* Function Name : BLV_RS485_C7T_Data_Init
* Description : C7T<37><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
C7T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
C7T<37><54>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
<EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>T1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><>
<09><><EFBFBD><EFBFBD>C7T<37><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><E8B1B8><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
Devaddr : <20><EFBFBD><E8B1B8>ַ
DevSwiselect : <20><EFBFBD><E8B1B8><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
<09><>־: 202205091000 SongHan 0x16ָ<36><D6B8>Ҳ<EFBFBD>ḳֵ<E1B8B3>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BLV_RS485_C7T_Data_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_C7T_TempCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_C7T_Temp_Check;
Rs485TempT1->ValveSameFlag = 0x01; //<2F><><EFBFBD>ȷ<EFBFBD>һ<EFBFBD><D2BB> 2023-06-27
}
/*******************************************************************************
* Function Name : RS485_C7T_TempControl
* Description : C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void RS485_C7T_TempControl(Device_Public_Information_G *BUS_Public,RS485_TEMP_INFO *C7T_Info, uint8_t CtrlWay)
{
uint8_t CtrlSend[5];// = {0x01, 0x16, 0x00, 0x00, 0x00};
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s",__func__);
CtrlSend[0] = BUS_Public->addr;// SRAM_Read_Byte(DevAdd+Dev_Addr);
CtrlSend[1] = 0x16;
CtrlSend[2] = C7T_Info->TemStateCtrl.set_t;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CtrlSend[3] = ((C7T_Temp_Switch_To_Judge(C7T_Info->TemStateCtrl.on_off)&0x03)<<6)+((C7T_Info->TemStateCtrl.mode&0x03)<<4)+((C7T_Info->TemStateCtrl.fan&0x03)<<2)+((C7T_Info->TemState.valve&0x03)<<0); //<2F><><EFBFBD>ŵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ȥ<EFBFBD>ˣ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
CtrlSend[4] = SOR_CRC(CtrlSend,4);
MCU485_SendString(BUS_Public->port,CtrlSend,5);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,CtrlSend,5);
}
/*******************************************************************************
* Function Name : BLWC43_tempRecAsk
* Description : C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BLWC43_tempRecAsk(Device_Public_Information_G* BUS_Public, uint8_t *data, uint16_t DataLen, RS485_TEMP_INFO *Rs485Tem)
{
// uint8_t Senddata[5];
// uint8_t port = SRAM_Read_Byte(DevAdd+Dev_port);
// SRAM_Read_Buff(Senddata,5,Data_addr);
MCU485_SendString(BUS_Public->port,data,DataLen);
}
/*******************************************************************************
* Function Name : BLWC43_tempRecAsk
* Description : C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BLWC43_TempCtrDataProc(Device_Public_Information_G* BUS_Public, uint8_t *Data, RS485_TEMP_INFO *C7T_Temp_Info)
{
RS485_TEMP_BASIC Rs485TemRecBuf;
// RS485_TEM_BASIC set_temp;
uint16_t TemState;
// uint8_t temp = 0;
// temp = SRAM_Read_Byte(Data_addr + 1);
switch(Data[1])
{
case 0x13:
TemState = Data[2] + (Data[3]<<8);//SRAM_Read_Word(Data_addr + 2);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>");
switch((TemState&0x8000)>>15) //<2F><><EFBFBD><EFBFBD>λ
{
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.on_off = TEMP_STATE_ON;
break;
case 0x00:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ػ<EFBFBD>");
Rs485TemRecBuf.TemState.on_off = TEMP_STATE_OFF;
break;
}
switch((TemState&0x6000)>>13)
{
case 1: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_COLD;
break;
case 2: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_HOT;
break;
case 3: //<2F>ͷ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ͷ<EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_WIND;
break;
case 0: //ģʽ<C4A3>Զ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ģʽ<EFBFBD>Զ<EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_MODEAUTO;
break;
}
switch((TemState&0x1800)>>11)
{
case 1: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_LOW;
break;
case 2: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_MID;
break;
case 3: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_HIGH;
break;
case 0: //<2F>Զ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>Զ<EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_FANAUTO;
break;
}
if((TEMP_STATE_ON == Rs485TemRecBuf.TemState.on_off)&&(TemState & 0x0400)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485TemRecBuf.TemState.valve = TEMP_VALVE_OPEN;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
else
{
Rs485TemRecBuf.TemState.valve = TEMP_VALVE_CLOSE; //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
Rs485TemRecBuf.TemState.set_t = ((TemState&0x03E0)>>5); //<2F>õ<EFBFBD><C3B5>ȣ<C2B6>0<EFBFBD><30>32<33><32>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%d",Rs485TemRecBuf.TemState.set_t);
Rs485TemRecBuf.TemState.indoor_t = (TemState&0x001F); //<2F>õ<EFBFBD><C3B5>ȣ<C2B6>0<EFBFBD><30>32<33><32>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%d",Rs485TemRecBuf.TemState.indoor_t);
if((Rs485TemRecBuf.TemState.on_off != C7T_Temp_Info->TemState.on_off) || (Rs485TemRecBuf.TemState.mode != C7T_Temp_Info->TemState.mode) ||
(Rs485TemRecBuf.TemState.fan != C7T_Temp_Info->TemState.fan) || (Rs485TemRecBuf.TemState.valve != C7T_Temp_Info->TemState.valve)||
(Rs485TemRecBuf.TemState.set_t != C7T_Temp_Info->TemState.set_t) || (Rs485TemRecBuf.TemState.indoor_t != C7T_Temp_Info->TemState.indoor_t))//<2F><><EFBFBD>ػ<EFBFBD> ģʽ <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EBB4A2><EFBFBD>IJ<EFBFBD>һ<EFBFBD><D2BB>
{
if(C7T_Temp_Info->TemState.on_off == C7T_Temp_Info->control_start) //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ƴɹ<C6B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C7T_Temp_Info <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>־");
C7T_Temp_Info->control_start = 0xFF;
}
Temp_Action_Set(&Rs485TemRecBuf, C7T_Temp_Info); //ͬ<><CDAC>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// C7T_Temp_Info->TemState.on_off = Rs485TemRecBuf.TemState.on_off;
// C7T_Temp_Info->TemState.mode = Rs485TemRecBuf.TemState.mode;
// C7T_Temp_Info->TemState.fan = Rs485TemRecBuf.TemState.fan;
// C7T_Temp_Info->TemState.set_t = Rs485TemRecBuf.TemState.set_t;
// C7T_Temp_Info->TemState.valve = Rs485TemRecBuf.TemState.valve;
//
//
//
// C7T_Temp_Info->TemDataChangeFlag = 0x01; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>Ƽ̵<C6BC><CCB5><EFBFBD><EFBFBD><EFBFBD>־
}
// if(Rs485TemRecBuf.TemState.indoor_t != C7T_Temp_Info->TemState.indoor_t)
// {
// C7T_Temp_Info->TemState.indoor_t = Rs485TemRecBuf.TemState.indoor_t;
// if(C7T_Temp_Info->TempType == TEMP_TYPE_VALVE) //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>
// {
// C7T_Temp_Info->TemDataChangeFlag = 0x01;
// }
// }
// C7T_Temp_Info->ControlFlag = 0x00;
break;
case 0x16:
C7T_Temp_Info->TemStateCtrlFlag.TemOnOffCtrlVar = 0x00;
C7T_Temp_Info->TemStateCtrlFlag.TemModeCtrlVar = 0x00;
C7T_Temp_Info->TemStateCtrlFlag.TemFanCtrlVar = 0x00;
C7T_Temp_Info->TemStateCtrlFlag.TemIndoorCtrlVar = 0x00;
C7T_Temp_Info->TemStateCtrlFlag.TemSetTCtrlVar = 0x00;
C7T_Temp_Info->TemStateCtrlFlag.TemValveCtrlVar = 0x00;
TemState = Data[2] + (Data[3]<<8);//SRAM_Read_Word(Data_addr + 2);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ƻظ<EFBFBD>ָ<EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>״̬:");
switch((TemState&0xC000)>>14) //Bit14~15
{
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.on_off = TEMP_STATE_ON;
break;
case 0x02:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ػ<EFBFBD>");
Rs485TemRecBuf.TemState.on_off = TEMP_STATE_OFF;
break;
}
switch((TemState&0x3000)>>12) //Bit12~13
{
case 1: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_COLD;
break;
case 2: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_HOT;
break;
case 3: //<2F>ͷ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ͷ<EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_WIND;
break;
case 0: //ģʽ<C4A3>Զ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ģʽ<EFBFBD>Զ<EFBFBD>");
Rs485TemRecBuf.TemState.mode = TEMP_MODEAUTO;
break;
}
switch((TemState&0x0C00)>>10) //Bit10~11
{
case 1: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_LOW;
break;
case 2: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_MID;
break;
case 3: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_HIGH;
break;
case 0: //<2F>Զ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>Զ<EFBFBD>");
Rs485TemRecBuf.TemState.fan = TEMP_FANAUTO;
break;
}
// if((TEMP_STATE_ON == Rs485TemRecBuf.TemState.on_off)&&
// (TEMP_COLD == Rs485TemRecBuf.TemState.mode)&&()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// Rs485TemRecBuf.TemState.valve = TEMP_VALVE_OPEN;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD> ");
// }
// else
// {
// Rs485TemRecBuf.TemState.valve = TEMP_VALVE_CLOSE; //<2F><><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD> ");
// }
Rs485TemRecBuf.TemState.valve = C7T_Temp_Info->TemState.valve;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>ȡRCU֮ǰ<EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>%d ",Rs485TemRecBuf.TemState.valve);
Rs485TemRecBuf.TemState.set_t = (TemState&0x00ff); //<2F>õ<EFBFBD><C3B5>ȣ<C2B6>0<EFBFBD><30>32<33><32>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%d ",Rs485TemRecBuf.TemState.set_t);
Rs485TemRecBuf.TemState.indoor_t = TEMTEMPCONVER(C7T_Temp_Info->TemState.indoor_t); //(TemState&0x001F); //<2F>õ<EFBFBD><C3B5>ȣ<C2B6>0<EFBFBD><30>32<33><32>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>ȡRCU֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%d ",Rs485TemRecBuf.TemState.indoor_t);
if((Rs485TemRecBuf.TemState.on_off != C7T_Temp_Info->TemState.on_off) || (Rs485TemRecBuf.TemState.mode != C7T_Temp_Info->TemState.mode) ||
(Rs485TemRecBuf.TemState.fan != C7T_Temp_Info->TemState.fan) || (Rs485TemRecBuf.TemState.valve != C7T_Temp_Info->TemState.valve)||
(Rs485TemRecBuf.TemState.set_t != C7T_Temp_Info->TemState.set_t) || (Rs485TemRecBuf.TemState.indoor_t != C7T_Temp_Info->TemState.indoor_t))//<2F><><EFBFBD>ػ<EFBFBD> ģʽ <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EBB4A2><EFBFBD>IJ<EFBFBD>һ<EFBFBD><D2BB>
{
if(C7T_Temp_Info->TemState.on_off == C7T_Temp_Info->control_start) //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ƴɹ<C6B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C7T_Temp_Info <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>־");
C7T_Temp_Info->control_start = 0xFF;
}
Temp_Action_Set(&Rs485TemRecBuf, C7T_Temp_Info); //ͬ<><CDAC>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
}
/*<2A>ȶԷ<C8B6><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>״̬ - <20>Ƿ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>־
2025-10-13 <20>޸<EFBFBD>
1<><31>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȱ仯<C8B1><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
2<><32><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>30S<30><53><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
*/
if( (C7T_Temp_Info->TemStateLast.on_off != C7T_Temp_Info->TemState.on_off)
|| (C7T_Temp_Info->TemStateLast.mode != C7T_Temp_Info->TemState.mode)
|| (C7T_Temp_Info->TemStateLast.fan != C7T_Temp_Info->TemState.fan)
|| (C7T_Temp_Info->TemStateLast.valve != C7T_Temp_Info->TemState.valve)
|| (C7T_Temp_Info->TemStateLast.set_t != C7T_Temp_Info->TemState.set_t) )
{
Dev_Temp_State_Sync(&C7T_Temp_Info->TemStateLast,&C7T_Temp_Info->TemState);
C7T_Temp_Info->udp_flag = 0x01;
C7T_Temp_Info->udp_tick = SysTick_1ms;
}
if(C7T_Temp_Info->udp_flag == 0x01)
{
if( SysTick_1ms - C7T_Temp_Info->udp_tick >= 2000)
{
C7T_Temp_Info->udp_tick = SysTick_1ms;
C7T_Temp_Info->udp_flag = 0x00;
//д<><D0B4><EFBFBD><EFBFBD>־
Udp_Addtion_Roomstate(DEV_RS485_TEMP,BUS_Public->addr,0x0000,Dev_Temp_State_Data(C7T_Temp_Info->TemState));
}
}
}
/*******************************************************************************
* Function Name : BLV_RS485_C7T_TempCycleCtrl
* Description : C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLV_RS485_C7T_TempCycleCtrl(uint32_t DevAdd)
{
return TemGlobalJudge(DevAdd, RS485_C7T_TempControl, NULL);
}
#define RECDATALENMAX 5
/*******************************************************************************
* Function Name : BLW_Rs485_C7T_Temp_Check
* Description : C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
0x00<30><30><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
*******************************************************************************/
uint8_t BLW_Rs485_C7T_Temp_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
uint8_t rev = 0x01;
uint16_t temp = 0;
uint8_t data[RECDATALENMAX];
Device_Public_Information_G BUS_Public;
RS485_TEMP_INFO C7T_Temp_Info; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((DataLen > RECDATALENMAX) || (0x00 == DevAdd))
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
// if(DevAdd == 0x00) return 0x01;
// temp = SRAM_Read_Byte(Data_addr);
if((DataLen != 0x05)|| ((data[1] != 0x13)&&(data[1] != 0x16))||(data[DataLen - 1] != SOR_CRC(data, DataLen-1))||(data[0] != SRAM_Read_Byte(DevAdd+Dev_Addr)))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C7T<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><EFBFBD> DevAdd:%d,len:%d",temp,DataLen);
return 0x01;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLW_Rs485_C7T_Temp_Check %d",BUS_Public.addr);
// uint16_t deal_len = DataLen;
// if(deal_len > Dev_C7T_RecvData_Len_Max)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"Dev_C7T_Temp Check_Len Fail! \r\n");
// return rev;
// }
// uint8_t deal_buff[deal_len+2];
// memset(deal_buff,0,sizeof(deal_buff));
// SRAM_DMA_Read_Buff(deal_buff,deal_len,Data_addr);
// if() //У<><D0A3>ͨ<EFBFBD><CDA8>
{
// uint16_t val_check = 0;
// uint16_t dev_datalen = SRAM_Read_Word(DevAdd+Dev_DataLen);
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&C7T_Temp_Info,sizeof(RS485_TEMP_INFO),DevAdd+Dev_Privately);
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>2 <20><>ַ: %4X <20><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ַ:%4X",BUS_Public.polling_cf, (uint32_t)&BLV_RS485_C7T_TempCycleCtrl);
switch(data[1])
{
// case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2>ظ<EFBFBD>
case 0x13: //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
case 0x16: //<2F><><EFBFBD>ƻظ<C6BB>
if(C7T_Temp_Info.DevOffline != DEV_IS_ONLINE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_C7T_Temp %d LogInfo_Device_Online...........", data[0]);
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&C7T_Temp_Info.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
C7T_Temp_Info.DevSendCnt = 0x00;
C7T_Temp_Info.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(C7T_Temp_Info.DevOffline != C7T_Temp_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
C7T_Temp_Info.DevOfflineLast = C7T_Temp_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
break;
}
switch(data[1])
{
case 0x13: //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
BLWC43_tempRecAsk(&BUS_Public,data,DataLen, &C7T_Temp_Info);
case 0x16: //<2F><><EFBFBD>ƻظ<C6BB>
BLWC43_TempCtrDataProc(&BUS_Public,data, &C7T_Temp_Info);
break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,DataLen);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C7T_Temp_Info, sizeof(RS485_TEMP_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&C7T_Temp_Info,sizeof(RS485_TEMP_INFO),DevAdd+Dev_Privately);
rev = 0x00;
}
return rev;
}

View File

@@ -0,0 +1,31 @@
#ifndef _BLV_BUS_DEV_C7TFUN_H_
#define _BLV_BUS_DEV_C7TFUN_H_
#include "BLV_485_Dev_Touch_SwiFun.h"
#include "BLV_485_Dev_TempFun.h"
//#define DEV_C7T_Switch_TYPE 0x06 //C7T<37><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define DEV_C7T_TEMP_TYPE 0x07 //C7T<37>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><>׼<EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///*C7T 24<32><34><EFBFBD><EFBFBD>26<32><36>ѡ<EFBFBD><D1A1>*/
//#define DevSelect_C7T_24Switch 0x18
//#define DevSelect_C7T_26Switch 0x1A
//void BLV_RS485_C7T_Data_Init(uint8_t Devaddr,uint8_t DevSwinum, uint8_t);
//uint8_t BLV_RS485_C7T_TempCycleCtrl(uint32_t DevAdd);
//uint8_t BLW_Rs485_C7T_Temp_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
//uint8_t BLV_RS485_C7T_SwitchCycleCtrl(uint32_t DevAdd);
//uint8_t BLW_Rs485_C7T_Switch_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
//void BLW_C7T_TEMP_Control_State(uint32_t devaddr,uint8_t serial,uint8_t serial_start);
//void BLW_C7T_TEMP_Group_Control_State(uint32_t devaddr,uint16_t state);
//void BLW_C7T_Switch_Feedback(uint32_t devaddr,uint8_t loop,uint8_t start);
//uint16_t Get_C7T_Temp_New_Status(uint32_t devaddr);
//uint8_t Get_C7T_Switch_Online_Status(uint32_t devaddr);
//uint8_t Get_C7T_Temp_Online_Status(uint32_t devaddr);
void BLV_RS485_C7T_Data_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1);
#endif

View File

@@ -0,0 +1,274 @@
/**
******************************************************************************
* @file BLV_485_Dev_CLEDFreshAirFun.c
* @author BLW RCU development Team YHF
* @version V1.0.0
* @date 2023<32><33>7<EFBFBD><37>28<32><38>
* @brief CLED<45><44>ů
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_CLEDFloorHeatFun.h"
#define CLED_FLOORHEAT_MAX_SEND_CNT 0x03 //CLED<45><44>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define CLED_FLOORHEAT_RECEIVE_MAX_DATA_LEN 0x0A //CLED<45><44>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
void CLED_FloorHeat_Control(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info); //CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
void CLED_FloorHeat_Change_Data(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info,uint8_t *data); //CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>CLED<45><44>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* FloorHeat_Info 485<38><35>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
* @attention None
*******************************************************************************/
void CLED_RS485_FloorHeat_Init(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info)
{
BUS_Public->polling_cf = (uint32_t)&CLED_FloorHeat_Polling_Ctrl; //CLED<45><44>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
BUS_Public->processing_cf = (uint32_t)&CLED_FloorHeat_Data_Processing; //CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CLED<EFBFBD><EFBFBD>ů<EFBFBD>豸 %d <20><>ַ",BUS_Public->addr);
}
/*******************************************************************************
* @brief CLED<45><44>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* @retval RS485OCCUPYTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
RS485OCCUPYNOTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
* @attention None
*******************************************************************************/
uint8_t CLED_FloorHeat_Polling_Ctrl(uint32_t dev_addr)
{
uint8_t send_time = RS485OCCUPYNOTIME; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨Ĭ<E4A3A8>Ϸ<EFBFBD><CFB7>Ͳ<EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((FloorHeat_Info.ctrl_flag.on_off == 0x01) &&(FloorHeat_Info.ctrl_flag.set_oc == 0x01)) //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>1
{
if(FloorHeat_Info.ctrl_cnt.on_off != 0x00) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
FloorHeat_Info.ctrl_cnt.on_off--; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>1
}
else //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>Ϊ0
{
FloorHeat_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>0
}
CLED_FloorHeat_Control(&BUS_Public,&FloorHeat_Info); //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
if(send_time == RS485OCCUPYTIME) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
{
if(FloorHeat_Info.DevSendCnt > CLED_FLOORHEAT_MAX_SEND_CNT) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.DevOffline != DEV_IS_OFFLINE) //<2F><EFBFBD><E8B1B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><D6B7><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_HEATER, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FloorHeat_Info.DevOffline = DEV_IS_OFFLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FloorHeat_Info.DevOffline != FloorHeat_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FloorHeat_Info.DevOfflineLast = FloorHeat_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ط<EFBFBD>
{
FloorHeat_Info.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&FloorHeat_Info.comm_record, 0x01, 0x00); //ͨѶͳ<D1B6><CDB3>
FloorHeat_Info.inquire_tick = SysTick_1ms; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʱ<D1AF><CAB1><EFBFBD><EFBFBD>
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return send_time;
}
/*******************************************************************************
* @brief CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <09><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 0-<2D><>CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>ݣ<EFBFBD>1-<2D><><EFBFBD><EFBFBD>CLED<45><44>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
* @attention None
*******************************************************************************/
uint8_t CLED_FloorHeat_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rec = 0x01, data[CLED_FLOORHEAT_RECEIVE_MAX_DATA_LEN]; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
uint8_t tempflag = 0x00;
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(len!=5)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>Ⱥ<EFBFBD>CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
SRAM_DMA_Read_Buff(data, len, data_addr); //<2F><>ȡ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(data[4]!=SOR_CRC(data,4))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
if(data[0]!=BUS_Public.addr)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
if((data[1]!=0x83) && (data[1]!=0x86))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
rec = 0x00; //<2F><>CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FloorHeat_Info.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_HEATER, BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FloorHeat_Info.DevSendCnt = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
FloorHeat_Info.DevOffline = DEV_IS_ONLINE; //<2F><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FloorHeat_Info.DevOffline != FloorHeat_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FloorHeat_Info.DevOfflineLast = FloorHeat_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&FloorHeat_Info.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[1])
{
case 0x83:
CLED_FloorHeat_Change_Data(&BUS_Public,&FloorHeat_Info,data);
tempflag = 0x01;
break;
case 0x86:
FloorHeat_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>0
FloorHeat_Info.ctrl_flag.set_oc = 0x00; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>0
FloorHeat_Info.ctrl_cnt.on_off = 0x03;
FloorHeat_Info.ctrl_cnt.set_oc = 0x03;
tempflag = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů %d <20><>ַ<EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD><EFBFBD><EFBFBD><E5BFAA><EFBFBD>Ʊ<EFBFBD>־", BUS_Public.addr);
break;
default:
break;
}
if(tempflag)
{
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů˽<C5AF><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return rec;
}
/*******************************************************************************
* @brief CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* function <09><><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>
* control <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void CLED_FloorHeat_Control(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info)
{
uint8_t data[5] = {0}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[0] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
data[1] = 0x86;
data[2] |= FloorHeat_Info->ctrl_content.set_oc;
if(FloorHeat_Info->ctrl_content.on_off==0x01)
{
data[3] |= (0x01<<6);
}
else if(FloorHeat_Info->ctrl_content.on_off==0x00)
{
data[3] |= (0x02<<6);
}
data[4] = SOR_CRC(data,4);
MCU485_SendString(BUS_Public->port, data, 5); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 5); //<2F><>־<EFBFBD><D6BE>¼
}
/*******************************************************************************
* @brief CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
* @param
* FloorHeat_Info 485<38><35>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* data <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval 0 - <20><><EFBFBD><EFBFBD>û<EFBFBD>
1 - <20><><EFBFBD><EFBFBD><EFBFBD>б
* @attention None
*******************************************************************************/
void CLED_FloorHeat_Change_Data(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info,uint8_t *data)
{
uint8_t tempdata = ((data[2]&0xE0)>>5)+((data[3]&0x03)<<3);
FloorHeat_Info->new_state.on_off = (data[3]&0x80)>>7; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
FloorHeat_Info->new_state.set_oc = tempdata; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(tempdata == 0x00) //<2F><EFBFBD>ת<EFBFBD><D7AA>
{
FloorHeat_Info->new_state.set_oc = 32; //<2F><EFBFBD>ת<EFBFBD><D7AA>
}
if(((data[3] & 0x04) >> 2) == FLOORHEAT_VALVE_ON) //<2F><><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>
{
FloorHeat_Info->new_state.valve = TEMP_VALVE_OPEN; //<2F><><EFBFBD><EFBFBD>
}
else //<2F><><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>
{
FloorHeat_Info->new_state.valve = TEMP_VALVE_CLOSE; //<2F><><EFBFBD><EFBFBD>
}
FloorHeat_Info->new_state.indoor_oc = data[2]&0x1F; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(FloorHeat_Info->ctrl_content.on_off != FloorHeat_Info->ctrl_content_last.on_off) //״̬ͬ<CCAC><CDAC>
{
FloorHeat_Info->ctrl_content_last.on_off = FloorHeat_Info->ctrl_content.on_off;
}
if(FloorHeat_Info->ctrl_content.set_oc != FloorHeat_Info->ctrl_content_last.set_oc)
{
FloorHeat_Info->ctrl_content_last.set_oc = FloorHeat_Info->ctrl_content.set_oc;
}
if(FloorHeat_Info->ctrl_content.indoor_oc != FloorHeat_Info->ctrl_content_last.indoor_oc)
{
FloorHeat_Info->ctrl_content_last.indoor_oc = FloorHeat_Info->ctrl_content.indoor_oc;
}
if(FloorHeat_Info->ctrl_content.valve != FloorHeat_Info->ctrl_content_last.valve)
{
FloorHeat_Info->ctrl_content_last.valve = FloorHeat_Info->ctrl_content.valve;
}
MCU485_SendString(BUS_Public->port, data, 5); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 10); //<2F><>־<EFBFBD><D6BE>¼
}

View File

@@ -0,0 +1,8 @@
#ifndef __BLV_485_DEV_CLEDFLOORHEATFUN_H
#define __BLV_485_DEV_CLEDFLOORHEATFUN_H
#include "BLV_485_Dev_FloorHeatFun.h"
void CLED_RS485_FloorHeat_Init(Device_Public_Information_G *BUS_Public,RS485_FloorHeat_INFO *FloorHeat_Info); //<2F><><EFBFBD><EFBFBD>CLED<45><44>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
uint8_t CLED_FloorHeat_Polling_Ctrl(uint32_t dev_addr); //CLED<45><44>ů<EFBFBD><C5AF>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
uint8_t CLED_FloorHeat_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //CLED<45><44>ů<EFBFBD><C5AF><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif

View File

@@ -0,0 +1,257 @@
/**
******************************************************************************
* @file BLV_485_Dev_CLEDFreshAirFun.c
* @author BLW RCU development Team YHF
* @version V1.0.0
* @date 2023<32><33>7<EFBFBD><37>27<32><37>
* @brief CLED<45>·<EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_CLEDFreshAirFun.h"
#define CLED_FRESHAIR_MAX_SEND_CNT 0x03 //CLED<45>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define CLED_FRESHAIR_RECEIVE_MAX_DATA_LEN 0x0A //CLED<45>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
void CLED_FreshAir_Control(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info);
void CLED_FreshAir_Change_Data(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info,uint8_t *data);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>CLED<45>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* FreshAir_Info 485<38>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_CLEDFreshAir_Init(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info)
{
BUS_Public->polling_cf = (uint32_t)&CLED_FreshAir_Polling_Ctrl; //CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
BUS_Public->processing_cf = (uint32_t)&CLED_FreshAir_Data_Processing; //CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CLED<EFBFBD>·<EFBFBD><EFBFBD>豸 %d <20><>ַ",BUS_Public->addr);
}
/*******************************************************************************
* @brief CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* @retval RS485OCCUPYTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
RS485OCCUPYNOTIME - 485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
* @attention None
*******************************************************************************/
uint8_t CLED_FreshAir_Polling_Ctrl(uint32_t dev_addr)
{
uint8_t send_time = RS485OCCUPYNOTIME; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨Ĭ<E4A3A8>Ϸ<EFBFBD><CFB7>Ͳ<EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD>
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((FreshAir_Info.ctrl_flag.on_off == 0x01) &&(FreshAir_Info.ctrl_flag.wind_velocity == 0x01)) //<2F><><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>1
{
if(FreshAir_Info.ctrl_cnt.on_off != 0x00) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
FreshAir_Info.ctrl_cnt.on_off--; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>1
}
else //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>Ϊ0
{
FreshAir_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE>0
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD>·<EFBFBD> <20><><EFBFBD>ػ<EFBFBD>״̬%d <20><><EFBFBD><EFBFBD>״̬:%d",\
FreshAir_Info.ctrl_content.on_off,FreshAir_Info.ctrl_content.wind_velocity);
CLED_FreshAir_Control(&BUS_Public,&FreshAir_Info); //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
}
if(send_time == RS485OCCUPYTIME) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
{
if(FreshAir_Info.DevSendCnt > CLED_FRESHAIR_MAX_SEND_CNT) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
{
if(FreshAir_Info.DevOffline != DEV_IS_OFFLINE) //<2F><EFBFBD><E8B1B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><D6B7><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_FreshAir, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FreshAir_Info.DevOffline = DEV_IS_OFFLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FreshAir_Info.DevOffline != FreshAir_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FreshAir_Info.DevOfflineLast = FreshAir_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ط<EFBFBD>
{
FreshAir_Info.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&FreshAir_Info.comm_record, 0x01, 0x00); //ͨѶͳ<D1B6><CDB3>
FreshAir_Info.inquire_tick = SysTick_1ms; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʱ<D1AF><CAB1><EFBFBD><EFBFBD>
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return send_time;
}
/*******************************************************************************
* @brief CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <09><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 0-<2D><>CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>1-<2D><><EFBFBD><EFBFBD>CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
* @attention None
*******************************************************************************/
uint8_t CLED_FreshAir_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rec = 0x01, data[CLED_FRESHAIR_RECEIVE_MAX_DATA_LEN]; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
uint8_t temp_flag = 0x00;
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(len!=5)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>Ⱥ<EFBFBD>CLED<EFBFBD>·粻<EFBFBD><EFBFBD>!!");
return rec;
}
SRAM_DMA_Read_Buff(data, len, data_addr); //<2F><>ȡ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(data[4]!=SOR_CRC(data,4))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
if(data[0]!=BUS_Public.addr)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>CLED<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
if((data[1]!=0x93) && (data[1]!=0x96))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>CLED<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD>!!");
return rec;
}
rec = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FreshAir_Info.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>",BUS_Public.addr);
LOG_Device_Online_Record(DEV_RS485_FreshAir, BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FreshAir_Info.DevSendCnt = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
FreshAir_Info.DevOffline = DEV_IS_ONLINE; //<2F><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(FreshAir_Info.DevOffline != FreshAir_Info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
FreshAir_Info.DevOfflineLast = FreshAir_Info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&FreshAir_Info.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
switch(data[1])
{
case 0x93:
CLED_FreshAir_Change_Data(&BUS_Public,&FreshAir_Info,data);
temp_flag = 0x01;
break;
case 0x96:
FreshAir_Info.ctrl_flag.on_off = 0x00; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>0
FreshAir_Info.ctrl_flag.wind_velocity = 0x00; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>0
FreshAir_Info.ctrl_cnt.on_off = 0x03;
FreshAir_Info.ctrl_cnt.wind_velocity = 0x03;
temp_flag = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CLED<EFBFBD>·<EFBFBD> %d <20><>ַ<EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD><EFBFBD><EFBFBD><E5BFAA><EFBFBD>Ʊ<EFBFBD>־", BUS_Public.addr);
break;
default:
break;
}
if(temp_flag)
{
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return rec;
}
/*******************************************************************************
* @brief CLED<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* function <09><><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>
* control <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void CLED_FreshAir_Control(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info)
{
uint8_t data[5] = {0}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[0] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
data[1] = 0x96;
data[2] = 0x00;
data[3] |= (FreshAir_Info->ctrl_content.wind_velocity<<2);
if(FreshAir_Info->ctrl_content.on_off==0x01)
{
data[3] |= (0x01<<6);
}
else if(FreshAir_Info->ctrl_content.on_off==0x00)
{
data[3] |= (0x02<<6);
}
data[4] = SOR_CRC(data,4);
MCU485_SendString(BUS_Public->port, data, 5); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 5); //<2F><>־<EFBFBD><D6BE>¼
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>
* @param
* FreshAir_Info 485<38>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* data <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
* @retval 0 - <20><><EFBFBD><EFBFBD>û<EFBFBD>
1 - <20><><EFBFBD><EFBFBD><EFBFBD>б
* @attention None
*******************************************************************************/
void CLED_FreshAir_Change_Data(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info,uint8_t *data)
{
FreshAir_Info->new_state.on_off = (data[3]&0x80)>>7; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
FreshAir_Info->new_state.wind_velocity = (data[3]&0x18)>>3; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(FreshAir_Info->ctrl_content.on_off != FreshAir_Info->ctrl_content_last.on_off) //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬ͬ<CCAC><CDAC>
{
FreshAir_Info->ctrl_content_last.on_off = FreshAir_Info->ctrl_content.on_off;
}
if(FreshAir_Info->ctrl_content.wind_velocity != FreshAir_Info->ctrl_content_last.wind_velocity) //<2F><><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD>״̬ͬ<CCAC><CDAC>
{
FreshAir_Info->ctrl_content_last.wind_velocity = FreshAir_Info->ctrl_content.wind_velocity;
}
MCU485_SendString(BUS_Public->port, data, 5); //ʹ<><CAB9>485<38><35><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 10); //<2F><>־<EFBFBD><D6BE>¼
}

View File

@@ -0,0 +1,9 @@
#ifndef __BLV_485_DEV_CLEDFRESHAIRFUN_H
#define __BLV_485_DEV_CLEDFRESHAIRFUN_H
#include "BLV_485_Dev_FreshAirFun.h"
void BLW_RS485_CLEDFreshAir_Init(Device_Public_Information_G *BUS_Public,RS485_FreshAir_INFO *FreshAir_Info);
uint8_t CLED_FreshAir_Polling_Ctrl(uint32_t dev_addr);
uint8_t CLED_FreshAir_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
#endif

View File

@@ -0,0 +1,682 @@
/**
******************************************************************************
* @file BLV_485.c
* @author BLW RCU development Team
* @version V1.0.0
* @date 2021<32><31>11<31><31>01<30><31>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
* @attention <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD> <20><>
* ִ<>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD> <20><>
* ִ<>з<EFBFBD>ʽ<EFBFBD><CABD>
* <09><>
* <09><>
* @log
202205241551 SongHan SERVICEVALUESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>uint32_t <20><>ҪǿתΪuint64_t
202509011617 <09>ܴ<EFBFBD>
1<><31><EFBFBD>޸ķ<DEB8><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·״̬<D7B4><CCAC><EFBFBD><EFBFBD>һ<EFBFBD>λ<EFBFBD>·״̬<D7B4><CCAC><EFBFBD><EFBFBD>·<EFBFBD>ı<EFBFBD>״̬<D7B4>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2<><32><EFBFBD>޸ķ<DEB8><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·<EFBFBD><C2B7><EFBFBD><EFBFBD> 24 -> 64
3<><33>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD> Dev_Name_Struct DevNameStruct <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʹ<EFBFBD><CAB9>
4<><34><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><>·1 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>¼<EFBFBD><C2BC>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
<09><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>״<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>¼<EFBFBD>(0x03)
<09><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>״<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>־λ(0x03)<29><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>ӭ<EFBFBD><D3AD>(0x04)
******************************************************************************
*/
#include "includes.h"
/*T1<54>忨ȡ<E5BFA8><C8A1>*/
#define CtrlValid 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
#define CtrlInvalid 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
#define CARDACTIONCONVER(data) (*(uint16_t *)&data) //ʵ<><CAB5>u16<31><36>ֵ <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȽϺ͸<CFBA>ֵ
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define READ_LEN 9
#define Dev_Card_RecvData_Len_Max 0x20
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(Dev_485_Card_Polling_Flag,BLV_RS485_Card_Polling_Init) //<2F><>ѵ<EFBFBD>˿<EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(Dev_485_Card_Active_Flag,BLV_RS485_Card_Active_Init) //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/**/
uint8_t BLV_RS485_Card_Cycle_Dis(uint32_t dev_addr);
uint8_t BLV_Rs485_Card_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
uint8_t Dev_Rs485_Card_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
/*<2A><><EFBFBD><EFBFBD><EFBFBD>˿ڽ<CBBF><DABD>պͷ<D5BA><CDB7><EFBFBD>*/
void BLV_RS485_Card_Active_Init(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_Card_Cycle_Dis;
BUS_Public->processing_cf = (uint32_t)&BLV_Rs485_Card_Check;
Rs485CardInfo->DevPort = Active_Port; //2025-08-21 <20><>Ŀ2164 <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
//<2F><EFBFBD>˿ڳ<CBBF>ʼ<EFBFBD><CABC> - <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>£<EFBFBD><C2A3>ϵ粻<CFB5><E7B2BB><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>µ<EFBFBD>״̬
Rs485CardInfo->DevInitFlag = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڲ忨ȡ<EFBFBD><EFBFBD>:%d",Rs485CardInfo->DevPort);
}
/*<2A><>ѵ<EFBFBD>˿ڽ<CBBF><DABD>պͷ<D5BA><CDB7><EFBFBD>*/
void BLV_RS485_Card_Polling_Init(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_Card_Cycle_Dis;
BUS_Public->processing_cf = (uint32_t)&BLV_Rs485_Card_Check;
Rs485CardInfo->DevPort = Polling_Port;
//<2F><EFBFBD>˿ڳ<CBBF>ʼ<EFBFBD><CABC> - <20><>ѯ<EFBFBD><D1AF><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>µ<EFBFBD>״̬
Rs485CardInfo->DevInitFlag = 0x00;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>˿ڲ忨ȡ<EFBFBD><EFBFBD>:%d",Rs485CardInfo->DevPort);
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Data_Init
* Description : BLV<4C>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>
*******************************************************************************/
void BLV_RS485_Card_Data_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_CARD_INFO Rs485CardInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardInfo,0,sizeof(RS485_CARD_INFO));
BUS_Public.addr = Data[1]; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.polling_cf = (uint32_t)&BLV_RS485_Card_Cycle_Dis;
BUS_Public.processing_cf = (uint32_t)&BLV_Rs485_Card_Check;
Rs485CardInfo.DevOffline = Rs485CardInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD>߳<EFBFBD>ʼ<EFBFBD><CABC>
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Rs485_Card_InType_Get;
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO));
Poll485_Info.device_num += 1;
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Data_For_Logic_Init
* Description : <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLV_RS485_Card_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_CARD_INFO Rs485CardInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardInfo,0,sizeof(RS485_CARD_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = dev_info->port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
Rs485CardInfo.DevOffline = Rs485CardInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD>߳<EFBFBD>ʼ<EFBFBD><CABC>
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Rs485_Card_InType_Get;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڲ忨ȡ<E5BFA8><C8A1>_111:%d",Rs485CardInfo.DevPort);
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CardInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CardInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485CardInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485CardInfo);break;
default:
break;
}
/*RCU<43><55><EFBFBD><EFBFBD>MCU<43><55>λ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC> -
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>Ź<EFBFBD><C5B9><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ⲿ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC><><C4AC>״̬<D7B4><CCAC>ͨ<EFBFBD><CDA8>RCU_POWER_Deivce_State_Init <20><EFBFBD><EAB6A8> <20>޸<EFBFBD>Ĭ<EFBFBD>ϳ<EFBFBD>ʼ<EFBFBD><CABC>״̬)
*/
if( (DevActionGlobal.sram_save_flag == 0xA8) && ((SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x01) || (SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x03) || (SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x05)) )
{
Rs485CardInfo.Rs485CardFlag = DevActionGlobal.CardState;
Rs485CardInfo.Rs485CardFlagLast = DevActionGlobal.CardState;
Rs485CardInfo.Rs485CardType = DevActionGlobal.Rs485CardType;
Rs485CardInfo.Rs485CardTypeLast = DevActionGlobal.Rs485CardType;
//<2F><>ʼ<EFBFBD><CABC>
if(Rs485CardInfo.Rs485CardFlag == 0x01){
SRAM_Write_Byte(0x01,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(0x01,SRAM_UDP_ELEReport_CardState_Last); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
}else{
SRAM_Write_Byte(0x02,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(0x02,SRAM_UDP_ELEReport_CardState_Last); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
}
}else {
#if RCU_POWER_Deivce_State_Init
//<2F>ϵ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>״̬
Rs485CardInfo.Rs485CardFlag = 0x01;
Rs485CardInfo.Rs485CardFlagLast = 0x01;
Rs485CardInfo.Rs485CardType = CARD_Guest_Identity;
Rs485CardInfo.Rs485CardTypeLast = CARD_Guest_Identity;
#else
//<2F>ϵ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>״̬
Rs485CardInfo.Rs485CardFlag = 0x00;
Rs485CardInfo.Rs485CardFlagLast = 0x00;
Rs485CardInfo.Rs485CardType = CARD_Anonymous_Identity;
Rs485CardInfo.Rs485CardTypeLast = CARD_Anonymous_Identity;
#endif
//<2F><>ʼ<EFBFBD><CABC>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardFlag,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardFlag,SRAM_UDP_ELEReport_CardState_Last); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
}
//<2F><>ʼ<EFBFBD><CABC>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardType,SRAM_UDP_ELEReport_CardType); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardType,SRAM_UDP_ELEReport_CardType_Last); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_DW(SysTick_1ms,SRAM_UDP_ELEReport_CardState_Tick); //2026-01-20 <20><><EFBFBD>Ӳ忨״̬<D7B4>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
SRAM_Write_DW(SysTick_1ms,SRAM_UDP_ELEReport_CardType_Tick); //2026-01-20 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
default:
break;
}
}
/*<2A><>ѵ<EFBFBD>˿<EFBFBD><CBBF><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
void BLV_RS485_Card_Polling_Send(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
uint8_t Cbuf[READ_LEN] = {0x55,0x55,0xee, 0x06, 0x07, 0x00, 0x01}; //0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
Cbuf[5] = BUS_Public->addr;
NetCRC16(&Cbuf[3],Cbuf[3]);
MCU485_SendString(BUS_Public->port,Cbuf,READ_LEN);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Rs485CardInfo->inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Rs485CardInfo->comm_record,0x01,0x00);
}
/*<2A><><EFBFBD>ö˿<C3B6><CBBF><EFBFBD><EFBFBD><EFBFBD>*/
void BLV_RS485_Card_PortType_Send(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
uint8_t lens = 0x0A;
uint8_t data[lens];
data[0] = 0x55;
data[1] = 0x55;
data[2] = 0xee;
data[3] = lens - 3; //<2F><>ȥ<EFBFBD><C8A5>ͷ3<CDB7><33><EFBFBD>ֽ<EFBFBD>
data[4] = 0x07; //Type
data[5] = BUS_Public->addr;
data[6] = 0x07; //CMD
data[7] = Rs485CardInfo->DevPort;
NetCRC16(&data[3],data[3]);
MCU485_SendString(BUS_Public->port,data,lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_RS485_Card_PortType_Send:",data,lens);
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Cycle_Dis
* Description : <20>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
* Return :
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLV_RS485_Card_Cycle_Dis(uint32_t dev_addr)
{
uint8_t ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_CARD_INFO Rs485CardInfo;
uint8_t keepflag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
if(Rs485CardInfo.DevPort != Rs485CardInfo.DevPort_Last)
{
Rs485CardInfo.DevPort_Last = Rs485CardInfo.DevPort;
Rs485CardInfo.DevPort_Flag = 0x01;
keepflag = 0x01;
}
if(Rs485CardInfo.DevPort_Flag == 0x01)
{
BLV_RS485_Card_PortType_Send(&BUS_Public,&Rs485CardInfo);
ret = RS485OCCUPYTIME;
}
else
{
if(BUS_Public.port == Polling_Port)
{
BLV_RS485_Card_Polling_Send(&BUS_Public,&Rs485CardInfo);
ret = RS485OCCUPYTIME;
}else {
//<2F><>Ŀ2164 - <20><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
// if( (DevActionGlobal.DevActionU64Cond.EleState == 0x01) || (Rs485CardInfo.Rs485CardType != 0x00) ) //<2F>
// {
// if(SysTick_1ms - Rs485CardInfo.inquire_state_tick >= 10000)
// {
// Rs485CardInfo.inquire_state_tick = SysTick_1ms;
//
// BLV_RS485_Card_Polling_Send(&BUS_Public,&Rs485CardInfo);
//
// keepflag = 0x01;
// ret = RS485OCCUPYTIME;
// }
// }else{
// if(SysTick_1ms - Rs485CardInfo.inquire_state_tick >= 1000)
// {
// Rs485CardInfo.inquire_state_tick = SysTick_1ms;
//
// BLV_RS485_Card_Polling_Send(&BUS_Public,&Rs485CardInfo);
//
// keepflag = 0x01;
// ret = RS485OCCUPYTIME;
// }
// }
/* <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD>жϵ<D0B6>ǰʹ<C7B0>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>忨ȡ<E5BFA8><C8A1> */
}
}
if(ret == RS485OCCUPYTIME)
{
keepflag = 0x01;
if(Rs485CardInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485CardInfo.DevOffline != DEV_IS_OFFLINE) //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>¼
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_Card LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_RS485_CARD,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485CardInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485CardInfo.DevOffline != Rs485CardInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CardInfo.DevOfflineLast = Rs485CardInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
Rs485CardInfo.DevPort_Flag = 0x00;
}
else
{
Rs485CardInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
}
if(keepflag == 0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardInfo, sizeof(RS485_CARD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
}
return ret;
}
/*******************************************************************************
* Function Name : BLV_Rs485_Card_Check
* Description : BLV<4C>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
ͷ LEN TYPE ADDR FUN <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>L <20><><EFBFBD><EFBFBD>H <20><> <20><>Ԫ ¥<><C2A5> <20><><EFBFBD><EFBFBD> У<><D0A3>
55 55 EE 0E 07 01 01 01 00 00 00 00 00 00 00 0A 38
*******************************************************************************/
uint8_t BLV_Rs485_Card_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = 0x01;
// uint8_t temp = 0;
uint8_t data[Dev_Card_RecvData_Len_Max];
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_CARD_INFO Rs485CardInfo;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLV_Rs485_Card_Check");
// uint8_t card_addr = SRAM_Read_Word(dev_addr+Dev_Addr);
// uint16_t crc_val = SRAM_Read_Word(data_addr+len-2);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLV_Rs485_Card_Check -- \r\n");
// uint16_t deal_len = len;
if(len > Dev_Card_RecvData_Len_Max)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_Card Check_Len Fail!");
return 0x01; //<2F><>У<EFBFBD><D0A3>
}
if(len < 0x07) {
return 0x01;
}
// uint8_t deal_buff[deal_len + 2];
memset(data,0,sizeof(Dev_Card_RecvData_Len_Max));
SRAM_Read_Buff(data, len, data_addr);
if((data[0] != 0x55) || (data[1] != 0x55) || (data[2] != 0xEE) || ((data[3] + 0x03) != len) \
|| (data[4] != 0x07) || (data[5] != 0x01) \
|| ((data[len-2] + (data[len-1]<<8)) != NetCRC16_2(&data[3], len - 5))
)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"У<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>!!");
return rev;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
// if(deal_buff[0] != 0x55)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>!!\r\n");
// return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
// }
// if(deal_buff[1] != 0x55)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>!!\r\n");
// return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
// }
// if(deal_buff[2] != 0xEE)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>!!\r\n");
// return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
// }
// if((deal_buff[3] + 0x03) != len)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD> ʵ<>ʳ<EFBFBD><CAB3><EFBFBD>:%d,<2C><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>:%d!!\r\n",len,temp);
// return rev; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// }
// if(deal_buff[4] != 0x07)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"У<><D0A3><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>:%d!!\r\n",temp);
// return rev; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// }
// if(crc_val == NetCRC16_2(&deal_buff[3],deal_len - 5))
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
if(Rs485CardInfo.DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_Card LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_RS485_CARD,BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Rs485CardInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Rs485CardInfo.DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485CardInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485CardInfo.DevOffline != Rs485CardInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CardInfo.DevOfflineLast = Rs485CardInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(data[6] == 0x01)
{
if(len >= 8)
{
if(BUS_Public.port == Active_Port) //2024-11-26
{
BLV_RS485_Card_Polling_Send(&BUS_Public,&Rs485CardInfo);
}
switch(data[7])
{
case 0x02: //<2F><><EFBFBD><EFBFBD> 2025-09-03 <20><>ȡ<EFBFBD><C8A1>M0<4D><30>
Rs485CardInfo.Rs485CardFlag = 0x01;
break;
case 0x01: //<2F><><EFBFBD><EFBFBD> 2025-09-03 <20><>ȡ<EFBFBD><C8A1>M1<4D><31>
Rs485CardInfo.Rs485CardFlag = 0x01;
break;
case 0x00: //<2F><><EFBFBD><EFBFBD>
Rs485CardInfo.Rs485CardFlag = 0x00;
break;
default: //<2F><><EFBFBD><EFBFBD> 2025-09-26 <20>ϱ<EFBFBD>δ֪״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Rs485CardInfo.Rs485CardFlag = 0x00;
break;
}
Rs485CardInfo.Rs485CardType = data[8];
/*2025-08-04 <20>Ե<EFBFBD>һ<EFBFBD><D2BB>ͨѶ<CDA8><D1B6>ȡ״̬Ϊ<CCAC><CEAA>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD>Ҳ<EFBFBD>ִ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>*/
if( (BUS_Public.port == Polling_Port) && (Rs485CardInfo.DevInitFlag == 0x00) )
{
Rs485CardInfo.DevInitFlag = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨѶ %d %d %d",DevActionGlobal.DevActionU64Cond.EleState,Rs485CardInfo.Rs485CardType,Rs485CardInfo.Rs485CardTypeLast);
Rs485CardInfo.Rs485CardFlagLast = Rs485CardInfo.Rs485CardFlag;
Rs485CardInfo.Rs485CardTypeLast = Rs485CardInfo.Rs485CardType;
}
}
}
else if(data[6] == 0x07)
{
Rs485CardInfo.DevPort_Flag = 0x00;
}
/*<2A>忨ȡ<E5BFA8><EFBFBD><E7B6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if( (Rs485CardInfo.DevInitFlag == 0x01)
&& ( (Rs485CardInfo.Rs485CardFlag != Rs485CardInfo.Rs485CardFlagLast)
|| (Rs485CardInfo.Rs485CardTypeLast != Rs485CardInfo.Rs485CardType) ) ) //<2F><>״̬<D7B4>Ƚ<EFBFBD>
{
Rs485CardInfo.Rs485CardFlagLast = Rs485CardInfo.Rs485CardFlag;
Rs485CardInfo.Rs485CardTypeLast = Rs485CardInfo.Rs485CardType;
DevActionGlobal.Rs485CardType = Rs485CardInfo.Rs485CardType;
DevActionGlobal.CardState = Rs485CardInfo.Rs485CardFlag;
if(Rs485CardInfo.Rs485CardFlag == 0x01)
{
SRAM_Write_Byte(0x01,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
}else {
SRAM_Write_Byte(0x02,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
}
SRAM_Write_Byte(Rs485CardInfo.Rs485CardType,SRAM_UDP_ELEReport_CardType); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_DW(SysTick_1ms,SRAM_UDP_ELEReport_CardState_Tick); //2026-01-20 <20><><EFBFBD>Ӳ忨״̬<D7B4>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
SRAM_Write_DW(SysTick_1ms,SRAM_UDP_ELEReport_CardType_Tick); //2026-01-20 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD>忨ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ仯<EFBFBD><EFBFBD>",data,len);
LOG_Device_COMM_ASK_TO_Reply_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,(SysTick_1ms - Rs485CardInfo.inquire_tick),data,len);
// switch(Rs485CardInfo.Rs485CardType) //<2F><>Ҫ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ִ<EFBFBD>в<EFBFBD>ͬ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
// {
// case CARDIDNOBODY: //<2F>޿<EFBFBD>
// case CARDIDM1:
// case CARDIDGUEST: //<2F><><EFBFBD><EFBFBD>
// case CARDIDWAITER: //<2F><><EFBFBD><EFBFBD>Ա
// case CARDIDMANAGER: //<2F><><EFBFBD><EFBFBD>
// case CARDIDENGINEER: //<2F><><EFBFBD><EFBFBD>
// case CARDIDHEADER: //<2F>ܹ<EFBFBD>
// DevActionGlobal.Devi = BUS_Public.DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
// break;
// }
// switch(Rs485CardInfo.Rs485CardType) //<2F><>Ҫ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ִ<EFBFBD>в<EFBFBD>ͬ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
// {
// case CARDIDNOBODY: //<2F>޿<EFBFBD>
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22>ο<EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x01; //<2F>ο<EFBFBD>
// break;
// case CARDIDM1:
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x02; //<2F><>Ƶ<EFBFBD><C6B5>
// break;
// case CARDIDGUEST: //<2F><><EFBFBD><EFBFBD>
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x03; //<2F><><EFBFBD>˿<EFBFBD>
// break;
// case CARDIDWAITER: //<2F><><EFBFBD><EFBFBD>Ա
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x04; //<2F><><EFBFBD><EFBFBD>Ա
// break;
// case CARDIDMANAGER: //<2F><><EFBFBD><EFBFBD>
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x05; //<2F><><EFBFBD><EFBFBD>
// break;
// case CARDIDENGINEER: //<2F><><EFBFBD><EFBFBD>
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>̿<EFBFBD><CCBF><EFBFBD><EFBFBD><EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x06; //<2F><><EFBFBD><EFBFBD>
// break;
// case CARDIDHEADER: //<2F>ܹ<EFBFBD>
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22>ܹܲ<DCB9><DCB2><EFBFBD>\r\n");
// Rs485CardInfo.Rs485CardAction = 0x07; //<2F>ܹ<EFBFBD>
// break;
// }
DevActionGlobal.Devi = BUS_Public.DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
if(Rs485CardInfo.Rs485CardFlag == 0x01)
{
if(Rs485CardInfo.Rs485CardType != 0x00)
{
Rs485CardInfo.Rs485CardAction = 0x02 + Rs485CardInfo.Rs485CardType; //
}else {
Rs485CardInfo.Rs485CardAction = 0x01; //<2F><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
}
}else {
Rs485CardInfo.Rs485CardAction = 0x02; //<2F>ο<EFBFBD><CEBF>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardInfo, sizeof(RS485_CARD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
rev = 0x00;
}
return rev;
}
/*<2A><>ȡ<EFBFBD>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
uint8_t Get_BLV485_CARD_Online_Status(uint32_t devaddr)
{
RS485_CARD_INFO Rs485CardInfo;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),devaddr+Dev_Privately);
if(Rs485CardInfo.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
/**
*@name <20>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BAAF>
*@para
* DevAddr <20><EFBFBD><E8B1B8>ַ
* DevInputLoop <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>Χ0~ServiceLoopValidNum
* DevInputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t Dev_Rs485_Card_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
RS485_CARD_INFO Rs485CardInfo; //<2F>忨ȡ<E5BFA8><C8A1><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
uint16_t dev_datalen;
uint8_t val_check;
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),DevAddr+Dev_Privately);
// CARDACTIONCONVER(Rs485CardInfo.Rs485CardCond) = DevInputType;
//
// if((0x01 == Rs485CardInfo.Rs485CardCond.CardGuestState)&&(0x03 == Rs485CardInfo.Rs485CardAction)){Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD>˿<EFBFBD><CBBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>"); Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x01 == Rs485CardInfo.Rs485CardCond.CardWaiterState)&&(0x04 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x01 == Rs485CardInfo.Rs485CardCond.CardManagerState)&&(0x05 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x01 == Rs485CardInfo.Rs485CardCond.CardEngineerState)&&(0x06 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD>̿<EFBFBD><CCBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x01 == Rs485CardInfo.Rs485CardCond.CardHeaderState)&&(0x07 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ܹܿ<DCB9><DCBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x01 == Rs485CardInfo.Rs485CardCond.CardIDM1State)&&(0x02 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><>Ƶ<EFBFBD><C6B5><EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x02 == Rs485CardInfo.Rs485CardCond.CardGuestState)&&(0x01 == Rs485CardInfo.Rs485CardAction)){Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ο<EFBFBD><CEBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>"); Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x02 == Rs485CardInfo.Rs485CardCond.CardWaiterState)&&(0x01 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ο<EFBFBD><CEBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x02 == Rs485CardInfo.Rs485CardCond.CardManagerState)&&(0x01 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ο<EFBFBD><CEBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x02 == Rs485CardInfo.Rs485CardCond.CardEngineerState)&&(0x01 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ο<EFBFBD><CEBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x02 == Rs485CardInfo.Rs485CardCond.CardHeaderState)&&(0x01 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ο<EFBFBD><CEBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
// else if((0x02 == Rs485CardInfo.Rs485CardCond.CardIDM1State)&&(0x01 == Rs485CardInfo.Rs485CardAction)) {Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>ο<EFBFBD><CEBF>ж<EFBFBD>ͨ<EFBFBD><CDA8>");Rs485CardInfo.Rs485CardAction = 0x00; Ret = CtrlValid;}
if(Rs485CardInfo.Rs485CardAction == DevInputType)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD>忨ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d ",Rs485CardInfo.Rs485CardAction);
Rs485CardInfo.Rs485CardAction = 0x00;
Ret = CtrlValid;
}
if(CtrlValid == Ret)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD>忨ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><E6A3AC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>У<EFBFBD><D0A3>ֵ ע<>һ<E2A3BA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б䶯ʱ<E4B6AF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),DevAddr+Dev_Privately);
SRAM_Write_Byte(0x00,DevAddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
dev_datalen = sizeof(RS485_CARD_INFO) + Dev_Privately;
val_check = Dev_CheckSum(DevAddr,dev_datalen);
SRAM_Write_Byte(val_check,DevAddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
return Ret;
}

View File

@@ -0,0 +1,63 @@
#ifndef _BLV_485_DEV_CARDFUN_H_
#define _BLV_485_DEV_CARDFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
//#define DEV_RS485_CARD 0x0A //<2F>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define CARDIDNOBODY 0x00 //<2F><><EFBFBD><EFBFBD>
#define CARDIDGUEST 0x01 //<2F><><EFBFBD><EFBFBD>
#define CARDIDWAITER 0x02 //<2F><><EFBFBD><EFBFBD>Ա
#define CARDIDMANAGER 0x03 //<2F><><EFBFBD><EFBFBD>
#define CARDIDENGINEER 0x04 //<2F><><EFBFBD><EFBFBD>
#define CARDIDHEADER 0x05 //<2F>ܹ<EFBFBD>
#define CARDIDM1 0x06 //<2F><>Ƶ<EFBFBD><C6B5>
#define CARD_Anonymous_Identity 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define CARD_Guest_Identity 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CARD_Staff_Identity 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
#define CARD_Identity_3 0x03 //<2F><><EFBFBD><EFBFBD>3
#define CARD_Identity_4 0x04 //<2F><><EFBFBD><EFBFBD>4
#define CARD_Identity_5 0x05 //<2F><><EFBFBD><EFBFBD>5
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// uint32_t Rs485CardID; //<2F>忨ȡ<E5BFA8><C8A1>ID
uint8_t Rs485CardAction; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Rs485CardFlag; //<2F>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD>־<EFBFBD><D6BE> <20><><EFBFBD><EFBFBD>
uint8_t Rs485CardFlagLast; //<2F><>һ<EFBFBD>β忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD>־λ
uint8_t Rs485CardTypeLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t Rs485CardType; //<2F><>״̬ <20><><EFBFBD><EFBFBD>
uint8_t Rs485CardoffFlag; //<2F>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD>
uint32_t Rs485CardoffTick; //<2F>ο<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//2025-09-03 ȡ<><C8A1><EFBFBD>忨ȡ<E5BFA8><C8A1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD> <20>ñ<EFBFBD><C3B1><EFBFBD>
//RS485_CARD_COND Rs485CardCond; //<2F>忨ȡ<E5BFA8><C8A1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
uint8_t DevPort; //2024-11-05
uint8_t DevPort_Last; //2024-11-05
uint8_t DevPort_Flag; //2024-11-05
uint8_t DevInitFlag; //2025-08-04 <20>Ե<EFBFBD>һ<EFBFBD><D2BB>ͨѶ<CDA8>Ķ<EFBFBD>ȡ״̬<D7B4><CCAC>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ִ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
uint32_t inquire_state_tick; //2025-08-20 <20><><EFBFBD>Ӳ<EFBFBD>ѯ״̬ʱ<CCAC><CAB1><EFBFBD><EFBFBD> - <20><>Ŀ2164
}__attribute__ ((__packed__))RS485_CARD_INFO; //485<38><35><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLV_RS485_Card_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLV_RS485_Card_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint8_t Get_BLV485_CARD_Online_Status(uint32_t devaddr);
#endif

View File

@@ -0,0 +1,483 @@
/**
******************************************************************************
* @file BLV_485_Dev_CardStateFun.c
* @author BLW RCU development Team
* @version YHF
* @date 2022<32><32>11<31><31>01<30><31>
* @brief
* <20>忨״̬<D7B4><CCAC>ѯ<EFBFBD>ܱ<EFBFBD>
* <20><><EFBFBD><EFBFBD><EBA3BA>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "APP_SwitchCtrl.h"
#include <string.h>
#include "BLV_485_Protocol.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "CH57x_common.h"
#include "check_fun.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "DBG.h"
#include "Log_api.h"
#include "includes.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ʼ*/
#include "BLV_485_Dev_CardStateFun.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_CARDSTATE_INFO *Rs485CardStateInfo); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_CardState_Flag, BLV_485_Dev_CardStateA_Init) //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_CardState_Flag, BLV_485_Dev_CardStateB_Init) //<2F><>ѯ<EFBFBD>˿<EFBFBD>
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t BLW_CardState_CycleDis(uint32_t DevAdd);
void BLW_CardState_Send(uint8_t port); //<2F><>Э<EFBFBD><D0AD>
void BLW_CardState_New_Send(uint8_t port); //<2F><>Э<EFBFBD><D0AD>
/*******************************************************************************
* @name : <20>忨״̬ͬ<CCAC><CDAC><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
* @para :
* DataLen :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Data<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
void BLW_RS485_CardState_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_CARDSTATE_INFO Rs485CardStateInfo; //<2F>忨״̬ͬ<CCAC><CDAC><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardStateInfo,0,sizeof(RS485_CARDSTATE_INFO));
BUS_Public.addr = Data[1]; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0xC8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
Rs485CardStateInfo.CardState_SN = TIME_MAX;
switch(Data[7])
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485CardStateInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485CardStateInfo);break;
}
switch(Data[2])
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* Function Name : BLW_RS485_CardState_For_Logic_Init
* Description : <20>忨״̬ͬ<CCAC><CDAC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_CardState_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_CARDSTATE_INFO Rs485CardStateInfo; //<2F>忨״̬ͬ<CCAC><CDAC><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardStateInfo,0,sizeof(RS485_CARDSTATE_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x64; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.Protocol = dev_info->version;
Rs485CardStateInfo.CardState_SN = TIME_MAX;
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485CardStateInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485CardStateInfo);break;
default:
break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
default:
break;
}
}
uint8_t BLW_Rs485_CardState_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
uint8_t ret = 0x01;
uint8_t data[6];
uint8_t keepflag = 0x00;
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_CARDSTATE_INFO Rs485CardStateInfo; //<2F>忨״̬ͬ<CCAC><CDAC><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(DataLen > 6)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"CardState Recv Lens Over Max!!");
return ret; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
if((data[1] != 0x08)||(data[DataLen - 1] != SOR_CRC(data, DataLen-1))) //ƥ<><EFBFBD>ص<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Not CardStateFun Data<74><61>DevAdd:%d,len:%d",BUS_Public.addr,DataLen);
return ret; //<2F><><EFBFBD>Ǿ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
if(data[DataLen - 1] == SOR_CRC(data, DataLen-1)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"У<><D0A3>ͨ<EFBFBD><CDA8> DevAdd:%d,len:%d\r\n",data[0],DataLen);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO),DevAdd+Dev_Privately);
switch(data[1])
{
case 0x08:
ret = 0x00;
break;
default:
break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,DataLen);
if(keepflag==0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardStateInfo, sizeof(RS485_CARDSTATE_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO),DevAdd+Dev_Privately);
}
}
return ret;
}
void BLV_485_Dev_CardStateA_Init(Device_Public_Information_G *BUS_Public, RS485_CARDSTATE_INFO *Rs485CardStateInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLW_CardState_CycleDis;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_CardState_Check;
}
void BLV_485_Dev_CardStateB_Init(Device_Public_Information_G *BUS_Public, RS485_CARDSTATE_INFO *Rs485CardStateInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLW_CardState_CycleDis;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_CardState_Check;
}
uint8_t BLW_CardState_CycleDis(uint32_t DevAdd)
{
uint8_t temp_flag = 0x00;
Device_Public_Information_G BUS_Public;
RS485_CARDSTATE_INFO Rs485CardStateInfo; //<2F>忨״̬ͬ<CCAC><CDAC><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = RS485OCCUPYNOTIME;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevActionGlobal.DevActionU64Cond.EleState == 0x01) //<2F>
{
Rs485CardStateInfo.CardState = 0x01;
}
else if(DevActionGlobal.DevActionU64Cond.EleState == 0x02) //<2F>ο<EFBFBD>
{
Rs485CardStateInfo.CardState = 0x02;
}
if(Rs485CardStateInfo.CardStateLast != Rs485CardStateInfo.CardState)
{
Rs485CardStateInfo.CardStateLast = Rs485CardStateInfo.CardState;
Rs485CardStateInfo.CardAction = 0x01;
}
if(Rs485CardStateInfo.SleepFlag != DevActionGlobal.Service_16) //2024-12-09
{
Rs485CardStateInfo.SleepFlag = DevActionGlobal.Service_16;
Rs485CardStateInfo.CardAction = 0x01;
}
//<2F><>Э<EFBFBD><D0AD><EFBFBD>
if((Rs485CardStateInfo.CardAction == 0x01) && (Rs485CardStateInfo.CardState_SN > 0))
{
BLW_CardState_Send(BUS_Public.port);
Rs485CardStateInfo.CardState_SN--;
if(Rs485CardStateInfo.CardState_SN == 0x00)
{
Rs485CardStateInfo.CardState_SN = TIME_MAX;
Rs485CardStateInfo.CardAction = 0x02;
}
Rs485CardStateInfo.CardState_Tick = SysTick_1s;
Ret = RS485OCCUPYTIME;
temp_flag = 0x01;
}
//<2F><>Э<EFBFBD><D0AD><EFBFBD>
else if((Rs485CardStateInfo.CardAction == 0x02) && (Rs485CardStateInfo.CardState_SN > 0))
{
BLW_CardState_New_Send(BUS_Public.port);
Rs485CardStateInfo.CardState_SN--;
if(Rs485CardStateInfo.CardState_SN == 0x00)
{
Rs485CardStateInfo.CardState_SN = TIME_MAX;
Rs485CardStateInfo.CardAction = 0x03;
}
Rs485CardStateInfo.CardState_Tick = SysTick_1s;
Ret = RS485OCCUPYTIME;
temp_flag = 0x01;
}
//<2F><>Э<EFBFBD><EFBFBD>ڹ㲥
if((SysTick_1s - Rs485CardStateInfo.CardState_Tick > 20) && (Rs485CardStateInfo.CardAction == 0x03))
{
Rs485CardStateInfo.CardState_Tick = SysTick_1s;
BLW_CardState_Send(BUS_Public.port);
Rs485CardStateInfo.CardAction = 0x04; //<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>ڹ㲥
Ret = RS485OCCUPYTIME;
temp_flag = 0x01;
}
//<2F><>Э<EFBFBD><EFBFBD>ڹ㲥
if((SysTick_1s - Rs485CardStateInfo.CardState_Tick > 20) && (Rs485CardStateInfo.CardAction == 0x04))
{
Rs485CardStateInfo.CardState_Tick = SysTick_1s;
BLW_CardState_New_Send(BUS_Public.port);
Rs485CardStateInfo.CardAction = 0x03; //<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>ڹ㲥
Ret = RS485OCCUPYTIME;
temp_flag = 0x01;
}
if(temp_flag != 0x00)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardStateInfo, sizeof(RS485_CARDSTATE_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO),DevAdd+Dev_Privately);
}
return Ret;
}
//<2F><>Э<EFBFBD><D0AD>
void BLW_CardState_Send(uint8_t port)
{
uint8_t sendbuff[5];
sendbuff[0] = 0xFF;
sendbuff[1] = 0x08;
if(DevActionGlobal.DevActionU64Cond.EleState==0x02)
{
sendbuff[2] = 0x00; //<2F>ο<EFBFBD><CEBF>ϵ<EFBFBD>
}
else if(DevActionGlobal.DevActionU64Cond.EleState==0x01)
{
sendbuff[2] = 0x01; //<2F>忨ȡ<E5BFA8><C8A1>
}
sendbuff[3] = 0x00;
sendbuff[4] = SOR_CRC(sendbuff,4);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
MCU485_SendString(port,sendbuff,5);
}
//<2F><>Э<EFBFBD><D0AD>
void BLW_CardState_New_Send(uint8_t port)
{
uint8_t sendbuff[10];
sendbuff[0] = 0xFF;
sendbuff[1] = 0x08;
sendbuff[2] = 0x0A;
if(DevActionGlobal.DevActionU64Cond.EleState==0x02)
{
sendbuff[3] = 0x00; //<2F>ο<EFBFBD><CEBF>ϵ<EFBFBD>
}
else if(DevActionGlobal.DevActionU64Cond.EleState==0x01)
{
sendbuff[3] = 0x01; //<2F>忨ȡ<E5BFA8><C8A1>
}
SRAM_Read_Buff(&sendbuff[4],1,SRAM_Register_Start_ADDRESS + Register_RoomRent_OFFSET); //<2F><>̬
sendbuff[5] = 0x00;
sendbuff[6] = 0x00;
if( DevActionGlobal.SleepMode_State == 0x01 ) //2024-05-30
{
sendbuff[7] = 0x04;
}
else
{
sendbuff[7] = 0x00;//SRAM_Read_Byte(SRAM_Global_Sense_No); //ģʽ
}
NetCRC16(sendbuff,10); //CRCУ<43><D0A3>
MCU485_SendString(port,sendbuff,10);
}
void BLW_RS485_CardState_AddTo_ActivePort(void)
{
Device_Public_Information_G BUS_Public;
RS485_CARDSTATE_INFO Rs485CardStateInfo; //<2F>忨״̬ͬ<CCAC><CDAC><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardStateInfo,0,sizeof(RS485_CARDSTATE_INFO));
BUS_Public.addr = 0x00; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Dev_RS485_CardState; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0xC8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
Rs485CardStateInfo.CardState_SN = TIME_MAX;
BUS_Public.Protocol = 0x01;
BUS_Public.port = Active_Port;
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485CardStateInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485CardStateInfo);break;
default:
break;
}
switch(BUS_Public.port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
default:
break;
}
}
void BLW_RS485_CardState_AddTo_PollingPort(void)
{
Device_Public_Information_G BUS_Public;
RS485_CARDSTATE_INFO Rs485CardStateInfo; //<2F>忨״̬ͬ<CCAC><CDAC><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardStateInfo,0,sizeof(RS485_CARDSTATE_INFO));
BUS_Public.addr = 0x01; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Dev_RS485_CardState; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0xC8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
Rs485CardStateInfo.CardState_SN = TIME_MAX;
BUS_Public.Protocol = 0x02;
BUS_Public.port = Polling_Port;
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CardStateInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485CardStateInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485CardStateInfo);break;
default:
break;
}
switch(BUS_Public.port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CardStateInfo,sizeof(RS485_CARDSTATE_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
default:
break;
}
}

View File

@@ -0,0 +1,41 @@
#ifndef _BLV_485_DEV_CARDSTATE_H_
#define _BLV_485_DEV_CARDSTATE_H_
#include "includes.h"
#define TIME_MAX 0x02 //<2F>仯-<2D><EFBFBD><E3B2A5><EFBFBD><EFBFBD>
typedef struct
{
uint8_t CardState; //ȡ<><C8A1>״̬
uint8_t CardStateLast;
uint8_t CardAction;
uint8_t CardState_SN; //<2F><><EFBFBD><EFBFBD>
uint32_t CardState_Tick; //ʱ<><CAB1><EFBFBD><EFBFBD>
uint8_t SleepFlag; //˯<>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_CARDSTATE_INFO; //<2F>忨״̬ͬ<CCAC><CDAC>
void BLW_RS485_CardState_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_CardState_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void BLV_485_Dev_CardStateA_Init(Device_Public_Information_G *BUS_Public, RS485_CARDSTATE_INFO *Rs485CardStateInfo);
void BLV_485_Dev_CardStateB_Init(Device_Public_Information_G *BUS_Public, RS485_CARDSTATE_INFO *Rs485CardStateInfo);
void BLW_RS485_CardState_AddTo_ActivePort(void);
void BLW_RS485_CardState_AddTo_PollingPort(void);
#endif

View File

@@ -0,0 +1,555 @@
/**
******************************************************************************
* @file BLV_485_Dev_CJiaLockFun.c
* @author BLW RCU development Team <09>ֿ<EFBFBD><D6BF><EFBFBD>
* @version V1.0.0
* @date 2022<32><32>7<EFBFBD><37>8<EFBFBD><38>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
1.<2E><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4>ѿ<EFBFBD><D1BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>1<EFBFBD><31><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD>
2.<2E><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3.֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_ChuangJiaLockFun.h"
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention None
*******************************************************************************/
void ChuangJia_RS485_WxLockFun_Init(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFO *Rs485WxLockInfo)
{
BUS_Public->polling_cf = (uint32_t)&ChuangJia_WxLock_Polling_Ctrl; //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
BUS_Public->processing_cf = (uint32_t)&ChuangJia_WxLock_Data_Processing; //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>BUS_Public.wait_time<6D><65>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* @retval RS485OCCUPYTIME--485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
* @attention None
*******************************************************************************/
uint8_t ChuangJia_WxLock_Polling_Ctrl(uint32_t dev_addr)
{
uint8_t i, temp = 0, flag = 0; //ѭ<><D1AD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><E3A3A9><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
RS485_WxLock_INFO Rs485WxLockInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>нṹ<D0BD><E1B9B9>
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( Rs485WxLockInfo.WeixinCtrlFlag == 0x01 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λΪ1
{
if(SysTick_1ms >= Rs485WxLockInfo.WeixinCycleCnt) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰʱ<C7B0><EFBFBD><E4B3AC>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><CEB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>5sû<73>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><CEB7>ͣ<EFBFBD>
{
Rs485WxLockInfo.WeixinCycleCnt = SysTick_1ms + CJ_LOCKCYCLEWAITTIMEOUT; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>=<3D><>ǰʱ<C7B0><CAB1>+5s
if(Rs485WxLockInfo.WeixinCtrlSendCnt != 0x00) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485WxLockInfo.WeixinCtrlSendCnt--; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ݼ<EFBFBD>
}
else if(Rs485WxLockInfo.WeixinCtrlSendCnt == 0x00) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>Ϊ0
{
Rs485WxLockInfo.WeixinCtrlFlag = 0; //<2F>رմ<D8B1><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
}
if(Rs485WxLockInfo.WeixinCtrlState == 0x01) //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
{
Rs485WxLockInfo.CJ_control_flag |= CJ_UNLOCKING_FLAG; //<2F><><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if(Rs485WxLockInfo.WeixinCtrlState == 0x02) //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3>߼<EFBFBD><DFBC>أ<EFBFBD>
{
Rs485WxLockInfo.CJ_control_flag |= CJ_QUERY_STATUS_FLAG; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
}
for(i = 0; i < CJ_COMMAND_MAX; i++) //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
temp = 1 << i; //ÿһλ<D2BB><CEBB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Rs485WxLockInfo.CJ_control_flag & temp) //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
break;
}
switch(temp)
{
case CJ_QUERY_STATUS_FLAG: //<2F><>ѯ״̬
ChuangJia_Query_Status(&BUS_Public,&Rs485WxLockInfo);
break;
case CJ_UNLOCKING_FLAG: //<2F><><EFBFBD><EFBFBD>
ChuangJia_Ctrl_Unlock(&BUS_Public,&Rs485WxLockInfo);
break;
case CJ_SET_CLOCK_FLAG: //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ChuangJia_Set_Clock(&BUS_Public,&Rs485WxLockInfo);
break;
case CJ_LOCK_TIMER_FLAG: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ChuangJia_Lock_Timer(&BUS_Public,&Rs485WxLockInfo);
break;
case CJ_SET_CONNECT_FLAG: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ChuangJia_Set_Connect(&BUS_Public,&Rs485WxLockInfo);
break;
case CJ_READ_ROOM_FLAG: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
ChuangJia_Read_Room(&BUS_Public,&Rs485WxLockInfo);
break;
case CJ_READ_GATEWAY_FLAG: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾
ChuangJia_Read_Gateway(&BUS_Public,&Rs485WxLockInfo);
break;
}
flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
}
}
if(flag == 1)
{
BLV_Communication_Record(&Rs485WxLockInfo.comm_record,0x01,0x00); //ͨѶͳ<D1B6><CDB3>
if(Rs485WxLockInfo.DevSendCnt > WxLockCtrlSendMax) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(Rs485WxLockInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485WxLockInfo.DevOffline != Rs485WxLockInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485WxLockInfo.DevOfflineLast = Rs485WxLockInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485WxLockInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo,
sizeof(RS485_WxLock_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ˽<D6B7><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return RS485OCCUPYTIME;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <09><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 0-<2D>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>1-<2D><><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention None
*******************************************************************************/
uint8_t ChuangJia_WxLock_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t i,data[CJ_RECEIVE_MAX_LEN]; //<2F>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>42<34>ֽڣ<D6BD>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
RS485_WxLock_INFO Rs485WxLockInfo; //΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
SRAM_Read_Buff(data, len, data_addr); //<2F><>485<38><35><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Rs485WxLockInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.DevSendCnt = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
Rs485WxLockInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485WxLockInfo.DevOffline != Rs485WxLockInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485WxLockInfo.DevOfflineLast = Rs485WxLockInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485WxLockInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
if(Dev_CheckSum(data_addr,len) != 0x00) //<2F><><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><E9B2BB>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>");
return 1;
}
if(len > CJ_RECEIVE_MAX_LEN) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD>");
return 1;
}
if(data[CJ_OUR_ADD] != 0x01) //<2F><><EFBFBD>͵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return 1;
}
if(data[CJ_DEVICE_TYPE] != CJ_TYPE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2>ԣ<EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>");
return 1;
}
if(data[CJ_RECE_ADD] != 0x00) //<2F><><EFBFBD>յ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return 1;
}
if(Rs485WxLockInfo.DevOffline == DEV_IS_OFFLINE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
switch(data[CJ_COMMAND]) //<2F><><EFBFBD>ڲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
{
case CJ_QUERY_STATUS: //<2F><>ѯ״̬
Rs485WxLockInfo.CJ_connection_status = data[7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E92<39><32><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_reality_lock = data[8]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>״̬
Rs485WxLockInfo.CJ_status = data[9]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_kwh = data[10]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_signal = data[11]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>
for(i = 0; i < 6; i++) //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>MAC<41><43>С<EFBFBD>ˣ<EFBFBD>
{
Rs485WxLockInfo.CJ_lock_mac[i] = data[i+12];
}
for(i = 0; i < 23; i++) //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>С<EFBFBD><D0A1>ģʽ<C4A3><CABD>
{
Rs485WxLockInfo.CJ_firmware_version[i] = data[i+18];
}
Rs485WxLockInfo.CJ_identity = data[41]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_QUERY_STATUS_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_UNLOCKING: //<2F><><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_connection_status = data[7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E92<39><32><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_reality_lock = data[8]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>״̬
Rs485WxLockInfo.CJ_status = data[9]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_kwh = data[10]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_signal = data[11]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>
for(i = 0; i < 6; i++) //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>MAC<41><43>С<EFBFBD>ˣ<EFBFBD>
{
Rs485WxLockInfo.CJ_lock_mac[i] = data[i+12];
}
for(i = 0; i < 23; i++) //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>С<EFBFBD><D0A1>ģʽ<C4A3><CABD>
{
Rs485WxLockInfo.CJ_firmware_version[i] = data[i+18];
}
Rs485WxLockInfo.CJ_identity = data[41]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_UNLOCKING_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_SET_CLOCK: //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Rs485WxLockInfo.CJ_clock_flag = data[7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>״̬
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_SET_CLOCK_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_LOCK_TIMER: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Rs485WxLockInfo.CJ_year = (uint16_t)(data[7]<<8)|data[8]; //<2F><>
Rs485WxLockInfo.CJ_month = data[9]; //<2F><>
Rs485WxLockInfo.CJ_day = data[10]; //<2F><>
Rs485WxLockInfo.CJ_hour = data[11]; //ʱ
Rs485WxLockInfo.CJ_min = data[12]; //<2F><>
Rs485WxLockInfo.CJ_sec = data[13]; //<2F><>
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_LOCK_TIMER_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_SET_CONNECT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_connect_flag = data[7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_SET_CONNECT_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_READ_ROOM: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
for(i = 0; i < 4; i++)
{
Rs485WxLockInfo.CJ_room[i] = data[i+7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_READ_ROOM_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_READ_GATEWAY: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾
for(i = 0; i < 14; i++)
{
Rs485WxLockInfo.CJ_read_gateway[i] = data[i+7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾<D8B0><E6B1BE>Ϣ
}
Rs485WxLockInfo.CJ_control_flag &= ~(CJ_READ_GATEWAY_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
break;
case CJ_CARD_UNLOCKING: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_connection_status = data[7]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E92<39><32><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_reality_lock = data[8]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>״̬
Rs485WxLockInfo.CJ_status = data[9]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>״̬
Rs485WxLockInfo.CJ_kwh = data[10]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485WxLockInfo.CJ_signal = data[11]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>
for(i = 0; i < 6; i++) //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD>MAC<41><43>С<EFBFBD>ˣ<EFBFBD>
{
Rs485WxLockInfo.CJ_lock_mac[i] = data[i+12];
}
for(i = 0; i < 23; i++) //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>С<EFBFBD><D0A1>ģʽ<C4A3><CABD>
{
Rs485WxLockInfo.CJ_firmware_version[i] = data[i+18];
}
Rs485WxLockInfo.CJ_identity = data[41]; //<2F><><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public.port, BUS_Public.baud, data, 42); //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
break;
}
if(data[CJ_COMMAND] == CJ_CARD_UNLOCKING) //ֻ<>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻظ<CDBB><D8B8><EFBFBD><EFBFBD><EFBFBD>
{
i = data[CJ_OUR_ADD]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
data[CJ_OUR_ADD] = data[CJ_RECE_ADD]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>ַ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
data[CJ_RECE_ADD] = i; //<2F>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 7; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ̶<DDB9>Ϊ7
data[CJ_CHECK] = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
data[CJ_CHECK] = CheckSum(data, 7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public.port, data, 7); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
}
Rs485WxLockInfo.WeixinCtrlFlag = 0; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
Rs485WxLockInfo.WeixinCycleCnt = 0; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´η<C2B4><CEB7><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>ʱ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo,
sizeof(RS485_WxLock_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately); //<2F><>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
return 0;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
*******************************************************************************/
void ChuangJia_Query_Status(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>7<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x07; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_QUERY_STATUS; //<2F><>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 7); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 7); //<2F><>¼<EFBFBD><C2BC>ѯ״̬<D7B4><CCAC>־
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void ChuangJia_Ctrl_Unlock(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>7<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x07; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_UNLOCKING; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 7); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 7); //<2F><>¼<EFBFBD><C2BC><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־
}
uint8_t CJ_Set_Timer[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>CJ_Set_Timer<65><72><EFBFBD>
*******************************************************************************/
void ChuangJia_Set_Clock(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[14]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>7<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F>ط<EFBFBD>
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x0E; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_SET_CLOCK; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_PARAM] = CJ_Set_Timer[0]; //ȡ<><C8A1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ƣ<EFBFBD>
data[CJ_PARAM+1] = CJ_Set_Timer[1]; //ȡ<><C8A1><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ƣ<EFBFBD>
data[CJ_PARAM+2] = CJ_Set_Timer[2]; //<2F><>
data[CJ_PARAM+3] = CJ_Set_Timer[3]; //<2F><>
data[CJ_PARAM+4] = CJ_Set_Timer[4]; //ʱ
data[CJ_PARAM+5] = CJ_Set_Timer[5]; //<2F><>
data[CJ_PARAM+6] = CJ_Set_Timer[6]; //<2F><>
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 14); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 14); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 14); //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>־
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<C8A1><EFBFBD><E4BAAF>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
*******************************************************************************/
void ChuangJia_Lock_Timer(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>7<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F>ط<EFBFBD>
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x07; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_LOCK_TIMER; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 7); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 7); //<2F><>¼<EFBFBD><C2BC>ȡʱ<C8A1><CAB1><EFBFBD><EFBFBD>־
}
uint8_t CJ_Set_Connect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>Ʋ<EFBFBD><C6B2><EFBFBD>
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD>𴴼<EFBFBD><F0B4B4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void ChuangJia_Set_Connect(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[8]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>8<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F>ط<EFBFBD>
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x08; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_SET_CONNECT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_PARAM] = CJ_Set_Connect; //<2F><><EFBFBD>Կ<EFBFBD><D4BF>Ʋ<EFBFBD><C6B2><EFBFBD>
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 8); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 8); //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD>𴴼<EFBFBD><F0B4B4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
*******************************************************************************/
void ChuangJia_Read_Room(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>7<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F>ط<EFBFBD>
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x07; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_READ_ROOM; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 7); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 7); //<2F><>¼<EFBFBD><C2BC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾<D8B0><E6B1BE><EFBFBD><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485WxLockInfo ΢<><CEA2><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention <09><><EFBFBD>𴴼<EFBFBD><F0B4B4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾
*******************************************************************************/
void ChuangJia_Read_Gateway(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
uint8_t data[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>7<EFBFBD>ֽ<EFBFBD>
memset(data,0,sizeof(data)); //<2F><>ʼ<EFBFBD><CABC>Ϊ0
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
data[CJ_OUR_ADD] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(Rs485WxLockInfo->DevSendCnt == 0x00) //<2F>׷<EFBFBD>
{
Rs485WxLockInfo->CJ_send_sn++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>
if(Rs485WxLockInfo->CJ_send_sn > 15) Rs485WxLockInfo->CJ_send_sn = 1;
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F>ط<EFBFBD>
{
data[CJ_SEND_TYPE] |= (Rs485WxLockInfo->CJ_send_sn & 0x0F); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[CJ_SEND_TYPE] |= CJ_RETRY_FLAG;
}
data[CJ_DEVICE_TYPE] = 0x06; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data[CJ_RECE_ADD] = 0x01; //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
data[CJ_DATA_LEN] = 0x07; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
data[CJ_COMMAND] = CJ_READ_GATEWAY; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾
data[CJ_CHECK] = 0x00; //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><D6B5>
data[CJ_CHECK] = CheckSum(data, 7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 7); //RCUͨ<55><CDA8>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
LOG_Device_COMM_Send_Control_Record(BUS_Public->port, BUS_Public->baud, data, 7); //<2F><>¼<EFBFBD><C2BC>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾<D8B0><E6B1BE>־
}

View File

@@ -0,0 +1,58 @@
#ifndef _BLV_485_DEV_CHUANGJIALOCKFUN_H_
#define _BLV_485_DEV_CHUANGJIALOCKFUN_H_
#include "BLV_485_Dev_WeixinLockFun.h"
#define CJ_LOCKCYCLEWAITTIMEOUT 5000 //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ʱ<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
#define CJ_TYPE 0x06//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define CJ_COMMAND_MAX 8 //8<>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CJ_RECEIVE_MAX_LEN 42 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define CJ_RETRY_FLAG 0x40//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־
#define CJ_NO_ACTION 0x00 //<2F>޶<EFBFBD><DEB6><EFBFBD>
#define CJ_QUERY_STATUS 0x01 //<2F><>ѯ״̬
#define CJ_UNLOCKING 0x02 //<2F><><EFBFBD><EFBFBD>
#define CJ_SET_CLOCK 0x03 //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define CJ_LOCK_TIMER 0x04 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define CJ_SET_CONNECT 0x05 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CJ_READ_ROOM 0x06 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
#define CJ_READ_GATEWAY 0x07 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾
#define CJ_CARD_UNLOCKING 0x08 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CJ_QUERY_STATUS_FLAG 0x01 //<2F><>ѯ״̬<D7B4><CCAC>־λ
#define CJ_UNLOCKING_FLAG 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
#define CJ_SET_CLOCK_FLAG 0x04 //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӱ<EFBFBD>־λ
#define CJ_LOCK_TIMER_FLAG 0x08 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>־λ
#define CJ_SET_CONNECT_FLAG 0x10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD>־λ
#define CJ_READ_ROOM_FLAG 0x20 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ű<EFBFBD>־λ
#define CJ_READ_GATEWAY_FLAG 0x40 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾<D8B0><E6B1BE>־λ
#define CJ_CARD_UNLOCKING_FLAG 0x80 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ*/
typedef enum
{
CJ_OUR_ADD = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
CJ_SEND_TYPE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CJ_DEVICE_TYPE, //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
CJ_RECE_ADD, //<2F>շ<EFBFBD><D5B7><EFBFBD>ַ
CJ_DATA_LEN, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CJ_CHECK, //У<><D0A3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
CJ_COMMAND, //<2F><><EFBFBD><EFBFBD>
CJ_PARAM, //<2F><><EFBFBD><EFBFBD>
}CHUANGJIA_ORDER_FORMAT;
extern uint8_t CJ_Set_Timer[7]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
extern uint8_t CJ_Set_Connect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>Ʋ<EFBFBD><C6B2><EFBFBD>
void ChuangJia_RS485_WxLockFun_Init(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFO *Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
uint8_t ChuangJia_WxLock_Polling_Ctrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
uint8_t ChuangJia_WxLock_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChuangJia_Query_Status(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
void ChuangJia_Ctrl_Unlock(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChuangJia_Set_Clock(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
void ChuangJia_Lock_Timer(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<C8A1><EFBFBD><E4BAAF>
void ChuangJia_Set_Connect(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
void ChuangJia_Read_Room(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>
void ChuangJia_Read_Gateway(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo); //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ذ汾<D8B0><E6B1BE><EFBFBD><EFBFBD>
#endif

View File

@@ -0,0 +1,689 @@
/**
******************************************************************************
* @file Blv_485_Dev_DOOYACurtain.c
* @author BLW RCU development Team
* @version V1.0.0
* @date 2022<32><32>07<30><37>20<32><30>
* @brief 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
******************************************************************************
*/
#include "Blv_485_Dev_CurtainFun.h"
#include "includes.h"
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_Dev_Action.h"
#include "BLV_All_Dev_Init.h"
//<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_DOOYA_Curtain_Flag, BLV_485_Dev_DOOYACurtain_Init) //<2F><><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_BinShen_Curtain_Flag, BLV_485_Dev_BinShen_Curtain_Init) //<2F><><EFBFBD><EFBFBD><EAB4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLV_485_Dev_DOOYACurtain_Init(Device_Public_Information_G *BUS_Public, RS485_Cur_INFO *Rs485CurtainInfo);
uint8_t BLV_RS485_DOOYACurtain_Cycle_Dis(uint32_t dev_addr);
uint8_t BLV_RS485_DOOYACurtain_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_485_Curtain_Control(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state);
uint16_t DYCurtain_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
void Cur_ConDataSend(uint8_t port,uint8_t data,uint8_t dev_addr,uint8_t commcod);
void Cur_ConDataSend2(uint8_t port,uint8_t data,uint8_t data2,uint8_t dev_addr,uint8_t commcod);
void Cur_ReqDataSend(uint8_t port,uint8_t dev_addr,uint8_t commcod);
void BLW_RS485_Curtain_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
/*******************************************************************************
* Function Name : BLV_485_Dev_Curtain_Data_Init
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>
* Input :
DataLen : <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
*Data : <20><><EFBFBD>ݵ<EFBFBD>ַ
len :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :void
*******************************************************************************/
void BLV_485_Dev_Curtain_Data_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CurtainInfo,0,sizeof(RS485_Cur_INFO));
BUS_Public.addr = Data[1]; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_485_Curtain_Control;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = DYCurtain_Loop_State;
Rs485CurtainInfo.read_flag=0x01;
Rs485CurtainInfo.DevOffline = Rs485CurtainInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(Data[7])
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CurtainInfo);break; //
}
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO));
Act485_Info.device_num += 1;
}
/*******************************************************************************
* Function Name : BLW_RS485_Curtain_For_Logic_Init
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_Curtain_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CurtainInfo,0,sizeof(RS485_Cur_INFO));
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud;; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = dev_info->retry; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = dev_info->writ_time; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_485_Curtain_Control;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = DYCurtain_Loop_State;
Rs485CurtainInfo.reverse_enable = dev_info->priproperty[0]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> 2025-08-14
if(Rs485CurtainInfo.reverse_enable != 0x01)
{
Rs485CurtainInfo.reverse_enable = 0x00;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>ʹ<EFBFBD><CAB9>:%d",Rs485CurtainInfo.reverse_enable);
Rs485CurtainInfo.DevOffline = Rs485CurtainInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CurtainInfo);break;
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CurtainInfo);break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO));
BUS485_Info.device_num += 1;
break;
}
}
/*******************************************************************************
* Function Name : BLV_485_Dev_DOOYACurtain_Init
* Description : <20><><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
* Input :
* Return :void
*******************************************************************************/
void BLV_485_Dev_DOOYACurtain_Init(Device_Public_Information_G *BUS_Public, RS485_Cur_INFO *Rs485CurtainInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_DOOYACurtain_Cycle_Dis;
BUS_Public->processing_cf = (uint32_t)&BLV_RS485_DOOYACurtain_Check;
}
/*******************************************************************************
* Function Name : BLV_RS485_DOOYACurtain_Cycle_Dis
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>ַ
* Return : Ret==RS485OCCUPYTIME
*******************************************************************************/
uint8_t BLV_RS485_DOOYACurtain_Cycle_Dis(uint32_t devaddr)
{
uint8_t Ret = RS485OCCUPYNOTIME;
uint8_t tempfalg = 0x00;
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CurtainInfo,0,sizeof(RS485_Cur_INFO));
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
uint8_t dev_addr=SRAM_Read_Byte(devaddr+Dev_Addr);
uint8_t port = SRAM_Read_Byte(devaddr+Dev_port);
if(Rs485CurtainInfo.request_flag==0x01&&Rs485CurtainInfo.DevSendCnt<3)
{
Cur_ReqDataSend(port,dev_addr,0x02);
Rs485CurtainInfo.DevSendCnt++;
tempfalg = 0x01;
}
if(Rs485CurtainInfo.read_flag==0x01&&Rs485CurtainInfo.DevSendCnt<3)
{
Cur_ConDataSend2(port,0x02,0x01,dev_addr,0x01);
Rs485CurtainInfo.DevSendCnt++;
tempfalg = 0x01;
}
switch(Rs485CurtainInfo.control_flag)
{
case 0x01:
case 0x02:
case 0x04:
case 0x06:
Cur_ConDataSend(port,Rs485CurtainInfo.DooYaCon_data.DATE,dev_addr,0x03);
Rs485CurtainInfo.DevSendCnt++;
Ret = RS485OCCUPYTIME;
tempfalg = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d SN:%d",Rs485CurtainInfo.DooYaCon_data.DATE,Rs485CurtainInfo.DevSendCnt);
break;
case 0x05:
Cur_ConDataSend2(port,Rs485CurtainInfo.DooYaCon_data.DATE,Rs485CurtainInfo.DooYaCon_data.DATE1,dev_addr,0x03);
Rs485CurtainInfo.DevSendCnt++;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d SN:%d",Rs485CurtainInfo.DooYaCon_data.DATE,Rs485CurtainInfo.DevSendCnt);
Ret = RS485OCCUPYTIME;
tempfalg = 0x01;
break;
}
if(Rs485CurtainInfo.DevSendCnt>3)
{
if(Rs485CurtainInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_485_Curtain LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_RS485_CURTAIN, BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485CurtainInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
Rs485CurtainInfo.read_flag=0x00;
Rs485CurtainInfo.control_flag=0x00;
Rs485CurtainInfo.request_flag=0x00;
Rs485CurtainInfo.DevSendCnt=0x00;
if(Rs485CurtainInfo.DevOffline != Rs485CurtainInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CurtainInfo.DevOfflineLast = Rs485CurtainInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
tempfalg = 0x01;
}
BLV_Communication_Record(&Rs485CurtainInfo.comm_record,0x01,0x00);
if(tempfalg)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CurtainInfo, sizeof(RS485_Cur_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
}
return Ret;
}
/*******************************************************************************
* Function Name : BLV_RS485_DOOYACurtain_Check
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݽ<EFBFBD><DDBD>մ<EFBFBD><D5B4><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
* Return : rev 0x01ʧ<31><CAA7> 0x00<30>ɹ<EFBFBD>
*******************************************************************************/
uint8_t BLV_RS485_DOOYACurtain_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = 0x01; //Ĭ<><C4AC>ʧ<EFBFBD><CAA7>
uint8_t data[CUR_RECDATALENMAX]={0};
uint8_t tempflag;
uint16_t crc_val;
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
if(len > CUR_RECDATALENMAX||len<7)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
return 0x01;
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
// Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"485Cur_REV:",data,len);
if(data[0] != 0x55)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
rev=0x01; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[1] != SRAM_Read_Byte(dev_addr+Dev_Addr))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
rev=0x01; //У<><D0A3><EFBFBD><EFBFBD>ַ
}
if(data[2] != 0x0D)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>!!");
rev=0x01; //У<><D0A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
crc_val = data[len-2] + (data[len-1]<<8);
if(crc_val == NetCRC16_2(&data[0],len - 2)) //CRCУ<43><D0A3><EFBFBD>ɹ<EFBFBD>
{
rev = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),dev_addr+Dev_Privately);
if(Rs485CurtainInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_485_Curtain LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_RS485_CURTAIN,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485CurtainInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485CurtainInfo.DevOffline != Rs485CurtainInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CurtainInfo.DevOfflineLast = Rs485CurtainInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485CurtainInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Rs485CurtainInfo.DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tempflag=0x01;
}
if(rev) //<2F>ظ<EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
{
switch(data[3])
{
case 0x01:
if(Rs485CurtainInfo.DevSendCnt==3)
{
Rs485CurtainInfo.read_flag=0x00;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>");
tempflag=0x01;
break;
case 0x02:
if(Rs485CurtainInfo.DevSendCnt==3)
{
Rs485CurtainInfo.request_flag=0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD>дʧ<EFBFBD><EFBFBD>");
tempflag=0x01;
break;
case 0x03:
if(Rs485CurtainInfo.DevSendCnt==3)
{
Rs485CurtainInfo.control_flag=0x00;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
tempflag=0x01;
break;
}
}
switch(data[3]) //<2F><EFBFBD>ظ<EFBFBD><D8B8>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>
{
case 0x01: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(data[5]==0x00)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_OPEN;
}
else if(data[5]==0x64)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_CLOSE;
}
else if(data[5]>0x00&&data[5]<0x64)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_OPEN;
}
else if(data[5]==0xFF)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>");
Rs485CurtainInfo.DYCurtainNextState=CUR_OPEN;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г̣<EFBFBD>%d",data[5]);
tempflag=0x01;
Rs485CurtainInfo.read_flag=0x00;
Rs485CurtainInfo.DevSendCnt=0x00;
break;
case 0x02: //д<><D0B4><EFBFBD><EFBFBD>
// if(data[4]==0x00&&data[5]==0x02) //д<><D0B4>ַ<EFBFBD>ظ<EFBFBD>
// {
// Rs485CurtainInfo.request_flag=0x00;
// }
// tempflag=0x01;
break;
case 0x03: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(data[4]==CUR_OPEN&&Rs485CurtainInfo.DYCurtainState==CUR_OPEN)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_CLOSE;
}
if(data[4]==CUR_CLOSE&&Rs485CurtainInfo.DYCurtainState==CUR_CLOSE)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_OPEN;
}
if(data[4]==CUR_STOP&&Rs485CurtainInfo.DYCurtainState==CUR_STOP)
{
if(Rs485CurtainInfo.DYCurtainStateLast==CUR_OPEN)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_CLOSE;
}
else if(Rs485CurtainInfo.DYCurtainStateLast==CUR_CLOSE)
{
Rs485CurtainInfo.DYCurtainNextState=CUR_OPEN;
}
}
tempflag=0x01;
Rs485CurtainInfo.control_flag=0x00;
Rs485CurtainInfo.DevSendCnt=0x00;
break;
// case 0x04: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(data[4]==0x01)
// {
// Rs485CurtainInfo.request_flag=0x01;
// }
// tempflag=0x01;
// break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
if(tempflag==0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CurtainInfo, sizeof(RS485_Cur_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),dev_addr+Dev_Privately);
}
return rev;
}
/*******************************************************************************
* Function Name : BLW_485_Curtain_Control
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ת<EFBFBD><D7AA>
* Input :
CfgDevAddIn : <20><>δʹ<CEB4><CAB9>
DevInputAddr : <20><>δʹ<CEB4><CAB9>
DevOutputLoop : <20><>δʹ<CEB4><CAB9>
devaddr : <20><EFBFBD><E8B1B8>ַ
state : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return : void
*******************************************************************************/
void BLW_485_Curtain_Control(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state)
{
Device_Public_Information_G BUS_Public;
RS485_Cur_INFO Rs485CurtainInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CurtainInfo,0,sizeof(RS485_Cur_INFO));
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
uint8_t port = SRAM_Read_Byte(devaddr+Dev_port);
uint8_t dev_addr=SRAM_Read_Byte(devaddr+Dev_Addr);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s state:%4x addr:%2x",__func__,state,dev_addr);
switch((state)&0x00ff)
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
Rs485CurtainInfo.DooYaCon_data.COMMAND=0x03;
//2025-08-14 <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
if(Rs485CurtainInfo.reverse_enable == 0x01)
{
Rs485CurtainInfo.DooYaCon_data.DATE=CUR_CLOSE;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>\r\n");
}else {
Rs485CurtainInfo.DooYaCon_data.DATE=CUR_OPEN;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
}
Rs485CurtainInfo.control_flag=0x01;
Rs485CurtainInfo.DYCurtainStateLast=Rs485CurtainInfo.DYCurtainState; //<2F><><EFBFBD>浱ǰ״̬
Rs485CurtainInfo.DYCurtainState=CUR_OPEN; //<2F>ı<EFBFBD>״̬
break;
case 0x02: //<2F>ر<EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD>ر<EFBFBD>\r\n");
Rs485CurtainInfo.DooYaCon_data.COMMAND=0x03;
//2025-08-14 <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
if(Rs485CurtainInfo.reverse_enable == 0x01)
{
Rs485CurtainInfo.DooYaCon_data.DATE=CUR_OPEN;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ر<EFBFBD>\r\n");
}else {
Rs485CurtainInfo.DooYaCon_data.DATE=CUR_CLOSE;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD>ر<EFBFBD>\r\n");
}
Rs485CurtainInfo.control_flag=0x02;
Rs485CurtainInfo.DYCurtainStateLast=Rs485CurtainInfo.DYCurtainState;
Rs485CurtainInfo.DYCurtainState=CUR_CLOSE;
break;
case 0x04: //<2F><><EFBFBD><EFBFBD>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> state:%d\r\n",Rs485CurtainInfo.DYCurtainNextState);
if(Rs485CurtainInfo.DYCurtainNextState!=0x00)
{
Rs485CurtainInfo.DooYaCon_data.COMMAND=0x03;
if(Rs485CurtainInfo.reverse_enable == 0x01)
{
if(Rs485CurtainInfo.DYCurtainNextState == 0x01)
{
Rs485CurtainInfo.DooYaCon_data.DATE = 0x02;
}else if(Rs485CurtainInfo.DYCurtainNextState == 0x02)
{
Rs485CurtainInfo.DooYaCon_data.DATE = 0x01;
}else {
Rs485CurtainInfo.DooYaCon_data.DATE=Rs485CurtainInfo.DYCurtainNextState;
}
}else{
Rs485CurtainInfo.DooYaCon_data.DATE=Rs485CurtainInfo.DYCurtainNextState;
}
}
Rs485CurtainInfo.control_flag=0x04;
Rs485CurtainInfo.DYCurtainStateLast=Rs485CurtainInfo.DYCurtainState;
Rs485CurtainInfo.DYCurtainState=Rs485CurtainInfo.DYCurtainNextState;
break;
case 0x05: //<2F>ٷֱ<D9B7>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB><EFBFBD>ٷֱ<D9B7>\r\n");
Rs485CurtainInfo.DooYaCon_data.COMMAND=0x03;
Rs485CurtainInfo.DooYaCon_data.DATE=CUR_PER;
Rs485CurtainInfo.DooYaCon_data.DATE1=((state>>8)&0x00ff);
Rs485CurtainInfo.control_flag=0x05;
break;
case 0x06: //ֹͣ
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE><CEBB>ֹͣ\r\n");
Rs485CurtainInfo.DooYaCon_data.COMMAND=0x03;
Rs485CurtainInfo.DooYaCon_data.DATE=CUR_STOP;
Rs485CurtainInfo.control_flag=0x06;
Rs485CurtainInfo.DYCurtainStateLast=Rs485CurtainInfo.DYCurtainState;
Rs485CurtainInfo.DYCurtainState=0x06;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CurtainInfo, sizeof(RS485_Cur_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
}
/*******************************************************************************
* Function Name : DYCurtain_Loop_State
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD>豸״̬<D7B4><CCAC><EFBFBD><EFBFBD>
* Input :
DevOutputLoop : <20><>δʹ<CEB4><CAB9>
devaddr : <20><EFBFBD><E8B1B8>ַ
* Return : DYCurtainState <20><>:0x01 <20><>:0x02 ͣ:0x06
*******************************************************************************/
uint16_t DYCurtain_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop)
{
RS485_Cur_INFO Rs485CurtainInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00)
return 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CurtainInfo,sizeof(RS485_Cur_INFO),devaddr+Dev_Privately);
// if(Rs485CurtainInfo.DevCurtainDelayState != 0x00)
// {
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> %d\r\n",DevCurtainInfo.DevCurtainDelayState);
// return Rs485CurtainInfo.DevCurtainDelayState;
// }
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d\r\n",DevCurtainInfo.DevCurtainState);
return Rs485CurtainInfo.DYCurtainState;
}
/*******************************************************************************
* Function Name : Cur_ConDataSend
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>(<28><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7)
* Input :
port : <20>˿<EFBFBD>
data : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
command : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>0x01 д<><D0B4>0x02 <20><><EFBFBD>ƣ<EFBFBD>0x03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x04
* Return : void
*******************************************************************************/
void Cur_ConDataSend(uint8_t port,uint8_t data,uint8_t dev_addr,uint8_t command)
{
uint8_t SendBuff[COMMCON_LEN];
SendBuff[0]=StartCode;
SendBuff[1]=dev_addr;
SendBuff[2]=DEVIDH;
SendBuff[3]=command;
SendBuff[4]=data;
NetCRC16(SendBuff,COMMCON_LEN);
MCU485_SendString(port,SendBuff,COMMCON_LEN);
}
/*******************************************************************************
* Function Name : Cur_ConDataSend2
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>(<28><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>8)
* Input :
port : <20>˿<EFBFBD>
data : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
command : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>0x01 д<><D0B4>0x02 <20><><EFBFBD>ƣ<EFBFBD>0x03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x04
* Return : void
*******************************************************************************/
void Cur_ConDataSend2(uint8_t port,uint8_t data,uint8_t data2,uint8_t dev_addr,uint8_t commcod)
{
uint8_t SendBuff[8];
SendBuff[0]=StartCode;
SendBuff[1]=dev_addr;
SendBuff[2]=DEVIDH;
SendBuff[3]=commcod;
SendBuff[4]=data;
SendBuff[5]=data2;
NetCRC16(SendBuff,8);
MCU485_SendString(port,SendBuff,8);
}
/*******************************************************************************
* Function Name : Cur_ReqDataSend
* Description : 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>(<28><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>10),<2C><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
* Input :
port : <20>˿<EFBFBD>
data : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
command : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>0x01 д<><D0B4>0x02 <20><><EFBFBD>ƣ<EFBFBD>0x03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x04
* Return : void
*******************************************************************************/
void Cur_ReqDataSend(uint8_t port,uint8_t dev_addr,uint8_t commcod)
{
uint8_t SendBuff[10];
SendBuff[0]=StartCode;
SendBuff[1]=0x00;
SendBuff[2]=0x00;
SendBuff[3]=commcod;
SendBuff[4]=0x00;
SendBuff[5]=0x02;
SendBuff[6]=dev_addr;
SendBuff[7]=DEVIDH;
NetCRC16(SendBuff,10);
MCU485_SendString(port,SendBuff,10);
}

View File

@@ -0,0 +1,80 @@
#ifndef _BLV_485_DEV_CURTAINFUN_H_
#define _BLV_485_DEV_CURTAINFUN_H_
#include "stdint.h"
#include "BLV_Dev_Action.h"
#include "BLV_All_Dev_Init.h"
#define COMMAND_Read 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define COMMAND_Write 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
#define COMMAND_Control 0x03; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define COMMAND_Request 0x04; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define COMMCON_LEN 0x07 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3A4>
#define CUR_RECDATALENMAX 0x08 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6>ʼ
#define CUR_OPEN 0x01 //<2F><><EFBFBD><EFBFBD>
#define CUR_CLOSE 0x02 //<2F>ر<EFBFBD>
#define CUR_STOP 0x03 //ֹͣ
#define CUR_PER 0x04 //<2F>ٷֱ<D9B7>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define StartCode 0x55; //<2F><>ʼ<EFBFBD><CABC> <20>̶<EFBFBD>
#define DEVIDH 0x0D; //<2F>ϼ<EFBFBD><CFBC><EFBFBD><E8B1B8>ַ 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
typedef struct DOOYACONTROL_DATE
{
uint8_t Start_Code; //<2F><>ʼ<EFBFBD><CABC>
uint8_t Dev_ID_L; //<2F><><EFBFBD><EFBFBD><E8B1B8>ַ
uint8_t Dev_ID_H; //<2F>ϼ<EFBFBD><CFBC><EFBFBD><E8B1B8>ַ
uint8_t COMMAND; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t DATE; //<2F><><EFBFBD><EFBFBD>
uint8_t DATE1;
uint8_t CRC16_L; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
uint8_t CRC16_H; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}__attribute__ ((__packed__))DOOYACON_DATE;
typedef struct RS485_Curtain_INFO
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DYCurtainStateLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DYCurtainState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ״̬
uint8_t DYCurtainNextState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
DOOYACON_DATE DooYaCon_data;
uint8_t read_flag; //<2F><><EFBFBD><EFBFBD>־
uint8_t control_flag; //<2F><><EFBFBD>Ʊ<EFBFBD>־
uint8_t request_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
uint8_t reverse_enable; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// uint8_t DevCurtainDelayFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
// uint8_t DevCurtainDelayLastState; //
//
// uint8_t DevCurtainDelayState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>״̬
// uint32_t DevCurtainDelayTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
// uint32_t DevCurtainDelayTick; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD>
// Dev_Name_Struct DevNameStruct;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ÿ<><C3BF><EFBFBD><EFBFBD>·16<31><36><EFBFBD>ֽڱ<D6BD><DAB1><EFBFBD> //<2F><>֧<EFBFBD><D6A7>30<33><30><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_Cur_INFO;
void BLV_485_Dev_Curtain_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_Curtain_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,625 @@
#include "includes.h"
/*******************************************************************************
* Function Name : BLV_RS485_EnrgyMonitor_Data_For_Logic_Init
* Description : <20>ܺļ<DCBA><C4BC><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLV_RS485_EnrgyMonitor_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_ENERGYMONITOR_INFO Rs485EnergyInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485EnergyInfo,0,sizeof(RS485_ENERGYMONITOR_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = dev_info->port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = dev_info->retry; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = dev_info->writ_time; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
Rs485EnergyInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD>߳<EFBFBD>ʼ<EFBFBD><CABC>
Rs485EnergyInfo.DevOffline = Rs485EnergyInfo.DevOfflineLast;
BUS_Public.polling_cf = (uint32_t)&BLV_RS485_Energy_Cycle_Dis; //<2F><>Ӧ<EFBFBD>Ķ˿<C4B6><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.processing_cf = (uint32_t)&BLV_RS485_Energy_Data_Processing;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_Energy_Output_Ctrl;
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
Rs485EnergyInfo.send_flag |= BLV_Energy_SetInfo_Flag;
//Rs485EnergyInfo.send_flag |= BLV_Energy_ClearStat_Flag;
Rs485EnergyInfo.send_flag |= BLV_Energy_ReadVer_Flag;
Rs485EnergyInfo.send_flag |= BLV_Energy_Inquire_Flag;
Rs485EnergyInfo.periodic_time = 5000; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
Rs485EnergyInfo.periodic_enable = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʹ<EFBFBD><CAB9>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
Rs485EnergyInfo.send_flag |= BLV_Energy_SetInfo_Flag;
Rs485EnergyInfo.send_flag |= BLV_Energy_ReadVer_Flag;
Rs485EnergyInfo.periodic_time = 5000; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
Rs485EnergyInfo.periodic_enable = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʹ<EFBFBD><CAB9>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
default:
break;
}
}
uint8_t BLV_Energy_Inquire_SendData(Device_Public_Information_G *BUS_Public, RS485_ENERGYMONITOR_INFO *Rs485EnergyInfo)
{
uint8_t send_buff[20];
uint8_t send_len = 0;
memset(send_buff,0,20);
send_buff[send_len++] = BLV_Energy_DataHeard; //<2F><><EFBFBD><EFBFBD>ͷ
if(Rs485EnergyInfo->DevSendCnt == 0x00)
{
Rs485EnergyInfo->DevSendSN++;
if(Rs485EnergyInfo->DevSendSN > 0x0F) Rs485EnergyInfo->DevSendSN = 0x00;
send_buff[send_len++] = (Rs485EnergyInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len] = (Rs485EnergyInfo->DevSendSN & 0x0F);
send_buff[send_len++] |= BUS_Retry_Flag;
}
send_buff[send_len++] = BLV_Energy_Bus_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
send_buff[send_len++] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ - C5<43>̶<EFBFBD><CCB6><EFBFBD><E8B1B8>ַΪ0x01
send_buff[send_len++] = 0x00; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[send_len++] = 0x00; //У<><D0A3>
send_buff[send_len++] = BLV_Energy_Inquire_CMD; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
send_buff[send_len++] = BLV_Energy_DataEnd; //<2F><><EFBFBD><EFBFBD>β
send_buff[0x04] = send_len; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[0x05] = CheckSum(send_buff, send_len); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port,send_buff, send_len);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_Energy_Inquire: ",send_buff,send_len);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Rs485EnergyInfo->inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Rs485EnergyInfo->comm_record,0x01,0x00);
return 0x00;
}
uint8_t BLV_Energy_SetInfo_SendData(Device_Public_Information_G *BUS_Public, RS485_ENERGYMONITOR_INFO *Rs485EnergyInfo)
{
uint8_t send_buff[20];
uint8_t send_len = 0;
memset(send_buff,0,20);
send_buff[send_len++] = BLV_Energy_DataHeard; //<2F><><EFBFBD><EFBFBD>ͷ
if(Rs485EnergyInfo->DevSendCnt == 0x00)
{
Rs485EnergyInfo->DevSendSN++;
if(Rs485EnergyInfo->DevSendSN > 0x0F) Rs485EnergyInfo->DevSendSN = 0x00;
send_buff[send_len++] = (Rs485EnergyInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len] = (Rs485EnergyInfo->DevSendSN & 0x0F);
send_buff[send_len++] |= BUS_Retry_Flag;
}
send_buff[send_len++] = BLV_Energy_Bus_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
send_buff[send_len++] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ - C5<43>̶<EFBFBD><CCB6><EFBFBD><E8B1B8>ַΪ0x01
send_buff[send_len++] = 0x00; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[send_len++] = 0x00; //У<><D0A3>
send_buff[send_len++] = BLV_Energy_SetInfo_CMD; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len++] = 0x02; //<2F><><EFBFBD><EFBFBD>λ - Ŀǰֻ<C7B0><D6BB><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len++] = 0x00; //<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD> - <20>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD> <20><>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>
send_buff[send_len++] = 0x00;
send_buff[send_len++] = 0x00;
send_buff[send_len++] = 0x00;
send_buff[send_len++] = Rs485EnergyInfo->periodic_enable; //<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>λ
send_buff[send_len++] = Rs485EnergyInfo->periodic_time & 0xFF; //<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1>
send_buff[send_len++] = (Rs485EnergyInfo->periodic_time >> 8 ) & 0xFF;
send_buff[send_len++] = (Rs485EnergyInfo->periodic_time >> 16 ) & 0xFF;
send_buff[send_len++] = (Rs485EnergyInfo->periodic_time >> 24 ) & 0xFF;
send_buff[send_len++] = BLV_Energy_DataEnd; //<2F><><EFBFBD><EFBFBD>β
send_buff[0x04] = send_len; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[0x05] = CheckSum(send_buff, send_len); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port,send_buff, send_len);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,send_buff,send_len);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_Energy_SetInfo: ",send_buff,send_len);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Rs485EnergyInfo->inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Rs485EnergyInfo->comm_record,0x01,0x00);
return 0x00;
}
uint8_t BLV_Energy_ReadVer_SendData(Device_Public_Information_G *BUS_Public, RS485_ENERGYMONITOR_INFO *Rs485EnergyInfo)
{
uint8_t send_buff[20];
uint8_t send_len = 0;
memset(send_buff,0,20);
send_buff[send_len++] = BLV_Energy_DataHeard; //<2F><><EFBFBD><EFBFBD>ͷ
if(Rs485EnergyInfo->DevSendCnt == 0x00)
{
Rs485EnergyInfo->DevSendSN++;
if(Rs485EnergyInfo->DevSendSN > 0x0F) Rs485EnergyInfo->DevSendSN = 0x00;
send_buff[send_len++] = (Rs485EnergyInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len] = (Rs485EnergyInfo->DevSendSN & 0x0F);
send_buff[send_len++] |= BUS_Retry_Flag;
}
send_buff[send_len++] = BLV_Energy_Bus_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
send_buff[send_len++] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ - C5<43>̶<EFBFBD><CCB6><EFBFBD><E8B1B8>ַΪ0x01
send_buff[send_len++] = 0x00; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[send_len++] = 0x00; //У<><D0A3>
send_buff[send_len++] = BLV_Energy_ReadVer_CMD; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD>
send_buff[send_len++] = BLV_Energy_DataEnd; //<2F><><EFBFBD><EFBFBD>β
send_buff[0x04] = send_len; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[0x05] = CheckSum(send_buff, send_len); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port,send_buff, send_len);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_Energy_ReadVer: ",send_buff,send_len);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,send_buff,send_len);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Rs485EnergyInfo->inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Rs485EnergyInfo->comm_record,0x01,0x00);
return 0;
}
uint8_t BLV_Energy_ClearStat_SendData(Device_Public_Information_G *BUS_Public, RS485_ENERGYMONITOR_INFO *Rs485EnergyInfo)
{
uint8_t send_buff[20];
uint8_t send_len = 0;
memset(send_buff,0,20);
send_buff[send_len++] = BLV_Energy_DataHeard; //<2F><><EFBFBD><EFBFBD>ͷ
if(Rs485EnergyInfo->DevSendCnt == 0x00)
{
Rs485EnergyInfo->DevSendSN++;
if(Rs485EnergyInfo->DevSendSN > 0x0F) Rs485EnergyInfo->DevSendSN = 0x00;
send_buff[send_len++] = (Rs485EnergyInfo->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len] = (Rs485EnergyInfo->DevSendSN & 0x0F);
send_buff[send_len++] |= BUS_Retry_Flag;
}
send_buff[send_len++] = BLV_Energy_Bus_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
send_buff[send_len++] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ - C5<43>̶<EFBFBD><CCB6><EFBFBD><E8B1B8>ַΪ0x01
send_buff[send_len++] = 0x00; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[send_len++] = 0x00; //У<><D0A3>
send_buff[send_len++] = BLV_Energy_ClearStat_CMD; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len++] = BLV_Energy_DataEnd; //<2F><><EFBFBD><EFBFBD>β
send_buff[0x04] = send_len; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[0x05] = CheckSum(send_buff, send_len); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port,send_buff, send_len);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,send_buff,send_len);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_Energy_ClearStat: ",send_buff,send_len);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Rs485EnergyInfo->inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Rs485EnergyInfo->comm_record,0x01,0x00);
return 0;
}
uint8_t BLV_Energy_PeriodicReport_Reply(Device_Public_Information_G *BUS_Public, uint8_t reply_sn)
{
uint8_t send_buff[20];
uint8_t send_len = 0;
memset(send_buff,0,20);
send_buff[send_len++] = BLV_Energy_DataHeard; //<2F><><EFBFBD><EFBFBD>ͷ
send_buff[send_len++] = reply_sn; //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len++] = BLV_Energy_Bus_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
send_buff[send_len++] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ - C5<43>̶<EFBFBD><CCB6><EFBFBD><E8B1B8>ַΪ0x01
send_buff[send_len++] = 0x00; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[send_len++] = 0x00; //У<><D0A3>
send_buff[send_len++] = BLV_Energy_PeriodicReport_CMD; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[send_len++] = BLV_Energy_DataEnd; //<2F><><EFBFBD><EFBFBD>β
send_buff[0x04] = send_len; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[0x05] = CheckSum(send_buff, send_len); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port,send_buff, send_len);
return 0;
}
/*******************************************************************************
* Function Name : BLV_RS485_Energy_Cycle_Dis
* Description : <20>ܺļ<DCBA><C4BC><EFBFBD> <20><>ѯ<EFBFBD><D1AF><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
* Return :
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLV_RS485_Energy_Cycle_Dis(uint32_t dev_addr)
{
uint8_t ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_ENERGYMONITOR_INFO Rs485EnergyInfo;
uint8_t i = 0;
uint32_t send_data_flag = 0;
uint8_t keepflag = 0x00;
if(dev_addr == NULL) return 0;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),dev_addr+Dev_Privately);
for(i = 0;i < BLV_Energy_Send_Flag_Max; i++)
{
if( (Rs485EnergyInfo.send_flag & (0x01 << i)) != 0x00)
{
send_data_flag = 0x01 << i;
break;
}
}
if(send_data_flag != 0x00)
{
if(Rs485EnergyInfo.DevSendCnt > BUS_Public.retry_num)
{
if(Rs485EnergyInfo.DevOffline != DEV_IS_OFFLINE) //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>¼
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_RS485_CARD,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485EnergyInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485EnergyInfo.DevOffline != Rs485EnergyInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485EnergyInfo.DevOfflineLast = Rs485EnergyInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}else {
switch(send_data_flag)
{
case BLV_Energy_SetInfo_Flag:
BLV_Energy_SetInfo_SendData(&BUS_Public,&Rs485EnergyInfo);
break;
case BLV_Energy_ClearStat_Flag:
BLV_Energy_ClearStat_SendData(&BUS_Public,&Rs485EnergyInfo);
break;
case BLV_Energy_ReadVer_Flag:
BLV_Energy_ReadVer_SendData(&BUS_Public,&Rs485EnergyInfo);
break;
case BLV_Energy_Inquire_Flag:
BLV_Energy_Inquire_SendData(&BUS_Public,&Rs485EnergyInfo);
break;
}
ret = RS485OCCUPYTIME;
Rs485EnergyInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
keepflag = 0x01;
}else {
if(BUS_Public.port == Polling_Port)
{
BLV_Energy_Inquire_SendData(&BUS_Public,&Rs485EnergyInfo);
ret = RS485OCCUPYTIME;
keepflag = 0x01;
}
}
if(keepflag == 0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485EnergyInfo, sizeof(RS485_ENERGYMONITOR_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),dev_addr+Dev_Privately);
}
return ret;
}
uint8_t BLV_RS485_Energy_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = 0x01;
uint16_t deal_len = len;
uint8_t deal_buff[BLV_Energy_RecvData_LenMax];
uint32_t temp_value = 0;
if((dev_addr == NULL) || (data_addr == 0x00) ) return rev;
Device_Public_Information_G BUS_Public;
RS485_ENERGYMONITOR_INFO Rs485EnergyInfo;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
/*1<><31><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȶԲ<C8B6><D4B2>ԣ<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>*/
if( (deal_len > BLV_Energy_RecvData_LenMax) || ( deal_len < BLV_Energy_RecvData_LenMin) )
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy Check_Len Fail - %d!",deal_len);
return rev;
}
memset(deal_buff,0,sizeof(deal_buff));
SRAM_DMA_Read_Buff(deal_buff,deal_len,data_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
/*У<><D0A3><EFBFBD><EFBFBD>ͷ <20><>β*/
if((deal_buff[0] != BLV_Energy_DataHeard) || (deal_buff[deal_len - 1] != BLV_Energy_DataEnd))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Head Err Not Energy Data");
return rev;
}
/*У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>*/
if(deal_buff[4] != deal_len)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy Data Lens %d Err",deal_buff[4]);
return rev;
}
/*У<><D0A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> - Dev_Energy_Monitor*/
if(deal_buff[2] != BLV_Energy_Bus_Type)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy Type %d Err",deal_buff[2]);
return rev;
}
/*У<><D0A3><EFBFBD><EFBFBD><E8B1B8>ַ*/
if(deal_buff[3] != BUS_Public.addr)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy Addr %d Err",deal_buff[3]);
return rev;
}
SRAM_DMA_Read_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),dev_addr+Dev_Privately);
switch(deal_buff[6])
{
case BLV_Energy_PeriodicReport_CMD:
case BLV_Energy_SetInfo_CMD:
case BLV_Energy_ReadVer_CMD:
case BLV_Energy_ClearStat_CMD:
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,deal_buff,deal_len); //<2F><>¼<EFBFBD><C2BC>־
case BLV_Energy_Inquire_CMD:
rev = 0x00;
if(Rs485EnergyInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy DEV_IS_ONLINE");
LOG_Device_Online_Record(Dev_485_BLE_Music,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485EnergyInfo.DevSendCnt = 0x00;
Rs485EnergyInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485EnergyInfo.DevOffline != Rs485EnergyInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485EnergyInfo.DevOfflineLast = Rs485EnergyInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485EnergyInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(deal_buff[6])
{
case BLV_Energy_PeriodicReport_CMD:
//20250829 - Ŀǰֻ<C7B0><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy PeriodicReport process");
//Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Energy PeriodicReport process",deal_buff,deal_len);
temp_value = deal_buff[9];
temp_value <<= 8;
temp_value |= deal_buff[8];
Rs485EnergyInfo.voltage = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy voltage %dmV",Rs485EnergyInfo.voltage*10);
temp_value = deal_buff[11];
temp_value <<= 8;
temp_value |= deal_buff[10];
Rs485EnergyInfo.current = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy current %dmA",Rs485EnergyInfo.current*10);
temp_value = deal_buff[15];
temp_value <<= 8;
temp_value |= deal_buff[14];
temp_value <<= 8;
temp_value |= deal_buff[13];
temp_value <<= 8;
temp_value |= deal_buff[12];
Rs485EnergyInfo.active_power = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy active_power %dmW",Rs485EnergyInfo.active_power);
temp_value = deal_buff[19];
temp_value <<= 8;
temp_value |= deal_buff[18];
temp_value <<= 8;
temp_value |= deal_buff[17];
temp_value <<= 8;
temp_value |= deal_buff[16];
Rs485EnergyInfo.phase_energy = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy phase_energy %dWh",Rs485EnergyInfo.phase_energy);
temp_value = deal_buff[23];
temp_value <<= 8;
temp_value |= deal_buff[22];
temp_value <<= 8;
temp_value |= deal_buff[21];
temp_value <<= 8;
temp_value |= deal_buff[20];
Rs485EnergyInfo.total_energy = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy total_energy %dWh",Rs485EnergyInfo.total_energy);
BLV_Energy_PeriodicReport_Reply(&BUS_Public,deal_buff[1]);
break;
case BLV_Energy_Inquire_CMD:
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy Inquire process");
temp_value = deal_buff[9];
temp_value <<= 8;
temp_value |= deal_buff[8];
Rs485EnergyInfo.voltage = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy voltage %dmV",Rs485EnergyInfo.voltage*10);
temp_value = deal_buff[11];
temp_value <<= 8;
temp_value |= deal_buff[10];
Rs485EnergyInfo.current = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy current %dmA",Rs485EnergyInfo.current*10);
temp_value = deal_buff[15];
temp_value <<= 8;
temp_value |= deal_buff[14];
temp_value <<= 8;
temp_value |= deal_buff[13];
temp_value <<= 8;
temp_value |= deal_buff[12];
Rs485EnergyInfo.active_power = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy active_power %dmW",Rs485EnergyInfo.active_power);
temp_value = deal_buff[19];
temp_value <<= 8;
temp_value |= deal_buff[18];
temp_value <<= 8;
temp_value |= deal_buff[17];
temp_value <<= 8;
temp_value |= deal_buff[16];
Rs485EnergyInfo.phase_energy = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy phase_energy %dWh",Rs485EnergyInfo.phase_energy);
temp_value = deal_buff[23];
temp_value <<= 8;
temp_value |= deal_buff[22];
temp_value <<= 8;
temp_value |= deal_buff[21];
temp_value <<= 8;
temp_value |= deal_buff[20];
Rs485EnergyInfo.total_energy = temp_value;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLE Energy total_energy %dWh",Rs485EnergyInfo.total_energy);
Rs485EnergyInfo.send_flag &= ~BLV_Energy_Inquire_Flag;
break;
case BLV_Energy_SetInfo_CMD:
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy SetInfo process");
//Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Energy SetInfo process",deal_buff,deal_len);
Rs485EnergyInfo.send_flag &= ~BLV_Energy_SetInfo_Flag;
break;
case BLV_Energy_ReadVer_CMD:
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy ReadVer process %d-%d-%d",deal_buff[8],deal_buff[9],deal_buff[10]);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Energy ReadVer process",deal_buff,deal_len);
Rs485EnergyInfo.send_flag &= ~BLV_Energy_ReadVer_Flag;
break;
case BLV_Energy_ClearStat_CMD:
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy ClearStat process");
//Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Energy ClearStat process",deal_buff,deal_len);
Rs485EnergyInfo.send_flag &= ~BLV_Energy_ClearStat_Flag;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485EnergyInfo, sizeof(RS485_ENERGYMONITOR_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),dev_addr+Dev_Privately);
return rev;
}
void Dev_Energy_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType)
{
Device_Public_Information_G BUS_Public;
RS485_ENERGYMONITOR_INFO Rs485EnergyInfo;
uint8_t keepflag = 0x00;
uint8_t ctrlmode = 0x00;
uint8_t ctrlstate = 0x00;
if(DevAddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
ctrlmode = DevOutputType & 0xff;
ctrlstate = (DevOutputType >> 8) & 0xff;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy Ctrl Mode:%02X State:%02X",ctrlmode,ctrlstate);
switch(ctrlmode)
{
case 0x01:
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Energy Ctrl ClearStat");
Rs485EnergyInfo.send_flag |= BLV_Energy_ClearStat_Flag;
keepflag = 0x01;
break;
}
if(keepflag == 0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485EnergyInfo, sizeof(RS485_ENERGYMONITOR_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),DevAddr+Dev_Privately);
}
}

View File

@@ -0,0 +1,59 @@
#ifndef _BLV_485_DEV_ENERGYMONITOR_H_
#define _BLV_485_DEV_ENERGYMONITOR_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
#define BLV_Energy_Bus_Type 0xF4
#define BLV_Energy_RecvData_LenMax 30
#define BLV_Energy_RecvData_LenMin 8
#define BLV_Energy_DataHeard 0x8A
#define BLV_Energy_DataEnd 0xA8
#define BLV_Energy_PeriodicReport_CMD 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
#define BLV_Energy_Inquire_CMD 0x02 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
#define BLV_Energy_SetInfo_CMD 0x03 //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLV_Energy_ReadVer_CMD 0x04 //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLV_Energy_ClearStat_CMD 0x13 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD>ͳ<EFBFBD><CDB3>
#define BLV_Energy_Send_Flag_Max 4
#define BLV_Energy_SetInfo_Flag 0x0001
#define BLV_Energy_ClearStat_Flag 0x0002
#define BLV_Energy_ReadVer_Flag 0x0004
#define BLV_Energy_Inquire_Flag 0x0008
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevSendSN; //<2F>豸ͨѶ SN
uint8_t periodic_enable; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʹ<EFBFBD><CAB9>״̬
uint16_t voltage; //<2F><>ѹ
uint16_t current; //<2F><><EFBFBD><EFBFBD>
uint32_t active_power; //<2F>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
uint32_t phase_energy; //<2F>׶<EFBFBD><D7B6>ܺ<EFBFBD>
uint32_t total_energy; //<2F><><EFBFBD>ܺ<EFBFBD>
uint32_t send_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint32_t periodic_time; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>mS
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_ENERGYMONITOR_INFO; //485<38><35><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLV_RS485_EnrgyMonitor_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint8_t BLV_RS485_Energy_Cycle_Dis(uint32_t dev_addr);
uint8_t BLV_RS485_Energy_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void Dev_Energy_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType);
#endif

View File

@@ -0,0 +1,481 @@
/**
******************************************************************************
* @file BLV_485_Dev_FreshAirFun.c
* @author BLW RCU development Team <09>ֿ<EFBFBD><D6BF><EFBFBD>
* @version V1.0.0
* @date 2023<32><33>2<EFBFBD><32>24<32><34>
* @brief <20><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_FloorHeatFun.h"
/*<2A><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ*/
#include "BLV_485_Dev_BLWFloorHeatFun.h"
#include "BLV_485_Dev_CLEDFloorHeatFun.h"
/*<2A><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_BLW_FloorHeat_Flag, BLW_RS485_FloorHeat_Init) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_CLED_FloorHeat_Flag, CLED_RS485_FloorHeat_Init) //CLED<45><44>ů
//#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
//#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
//#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define FRESHAIR_MAXRET 0x03 //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
uint8_t FloorHeat_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType); //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Set_FloorHeat_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType); //<2F><><EFBFBD>õ<EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t CLED_FloorHeat_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType);
void CLED_Set_FloorHeat_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*******************************************************************************
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* len <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* data <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>׵<EFBFBD>ַ
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_FloorHeatFun_Init(uint16_t len,uint8_t *data)
{
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public, 0, sizeof(Device_Public_Information_G)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
memset(&FloorHeat_Info, 0, sizeof(RS485_FloorHeat_INFO)); //˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.addr = data[1]; //<2F>豸485<38><35>ַ
BUS_Public.type = data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = data[3] + (data[4]<<8) + (data[5]<<16) + (data[6]<<24); //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x00C8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 200ms
if(data[7]==ENUM_RS485_DEV_PRO_01)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = FloorHeat_Input_Check; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Set_FloorHeat_Func; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if(data[7]==ENUM_RS485_DEV_PRO_02)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = CLED_FloorHeat_Input_Check; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = CLED_Set_FloorHeat_Func; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
FloorHeat_Info.DevOffline = FloorHeat_Info.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(data[7]) //Э<><D0AD><EFBFBD>ж<EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &FloorHeat_Info);break;
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &FloorHeat_Info);break;
// case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &FloorHeat_Info);break;
// case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &FloorHeat_Info);break;
}
switch(data[2]) //<2F>˿<EFBFBD><CBBF>ж<EFBFBD>
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Act485_Info.baud = BUS_Public.baud; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ:%d", Act485_Info.baud);
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.baud = BUS_Public.baud; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ:%d", Poll485_Info.baud);
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* len <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* data <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>׵<EFBFBD>ַ
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_FloorHeatFun_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public, 0, sizeof(Device_Public_Information_G)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
memset(&FloorHeat_Info, 0, sizeof(RS485_FloorHeat_INFO)); //˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version; //<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
if(data[7]==ENUM_RS485_DEV_PRO_01)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = FloorHeat_Input_Check; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Set_FloorHeat_Func; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if(data[7]==ENUM_RS485_DEV_PRO_02)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = CLED_FloorHeat_Input_Check; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = CLED_Set_FloorHeat_Func; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
FloorHeat_Info.DevOffline = FloorHeat_Info.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>ж<EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &FloorHeat_Info);break;
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &FloorHeat_Info);break;
// case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &FloorHeat_Info);break;
// case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &FloorHeat_Info);break;
}
switch(dev_info->port) //<2F>˿<EFBFBD><CBBF>ж<EFBFBD>
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* @brief <20><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* CfgDevAddIn <09><><EFBFBD><EFBFBD><EBB4A5><EFBFBD>ڵ<EFBFBD>
* DevInputLoop <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* DevInputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval
CtrlInvalid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
CtrlValid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
* @attention None
*******************************************************************************/
uint8_t FloorHeat_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType)
{
uint8_t rec = CtrlInvalid; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>
// static uint8_t on_off_last = 0, valve_last = 0; //<2F><>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t keep_flag = 0x00;
if(CfgDevAddIn == NULL) return rec;
FloorHeat_Content_Struct FloorHeat_Input; //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),CfgDevAddIn);
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), CfgDevAddIn+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FloorHeat_Input.valve = (DevInputType >> 8) & 0x0F; //ȡ<><C8A1><EFBFBD><EFBFBD><EBB7A7>״̬
if(FloorHeat_Info.new_state.on_off != FloorHeat_Info.last_state.on_off || FloorHeat_Info.new_state.valve != FloorHeat_Info.last_state.valve) //<2F><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>
{
if(FloorHeat_Input.valve == FLOORHEAT_VALVE_ON) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>Ϊ<EFBFBD><CEAA>
{
if(FloorHeat_Info.new_state.on_off == FLOORHEAT_ON) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.new_state.valve == FLOORHEAT_VALVE_ON) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
{
FloorHeat_Info.last_state.on_off = FloorHeat_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FloorHeat_Info.last_state.valve = FloorHeat_Info.new_state.valve; //<2F><><EFBFBD>·<EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD>ů %d <20><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",BUS_Public.addr,FloorHeat_Input.valve);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
if(FloorHeat_Input.valve == FLOORHEAT_VALVE_OFF) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>Ϊ<EFBFBD><CEAA>
{
if(FloorHeat_Info.new_state.on_off == FLOORHEAT_ON) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.new_state.valve == FLOORHEAT_VALVE_OFF) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
{
FloorHeat_Info.last_state.on_off = FloorHeat_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FloorHeat_Info.last_state.valve = FloorHeat_Info.new_state.valve; //<2F><><EFBFBD>·<EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD>ů %d <20><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",BUS_Public.addr,FloorHeat_Input.valve);
rec = CtrlValid;
keep_flag = 0x01;
}
}
if(FloorHeat_Info.new_state.on_off == FLOORHEAT_OFF) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC>ػ<EFBFBD>
{
FloorHeat_Info.last_state.on_off = FloorHeat_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FloorHeat_Info.last_state.valve = FloorHeat_Info.new_state.valve; //<2F><><EFBFBD>·<EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD>ů %d <20><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",BUS_Public.addr,FloorHeat_Input.valve);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
if(keep_flag == 0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),CfgDevAddIn);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO),CfgDevAddIn+Dev_Privately);
}
return rec;
}
/*******************************************************************************
* @brief <20><><EFBFBD>õ<EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* DevAddrIn <09><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
* DevInputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* DevAddrOut <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
* DevOutputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* DevOutputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void Set_FloorHeat_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType)
{
uint8_t function, content; //<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>
uint8_t save_flag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(DevAddrOut == NULL)
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), DevAddrOut+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
function = DevOutputType & 0x00FF; //ȡ<><C8A1>
content = (DevOutputType >> 8) & 0x00FF; //ȡ<><C8A1>
switch(function) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case FLOORHEAT_ON_OFF_FUNCTION: //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
switch(content) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case FLOORHEAT_ON: //<2F><><EFBFBD><EFBFBD>
case FLOORHEAT_OFF: //<2F>ػ<EFBFBD>
FloorHeat_Info.ctrl_content.on_off = content;
FloorHeat_Info.ctrl_flag.on_off = 0x01; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>1
FloorHeat_Info.ctrl_cnt.on_off = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD>·翪<C2B7>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD>е<EFBFBD>ů<EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d ״̬:%d",BUS_Public.addr,DevOutputLoop,FloorHeat_Info.ctrl_content.on_off);
break;
}
break;
case FLOORHEAT_SET_OC_FUNCTION: //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȹ<C2B6><C8B9><EFBFBD>
if((FloorHeat_Info.new_state.on_off == FRESHAIR_ON) && ((content >= 16) && (content <= 32))) //<2F><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>16~32<33>ȷ<EFBFBD>Χ
{
FloorHeat_Info.ctrl_content.set_oc = content;
FloorHeat_Info.ctrl_flag.set_oc = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD>1
FloorHeat_Info.ctrl_cnt.set_oc = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȷ<C2B6><C8B7>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD>е<EFBFBD>ů<EFBFBD>¶ȿ<EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d ״̬:%d",BUS_Public.addr,DevOutputLoop,FloorHeat_Info.ctrl_content.set_oc);
}
break;
// case FLOORHEAT_READ_REGISTER_FUNCTION: //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// switch(content)
// {
// case REGISTER0: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>0
// case REGISTER1: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>1
// case REGISTER2: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>2
// case REGISTER3: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>3
// case REGISTER4: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>4
// case REGISTER5: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>5
// case REGISTER6: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>6
// case REGISTER7: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>7
// case REGISTER8: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>8
// case REGISTER9: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>9
// case REGISTER10://<2F>Ĵ<EFBFBD><C4B4><EFBFBD>10
// break;
// }
// break;
// case FLOORHEAT_WRITE_REGISTER_FUNCTION: //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// switch(content)
// {
// case REGISTER0: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>0
// case REGISTER1: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>1
// case REGISTER2: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>2
// case REGISTER3: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>3
// case REGISTER4: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>4
// case REGISTER5: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>5
// case REGISTER6: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>6
// case REGISTER7: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>7
// case REGISTER8: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>8
// case REGISTER9: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>9
// case REGISTER10://<2F>Ĵ<EFBFBD><C4B4><EFBFBD>10
// break;
// }
// break;
}
if(save_flag == 0x01)
{
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info,
sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), DevAddrOut + Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
/*******************************************************************************
* @brief <20><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* CfgDevAddIn <09><><EFBFBD><EFBFBD><EBB4A5><EFBFBD>ڵ<EFBFBD>
* DevInputLoop <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* DevInputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval
CtrlInvalid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
CtrlValid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
* @attention None
*******************************************************************************/
uint8_t CLED_FloorHeat_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType)
{
uint8_t rec = CtrlInvalid; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>
// static uint8_t on_off_last = 0, valve_last = 0; //<2F><>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t keep_flag = 0x00;
if(CfgDevAddIn == NULL) return rec;
FloorHeat_Content_Struct FloorHeat_Input; //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),CfgDevAddIn);
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), CfgDevAddIn+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FloorHeat_Input.valve = (DevInputType >> 8) & 0x0F; //ȡ<><C8A1><EFBFBD><EFBFBD><EBB7A7>״̬
if(FloorHeat_Info.new_state.on_off != FloorHeat_Info.last_state.on_off || FloorHeat_Info.new_state.valve != FloorHeat_Info.last_state.valve) //<2F><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>
{
if(FloorHeat_Input.valve == FLOORHEAT_VALVE_ON) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>Ϊ<EFBFBD><CEAA>
{
if(FloorHeat_Info.new_state.on_off == FLOORHEAT_ON) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.new_state.valve == FLOORHEAT_VALVE_ON) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
{
FloorHeat_Info.last_state.on_off = FloorHeat_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FloorHeat_Info.last_state.valve = FloorHeat_Info.new_state.valve; //<2F><><EFBFBD>·<EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD>ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FloorHeat_Input.valve);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
if(FloorHeat_Input.valve == FLOORHEAT_VALVE_OFF) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>Ϊ<EFBFBD><CEAA>
{
if(FloorHeat_Info.new_state.on_off == FLOORHEAT_ON) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
if(FloorHeat_Info.new_state.valve == FLOORHEAT_VALVE_OFF) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
{
FloorHeat_Info.last_state.on_off = FloorHeat_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FloorHeat_Info.last_state.valve = FloorHeat_Info.new_state.valve; //<2F><><EFBFBD>·<EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD>ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FloorHeat_Input.valve);
rec = CtrlValid;
keep_flag = 0x01;
}
}
if(FloorHeat_Info.new_state.on_off == FLOORHEAT_OFF) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC>ػ<EFBFBD>
{
FloorHeat_Info.last_state.on_off = FloorHeat_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FloorHeat_Info.last_state.valve = FloorHeat_Info.new_state.valve; //<2F><><EFBFBD>·<EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD>ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FloorHeat_Input.valve);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
if(keep_flag == 0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info, sizeof(RS485_FloorHeat_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),CfgDevAddIn);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO),CfgDevAddIn+Dev_Privately);
}
return rec;
}
/*******************************************************************************
* @brief <20><><EFBFBD>õ<EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* DevAddrIn <09><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
* DevInputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* DevAddrOut <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
* DevOutputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* DevOutputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void CLED_Set_FloorHeat_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType)
{
uint8_t onoff, settemp; //<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>
uint8_t save_flag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
Device_Public_Information_G BUS_Public; //<2F><>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FloorHeat_INFO FloorHeat_Info; //<2F><>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(DevAddrOut == NULL)
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), DevAddrOut+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
onoff = DevOutputType & 0x00FF; //ȡ<><C8A1>
settemp = (DevOutputType >> 8) & 0x00FF; //ȡ<><C8A1>
switch(onoff)
{
case FLOORHEAT_ON: //<2F><><EFBFBD><EFBFBD>
case FLOORHEAT_OFF: //<2F>ػ<EFBFBD>
FloorHeat_Info.ctrl_content.on_off = onoff;
FloorHeat_Info.ctrl_flag.on_off = 0x01; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>1
FloorHeat_Info.ctrl_cnt.on_off = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD>·翪<C2B7>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
break;
default:
break;
}
if(settemp)
{
if(((settemp >= 16) && (settemp <= 32))) //<2F><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>16~32<33>ȷ<EFBFBD>Χ
{
FloorHeat_Info.ctrl_content.set_oc = settemp;
FloorHeat_Info.ctrl_flag.set_oc = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD>1
FloorHeat_Info.ctrl_cnt.set_oc = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȷ<C2B6><C8B7>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
}
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD><EFBFBD>CLED<EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d <20><><EFBFBD>ػ<EFBFBD>:%d <20><EFBFBD>:%d",\
BUS_Public.addr,DevOutputLoop,FloorHeat_Info.ctrl_content.on_off,FloorHeat_Info.ctrl_content.set_oc);
if(save_flag == 0x01)
{
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FloorHeat_Info,
sizeof(RS485_FloorHeat_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FloorHeat_Info,sizeof(RS485_FloorHeat_INFO), DevAddrOut + Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}

View File

@@ -0,0 +1,53 @@
#ifndef __BLV_485_DEV_FLOORHEATFUN_H
#define __BLV_485_DEV_FLOORHEATFUN_H
#include "BLV_Dev_Action.h"
#include "BLV_All_Dev_Init.h"
#define FLOORHEAT_ON_OFF_FUNCTION 0x01 //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
#define FLOORHEAT_SET_OC_FUNCTION 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȹ<C2B6><C8B9><EFBFBD>
#define FLOORHEAT_READ_REGISTER_FUNCTION 0x06 //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FLOORHEAT_WRITE_REGISTER_FUNCTION 0x07 //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FLOORHEAT_ON 0x01 //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
#define FLOORHEAT_OFF 0x00 //<2F><>ů<EFBFBD>ػ<EFBFBD>
#define FLOORHEAT_VALVE_ON 0x01 //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
#define FLOORHEAT_VALVE_OFF 0x00 //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD>
typedef struct
{
uint8_t on_off: 2; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_oc: 2; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȱ<C2B6>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t : 4; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
}__attribute__ ((__packed__))FloorHeat_Ctrl_Struct; //485<38><35>ů<EFBFBD><C5AF><EFBFBD>ƽ<C6BD>壨uint8_t<5F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD>ͣ<EFBFBD>
typedef struct
{
uint8_t on_off; //<2F><><EFBFBD>ػ<EFBFBD>
uint8_t set_oc; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t indoor_oc; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t valve; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t read_register; //Ҫ<><D2AA><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
uint8_t write_register; //Ҫд<D2AA>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
uint8_t register_num; //Ҫ<><D2AA><EFBFBD><EFBFBD>д<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t write_data; //Ҫд<D2AA><D0B4><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))FloorHeat_Content_Struct; //485<38><35>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
FloorHeat_Ctrl_Struct ctrl_flag; //<2F><>ů<EFBFBD><C5AF><EFBFBD>Ʊ<EFBFBD>־λ
FloorHeat_Ctrl_Struct ctrl_cnt; //<2F><>ů<EFBFBD><C5AF><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
FloorHeat_Content_Struct ctrl_content; //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FloorHeat_Content_Struct ctrl_content_last; //<2F><>ů<EFBFBD><C5AF>һ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FloorHeat_Content_Struct new_state; //<2F><>ů<EFBFBD><C5AF>ǰ״̬
FloorHeat_Content_Struct last_state; //<2F><>ů<EFBFBD>ϴ<EFBFBD>״̬
uint8_t DevSendCnt; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬
uint8_t DevOfflineLast; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_FloorHeat_INFO; //485<38><35>ů<EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_RS485_FloorHeatFun_Init(uint16_t len,uint8_t *data); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
void BLW_RS485_FloorHeatFun_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len); //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ů<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#endif

View File

@@ -0,0 +1,494 @@
/**
******************************************************************************
* @file BLV_485_Dev_FreegoLockFun.c
* @author BLW RCU development Team
* @version V1.0.0
* @date 2021<32><31>11<31><31>02<30><32>
* @brief ΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD> <20><><EFBFBD>Կ<EFBFBD><D4BF>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>״̬
* Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>
*
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_FreegoLockFun.h"
#include "string.h"
#define LOCKCYCLEWAITTIMEOUT 5000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ʱ<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
#define WEIXINCYCLEMAX 50
#define WEIXINCYCLEMIN 1
#define FREEGOMESSAGEWAITTIME 200 //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>ݵƴ<DDB5>ʱ<EFBFBD><CAB1>
#define FREEGOCYCLEWAITTIME 400 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
#define FREEGOCTRLWAITTIME 200 //<2F><><EFBFBD>Ϳ<EFBFBD><CDBF>Ʊ<EFBFBD><C6B1><EFBFBD>
#define FREEGOASKWAITTIME 20 //<2F>ظ<EFBFBD>ȷ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
#define FREEGOCYCLEENSURECMD 0x02 //<2F>յ<EFBFBD><D5B5><EFBFBD>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>·<EFBFBD>ȷ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
#define FREEGOTOUCENSURECMD 0xB1 //<2F>յ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>·<EFBFBD>ȷ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
#define FREEGOMACGETENSURECMD 0xC1 //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>MAC һ<><D2BB><EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>õ<EFBFBD>һ<EFBFBD><D2BB>
#define FREEGOWXLOCKASKLEN 0x07
#define FREEGOWXLOCKASKMACLEN 19
#define FREEGOHEADLEN 0x06 //<2F><><EFBFBD>𹷱<EFBFBD><F0B9B7B1><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
#define FREEGOMACLEN 0x06 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
#define FREEGONETSTATELEN 0x01 //<2F><><EFBFBD><EFBFBD>״̬1<CCAC><31><EFBFBD>ֽ<EFBFBD>
void Freego_Rs485_WxLock_Pro(uint8_t *Data, CFG_Dev_AddP CfgDevAdd);
uint8_t Freego_Rs485_WxLock_CtrlCycle(uint32_t dev_addr);
uint8_t Freego_WxLock_Read(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void Freego_WxLock_Ctrl(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo,uint32_t dev_addr);
void Freego_WxLock_ToucSend(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo,uint32_t dev_addr);
void Freego_WxLock_Cycle(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo);
void Freego_Rs485_WxLock_Ask(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo, uint8_t Cmd, uint8_t *Data, uint8_t DataLen);
/*******************************************************************************
* @Function Name : BLW_RS485_FreegoLockFun_Init
* @Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
* @Input :
@type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
@addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
@polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
@processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* @Return : None
*******************************************************************************/
void Freego_RS485_WxLockFun_Init(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFO *Rs485WxLockInfo)
{
// Device_Public_Information_G BUS_Public;
// RS485_WxLock_INFO Rs485WxLockInfo;
// memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
// memset(&Rs485WxLockInfo,0,sizeof(RS485_WxLock_INFO));
// BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
// BUS_Public.type = DEV_RS485_WxLock; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
// BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
// BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
// BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public->polling_cf = (uint32_t)&Freego_Rs485_WxLock_CtrlCycle;
BUS_Public->processing_cf = (uint32_t)&Freego_WxLock_Read;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>*/
uint8_t Freego_Rs485_WxLock_CtrlCycle(uint32_t dev_addr)
{
// static uint8_t CycleCnt = 0;
uint8_t Ret = RS485OCCUPYNOTIME;
RS485_WxLock_INFO Rs485WxLockInfo;
Device_Public_Information_G BUS_Public;
// uint16_t DataLen;
// uint8_t Crc_buf;
uint8_t OnlineJudggeFlag = 0x00; //<2F>жϱ<D0B6>׼ һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
// CfgDevAddRfGatewayHost = HostRunInfo.CfgDevAddGateway;
// if(0x00 == dev_addr)
// {
// return Ret;
// }
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr);
SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately);//
// if(0x01 == Rs485WxLockInfo.WeixinCtrlFlag)
// {
// Rs485WxLockInfo.WeixinCtrlFlag = 0x00;
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ"); //
// Rs485WxLockInfo.WeixinAskLockFlag = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>λ
// }
if(0x01 == Rs485WxLockInfo.WeixinDownSendFlag) //<2F><><EFBFBD>б<EFBFBD>־
{
if(0x00 != Rs485WxLockInfo.WeixinDownSendCnt)
{
Rs485WxLockInfo.WeixinDownSendCnt--; //<2F>ݼ<EFBFBD>
}
else if(0x00 == Rs485WxLockInfo.WeixinDownSendCnt)
{
Rs485WxLockInfo.WeixinDownSendFlag = 0;
}
Freego_WxLock_ToucSend(&BUS_Public, &Rs485WxLockInfo,dev_addr);//<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>
OnlineJudggeFlag = 0x01;
}
else
{
Freego_WxLock_Cycle(&BUS_Public, &Rs485WxLockInfo);//<2F><>ѯ΢<D1AF><CEA2><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME; //ֻ<><D6BB><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ʹ<EFBFBD><CAB9><EFBFBD>ظ<EFBFBD>Ҳ<EFBFBD><D2B2>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>Ƭ
}
// {
// // if(DEV_IS_ONLINE == Rs485WxLockInfo.DevOffline) //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>
// {
// if(0x01 == Rs485WxLockInfo.WeixinTimeSetFlag) //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>ʱ<EFBFBD><CAB1>
// {
// if(0x00 != Rs485WxLockInfo.WeixinTimeSetCnt)
// {
// Rs485WxLockInfo.WeixinTimeSetCnt--; //<2F>ݼ<EFBFBD>
// }
// else if(0x00 == Rs485WxLockInfo.WeixinTimeSetCnt)
// {
// Rs485WxLockInfo.WeixinTimeSetFlag = 0;
// }
//// WxLock_TimeSet(dev_addr, Rs485WxLockInfo.RfGatewayHostAddr);//<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ڱ<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD>Ļظ<C4BB><D8B8>Ż<EFBFBD><C5BB><EFBFBD>0 <20><><EFBFBD><EFBFBD>΢<EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>֮<EFBFBD>󣬵<EFBFBD><F3A3ACB5><EFBFBD>ȡΪ<C8A1><CEAA><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ѯ
// Ret = 0x01;
// }
// else if(0x01 == Rs485WxLockInfo.WeixinCtrlFlag) //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
// {
// if(SysTick_1ms >= Rs485WxLockInfo.WeixinCycleCnt) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// {
// Rs485WxLockInfo.WeixinCycleCnt = SysTick_1ms + LOCKCYCLEWAITTIMEOUT;
// if(0x00 != Rs485WxLockInfo.WeixinCtrlSendCnt)
// {
// Rs485WxLockInfo.WeixinCtrlSendCnt--; //<2F>ݼ<EFBFBD>
// }
// else if(0x00 == Rs485WxLockInfo.WeixinCtrlSendCnt)
// {
// Rs485WxLockInfo.WeixinCtrlFlag = 0;
// }
// Freego_WxLock_Ctrl(&BUS_Public, &Rs485WxLockInfo,dev_addr);//<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ڱ<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD>Ļظ<C4BB><D8B8>Ż<EFBFBD><C5BB><EFBFBD>0 <20><><EFBFBD><EFBFBD>΢<EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>֮<EFBFBD>󣬵<EFBFBD><F3A3ACB5><EFBFBD>ȡΪ<C8A1><CEAA><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ѯ
// Ret = 0x01;
// }
// }
// }
// }
if(0x01 == OnlineJudggeFlag)
{
Ret = RS485OCCUPYTIME; //Ψ<><CEA8>1<EFBFBD>Żḳֵ
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485WxLockInfo.comm_record,0x01,0x00);
if(Rs485WxLockInfo.DevSendCnt > WxLockCtrlSendMax)
{
if(Rs485WxLockInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"FreegoWxLock DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_RS485_WxLock,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485WxLockInfo.DevOffline != Rs485WxLockInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485WxLockInfo.DevOfflineLast = Rs485WxLockInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485WxLockInfo.DevSendCnt++;
}
/*ÿ<>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B1A3>*/
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
}
}
return Ret;
}
//#define GatewayCTRLLEN 8 //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
* @param
* CfgDevAddOut <20><EFBFBD>ڵ<EFBFBD>
* @retval <20><>
* @attention ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Freego_WxLock_ToucSend(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo,uint32_t dev_addr)
{
//ͷ <20><><EFBFBD><EFBFBD> У<><D0A3> <20><><EFBFBD><EFBFBD> <20><>ַ <20><><EFBFBD><EFBFBD> У<><D0A3> <20><><EFBFBD><EFBFBD>
uint8_t SendData[FREEGOHEADLEN+WXLOCKDOWNMESSAGELEN] = {0xA7, 0xA0, 0x51, 0x03, 0x00, 0x00, 0x01};
SendData[3] = Rs485WxLockInfo->WeixinDownMessageLen+0x02; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
SendData[5] = BUS_Public->addr;
memcpy(&SendData[FREEGOHEADLEN], Rs485WxLockInfo->WeixinDownMessage, Rs485WxLockInfo->WeixinDownMessageLen);
SendData[2] = CheckSum_Overlook_Check(SendData, (FREEGOHEADLEN+Rs485WxLockInfo->WeixinDownMessageLen), 0x02); //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
{
MCU485_SendString(BUS_Public->port,SendData,(FREEGOHEADLEN+Rs485WxLockInfo->WeixinDownMessageLen));
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendData,FREEGOHEADLEN+Rs485WxLockInfo->WeixinDownMessageLen);
// RS485_Port_SendFun(CfgDevAdd, SendBuf, GatewayCTRLLEN, LOCKCTRLTIMEOUT);
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>*/
#define FREEGOWXLOCKCYCLELEN 0x07
void Freego_WxLock_Cycle(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo)
{
// uint8_t SendData[10] = {0x3D, 0x00, 0x13, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0xB1};
uint8_t SendData[FREEGOWXLOCKCYCLELEN] = {0xA5, 0x00, 0x00, 0x03, 0x00, 0x00,0x00};
SendData[5] = BUS_Public->addr;
SendData[2] = CheckSum_Overlook_Check(SendData, FREEGOWXLOCKCYCLELEN, 0x02); //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
MCU485_SendString(BUS_Public->port,SendData,FREEGOWXLOCKCYCLELEN);
}
#define IsMyData 0x00
#define IsNotMyData 0x01
#define RECLENMAX 100 //<2F><><EFBFBD><EFBFBD>100<30><30><EFBFBD>ֽڣ<D6BD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
/**
* @name <20><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 1 <20><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
* @attention
*
*/
uint8_t Freego_WxLock_Read(uint32_t dev_addr,uint32_t data_addr,uint16_t DataLen)
{
uint8_t Crc_buf;
RS485_WxLock_INFO Rs485WxLockInfo; //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = IsNotMyData;
uint8_t Data[RECLENMAX]; //<2F>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢485<38><35><EFBFBD><EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
Device_Public_Information_G BUS_Public;
if((NULL == dev_addr) || (DataLen > RECLENMAX)) //<2F><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><ECB3A3>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
{
return Ret;
}
SRAM_Read_Buff(Data, DataLen, data_addr); //<2F><>485<38><35><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr);
SRAM_Read_Buff((uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO), dev_addr+Dev_Privately);
if((Data[0] != 0xA5) && (Data[0] != 0xA6) && (Data[0] != 0xA7)) //Ψ<><CEA8>A5 A6 A7<41>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return Ret;
}
if((Data[5] != BUS_Public.addr) || (DataLen != Data[3]+0x04))
{
return Ret; //<2F><>ַ<EFBFBD><D6B7><EFBFBD>ԣ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
Crc_buf = CheckSum_Overlook_Check(Data, DataLen, 2); //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(Crc_buf == Data[2]) //У<><D0A3><EFBFBD>ж<EFBFBD> <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Ret = IsMyData;
if(Rs485WxLockInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485WxLock DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_RS485_WxLock,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485WxLockInfo.DevSendCnt = 0x00;
Rs485WxLockInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BLV_Communication_Record(&Rs485WxLockInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
if(Rs485WxLockInfo.DevOffline != Rs485WxLockInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485WxLockInfo.DevOfflineLast = Rs485WxLockInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
switch(Data[0])
{
case 0xA5: //
case 0xA6:
case 0xA7:
switch(Data[1]) //<2F><><EFBFBD><EFBFBD>
{
case 0xCC: //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>鷢ָ<E9B7A2><EFBFBD><EEB5BD><EFBFBD><EFBFBD><EFBFBD>
Freego_Rs485_WxLock_Ask(&BUS_Public, &Rs485WxLockInfo,FREEGOCYCLEENSURECMD,Data, DataLen);//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>һ<EFBFBD><D2BB>0x02<30><32><EFBFBD><EFBFBD><EEA3AC>֪<EFBFBD>Է<EFBFBD><D4B7>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD>
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>0xDD<44><44><EFBFBD>Ʊ<EFBFBD><C6B1>ĵ<EFBFBD>ȷ<EFBFBD>ϻظ<CFBB>
switch(Data[6])
{
case 0xE0: //<2F>ɹ<EFBFBD>
break;
}
break;
case 0xC0: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ
Freego_Rs485_WxLock_Ask(&BUS_Public, &Rs485WxLockInfo, FREEGOMACGETENSURECMD, Data, DataLen);//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>һ<EFBFBD><D2BB>0xC1<43><31><EFBFBD>
break;
case 0xA1: //<2F><><EFBFBD><EFBFBD>0xA0͸<30><CDB8><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ȷ<EFBFBD>ϻظ<CFBB>
Rs485WxLockInfo.WeixinDownSendFlag = 0x00;
break;
case 0xB0: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ͸<D2AA><CDB8><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>Ϣ
Freego_Rs485_WxLock_Ask(&BUS_Public, &Rs485WxLockInfo,FREEGOTOUCENSURECMD, Data, DataLen);//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>һ<EFBFBD><D2BB>B1<42><31><EFBFBD><EFBFBD><EEA3AC>ʾ<EFBFBD><CABE><EFBFBD>յ<EFBFBD>
break;
}
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
/*RCU<43>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ȷ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>*/
void Freego_Rs485_WxLock_Ask(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFOP Rs485WxLockInfo, uint8_t Cmd, uint8_t *Data, uint8_t DataLen)
{
uint8_t SendData[FREEGOWXLOCKASKMACLEN];// = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// RS485_WxLock_INFOP Rs485WxLockInfo;
// Rs485WxLockInfo = CfgDevAdd->DevDataStruct;
memset(SendData, 0x00, FREEGOWXLOCKASKMACLEN); //ȫ<><C8AB><EFBFBD><EFBFBD>0
SendData[5] = BUS_Public->addr;
switch(Cmd)
{
case FREEGOCYCLEENSURECMD:
if(FREEGOWXLOCKASKLEN == DataLen)
{
SendData[0] = 0xA5;
SendData[1] = FREEGOCYCLEENSURECMD; //
SendData[3] = 0x03;
SendData[6] = 0xEA; //ֱ<>ӻظ<D3BB><D8B8>ɹ<EFBFBD>
switch(Data[6])
{
case 0x03: //<2F><><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><E0B6AF><EFBFBD><EFBFBD>
break;
case 0x04: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case 0x05: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
break;
case 0x06: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
Rs485WxLockInfo->WeixinLockState = CFG_Dev_CtrlWay_Is_Open;
break;
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رգ<D8B1>
Rs485WxLockInfo->WeixinLockState = CFG_Dev_CtrlWay_Is_Close;
break;
case 0x08: //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
break;
case 0x09: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case 0xB1: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
// MQTT_Ele_Ctrl_Open();
{
UINT8 control[6] = {0};
control[0] = 0x04;
control[1] = 0x00;
control[2] = LOOPCH01;
control[3] = 0x00;
control[4] = 0x01;
control[5] = 0x00;
DevActionCtrl(control, 6); //ȡ<><C8A1> <20><>
}
break;
case 0xB2: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹضϵ<D8B6>
// MQTT_Ele_Ctrl_Close();
{
UINT8 control[6] = {0};
control[0] = 0x04;
control[1] = 0x00;
control[2] = LOOPCH01;
control[3] = 0x00;
control[4] = 0x02;
control[5] = 0x00;
DevActionCtrl(control, 6); //ȡ<><C8A1> <20><>
}
break;
}
}
break;
case FREEGOTOUCENSURECMD:
if((DataLen>=0x06) && (DataLen <= WXLOCKUPMESSAGELEN + 0x06))
{
SendData[0] = 0xA7;
SendData[1] = FREEGOTOUCENSURECMD;
SendData[3] = 0x03;
SendData[6] = 0xEA; //ֱ<>ӻظ<D3BB><D8B8>ɹ<EFBFBD>
Rs485WxLockInfo->WeixinUpSendFlag = 0x01; //<2F><><EFBFBD>б<EFBFBD>־
Rs485WxLockInfo->WeixinUpMessageLen = DataLen-0x06;
memcpy(Rs485WxLockInfo->WeixinUpMessage, &Data[6], (DataLen-0x06));//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case FREEGOMACGETENSURECMD:
if(FREEGOWXLOCKASKMACLEN == DataLen) //<2F><><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>Ϊ19<31><39><EFBFBD>ֽ<EFBFBD>
{
SendData[0] = 0xA6; //
SendData[1] = FREEGOMACGETENSURECMD;
SendData[3] = 0x0F;
memcpy(&SendData[FREEGOHEADLEN], &Data[FREEGOHEADLEN], FREEGOMACLEN); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>MAC<41><43>ַ6<D6B7><36><EFBFBD>ֽ<EFBFBD>
#if MQTT_EN
SendData[FREEGOHEADLEN+FREEGOMACLEN] = mqtt_info.sub_flag; //HostRunInfo.SubcribePack_flag; //1<><31><EFBFBD>ijɹ<C4B3><30><CEB4><EFBFBD>ijɹ<C4B3>
#endif
// MacAddrCpy(&SendData[FREEGOHEADLEN+FREEGOMACLEN+FREEGONETSTATELEN]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mac<61><63>ַ
memcpy(&SendData[FREEGOHEADLEN+FREEGOMACLEN+FREEGONETSTATELEN], MACAddr, DeviceID_LEN); //<2F><><EFBFBD>豸MAC<41><43>ַ
}
break;
}
switch(Cmd)
{
case FREEGOCYCLEENSURECMD:
case FREEGOTOUCENSURECMD:
SendData[2] = CheckSum_Overlook_Check(SendData, FREEGOWXLOCKASKLEN, 0x02); //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
MCU485_SendString(BUS_Public->port,SendData,FREEGOWXLOCKASKLEN);
// RS485_Port_SendFun(CfgDevAdd, SendData, FREEGOWXLOCKASKLEN, FREEGOASKWAITTIME);
break;
case FREEGOMACGETENSURECMD:
SendData[2] = CheckSum_Overlook_Check(SendData, FREEGOWXLOCKASKMACLEN, 0x02); //<2F><>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
MCU485_SendString(BUS_Public->port,SendData,FREEGOWXLOCKASKLEN);
// RS485_Port_SendFun(CfgDevAdd, SendData, FREEGOWXLOCKASKMACLEN, FREEGOASKWAITTIME);
break;
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>д<EFBFBD><D0B4><EFBFBD>*/
void Freego_Rs485_WxLock_Pro(uint8_t *Data, CFG_Dev_AddP CfgDevAdd)
{
RS485_WxLock_INFOP Rs485WxLockInfo;
Rs485WxLockInfo = CfgDevAdd->DevDataStruct;
// Service.food_plate = Data[1]; //ͬ<><CDAC>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>
switch(Data[1])
{
case 0x01:
Rs485WxLockInfo->WeixinLockState = DEV_CTRLWAY_OPEN; //<2F><>״̬ͬ<CCAC><CDAC>
break;
case 0x02:
Rs485WxLockInfo->WeixinLockState = DEV_CTRLWAY_CLOSE;
break;
default:
Rs485WxLockInfo->WeixinLockState = DEV_CTRLWAY_INVALID; //<2F><>Ч<EFBFBD>ģ<EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
break;
}
if(Rs485WxLockInfo->WeixinLockStateLast != Rs485WxLockInfo->WeixinLockState) //
{
Rs485WxLockInfo->WeixinLockStateLast = Rs485WxLockInfo->WeixinLockState;
Rs485WxLockInfo->WeixinLockAction = Rs485WxLockInfo->WeixinLockState; //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485WxLockInfo->WeixinLockUpFlag = 0x01; //΢<><CEA2><EFBFBD><EFBFBD>״̬<D7B4>ϱ<EFBFBD><CFB1><EFBFBD>־
}
Rs485WxLockInfo->DoorLockVoltage = Data[8] + (Data[9]<<8);
Rs485WxLockInfo->WeixinLockUpVol = Rs485WxLockInfo->DoorLockVoltage*10/6; //<2F><><EFBFBD><EFBFBD><EFBFBD>ٷֱ<D9B7>
// Rs485WxLockInfo->DoorLockVoltageL = Data[2];//; //0x88
// Rs485WxLockInfo->DoorLockVoltageH = Data[3];//; //0x13
}

View File

@@ -0,0 +1,17 @@
#ifndef _BLV_485_DEV_FREEGOLOCKFUN_H_
#define _BLV_485_DEV_FREEGOLOCKFUN_H_
#include "stdint.h"
#include "BLV_485_Dev_WeixinLockFun.h"
void Freego_RS485_WxLockFun_Init(Device_Public_Information_G *BUS_Public, RS485_WxLock_INFO *Rs485WxLockInfo);
#endif

View File

@@ -0,0 +1,481 @@
/**
******************************************************************************
* @file BLV_485_Dev_FreshAirFun.c
* @author BLW RCU development Team <09>ֿ<EFBFBD><D6BF><EFBFBD>
* @version V1.0.0
* @date 2023<32><33>2<EFBFBD><32>24<32><34>
* @brief <20>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_FreshAirFun.h"
/*<2A><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ*/
#include "BLV_485_Dev_BLWFreshAirFun.h"
#include "BLV_485_Dev_CLEDFreshAirFun.h"
/*<2A><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_BLW_FreshAir_Flag, BLW_RS485_FreshAir_Init) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_CLED_FreshAir_Flag, BLW_RS485_CLEDFreshAir_Init) //CLED<45>·<EFBFBD>
//#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
//#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
//#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define FRESHAIR_MAXRET 0x03 //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
uint8_t FreshAir_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType); //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Set_FreshAir_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
void CLED_FreshAir_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType);
uint8_t CLED_FreshAir_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*******************************************************************************
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* len <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* data <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>׵<EFBFBD>ַ
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_FreshAirFun_Init(uint16_t len, uint8_t *data)
{
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public, 0, sizeof(Device_Public_Information_G)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
memset(&FreshAir_Info, 0, sizeof(RS485_FreshAir_INFO)); //˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.addr = data[1]; //<2F>豸485<38><35>ַ
BUS_Public.type = data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = data[3] + (data[4]<<8) + (data[5]<<16) + (data[6]<<24); //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
if(data[7]==ENUM_RS485_DEV_PRO_01)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = FreshAir_Input_Check; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Set_FreshAir_Func; //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
else if(data[7]==ENUM_RS485_DEV_PRO_02)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = CLED_FreshAir_Input_Check; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = CLED_FreshAir_Func; //CLED<45>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FreshAir_Info.DevOffline = FreshAir_Info.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(data[7]) //Э<><D0AD><EFBFBD>ж<EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &FreshAir_Info);break;
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &FreshAir_Info);break;
// case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &FreshAir_Info);break;
// case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &FreshAir_Info);break;
}
switch(data[2]) //<2F>˿<EFBFBD><CBBF>ж<EFBFBD>
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Act485_Info.baud = BUS_Public.baud; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ:%d", Act485_Info.baud);
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.baud = BUS_Public.baud; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>ֵ:%d", Poll485_Info.baud);
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* dev_info <09>߼<EFBFBD><DFBC>ļ<EFBFBD><C4BC><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* data <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>׵<EFBFBD>ַ
* data_len <09><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void BLW_RS485_FreshAirFun_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public, 0, sizeof(Device_Public_Information_G)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
memset(&FreshAir_Info, 0, sizeof(RS485_FreshAir_INFO)); //˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version; //<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
if(data[7]==ENUM_RS485_DEV_PRO_01)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = FreshAir_Input_Check; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Set_FreshAir_Func; //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
else if(data[7]==ENUM_RS485_DEV_PRO_02)
{
BUS_Public.DevFunInfo.Dev_Input_Type_Get = CLED_FreshAir_Input_Check; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Output_Ctrl = CLED_FreshAir_Func; //CLED<45>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
FreshAir_Info.DevOffline = FreshAir_Info.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>ж<EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &FreshAir_Info);break;
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &FreshAir_Info);break;
// case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &FreshAir_Info);break;
// case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &FreshAir_Info);break;
}
switch(dev_info->port) //<2F>˿<EFBFBD><CBBF>ж<EFBFBD>
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* @brief <20>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* CfgDevAddIn <09><><EFBFBD><EFBFBD><EBB4A5><EFBFBD>ڵ<EFBFBD>
* DevInputLoop <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* DevInputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval
CtrlInvalid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
CtrlValid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
* @attention None
*******************************************************************************/
uint8_t FreshAir_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType)
{
uint8_t rec = CtrlInvalid; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>
// static uint8_t on_off_last = 0, wind_velocity_last = 0; //<2F><>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t keep_flag = 0x00;
if(CfgDevAddIn == NULL) return rec;
FreshAir_Content_Struct FreshAir_Input; //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), CfgDevAddIn); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), CfgDevAddIn+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FreshAir_Input.on_off = DevInputType & 0x01; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>
FreshAir_Input.wind_velocity = (DevInputType >> 8) & 0x0F; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
if(FreshAir_Info.new_state.on_off != FreshAir_Info.last_state.on_off || FreshAir_Info.new_state.wind_velocity != FreshAir_Info.last_state.wind_velocity) //<2F><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>
{
if(FreshAir_Input.on_off == FRESHAIR_ON) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
if(FreshAir_Info.new_state.on_off == FRESHAIR_ON) //<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
if(FreshAir_Input.wind_velocity == FreshAir_Info.new_state.wind_velocity) //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
{
FreshAir_Info.last_state.on_off = FreshAir_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FreshAir_Info.last_state.wind_velocity = FreshAir_Info.new_state.wind_velocity; //<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD>·統ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>ٶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FreshAir_Input.wind_velocity);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
if(FreshAir_Input.on_off == FRESHAIR_OFF) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>Ϊ<EFBFBD>ػ<EFBFBD>
{
if(FreshAir_Info.new_state.on_off == FRESHAIR_OFF) //<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC>ػ<EFBFBD>
{
if(FreshAir_Input.wind_velocity == 0x00) //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϊ0
{
FreshAir_Info.last_state.on_off = FreshAir_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FreshAir_Info.last_state.wind_velocity = FreshAir_Info.new_state.wind_velocity; //<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD>·統ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>ٶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FreshAir_Input.wind_velocity);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
}
if(keep_flag == 0x01)
{
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), CfgDevAddIn); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), CfgDevAddIn + Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return rec;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* DevAddrIn <09><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
* DevInputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* DevAddrOut <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
* DevOutputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* DevOutputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void Set_FreshAir_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType)
{
uint8_t function, content; //<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>
uint8_t save_flag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(DevAddrOut == NULL)
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), DevAddrOut+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
function = DevOutputType & 0x00FF; //ȡ<><C8A1>
content = (DevOutputType >> 8) & 0x00FF; //ȡ<><C8A1>
switch(function) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case FRESHAIR_ON_OFF_FUNCTION: //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
switch(content) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case FRESHAIR_ON: //<2F><><EFBFBD><EFBFBD>
case FRESHAIR_OFF: //<2F>ػ<EFBFBD>
FreshAir_Info.ctrl_content.on_off = content;
FreshAir_Info.ctrl_flag.on_off = 0x01; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>1
FreshAir_Info.ctrl_cnt.on_off = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD>·翪<C2B7>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD><EFBFBD><EFBFBD>·翪<EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d ״̬:%d",BUS_Public.addr,DevOutputLoop,FreshAir_Info.ctrl_content.on_off);
break;
}
break;
case FRESHAIR_WIND_VELOCITY_FUNCTION: //<2F><><EFBFBD>÷<EFBFBD><C3B7>ٹ<EFBFBD><D9B9><EFBFBD>
switch(content) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
case WIND_VELOCITY_HIGH: //<2F><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>
case WIND_VELOCITY_MID: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case WIND_VELOCITY_LOW: //<2F><><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>
if(FreshAir_Info.new_state.on_off == FRESHAIR_ON) //ֻ<><D6BB><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>״̬<D7B4>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
{
FreshAir_Info.ctrl_content.wind_velocity = content;
FreshAir_Info.ctrl_flag.wind_velocity = 0x01; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>1
FreshAir_Info.ctrl_cnt.wind_velocity = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ٷ<EFBFBD><D9B7>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٿ<EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d ״̬:%d",BUS_Public.addr,DevOutputLoop,FreshAir_Info.ctrl_content.wind_velocity);
}
break;
}
break;
// case FRESHAIR_READ_REGISTER_FUNCTION: //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// switch(content)
// {
// case REGISTER0: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>0
// case REGISTER1: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>1
// case REGISTER2: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>2
// case REGISTER3: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>3
// case REGISTER4: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>4
// case REGISTER5: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>5
// case REGISTER6: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>6
// case REGISTER7: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>7
// case REGISTER8: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>8
// case REGISTER9: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>9
// case REGISTER10://<2F>Ĵ<EFBFBD><C4B4><EFBFBD>10
// break;
// }
// break;
// case FRESHAIR_WRITE_REGISTER_FUNCTION: //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// switch(content)
// {
// case REGISTER0: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>0
// case REGISTER1: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>1
// case REGISTER2: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>2
// case REGISTER3: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>3
// case REGISTER4: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>4
// case REGISTER5: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>5
// case REGISTER6: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>6
// case REGISTER7: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>7
// case REGISTER8: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>8
// case REGISTER9: //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>9
// case REGISTER10://<2F>Ĵ<EFBFBD><C4B4><EFBFBD>10
// break;
// }
// break;
}
if(save_flag == 0x01)
{
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info,
sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), DevAddrOut + Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
/*******************************************************************************
* @brief CLED<45><44><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* @param
* DevAddrIn <09><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
* DevInputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* DevAddrOut <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
* DevOutputLoop <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* DevOutputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval None
* @attention None
*******************************************************************************/
void CLED_FreshAir_Func(uint32_t DevAddrIn,uint16_t DevInputLoop,uint32_t DevAddrOut,uint16_t DevOutputLoop,uint16_t DevOutputType)
{
uint8_t onoff, wind; //<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>
uint8_t save_flag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(DevAddrOut == NULL)
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), DevAddrOut+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
onoff = DevOutputType & 0x00FF; //ȡ<><C8A1>
wind = (DevOutputType >> 8) & 0x00FF; //ȡ<><C8A1>
switch(onoff)
{
case 0x00:
case 0x01:
FreshAir_Info.ctrl_content.on_off = onoff;
FreshAir_Info.ctrl_flag.on_off = 0x01; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD><D8BB><EFBFBD>1
FreshAir_Info.ctrl_cnt.on_off = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD>·翪<C2B7>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
break;
}
switch(wind)
{
case 0x00:
case 0x01:
case 0x02:
case 0x03:
FreshAir_Info.ctrl_content.wind_velocity = wind;
FreshAir_Info.ctrl_flag.wind_velocity = 0x01; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>1
FreshAir_Info.ctrl_cnt.wind_velocity = FRESHAIR_MAXRET; //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ٷ<EFBFBD><D9B7>ʹ<EFBFBD><CDB4><EFBFBD>
save_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>1
break;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD><EFBFBD>CLED<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d <20><><EFBFBD>ػ<EFBFBD>:%d <20><><EFBFBD><EFBFBD>:%d",\
BUS_Public.addr,DevOutputLoop,FreshAir_Info.ctrl_content.on_off,FreshAir_Info.ctrl_content.wind_velocity);
if(save_flag == 0x01)
{
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), DevAddrOut); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), DevAddrOut + Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CLED<45>·籣<C2B7><EFBFBD><E6A3AC>ַ:%d <20><>·%d <20><><EFBFBD>ػ<EFBFBD>:%d <20><><EFBFBD><EFBFBD>:%d",\
BUS_Public.addr,DevOutputLoop,FreshAir_Info.ctrl_content.on_off,FreshAir_Info.ctrl_content.wind_velocity);
}
}
/*******************************************************************************
* @brief CLED<45>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* CfgDevAddIn <09><><EFBFBD><EFBFBD><EBB4A5><EFBFBD>ڵ<EFBFBD>
* DevInputLoop <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* DevInputType <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval
CtrlInvalid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
CtrlValid - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
* @attention None
*******************************************************************************/
uint8_t CLED_FreshAir_Input_Check(uint32_t CfgDevAddIn,uint16_t DevInputLoop,uint16_t DevInputType)
{
uint8_t rec = CtrlInvalid; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݣ<EFBFBD>
// static uint8_t on_off_last = 0, wind_velocity_last = 0; //<2F><>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t keep_flag = 0x00;
if(CfgDevAddIn == NULL) return rec;
FreshAir_Content_Struct FreshAir_Input; //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485_FreshAir_INFO FreshAir_Info; //<2F>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), CfgDevAddIn); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), CfgDevAddIn+Dev_Privately); //<2F><>ȡ˽<C8A1><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FreshAir_Input.on_off = DevInputType & 0xFF; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>
FreshAir_Input.wind_velocity = (DevInputType >> 8) & 0xFF; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
if(FreshAir_Info.new_state.on_off != FreshAir_Info.last_state.on_off || FreshAir_Info.new_state.wind_velocity != FreshAir_Info.last_state.wind_velocity) //<2F><>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>
{
if(FreshAir_Input.on_off == FRESHAIR_ON) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
if(FreshAir_Info.new_state.on_off == FRESHAIR_ON) //<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
if(FreshAir_Input.wind_velocity == FreshAir_Info.new_state.wind_velocity) //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
{
FreshAir_Info.last_state.on_off = FreshAir_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FreshAir_Info.last_state.wind_velocity = FreshAir_Info.new_state.wind_velocity; //<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CLED<EFBFBD>·統ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>ٶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FreshAir_Input.wind_velocity);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
if(FreshAir_Input.on_off == FRESHAIR_OFF) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>Ϊ<EFBFBD>ػ<EFBFBD>
{
if(FreshAir_Info.new_state.on_off == FRESHAIR_OFF) //<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬Ϊ<CCAC>ػ<EFBFBD>
{
if(FreshAir_Input.wind_velocity == 0x00) //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϊ0
{
FreshAir_Info.last_state.on_off = FreshAir_Info.new_state.on_off; //<2F><><EFBFBD>¿<EFBFBD><C2BF>ػ<EFBFBD>״̬
FreshAir_Info.last_state.wind_velocity = FreshAir_Info.new_state.wind_velocity; //<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD>״̬
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CLED<EFBFBD>·統ǰ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>ǰ %d <20><><EFBFBD>ٶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>",FreshAir_Input.wind_velocity);
rec = CtrlValid;
keep_flag = 0x01;
}
}
}
}
if(keep_flag == 0x01)
{
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&FreshAir_Info, sizeof(RS485_FreshAir_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ȡ<EFBFBD><C8A1>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), CfgDevAddIn); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&FreshAir_Info,sizeof(RS485_FreshAir_INFO), CfgDevAddIn + Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return rec;
}

View File

@@ -0,0 +1,67 @@
#ifndef __BLV_485_DEV_FRESHAIRFUN_H
#define __BLV_485_DEV_FRESHAIRFUN_H
#include "BLV_Dev_Action.h"
#include "BLV_All_Dev_Init.h"
#define FRESHAIR_ON_OFF_FUNCTION 0x01 //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
#define FRESHAIR_WIND_VELOCITY_FUNCTION 0x04 //<2F><><EFBFBD>ٹ<EFBFBD><D9B9><EFBFBD>
#define FRESHAIR_READ_REGISTER_FUNCTION 0x06 //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FRESHAIR_WRITE_REGISTER_FUNCTION 0x07 //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FRESHAIR_ON 0x01 //<2F>·翪<C2B7><E7BFAA>
#define FRESHAIR_OFF 0x00 //<2F>·<EFBFBD><C2B7>ػ<EFBFBD>
/* <20>·<EFBFBD>û<EFBFBD><C3BB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD> */
#define WIND_VELOCITY_HIGH 0x01 //<2F><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>
#define WIND_VELOCITY_MID 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define WIND_VELOCITY_LOW 0x03 //<2F><><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>
#define REGISTER0 0x00 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>0
#define REGISTER1 0x01 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>1
#define REGISTER2 0x02 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>2
#define REGISTER3 0x03 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>3
#define REGISTER4 0x04 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>4
#define REGISTER5 0x05 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>5
#define REGISTER6 0x06 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>6
#define REGISTER7 0x07 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>7
#define REGISTER8 0x08 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>8
#define REGISTER9 0x09 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>9
#define REGISTER10 0x0A //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>10
typedef struct
{
uint8_t on_off: 2; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t wind_velocity: 2; //<2F><><EFBFBD>ٱ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t read_register: 2; //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t write_register: 2; //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))FreshAir_Ctrl_Struct; //485<38>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƽ<C6BD><E1B9B9>
typedef struct
{
uint8_t on_off; //<2F><><EFBFBD>ػ<EFBFBD>
uint8_t wind_velocity; //<2F><><EFBFBD><EFBFBD>
uint8_t indoor_oc; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t read_register; //Ҫ<><D2AA><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
uint8_t write_register; //Ҫд<D2AA>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
uint8_t register_num; //Ҫ<><D2AA><EFBFBD><EFBFBD>д<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t write_data; //Ҫд<D2AA><D0B4><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))FreshAir_Content_Struct; //485<38>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
FreshAir_Ctrl_Struct ctrl_flag; //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
FreshAir_Ctrl_Struct ctrl_cnt; //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
FreshAir_Content_Struct ctrl_content; //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FreshAir_Content_Struct ctrl_content_last; //<2F>·<EFBFBD><C2B7><EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FreshAir_Content_Struct new_state; //<2F>·統ǰ״̬
FreshAir_Content_Struct last_state;
uint8_t DevSendCnt; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬
uint8_t DevOfflineLast; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_FreshAir_INFO; //485<38>·<EFBFBD><C2B7>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_RS485_FreshAirFun_Init(uint16_t len, uint8_t *data); //<2F><>ʼ<EFBFBD><CABC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
void BLW_RS485_FreshAirFun_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len); //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#endif

View File

@@ -0,0 +1,593 @@
/**
******************************************************************************
* @file BLV_485_Dev_HuaErSiFun.c
* @author BLW RCU development Team <09>ֿ<EFBFBD><D6BF><EFBFBD>
* @version V1.0.0
* @date 2022<32><32>10<31><30>13<31><33>
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3.0Э<EFBFBD><EFBFBD>
ע<>⣺C5<43><35><EFBFBD>ֺ<EFBFBD>485<38><35><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "includes.h"
#include "BLV_485_Dev_HuaErSiFun.h"
/***<2A>ֲ<EFBFBD><D6B2><EFBFBD>ʼ***/
#define HUAERSI_MAX_SEND_CNT 0x03 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define HUAERSI_READ_TIME 5000 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7>ѯʱ<D1AF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define HUAERSI_ADDR_CORRECT 0x00 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ȷ
#define HUAERSI_ADDR_READ 0x01 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ַ
#define HUAERSI_ADDR_WRITE 0x02 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>豸д<E8B1B8><D0B4>ַ
#define HUAERSI_DEFAULT_VOLUME 0x08 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>豸Ĭ<E8B1B8><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define HUAERSI_COMMAND_FLAG 0x04 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Դ<EFBFBD><D4B4><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>λ
#define HUAERSI_RECEIVE_MAX_DATA_LEN 262 //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
/***<2A>ֲ<EFBFBD><D6B2><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***/
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_RS485_Music_Data_Init(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485Music)
{
Rs485Music->huaersi_addr_command = HUAERSI_ADDR_READ; //<2F>û<EFBFBD><C3BB><EFBFBD>˼<EFBFBD><CBBC>ַ<EFBFBD><D6B7>ȡ
#if LOGIC_FILE_EN
Rs485Music->DevMusicCtrlState[Rs485Music->MusicLoopValidNum-1].CtrlCont.CtrlMode = HUAERSI_DEFAULT_VOLUME; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ǰͨ<C7B0><CDA8>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8
#else
Rs485Music->DevMusicCtrlState[Rs485Music->MusicLoopValidNum-1].CtrlCont.CtrlVoice = HUAERSI_DEFAULT_VOLUME; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ǰͨ<C7B0><CDA8>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8
#endif
Rs485Music->MusicStateCtrlFlag[Rs485Music->MusicLoopValidNum-1].MusicReadFlagVar = 0x01; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music->MusicStateCtrlCnt[Rs485Music->MusicLoopValidNum-1].MusicReadFlagVar = HUAERSI_MAX_SEND_CNT; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
Rs485Music->huaersi_onoff_control[Rs485Music->MusicLoopValidNum-1] = HUAERSI_COMMAND_FLAG | HUAERSI_MAX_SEND_CNT; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>3<EFBFBD><33>
Rs485Music->huaersi_onoff[Rs485Music->MusicLoopValidNum-1] = CFG_Dev_CtrlWay_Is_Close; //Ĭ<>Ϲػ<CFB9>
#if LOGIC_FILE_EN
Rs485Music->DevMusicCtrlState[Rs485Music->MusicLoopValidNum-1].DevMusicCtrlWay.CtrlDir = MUSIC_STOP; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
#else
Rs485Music->DevMusicCtrlState[Rs485Music->MusicLoopValidNum-1].CtrlCont.CtrlMode = MUSIC_STOP; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
#endif
Rs485Music->MusicStateCtrlFlag[Rs485Music->MusicLoopValidNum-1].MusicModeCtrlVar = 0x01; //<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>
Rs485Music->MusicStateCtrlCnt[Rs485Music->MusicLoopValidNum-1].MusicModeCtrlVar = 0x03; //<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƴ<EFBFBD><C6B4><EFBFBD>
BUS_Public->polling_cf = (uint32_t)&HuaErSi_Music_Polling_Ctrl; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
BUS_Public->processing_cf = (uint32_t)&HuaErSi_Music_Data_Processing; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֽ<EFBFBD><D6BD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>BUS_Public.wait_time<6D><65>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* @retval send_time<6D><65>RS485OCCUPYNOTIME<4D><45><EFBFBD><EFBFBD>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1> RS485OCCUPYTIME<4D><45><EFBFBD><EFBFBD>485<38><35><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
* @attention None
*******************************************************************************/
uint8_t HuaErSi_Music_Polling_Ctrl(uint32_t dev_addr)
{
uint8_t i, flag = 0, send_time = RS485OCCUPYNOTIME; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><E8A3AC><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨Ĭ<E4A3A8>Ϸ<EFBFBD><CFB7>Ͳ<EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
RS485_MUSIC_INFO Rs485MusicInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485MusicInfo, sizeof(RS485_MUSIC_INFO), dev_addr+Dev_Privately); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(SysTick_1ms >= Rs485MusicInfo.huaersi_read_addr_time) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
Rs485MusicInfo.huaersi_read_addr_time = SysTick_1ms + HUAERSI_READ_TIME; //<2F><>һ<EFBFBD>ζ<EFBFBD>ȡʱ<C8A1><CAB1>
switch(Rs485MusicInfo.huaersi_addr_command) //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
case HUAERSI_ADDR_READ: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ַ
HuaErSi_Background_Read_Addr(&BUS_Public, &Rs485MusicInfo); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break;
case HUAERSI_ADDR_WRITE: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>豸д<E8B1B8><D0B4>ַ
HuaErSi_Background_Set_Addr(&BUS_Public, &Rs485MusicInfo); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break;
}
}
for(i = 0; i < Rs485MusicInfo.MusicLoopValidNum; i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
{
if(Rs485MusicInfo.huaersi_onoff[i] != Rs485MusicInfo.huaersi_onoff_last[i]) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD>״̬<D7B4><CCAC>һ<EFBFBD><D2BB>
{
Rs485MusicInfo.huaersi_onoff_last[i] = Rs485MusicInfo.huaersi_onoff[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD>״̬
Rs485MusicInfo.huaersi_onoff_control[i] = HUAERSI_COMMAND_FLAG | HUAERSI_MAX_SEND_CNT; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>3<EFBFBD><33>
}
/***û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֻ<EEA3AC><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ܵõ<DCB5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С***/
if(Rs485MusicInfo.MusicStateCtrlFlag[i].MusicReadFlagVar == 0x01) //<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
{
if(Rs485MusicInfo.MusicStateCtrlCnt[i].MusicReadFlagVar != 0x00) //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.MusicStateCtrlCnt[i].MusicReadFlagVar--; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
Rs485MusicInfo.MusicStateCtrlFlag[i].MusicReadFlagVar = 0x00; //<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
Rs485MusicInfo.MusicChannelNo = i; //<2F><>ǰͨ<C7B0><CDA8><EFBFBD>Ÿ<EFBFBD>ֵ
HuaErSi_Background_Specifies_Volume_Control(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
else if((((Rs485MusicInfo.huaersi_onoff_control[i]) & HUAERSI_COMMAND_FLAG) >> 2) == 1) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>1
{
if(((Rs485MusicInfo.huaersi_onoff_control[i]) & HUAERSI_MAX_SEND_CNT) != 0) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.huaersi_onoff_control[i]--; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(((Rs485MusicInfo.huaersi_onoff_control[i]) & HUAERSI_MAX_SEND_CNT) == 0) //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.huaersi_onoff_control[i] &= ~(HUAERSI_COMMAND_FLAG); //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>0
}
Rs485MusicInfo.MusicChannelNo = i; //<2F><>ǰͨ<C7B0><CDA8><EFBFBD>Ÿ<EFBFBD>ֵ
HuaErSi_Background_Power_Control(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
if(Rs485MusicInfo.MusicStateCtrlFlag[i].MusicModeCtrlVar == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD>򿪣<EFBFBD>
{
if(Rs485MusicInfo.MusicStateCtrlCnt[i].MusicModeCtrlVar != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.MusicStateCtrlCnt[i].MusicModeCtrlVar--; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
Rs485MusicInfo.MusicStateCtrlFlag[i].MusicModeCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0<EFBFBD><30><EFBFBD>رգ<D8B1>
}
Rs485MusicInfo.MusicChannelNo = i; //<2F><>ǰͨ<C7B0><CDA8><EFBFBD>Ÿ<EFBFBD>ֵ
HuaErSi_Background_Music_Control(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƺ<EFBFBD><C6BA><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
else if(Rs485MusicInfo.MusicStateCtrlFlag[i].MusicVoiceCtrlVar == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD>򿪣<EFBFBD>
{
if(Rs485MusicInfo.MusicStateCtrlCnt[i].MusicVoiceCtrlVar != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.MusicStateCtrlCnt[i].MusicVoiceCtrlVar--; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
Rs485MusicInfo.MusicStateCtrlFlag[i].MusicVoiceCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0<EFBFBD><30><EFBFBD>رգ<D8B1>
}
Rs485MusicInfo.MusicChannelNo = i; //<2F><>ǰͨ<C7B0><CDA8><EFBFBD>Ÿ<EFBFBD>ֵ
HuaErSi_Background_Volume_Control(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
else if((((Rs485MusicInfo.huaersi_track_control[i]) & HUAERSI_COMMAND_FLAG) >> 2) == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD>򿪣<EFBFBD>
{
if(((Rs485MusicInfo.huaersi_track_control[i]) & HUAERSI_MAX_SEND_CNT) != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.huaersi_track_control[i]--; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(((Rs485MusicInfo.huaersi_track_control[i]) & HUAERSI_MAX_SEND_CNT) == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485MusicInfo.huaersi_track_control[i] &= ~(HUAERSI_COMMAND_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>0
}
Rs485MusicInfo.MusicChannelNo = i; //<2F><>ǰͨ<C7B0><CDA8><EFBFBD>Ÿ<EFBFBD>ֵ
HuaErSi_Background_Track_Control(&BUS_Public, &Rs485MusicInfo, i); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
send_time = RS485OCCUPYTIME; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
break; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
}
if(send_time == RS485OCCUPYTIME) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʱ<EFBFBD><CAB1>
{
flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if(Rs485MusicInfo.DevSendCnt > HUAERSI_MAX_SEND_CNT) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
{
if(Rs485MusicInfo.DevOffline != DEV_IS_OFFLINE) //<2F><EFBFBD><E8B1B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"HuaErSi Music DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_RS485_MUSIC, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485MusicInfo.DevOffline = DEV_IS_OFFLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485MusicInfo.DevOffline != Rs485MusicInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485MusicInfo.DevOfflineLast = Rs485MusicInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ط<EFBFBD>
{
Rs485MusicInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485MusicInfo.comm_record, 0x01, 0x00);
Rs485MusicInfo.inquire_tick = SysTick_1ms;
}
if(flag == 1)
{
BUS_Public.check = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485MusicInfo, sizeof(RS485_MUSIC_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><><EFBFBD><EFBFBD><E6B9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&Rs485MusicInfo, sizeof(RS485_MUSIC_INFO), dev_addr+Dev_Privately); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return send_time;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֽ<EFBFBD><D6BD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <09><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr 485<38><35><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ַ
* DataLen <09><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* @retval 0-<2D>ǻ<EFBFBD><C7BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>1-<2D><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention <09><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>
* ͷ <20><>ַ Len <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> SOR β
* FC 00 00 03 03 00 00 06 FE
*******************************************************************************/
uint8_t HuaErSi_Music_Data_Processing(uint32_t dev_addr, uint32_t data_addr, uint16_t len)
{
uint8_t rec = 1, data[HUAERSI_RECEIVE_MAX_DATA_LEN]; //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
RS485_MUSIC_INFO Rs485MusicInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
SRAM_DMA_Read_Buff(data, len, data_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), dev_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((data[0] != 0xFC) || ((data[3]+0x06) != len) || (data[len-1] != 0xFE))
{
return rec;
}
if(data[len-2] == (SOR_CRC(&data[1], len-3)))
{
rec = 0;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485MusicInfo, sizeof(RS485_MUSIC_INFO), dev_addr+Dev_Privately); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Rs485MusicInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485Music DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_RS485_MUSIC, BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485MusicInfo.DevSendCnt = 0x00;
Rs485MusicInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485MusicInfo.DevOffline != Rs485MusicInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485MusicInfo.DevOfflineLast = Rs485MusicInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485MusicInfo.comm_record, 0x02, 0x01);
switch(data[3])
{
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
switch(data[4])
{
case 0x69: //<2F><>ȡ<EFBFBD><C8A1>ַ<EFBFBD>ظ<EFBFBD>
if(data[6] == 0x00 || data[6] == 0x01) //ֻ<><D6BB><EFBFBD><EFBFBD>0<EFBFBD><30>1<EFBFBD><31>ַ
{
Rs485MusicInfo.huaersi_addr = data[6]; //<2F>õ<EFBFBD>ʵ<EFBFBD>ʵĻ<CAB5><C4BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
Rs485MusicInfo.huaersi_addr_command = HUAERSI_ADDR_WRITE; //<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>豸д<E8B1B8><D0B4>ַ
}
if(data[6] == BUS_Public.addr && data[6] < 0x02) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>ַһ<D6B7><D2BB>
{
Rs485MusicInfo.huaersi_addr_command = HUAERSI_ADDR_CORRECT; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ȷ
}
break;
case 0x04: //<2F><><EFBFBD>õ<EFBFBD>ַ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ַ<EFBFBD>Ż<EFBFBD><C5BB>ظ<EFBFBD><D8B8><EFBFBD>
Rs485MusicInfo.huaersi_addr_command = HUAERSI_ADDR_READ; //<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ַ
break;
case 0x12: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
Rs485MusicInfo.MusicStateCtrlFlag[Rs485MusicInfo.MusicChannelNo].MusicReadFlagVar = 0x00; //<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
break;
case 0x10: //<2F><><EFBFBD>Ż<EFBFBD>ӭ<EFBFBD>ʻظ<CABB>
Rs485MusicInfo.MusicStateCtrlFlag[Rs485MusicInfo.MusicChannelNo].MusicModeCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0
break;
case 0x03: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><D6B3>ÿ<EFBFBD><C3BF>ƻظ<C6BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD><C5A1><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>
switch(data[5])
{
case 0x00: //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
case 0x01: //<2F>ػ<EFBFBD><D8BB>ɹ<EFBFBD>
Rs485MusicInfo.huaersi_onoff_control[Rs485MusicInfo.MusicChannelNo] &= ~(HUAERSI_COMMAND_FLAG); //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>0
break;
case 0x02: //<2F><><EFBFBD>Żظ<C5BB>
case 0x03: //<2F><>ͣ<EFBFBD>ظ<EFBFBD>
Rs485MusicInfo.MusicStateCtrlFlag[Rs485MusicInfo.MusicChannelNo].MusicModeCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0
break;
case 0x06: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD>ӻظ<D3BB>
Rs485MusicInfo.MusicStateCtrlFlag[Rs485MusicInfo.MusicChannelNo].MusicVoiceCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0
break;
default:break;
}
break;
case 0x89: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>Żظ<C5BB>
Rs485MusicInfo.MusicStateCtrlFlag[Rs485MusicInfo.MusicChannelNo].MusicModeCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0
break;
case 0x28: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻظ<C6BB>
Rs485MusicInfo.huaersi_track_control[Rs485MusicInfo.MusicChannelNo] &= ~(HUAERSI_COMMAND_FLAG); //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>0
break;
default:break;
}
break;
default: //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ظ<EFBFBD>
Rs485MusicInfo.MusicStateCtrlFlag[Rs485MusicInfo.MusicChannelNo].MusicModeCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>0
break;
}
BUS_Public.check = 0x00; //У<><D0A3><EFBFBD><EFBFBD>0
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485MusicInfo,
sizeof(RS485_MUSIC_INFO)); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
SRAM_DMA_Write_Buff((uint8_t *)&Rs485MusicInfo,sizeof(RS485_MUSIC_INFO),dev_addr+Dev_Privately); //<2F><>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
}
return rec;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ѯ<EFBFBD><D1AF>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Read_Addr(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO* Rs485MusicInfo)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3> β
uint8_t data[7] = {0xFA, 0x00, 0x00, 0x01, 0x68, 0x69, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
MCU485_SendString(BUS_Public->port, data, 7); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ã<EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Set_Addr(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD>2 У<><D0A3> β
uint8_t data[9] = {0xFA, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[2] = Rs485MusicInfo->huaersi_addr; //<2F>ö<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ͨѶ
data[6] = 0x02; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
// data[6] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
data[7] = SOR_CRC(&data[1], 6); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data, 9); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Specifies_Volume_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3> β
uint8_t data[8] = {0xFA, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
#if LOGIC_FILE_EN
data[5] = Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8
#else
data[5] = Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlVoice; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8
#endif
data[6] = SOR_CRC(&data[1], 5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data, 8); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Power_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3> β
uint8_t data[8] = {0xFA, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
switch(Rs485MusicInfo->huaersi_onoff_last[DevOutputLoop]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD><D8BB><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
{
case CFG_Dev_CtrlWay_Is_Open: //<2F><><EFBFBD><EFBFBD>
data[4] = 0x10;
data[5] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Close: //<2F>ػ<EFBFBD>
data[4] = 0x10;
data[5] = 0x01;
break;
}
data[6] = SOR_CRC(&data[1], 5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data, 8); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>ĵ<EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Music_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3> β
uint8_t data1[8] = {0xFA, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD>3 У<><D0A3> β
uint8_t data2[10] = {0xFA, 0x00, 0x00, 0x04, 0x89, 0x03, 0x00, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data1[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
data2[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
#if LOGIC_FILE_EN
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir) //<2F>߼<EFBFBD><DFBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>Ŀ¼<C4BF>ж<EFBFBD>
#else
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //<2F><><EFBFBD>ݻ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ģʽ<C4A3>ж<EFBFBD>
#endif
{
case MUSIC_PLAY: //<2F><><EFBFBD><EFBFBD>
data2[7] = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_STOP: //<2F><>ͣ
data1[5] = 0x03;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
data1[5] = 0x0B;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
data1[5] = 0x0C;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
data1[5] = 0x27;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD>׿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
data2[7] = 0x02;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD>׿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
data2[7] = 0x03;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD>׿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
data2[7] = 0x04;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD>׿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
data2[7] = 0x05;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD>׿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
data2[7] = 0x06;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD>׿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
#if LOGIC_FILE_EN
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir) //<2F>߼<EFBFBD><DFBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>Ŀ¼<C4BF>ж<EFBFBD>
#else
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //<2F><><EFBFBD>ݻ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ģʽ<C4A3>ж<EFBFBD>
#endif
{
case MUSIC_STOP: //<2F><>ͣ
case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
data1[6] = SOR_CRC(&data1[1], 5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data1, 8); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case MUSIC_PLAY: //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
data2[8] = SOR_CRC(&data2[1], 7); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data2, 10); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Volume_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3> β
uint8_t data[8] = {0xFA, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
#if LOGIC_FILE_EN
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir) //<2F>߼<EFBFBD><DFBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>Ŀ¼<C4BF>ж<EFBFBD>
#else
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //<2F><><EFBFBD>ݻ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ģʽ<C4A3>ж<EFBFBD>
#endif
{
case MUSIC_VOICE_UP: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x07;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case MUSIC_VOICE_DOWN: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x06;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
data[6] = SOR_CRC(&data[1], 5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data, 8); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* BUS_Public <09><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* Rs485Music 485<38><35><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
* DevOutputLoop <09><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
* @retval None
* @attention None
*******************************************************************************/
void HuaErSi_Background_Track_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop)
{
/***<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>***/
//ͷ Ĭ<><C4AC> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3> β
uint8_t data[8] = {0xFA, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0xFE}; //Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
data[2] = BUS_Public->addr; //<2F><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>ֵ
switch(Rs485MusicInfo->DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDirect) //<2F><><EFBFBD>ݿ<EFBFBD><DDBF>Ʒ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>
{
case 0x05: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x06: //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x02;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>Ĺر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x03;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x08: //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x04;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>Ĺر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x09: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x05;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x0A: //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[5] = 0x06;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>Ĺر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
data[6] = SOR_CRC(&data[1], 5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
MCU485_SendString(BUS_Public->port, data, 8); //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}

View File

@@ -0,0 +1,18 @@
#ifndef _BLV_485_DEV_HUAERSI_H_
#define _BLV_485_DEV_HUAERSI_H_
#include "BLV_485_Dev_MusicFun.h"
/***<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ***/
void HuaErSi_RS485_Music_Data_Init(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485Music); //<2F><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
uint8_t HuaErSi_Music_Polling_Ctrl(uint32_t dev_addr); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
uint8_t HuaErSi_Music_Data_Processing(uint32_t dev_addr, uint32_t data_addr, uint16_t len); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֽ<EFBFBD><D6BD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void HuaErSi_Background_Read_Addr(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
void HuaErSi_Background_Set_Addr(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
void HuaErSi_Background_Specifies_Volume_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
void HuaErSi_Background_Power_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֵ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
void HuaErSi_Background_Music_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƺ<EFBFBD><C6BA><EFBFBD>
void HuaErSi_Background_Volume_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
void HuaErSi_Background_Track_Control(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485MusicInfo, uint16_t DevOutputLoop); //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
/***<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***/
#endif

View File

@@ -0,0 +1,961 @@
/**
******************************************************************************
* @file BLV_485_Dev_IN_CH6.c
* @author BLW RCU development Team
* @version
* @date 2022<32><32>04<30><34>20<32><30>
* @brief
* 485 <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EBA3BA>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @log Songhan 202204201500 <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ɨ<E8B1B8><C9A8><EFBFBD>±<EFBFBD>
* @log Songhan 202204212030 <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȷ<D9B6><C8B7><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_IN_CH6.h"
#include "string.h"
#include "DBG.h"
#include "SPI_SRAM.h"
#include "check_fun.h"
#include "usart.h"
#include "Log_api.h"
//#include "APP_SwitchCtrl.h"
#include "BLV_Nor_Dev_LVinputFun.h"
#include "APP_SwitchCtrl.h"
#define INCH6TYPE 0xF1 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ͨѶ<CDA8><D1B6>ʹ<EFBFBD><CAB9>
#define DEV_IN_CH6_Type 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define INCH6_DI_CH_MAX 0x06
#define INCH6_RecvData_Len_Max 0x20 //Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>21Byte
#define INCH6_Control_Num 2
#define INCH6_Query_State_Flag 0x0001 //<2F><>ѯ״̬
#define INCH6_Set_DIState_Flag 0x0002 //<2F><><EFBFBD><EFBFBD>DI״̬
#define INCH6_Query_State_Cmd 0x20
#define INCH6_Set_DIState_Cmd 0x25
#define INCH6_Query_Versions_Cmd 0x26 //<2F><>ѯ<EFBFBD><EFBFBD><E6B1BE> - <20><>ʱû<CAB1>ã<EFBFBD><C3A3><EFBFBD>Э<EFBFBD><D0AD>֧<EFBFBD><D6A7>
#define INCH6_DIState_Report_Cmd 0x28
#define BLV_INCH6_Reply_CMD 0xA0 //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
#define BLV_INCH6_Reply_Result 0x00 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
#define BLV_INCH6_Di_Result 0x05 //DIִ<49>гɹ<D0B3>
#define BLV_INCH6_Error_Result 0xF0 //<2F><><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#define INCH6_DI_Key_Type 0x01 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INCH6_DI_Pir_Type 0x02 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - PIR<49><52><EFBFBD><EFBFBD>
#define INCH6_DI_Dry_Type 0x03 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ɽӵ<C9BD>
#define INCH6_DI_Level_HIGH 0x20 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ
#define INCH6_DI_Level_LOW 0x10 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ
typedef enum{
DI_CH1,
DI_CH2,
DI_CH3,
DI_CH4,
DI_CH5,
DI_CH6,
DI_CH_MAX,
}INCH6_DI_NUM_E;
#if RS485_Dev_IN_CH6
uint8_t BLV_485_DEV_IN_CH6_Cycle_Call(uint32_t dev_addr);
uint8_t BLV_485_DEV_IN_CH6_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
uint8_t Dev_IN_CH6_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
/*******************************************************************************
* Function Name : BLV_485_DEV_IN_CH6_Data_Init
* Description : IN_CH6<48><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
data<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> - <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 1Byte<74><65><EFBFBD><EFBFBD><E8B1B8>ַ 1Byte<74><65><EFBFBD>˿ں<CBBF> 1Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4Byte<74><65>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1Byte<74><65><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 2Byte,<2C><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 2Byte,
data_len<65><6E><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
*******************************************************************************/
void BLV_485_DEV_IN_CH6_Data_Init(uint16_t data_len, uint8_t *data)
{
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevLVinputInfo,0,sizeof(NOR_LVINPUT_INFO));
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>*/
BUS_Public.type = data[0];
BUS_Public.addr = data[1];
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x64; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLV_485_DEV_IN_CH6_Cycle_Call;
BUS_Public.processing_cf = (uint32_t)&BLV_485_DEV_IN_CH6_Data_Processing;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_IN_CH6_InType_Get; //
/*<2A><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>*/
DevLVinputInfo.DI_Type[DI_CH1] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH2] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH3] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH4] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH5] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH6] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Detection_Time[DI_CH1] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH2] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH3] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH4] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH5] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH6] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Report_En[DI_CH1] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH2] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH3] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH4] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH5] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH6] = 0x01;
DevLVinputInfo.DI_set_flag = 0x3F;
DevLVinputInfo.control_flag |= INCH6_Set_DIState_Flag;
DevLVinputInfo.DevOffline = DevLVinputInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
if(data[8] > LVINPUTNUMMAX)
{
DevLVinputInfo.LVinputValidNum = LVINPUTNUMMAX;
}
else
{
DevLVinputInfo.LVinputValidNum = data[8]; //C1_LVINPUTNUMMAX;
}
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
// Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
}
/*******************************************************************************
* Function Name : BLV_485_DEV_IN_CH6_Data_Logic_Init
* Description : IN_CH6<48><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
data<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> - <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 1Byte<74><65><EFBFBD><EFBFBD><E8B1B8>ַ 1Byte<74><65><EFBFBD>˿ں<CBBF> 1Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4Byte<74><65>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1Byte<74><65><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 2Byte,<2C><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 2Byte,
data_len<65><6E><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
*******************************************************************************/
void BLV_485_DEV_IN_CH6_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info, uint8_t *data, uint16_t data_len)
{
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public;
uint16_t temp_len = 0;
uint8_t input_type = 0;
uint8_t input_level = 0;
uint8_t input_time = 0;
uint8_t input_set_flag = 0;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevLVinputInfo,0,sizeof(NOR_LVINPUT_INFO));
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>*/
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.Protocol = dev_info->version;
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x64; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLV_485_DEV_IN_CH6_Cycle_Call;
BUS_Public.processing_cf = (uint32_t)&BLV_485_DEV_IN_CH6_Data_Processing;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_IN_CH6_InType_Get; //
// /*<2A><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>*/
// DevLVinputInfo.DI_Type[DI_CH1] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
// DevLVinputInfo.DI_Type[DI_CH2] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
// DevLVinputInfo.DI_Type[DI_CH3] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
// DevLVinputInfo.DI_Type[DI_CH4] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
// DevLVinputInfo.DI_Type[DI_CH5] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
// DevLVinputInfo.DI_Type[DI_CH6] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
//
// DevLVinputInfo.DI_Detection_Time[DI_CH1] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
// DevLVinputInfo.DI_Detection_Time[DI_CH2] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
// DevLVinputInfo.DI_Detection_Time[DI_CH3] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
// DevLVinputInfo.DI_Detection_Time[DI_CH4] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
// DevLVinputInfo.DI_Detection_Time[DI_CH5] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
// DevLVinputInfo.DI_Detection_Time[DI_CH6] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
// DevLVinputInfo.DI_Report_En[DI_CH1] = 0x01;
// DevLVinputInfo.DI_Report_En[DI_CH2] = 0x01;
// DevLVinputInfo.DI_Report_En[DI_CH3] = 0x01;
// DevLVinputInfo.DI_Report_En[DI_CH4] = 0x01;
// DevLVinputInfo.DI_Report_En[DI_CH5] = 0x01;
// DevLVinputInfo.DI_Report_En[DI_CH6] = 0x01;
//
// DevLVinputInfo.DI_set_flag = 0x3F;
// DevLVinputInfo.control_flag |= INCH6_Set_DIState_Flag;
//
if(dev_info->input_num > LVINPUTNUMMAX)
{
DevLVinputInfo.LVinputValidNum = LVINPUTNUMMAX;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>DI<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ!");
}
else
{
DevLVinputInfo.LVinputValidNum = dev_info->input_num; //C1_LVINPUTNUMMAX;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>DI<EFBFBD><EFBFBD>· %d ",DevLVinputInfo.LVinputValidNum);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>*/
DevLVinputInfo.DevOffline = DevLVinputInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
temp_len = DevLVinputInfo.LVinputValidNum*4; //<2F><><EFBFBD><EFBFBD>DI<44><49><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>״̬
if((temp_len + LogicFile_DeviceInfo_InputSet) > data_len)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>DI<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD> %d - %d ",data_len,(temp_len + LogicFile_DeviceInfo_InputSet));
}
temp_len = 0;
for(uint8_t i=0;i<dev_info->input_num;i++)
{
input_set_flag = 0;
input_type = data[LogicFile_DeviceInfo_InputSet + temp_len + 0];
input_level = data[LogicFile_DeviceInfo_InputSet + temp_len + 1];
input_time = data[LogicFile_DeviceInfo_InputSet + temp_len + 2];
switch(input_type)
{
case INCH6_DI_Key_Type:
input_set_flag++;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - <20><><EFBFBD><EFBFBD>",i);
DevLVinputInfo.DI_Type[i] = INCH6_DI_Key_Type;
break;
case INCH6_DI_Pir_Type:
input_set_flag++;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - PIR",i);
DevLVinputInfo.DI_Type[i] = INCH6_DI_Pir_Type;
break;
case INCH6_DI_Dry_Type:
input_set_flag++;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - <20>ɽӵ<C9BD>",i);
DevLVinputInfo.DI_Type[i] = INCH6_DI_Dry_Type;
break;
default:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - <20><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>",i);
break;
}
switch(input_level)
{
case 0x01:
input_set_flag++;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ:<3A>ߵ<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>:%d0ms",i,input_time);
DevLVinputInfo.DI_Type[i] |= INCH6_DI_Level_HIGH;
DevLVinputInfo.DI_Detection_Time[i] = input_time;
break;
case 0x02:
input_set_flag++;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ:<3A>ߵ<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>:%d0ms",i,input_time);
DevLVinputInfo.DI_Type[i] |= INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Detection_Time[i] = input_time;
break;
default:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI%d - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>:%d0ms",i,input_time);
break;
}
if(input_set_flag != 0x02) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
{
DevLVinputInfo.DI_Type[i] = INCH6_DI_Key_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Detection_Time[i] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
}
temp_len +=4;
}
DevLVinputInfo.DI_Report_En[DI_CH1] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH2] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH3] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH4] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH5] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH6] = 0x01;
DevLVinputInfo.DI_set_flag = 0x3F;
DevLVinputInfo.control_flag |= INCH6_Set_DIState_Flag;
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
// Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
}
void BLV_485_DEV_IN_CH6_Data_Init2(uint8_t addr)
{
NOR_LVINPUT_INFO DevLVinputInfo;
Device_Public_Information_G BUS_Public;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevLVinputInfo,0,sizeof(NOR_LVINPUT_INFO));
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>*/
BUS_Public.type = DEV_IN_CH6_Type;
BUS_Public.addr = addr;
BUS_Public.port = Active_Port;
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x64; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLV_485_DEV_IN_CH6_Cycle_Call;
BUS_Public.processing_cf = (uint32_t)&BLV_485_DEV_IN_CH6_Data_Processing;
/*<2A><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>*/
DevLVinputInfo.DI_Type[DI_CH1] = INCH6_DI_Key_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH2] = INCH6_DI_Key_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH3] = INCH6_DI_Key_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH4] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH5] = INCH6_DI_Dry_Type | INCH6_DI_Level_HIGH;
DevLVinputInfo.DI_Type[DI_CH6] = INCH6_DI_Dry_Type | INCH6_DI_Level_HIGH;
DevLVinputInfo.DI_Detection_Time[DI_CH1] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH2] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH3] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH4] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH5] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH6] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Report_En[DI_CH1] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH2] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH3] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH4] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH5] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH6] = 0x01;
DevLVinputInfo.DI_set_flag = 0x3F;
DevLVinputInfo.control_flag |= INCH6_Set_DIState_Flag;
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
Act485_Info.device_num += 1;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit, "BLV_485_DEV_IN_CH6_Data_Init2 Active_Port Addr:%d",BUS_Public.addr);
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BAAF>
*@para
* DevAddr <20><EFBFBD><E8B1B8>ַ
* DevInputLoop <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>Χ0~LVinputValidNum
* DevInputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t Dev_IN_CH6_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr);
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevInputLoop >= DevLVinputInfo.LVinputValidNum)
{
return Ret;
}
if(DevInputType == DevLVinputInfo.DevReadBuf[DevInputLoop]) //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
{
DevLVinputInfo.DevReadBuf[DevInputLoop] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = CtrlValid;
}
if(CtrlValid == Ret)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", DevInputType);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);
}
return Ret;
}
/*******************************************************************************
* Function Name : INCH6_Query_State_Datasend
* Description : IN_CH6<48><36>ѯ״̬<D7B4><CCAC><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>
* Input :
port : <20><><EFBFBD>ݷ<EFBFBD><DDB7>Ͷ˿<CDB6>
DevLVinputInfo<66><6F><EFBFBD><EFBFBD><E8B1B8>Ϣ
* Return :
*******************************************************************************/
void INCH6_Query_State_Datasend(Device_Public_Information_G *info,NOR_LVINPUT_INFO *DevLVinputInfo)
{
uint8_t send_buff[8];
memset(send_buff,0,8);
send_buff[PKT_ADD_FM] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(DevLVinputInfo->DevSendCnt == 0x00)
{
DevLVinputInfo->DevSn++;
if(DevLVinputInfo->DevSn > 0x0F) DevLVinputInfo->DevSn = 0x00;
send_buff[PKT_TYPE] |= (DevLVinputInfo->DevSn & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
send_buff[PKT_TYPE] |= (DevLVinputInfo->DevSn & 0x0F);
send_buff[PKT_TYPE] |= BUS_Retry_Flag;
}
send_buff[PKT_DevType] = INCH6TYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
send_buff[PKT_ADD_TO] = info->addr; //<2F><EFBFBD><E8B1B8>ַ
send_buff[PKT_LEN] = 0x07; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[PKT_CHKSUM] = 0x00; //У<><D0A3>
send_buff[PKT_CMD] = INCH6_Query_State_Cmd; //<2F><><EFBFBD><EFBFBD>DI<44><49><EFBFBD><EFBFBD>
send_buff[PKT_CHKSUM] = CheckSum(send_buff, send_buff[PKT_LEN]);
DevLVinputInfo->Send_Type = INCH6_Query_State_Cmd;
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit, "INCH6_Query_State_Datasend:", send_buff, send_buff[PKT_LEN]);
MCU485_SendString(info->port,send_buff, send_buff[PKT_LEN]);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(info->port,info->baud,send_buff,send_buff[PKT_LEN]);
}
/*******************************************************************************
* Function Name : INCH6_Set_DIState_Datasend
* Description : IN_CH6<48><36><EFBFBD><EFBFBD>DI״̬<D7B4><CCAC><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>
* Input :
port : <20><><EFBFBD>ݷ<EFBFBD><DDB7>Ͷ˿<CDB6>
DevLVinputInfo<66><6F><EFBFBD><EFBFBD><E8B1B8>Ϣ
* Return :
*******************************************************************************/
void INCH6_Set_DIState_Datasend(Device_Public_Information_G *info,NOR_LVINPUT_INFO *DevLVinputInfo)
{
uint8_t temp = 0;
uint8_t send_buff[40];
memset(send_buff,0,40);
for(uint8_t i=0;i<INCH6_DI_CH_MAX;i++)
{
if((DevLVinputInfo->DI_set_flag & ( 0x01 << i )))
{
temp = PKT_PARA + (i/4);
send_buff[temp] |= (DevLVinputInfo->DI_Type[i] & 0x03) << ((i%4)*2);
temp = PKT_PARA + (i/4) + 4;
send_buff[temp] |= ((DevLVinputInfo->DI_Type[i] >> 4) & 0x03) << ((i%4)*2);
temp = PKT_PARA + 8 + i;
send_buff[temp] = DevLVinputInfo->DI_Detection_Time[i];
temp = PKT_PARA + 24 + (i/4);
send_buff[temp] |= (DevLVinputInfo->DI_Report_En[i] & 0x03) << ((i%4)*2);
}
}
DevLVinputInfo->Last_DI_set_flag = DevLVinputInfo->DI_set_flag;
send_buff[PKT_ADD_FM] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
if(DevLVinputInfo->DevSendCnt == 0x00)
{
DevLVinputInfo->DevSn++;
if(DevLVinputInfo->DevSn > 0x0F) DevLVinputInfo->DevSn = 0x00;
send_buff[PKT_TYPE] |= (DevLVinputInfo->DevSn & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
send_buff[PKT_TYPE] |= (DevLVinputInfo->DevSn & 0x0F);
send_buff[PKT_TYPE] |= BUS_Retry_Flag;
}
send_buff[PKT_DevType] = INCH6TYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>PKT_ADD_TO
send_buff[PKT_ADD_TO] = info->addr;
send_buff[PKT_LEN] = 0x23; //<2F><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
send_buff[PKT_CHKSUM] = 0x00; //У<><D0A3>
send_buff[PKT_CMD] = INCH6_Set_DIState_Cmd; //<2F><><EFBFBD><EFBFBD>DI<44><49><EFBFBD><EFBFBD>
DevLVinputInfo->Send_Type = INCH6_Set_DIState_Cmd;
send_buff[PKT_CHKSUM] = CheckSum(send_buff, send_buff[PKT_LEN]);
MCU485_SendString(info->port,send_buff, send_buff[PKT_LEN]);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(info->port,info->baud,send_buff,send_buff[PKT_LEN]);
}
/*******************************************************************************
* Function Name : BLV_485_DEV_IN_CH6_Cycle_Call
* Description : IN_CH6<48><36>ѯ<EFBFBD><D1AF><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* Return :
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
*******************************************************************************/
uint8_t BLV_485_DEV_IN_CH6_Cycle_Call(uint32_t dev_addr)
{
uint8_t send_flag = 0;
uint8_t temp_control = 0;
uint8_t temp_state = 0;
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
if(DevLVinputInfo.control_flag != 0x00)
{
for(uint8_t i=0;i<INCH6_Control_Num;i++)
{
temp_state = 0x01<<i;
if((DevLVinputInfo.control_flag & temp_state)) break;
}
switch(temp_state)
{
case INCH6_Query_State_Flag:
temp_control++;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_Query_State_Flag--------------------\r\n");
INCH6_Query_State_Datasend(&BUS_Public,&DevLVinputInfo);
send_flag = 0x01;
break;
case INCH6_Set_DIState_Flag:
temp_control++;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_Set_DIState_Flag----------------------\r\n");
INCH6_Set_DIState_Datasend(&BUS_Public,&DevLVinputInfo);
send_flag = 0x01;
break;
default:
break;
}
if(send_flag == 0x01)
{
BLV_Communication_Record(&DevLVinputInfo.comm_record,0x01,0x00);
if(DevLVinputInfo.DevSendCnt > 0x03)
{
if(DevLVinputInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"INCH6 OFFLINE");
LOG_Device_Online_Record(BUS_Public.type,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
DevLVinputInfo.control_flag = 0x00;
DevLVinputInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
DevLVinputInfo.DevSendCnt = 0;
if(DevLVinputInfo.DevOffline != DevLVinputInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
DevLVinputInfo.DevOfflineLast = DevLVinputInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}else {
DevLVinputInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
return RS485OCCUPYTIME;
}
}
return RS485OCCUPYNOTIME;
}
/*******************************************************************************
* Function Name : INCH6_DIState_Report_Cmd_Processing
* Description : IN_CH6<48>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
data : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>NOR_LVINPUT_INFO<46><4F>Ϣ
*******************************************************************************/
uint8_t INCH6_DIState_Report_Cmd_Processing(Device_Public_Information_G* BUS_Public, NOR_LVINPUT_INFO *DevLVinputInfo,uint8_t *data,uint16_t len)
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_DIState_Report_Cmd_Processing\r\n");
uint8_t temp = 0,temp_1 = 0,temp_2 = 0,temp_3 = 0,temp_4 = 0;
uint8_t rev = 0;
for(uint8_t i=0;i<INCH6_DI_CH_MAX;i++)
{
temp_1 = i/4;
temp_2 = i%4;
temp = (data[temp_1] >> (temp_2*2)) & 0x03;
temp_3 = DevLVinputInfo->DI_Type[i] & 0x0F;
if(temp == temp_3)
{
switch(temp)
{
case INCH6_DI_Key_Type:
temp_4 = (data[temp_1 + 4] >> (temp_2*2)) & 0x03;
if(temp_4 != 0x00)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><>·:%d ״̬:%d\r\n", i, temp_4);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
DevLVinputInfo->DevReadBuf[i] = temp_4; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>λ
DevLVinputInfo->DI_Start[i] = temp_4;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 DI_KEY Start%d %d ! \r\n",i,temp_4);
rev = 0x02;
}
break;
case INCH6_DI_Pir_Type:
temp_4 = (data[temp_1 + 4] >> (temp_2*2)) & 0x03;
if(temp_4 != DevLVinputInfo->DI_Start[i])
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><>·:%d ״̬:%d\r\n", i, temp_4);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
DevLVinputInfo->DevReadBuf[i] = temp_4; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>λ
DevLVinputInfo->DI_Start[i] = temp_4;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 DI_PIR Start%d %d ! \r\n",i,temp_4);
rev = 0x02;
}
break;
case INCH6_DI_Dry_Type:
temp_4 = (data[temp_1 + 4] >> (temp_2*2)) & 0x03;
if(temp_4 != DevLVinputInfo->DI_Start[i])
{
switch(temp_4)
{
case 0x00: // <09>ͷ<EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d ״̬:<3A>ͷ<EFBFBD>", i);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
DevLVinputInfo->DevReadBuf[i] = KeyRelease; //<2F>ɿ<EFBFBD><C9BF><EFBFBD>λ
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d ״̬:<3A><><EFBFBD><EFBFBD>", i);
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
DevLVinputInfo->DevReadBuf[i] = KeyPress; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
break;
}
DevLVinputInfo->DI_Start[i] = temp_4;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 DI_DRY Start%d %d ! \r\n",i,temp_4);
rev = 0x02;
}
break;
}
}else {
//<2F><><EFBFBD>Ͳ<EFBFBD><CDB2>ԣ<EFBFBD><D4A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>DI״̬
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 Start%d Type Error ! \r\n",i);
}
}
return rev;
}
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLV_485_DEV_IN_CH6_Data_Processing
* Description : IN_CH6<48><36><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLV_485_DEV_IN_CH6_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = IsNotMyData;
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo;
uint8_t data[INCH6_RecvData_Len_Max];
if(len > INCH6_RecvData_Len_Max)
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
if((data[PKT_DevType] != INCH6TYPE)||(data[PKT_ADD_TO] != 0x00)||(data[PKT_LEN] != len) || (CheckSum(data,len) != 0x00)||(data[PKT_ADD_FM] != SRAM_Read_Byte(dev_addr+Dev_Addr)))
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 addr err or type err or len err Check Fail! \r\n");
return rev;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
// uint16_t deal_len = len;
// if(deal_len > INCH6_RecvData_Len_Max)
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 Check_Len Fail! \r\n");
// return 0x01;
// }
// uint8_t deal_buff[deal_len+2];
// memset(deal_buff,0,sizeof(deal_buff));
// SRAM_DMA_Read_Buff(deal_buff,deal_len,data_addr); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// if()
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 Check Fail! \r\n");
// return 0x01; //<2F><>У<EFBFBD><D0A3>
// }
//
// if()
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 PKT_ADD_FM Fail! \r\n");
// return 0x01; //<2F><><EFBFBD>͵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
// }
//
// if()
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 PKT_DevType Fail! \r\n");
// return 0x01; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
// }
//
// if()
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 PKT_ADD_TO Fail! \r\n");
// return 0x01; //<2F><><EFBFBD>յ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
// }
//
// if()
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 PKT_LEN Fail! \r\n");
// return 0x01; //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
// }
if(DevLVinputInfo.DevOffline == DEV_IS_OFFLINE) //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"INCH6 LogInfo_Device_Online...........");
LOG_Device_Online_Record(BUS_Public.type,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&DevLVinputInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
DevLVinputInfo.DevSendCnt = 0x00;
DevLVinputInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(DevLVinputInfo.DevOffline != DevLVinputInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
DevLVinputInfo.DevOfflineLast = DevLVinputInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"INCH6 DealBUFF...........",data,len);
switch(data[PKT_CMD])
{
case INCH6_DIState_Report_Cmd: //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
INCH6_DIState_Report_Cmd_Processing(&BUS_Public, &DevLVinputInfo,&data[PKT_PARA],len);
break;
case BLV_INCH6_Reply_CMD: //<2F>ظ<EFBFBD>ACK<43><4B><EFBFBD><EFBFBD>
if((data[PKT_TYPE] & 0x0F) != DevLVinputInfo.DevSn)
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 PKT_TYPE Fail! \r\n");
return 0x01; //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD>
}
switch(DevLVinputInfo.Send_Type)
{
case INCH6_Query_State_Cmd: //<2F><>ѯ״̬<D7B4>ظ<EFBFBD>
if(data[PKT_PARA] == BLV_INCH6_Reply_Result)
{
INCH6_DIState_Report_Cmd_Processing(&BUS_Public, &DevLVinputInfo,&data[PKT_PARA + 1],len);
DevLVinputInfo.control_flag &= ~(INCH6_Query_State_Flag);
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 <20><>ѯ״̬<D7B4>ظ<EFBFBD> %d\r\n",DevLVinputInfo.control_flag);
}
break;
case INCH6_Set_DIState_Cmd: //<2F><><EFBFBD><EFBFBD>DI״̬<D7B4>ظ<EFBFBD>
if(data[PKT_PARA] == BLV_INCH6_Di_Result)
{
DevLVinputInfo.DI_set_flag &= ~(DevLVinputInfo.Last_DI_set_flag);
DevLVinputInfo.control_flag &= ~(INCH6_Set_DIState_Flag);
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6 <20><><EFBFBD><EFBFBD>DI״̬<D7B4>ظ<EFBFBD> %d\r\n",DevLVinputInfo.control_flag);
}
break;
default:
break;
}
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
return 0x00;
}
void BLV_485_INCH6_Set_DIState(uint32_t dev_addr)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLV_485_INCH6_Set_DIState\r\n");
DevLVinputInfo.DI_Type[DI_CH1] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH2] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH3] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH4] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH5] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Type[DI_CH6] = INCH6_DI_Dry_Type | INCH6_DI_Level_LOW;
DevLVinputInfo.DI_Detection_Time[DI_CH1] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH2] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH3] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH4] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH5] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Detection_Time[DI_CH6] = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
DevLVinputInfo.DI_Report_En[DI_CH1] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH2] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH3] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH4] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH5] = 0x01;
DevLVinputInfo.DI_Report_En[DI_CH6] = 0x01;
DevLVinputInfo.DI_set_flag = 0x3F;
DevLVinputInfo.control_flag |= INCH6_Set_DIState_Flag;
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
}
void BLV_485_INCH6_Query_State(uint32_t dev_addr)
{
if(dev_addr == 0x00) return;
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"BLV_485_INCH6_Query_State\r\n");
DevLVinputInfo.control_flag |= INCH6_Query_State_Flag;
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),dev_addr+Dev_Privately);
}
/*¥<>¼<EFBFBD><C2BC>ײ<EFBFBD><D7B2>Թ<EFBFBD><D4B9>ܺ<EFBFBD><DCBA><EFBFBD> */
void Device_INCH6_Scan_Signal(uint32_t devaddr)
{
uint8_t temp_type = 0,temp_deal = 0;
uint16_t temp = 0,temp1 = 0;
uint8_t crc_val = 0;
// uint32_t deal_addr = 0;
temp = SRAM_Read_Byte(devaddr + Dev_Addr);
if((temp == 0x0F) || (temp == 0x00)) temp_deal = 0x01; //<2F>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ0x0F <20><>INCH6<48>
if(temp_deal == 0x00) return ;
NOR_LVINPUT_INFO DevLVinputInfo;
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),devaddr+Dev_Privately);
for(uint8_t i=0;i<DI_CH_MAX;i++)
{
temp_type = DevLVinputInfo.DI_Type[i] & 0x0F;
switch(temp_type)
{
case INCH6_DI_Key_Type:
if(DevLVinputInfo.DI_Start[i] != 0x00)
{
DevLVinputInfo.DI_Start[i] = 0x00;
temp1++;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_DI_Key_Type Change\r\n");
}
break;
case INCH6_DI_Pir_Type:
if(DevLVinputInfo.DI_Start[i] != DevLVinputInfo.DI_LastStart[i])
{
DevLVinputInfo.DI_LastStart[i] = DevLVinputInfo.DI_Start[i];
temp1++;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_DI_Pir_Type Change\r\n");
}
break;
case INCH6_DI_Dry_Type:
if(DevLVinputInfo.DI_Start[i] != DevLVinputInfo.DI_LastStart[i])
{
DevLVinputInfo.DI_LastStart[i] = DevLVinputInfo.DI_Start[i];
temp1++;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_DI_Dry_Type Change\r\n");
}
break;
}
}
if(temp1 != 0x00)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),devaddr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,devaddr+Dev_Check);
temp = sizeof(NOR_LVINPUT_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(devaddr,temp);
SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
}
/*******************************************************************************
* Function Name : INCH6_Test_Task
* Description : IN_CH6<48><36><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
* Input :
* Return :
*******************************************************************************/
void INCH6_Test_Task(void)
{
static uint32_t test_tick = 0;
uint32_t dev_addr = 0;
if(SysTick_1ms - test_tick > 3000)
{
test_tick = SysTick_1ms;
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"INCH6_Test_Task\r\n");
dev_addr = Find_Device_List_Information(DEV_IN_CH6_Type,0x02);
BLV_485_INCH6_Query_State(dev_addr);
}
}
#endif

View File

@@ -0,0 +1,43 @@
#ifndef _BLV_485_DEV_IN_CH6_H_
#define _BLV_485_DEV_IN_CH6_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
#if 0
typedef struct{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevSendSN; //<2F><><EFBFBD><EFBFBD>SN<53><4E>
uint8_t Send_Type;
uint8_t DI_Type[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0~3:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4~7:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ
uint8_t DI_Start[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD>״̬
uint8_t DI_Report_En[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʹ<EFBFBD><CAB9>
uint8_t DI_LastStart[INCH6_DI_CH_MAX];
uint8_t DI_Detection_Time[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint16_t Version; //IO<49><4F><EFBFBD><EFBFBD><EFBFBD>
uint16_t control_flag; //<2F><><EFBFBD>Ʊ<EFBFBD>־λ
uint16_t DI_set_flag; //DI<44><49><EFBFBD>ñ<EFBFBD>־λ
uint16_t Last_DI_set_flag;
uint16_t DI_Level_Actual_Start;
uint32_t DI_Actual_State;
uint32_t DI_Perfect_State;
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__)) Device_INCH6_INFO;
#endif
void BLV_485_DEV_IN_CH6_Data_Init(uint16_t data_len, uint8_t *data);
void BLV_485_DEV_IN_CH6_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info, uint8_t *data,uint16_t data_len);
//void BLV_485_DEV_IN_CH6_Data_Init2(uint8_t addr);
//void INCH6_Test_Task(void);
#endif

View File

@@ -0,0 +1,708 @@
/**
******************************************************************************
* @file BLV_485_Dev_IrSendFun.c
* @author BLW RCU development Team
* @version V1.1.1
* @date 2021-09-07
* @brief RS485<38><35><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention <20><><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>
* <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD> <20><>
* ִ<>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD> <20><>
* ִ<>з<EFBFBD>ʽ<EFBFBD><CABD>
* <09>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
* <09><><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
*
******************************************************************************
*/
#include "BLV_485_Dev_IrSendFun.h"
#include "check_fun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "DBG.h"
#include "Log_api.h"
#include "includes.h"
/*<2A><EFBFBD><E6BCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ*/
#include "BLV_485_Dev_TempFun.h"
#include "BLV_485_Dev_C7TFun.h"
/*<2A><EFBFBD><E6BCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_IR_INFO *RS485IRInfo); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(Dev_485_IrSend_Polling_Flag, RS485_IrSend_Polling_Init)
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(Dev_485_IrSend_Active_Flag, RS485_IrSend_Active_Init)
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define IRSENDCTRLTIMEOUT 500 //<2F><><EFBFBD>Ƴ<EFBFBD>ʱʱ<CAB1><CAB1>
#define IRSENDASKTIMEOUT 10 //<2F><><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD>ʱʱ<CAB1><CAB1>
#define IRCtrlSendMax 0x03 //<2F><><EFBFBD>ӿ<EFBFBD><D3BF>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CDB4><EFBFBD>
#define Dev_IRSend_RecvData_Len_Max 0x18 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>24Byte
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t app_rs485IrDis(uint32_t dev_addr);
uint8_t App_Rs485_Ir_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len); //
void Ir_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state); //uint32_t DevaddrIn, uint32_t devaddr,uint16_t state
void IR_TVNo_Ctrl(uint32_t dev_addr, RS485_IR_INFO *RS485IRInfo);
void IR_TV_Ctrl(uint32_t dev_addr, RS485_IR_INFO *RS485IRInfo);
void IR_Air_Ctrl(uint32_t dev_addr, RS485_IR_INFO *RS485IRInfo);
void RS485_IrSend_Polling_Init(Device_Public_Information_G *BUS_Public, RS485_IR_INFO *RS485IRInfo)
{
BUS_Public->polling_cf = (uint32_t)&app_rs485IrDis;
BUS_Public->processing_cf = (uint32_t)&App_Rs485_Ir_Check;
}
void RS485_IrSend_Active_Init(Device_Public_Information_G *BUS_Public, RS485_IR_INFO *RS485IRInfo)
{
BUS_Public->polling_cf = (uint32_t)&app_rs485IrDis;
BUS_Public->processing_cf = (uint32_t)&App_Rs485_Ir_Check;
}
/*******************************************************************************
* Function Name : RS485_IrSend_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void RS485_IrSend_Data_Init(uint8_t devaddr)
{
Device_Public_Information_G BUS_Public;
RS485_IR_INFO RS485IRInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&RS485IRInfo,0,sizeof(RS485_IR_INFO));
BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = DEV_IRTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x05; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0190; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 200ms
BUS_Public.polling_cf = (uint32_t)&app_rs485IrDis;
BUS_Public.processing_cf = (uint32_t)&App_Rs485_Ir_Check;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Ir_Control_State;
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʼֵ*/
RS485IRInfo.DevOfflineLast = DEV_IS_LINEUNINIT;
RS485IRInfo.DevOffline = DEV_IS_LINEUNINIT;
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO));
}
/*******************************************************************************
* Function Name : RS485_IrSend_Data_For_Logic_Init
* Description : <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void RS485_IrSend_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_IR_INFO RS485IRInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&RS485IRInfo,0,sizeof(RS485_IR_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = dev_info->port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x05; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0190; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 200ms
BUS_Public.Protocol = dev_info->version;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Ir_Control_State;
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʼֵ*/
RS485IRInfo.DevOfflineLast = DEV_IS_LINEUNINIT;
RS485IRInfo.DevOffline = DEV_IS_LINEUNINIT;
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &RS485IRInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &RS485IRInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &RS485IRInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &RS485IRInfo);break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/**
* @name <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @param
* dev_addr <20>豸485<38><35><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
* @retval 0x00:<3A><><EFBFBD>ݷ<EFBFBD><DDB7>ͳɹ<CDB3><C9B9><EFBFBD>0xF0:<3A><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
* @attention <20><><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>485<38><35><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ֵռ<D6B5><D5BC>һ<EFBFBD><D2BB>
* <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>յ<EFBFBD><D5B5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE>Ƿ<EFBFBD><C7B7><EFBFBD>һ
*/
uint8_t app_rs485IrDis(uint32_t dev_addr)
{
uint8_t i;
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_IR_INFO RS485IRInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),dev_addr+Dev_Privately);
for(i = 0; i < 4; i++)
{
if(RS485IRInfo.AirInfoLast[i] != RS485IRInfo.AirInfo[i])
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
RS485IRInfo.IrCtrlAirFlag = 0x01;
RS485IRInfo.IrCtrlAirCnt = IRCtrlSendMax;
if((0x00 == i)&&(0x01 == RS485IRInfo.AirInfo[i])) //<2F>ɹص<C9B9><D8B5><EFBFBD>
{
RS485IRInfo.AirOpenFlag = 0x00;//<2F>ñ<EFBFBD>־λ <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>Ļظ<C4BB><D8B8>󣬻<EFBFBD><F3A3ACBB><EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF>ƵĻ<C6B5><C4BB><EFBFBD> //20250811 <20>رմ˹<D5B4><CBB9>ܲ<EFBFBD><DCB2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
memcpy(RS485IRInfo.AirInfoLast, RS485IRInfo.AirInfo, 4);
break;
}
}
if(0x01 == RS485IRInfo.IrCtrlAirFlag)
{
if(0x00 != RS485IRInfo.IrCtrlAirCnt)
{
RS485IRInfo.IrCtrlAirCnt--;
}
else
{
RS485IRInfo.AirOpenFlag = 0x00; //<2F><><EFBFBD>ο<EFBFBD><CEBF>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
RS485IRInfo.IrCtrlAirFlag = 0x00;
}
IR_Air_Ctrl(dev_addr, &RS485IRInfo);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&RS485IRInfo.comm_record,0x01,0x00);
Ret = RS485OCCUPYTIME;
}
else if(0x01 == RS485IRInfo.IrCtrlTvFlag)
{
if(0x00 != RS485IRInfo.IrCtrlTvCnt)
{
RS485IRInfo.IrCtrlTvCnt--;
}
else
{
RS485IRInfo.IrCtrlTvFlag = 0x00;
}
IR_TV_Ctrl(dev_addr, &RS485IRInfo);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&RS485IRInfo.comm_record,0x01,0x00);
Ret = RS485OCCUPYTIME;
}
else if(0x02 == RS485IRInfo.IrCtrlTvFlag)
{
if(0x00 != RS485IRInfo.IrCtrlTvCnt)
{
RS485IRInfo.IrCtrlTvCnt--;
}
else
{
RS485IRInfo.IrCtrlTvFlag = 0x00;
}
IR_TVNo_Ctrl(dev_addr, &RS485IRInfo);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&RS485IRInfo.comm_record,0x01,0x00);
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
if(RS485IRInfo.DevSendCnt > IRCtrlSendMax)
{
if(RS485IRInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_IRSEND LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_IRTYPE,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>SRAM_Read_Byte(dev_addr+Dev_Addr)
}
RS485IRInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(RS485IRInfo.DevOffline != RS485IRInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
RS485IRInfo.DevOfflineLast = RS485IRInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
RS485IRInfo.DevSendCnt++; //
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&RS485IRInfo, sizeof(RS485_IR_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>Ƶ<EFBFBD><C6B5>*/
void IR_TVNo_Ctrl(uint32_t dev_addr,RS485_IR_INFO *RS485IRInfo)
{ //ͷ len <20><><EFBFBD><EFBFBD> Ƶ<><C6B5> <09><>ַ <20><><EFBFBD><EFBFBD>
uint8_t IrSend[13] = {0x55, 0x55, 0xee, 0x07, 0x04, 0x04, 0x01, 0x01};
uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port);
// RS485IRInfo = CfgDevAdd->DevDataStruct;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s",__func__);
IrSend[6] = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><>ַ
IrSend[7] = RS485IRInfo->IrCtrlTvData; //<2F><><EFBFBD><EFBFBD>
NetCRC16(&IrSend[3],7);
MCU485_SendString(port,IrSend,10);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,IrSend,10);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>*/
void IR_TV_Ctrl(uint32_t dev_addr,RS485_IR_INFO *RS485IRInfo)
{ //ͷ len <20><><EFBFBD><EFBFBD> TV <20><>ַ <20><><EFBFBD><EFBFBD>
uint8_t IrSend[13] = {0x55, 0x55, 0xee, 0x07, 0x04, 0x02, 0x01, 0x01};
uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port);
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"IR_TV_Ctrl!!\r\n");
IrSend[6] = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><>ַ
IrSend[7] = RS485IRInfo->IrCtrlTvData; //<2F><><EFBFBD><EFBFBD>
NetCRC16(&IrSend[3],7);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MCU485_SendString(port,IrSend,10);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,IrSend,10);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿյ<C6BF>*/
void IR_Air_Ctrl(uint32_t dev_addr, RS485_IR_INFO *RS485IRInfo)
{ //ͷ len <20><><EFBFBD><EFBFBD> TV <20><>ַ <20><EFBFBD> <20><><EFBFBD>ػ<EFBFBD> <20><><EFBFBD><EFBFBD> ģʽ
uint8_t IrSend[13] = {0x55, 0x55, 0xee, 0x0A, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00};
uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s port:%d fan:%d",__func__, port,RS485IRInfo->AirInfo[3]);
IrSend[6] = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><>ַ
IrSend[7] = RS485IRInfo->AirInfo[2]; //<2F><EFBFBD>
IrSend[8] = RS485IRInfo->AirInfo[0]; //<2F><><EFBFBD>ػ<EFBFBD>
IrSend[9] = RS485IRInfo->AirInfo[3]; //<2F><><EFBFBD><EFBFBD>
IrSend[10] = RS485IRInfo->AirInfo[1]; //ģʽ
// IrSend[7] = RS485IRInfo->IrCtrlTvData; //<2F><><EFBFBD><EFBFBD>
NetCRC16(&IrSend[3],10);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MCU485_SendString(port,IrSend,13);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,IrSend,13);
}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
/**
* @name <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* dev_addr <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* data_addr <20><><EFBFBD>ݵ<EFBFBD>ַ
* len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* @retval
* 0x00:<3A><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
* 0x01:<3A><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @attention <20><><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>485<38><35><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ֵռ<D6B5><D5BC>һ<EFBFBD><D2BB>
* <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>յ<EFBFBD><D5B5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ<D6BE>Ƿ<EFBFBD><C7B7><EFBFBD>һ
*/
uint8_t App_Rs485_Ir_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len) //
{
Device_Public_Information_G BUS_Public;
RS485_IR_INFO RS485IRInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t data[RECDATALENMAX];
uint8_t rev = 0x01; //Ĭ<><C4AC>ʧ<EFBFBD><CAA7>
// uint8_t Ir_addr = SRAM_Read_Byte(dev_addr+Dev_Addr);
uint16_t crc_val; // = SRAM_Read_Word(data_addr+len-2);
uint16_t temp = 0x00;
// uint16_t deal_len = len;
if(len > RECDATALENMAX)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"Dev_IRSend Check_Len Fail! \r\n");
return 0x01;
}
memset(data,0x00,RECDATALENMAX);
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if(len < 0x07) return 0x01;
if( (data[0] != 0x55) || (data[1] != 0x55) || (data[2] != 0xEE) )
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"У<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if((data[3] + 0x03) != len)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD> %d - %d!!",len,temp);
return rev; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
}
if(data[4] != 0x04)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>:%d!!",temp);
return rev; //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(data[6] != BUS_Public.addr)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d!!",temp);
return rev; //У<><D0A3><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ַ
}
crc_val = data[len-2] + (data[len-1]<<8);
if(crc_val == NetCRC16_2(&data[3],len - 5)) //
{
rev = 0x00; //
SRAM_DMA_Read_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),dev_addr+Dev_Privately);
if(RS485IRInfo.DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_TouchSwitch LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_SWI_TYPE,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&RS485IRInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
RS485IRInfo.DevSendCnt = 0x00;
RS485IRInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(RS485IRInfo.DevOffline != RS485IRInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
RS485IRInfo.DevOfflineLast = RS485IRInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
switch(data[5]) //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
{
case 0x02: //<2F><><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
case 0x04: //Ƶ<><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485IRInfo.IrCtrlTvFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port, BUS_Public.baud,data,len);
break;
case 0x01:
if(0x01 == RS485IRInfo.AirOpenFlag) //
{
RS485IRInfo.AirOpenFlag = 0x00;
//RS485IRInfo.IrCtrlAirFlag = 0x01; //<2F>Ե<EFBFBD>ǰ<EFBFBD>Ŀյ<C4BF><D5B5><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>Ӷ<EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD>
}
else
{
RS485IRInfo.IrCtrlAirFlag = 0x00;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port, BUS_Public.baud,data,len);
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&RS485IRInfo, sizeof(RS485_IR_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),dev_addr+Dev_Privately);
}
// else {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",crc_val,SRAM_CRC16(data_addr,len - 2));
//
// }
return rev;
}
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
uint8_t Get_BLV485_IrSend_Online_Status(uint32_t devaddr)
{
RS485_IR_INFO RS485IRInfo;
SRAM_DMA_Read_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),devaddr+Dev_Privately);
if(RS485IRInfo.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
/*******************************************************************************
* Function Name : Ir_Control_State
* Description : <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
DevaddrIn <20><><EFBFBD><EFBFBD><EFBFBD>
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
state:
* Return :
*******************************************************************************/
void Ir_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state) //uint32_t DevaddrIn, uint32_t devaddr,uint16_t state
{
uint8_t TVOnOffState; //ִ<>з<EFBFBD>ʽ
uint8_t TVCont; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public;
RS485_IR_INFO RS485IRInfo;
// uint16_t crc_val = 0x00;
// uint16_t temp = 0x00;
if(devaddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),devaddr+Dev_Privately);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"RS485IRInfo.AirInfo start:", RS485IRInfo.AirInfo, 4);
if((NULL != CfgDevAddIn) && (DEV_RS485_TEMP == SRAM_Read_Byte(CfgDevAddIn+Dev_Type)))//<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
RS485_TEMP_INFO Rs485Tem;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>");
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAddIn+Dev_Privately);
switch(Rs485Tem.TemState.on_off)
{
case 0x01:
RS485IRInfo.AirInfo[0] = 0x01; //1<><31>
break;
case 0x00:
RS485IRInfo.AirInfo[0] = 0x00; //0<><30>
break;
}
switch(Rs485Tem.TemState.mode)
{
case TEMP_COLD:RS485IRInfo.AirInfo[1] = 0; break; //<2F><><EFBFBD><EFBFBD>
case TEMP_HOT:RS485IRInfo.AirInfo[1] = 1; break; //<2F><><EFBFBD><EFBFBD>
case TEMP_WIND:RS485IRInfo.AirInfo[1] = 2; break; //<2F>ͷ<EFBFBD>
}
// RS485IRInfo.AirInfo[2] = Rs485Tem.TemState.set_t;
if(Rs485Tem.TemState.set_t==0)
{
Rs485Tem.TemState.set_t=31;
RS485IRInfo.AirInfo[2] = Rs485Tem.TemState.set_t+1;
}
else
RS485IRInfo.AirInfo[2] = Rs485Tem.TemState.set_t;
if(TEMP_FANAUTO == Rs485Tem.TemState.fan) //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>
{
RS485IRInfo.AirInfo[3] = 2; //<2F><><EFBFBD><EFBFBD>
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
RS485IRInfo.AirInfo[3] = Rs485Tem.TemState.fan; //<2F><><EFBFBD><EFBFBD>
}
}
else if(NULL != state) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD>豸Ϊ<E8B1B8><CEAA>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>");
RS485IRInfo.IrCtrlTvFlag = 0x01; //<2F><><EFBFBD>ӿ<EFBFBD><D3BF>Ʊ<EFBFBD>־ ÿ<>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD> Ƶ<><C6B5><EFBFBD>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RS485IRInfo.IrCtrlTvCnt = IRCtrlSendMax;
TVOnOffState = (state)&0x00ff; //<2F><><EFBFBD><EFBFBD>ػ<EFBFBD> 1<><31> 2<><32>
TVCont = ((state>>8)&0x00ff);
// if(TVCont == IR_NOT_EXIST) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// RS485IRInfo.MusicBackSendCnt = MusicBackSendMax;
switch(TVOnOffState)
{
case 0x00: //ִ<>з<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(IR_NOT_EXIST != TVCont)RS485IRInfo.IrCtrlTvData = TVCont; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ֵ
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>
case 0x02: //<2F>ػ<EFBFBD>
if(IR_NOT_EXIST == TVCont)
{
RS485IRInfo.IrTvState = TVOnOffState; //<2F><><EFBFBD><EFBFBD>ػ<EFBFBD>
RS485IRInfo.IrCtrlTvData = IR_Power; //<2F><><EFBFBD><EFBFBD><EFBFBD>͹ػ<CDB9><D8BB><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
}
else
{
RS485IRInfo.IrCtrlTvData = TVCont; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ֵ
}
break;
case 0x04: //Ƶ<><C6B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>
RS485IRInfo.IrCtrlTvFlag = 0x02;
RS485IRInfo.IrCtrlTvData = TVCont; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ֵ
break;
default: //
break;
}
}
// else //<2F><><EFBFBD><EFBFBD>
// {
// RS485IRInfo.IrCtrlTvData = TVCont; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ֵ
// }
}
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"RS485IRInfo.AirInfo end:", RS485IRInfo.AirInfo, 4);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&RS485IRInfo, sizeof(RS485_IR_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),devaddr+Dev_Privately);
}
/*******************************************************************************
* Function Name : Ir_Control_State2
* Description : <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>,<2C>ɰ<EFBFBD><C9B0>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
DevaddrIn <20><><EFBFBD><EFBFBD><EFBFBD>
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
state:
* Return :
*******************************************************************************/
//void Ir_Control_State2(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state) //uint32_t DevaddrIn, uint32_t devaddr,uint16_t state
//{
// uint8_t TVOnOffState;
// RS485_IR_INFO RS485IRInfo;
// uint16_t crc_val = 0x00;
// uint16_t temp = 0x00;
// Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"RS485IRInfo.AirInfo start:\r\n", RS485IRInfo.AirInfo, 4);
//
// if(devaddr == 0x00) return;
//
// SRAM_DMA_Read_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),devaddr+Dev_Privately);
//
// if((NULL != CfgDevAddIn) && (DEV_RS485_TEMP == SRAM_Read_Byte(CfgDevAddIn+Dev_Type)))//<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// RS485_TEM_INFO Rs485Tem;
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEM_INFO),CfgDevAddIn+Dev_Privately);
//
// switch(Rs485Tem.on_off)
// {
// case 0x01:
// RS485IRInfo.AirInfo[0] = 0x01; //1<><31>
// break;
// case 0x02:
// RS485IRInfo.AirInfo[0] = 0x00; //0<><30>
// break;
// }
//
// switch(Rs485Tem.mode)
// {
// case TEMP_COLD:RS485IRInfo.AirInfo[1] = 0; break; //<2F><><EFBFBD><EFBFBD>
// case TEMP_HOT:RS485IRInfo.AirInfo[1] = 1; break; //<2F><><EFBFBD><EFBFBD>
// case TEMP_WIND:RS485IRInfo.AirInfo[1] = 2; break; //<2F>ͷ<EFBFBD>
// }
// RS485IRInfo.AirInfo[2] = Rs485Tem.set_t;
//
// if(TEMP_FANAUTO == Rs485Tem.fan) //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>
// {
// RS485IRInfo.AirInfo[3] = 2; //<2F><><EFBFBD><EFBFBD>
// }
// else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// RS485IRInfo.AirInfo[3] = Rs485Tem.fan; //<2F><><EFBFBD><EFBFBD>
// }
// }
// else if(NULL != state) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD>豸Ϊ<E8B1B8><CEAA>
// {
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>\r\n");
// RS485IRInfo.IrCtrlTvFlag = 0x01; //<2F><><EFBFBD>ӿ<EFBFBD><D3BF>Ʊ<EFBFBD>־ ÿ<>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD> Ƶ<><C6B5><EFBFBD>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// RS485IRInfo.IrCtrlTvCnt = IRCtrlSendMax;
// if(((state>>8)&0x00ff) == IR_NOT_EXIST) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// // RS485IRInfo.MusicBackSendCnt = MusicBackSendMax;
// TVOnOffState = (state)&0x00ff; //<2F><><EFBFBD><EFBFBD>ػ<EFBFBD> 1<><31> 2<><32>
// switch(TVOnOffState)
// {
// case 0x01: //<2F><><EFBFBD><EFBFBD>
// case 0x02: //<2F>ػ<EFBFBD>
// RS485IRInfo.IrTvState = TVOnOffState; //<2F><><EFBFBD><EFBFBD>ػ<EFBFBD>
// RS485IRInfo.IrCtrlTvData = IR_Power; //<2F><><EFBFBD><EFBFBD><EFBFBD>͹ػ<CDB9><D8BB><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
// break;
// default: //
// break;
// }
// }
// else //<2F><><EFBFBD><EFBFBD>
// {
// RS485IRInfo.IrCtrlTvData = (state>>8)&0x00ff; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ֵ
// }
// }
// Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"RS485IRInfo.AirInfo end:\r\n", RS485IRInfo.AirInfo, 4);
// /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&RS485IRInfo,sizeof(RS485_IR_INFO),devaddr+Dev_Privately);
//
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,devaddr+Dev_Check);
// temp = sizeof(RS485_IR_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(devaddr,temp);
// SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//
//
//}

View File

@@ -0,0 +1,109 @@
#ifndef __APP_RS485IR_H__
#define __APP_RS485IR_H__
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
#define DEV_IRTYPE 0x0F
#define IR_NOT_EXIST 0x00 //<2F><><EFBFBD><EFBFBD><E2B2BB><EFBFBD><EFBFBD>
#define IR_Mute 0x01 //<2F><><EFBFBD><EFBFBD>
#define IR_Power 0x02 //<2F><>Դ
#define IR_VoiceInc 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IR_VoiceDec 0x04 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IR_ChannelInc 0x05 //Ƶ<><C6B5><EFBFBD><EFBFBD>
#define IR_ChannelDec 0x06 //Ƶ<><C6B5><EFBFBD><EFBFBD>
#define IR_Up 0x07 //<2F><><EFBFBD><EFBFBD>
#define IR_Down 0x08 //<2F><><EFBFBD><EFBFBD>
#define IR_Left 0x09 //<2F><><EFBFBD><EFBFBD>
#define IR_Right 0x0A //<2F><><EFBFBD><EFBFBD>
#define IR_Ok 0x0B //ȷ<><C8B7>
#define IR_Home 0x0C //<2F><>ҳ
#define IR_Menu 0x0D //<2F>˵<EFBFBD>
#define IR_Source 0x0E //<2F><>Դ
#define IR_Replay 0x0F //<2F>ؿ<EFBFBD>
typedef struct RS485_IR_INFO* RS485_IR_INFOP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
typedef void (*RS485_IR_Cycle_ptr)(uint8_t DevPort, uint8_t DevAddr); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD>˿ںź<DABA><C5BA><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>485<38><EFBFBD><E8B1B8>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
//typedef void (*RS485_Card_IndiDataGet_ptr)(u16 Addr, u8 OnOff); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>ָʾ<D6B8>Ƹ<EFBFBD>ֵ
//typedef void (*RS485_IR_Read_ptr)(u8 *, u8); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<D6B5>յĺ<D5B5><C4BA><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//typedef void (*RS485_IR_TV_Ctrl_ptr)(u8 addr); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<D6B5>յĺ<D5B5><C4BA><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
typedef void (*RS485_IR_IndiCtrl_ptr)(RS485_IR_INFOP, uint16_t Addr, uint16_t OnOff); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>ָʾ<D6B8>Ƹ<EFBFBD>ֵ
typedef uint16_t (*RS485_IR_LoopStateRead_ptr)(RS485_IR_INFOP, uint16_t); //ָ<><D6B8><EFBFBD><EFBFBD>·״̬<D7B4>ж<EFBFBD>
typedef struct
{
// uint8_t *DevReadBuf; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ水<DAB4><E6B0B4><EFBFBD><EFBFBD>״̬
// uint8_t DevReadLen; //<2F><><EFBFBD><EFBFBD>״̬<D7B4>ֽ<EFBFBD><D6BD><EFBFBD>
// uint8_t *DevSendBuf; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t *DevSendBuf_last; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t DevSendLen; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t IrTvState; //<2F><><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>
uint8_t IrTvStateLast; //<2F><><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>
uint8_t IrTvStateRs485; //<2F><><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>
uint8_t IrTvStateMap; //<2F><><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>
uint8_t IrCtrlTvData; //<2F><><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t IrCtrlTvFlag; //<2F><><EFBFBD>ӿ<EFBFBD><D3BF>Ʊ<EFBFBD>־λ
uint8_t IrCtrlTvCnt; //<2F><><EFBFBD>ӿ<EFBFBD><D3BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t AirInfo[4]; //<2F>յ<EFBFBD><D5B5><EFBFBD>Ϣ <20><><EFBFBD>ػ<EFBFBD> ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t AirInfoLast[4];
uint8_t IrCtrlAirFlag; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint8_t IrCtrlAirCnt; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t AirOpenFlag; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ <20><><EFBFBD><EFBFBD>һ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>һ<E0B7A2>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>ʼ*/
// CFG_Dev_AddP RFCfgDevAddRs485; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485
/*<2A><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
RS485_IR_LoopStateRead_ptr RS485_IR_LoopStateRead; //<2F><>ȡ
RS485_IR_IndiCtrl_ptr RS485_IR_IndiCtrl; //ָʾ<D6B8>Ƹ<EFBFBD>ֵ
// RS485_IR_TV_Ctrl_ptr RS485_IR_TV_Ctrl; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
// RS485_IR_Cycle_ptr RS485_IR_Cycle_Dis; //<2F><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<D6B8>ƿ<EFBFBD><C6BF>Ƶĺ<C6B5><C4BA><EFBFBD>
// RS485_IR_Read_ptr Rs485_IR_ReadDis; //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_IR_INFO; //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
//uint8_t Rs485_IR_Data_Get(CFG_Dev_AddP CfgDevAdd);
void RS485_IrSend_Data_Init(uint8_t devaddr);
void RS485_IrSend_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
//void Ir_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state);
//void Ir_Control_State2(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr,uint16_t DevOutputLoop,uint16_t state);
#endif //__APP_RS485IR_H__

View File

@@ -0,0 +1,806 @@
/**
******************************************************************************
* @file BLV_485_Dev_LCDFun.c
* @author BLW RCU development Team
* @version 1.0
* @date 2023<32><33>10<31><30>07<30><37>
* @brief
******************************************************************************
*/
#include "includes.h"
#if RS485_LCD_1602_Flag
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_LCD_1602_Flag, BLW_RS485_LCD1602_Data_Init)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void BLW_RS485_LCD1602_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LCD_INFO *Rs485LCD, uint16_t LoopNum);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* @name : LCD<43><44><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
* @para :
* DataLen :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Data<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
void BLW_RS485_LCD_Data_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_LCD_INFO Rs485LCD;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485LCD,0,sizeof(RS485_LCD_INFO));
BUS_Public.addr = Data[1]; //<2F>豸485<38><35>ַ
BUS_Public.type = Data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = Data[3] + (Data[4]<<8) + (Data[5]<<16) + (Data[6]<<24); //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>115200
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = Data[7]; //<2F>豸Э<E8B1B8><D0AD>
Rs485LCD.DevOffline = Rs485LCD.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(Data[7])
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485LCD, Data[10]);break; //
default:
break;
}
switch(Data[2])
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO));
BUS485_Info.device_num += 1;
break;
default:
break;
}
}
/*******************************************************************************
* Function Name : BLW_RS485_LED_For_Logic_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_LCD_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_LCD_INFO Rs485LCD;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485LCD,0,sizeof(RS485_LCD_INFO));
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud;; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
Rs485LCD.DevOffline = Rs485LCD.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485LCD, dev_info->output_num);break; //
default:
break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO));
BUS485_Info.device_num += 1;
break;
default:
break;
}
}
/******************************************************************************
* Function: void Lcd1602_SetGlobal_Send()
* Parameter: RS485_LCD_INFO
* Return: NULL
* Description: <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ
*******************************************************************************/
void Lcd1602_SetGlobal_Send(RS485_LCD_INFO *Rs485LCD)
{
uint8_t lens = 0x17;
uint8_t buff[lens];
memset(buff,0,lens);
uint32_t temp_unix = 0;
temp_unix = RTC_Conversion_To_Unix(&RTC_Raw_Data);
buff[PKT_ADD_FM] = 0x00;
if(Rs485LCD->DevSendCnt == 0x00)
{
Rs485LCD->DevSendSN++;
if(Rs485LCD->DevSendSN > 0x0F) Rs485LCD->DevSendSN = 0x00;
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F);
buff[PKT_TYPE] |= BUS_Retry_Flag;
}
buff[PKT_DevType] = DEV_LCDTYPE;
buff[PKT_ADD_TO] = 0x01;
buff[PKT_LEN] = lens;
buff[PKT_CMD] = LCD_CMD_GLOBAL;
buff[7] = Rs485LCD->G_Set_Flag;
buff[8] = Rs485LCD->CardState;
buff[9] = Rs485LCD->RoomState;
buff[10] = Rs485LCD->NetState;
buff[11] = Rs485LCD->OffLineDevType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
buff[12] = Rs485LCD->OffLineDevAddr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
buff[13] = temp_unix&0xff;
buff[14] = (temp_unix>>8)&0xff;
buff[15] = (temp_unix>>16)&0xff;
buff[16] = (temp_unix>>24)&0xff;
buff[17] = Rs485LCD->ProductCode&0xff;
buff[18] = (Rs485LCD->ProductCode>>8)&0xff;
buff[19] = Rs485LCD->LockState;
buff[20] = Rs485LCD->InputType;
buff[21] = Rs485LCD->InputAddr;
buff[22] = Rs485LCD->InputLoop;
buff[PKT_CHKSUM] = CheckSum(buff, buff[PKT_LEN]);
MCU485_SendString(USART_3,buff, buff[PKT_LEN]);
}
/******************************************************************************
* Function: void Lcd1602_SetNet_Send()
* Parameter: RS485_LCD_INFO
* Return: NULL
* Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*******************************************************************************/
void Lcd1602_SetNet_Send(RS485_LCD_INFO *Rs485LCD)
{
uint8_t lens = 0x1D;
uint8_t buff[lens];
memset(buff,0,lens);
buff[PKT_ADD_FM] = 0x00;
if(Rs485LCD->DevSendCnt == 0x00)
{
Rs485LCD->DevSendSN++;
if(Rs485LCD->DevSendSN > 0x0F) Rs485LCD->DevSendSN = 0x00;
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F);
buff[PKT_TYPE] |= BUS_Retry_Flag;
}
buff[PKT_DevType] = DEV_LCDTYPE;
buff[PKT_ADD_TO] = 0x01;
buff[PKT_LEN] = lens;
buff[PKT_CMD] = LCD_CMD_NETINF;
buff[7] = Rs485LCD->Net_Set_Flag;
buff[8] = server_info.dhcp_en;
memcpy(&buff[9],Rs485LCD->Ip,4);
memcpy(&buff[13],Rs485LCD->Mask,4);
memcpy(&buff[17],Rs485LCD->Gateway,4);
memcpy(&buff[21],Rs485LCD->Dns,4);
memcpy(&buff[25],Rs485LCD->Serverip,4);
buff[PKT_CHKSUM] = CheckSum(buff, buff[PKT_LEN]);
MCU485_SendString(USART_3,buff, buff[PKT_LEN]);
}
/******************************************************************************
* Function: void Lcd1602_SetHw_Send()
* Parameter: RS485_LCD_INFO
* Return: NULL
* Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ
*******************************************************************************/
void Lcd1602_SetHw_Send(RS485_LCD_INFO *Rs485LCD)
{
uint8_t lens = 0x23;
uint8_t buff[lens];
memset(buff,0,lens);
buff[PKT_ADD_FM] = 0x00;
if(Rs485LCD->DevSendCnt == 0x00)
{
Rs485LCD->DevSendSN++;
if(Rs485LCD->DevSendSN > 0x0F) Rs485LCD->DevSendSN = 0x00;
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F);
buff[PKT_TYPE] |= BUS_Retry_Flag;
}
buff[PKT_DevType] = DEV_LCDTYPE;
buff[PKT_ADD_TO] = 0x01;
buff[PKT_LEN] = lens;
buff[PKT_CMD] = LCD_CMD_DEVINF;
memcpy(&buff[7],Rs485LCD->Fw_ver,20);
buff[27] = Rs485LCD->Cfg_ver[0];
buff[28] = Rs485LCD->Cfg_ver[1];
memcpy(&buff[29],Rs485LCD->Mac,6);
buff[PKT_CHKSUM] = CheckSum(buff, buff[PKT_LEN]);
MCU485_SendString(USART_3,buff, buff[PKT_LEN]);
}
/******************************************************************************
* Function: void Lcd1602_Poll_Send()
* Parameter: RS485_LCD_INFO
* Return: NULL
* Description: ѯ<><D1AF>״̬<D7B4>ı<EFBFBD>
*******************************************************************************/
void Lcd1602_Poll_Send(RS485_LCD_INFO *Rs485LCD)
{
uint8_t lens = 0x07;
uint8_t buff[lens];
memset(buff,0,lens);
buff[PKT_ADD_FM] = 0x00;
if(Rs485LCD->DevSendCnt == 0x00)
{
Rs485LCD->DevSendSN++;
if(Rs485LCD->DevSendSN > 0x0F) Rs485LCD->DevSendSN = 0x00;
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
buff[PKT_TYPE] |= (Rs485LCD->DevSendSN & 0x0F);
buff[PKT_TYPE] |= BUS_Retry_Flag;
}
buff[PKT_DevType] = DEV_LCDTYPE;
buff[PKT_ADD_TO] = 0x01;
buff[PKT_LEN] = lens;
buff[PKT_CMD] = LCD_CMD_INQUIRY;
buff[PKT_CHKSUM] = CheckSum(buff, buff[PKT_LEN]);
MCU485_SendString(USART_3,buff, buff[PKT_LEN]);
}
/******************************************************************************
* Function: void LCD1602_CtrlDevice()
* Parameter: devtype - <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* devaddr - <20><EFBFBD><E8B1B8>ַ
* state - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>·״̬
* Return: NULL
* Description: ѯ<><D1AF>״̬<D7B4>ı<EFBFBD>
*******************************************************************************/
void LCD1602_CtrlDevice(uint8_t devtype,uint8_t devaddr,uint32_t state)
{
uint32_t listaddr = 0;
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
listaddr = Find_AllDevice_List_Information(devtype,devaddr);
if(NULL != listaddr)
{
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),listaddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(devtype)
{
case Dev_Host_HVout:
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),listaddr+Dev_Privately);
// if(state==0xffffffff)
// {
// UINT64DATACONVER(DevHVoutInfo.DevHVoutState) |= state;
// }
// else if(state==0x00)
// {
// UINT64DATACONVER(DevHVoutInfo.DevHVoutState) &= state;
// }
// else
// {
// UINT64DATACONVER(DevHVoutInfo.DevHVoutState) = 0x00;
// UINT64DATACONVER(DevHVoutInfo.DevHVoutState) |= state;
// }
for(uint8_t i=0;i<DevHVoutInfo.HVoutLoopValidNum;i++)
{
if( ( state & (0x01 << i) ) != 0x00 )
{
DevHVoutInfo.DevHVoutState[i] = 0x01;
}else {
DevHVoutInfo.DevHVoutState[i] = 0x00;
}
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),listaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),listaddr+Dev_Privately);
break;
default:
break;
}
}
}
/*******************************************************************************
* Function Name : BLW_LCD1602_CycleCtrl
* Parameter: <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* Return: RS485OCCUPYTIME - ռ<>÷<EFBFBD><C3B7><EFBFBD> RS485OCCUPYNOTIME - <20><>ռ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
* Description : LCD1602<30><32>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_LCD1602_CycleCtrl(uint32_t dev_addr)
{
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_LCD_INFO Rs485LCD;
uint8_t KeepFlag = 0x00;
uint32_t temp = 0x00;
uint8_t temp_buff[4] = {0};
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO),dev_addr+Dev_Privately);
/*<2A>忨״̬<D7B4>ж<EFBFBD>*/
if(Rs485LCD.CardState != DevActionGlobal.DevActionU64Cond.EleState)
{
Rs485LCD.CardState = DevActionGlobal.DevActionU64Cond.EleState;
Rs485LCD.G_Set_Flag |= (0x01<<0);
}
/*<2A><>̬<EFBFBD>ж<EFBFBD>*/
SRAM_Read_Buff(temp_buff,4,(FLASH_Register_Start_ADDRESS + Register_RoomRent_OFFSET));
temp = temp_buff[0] + (temp_buff[1]<<8) + (temp_buff[2]<<16) + (temp_buff[3]<<24);
if(Rs485LCD.RoomState != (temp&0xff))
{
Rs485LCD.RoomState = temp&0xff;
Rs485LCD.G_Set_Flag |= (0x01<<1);
}
/*<2A><><EFBFBD><EFBFBD>״̬<D7B4>ж<EFBFBD>*/
if(Rs485LCD.NetState != server_info.online_state)
{
Rs485LCD.NetState = server_info.online_state;
Rs485LCD.G_Set_Flag |= (0x01<<2);
}
/*<2A><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD><DFB1><EFBFBD><EFBFBD>ж<EFBFBD>*/
if((Rs485LCD.OffLineDevType != DevActionGlobal.OffLineDevType)||\
(Rs485LCD.OffLineDevAddr != DevActionGlobal.OffLineDevAddr))
{
Rs485LCD.OffLineDevType = DevActionGlobal.OffLineDevType;
Rs485LCD.OffLineDevAddr = DevActionGlobal.OffLineDevAddr;
Rs485LCD.G_Set_Flag |= (0x01<<3);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
if((Rs485LCD.InputType != DevActionGlobal.InputType) || (Rs485LCD.InputAddr != DevActionGlobal.InputAddr) ||\
(Rs485LCD.InputLoop != DevActionGlobal.InputLoop))
{
Rs485LCD.InputType = DevActionGlobal.InputType;
Rs485LCD.InputAddr = DevActionGlobal.InputAddr;
Rs485LCD.InputLoop = DevActionGlobal.InputLoop;
Rs485LCD.G_Set_Flag |= (0x01<<4);
}
/*UTCʱ<43><CAB1><EFBFBD>ж<EFBFBD>*/
if((SysTick_1s - Rs485LCD.UTC_Tick > 600) || (server_info.sync_tick == 0x02))
{
Rs485LCD.UTC_Tick = SysTick_1s;
Rs485LCD.G_Set_Flag |= (0x01<<5);
server_info.sync_tick = 0x00;
}
/*<2A><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
Flash_Read(temp_buff,4,(FLASH_Register_Start_ADDRESS + Register_ProjectCode_OFFSET));
temp = temp_buff[0] + (temp_buff[1]<<8) + (temp_buff[2]<<16) + (temp_buff[3]<<24);
if(Rs485LCD.ProductCode != temp)
{
Rs485LCD.ProductCode = temp&0x0ffff;
Rs485LCD.G_Set_Flag |= (0x01<<6);
}
/*<2A><><EFBFBD><EFBFBD>״̬*/
if(Rs485LCD.LockState != Get_Authorize_Lock_Status())
{
Rs485LCD.LockState = Get_Authorize_Lock_Status();
Rs485LCD.G_Set_Flag |= (0x01<<7);
}
/*IP<49>Ƚ<EFBFBD>*/
if(memcmp(Rs485LCD.Ip,net_info.local_ip,4)!=0x00)
{
memcpy(Rs485LCD.Ip,net_info.local_ip,4);
Rs485LCD.Net_Set_Flag |= (0x01<<0);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>*/
if(memcmp(Rs485LCD.Mask,net_info.mask,4)!=0x00)
{
memcpy(Rs485LCD.Mask,net_info.mask,4);
Rs485LCD.Net_Set_Flag |= (0x01<<1);
}
/*Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>رȽ<D8B1>*/
if(memcmp(Rs485LCD.Gateway,net_info.gwip_addr,4)!=0x00)
{
memcpy(Rs485LCD.Gateway,net_info.gwip_addr,4);
Rs485LCD.Net_Set_Flag |= (0x01<<2);
}
/*DNS<4E>Ƚ<EFBFBD>*/
if(memcmp(Rs485LCD.Dns,DNS_SERVER_IP,4)!=0x00)
{
memcpy(Rs485LCD.Dns,DNS_SERVER_IP,4);
Rs485LCD.Net_Set_Flag |= (0x01<<3);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49>Ƚ<EFBFBD>*/
if(memcmp(Rs485LCD.Serverip,server_info.dis_ip,4)!=0x00)
{
memcpy(Rs485LCD.Serverip,server_info.dis_ip,4);
Rs485LCD.Net_Set_Flag |= (0x01<<4);
}
/*<2A>̼<EFBFBD><CCBC><EFBFBD>Ƚ<EFBFBD>*/
if(memcmp(Rs485LCD.Fw_ver,SoftwareVer,20)!=0x00)
{
memcpy(Rs485LCD.Fw_ver,SoftwareVer,20);
Rs485LCD.Hw_Set_Flag |= (0x01<<0);
}
/*<2A><><EFBFBD>ð汾<C3B0>Ƚ<EFBFBD>*/
SRAM_Read_Buff(temp_buff,4,SRAM_Register_Start_ADDRESS + Register_ConfigVersion_OFFSET);
if(memcmp(Rs485LCD.Cfg_ver,temp_buff,4)!=0x00)
{
memcpy(Rs485LCD.Cfg_ver,temp_buff,4);
Rs485LCD.Hw_Set_Flag |= (0x01<<1);
}
/*MAC<41>Ƚ<EFBFBD>*/
if(memcmp(Rs485LCD.Mac,MACAddr,6)!=0x00)
{
memcpy(Rs485LCD.Mac,MACAddr,6);
Rs485LCD.Hw_Set_Flag |= (0x01<<2);
}
if(Rs485LCD.G_Set_Flag != 0x00)
{
if(0x00 != Rs485LCD.CtrlCnt)
{
Rs485LCD.CtrlCnt--;
Lcd1602_SetGlobal_Send(&Rs485LCD); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else
{
Rs485LCD.G_Set_Flag = 0x00;
}
}
else if(Rs485LCD.Net_Set_Flag != 0x00)
{
if(0x00 != Rs485LCD.CtrlCnt)
{
Rs485LCD.CtrlCnt--;
Lcd1602_SetNet_Send(&Rs485LCD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else
{
Rs485LCD.Net_Set_Flag = 0x00;
}
}
else if(Rs485LCD.Hw_Set_Flag != 0x00)
{
if(0x00 != Rs485LCD.CtrlCnt)
{
Rs485LCD.CtrlCnt--;
Lcd1602_SetHw_Send(&Rs485LCD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else
{
Rs485LCD.Hw_Set_Flag = 0x00;
}
}
else
{
Lcd1602_Poll_Send(&Rs485LCD); //<2F><>ѯ״̬
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485LCD.DevSendCnt > LCD_RETRY_TIME)
{
if(Rs485LCD.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485 LCD DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_LCDTYPE,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LCD.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485LCD.DevOffline != Rs485LCD.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LCD.DevOfflineLast = Rs485LCD.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
Rs485LCD.DevSendCnt++; //
}
// Rs485LCD.inquire_tick = SysTick_1ms;
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485LCD.comm_record,0x01,0x00);
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LCD, sizeof(RS485_LCD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
#define RECDATALENMAX 0x30 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_LCD1602_Check
* Description : LCD1602<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : dev_addr:<3A><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ data_addr:<3A><><EFBFBD>ݵ<EFBFBD>ַ len: <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return : 0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_LCD1602_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = IsNotMyData;
Device_Public_Information_G BUS_Public;
RS485_LCD_INFO Rs485LCD;
uint8_t data[RECDATALENMAX];
uint8_t tempdata[4] = {0};
uint32_t relay_L = 0; //<2F><>32λ
uint32_t relay_H = 0; //<2F><>32λ
uint8_t wflash_flag = 0;
if(len > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ!!");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if((data[0] != 0x01) || (DEV_LCDTYPE != data[2])) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"LCD1602<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO),dev_addr+Dev_Privately);
switch(data[6])
{
case LCD_CMD_GLOBAL_R:
case LCD_CMD_NETINF_R:
case LCD_CMD_DEVINF_R:
case LCD_CMD_INQUIRY_R:
rev = IsMyData;
Rs485LCD.CtrlCnt = LCD_RETRY_TIME;
if(Rs485LCD.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_LCDTYPE,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LCD.DevSendCnt = 0x00;
Rs485LCD.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485LCD.DevOffline != Rs485LCD.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LCD.DevOfflineLast = Rs485LCD.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
// BLV_Communication_Record(&Rs485LCD.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[6])
{
case LCD_CMD_GLOBAL_R:
Rs485LCD.G_Set_Flag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case LCD_CMD_NETINF_R:
Rs485LCD.Net_Set_Flag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case LCD_CMD_DEVINF_R:
Rs485LCD.Hw_Set_Flag = 0x00;
break;
case LCD_CMD_INQUIRY_R:
if(data[7]!=0x00)
{
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD 0x60 Ack 0x61 Buff:",data,len);
}
if((SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET + 1)==0x01)&&\
(SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET) == 0x02)) //ֻ<><D6BB><EFBFBD><EFBFBD>ʹ<EFBFBD>ù̶<C3B9>IP<49><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(((data[7]>>0)&0x01)==0x01) //<2F><><EFBFBD><EFBFBD>IP<49><50>ַ
{
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD Set IP:",&data[8],4);
SRAM_Read_Buff(tempdata,4,(SRAM_Register_Start_ADDRESS+Register_NetIP_OFFSET));
if(memcmp(&data[8],tempdata,4)!=0x00)
{
SRAM_Write_Buff(&data[8],4,(SRAM_Register_Start_ADDRESS+Register_NetIP_OFFSET));
wflash_flag = 0x01;
}
server_info.init_flag = 0x00;
}
if(((data[7]>>1)&0x01)==0x01) //<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD Set Gateway:",&data[12],4);
SRAM_Read_Buff(tempdata,4,(SRAM_Register_Start_ADDRESS+Register_NetGateway_OFFSET));
if(memcmp(&data[12],tempdata,4)!=0x00)
{
SRAM_Write_Buff(&data[12],4,(SRAM_Register_Start_ADDRESS+Register_NetGateway_OFFSET));
wflash_flag = 0x01;
}
server_info.init_flag = 0x00;
}
if(((data[7]>>2)&0x01)==0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD Set Mask:",&data[16],4);
SRAM_Read_Buff(tempdata,4,(SRAM_Register_Start_ADDRESS+Register_NetMask_OFFSET));
if(memcmp(&data[16],tempdata,4)!=0x00)
{
SRAM_Write_Buff(&data[16],4,(SRAM_Register_Start_ADDRESS+Register_NetMask_OFFSET));
wflash_flag = 0x01;
}
server_info.init_flag = 0x00;
}
if(((data[7]>>3)&0x01)==0x01) //<2F><><EFBFBD><EFBFBD>DNS
{
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD Set DNS:",&data[20],4);
SRAM_Read_Buff(tempdata,4,(SRAM_Register_Start_ADDRESS+Register_DNSServerIP_OFFSET));
if(memcmp(&data[20],tempdata,4)!=0x00)
{
SRAM_Write_Buff(&data[20],4,(SRAM_Register_Start_ADDRESS+Register_DNSServerIP_OFFSET));
wflash_flag = 0x01;
}
server_info.init_flag = 0x00;
}
}
if(SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET + 2)==0x01) //ֻ<>в<EFBFBD><D0B2>ñ<EFBFBD><C3B1>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(((data[7]>>4)&0x01)==0x01) //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>IP
{
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD Set Server IP:",&data[24],4);
SRAM_Read_Buff(tempdata,4,(SRAM_Register_Start_ADDRESS+Register_WebServerIP_OFFSET));
if(memcmp(&data[24],tempdata,4)!=0x00)
{
SRAM_Write_Buff(&data[24],4,(SRAM_Register_Start_ADDRESS+Register_WebServerIP_OFFSET));
wflash_flag = 0x01;
}
server_info.init_flag = 0x00;
}
}
if(wflash_flag==0x01)
{
Retain_Flash_Register_Data();
}
if(((data[7]>>5)&0x01)==0x01) //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485LCD Relay Ctrl");
relay_L = data[28] + (data[29]<<8) + (data[30]<<16) + (data[31]<<24);
relay_H = data[32] + (data[33]<<8) + (data[34]<<16) + (data[35]<<24);
if((relay_L==0xffffffff)&&(relay_H==0x0f)) //ȫ<><C8AB>
{
LCD1602_CtrlDevice(Dev_Host_HVout,0x00,relay_L);
}
else if((relay_L==0x00)&&(relay_H==0x00)) //ȫ<><C8AB>
{
LCD1602_CtrlDevice(Dev_Host_HVout,0x00,relay_L);
}
else //<2F><>һ<EFBFBD><D2BB>
{
LCD1602_CtrlDevice(Dev_Host_HVout,0x00,relay_L);
}
}
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LCD, sizeof(RS485_LCD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LCD,sizeof(RS485_LCD_INFO),dev_addr+Dev_Privately);
}
return rev;
}
void BLW_RS485_LCD1602_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LCD_INFO *Rs485LCD, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLW_LCD1602_CycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_LCD1602_Check;
Rs485LCD->CtrlCnt = LCD_RETRY_TIME;
}
#endif

View File

@@ -0,0 +1,91 @@
#ifndef _BLV_485_DEV_LCDFUN_H_
#define _BLV_485_DEV_LCDFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
#define LCD_RETRY_TIME 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define DEV_LCDTYPE ((uint8_t)0xF3) //LCD<43><44><EFBFBD><EFBFBD>
#define LCD_CMD_GLOBAL 0x30 //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ
#define LCD_CMD_GLOBAL_R 0x31 //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD>ظ<EFBFBD>
#define LCD_CMD_NETINF 0x40 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define LCD_CMD_NETINF_R 0x41 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ظ<EFBFBD>
#define LCD_CMD_DEVINF 0x50 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ
#define LCD_CMD_DEVINF_R 0x51 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD>ظ<EFBFBD>
#define LCD_CMD_INQUIRY 0x60 //ѯ<><D1AF>״̬<D7B4>ı<EFBFBD>
#define LCD_CMD_INQUIRY_R 0x61 //ѯ<><D1AF>״̬<D7B4>ı<EFBFBD><C4B1>ظ<EFBFBD>
#define LCD_CMD_POLLCHECK 0x70 //Ѳ<><D1B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
#define LCD_CMD_POLLCHECK_R 0x71 //Ѳ<><D1B2>״̬<D7B4><CCAC><EFBFBD>ûظ<C3BB>
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt:4; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline:2; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast:2; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevSendSN; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>SN<53><4E>
uint8_t CtrlCnt;
uint8_t G_Set_Flag; //ȫ<><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint8_t CardState; //<2F>忨״̬
uint8_t RoomState; //<2F><>̬
uint8_t NetState; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t OffLineDevType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t OffLineDevAddr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
uint32_t UTC_Tick; //UTCͬ<43><CDAC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint16_t ProductCode; //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
uint8_t LockState; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t InputType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t InputAddr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
uint8_t InputLoop; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>·
uint8_t Net_Set_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint8_t DHCP_en; //DHCPʹ<50>ܱ<EFBFBD><DCB1><EFBFBD>
uint8_t Ip[4]; //IP<49><50><EFBFBD><EFBFBD>
uint8_t Mask[4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBBBA>
uint8_t Gateway[4]; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>
uint8_t Dns[4]; //DNS<4E><53><EFBFBD><EFBFBD>
uint8_t Serverip[4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50><EFBFBD><EFBFBD>
uint8_t Hw_Set_Flag; //<2F><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint8_t Fw_ver[20]; //<2F>̼<EFBFBD><CCBC><EFBFBD><E6B1BE><EFBFBD><EFBFBD>
uint8_t Cfg_ver[4]; //<2F><><EFBFBD>ð汾<C3B0><E6B1BE><EFBFBD><EFBFBD>
uint8_t Mac[6]; //MAC<41><43><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_LCD_INFO; //LCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLW_RS485_LCD_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_LCD_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,867 @@
/**
******************************************************************************
* @file BLV_485_Dev_LEDFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2021<32><31>12<31><32>08<30><38>
* @brief
* 485<38><35><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>
* @log 202205121720 SongHan Ⱥ<><C8BA><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> CFG_Dev_CtrlWay_Is_Dim_Open
* @log 202205261640 SongHan <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_LEDFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ*/
#include "BLV_485_Dev_PWMFun.h"
#include "BLV_485_Dev_A9LDFun.h"
#include "BLV_485_Dev_SliderFun.h"
#include "BLV_485_Dev_A8PBFun.h"
#include "BLV_485_Dev_C12DimFun.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
/*LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define LEDUPLIGHT 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80
#define LEDDOWNLIGHT 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20
#define LEDGRADUALTIME 30 //30 <20><>300ms
#define LEDSnMax 15 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define DEVLEDTYPE 24 //LED<45><44><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define GLOBAL_STEP_VALUE 0x14 //<2F><><EFBFBD><EFBFBD>20
#define GLOBAL_MAX_VALUE 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GLOBAL_MIN_VALUE 0x14 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_LED_PWM_Flag, BLW_RS485_PWM_Data_Init) //((DevFunP)NULL) //PWM<57><4D><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_LED_A9LD_Flag, BLW_RS485_A9LD_Data_Init) //((DevFunP)NULL) //A9LD<4C><44><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_03 DevExistJudgge(RS485_LED_Slider_Flag, BLW_RS485_Slider_Data_Init)//((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C7T<37>ĵ<EFBFBD>ַ<EFBFBD><D6B7>
#define RS485_DEV_PRO_FUN_04 DevExistJudgge(RS485_LED_A8PB_Flag, BLW_RS485_A8PB_Data_Init) //((DevFunP)NULL) //A8PB<50><42><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
#define RS485_DEV_PRO_FUN_05 DevExistJudgge(RS485_LED_C12Dim_Flag, BLW_RS485_C12Dim_Data_Init) //((DevFunP)NULL) //C12<31><32><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_06 DevExistJudgge(RS485_LED_RGB_Flag, BLW_RS485_RGB_Data_Init) //((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD>ģ<EFBFBD><C4A3>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
//uint8_t BLW_LEDCycleCtrl(uint32_t devaddr);
//uint8_t BLW_Rs485_LED_Check(uint32_t devaddr,uint32_t data_addr,uint16_t len);
//void BLW_Rs485_LED_4LOOP_Ctrl(uint32_t devaddr, RS485_LED_INFO* Rs485LEDInfo);
void BLW_LED_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);
uint16_t BLW_LED_Group_Read(uint32_t devaddr, uint8_t SceneType,uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start);
//void BLW_RS485_LED_Data_Init(uint8_t devaddr);
//uint8_t BLW_LEDCycleCtrl(uint32_t dev_addr);
//uint8_t BLW_Rs485_LED_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_LED_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
uint16_t BLW_LED_Read_State(uint32_t devaddr,uint16_t loop);
//uint8_t LED_State_Change_Get(uint32_t devaddr);
//void BLW_LED_Group_Control_State(uint32_t devaddr,uint16_t state);
uint8_t Get_BLV485_LED_Online_Status(uint32_t devaddr);
//void Pwm_State_Add(uint32_t devaddr);
//void Pwm_State_Dec(uint32_t devaddr);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* @name : LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
* @para :
* DataLen :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Data<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
void BLW_RS485_LED_Data_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485LED,0,sizeof(RS485_LED_INFO));
BUS_Public.addr = Data[1]; //<2F>豸485<38><35>ַ
BUS_Public.type = Data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = Data[3] + (Data[4]<<8) + (Data[5]<<16) + (Data[6]<<24); //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = Data[7]; //<2F>豸Э<E8B1B8><D0AD>
Rs485LED.PWM_Set_Time=30;
Rs485LED.RGB_Set_Time=30;
Rs485LED.A8PB_Set_Time=30;
Rs485LED.A9LD_Set_Time=30;
Rs485LED.C12_Set_Time=30;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_LED_Control_State;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = BLW_LED_Read_State;
BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl = BLW_LED_Group_Ctrl; //
BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr = BLW_LED_Group_Read; //
/*<2A><>ʼ<EFBFBD><CABC>LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ*/
// if(Data[10] >= LED_BUFF_Size) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
// {
// Rs485LED.LEDLoopValidNum = LED_BUFF_Size;
// }
// else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
// {
// Rs485LED.LEDLoopValidNum = Data[10];
// }
Rs485LED.DevOffline = DEV_IS_LINEUNINIT;
Rs485LED.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(Data[7])
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485LED, Data[10]);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485LED, Data[10]);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485LED, Data[10]);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485LED, Data[10]);break;
case ENUM_RS485_DEV_PRO_05: if(NULL!=RS485_DEV_PRO_FUN_05) RS485_DEV_PRO_FUN_05(&BUS_Public, &Rs485LED, Data[10]);break;
case ENUM_RS485_DEV_PRO_06: if(NULL!=RS485_DEV_PRO_FUN_06) RS485_DEV_PRO_FUN_06(&BUS_Public, &Rs485LED, Data[10]);break;
}
switch(Data[2])
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO));
BUS485_Info.device_num += 1;
break;
}
}
/*******************************************************************************
* Function Name : BLW_RS485_LED_For_Logic_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_LED_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485LED,0,sizeof(RS485_LED_INFO));
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud;; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
Rs485LED.PWM_Set_Time=30;
Rs485LED.RGB_Set_Time=30;
Rs485LED.A8PB_Set_Time=30;
Rs485LED.A9LD_Set_Time=30;
Rs485LED.C12_Set_Time=30;
Rs485LED.Dim_Global_Value = 100;
DevActionGlobal.DimGlobalValue = Rs485LED.Dim_Global_Value;
DevActionGlobal.Dim_Upper_limit = 100;
DevActionGlobal.Dim_Lower_limit = 0;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_LED_Control_State;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = BLW_LED_Read_State;
BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl = BLW_LED_Group_Ctrl; //
BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr = BLW_LED_Group_Read; //
/*<2A><>ʼ<EFBFBD><CABC>LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ*/
// if(dev_info->output_num >= LED_BUFF_Size) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
// {
// Rs485LED.LEDLoopValidNum = LED_BUFF_Size;
// }
// else if(0x00 == dev_info->output_num)
// {
// Rs485LED.LEDLoopValidNum = 0x01;
// }
// else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
// {
// Rs485LED.LEDLoopValidNum = dev_info->output_num;
// }
Rs485LED.DevOffline = Rs485LED.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485LED, dev_info->output_num);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485LED, dev_info->output_num);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485LED, dev_info->output_num);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485LED, dev_info->output_num);break;
case ENUM_RS485_DEV_PRO_05: if(NULL!=RS485_DEV_PRO_FUN_05) RS485_DEV_PRO_FUN_05(&BUS_Public, &Rs485LED, dev_info->output_num);break;
case ENUM_RS485_DEV_PRO_06: if(NULL!=RS485_DEV_PRO_FUN_06) RS485_DEV_PRO_FUN_06(&BUS_Public, &Rs485LED, dev_info->output_num);break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO));
BUS485_Info.device_num += 1;
break;
}
}
/*******************************************************************************
* Function Name : BLW_LED_Control_State
* Description : BLWLED<45><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
void BLW_LED_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start)
{
uint8_t temp1 = 0;
uint8_t CtrlMode; //<2F><><EFBFBD><EFBFBD>ģʽ
uint8_t CtrlContect;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
if(devaddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(loop >= Rs485LED.LEDLoopValidNum) //<2F><>Ч<EFBFBD><D0A7>·
{
return ;
}
CtrlMode = start&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_Stop:
case CFG_Dev_CtrlWay_Is_Dim_Up:
case CFG_Dev_CtrlWay_Is_Dim_Down:
Rs485LED.LEDLightnessReadFlag = 0x01; //Ψ<><CEA8>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3>Żᷢ<C5BB>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Rs485LED.LEDLightnessReadCnt = REPEATSENDTIMEMAX;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:%d <20><>ȡ<EFBFBD><C8A1>־:%d", CtrlMode, Rs485LED.LEDLightnessReadFlag); //
temp1++;
break;
}
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
case CFG_Dev_CtrlWay_Is_Dim_Stop:
Rs485LED.DevCtrlWayBuf[loop] = CtrlMode; // - CFG_Dev_CtrlWay_Is_LED_START + 1
Rs485LED.DevCtrlWayContect[loop] = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Open: //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Close:
Rs485LED.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD>
if(0x00 != Rs485LED.LEDLightRelease[loop]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ
{
CtrlContect = Rs485LED.LEDLightRelease[loop]; //<2F><> <20><>
}
else if(0x00 != CtrlContect) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CtrlContect = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ׼
}
else
{
CtrlContect = 0x64; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
Rs485LED.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(Rs485LED.DevSendBuf[loop] + CtrlContect <= 100)
{
Rs485LED.DevSendBuf[loop] += CtrlContect;
}
else
{
Rs485LED.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Rs485LED.DevSendBuf[loop] >= CtrlContect)
{
Rs485LED.DevSendBuf[loop] -= CtrlContect;
}
else
{
Rs485LED.DevSendBuf[loop] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up_Limit: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(0x00 != Rs485LED.DevSendBuf[loop])
{
if(Rs485LED.DevSendBuf[loop] + CtrlContect <= 100)
{
Rs485LED.DevSendBuf[loop] += CtrlContect;
}
else
{
Rs485LED.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
temp1++;
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Down_Limit: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Rs485LED.DevSendBuf[loop] > CtrlContect)
{
Rs485LED.DevSendBuf[loop] -= CtrlContect;
temp1++;
}
break;
// case CFG_Dev_CtrlWay_Is_Dim_UP_Limit: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485LED.LEDUpLightLimit = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// break;
// case CFG_Dev_CtrlWay_Is_Dim_DOWN_Limit: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485LED.LEDDownLightLimit = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// break;
}
// if(Rs485LED.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// Rs485LED.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
if(temp1 != 0x00)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d",loop,start);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LED, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
}
}
/*******************************************************************************
* Function Name : BLW_LED_Read_State
* Description : BLWLED<45><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
uint16_t BLW_LED_Read_State(uint32_t devaddr,uint16_t loop)
{
if(devaddr == 0x00)
return 0x00;
RS485_LED_INFO Rs485LED;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(loop >= Rs485LED.LEDLoopValidNum)
{
return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
}
return Rs485LED.DevSendBuf[loop];
}
/*<2A><>ȡLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
uint8_t Get_BLV485_LED_Online_Status(uint32_t devaddr)
{
RS485_LED_INFO Rs485LED;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(Rs485LED.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
//#define LEDCTRLSENDLEN 18
///**
// * @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
// * @para
// * dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
// * @return <20><>
// * @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
// */
//void BLW_Rs485_LED_4LOOP_Ctrl(uint32_t dev_addr, RS485_LED_INFO* Rs485LEDInfo)
//{
//// RS485_LED_INFOP Rs485LEDInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
//// uint8_t i;
// uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port); //ͨѶ<CDA8>˿<EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> <20><><EFBFBD><EFBFBD>0.1s <20><><EFBFBD><EFBFBD> CH8 CH7 CH6 CH5 CH4 CH3 CH2 CH1
// uint8_t SendBuf[18] = {0x00, 0x00, DEVLEDTYPE, 0x01, LEDCTRLSENDLEN, 0x18, 0x21, 0x0f, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x50};
//
//
// SendBuf[1] |= BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, LEDSnMax);
//
// SendBuf[3] = DevAddr; //
// SendBuf[8] = LEDGRADUALTIME; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
//// for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
//// {
//// SendBuf[16-i] = Rs485LEDInfo->DevSendBuf[i];
//// }
// memcpy(&SendBuf[14], &Rs485LEDInfo->DevSendBuf[0], Rs485LEDInfo->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
// SendBuf[5] = CheckSum_Overlook_Check(SendBuf, LEDCTRLSENDLEN, 5);
//
// MCU485_SendString(port,SendBuf,LEDCTRLSENDLEN);
//// RS485_Port_SendFun(CfgDevAdd, SendBuf, LEDCTRLSENDLEN, BLWLEDCTRLTIMEOUT);
//
//}
/**@name <20><><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>
*@para <20><>
*@ret Ϊ1 <20>б仯 Ϊ0 <20>ޱ仯
*/
//uint8_t LED_State_Change_Get(uint32_t devaddr)
//{
// uint8_t i;
// uint8_t Ret = 0x00;
// uint8_t temp1 = 0;
// Device_Public_Information_G BUS_Public;
// RS485_LED_INFO Rs485LEDInfo;
// if(devaddr == 0x00) return 0;
//
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
// SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
//
// for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i ++)
// {
// if(Rs485LEDInfo.DevSendBufNext[i] != Rs485LEDInfo.DevSendBuf[i]) //״̬<D7B4>
// {
// Ret = 0x01; //<2F>б
// temp1++;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"LED<45><44><EFBFBD><EFBFBD>״̬<D7B4>仯 DevSendBuf loop:%d,start:%d\r\n", i, Rs485LEDInfo.DevSendBuf[i]); //<2F><><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>ӡ
//
// memcpy(Rs485LEDInfo.DevSendBufNext, Rs485LEDInfo.DevSendBuf, Rs485LEDInfo.LEDLoopValidNum); //ͬ<><CDAC>״̬
// break;
// }
// }
//
// if(temp1 != 0x00)
// {
// BUS_Public.check = 0x00;
// BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO));
// SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
//
// }
//
// return Ret;
//}
/*******************************************************************************
* Function Name : BLW_LED_Group_Ctrl
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
void BLW_LED_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start)
{
// uint8_t crc_val = 0;//,temp1 = 0;
// uint1_t state; //0<><30> 1<><31>
uint8_t i;
uint8_t CtrlMode = 0,CtrlContect = 0;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo;
if(devaddr == 0x00) return;
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"LED<45><44><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ؿ<EFBFBD><D8BF>ƿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>־<EFBFBD><D6BE>%04X <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>%d ", CtrlFlag, CtrlNum);
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(CtrlNum >= Rs485LEDInfo.LEDLoopValidNum)
{
CtrlNum = Rs485LEDInfo.LEDLoopValidNum;
}
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"LED<45><44><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ؿ<EFBFBD><D8BF>ƿ<EFBFBD>ʼ<><CAB5><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>%d", CtrlNum);
for(i = 0; i < CtrlNum; i++)
{
if(CtrlFlag&(0x0001<<i)) //<2F><><30><CEAA><EFBFBD><EFBFBD>
{
// temp1++;
CtrlMode = start[i]&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start[i]>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s <20><>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD>:%04X ",__func__, i+1, start[i]);
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_Stop: //Ψ<><CEA8>ֹͣ<CDA3><D6B9><EFBFBD>Żᷢ<C5BB>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
// case CFG_Dev_CtrlWay_Is_Dim_Up:
// case CFG_Dev_CtrlWay_Is_Dim_Down:
Rs485LEDInfo.LEDLightnessReadFlag = 0x01;
Rs485LEDInfo.LEDLightnessReadCnt = REPEATSENDTIMEMAX;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ģʽ:%d<><64><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>־:%d", CtrlMode, Rs485LEDInfo.LEDLightnessReadFlag); //
break;
}
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
case CFG_Dev_CtrlWay_Is_Dim_Stop:
Rs485LEDInfo.DevCtrlWayBuf[i] = CtrlMode; // - CFG_Dev_CtrlWay_Is_LED_START + 1
Rs485LEDInfo.DevCtrlWayContect[i] = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case CFG_Dev_CtrlWay_Is_Open: //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Close:
Rs485LEDInfo.DevSendBuf[i] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD>
if(0x00 != Rs485LEDInfo.LEDLightRelease[i]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ
{
CtrlContect = Rs485LEDInfo.LEDLightRelease[i]; //<2F><> <20><>
}
else if(0x00 != CtrlContect) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CtrlContect = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ׼
}
else
{
CtrlContect = 0x64; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Ⱥ<>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BFAA><EFBFBD>±<EFBFBD>:%d<><64>״̬:%d\r\n", i, CtrlContect); //
Rs485LEDInfo.DevSendBuf[i] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(Rs485LEDInfo.DevSendBuf[i] + CtrlContect <= 100)
{
Rs485LEDInfo.DevSendBuf[i] += CtrlContect;
}
else
{
Rs485LEDInfo.DevSendBuf[i] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Rs485LEDInfo.DevSendBuf[i] >= CtrlContect)
{
Rs485LEDInfo.DevSendBuf[i] -= CtrlContect;
}
else
{
Rs485LEDInfo.DevSendBuf[i] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Up_Limit: //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(0x00 != Rs485LEDInfo.DevSendBuf[i])
{
if(Rs485LEDInfo.DevSendBuf[i] + CtrlContect <= 100)
{
Rs485LEDInfo.DevSendBuf[i] += CtrlContect;
}
else
{
Rs485LEDInfo.DevSendBuf[i] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// temp1++;
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Down_Limit: //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(0x00 != Rs485LEDInfo.DevSendBuf[i])
{
if(Rs485LEDInfo.DevSendBuf[i] > CtrlContect)
{
Rs485LEDInfo.DevSendBuf[i] -= CtrlContect;
// temp1++;
}
else
{
Rs485LEDInfo.DevSendBuf[i] = 0x01; //2024-11-25
}
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Up_Step_Cycle: //<2F>㰴ѭ<E3B0B4><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(Rs485LEDInfo.LedUpDown[i])
{
case 0x00: //<2F><><EFBFBD><EFBFBD>
if(Rs485LEDInfo.DevSendBuf[i] + CtrlContect < 100)
{
Rs485LEDInfo.DevSendBuf[i] += CtrlContect;
}
else
{
Rs485LEDInfo.LedUpDown[i] = 0x01;
Rs485LEDInfo.DevSendBuf[i] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>
// if(Rs485LEDInfo->DevSendBuf[DevOutputLoop] > CtrlContect)
// {
// Rs485LEDInfo->DevSendBuf[DevOutputLoop] -= CtrlContect;
// }
// else
{
Rs485LEDInfo.LedUpDown[i] = 0x00;
Rs485LEDInfo.DevSendBuf[i] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
break;
default:
Rs485LEDInfo.LedUpDown[i] = 0x00;
break;
}
break;
// case CFG_Dev_CtrlWay_Is_Dim_UP_Limit: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485LEDInfo.LEDUpLightLimit = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// break;
// case CFG_Dev_CtrlWay_Is_Dim_DOWN_Limit: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485LEDInfo.LEDDownLightLimit = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// break;
case CFG_Dev_CtrlWay_Is_PWM_Set_Time:
Rs485LEDInfo.PWM_Set_Time=CtrlContect;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"PWM_Set_Time:%d",Rs485LEDInfo.PWM_Set_Time);
break;
case CFG_Dev_CtrlWay_Is_A9LD_Set_Time:
Rs485LEDInfo.A9LD_Set_Time=CtrlContect;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A9LD_Set_Time:%d",Rs485LEDInfo.A9LD_Set_Time);
break;
case CFG_Dev_CtrlWay_Is_A8PB_Set_Time:
Rs485LEDInfo.A8PB_Set_Time=CtrlContect;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"A8PB_Set_Time:%d",Rs485LEDInfo.A8PB_Set_Time);
break;
case CFG_Dev_CtrlWay_Is_C12_Set_Time:
Rs485LEDInfo.C12_Set_Time=CtrlContect;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12_Set_Time:%d - %d",Rs485LEDInfo.C12_Set_Time,i);
break;
case CFG_Dev_CtrlWay_Is_RGB_Set_Time:
Rs485LEDInfo.RGB_Set_Time=CtrlContect;
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Set_Time :%d",Rs485LEDInfo.RGB_Set_Time);
break;
case Dim_Global_Value_Cmd: //2024-1-30
DevActionGlobal.DimGlobalValue = CtrlContect; //2025-08-22
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dim Global Value Set:%d",CtrlContect);
break;
case Dim_UpLimit_Value_Cmd:
// Rs485LEDInfo.LEDUpLightLimit = CtrlContect;
DevActionGlobal.Dim_Upper_limit = CtrlContect; //2024-11-01 <20><><EFBFBD>ÿɵ<C3BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dim UpLimit Value Set:%d",CtrlContect);
break;
case Dim_DnLimit_Value_Cmd:
// Rs485LEDInfo.LEDDownLightLimit = CtrlContect;
DevActionGlobal.Dim_Lower_limit = CtrlContect; //2024-11-01 <20><><EFBFBD>ÿɵ<C3BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dim DownLimit Value Set:%d",CtrlContect);
break;
}
}
}
// if(temp1 != 0x00)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
}
}
/*******************************************************************************
* Function Name : BLW_C12Dimming_Group_Ctrl
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD> <20><><EFBFBD>ؿ<EFBFBD> <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ع<EFBFBD>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
uint16_t BLW_LED_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start)
{
uint8_t i;
uint8_t Ret = 0x00;
uint8_t CtrlMode = 0,CtrlContect = 0;
uint8_t tempflag =0x00;
if(devaddr == 0x00) return 0x00;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>·<EFBFBD><C2B7>־:%08X ", ReadFlag);
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(ReadNum >= Rs485LEDInfo.LEDLoopValidNum)
{
ReadNum = Rs485LEDInfo.LEDLoopValidNum;
}
switch(SceneType)
{
case 0x01:
for(i = 0; i < ReadNum; i++)
{
if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
{
CtrlMode = start[i]&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start[i]>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD>:%04X ", i+1, start[i]);
switch(CtrlMode)
{
case 0x01: //״̬<D7B4><CCAC>
case 0x02: //״̬<D7B4><CCAC>
if(Rs485LEDInfo.DevSendBuf[i] != CtrlContect)
{
Ret = DEV_STATE_CLOSE;
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD><20><>ǰ״̬<D7B4>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((0x00 != Rs485LEDInfo.LEDLightRelease[i]) && (Rs485LEDInfo.LEDLightRelease[i] != Rs485LEDInfo.DevSendBuf[i]))
{
Ret = DEV_STATE_CLOSE;
}
else if((0x00 == Rs485LEDInfo.LEDLightRelease[i]) && (Rs485LEDInfo.DevSendBuf[i] != CtrlContect))
{
Ret = DEV_STATE_CLOSE;
}
break;
}
}
}
break;
case 0x02:
for(i = 0; i < ReadNum; i++)
{
if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
{
CtrlMode = start[i]&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start[i]>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD>:%04X ", i+1, start[i]);
if(0x01 == CtrlMode) //״̬<D7B4><CCAC>
{
if(Rs485LEDInfo.DevSendBuf[i] == CtrlContect)
{
Ret = DEV_STATE_OPEN;
break;
}
}
}
}
break;
}
if(0x00 == Ret) //
{
switch(SceneType)
{
case 0x01:
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>");
Ret = DEV_STATE_OPEN;
break;
case 0x02:
Ret = DEV_STATE_CLOSE;
break;
}
}
/*2022-10-19 <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>豸״̬<D7B4><EFBFBD>ϱ<EFBFBD>*/
for(i = 0; i < ReadNum; i++)
{
if(Rs485LEDInfo.DevSaveBuf[i]!=Rs485LEDInfo.DevSendBuf[i])
{
Rs485LEDInfo.DevSaveBuf[i] = Rs485LEDInfo.DevSendBuf[i];
if(Rs485LEDInfo.DevSendBuf[i]==0)
{
Udp_Addtion_Roomstate(DEV_RS485_PWM,BUS_Public.addr,i+1,((Rs485LEDInfo.DevSendBuf[i]<<8)|0x0002));
}
else
{
Udp_Addtion_Roomstate(DEV_RS485_PWM,BUS_Public.addr,i+1,((Rs485LEDInfo.DevSendBuf[i]<<8)|0x0001));
}
tempflag++;
}
}
if(tempflag!=0)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
}
return Ret;
}

View File

@@ -0,0 +1,161 @@
#ifndef _BLV_485_DEV_LEDFUN_H_
#define _BLV_485_DEV_LEDFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"
#define DEV_LEDTYPE ((uint8_t)24) //LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define LEDLIGHTMAX 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define LEDLIGHTMIN 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dim_Global_Value_Cmd 0x30 //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dim_UpLimit_Value_Cmd 0x31 //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dim_DnLimit_Value_Cmd 0x32 //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
LED_OUT_CH01,
LED_OUT_CH02,
LED_OUT_CH03,
LED_OUT_CH04,
LED_OUT_CH05,
LED_OUT_CH06,
LED_OUT_CH07,
LED_OUT_CH08,
LED_OUT_CH09,
LED_OUT_CH10,
LED_OUT_CH11,
LED_OUT_CH12,
LED_OUT_CH13,
LED_OUT_CH14,
LED_OUT_CH15,
LED_OUT_CH16,
LED_OUT_CH17,
LED_OUT_CH18,
LED_OUT_CH19,
LED_OUT_CH20,
LED_OUT_CH21,
LED_OUT_CH22,
LED_OUT_CH23,
LED_OUT_CH24,
LED_OUT_CH25,
LED_OUT_CH26,
LED_OUT_CH27,
LED_OUT_CH28,
LED_OUT_CH29,
LED_OUT_CH30,
LED_OUT_CH31,
LED_OUT_CH32,
LED_OUT_CH_MAX,
}RS485_LED_OUT_NUM_E;
#define LED_BUFF_Size LED_OUT_CH_MAX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
//typedef void (*RS485_LED_IndiCtrl_ptr)(RS485_LED_INFOP, uint16_t Addr, uint16_t OnOff); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>ָʾ<D6B8>Ƹ<EFBFBD>ֵ
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendBuf[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7>״̬
uint8_t DevSendBuf_last[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevSendBufNext[LED_BUFF_Size]; //<2F>޸<EFBFBD>Ϊȫ<CEAA><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// uint8_t *DevSendBufRs485; //
// uint8_t *DevSendBufExUdp; //
uint8_t DevSaveBuf[LED_BUFF_Size];
uint8_t DevReadBuf[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4><EFBFBD><E4BBAF><EFBFBD>Ʊ<EFBFBD>־
uint8_t DevRecBuf[LED_BUFF_Size]; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
uint8_t DevRecBufLast[LED_BUFF_Size]; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
// uint8_t *LEDStateChangeFlag; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>־
// uint8_t *LEDKeepFlag; //<2F><><EFBFBD><EFBFBD><E2B1A3><EFBFBD><EFBFBD>־ 1<><31><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD> 0<><30><EFBFBD>ѻָ<D1BB>
// uint8_t *LEDKeepState; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
// uint8_t LEDGradualTime; //ÿ<>ε<EFBFBD><CEB5><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
uint8_t LEDSn; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾSn<53><6E>
uint8_t WayCtrli; //<2F><>ʽ<EFBFBD><CABD><EFBFBD>Ƶ<EFBFBD><C6B5>±<EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
// uint8_t LEDRangeSetFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־
// uint8_t LEDRangeSetCnt; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
uint8_t LEDUpLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDUpLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDDownLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDDownLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Dim_Global_Value_Last; //<2F>ϴ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Dim_GV_Flag; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint8_t PWM_Set_Time;
uint8_t A9LD_Set_Time;
uint8_t A8PB_Set_Time;
uint8_t C12_Set_Time;
uint8_t RGB_Set_Time;
uint16_t LEDCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־
uint8_t LEDCtrlCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t LEDLoopValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
uint8_t LEDLightRelease[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>
uint8_t LedUpDown[LED_BUFF_Size]; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B7BD>
uint8_t LEDLightnessReadFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t LEDLightnessReadCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
// uint8_t LEDGroupNum; //<2F><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDCycleStep; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
// uint8_t LEDUpFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>־λ
uint8_t DevCtrlWayBuf[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
uint8_t DevCtrlWayBuf_last[LED_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevCtrlWayContect[LED_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t LEDWayCtrlFlag; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ʊ<EFBFBD>־
uint8_t LEDWayCtrlCnt; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// RS485_LED_IndiCtrl_ptr RS485_LED_IndiCtrl; //ָʾ<D6B8>Ƹ<EFBFBD>ֵ
uint8_t init_flag; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ
}__attribute__ ((__packed__))RS485_LED_INFO; //485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLW_RS485_LED_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_LED_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void BLW_LED_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);
#endif

View File

@@ -0,0 +1,567 @@
/**
******************************************************************************
* @file BLV_485_Dev_MusicFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2021<32><31>12<31><32>08<30><38>
* @brief
* 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еı<D0B5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
2022.10.13 <09>ֿ<EFBFBD><D6BF><EFBFBD>
<09><>BLV_485_Dev_MusicFun.c<>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD><36>Э<EFBFBD><EFBFBD><E9A1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>֣<EFBFBD><D6A3><EFBFBD>ѯ<EFBFBD>˿ڣ<CBBF>
******************************************************************************
*/
#include "BLV_485_Dev_MusicFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ*/
#include "BLV_485_Dev_BLWMusicFun.h"
#include "BLV_485_Dev_HuaErSiFun.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
/*Music<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MusicSnMax 15 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_MUSIC_INFO *Rs485Music); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 ((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_MUSIC_BLW_Flag, BLW_RS485_BLWMusic_Data_Init) //((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_05 ((DevFunP)NULL) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ŀ<EFBFBD>ʼ***/
#define RS485_DEV_PRO_FUN_06 DevExistJudgge(RS485_MUSIC_HES_Flag, HuaErSi_RS485_Music_Data_Init) //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ľ<EFBFBD><EFBFBD><EFBFBD>***/
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
void BLW_Music_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
uint16_t BLW_Music_Read_State(uint32_t devaddr,uint16_t loop);
uint8_t Get_BLV485_Music_Online_Status(uint32_t devaddr);
void Dev_Logic_Music_Ctrl(uint32_t DevAddrIn, uint16_t DevInputLoop, uint32_t DevAddrOut, uint16_t DevOutputLoop, uint16_t DevOutputType);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* @name : Music<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
* @para :
* DataLen :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Data<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
void BLW_RS485_Music_Data_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_MUSIC_INFO Rs485Music;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485Music,0,sizeof(RS485_MUSIC_INFO));
BUS_Public.addr = Data[1]; //<2F>豸485<38><35>ַ
BUS_Public.type = DEV_RS485_MUSIC; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_Music_Control_State;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = BLW_Music_Read_State;
Rs485Music.DevOffline = Rs485Music.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
/*<2A><>ʼ<EFBFBD><CABC>Music<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>ʼֵ*/
if(Data[10] >= MUSICLOOPMAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485Music.MusicLoopValidNum = MUSICLOOPMAX;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485Music.MusicLoopValidNum = Data[10];
}
switch(Data[7])
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485Music);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485Music);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485Music);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485Music);break;
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ŀ<EFBFBD>ʼ***/
case ENUM_RS485_DEV_PRO_06: if(NULL!=RS485_DEV_PRO_FUN_06) RS485_DEV_PRO_FUN_06(&BUS_Public, &Rs485Music);break;
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ľ<EFBFBD><EFBFBD><EFBFBD>***/
}
switch(Data[2])
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* @name : Music<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
* @para :
* DataLen :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Data<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
void BLW_RS485_Music_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_MUSIC_INFO Rs485Music;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485Music,0,sizeof(RS485_MUSIC_INFO));
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud;; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x00C8; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> 2024-12-31 <20><>100ms<6D>ij<EFBFBD>200ms 100msʱС<CAB1><D0A1><EFBFBD><EFBFBD><E8B1B8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
BUS_Public.Protocol = dev_info->version;
#if LOGIC_FILE_EN
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_Logic_Music_Ctrl;
#else
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_Music_Control_State;
#endif
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = BLW_Music_Read_State;
Rs485Music.DevOffline = Rs485Music.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
/*<2A><>ʼ<EFBFBD><CABC>Music<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>ʼֵ*/
if(dev_info->output_num >= MUSICLOOPMAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485Music.MusicLoopValidNum = MUSICLOOPMAX;
}
else if(0x00 == dev_info->output_num)
{
Rs485Music.MusicLoopValidNum = 0x01; //Ĭ<><C4AC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485Music.MusicLoopValidNum = dev_info->output_num;
}
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485Music);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485Music);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485Music);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485Music);break;
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ŀ<EFBFBD>ʼ***/
case ENUM_RS485_DEV_PRO_06: if(NULL!=RS485_DEV_PRO_FUN_06) RS485_DEV_PRO_FUN_06(&BUS_Public, &Rs485Music);break;
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ľ<EFBFBD><EFBFBD><EFBFBD>***/
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƺ<EFBFBD><C6BA><EFBFBD>
*@para
* DevAddrIn <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* DevInputLoop <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* DevAddrOut <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
* DevOutputLoop <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
* DevOutputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Dev_Logic_Music_Ctrl(uint32_t DevAddrIn, uint16_t DevInputLoop, uint32_t DevAddrOut, uint16_t DevOutputLoop, uint16_t DevOutputType)
{
// DEV_MUSIC_CTRLSTATE DevMusicCtrlState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>״̬
Device_Public_Information_G BUS_Public;
RS485_MUSIC_INFO Rs485Music;
// uint8_t KeepFlag = 0x00;
if(NULL == DevAddrOut)
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),DevAddrOut+Dev_Privately);
if(DevOutputLoop >= MUSICLOOPMAX) //<2F><>Ч<EFBFBD><D0A7>·
{
return ;
}
BLV_Music_CtrlState_Get(&Rs485Music.DevMusicCtrlState[DevOutputLoop],DevOutputType);
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDirect) //<2F><><EFBFBD><EFBFBD>
{
case 0x00: //<2F><><EFBFBD><EFBFBD>
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir)
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
case 0x02: //<2F><>ͣ
case 0x03: //<2F><>һ<EFBFBD><D2BB>
case 0x04: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>(<28><><EFBFBD><EFBFBD>˼)
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>(<28><><EFBFBD><EFBFBD>˼)
case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>(<28><><EFBFBD><EFBFBD>˼)
case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>(<28><><EFBFBD><EFBFBD>˼)
case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>(<28><><EFBFBD><EFBFBD>˼)
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>(<28><><EFBFBD><EFBFBD>˼)
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>ַ:%d <20><>·%d ״̬:%08X",BUS_Public.addr,DevOutputLoop, Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir);
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicModeCtrlVar = 0x01; // MusicBackCtrlFlag[DevOutputLoop] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicModeCtrlVar = REPEATSENDTIMEMAX;
break;
case MUSIC_VOICE_STOP: //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicReadFlagVar = 0x01; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>־ <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicReadFlagVar = REPEATSENDTIMEMAX; // MusicVoiceReadCnt = MusicBackSendMax;
break;
case 0x05: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>мӼ<D0BC><D3BC><EFBFBD>ÿ<EFBFBD>μӼ<CEBC>һ<EFBFBD><D2BB>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
if(BUS_Public.addr == 0x02) //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ַ
{
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = 0x00; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>0<EFBFBD><30>ֻ<EFBFBD><D6BB>1<EFBFBD>Σ<EFBFBD>
}
else
{
if(Rs485Music.music_volume.now_volume[DevOutputLoop] < 30) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
{
// KeepFlag = 0x01;
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x01; //2023-04-14
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = 0x03;
Rs485Music.music_volume.now_volume[DevOutputLoop]++;
}
}
break;
case 0x06: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>мӼ<D0BC><D3BC><EFBFBD>ÿ<EFBFBD>μӼ<CEBC>һ<EFBFBD><D2BB>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ִ<>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
if(BUS_Public.addr == 0x02) //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ַ
{
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = 0x00; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>0<EFBFBD><30>ֻ<EFBFBD><D6BB>1<EFBFBD>Σ<EFBFBD>
}
else
{
if(Rs485Music.music_volume.now_volume[DevOutputLoop] > 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
{
// KeepFlag = 0x01;
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x02; //2023-04-14
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = 0x03;
Rs485Music.music_volume.now_volume[DevOutputLoop]--;
}
}
break;
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlVoice <= 15) //<2F><><EFBFBD><EFBFBD>
{
// KeepFlag = 0x01;
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x03; //2023-04-14
Rs485Music.music_volume.now_volume[DevOutputLoop] = Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlVoice*2;
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = 0x03;
}
break;
}
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>
case 0x02: //<2F>ػ<EFBFBD>
Rs485Music.huaersi_onoff[DevOutputLoop] = Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDirect;
break;
case 0x05: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x06: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x07: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x08: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x09: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x0A: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music.huaersi_track_control[DevOutputLoop] = 0x07; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>Ϊ3
break;
}
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDir)
{
case MUSIC_PLAY: //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlMode = MUSIC_PLAY; //<2F>ò<EFBFBD><C3B2><EFBFBD> MusicBackPlayStopState[DevOutputLoop]
break;
case MUSIC_STOP:
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlMode = MUSIC_STOP; //<2F><>ֹͣ MusicBackPlayStopState[DevOutputLoop]
break;
default:
// MusicState = CtrlMode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>״̬
break;
}
// if(KeepFlag)
{
// Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d\r\n", DevOutputLoop, Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485Music, sizeof(RS485_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddrOut);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),DevAddrOut+Dev_Privately);
}
// BUS_C5MUSIC_Set_LoopVolume_2(DevAddrOut, DevOutputLoop, C5Music_Info.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice*3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ŵ<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*******************************************************************************
* Function Name : BLW_Music_Control_State
* Description : BLWMusic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
void BLW_Music_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t DevOutputLoop,uint16_t DevOutputType)
{
// uint8_t temp1 = 0;
// uint8_t CtrlMode; //<2F><><EFBFBD><EFBFBD>ģʽ
// uint8_t CtrlContect;
Device_Public_Information_G BUS_Public;
RS485_MUSIC_INFO Rs485Music;
// DEV_MUSIC_CTRLSTATE DevMusicCtrlState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>״̬
if(devaddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),devaddr+Dev_Privately);
if(DevOutputLoop >= Rs485Music.MusicLoopValidNum) //<2F><>Ч<EFBFBD><D0A7>·
{
return ;
}
BLV_Music_CtrlState_Get(&Rs485Music.DevMusicCtrlState[DevOutputLoop],DevOutputType);
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
{
case MUSIC_PLAY: //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
case MUSIC_STOP: //<2F><>ͣ
case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicModeCtrlVar = 0x01; // MusicBackCtrlFlag[DevOutputLoop] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicModeCtrlVar = REPEATSENDTIMEMAX;
// Rs485Music.MusicBackSendCnt[DevOutputLoop] = MusicBackSendMax;
break;
case MUSIC_VOICE_STOP: //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicReadFlagVar = 0x01; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>־ <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicReadFlagVar = REPEATSENDTIMEMAX; // MusicVoiceReadCnt = MusicBackSendMax;
break;
case MUSIC_VOICE_UP: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case MUSIC_VOICE_DOWN: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case MUSIC_VOICE_ALW_UP: //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
case MUSIC_VOICE_ALW_DOWN: //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
if(BUS_Public.addr == 0x02) //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ַ
{
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = 0x00; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>0<EFBFBD><30>ֻ<EFBFBD><D6BB>1<EFBFBD>Σ<EFBFBD>
}
else
{
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x01; // MusicBackVoiceCtrlFlag[DevOutputLoop] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = REPEATSENDTIMEMAX; // MusicBackVoiceSendCnt[DevOutputLoop] = MusicBackSendMax;
}
break;
}
if((0x00 != Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlVoice) && (Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlVoice <= MUSICVOICELEVELMAX)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
Rs485Music.MusicStateCtrlFlag[DevOutputLoop].MusicVoiceCtrlVar = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
Rs485Music.MusicStateCtrlCnt[DevOutputLoop].MusicVoiceCtrlVar = REPEATSENDTIMEMAX; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice = Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlVoice; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
}
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode)
{
case MUSIC_VOICE_UP:
if(Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice < MUSICVOICELEVELMAX)
{
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>мӼ<D0BC>
}
break;
case MUSIC_VOICE_DOWN:
if(Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice > 1) //<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>1
{
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlVoice--;
}
break;
}
// switch(Rs485Music.DevMusicCtrlState.CtrlCont.CtrlMode) //ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// case MUSIC_VOICE_STOP: //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD>ֹͣ
// case MUSIC_VOICE_UP: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// case MUSIC_VOICE_DOWN: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// case MUSIC_PLAY: //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
// case MUSIC_STOP: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ
// case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
// case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
// case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
// case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
// case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
// case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
// case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
// case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
//
// case MUSIC_VOICE_ALW_UP: //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
// case MUSIC_VOICE_ALW_DOWN: //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
// Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlMode = Rs485Music.DevMusicCtrlState.CtrlCont.CtrlMode; //ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ֵ
// break; //
// }
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].CtrlCont.CtrlMode) //<2F><><EFBFBD><EFBFBD>ģʽ
{
case MUSIC_PLAY: //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
case MUSIC_PRE: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_NEX: //<2F><>һ<EFBFBD><D2BB>
case MUSIC_PLAY_SPE_1: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
case MUSIC_PLAY_SPE_2: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
case MUSIC_PLAY_SPE_3: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
case MUSIC_PLAY_SPE_4: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
case MUSIC_PLAY_SPE_5: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
case MUSIC_PLAY_SPE_6: //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlMode = MUSIC_PLAY; //<2F>ò<EFBFBD><C3B2><EFBFBD> MusicBackPlayStopState[DevOutputLoop]
break;
case MUSIC_STOP:
Rs485Music.BackMusicState[DevOutputLoop].CtrlCont.CtrlMode = MUSIC_STOP; //<2F><>ֹͣ MusicBackPlayStopState[DevOutputLoop]
break;
default:
// MusicState = CtrlMode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>״̬
break;
}
switch(Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDirect)
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
case 0x02: //<2F>ػ<EFBFBD>
Rs485Music.huaersi_onoff[DevOutputLoop] = Rs485Music.DevMusicCtrlState[DevOutputLoop].DevMusicCtrlWay.CtrlDirect;
break;
case 0x05: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x06: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x07: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x08: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x09: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 0x0A: //<2F><><EFBFBD><EFBFBD>˼<EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Music.huaersi_track_control[DevOutputLoop] = 0x07; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>Ϊ3
break;
}
// Rs485Music.BackMusicState[DevOutputLoop] = (Rs485Music.MusicVoiceValue[DevOutputLoop]<<12)+(Rs485Music.MusicBackPlayStopState[DevOutputLoop]<<8)+(Rs485Music.MusicBackOnOff[DevOutputLoop]);//
// if(temp1 != 0x00)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"MusicCtrl loop:%d,start:%d",DevOutputLoop,DevOutputType);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485Music, sizeof(RS485_MUSIC_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),devaddr+Dev_Privately);
}
}
/*******************************************************************************
* Function Name : BLW_Music_Read_State
* Description : BLWMusic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
uint16_t BLW_Music_Read_State(uint32_t devaddr,uint16_t loop)
{
if(devaddr == 0x00) return 0x00;
uint16_t temp_val = 0;
RS485_MUSIC_INFO Rs485Music;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),devaddr+Dev_Privately);
if(loop >= Rs485Music.MusicLoopValidNum)
{
return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
}
temp_val = Rs485Music.BackMusicState[loop].CtrlCont.CtrlVoice;
temp_val <<= 8;
temp_val |= Rs485Music.BackMusicState[loop].DevMusicCtrlWay.CtrlDir;
temp_val <<= 4;
temp_val |= Rs485Music.BackMusicState[loop].DevMusicCtrlWay.CtrlDirect;
return temp_val;
}
/*<2A><>ȡMusic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
uint8_t Get_BLV485_Music_Online_Status(uint32_t devaddr)
{
RS485_MUSIC_INFO Rs485Music;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Music,sizeof(RS485_MUSIC_INFO),devaddr+Dev_Privately);
if(Rs485Music.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}

View File

@@ -0,0 +1,149 @@
#ifndef __APP_BACK_MUSIC_H__
#define __APP_BACK_MUSIC_H__
#include "stdint.h"
#include "BLV_BUS_Dev_C5MusicFun.h"
#define MUSICVOICELEVELMAX 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󼶱<EFBFBD><F3BCB6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
#define MUSICVOICELEVELMIN 01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
#define MusicSwt 0
#define MusicVol 1
#define BACKMUSIC_LEN 3
#define MUSIC_PLAY 1 //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
#define MUSIC_STOP 2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ
#define MUSIC_PRE 3 //<2F><>һ<EFBFBD><D2BB>
#define MUSIC_NEX 4 //<2F><>һ<EFBFBD><D2BB>
//#define MUSIC_PLAY_MODE 5 //<2F><><EFBFBD><EFBFBD><EBB2A5>ģʽ
#define MUSIC_VOICE_UP 5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MUSIC_VOICE_DOWN 6 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define MUSIC_ON 8 //<2F><><EFBFBD><EFBFBD>
//#define MUSIC_OFF 9 //<2F>ػ<EFBFBD>
#define MUSIC_PLAY_SPE_1 10 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>1<EFBFBD><31>
#define MUSIC_PLAY_SPE_2 11 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>2<EFBFBD><32>
#define MUSIC_PLAY_SPE_3 12 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>3<EFBFBD><33>
#define MUSIC_PLAY_SPE_4 13 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>4<EFBFBD><34>
#define MUSIC_PLAY_SPE_5 14 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>5<EFBFBD><35>
#define MUSIC_PLAY_SPE_6 15 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>6<EFBFBD><36>
#define MUSIC_VOICE_ALW_UP 7 //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
#define MUSIC_VOICE_ALW_DOWN 8 //<2F><><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>
#define MUSIC_VOICE_STOP 9 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD>ֹͣ
#define MUSIC_NOT_EXIST 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
//#define MUSIC_MAIN_DIS 11 //<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//typedef struct RS485_MUSIC_INFO* RS485_MUSIC_INFOP;
typedef struct
{
uint16_t MusicReadFlagVar : 2; //<2F><>ȡ<EFBFBD><C8A1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t MusicDefaultVoiceSetVar : 3; //<2F><><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t MusicAddrSetVar : 2; //<2F><>ַ<EFBFBD><D6B7><EFBFBD>ñ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t MusicVoiceCtrlVar : 3; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t MusicModeCtrlVar : 3; //ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t MusicOnOffCtrlVar : 3; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))MusicStateCtrlVar_Struct;
typedef struct
{
// uint8_t set_volume[3];
uint8_t now_volume[3];
}__attribute__ ((__packed__))Music_Volume;
typedef struct // RS485_MUSIC_INFO
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t MusicLoopValidNum; //<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>Чͨ<D0A7><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t MusicChannelNo; //<2F><>ǰͨ<C7B0><CDA8><EFBFBD><EFBFBD>
uint8_t MusicSn; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾSn<53><6E>
uint8_t MusicVoicedefault; //Ĭ<><C4AC><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
uint8_t MusicVoicedefaultLast; //Ĭ<><C4AC><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
uint8_t BackMusicVoiceSetFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־
uint8_t BackMusicVoiceSetSendCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ʼ*/
DEV_MUSIC_CTRLSTATE BackMusicState[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǰ״̬
DEV_MUSIC_CTRLSTATE BackMusicStateLast[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
DEV_MUSIC_CTRLSTATE DevMusicCtrlState[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>״̬
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
MusicStateCtrlVar_Struct MusicStateCtrlFlag[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD>
MusicStateCtrlVar_Struct MusicStateCtrlCnt[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
// uint16_t *BackMusicState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> + <20><><EFBFBD><EFBFBD> + ģʽ ע<><D7A2>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ֻ<EFBFBD>в<EFBFBD><D0B2>ź<EFBFBD><C5BA><EFBFBD>ͣ
// uint16_t *BackMusicStateLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> + <20><><EFBFBD><EFBFBD> + ģʽ
// uint16_t *BackMusicStateExUdp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> + <20><><EFBFBD><EFBFBD> + ģʽ
// uint16_t *BackMusicStateRs485; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> + <20><><EFBFBD><EFBFBD> + ģʽ
// uint16_t *BackMusicStateMap; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD> + <20><><EFBFBD><EFBFBD> + ģʽ
// uint8_t MusicVoiceReadFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>־
// uint8_t MusicVoiceReadCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
// uint8_t *MusicBackAddrSetFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ñ<EFBFBD>־
// uint8_t *MusicBackAddrSetCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
//
// uint8_t *MusicBackVoiceCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
// uint8_t *MusicBackVoiceSendCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
//
// uint8_t *MusicBackCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>Ʊ<EFBFBD>־
// uint8_t *MusicBackSendCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>Ƽ<EFBFBD><C6BC><EFBFBD>
// uint8_t *MusicBackOnOff;
// uint8_t *MusicBackOnOffLast;
//
// uint8_t *MusicBackOnOffCtrlFlag;
// uint8_t *MusicBackOnOffCtrlCnt;
//
// uint8_t *MusicBackPlayStopState; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ״̬
//
// //<2F><>ַ <20><><EFBFBD>Ʒ<EFBFBD>ʽ <20><><EFBFBD><EFBFBD>
// uint8_t *backmusic_data; //<2F><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>з<EFBFBD>ʽ Ҳ<><D2B2><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ŀ<EFBFBD>ʼ***/
uint32_t huaersi_read_addr_time; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7>ѯʱ<D1AF><CAB1>
uint8_t huaersi_addr_command; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
uint8_t huaersi_addr; //<2F><>ȡ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
uint8_t huaersi_onoff_control[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD> bit2<74><32><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ͱ<EFBFBD>־ bit1~0<><30><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
uint8_t huaersi_onoff[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>ǰ<EFBFBD><C7B0><EFBFBD>ػ<EFBFBD>
uint8_t huaersi_onoff_last[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>һ<EFBFBD>ο<EFBFBD><CEBF>ػ<EFBFBD>
uint8_t huaersi_track_control[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bit2<74><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־ bit1~0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
/***2022.10.13<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸Ľ<EFBFBD><EFBFBD><EFBFBD>***/
/*2023-04-15*/
uint8_t room_def_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t room_max_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t room_min_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
uint8_t bathroom_def_volume; //ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t bathroom_max_volume; //ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t bathroom_min_volume; //ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
uint8_t doorbell_def_volume; //<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Music_Volume music_volume;
/*2023-04-15*/
}__attribute__ ((__packed__))RS485_MUSIC_INFO;
void BLW_RS485_Music_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_Music_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,435 @@
/**
******************************************************************************
* @file BLV_485_Dev_PirFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2021<32><31>12<31><32>10<31><30>
* @brief 485Pir<69><72>ʼ<EFBFBD><CABC>
* @attention <20>豸Pir<69><72><EFBFBD><EFBFBD>
* <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD> <20><>
* ִ<>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD> <20><>
* ִ<>з<EFBFBD>ʽ<EFBFBD><CABD> <20><>
*
*
******************************************************************************
*/
#include "BLV_485_Dev_PirFun.h"
#include "includes.h"
#define REPEATSENDTIMEMAX 0x03
uint8_t Dev_Pir_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
uint8_t BLW_Pir_CycleDis(uint32_t DevAdd);
//void BLW_PirCycle(uint32_t DevAdd);
void BLW_PirCycle(Device_Public_Information_G *BUS_Public, NOR_LVINPUT_INFO *DevLVinputInfo);
uint8_t BLW_Pir_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
#define INFRAREDTYPE 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
#define PirSnMin 0x00 //<2F><>СSn<53><6E>
#define PirSnMax 0x07 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
void BLV_485_Dev_Pir_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevLVinputInfo,0,sizeof(NOR_LVINPUT_INFO));
BUS_Public.addr = Data[1]; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Dev_Host_LVinput; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 115200; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLW_Pir_CycleDis;
BUS_Public.processing_cf = (uint32_t)&BLW_Pir_Check;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Pir_InType_Get; //
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>485Pir<EFBFBD>");
DevLVinputInfo.DevOffline = DevLVinputInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
if(Data[8] > LVINPUTNUMMAX)
{
DevLVinputInfo.LVinputValidNum = LVINPUTNUMMAX;
}
else
{
DevLVinputInfo.LVinputValidNum = Data[8]; //C1_LVINPUTNUMMAX;
}
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
}
/*******************************************************************************
* Function Name : BLV_485_Dev_Pir_Data_Logic_Init
* Description : CSIO<49><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLV_485_Dev_Pir_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevLVinputInfo,0,sizeof(NOR_LVINPUT_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Dev_Host_LVinput; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = dev_info->retry; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = dev_info->writ_time; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
BUS_Public.polling_cf = (uint32_t)&BLW_Pir_CycleDis;
BUS_Public.processing_cf = (uint32_t)&BLW_Pir_Check;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Pir_InType_Get; //
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>485Pir<EFBFBD>豸 Baud:%d Retry:%d WaitTime:%d",dev_info->baud,dev_info->retry,dev_info->writ_time);
DevLVinputInfo.DevOffline = DevLVinputInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
if(dev_info->input_num > LVINPUTNUMMAX)
{
DevLVinputInfo.LVinputValidNum = LVINPUTNUMMAX;
}
else
{
DevLVinputInfo.LVinputValidNum = dev_info->input_num; //C1_LVINPUTNUMMAX;
}
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BAAF>
*@para
* DevAddr <20><EFBFBD><E8B1B8>ַ
* DevInputLoop <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>Χ0~LVinputValidNum
* DevInputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t Dev_Pir_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr);
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevInputLoop >= DevLVinputInfo.LVinputValidNum)
{
return Ret;
}
if(DevInputType == DevLVinputInfo.DevReadBuf[DevInputLoop]) //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
{
DevLVinputInfo.DevReadBuf[DevInputLoop] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = CtrlValid;
}
if(CtrlValid == Ret)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", DevInputType);
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);
}
return Ret;
}
/*******************************************************************************
* Function Name : BLW_Touch_SwitchCycleDis
* Description : BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLW_Pir_CycleDis(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
/*<2A>ж<EFBFBD><D0B6><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>*/
BLW_PirCycle(&BUS_Public, &DevLVinputInfo);
/*ͨѶ<CDA8><D1B6>¼*/
BLV_Communication_Record(&DevLVinputInfo.comm_record,0x01,0x00);
DevLVinputInfo.inquire_tick = SysTick_1ms;
if(DevLVinputInfo.DevSendCnt > BUS_Public.retry_num)
{
if(DevLVinputInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev485PIR LVinput OFFLINE");
LOG_Device_Online_Record(Dev_Host_LVinput,SRAM_Read_Byte(DevAdd+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
DevLVinputInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(DevLVinputInfo.DevOffline != DevLVinputInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
DevLVinputInfo.DevOfflineLast = DevLVinputInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}
else
{
DevLVinputInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAdd+Dev_Privately);
return RS485OCCUPYTIME;
}
#define Rs485PirCycleLen 0x08
/*******************************************************************************
* @name : BLW_PirCycle
* @para :
* DevAdd <20><EFBFBD><EFBFBD><E6B4A2>ַ
* @Return : <20><>
* <20>ܳ<EFBFBD><DCB3><EFBFBD> SN CKS <20><><EFBFBD><EFBFBD> ADDR LEN TYPE CMD
* 08 01 5F F9 00 02 02 A1
*******************************************************************************/
void BLW_PirCycle(Device_Public_Information_G *BUS_Public, NOR_LVINPUT_INFO *DevLVinputInfo)
{
// uint8_t port_id = SRAM_Read_Byte(DevAdd + Dev_port);
// uint8_t SendLen;
//<2F><>ַ <20><><EFBFBD><EFBFBD> <20>Ĵ<EFBFBD><C4B4><EFBFBD>
uint8_t SendData[Rs485PirCycleLen]; // = {0x01, 0x06, 0x00, 0x00, 0x00}; //<2F><><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
SendData[0] = Rs485PirCycleLen; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
SendData[1] = 0x00;
SendData[1] = BLV_SN_Get(&DevLVinputInfo->DevSn, PirSnMin, PirSnMax);//֡<><D6A1>
SendData[3] = 0xF9;
SendData[4] = BUS_Public->addr;//SRAM_Read_Byte(DevAdd + Dev_Addr); //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ص<EFBFBD>ת<EFBFBD><D7AA>
SendData[5] = 0x02;
SendData[6] = INFRAREDTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
SendData[7] = 0xA1; //<2F><><EFBFBD><EFBFBD>
SendData[2] = CheckSum_Overlook_Check(SendData, Rs485PirCycleLen, 2);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"pir send data---\r\n");
MCU485_SendString(BUS_Public->port,SendData,Rs485PirCycleLen);
}
/*BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t BLW_InfraredCtrDataProc(uint8_t *data, NOR_LVINPUT_INFO *DevLVinputInfo)
{
uint8_t i;
uint8_t rev = 0;
// uint8_t DevReadBufLast;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>մ<EFBFBD><D5B4><EFBFBD> data[8]:%d, <20><>·<EFBFBD><C2B7>:%d\r\n",data[8], DevLVinputInfo->LVinputValidNum);
for(i = 0; i < DevLVinputInfo->LVinputValidNum; i++)
{
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>մ<EFBFBD><D5B4><EFBFBD> DevReadBufLast:%d\r\n",DevReadBufLast);
if(DevLVinputInfo->DevReadBufLast[i] != data[8]) //<2F>Ƚϲ<C8BD>ͬ<EFBFBD>͸<EFBFBD>ֵ
{
DevLVinputInfo->DevReadBufLast[i] = data[8];
switch(data[8])
{
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ַ:%d<><64>·:%d",data[4], i);
DevLVinputInfo->DevReadBuf[i] = KeyPress; //<2F><EFBFBD><E3B0B4>λ
break;
case 0x02:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ɿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ַ:%d<><64>·:%d",data[4], i);
DevLVinputInfo->DevReadBuf[i] = KeyRelease; //<2F>ɿ<EFBFBD><C9BF><EFBFBD>λ
break;
}
rev = 0x01;
}
}
return rev;
}
#define Rs485PirRecLenMax 0x0B //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* @name : BLW_Pir_Check
* @para : BLWPir<69><72><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
0x00<30><30><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
*******************************************************************************/
uint8_t BLW_Pir_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
uint8_t Crc_buf = 0;
uint8_t ret = IsNotMyData;
uint8_t temp = 0;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_Public;
uint8_t Data[Rs485PirRecLenMax];
if((NULL == DevAdd)||(DataLen > Rs485PirRecLenMax))
{
return ret;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff(Data, DataLen, Data_addr);/*<2A><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>*/
if((DataLen != Data[0]) || (DataLen != Data[5]+0x06) || (INFRAREDTYPE != Data[6]) || (Data[4] != BUS_Public.addr))
{
return ret;
}
Crc_buf = CheckSum_Overlook_Check(Data, DataLen, 2);//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(Crc_buf == Data[2]) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͨ<EFBFBD><CDA8> DevAdd:%d,len:%d\r\n",temp,DataLen);
ret = IsMyData;
if(DevLVinputInfo.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevLVinput LogInfo_Device_Online...........");
LOG_Device_Online_Record(Dev_Host_LVinput,SRAM_Read_Byte(DevAdd+Dev_Addr),LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
DevLVinputInfo.DevSendCnt = 0x00;
DevLVinputInfo.DevOffline = DEV_IS_ONLINE;
if(DevLVinputInfo.DevOffline != DevLVinputInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
DevLVinputInfo.DevOfflineLast = DevLVinputInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&DevLVinputInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
temp = BLW_InfraredCtrDataProc(Data, &DevLVinputInfo); //ֱ<>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8>ݻظ<DDBB><D8B8>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ㣬Ҳ<E3A3AC><D2B2><EFBFBD>Ը<EFBFBD><D4B8>ݶ˿ڵĽڵ㼯<DAB5>Ͻ<EFBFBD><CFBD>д<EFBFBD><D0B4>ݽڵ<DDBD>
if(temp != 0x00) /*<2A><><EFBFBD><EFBFBD>״̬<D7B4>ı<EFBFBD>*/
{
LOG_Device_COMM_ASK_TO_Reply_Record(BUS_Public.port, BUS_Public.baud,(SysTick_1ms - DevLVinputInfo.inquire_tick),Data,DataLen);
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAdd+Dev_Privately);
}
else {
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Pir SOR_SRAM_CRC Fail:%02X DataLen:%d",Crc_buf,DataLen);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"Pir Fail Data:",Data,DataLen);
}
return ret;
}
#if 0
/*BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void BLW_InfraredCtrDataProc(uint8_t *data, CFG_Dev_AddP CfgDevAdd)
{
RS485_INFRARED_INFOP Rs485Infrared;
uint8_t i;
Rs485Infrared = CfgDevAdd->DevDataStruct; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>зǿ<D0B7><C7BF>ж<EFBFBD>
for(i = 0; i < Rs485Infrared->InfraredInputValidNum; i++)
{
// if(Rs485Infrared->DevReadBuf_last[i] != data[8]) //<2F><><EFBFBD>Ƚ<EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD>и<EFBFBD>ֵ
{
Rs485Infrared->DevReadBuf_last[i] = data[8];
switch(Rs485Infrared->DevReadBuf_last[i])
{
case 0x01:
Rs485Infrared->DevReadBuf[i] = 0x01;
break;
case 0x02:
Rs485Infrared->DevReadBuf[i] = 0x02;
break;
}
}
}
}
/*BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>*/
/**
* @name BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* data 485<38><35><EFBFBD>ݰ<EFBFBD>
* DataLen <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
* CfgDevAdd <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
* @retval 1 <20><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
* @attention
* <20><>ַ <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> У<><D0A3>
* 3C 03 00 02 00 01 70 E8
*
*/
uint8_t BLW_Rs485_Infrared_Check(uint8_t *data, uint16_t DataLen, CFG_Dev_AddP CfgDevAdd)
{
uint8_t Crc_buf;
uint8_t Ret = IsnotMyData;
RS485_INFRARED_INFOP Rs485Infrared;
if((NULL == CfgDevAdd)||(NULL == CfgDevAdd->DevDataStruct)||
(DataLen != data[0])||(DataLen != data[5]+0x06)||(INFRAREDTYPE != data[6])||(data[4] != CfgDevAdd->DevAddr))//
{
return Ret;
}
Rs485Infrared = CfgDevAdd->DevDataStruct;
Crc_buf = BLW_SOR_Negate(data, DataLen, 2);//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(Crc_buf == data[2]) //У<><D0A3><EFBFBD>ж<EFBFBD>
{
Ret = IsMyData;
Rs485Infrared->DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485Infrared->DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BLW_InfraredCtrDataProc(data, CfgDevAdd); //ֱ<>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8>ݻظ<DDBB><D8B8>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ㣬Ҳ<E3A3AC><D2B2><EFBFBD>Ը<EFBFBD><D4B8>ݶ˿ڵĽڵ㼯<DAB5>Ͻ<EFBFBD><CFBD>д<EFBFBD><D0B4>ݽڵ<DDBD>
}
return Ret;
}
#endif

View File

@@ -0,0 +1,32 @@
#ifndef _BLV_485_DEV_PIRFUN_
#define _BLV_485_DEV_PIRFUN_
#include "stdint.h"
#include "BLV_Nor_Dev_LVinputFun.h"
void BLV_485_Dev_Pir_Init(uint16_t DataLen, uint8_t *Data);
void BLV_485_Dev_Pir_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

View File

@@ -0,0 +1,540 @@
#include "BLV_485_Dev_PWMFun.h"
#include "string.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "check_fun.h"
#include "DBG.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
/*PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define PWM_OUT_CH_MAX 0x04 //PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PWMUPLIGHT 100 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80
#define PWMDOWNLIGHT 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20
#define PWMGRADUALTIME 30 //30 <20><>300ms
#define PWMSnMax 15 //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
#define DEVPWMTYPE 24 //PWM<57><4D><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define GLOBAL_STEP_VALUE 0x14 //<2F><><EFBFBD><EFBFBD>20
#define GLOBAL_MAX_VALUE 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GLOBAL_MIN_VALUE 0x14 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ʼ*/
uint8_t BLW_PWMCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_PWM_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_Rs485_PWM_4LOOP_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485PWMInfo);
//void BLW_PWM_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);
//uint16_t BLW_PWM_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start);
void BLW_Rs485_PWM_4LOOP_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485PWMInfo);
void BLW_Rs485_PWM_4LOOP_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485PWMInfo);
void BLW_PWM110_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>*/
/*******************************************************************************
* Function Name : BLW_RS485_PWM_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_PWM_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485PWM, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLW_PWMCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_PWM_Check;
/*<2A><>ʼ<EFBFBD><CABC>LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ*/
if(LoopNum >= PWM_OUT_CH_MAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485PWM->LEDLoopValidNum = PWM_OUT_CH_MAX;
}
else if(0x00 == LoopNum)
{
Rs485PWM->LEDLoopValidNum = 0x01;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485PWM->LEDLoopValidNum = LoopNum;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD>豸, <20><>·<EFBFBD><C2B7>:%d", Rs485PWM->LEDLoopValidNum);
}
/*******************************************************************************
* Function Name : BLW_PWMCycleCtrl
* Description : BLWPWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
uint8_t BLW_PWMCycleCtrl(uint32_t dev_addr)
{
// uint16_t temp = 0;
// uint8_t crc_val = 0;
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485PWMInfo;
uint8_t KeepFlag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485PWMInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
for(i = 0; i < Rs485PWMInfo.LEDLoopValidNum; i++)
{
if(Rs485PWMInfo.DevSendBuf_last[i] != Rs485PWMInfo.DevSendBuf[i])
{
Rs485PWMInfo.LEDCtrlFlag = 0x01;
Rs485PWMInfo.LEDCtrlCnt = REPEATSENDTIMEMAX;
// Rs485PWMInfo.PWMUpFlag = 0x01;
Rs485PWMInfo.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
memcpy(Rs485PWMInfo.DevSendBuf_last, Rs485PWMInfo.DevSendBuf, Rs485PWMInfo.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
for(i = 0; i < Rs485PWMInfo.LEDLoopValidNum; i++)
{
if(Rs485PWMInfo.DevCtrlWayBuf_last[i] != Rs485PWMInfo.DevCtrlWayBuf[i]) //Rs485PWMInfo.DevCtrlWayBuf_last[i]
{
Rs485PWMInfo.DevCtrlWayBuf_last[i] = Rs485PWMInfo.DevCtrlWayBuf[i];//<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƣ<EFBFBD>ֻ<EFBFBD><D6BB>һ·һ·<D2BB><C2B7><EFBFBD><EFBFBD>
Rs485PWMInfo.LEDWayCtrlFlag |= (0x01<<i); //<2F><>Ӧ<EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>һ
Rs485PWMInfo.LEDWayCtrlCnt = REPEATSENDTIMEMAX;
// Rs485PWMInfo.DevCtrlWayBuf[i] = 0x00;
// Rs485PWMInfo.WayCtrli = i;
// memcpy(Rs485PWMInfo.DevCtrlWayBuf_last, Rs485PWMInfo.DevCtrlWayBuf, Rs485PWMInfo.PWMLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// break;
}
}
if(Rs485PWMInfo.Dim_Global_Value != DevActionGlobal.DimGlobalValue) //2025-07-15,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȱȽ<C8B1>
{
Rs485PWMInfo.Dim_Global_Value = DevActionGlobal.DimGlobalValue;
}
if(Rs485PWMInfo.Dim_Global_Value_Last != Rs485PWMInfo.Dim_Global_Value) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485PWMInfo.Dim_Global_Value_Last = Rs485PWMInfo.Dim_Global_Value;
Rs485PWMInfo.Dim_GV_Flag |= (0x01<<7);
}
if((Rs485PWMInfo.LEDUpLightLimitLast != Rs485PWMInfo.LEDUpLightLimit) || (Rs485PWMInfo.LEDDownLightLimitLast != Rs485PWMInfo.LEDDownLightLimit)) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
Rs485PWMInfo.LEDUpLightLimitLast = Rs485PWMInfo.LEDUpLightLimit;
Rs485PWMInfo.Dim_GV_Flag |= (0x01<<6);
Rs485PWMInfo.LEDDownLightLimitLast = Rs485PWMInfo.LEDDownLightLimit;
Rs485PWMInfo.Dim_GV_Flag |= (0x01<<5);
}
// if(Rs485PWMInfo.LEDDownLightLimitLast != Rs485PWMInfo.LEDDownLightLimit) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
// {
// Rs485PWMInfo.LEDDownLightLimitLast = Rs485PWMInfo.LEDDownLightLimit;
// Rs485PWMInfo.Dim_GV_Flag |= (0x01<<5);
// }
if(0x00 != Rs485PWMInfo.Dim_GV_Flag) //2024-1-30
{
BLW_PWM110_GlobalValue_Set(&BUS_Public, &Rs485PWMInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Rs485PWMInfo.LEDCtrlFlag)
{
if(0x00 != Rs485PWMInfo.LEDCtrlCnt)
{
Rs485PWMInfo.LEDCtrlCnt--;
}
else
{
Rs485PWMInfo.LEDCtrlFlag = 0x00;
}
BLW_Rs485_PWM_4LOOP_Ctrl(&BUS_Public, &Rs485PWMInfo); //4·<34><C2B7><EFBFBD>ƣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x00 != Rs485PWMInfo.LEDWayCtrlFlag)
{
if(0x00 != Rs485PWMInfo.LEDWayCtrlCnt)
{
Rs485PWMInfo.LEDWayCtrlCnt--;
}
else
{
Rs485PWMInfo.LEDWayCtrlFlag = 0x00;
}
if(0x00 != Rs485PWMInfo.LEDWayCtrlFlag)
{
BLW_Rs485_PWM_4LOOP_Way_Ctrl(&BUS_Public, &Rs485PWMInfo);
Ret = RS485OCCUPYTIME;
}
else
{
KeepFlag = 0x01; //Ϊ0<CEAA><30><EFBFBD><EFBFBD>
}
}
else if(0x01 == Rs485PWMInfo.LEDLightnessReadFlag)
{
if(0x00 != Rs485PWMInfo.LEDLightnessReadCnt)
{
Rs485PWMInfo.LEDLightnessReadCnt--;
}
else
{
Rs485PWMInfo.LEDLightnessReadFlag = 0x00;
}
BLW_Rs485_PWM_4LOOP_Read(&BUS_Public, &Rs485PWMInfo); //4·<34><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485PWMInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485PWMInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DEV_PWMTYPE LogInfo_Device_Offline...........");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr, LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485PWMInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485PWMInfo.DevOffline != Rs485PWMInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485PWMInfo.DevOfflineLast = Rs485PWMInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x00 != Rs485PWMInfo.Dim_GV_Flag)
{
Rs485PWMInfo.Dim_GV_Flag = 0x00;
}
}
else
{
Rs485PWMInfo.DevSendCnt++; //
}
Rs485PWMInfo.inquire_tick = SysTick_1ms;
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
BLV_Communication_Record(&Rs485PWMInfo.comm_record,0x01,0x00);
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"PWM crc_val:%02X\r\n",crc_val);
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485PWMInfo, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485PWMInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLW_Rs485_PWM_Check
* Description : BLWPWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLW_Rs485_PWM_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = IsNotMyData;
// uint8_t temp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
RS485_LED_INFO Rs485PWM;
uint8_t data[RECDATALENMAX];
Device_Public_Information_G BUS_Public;
// uint8_t PWM_addr = SRAM_Read_Byte(dev_addr+Dev_Addr);
// uint8_t crc_val = SRAM_Read_Word(data_addr+5); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if(len > RECDATALENMAX)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if(data[0] != BUS_Public.addr) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"PWM<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485PWM,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// temp = SRAM_Read_Byte(data_addr + 6);
switch(data[6])
{
case 0x31:
case 0x34:
case 0x30:
case 0x35:
if(Rs485PWM.DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DEV_PWMTYPE LogInfo_Device_Online...........");
LOG_Device_Online_Record(BUS_Public.type, BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Rs485PWM.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
rev = IsMyData;
Rs485PWM.DevSendCnt = 0x00;
Rs485PWM.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485PWM.DevOffline != Rs485PWM.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485PWM.DevOfflineLast = Rs485PWM.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
break;
}
switch(data[6])
{
case 0x31:
Rs485PWM.LEDCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x34:
Rs485PWM.LEDWayCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x30:
memcpy(Rs485PWM.LEDLightRelease, &data[12], Rs485PWM.LEDLoopValidNum);//<2F>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(Rs485PWM.DevSendBuf, &data[12], Rs485PWM.LEDLoopValidNum);
// BLW_Rs485_PWM_4LOOP_Lightness_Get(data, CfgDevAdd);
Rs485PWM.LEDLightnessReadFlag = 0x00;
break;
case 0x35:
Rs485PWM.Dim_GV_Flag = 0x00;
break;
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485PWM, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485PWM,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
// else {
//// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"SRAM_CRC16 Fail ,crc_val:%02X SRAM_CRC16:%02X!!\r\n",crc_val,SRAM_CRC16(data_addr,len - 2));
//
// }
return rev;
}
#define PWMCTRLSENDLEN 18
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_PWM_4LOOP_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485PWMInfo)
{
// RS485_LED_INFOP Rs485PWMInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// uint8_t i;
// uint8_t port = SRAM_Read_Byte(dev_addr+Dev_port); //ͨѶ<CDA8>˿<EFBFBD>
// uint8_t DevAddr = SRAM_Read_Byte(dev_addr+Dev_Addr); //<2F><EFBFBD><E8B1B8>ַ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> <20><><EFBFBD><EFBFBD>0.1s <20><><EFBFBD><EFBFBD> CH8 CH7 CH6 CH5 CH4 CH3 CH2 CH1
uint8_t SendBuf[18] = {0x00, 0x00, DEVPWMTYPE, 0x01, PWMCTRLSENDLEN, 0x18, 0x21, 0x0f, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x50};
SendBuf[1] |= BLV_SN_Get(&Rs485PWMInfo->LEDSn, 0, PWMSnMax);
SendBuf[3] = BUS_Public->addr; //
// SendBuf[8] = PWMGRADUALTIME; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
SendBuf[8] = Rs485PWMInfo->PWM_Set_Time; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"PWM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:%d\r\n",Rs485PWMInfo->PWM_Set_Time);
// for(i = 0; i < Rs485PWMInfo->PWMLoopValidNum; i++)
// {
// SendBuf[16-i] = Rs485PWMInfo->DevSendBuf[i];
// }
memcpy(&SendBuf[14], &Rs485PWMInfo->DevSendBuf[0], Rs485PWMInfo->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, PWMCTRLSENDLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,PWMCTRLSENDLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,PWMCTRLSENDLEN);
// RS485_Port_SendFun(CfgDevAdd, SendBuf, PWMCTRLSENDLEN, BLWPWMCTRLTIMEOUT);
}
#define PWMWAYCTRLLEN 11
/*<2A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/**
* @name BLW 4· <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* PWMLoop <20><>·<EFBFBD><C2B7>ַ 0~3
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_PWM_4LOOP_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485PWMInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[PWMWAYCTRLLEN] = {0x00, 0x00, DEVPWMTYPE, 0x01, PWMWAYCTRLLEN, 0xBD, 0x24, 0x00, 0x01, 0x02, 0x01};
uint8_t i;
SendBuf[1] |= BLV_SN_Get(&Rs485PWMInfo->LEDSn, 0, PWMSnMax);
SendBuf[3] = BUS_Public->addr;
for(i = 0; i < Rs485PWMInfo->LEDLoopValidNum; i++)
{
if((Rs485PWMInfo->LEDWayCtrlFlag>>i)&0x01)
{
SendBuf[7] |= 0x01<<(3-i); //ͨ<><CDA8>MASK
switch(Rs485PWMInfo->DevCtrlWayBuf[i])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[8] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
SendBuf[9] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
SendBuf[8] = 0x01;
SendBuf[9] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
SendBuf[8] = 0x00;
SendBuf[9] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
SendBuf[8] = 0x00;
SendBuf[9] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Stop: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
SendBuf[8] = 0x02;
break;
default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
return ;
}
SendBuf[10] = Rs485PWMInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, PWMWAYCTRLLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,PWMWAYCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,PWMWAYCTRLLEN);
}
#define PWMREADLEN 7
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_Rs485_PWM_4LOOP_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485PWMInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD
uint8_t SendBuf[PWMREADLEN] = {0x00, 0x00, DEVPWMTYPE, 0x01, PWMREADLEN, 0xD8, 0x20};
// RS485_LED_INFOP Rs485PWMInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// Rs485PWMInfo = CfgDevAdd->DevDataStruct;
SendBuf[1] |= BLV_SN_Get(&Rs485PWMInfo->LEDSn, 0, PWMSnMax);
SendBuf[3] = BUS_Public->addr;
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, PWMREADLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,PWMREADLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,PWMREADLEN);
// SendBuf[5] = BLW_SOR_Negate(SendBuf, PWMREADLEN, 5);
// RS485_Port_SendFun(CfgDevAdd, SendBuf, PWMREADLEN, 100);
}
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_PWM110_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t lens = 0x0C;
uint8_t SendBuf[lens];
memset(SendBuf,0,sizeof(SendBuf));
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
SendBuf[1] = BLV_SN_Get(&Rs485LEDInfo->LEDSn, 0, PWMSnMax); //֡
SendBuf[2] = DEVPWMTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = BUS_Public->addr;
SendBuf[4] = lens; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x25; //Cmd
SendBuf[7] = Rs485LEDInfo->Dim_GV_Flag;
SendBuf[8] = Rs485LEDInfo->Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[9] = Rs485LEDInfo->LEDUpLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[10] = Rs485LEDInfo->LEDDownLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[11] = 0x01; //<2F><><EFBFBD><EFBFBD><E7B1A3>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, lens, 5);
MCU485_SendString(BUS_Public->port,SendBuf,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,lens);
}

View File

@@ -0,0 +1,105 @@
#ifndef _BLV_485_DEV_PWMFUN_H_
#define _BLV_485_DEV_PWMFUN_H_
#include "stdint.h"
#include "BLV_485_Dev_LEDFun.h"
//#define DEV_PWMTYPE ((uint8_t)24) //PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define PWMLIGHTMAX 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define PWMLIGHTMIN 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//typedef enum{
// PWM_OUT_CH1,
// PWM_OUT_CH2,
// PWM_OUT_CH3,
// PWM_OUT_CH4,
// PWM_OUT_CH_MAX,
//}RS485_PWM_OUT_NUM_E;
//#define PWM_BUFF_Size PWM_OUT_CH_MAX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
////typedef void (*RS485_PWM_IndiCtrl_ptr)(RS485_PWM_INFOP, uint16_t Addr, uint16_t OnOff); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>ָʾ<D6B8>Ƹ<EFBFBD>ֵ
//typedef struct
//{
// BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
//
// uint8_t DevSendBuf[PWM_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7>״̬
// uint8_t DevSendBuf_last[PWM_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
// uint8_t DevSendBufNext[PWM_BUFF_Size]; //<2F><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>Ƚ<EFBFBD> <20><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>
//// uint8_t *DevSendBufRs485; //
//// uint8_t *DevSendBufExUdp; //
//
//
// uint8_t DevReadBuf[PWM_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4><EFBFBD><E4BBAF><EFBFBD>Ʊ<EFBFBD>־
//// uint8_t *PWMStateChangeFlag; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>־
//
//// uint8_t *PWMKeepFlag; //<2F><><EFBFBD><EFBFBD><E2B1A3><EFBFBD><EFBFBD>־ 1<><31><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD> 0<><30><EFBFBD>ѻָ<D1BB>
//// uint8_t *PWMKeepState; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
//
// uint8_t PWMGradualTime; //ÿ<>ε<EFBFBD><CEB5><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
//
// uint8_t PWMSn; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾSn<53><6E>
//
// uint8_t WayCtrli; //<2F><>ʽ<EFBFBD><CABD><EFBFBD>Ƶ<EFBFBD><C6B5>±<EFBFBD>
//
// uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
// uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
// uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
//
//
//// uint8_t PWMRangeSetFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־
//// uint8_t PWMRangeSetCnt; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
//
// uint8_t PWMUpLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t PWMUpLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t PWMDownLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t PWMDownLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// uint8_t PWMCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־
// uint8_t PWMCtrlCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ƽ<EFBFBD><C6BC><EFBFBD>
// uint8_t PWMLoopValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
//
// uint8_t PWMLightRelease[PWM_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>
//
// uint8_t PWMLightnessReadFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
// uint8_t PWMLightnessReadCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
//
// uint8_t PWMCycleStep; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
//// uint8_t PWMUpFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>־λ
//
// uint8_t DevCtrlWayBuf[PWM_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
// uint8_t DevCtrlWayBuf_last[PWM_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
// uint8_t DevCtrlWayContect[PWM_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// uint8_t PWMWayCtrlFlag; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ʊ<EFBFBD>־
// uint8_t PWMWayCtrlCnt; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
//// RS485_PWM_IndiCtrl_ptr RS485_PWM_IndiCtrl; //ָʾ<D6B8>Ƹ<EFBFBD>ֵ
//}__attribute__ ((__packed__))RS485_PWM_INFO; //485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
//void BLW_RS485_PWM_Data_Init(uint8_t devaddr);
//uint8_t BLW_PWMCycleCtrl(uint32_t dev_addr);
//uint8_t BLW_Rs485_PWM_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
//void BLW_PWM_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
//uint16_t BLW_PWM_Read_State(uint32_t devaddr,uint16_t loop);
//uint8_t PWM_State_Change_Get(uint32_t devaddr);
////void BLW_PWM_Group_Control_State(uint32_t devaddr,uint16_t state);
//uint8_t Get_BLV485_PWM_Online_Status(uint32_t devaddr);
//void Pwm_State_Add(uint32_t devaddr);
//void Pwm_State_Dec(uint32_t devaddr);
void BLW_RS485_PWM_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485PWM, uint16_t LoopNum);
#endif

View File

@@ -0,0 +1,611 @@
#include "BLV_485_Dev_RGB_CtrlFun.h"
#include "SPI_SRAM.h"
#include "check_fun.h"
#include "string.h"
#include "usart.h"
#include "DBG.h"
#include "CH57x_common.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
#define RGB_Light_Belt_REPEATSENDTIMEMAX 0x03 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*******************************************************************************
* Function Name : BLV_485_Dev_RGB_Light_Belt_Init
* Description : RGB<47>ƴ<EFBFBD><C6B4><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BLV_485_Dev_RGB_Light_Belt_Init(uint8_t devaddr)
{
Device_Public_Information_G BUS_Public;
RS485_RGB_LIGHT_BELT_INFO Light_belt_info;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Light_belt_info,0,sizeof(RS485_RGB_LIGHT_BELT_INFO));
BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = DEV_RGB_LIGHT_BELT_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = RGB_Light_Belt_REPEATSENDTIMEMAX; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x64; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.polling_cf = (uint32_t)&BLV_RGB_Light_Belt_Cycle_Call;
BUS_Public.processing_cf = (uint32_t)&BLV_RGB_Light_Belt_Data_Processing;
// BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLV_C12Dimming_Control_State;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Get_BLV_RGB_Light_Loop_Value;
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO));
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_CycleDis
* Description : RGB<47>ƴ<EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLV_RGB_Light_Belt_Cycle_Call(uint32_t DevAdd)
{
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t val_check = 0;
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),DevAdd+Dev_Privately);
if(Light_belt_info.light_Control_Flag != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BLV_RGB_Light_Belt_Light_Control_Datasend(DevAdd, &Light_belt_info);
}
else if(Light_belt_info.loop_dimming_Control_Flag != 0x00) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BLV_RGB_Light_Belt_loop_dimming_Control_Datasend(DevAdd, &Light_belt_info);
}
else if(Light_belt_info.stop_dimming_Control_Flag != 0x00) //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
{
BLV_RGB_Light_Belt_stop_dimming_Control_Datasend(DevAdd, &Light_belt_info);
}
else
{
if(Light_belt_info.loop_dimming_flg == 1) //<2F><>ǰδ<C7B0><CEB4><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>Ų<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
{
return 0;
}
BLV_RGB_Light_Belt_Light_Inquire_Datasend(DevAdd, &Light_belt_info);
}
if(Light_belt_info.DevSendCnt > RGB_Light_Belt_REPEATSENDTIMEMAX)
{
Light_belt_info.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
}else {
Light_belt_info.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),DevAdd+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,DevAdd+Dev_Check);
val_check = Dev_CheckSum(DevAdd, sizeof(RS485_RGB_LIGHT_BELT_INFO) + Dev_Privately);
SRAM_Write_Byte(val_check,DevAdd+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
return 0x00;
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Light_Control_Datasend
* Description : RGB<47>ƴ<EFBFBD> <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_Light_Control_Datasend(uint32_t dev_addr, RS485_RGB_LIGHT_BELT_INFO *Dev_Info)
{
uint8_t temp = 0;
uint8_t send_buff[20];
memset(send_buff,0,20);
memcpy(&send_buff[11], Dev_Info->light, 4);
for(uint8_t i = 0; i < RGB_LIGHT_BELT_CH_MAX; i++)
{
if((Dev_Info->light_Control_Flag & (1<<i)))
{
send_buff[11+i] = Dev_Info->set_light[i];
}
}
Dev_Info->last_light_Control_Flag = Dev_Info->light_Control_Flag;
send_buff[0] = 0xA6;
send_buff[1] = RGB_LIGHT_BELT_SET_LIGHT_CMD;
send_buff[3] = 11;
send_buff[4] = 0; //tx
send_buff[5] = SRAM_Read_Byte(dev_addr+Dev_Addr);; //rx
send_buff[6] = RGB_LIGHT_BELT_CONTROL_MODE_SET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[7] = Dev_Info->fade_time; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
send_buff[8] = Dev_Info->fade_time>>8;
send_buff[9] = 0;
send_buff[10] = 4; //<2F><><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD>·
send_buff[2] = CheckSum_Overlook_Check(send_buff, 15, 2);
temp = SRAM_Read_Byte(dev_addr+Dev_port);
MCU485_SendString(temp, send_buff, 15);
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_loop_dimming_Control_Datasend
* Description : RGB<47>ƴ<EFBFBD> ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_loop_dimming_Control_Datasend(uint32_t dev_addr, RS485_RGB_LIGHT_BELT_INFO *Dev_Info)
{
uint8_t temp = 0;
uint8_t send_buff[20];
memset(send_buff,0,20);
// send_buff[7] = SRAM_Read_Byte(dev_addr+Dev_Addr);
// send_buff[8] = (Dev_Info->loop_dimming_Control_Flag & 0x0F);
send_buff[7] = Dev_Info->loop_dimming_control;
send_buff[8] = 0x00;
Dev_Info->last_loop_dimming_Control_Flag = Dev_Info->loop_dimming_Control_Flag;
send_buff[0] = 0xA6;
send_buff[1] = RGB_LIGHT_BELT_SET_ACT_CMD;
send_buff[3] = 10;
send_buff[4] = 0; //tx
send_buff[5] = SRAM_Read_Byte(dev_addr+Dev_Addr); //rx
send_buff[6] = Dev_Info->SN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[9] = RGB_LIGHT_BELT_LOOP_DIMMING_CMD; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[10] = RGB_LIGHT_BELT_CONTROL_MODE_LOOP; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[11] = Dev_Info->loop_fade_time; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
send_buff[12] = Dev_Info->loop_fade_time>>8;
send_buff[13] = Dev_Info->loop_light; //<2F>趨ѭ<E8B6A8><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_buff[2] = CheckSum_Overlook_Check(send_buff, 14, 2);
temp = SRAM_Read_Byte(dev_addr+Dev_port);
MCU485_SendString(temp, send_buff, 14);
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_stop_dimming_Control_Datasend
* Description : RGB<47>ƴ<EFBFBD> ֹͣѭ<D6B9><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_stop_dimming_Control_Datasend(uint32_t dev_addr, RS485_RGB_LIGHT_BELT_INFO *Dev_Info)
{
uint8_t temp = 0;
uint8_t send_buff[10];
memset(send_buff,0,10);
Dev_Info->last_stop_dimming_Control_Flag = Dev_Info->stop_dimming_Control_Flag;
send_buff[0] = 0xA6;
send_buff[1] = RGB_LIGHT_BELT_STOP_DIMMING_CMD;
send_buff[3] = 2;
send_buff[4] = 0; //tx
send_buff[5] = SRAM_Read_Byte(dev_addr+Dev_Addr); //rx
send_buff[2] = CheckSum_Overlook_Check(send_buff, 6, 2);
temp = SRAM_Read_Byte(dev_addr+Dev_port);
MCU485_SendString(temp, send_buff, 6);
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Light_Inquire_Datasend
* Description : RGB<47>ƴ<EFBFBD> Inching<6E><67><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_Light_Inquire_Datasend(uint32_t dev_addr, RS485_RGB_LIGHT_BELT_INFO *Dev_Info)
{
uint8_t temp = 0;
uint8_t send_buff[10];
memset(send_buff,0,10);
send_buff[0] = 0xA6;
send_buff[1] = RGB_LIGHT_BELT_READ_LIGHT_CMD;
send_buff[3] = 4;
send_buff[4] = 0; //tx
send_buff[5] = SRAM_Read_Byte(dev_addr+Dev_Addr);; //rx
send_buff[6] = 0; //<2F><><EFBFBD><EFBFBD>
send_buff[7] = 4; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
send_buff[2] = CheckSum_Overlook_Check(send_buff, 8, 2);
temp = SRAM_Read_Byte(dev_addr+Dev_port);
MCU485_SendString(temp, send_buff, 8);
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Data_Processing
* Description : <20>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLV_RGB_Light_Belt_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t crc_val = 0;
uint8_t temp = 0,temp1 = 0;
uint8_t buff[4] = {0};
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
if(SRAM_Read_Byte(data_addr) != 0x6A) //ͷ<><CDB7><EFBFBD><EFBFBD>
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Head Fail! \r\n");
return 0x01;
}
if(Dev_CheckSum(data_addr,len) != 0x00)
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Check Fail! \r\n");
return 0x01; //<2F><>У<EFBFBD><D0A3>
}
temp = SRAM_Read_Byte(data_addr + 4);
if(temp != SRAM_Read_Byte(dev_addr+ Dev_Addr))
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt PKT_ADD_FM Fail! \r\n");
return 0x01; //<2F><><EFBFBD>͵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
}
temp = SRAM_Read_Byte(data_addr + 5);
if(temp != 0x00)
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt PKT_ADD_TO Fail! \r\n");
return 0x01; //<2F><><EFBFBD>յ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
}
temp = SRAM_Read_Byte(data_addr + 3);
if(temp != (len-4))
{
Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt PKT_LEN Fail! \r\n");
return 0x01; //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
}
temp = SRAM_Read_Byte(data_addr + 1);
switch(temp)
{
case RGB_LIGHT_BELT_READ_LIGHT_REPLY: //<2F><><EFBFBD><EFBFBD><EFBFBD>Ȼظ<C8BB>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
SRAM_DMA_Read_Buff(buff, 4, data_addr+ 7);
if(memcmp(buff, Light_belt_info.light, 4) != 0) //<2F><><EFBFBD>ȸı<C8B8>
{
memcpy(Light_belt_info.light, buff, 4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp1++;
}
}
else Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X\r\n", SRAM_Read_Byte(data_addr + 6));
break;
case RGB_LIGHT_BELT_SET_LIGHT_REPLY: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼظ<C8BB>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
Light_belt_info.loop_dimming_flg = 0; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Light_belt_info.light_Control_Flag &= ~(Light_belt_info.last_light_Control_Flag);
}
else Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X\r\n", SRAM_Read_Byte(data_addr + 6));
break;
case RGB_LIGHT_BELT_SET_ACT_REPLY: //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
Light_belt_info.loop_dimming_flg = 1; //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Light_belt_info.loop_dimming_Control_Flag &= ~(Light_belt_info.last_loop_dimming_Control_Flag);
temp1++;
}
else Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X\r\n", SRAM_Read_Byte(data_addr + 6));
break;
case RGB_LIGHT_BELT_STOP_DIMMING_REPLY: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
Light_belt_info.loop_dimming_flg = 0; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Light_belt_info.stop_dimming_Control_Flag &= ~(Light_belt_info.last_stop_dimming_Control_Flag);
temp1++;
}
else Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X\r\n", SRAM_Read_Byte(data_addr + 6));
break;
default: return 0x01;
}
Light_belt_info.DevSendCnt = 0x00;
Light_belt_info.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(temp1 != 0x00) /*<2A>ƴ<EFBFBD><C6B4><20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־*/
{
LOG_Save_Device_Change(data_addr, len);
}
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_RGB_LIGHT_BELT_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
return 0x00;
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Light
* Description : <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
Control_Flag :<3A><><EFBFBD>ƻ<EFBFBD>· bit0~3: ch1~ch4
chx : <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
fadeTime<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BLW_RGB_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint16_t loop,uint16_t start)
{
uint16_t temp = 0;
uint8_t crc_val = 0,temp1 = 0;
uint8_t CtrlMode; //<2F><><EFBFBD><EFBFBD>ģʽ
uint8_t CtrlContect;
if(devaddr == 0x00) return;
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),devaddr+Dev_Privately);
if(loop >= RGB_LIGHT_BELT_CH_MAX) //<2F><>Ч<EFBFBD><D0A7>·
{
return ;
}
CtrlMode = start&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_Stop:
case CFG_Dev_CtrlWay_Is_Dim_Up:
case CFG_Dev_CtrlWay_Is_Dim_Down:
Light_belt_info.PWMLightnessReadFlag = 0x01; //Ψ<><CEA8>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3>Żᷢ<C5BB>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Light_belt_info.PWMLightnessReadCnt = REPEATSENDTIMEMAX;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:%d\r\n", CtrlMode); //
temp1++;
break;
}
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
case CFG_Dev_CtrlWay_Is_Dim_Stop:
Light_belt_info.DevCtrlWayBuf[loop] = CtrlMode; // - CFG_Dev_CtrlWay_Is_PWM_START + 1
Light_belt_info.DevCtrlWayContect[loop] = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Open: //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Close:
Light_belt_info.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD>
if(0x00 != Light_belt_info.PWMLightRelease[loop]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ
{
CtrlContect = Light_belt_info.PWMLightRelease[loop]; //<2F><> <20><>
}
else if(0x00 != CtrlContect) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CtrlContect = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ׼
}
else
{
CtrlContect = 0x64; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
Light_belt_info.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(Light_belt_info.DevSendBuf[loop] + CtrlContect <= 100)
{
Light_belt_info.DevSendBuf[loop] += CtrlContect;
}
else
{
Light_belt_info.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Light_belt_info.DevSendBuf[loop] >= CtrlContect)
{
Light_belt_info.DevSendBuf[loop] -= CtrlContect;
}
else
{
Light_belt_info.DevSendBuf[loop] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
temp1++;
break;
// case CFG_Dev_CtrlWay_Is_Dim_UP_Limit: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Light_belt_info.PWMUpLightLimit = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// break;
// case CFG_Dev_CtrlWay_Is_Dim_DOWN_Limit: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Light_belt_info.PWMDownLightLimit = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// break;
}
// if(Light_belt_info.DevSendBuf[loop] != start) //<2F><>ͬ
// {
// Light_belt_info.DevSendBuf[loop] = start;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
// temp1++;
// }
if(temp1 != 0x00)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",loop,start);
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),devaddr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,devaddr+Dev_Check);
temp = sizeof(RS485_RGB_LIGHT_BELT_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(devaddr,temp);
SRAM_Write_Byte(crc_val,devaddr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Light
* Description : <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
Control_Flag :<3A><><EFBFBD>ƻ<EFBFBD>· bit0~3: ch1~ch4
chx : <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
fadeTime<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_Control_Light(uint32_t dev_addr, uint8_t Control_Flag, uint8_t ch1, uint8_t ch2, uint8_t ch3, uint8_t ch4, uint16_t fadeTime)
{
uint8_t crc_val = 0;
uint16_t temp = 0;
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
for(uint8_t i=0; i< RGB_LIGHT_BELT_CH_MAX; i++)
{
if(Control_Flag & (1<<i))
{
Light_belt_info.light_Control_Flag |= 1<<i;
switch(i)
{
case 0:
Light_belt_info.set_light[i] = ch1;
break;
case 1:
Light_belt_info.set_light[i] = ch2;
break;
case 2:
Light_belt_info.set_light[i] = ch3;
break;
case 3:
Light_belt_info.set_light[i] = ch4;
break;
default: break;
}
}
}
Light_belt_info.fade_time = fadeTime;
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_RGB_LIGHT_BELT_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Loop_Dimming
* Description : <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
Control_Flag :<3A><><EFBFBD>ƻ<EFBFBD>· 0~2
light : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fadeTime <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
*******************************************************************************/
void BLV_RGB_Light_Belt_Control_Loop_Dimming(uint32_t dev_addr, uint8_t Control_CH, uint8_t light, uint16_t fadeTime)
{
uint8_t crc_val = 0;
uint16_t temp = 0;
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
// for(uint8_t i=0; i< RGB_LIGHT_BELT_CH_MAX; i++)
// {
// if(Control_Flag & (1<<i))
// {
// Light_belt_info.loop_dimming_Control_Flag |= 1<<i;
// }
// }
Light_belt_info.loop_dimming_Control_Flag = 0x01;
Light_belt_info.loop_dimming_control = Control_CH;
Light_belt_info.loop_fade_time = fadeTime;
Light_belt_info.loop_light = light;
Light_belt_info.SN++;
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_RGB_LIGHT_BELT_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Stop_Dimming
* Description : <20>ƴ<EFBFBD> ֹͣѭ<D6B9><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
*******************************************************************************/
void BLV_RGB_Light_Belt_Control_Stop_Dimming(uint32_t dev_addr)
{
uint8_t crc_val = 0;
uint16_t temp = 0;
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
Light_belt_info.stop_dimming_Control_Flag = 1;
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
temp = sizeof(RS485_RGB_LIGHT_BELT_INFO) + Dev_Privately;
crc_val = Dev_CheckSum(dev_addr,temp);
SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
/*******************************************************************************
* Function Name : Get_BLV_RGB_Light_Loop_Value
* Description : <20><>ȡRGB<47>ƹ<EFBFBD><C6B9><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
ch <09><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>·
*******************************************************************************/
uint16_t Get_BLV_RGB_Light_Loop_Value(uint32_t dev_addr,uint16_t ch)
{
if(dev_addr == 0x00) return 0;
RS485_RGB_LIGHT_BELT_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_RGB_LIGHT_BELT_INFO),dev_addr+Dev_Privately);
if(ch < RGB_LIGHT_BELT_CH_MAX)
{
return Light_belt_info.light[ch];
}else {
return 0;
}
}

View File

@@ -0,0 +1,118 @@
#ifndef _BLV_485_DEV_RGB_CTRLFUN_H_
#define _BLV_485_DEV_RGB_CTRLFUN_H_
#include "stdint.h"
#include "BLV_485_Protocol.h"
#define DEV_RGBTYPE ((uint8_t)24) //RGB<47><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGBLIGHTMAX 0x64 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGBLIGHTMIN 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
RGB_OUT_CH1,
RGB_OUT_CH2,
RGB_OUT_CH3,
RGB_OUT_CH4,
RGB_OUT_CH_MAX,
}RS485_RGB_OUT_NUM_E;
#define RGB_BUFF_Size RGB_OUT_CH_MAX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
//typedef void (*RS485_RGB_IndiCtrl_ptr)(RS485_RGB_INFOP, uint16_t Addr, uint16_t OnOff); //<2F><><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>Ϊ<EFBFBD><CEAA>ַ<EFBFBD><D6B7>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>ָʾ<D6B8>Ƹ<EFBFBD>ֵ
typedef struct
{
uint8_t DevSendBuf[RGB_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7>״̬
uint8_t DevSendBuf_last[RGB_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevSendBufNext[RGB_BUFF_Size]; //<2F><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>Ƚ<EFBFBD> <20><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>
// uint8_t *DevSendBufRs485; //
// uint8_t *DevSendBufExUdp; //
uint8_t DevReadBuf[RGB_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4><EFBFBD><E4BBAF><EFBFBD>Ʊ<EFBFBD>־
// uint8_t *RGBStateChangeFlag; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF>־
// uint8_t *RGBKeepFlag; //<2F><><EFBFBD><EFBFBD><E2B1A3><EFBFBD><EFBFBD>־ 1<><31><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD> 0<><30><EFBFBD>ѻָ<D1BB>
// uint8_t *RGBKeepState; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
uint8_t RGBGradualTime; //ÿ<>ε<EFBFBD><CEB5><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
uint8_t RGBSn; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾSn<53><6E>
uint8_t WayCtrli; //<2F><>ʽ<EFBFBD><CABD><EFBFBD>Ƶ<EFBFBD><C6B5>±<EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
// uint8_t RGBRangeSetFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־
// uint8_t RGBRangeSetCnt; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
uint8_t RGBUpLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RGBUpLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RGBDownLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RGBDownLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RGBCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־
uint8_t RGBCtrlCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t RGBLoopValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
uint8_t RGBLightRelease[RGB_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>
uint8_t RGBLightnessReadFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t RGBLightnessReadCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t RGBCycleStep; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
// uint8_t RGBUpFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>־λ
uint8_t DevCtrlWayBuf[RGB_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
uint8_t DevCtrlWayBuf_last[RGB_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevCtrlWayContect[RGB_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RGBWayCtrlFlag; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ʊ<EFBFBD>־
uint8_t RGBWayCtrlCnt; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
// RS485_RGB_IndiCtrl_ptr RS485_RGB_IndiCtrl; //ָʾ<D6B8>Ƹ<EFBFBD>ֵ
}__attribute__ ((__packed__))RS485_RGB_INFO; //485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLW_RS485_RGB_Data_Init(uint8_t devaddr);
uint8_t BLW_RGBCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_RGB_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_RGB_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
uint16_t BLW_RGB_Read_State(uint32_t devaddr,uint16_t loop);
uint8_t RGB_State_Change_Get(uint32_t devaddr);
//void BLW_RGB_Group_Control_State(uint32_t devaddr,uint16_t state);
uint8_t Get_BLV485_RGB_Online_Status(uint32_t devaddr);
void RGB_State_Add(uint32_t devaddr);
void RGB_State_Dec(uint32_t devaddr);
#endif

View File

@@ -0,0 +1,983 @@
/**
******************************************************************************
* @file BLV_485_Dev_LEDFun.c
* @author BLW RCU development Team
* @version SongHan
* @date 2021<32><31>12<31><32>08<30><38>
* @brief
* RGB<47><42><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><E2B7BD><EFBFBD><EFBFBD>ʽһ<CABD><D2BB>
* @log 202205121137 SongHan <20><><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @log 202205261640 SongHan <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "BLV_485_Dev_RGB_Light_BeltFun.h"
#include "SPI_SRAM.h"
#include "check_fun.h"
#include "string.h"
#include "usart.h"
#include "DBG.h"
#include "CH57x_common.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "includes.h"
#define RGB_OUT_CH_MAX 0x04 //RGB<47><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGB_Light_Belt_REPEATSENDTIMEMAX 0x03 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLWRGBGRADUALTIME 30 //30 <20><>300ms
void BLW_RGB_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint16_t loop,uint16_t start);
void BLW_RGB_Light_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Dev_Info);
void BLV_RGB_Light_Belt_Light_Inquire_Datasend(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Dev_Info);
uint8_t BLV_RGB_Light_Belt_Cycle_Call(uint32_t DevAdd);
uint8_t BLV_RGB_Light_Belt_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLV_RGB_Light_Belt_Light_Control_Datasend(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Dev_Info);
void BLW_RGB_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dev_RGBLight_RecvData_Len_Max 0x18
/*******************************************************************************
* Function Name : BLV_485_Dev_RGB_Light_Belt_Init
* Description : RGB<47>ƴ<EFBFBD><C6B4><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
//void BLV_485_Dev_RGB_Light_Belt_Init(uint8_t devaddr)
//{
// Device_Public_Information_G BUS_Public;
// RS485_LED_INFO Light_belt_info;
// memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
// memset(&Light_belt_info,0,sizeof(RS485_LED_INFO));
//
//
// BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
// BUS_Public.type = DEV_RGB_LIGHT_BELT_Type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
// BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
// BUS_Public.retry_num = RGB_Light_Belt_REPEATSENDTIMEMAX; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
// BUS_Public.wait_time = 0x64; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
// BUS_Public.polling_cf = (uint32_t)&BLV_RGB_Light_Belt_Cycle_Call;
// BUS_Public.processing_cf = (uint32_t)&BLV_RGB_Light_Belt_Data_Processing;
//
// BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_RGB_Control_State;
// BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Get_BLV_RGB_Light_Loop_Value;
//
// Light_belt_info.LEDLoopValidNum = RGB_LIGHT_BELT_CH_MAX;
//
// Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO));
//}
/*******************************************************************************
* Function Name : BLW_RS485_LED_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <09><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
void BLW_RS485_RGB_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RGB_Light_Belt_Cycle_Call;
BUS_Public->processing_cf = (uint32_t)&BLV_RGB_Light_Belt_Data_Processing;
if(LoopNum >= RGB_OUT_CH_MAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = RGB_OUT_CH_MAX;
}
else if(0x00 == LoopNum)
{
Rs485LED->LEDLoopValidNum = 0x01;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = LoopNum;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d", Rs485LED->LEDLoopValidNum);
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_CycleDis
* Description : RGB<47>ƴ<EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t BLV_RGB_Light_Belt_Cycle_Call(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = RS485OCCUPYNOTIME;
// uint8_t val_check = 0;
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),DevAdd+Dev_Privately);
for(i = 0; i < Light_belt_info.LEDLoopValidNum; i++)
{
if(Light_belt_info.DevSendBuf_last[i] != Light_belt_info.DevSendBuf[i])
{
Light_belt_info.LEDCtrlFlag = 0x01;
Light_belt_info.LEDCtrlCnt = RGB_Light_Belt_REPEATSENDTIMEMAX;
// Light_belt_info.LEDUpFlag = 0x01;
// Light_belt_info.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
memcpy(Light_belt_info.DevSendBuf_last, Light_belt_info.DevSendBuf, Light_belt_info.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
for(i = 0; i < Light_belt_info.LEDLoopValidNum; i++)
{
if(Light_belt_info.DevCtrlWayBuf_last[i] != Light_belt_info.DevCtrlWayBuf[i]) //Light_belt_info.DevCtrlWayBuf_last[i]
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>:%d ״̬:%04X <20><>һ<EFBFBD><D2BB>״̬:%04X\r\n", i, Light_belt_info.DevCtrlWayBuf[i], Light_belt_info.DevCtrlWayBuf_last[i]); //
Light_belt_info.DevCtrlWayBuf_last[i] = Light_belt_info.DevCtrlWayBuf[i];//<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƣ<EFBFBD>ֻ<EFBFBD><D6BB>һ·һ·<D2BB><C2B7><EFBFBD><EFBFBD>
Light_belt_info.LEDWayCtrlFlag = 0x01;
Light_belt_info.LEDWayCtrlCnt = RGB_Light_Belt_REPEATSENDTIMEMAX;
// Light_belt_info.DevCtrlWayBuf[i] = 0x00;
Light_belt_info.WayCtrli = i;
// memcpy(Light_belt_info.DevCtrlWayBuf_last, Light_belt_info.DevCtrlWayBuf, Light_belt_info.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
// if(0x00 != Light_belt_info.light_Control_Flag)
// {
if(Light_belt_info.Dim_Global_Value_Last != Light_belt_info.Dim_Global_Value) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Light_belt_info.Dim_Global_Value_Last = Light_belt_info.Dim_Global_Value;
Light_belt_info.Dim_GV_Flag |= (0x01<<7);
}
if((Light_belt_info.LEDUpLightLimitLast != Light_belt_info.LEDUpLightLimit) || (Light_belt_info.LEDDownLightLimitLast != Light_belt_info.LEDDownLightLimit)) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
Light_belt_info.LEDUpLightLimitLast = Light_belt_info.LEDUpLightLimit;
Light_belt_info.Dim_GV_Flag |= (0x01<<6);
Light_belt_info.LEDDownLightLimitLast = Light_belt_info.LEDDownLightLimit;
Light_belt_info.Dim_GV_Flag |= (0x01<<5);
}
// if(Light_belt_info.LEDDownLightLimitLast != Light_belt_info.LEDDownLightLimit) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
// {
// Light_belt_info.LEDDownLightLimitLast = Light_belt_info.LEDDownLightLimit;
// Light_belt_info.Dim_GV_Flag |= (0x01<<5);
// }
if(0x00 != Light_belt_info.Dim_GV_Flag) //2024-1-30
{
BLW_RGB_GlobalValue_Set(&BUS_Public, &Light_belt_info); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Light_belt_info.LEDCtrlFlag)
{
if(0x00 != Light_belt_info.LEDCtrlCnt)
{
Light_belt_info.LEDCtrlCnt--;
}
else
{
Light_belt_info.LEDCtrlFlag = 0x00;
}
BLV_RGB_Light_Belt_Light_Control_Datasend(&BUS_Public, &Light_belt_info); //4·<34><C2B7><EFBFBD>ƣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Light_belt_info.LEDWayCtrlFlag)
{
if(0x00 != Light_belt_info.LEDWayCtrlCnt)
{
Light_belt_info.LEDWayCtrlCnt--;
}
else
{
Light_belt_info.LEDWayCtrlFlag = 0x00;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD>±<EFBFBD>:%d",Light_belt_info.WayCtrli); //
BLW_RGB_Light_Way_Ctrl(&BUS_Public, &Light_belt_info);
// BLW_Rs485_LED_4LOOP_Way_Ctrl(CfgDevAdd, Light_belt_info.WayCtrli); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Light_belt_info.LEDLightnessReadFlag)
{
if(0x00 != Light_belt_info.LEDLightnessReadCnt)
{
Light_belt_info.LEDLightnessReadCnt--;
}
else
{
Light_belt_info.LEDLightnessReadFlag = 0x00;
}
BLV_RGB_Light_Belt_Light_Inquire_Datasend(&BUS_Public, &Light_belt_info);
// BLW_Rs485_LED_4LOOP_Read(CfgDevAdd); //4·<34><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ
Ret = RS485OCCUPYTIME;
}
// else if(Light_belt_info.loop_dimming_Control_Flag != 0x00) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// Ret = RS485OCCUPYTIME;
// BLV_RGB_Light_Belt_loop_dimming_Control_Datasend(DevAdd, &Light_belt_info);
// }
// else if(Light_belt_info.stop_dimming_Control_Flag != 0x00) //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
// {
// Ret = RS485OCCUPYTIME;
// BLV_RGB_Light_Belt_stop_dimming_Control_Datasend(DevAdd, &Light_belt_info);
// }
// else
// {
// if(Light_belt_info.loop_dimming_flg == 1) //<2F><>ǰδ<C7B0><CEB4><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>Ų<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
// {
// return 0;
// }
// BLV_RGB_Light_Belt_Light_Inquire_Datasend(DevAdd, &Light_belt_info);
// }
if(RS485OCCUPYTIME == Ret)
{
if(Light_belt_info.DevSendCnt > RGB_Light_Belt_REPEATSENDTIMEMAX)
{
if(Light_belt_info.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DEV_RGB_LIGHT_BELT_Type LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_RGB_LIGHT_BELT_Type,SRAM_Read_Byte(DevAdd+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Light_belt_info.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Light_belt_info.DevOffline != Light_belt_info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Light_belt_info.DevOfflineLast = Light_belt_info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x00 != Light_belt_info.Dim_GV_Flag)
{
Light_belt_info.Dim_GV_Flag = 0x00;
}
}else {
Light_belt_info.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Light_belt_info.inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Light_belt_info.comm_record,0x01,0x00);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD>"); //
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Light_belt_info, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),DevAdd+Dev_Privately);
// SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),DevAdd+Dev_Privately);
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,DevAdd+Dev_Check);
// val_check = Dev_CheckSum(DevAdd, sizeof(RS485_LED_INFO) + Dev_Privately);
// SRAM_Write_Byte(val_check,DevAdd+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
}
return Ret;
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Light_Control_Datasend
* Description : RGB<47>ƴ<EFBFBD> <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_Light_Control_Datasend(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Dev_Info)
{
// uint8_t temp = 0;
uint8_t send_buff[20];
memset(send_buff,0,20);
// memcpy(&send_buff[11], Dev_Info->light, 4);
// for(uint8_t i = 0; i < RGB_LIGHT_BELT_CH_MAX; i++)
// {
// if((Dev_Info->light_Control_Flag & (1<<i)))
// {
// send_buff[11+i] = Dev_Info->set_light[i];
// }
// }
//
// Dev_Info->last_light_Control_Flag = Dev_Info->light_Control_Flag;
memcpy(&send_buff[11], &Dev_Info->DevSendBuf[0], Dev_Info->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
send_buff[0] = 0xA6;
send_buff[1] = RGB_LIGHT_BELT_SET_LIGHT_CMD;
send_buff[3] = 11;
send_buff[4] = 0; //tx
send_buff[5] = BUS_Public->addr;//SRAM_Read_Byte(dev_addr+Dev_Addr);; //rx
send_buff[6] = RGB_LIGHT_BELT_CONTROL_MODE_SET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// send_buff[7] = BLWRGBGRADUALTIME; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// send_buff[8] = BLWRGBGRADUALTIME>>8;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB<EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:%d",Dev_Info->RGB_Set_Time);
send_buff[7] = Dev_Info->RGB_Set_Time; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
send_buff[8] = Dev_Info->RGB_Set_Time>>8;
send_buff[9] = 0;
send_buff[10] = 4; //<2F><><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD>·
send_buff[2] = CheckSum_Overlook_Check(send_buff, 15, 2);
// temp = SRAM_Read_Byte(dev_addr+Dev_port);
MCU485_SendString(BUS_Public->port, send_buff, 15);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,send_buff,15);
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_loop_dimming_Control_Datasend
* Description : RGB<47>ƴ<EFBFBD> ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
//void BLV_RGB_Light_Belt_loop_dimming_Control_Datasend(uint32_t dev_addr, RS485_LED_INFO *Dev_Info)
//{
// uint8_t temp = 0;
// uint8_t send_buff[20];
// memset(send_buff,0,20);
//// send_buff[7] = SRAM_Read_Byte(dev_addr+Dev_Addr);
//// send_buff[8] = (Dev_Info->loop_dimming_Control_Flag & 0x0F);
//
// send_buff[7] = Dev_Info->loop_dimming_control;
// send_buff[8] = 0x00;
//
// Dev_Info->last_loop_dimming_Control_Flag = Dev_Info->loop_dimming_Control_Flag;
//
//
// send_buff[0] = 0xA6;
// send_buff[1] = RGB_LIGHT_BELT_SET_ACT_CMD;
// send_buff[3] = 10;
// send_buff[4] = 0; //tx
// send_buff[5] = SRAM_Read_Byte(dev_addr+Dev_Addr); //rx
// send_buff[6] = Dev_Info->SN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// send_buff[9] = RGB_LIGHT_BELT_LOOP_DIMMING_CMD; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// send_buff[10] = RGB_LIGHT_BELT_CONTROL_MODE_LOOP; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// send_buff[11] = Dev_Info->loop_fade_time; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// send_buff[12] = Dev_Info->loop_fade_time>>8;
// send_buff[13] = Dev_Info->loop_light; //<2F>趨ѭ<E8B6A8><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// send_buff[2] = CheckSum_Overlook_Check(send_buff, 14, 2);
//
// temp = SRAM_Read_Byte(dev_addr+Dev_port);
// MCU485_SendString(temp, send_buff, 14);
//
// /*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,send_buff,14);
//}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_stop_dimming_Control_Datasend
* Description : RGB<47>ƴ<EFBFBD> ֹͣѭ<D6B9><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
//void BLV_RGB_Light_Belt_stop_dimming_Control_Datasend(uint32_t dev_addr, RS485_LED_INFO *Dev_Info)
//{
// uint8_t temp = 0;
// uint8_t send_buff[10];
// memset(send_buff,0,10);
//
// Dev_Info->last_stop_dimming_Control_Flag = Dev_Info->stop_dimming_Control_Flag;
//
// send_buff[0] = 0xA6;
// send_buff[1] = RGB_LIGHT_BELT_STOP_DIMMING_CMD;
// send_buff[3] = 2;
// send_buff[4] = 0; //tx
// send_buff[5] = SRAM_Read_Byte(dev_addr+Dev_Addr); //rx
//
// send_buff[2] = CheckSum_Overlook_Check(send_buff, 6, 2);
//
// temp = SRAM_Read_Byte(dev_addr+Dev_port);
// MCU485_SendString(temp, send_buff, 6);
//
// /*<2A><>־<EFBFBD><D6BE>¼*/
// LOG_Device_COMM_Send_Control_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,send_buff,6);
//}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Light_Inquire_Datasend
* Description : RGB<47>ƴ<EFBFBD> Inching<6E><67><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
void BLV_RGB_Light_Belt_Light_Inquire_Datasend(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Dev_Info)
{
// uint8_t temp = 0;
uint8_t send_buff[10];
memset(send_buff,0,10);
send_buff[0] = 0xA6;
send_buff[1] = RGB_LIGHT_BELT_READ_LIGHT_CMD;
send_buff[3] = 4;
send_buff[4] = 0; //tx
send_buff[5] = BUS_Public->addr;//SRAM_Read_Byte(dev_addr+Dev_Addr);; //rx
send_buff[6] = 0; //<2F><><EFBFBD><EFBFBD>
send_buff[7] = 4; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
send_buff[2] = CheckSum_Overlook_Check(send_buff, 8, 2);
// temp = SRAM_Read_Byte(dev_addr+Dev_port);
MCU485_SendString(BUS_Public->port, send_buff, 8);
}
/*<2A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void BLW_Rs485_Strip_Way_Ctrl_CycleUp(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Dev_Info)
{
// RS485_STRIP_INFOP Rs485StripInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// static uint8_t WayCtrlSn = 0x00;
//ͷ <20><><EFBFBD><EFBFBD> У<><D0A3> <20><><EFBFBD><EFBFBD> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Զ<EFBFBD>LED <20><><EFBFBD><EFBFBD> ʱ<><CAB1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// uint8_t SendBuf[15] = {0xA6, 0x44, 0x02, 0x0B, 0x00, 0x00, 0x6F, 0x14, 0x00, 0x15, 0x01, 0x01, 0x0A, 0x64, 0x00};
//ͷ <20><><EFBFBD><EFBFBD> У<><D0A3> <20><><EFBFBD><EFBFBD> <20><>ַ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Զ<EFBFBD>LED ѭ<><D1AD> ʱ<><CAB1> <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[14] = {0xA6, 0x44, 0x02, 0x0A, 0x00, 0x00, 0x6F, 0x14, 0x00, 0x13, 0x03, 0x20, 0x00 , 0x00};
// Rs485StripInfo = CfgDevAdd->DevDataStruct;
SendBuf[5] = BUS_Public->addr;
SendBuf[6] = BLV_SN_Get(&Dev_Info->LEDSn, 0, 255);
SendBuf[7] = Dev_Info->WayCtrli; //StripLoop; //<2F><>·
switch(Dev_Info->DevCtrlWayBuf[Dev_Info->WayCtrli])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
SendBuf[10] = 0x03; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
SendBuf[10] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>һ<EFBFBD><D2BB>
SendBuf[10] = 0x02;
break;
}
if((0x00 == Dev_Info->DevCtrlWayContect[Dev_Info->WayCtrli]) || (Dev_Info->DevCtrlWayContect[Dev_Info->WayCtrli] > 0x64))
{
SendBuf[11] = 0x00;
}
else
{
SendBuf[11] = 100/Dev_Info->DevCtrlWayContect[Dev_Info->WayCtrli];
}
// SendBuf[13] = Rs485StripInfo->DevCtrlWayContect[StripLoop]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Է<EFBFBD><D4B7>ֱ<EFBFBD><D6B1><EFBFBD>û<EFBFBD><C3BB>
SendBuf[2] = CheckSum_Overlook_Check(SendBuf, 14, 2); //
MCU485_SendString(BUS_Public->port,SendBuf,14);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,14);
}
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
void BLW_Rs485_Strip_Way_Ctrl_Stop(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Dev_Info)
{
uint8_t SendBuf[6] = {0xA6, 0x46, 0x11, 0x02, 0x00, 0x00};
SendBuf[5] = BUS_Public->addr;
SendBuf[2] = CheckSum_Overlook_Check(SendBuf, 6, 2); //BLW_SOR_Negate(SendBuf, 6, 2);
MCU485_SendString(BUS_Public->port,SendBuf, 6); //
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf, 6); //
}
/**
* @name BLW 24· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* StripLoop <20><>·<EFBFBD><C2B7>ַ 0~23
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
void BLW_RGB_Light_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Dev_Info)
{
switch(Dev_Info->DevCtrlWayBuf[Dev_Info->WayCtrli])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
case CFG_Dev_CtrlWay_Is_Dim_Up:
case CFG_Dev_CtrlWay_Is_Dim_Down:
BLW_Rs485_Strip_Way_Ctrl_CycleUp(BUS_Public, Dev_Info);
break;
case CFG_Dev_CtrlWay_Is_Dim_Stop: //ֹͣ
BLW_Rs485_Strip_Way_Ctrl_Stop(BUS_Public, Dev_Info);
break;
}
}
#define IsMyData 0x00
#define IsNotMyData 0x01
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Data_Processing
* Description : <20>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <09><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t BLV_RGB_Light_Belt_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
// uint8_t crc_val = 0;temp = 0,
uint16_t temp1 = 0;
// uint8_t temp_dev_addr = 0;
Device_Public_Information_G BUS_Public;
uint8_t data[Dev_RGBLight_RecvData_Len_Max];
uint8_t rev = IsNotMyData;
RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(len > Dev_RGBLight_RecvData_Len_Max)
{
// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>485<38><35><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if(data[0] != 0x6A) //ͷ<><CDB7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Head Fail!");
return rev;
}
if(CheckSum(data,len) != 0x00)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Check Fail!");
return rev; //<2F><>У<EFBFBD><D0A3>
}
// temp_dev_addr = SRAM_Read_Byte(dev_addr+ Dev_Addr);
if(data[4] != BUS_Public.addr)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt PKT_ADD_FM Fail!");
return 0x01; //<2F><><EFBFBD>͵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
}
if(data[5] != 0x00)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt PKT_ADD_TO Fail!");
return 0x01; //<2F><><EFBFBD>յ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
}
if(data[3] != (len-4))
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt PKT_LEN Fail!");
return 0x01; //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
}
switch(data[1])
{
case RGB_LIGHT_BELT_READ_LIGHT_REPLY: //<2F><><EFBFBD><EFBFBD><EFBFBD>Ȼظ<C8BB>
if(data[6] == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
memcpy(Light_belt_info.LEDLightRelease, &data[7], Light_belt_info.LEDLoopValidNum);//<2F>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(Light_belt_info.DevSendBuf, &data[7], Light_belt_info.LEDLoopValidNum);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d", Light_belt_info.DevSendBuf[0]);
Light_belt_info.LEDLightnessReadFlag = 0x00;
// if(memcmp(&deal_buff[7], Light_belt_info.light, 4) != 0) //<2F><><EFBFBD>ȸı<C8B8>
// {
// memcpy(Light_belt_info.light, &deal_buff[7], 4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// temp1++;
//
// /*<2A><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬,<2C>иı<D0B8> - <20><>¼<EFBFBD><C2BC>־*/
LOG_Device_COMM_ASK_TO_Reply_Record(BUS_Public.port,BUS_Public.baud,(SysTick_1ms - Light_belt_info.inquire_tick),data,len);
// }
}
else Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X", SRAM_Read_Byte(data_addr + 6));
break;
case RGB_LIGHT_BELT_SET_LIGHT_REPLY: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼظ<C8BB>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
Light_belt_info.LEDCtrlFlag = 0x00;
// Light_belt_info.loop_dimming_flg = 0; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Light_belt_info.light_Control_Flag &= ~(Light_belt_info.last_light_Control_Flag);
}
else Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X", SRAM_Read_Byte(data_addr + 6));
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case RGB_LIGHT_BELT_SET_ACT_REPLY: //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Receive CycleDim Cmd! Clear WayCtrlFlag");
Light_belt_info.LEDWayCtrlFlag = 0x00;
temp1++;
}
else Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X", SRAM_Read_Byte(data_addr + 6));
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case RGB_LIGHT_BELT_STOP_DIMMING_REPLY: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(SRAM_Read_Byte(data_addr + 6) == 0xE0) //<2F>޴<EFBFBD><DEB4><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Receive StopDim Cmd! Clear WayCtrlFlag");
Light_belt_info.LEDWayCtrlFlag = 0x00;
temp1++;
}
else Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB_Light_Belt Fail<69><6C>%02X", SRAM_Read_Byte(data_addr + 6));
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0xAA:
Light_belt_info.Dim_GV_Flag = 0x00;
break;
default: return 0x01;
}
if(Light_belt_info.DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Device_Online........",__func__);
LOG_Device_Online_Record(DEV_RGB_LIGHT_BELT_Type,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Light_belt_info.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Light_belt_info.DevSendCnt = 0x00;
Light_belt_info.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Light_belt_info.DevOffline != Light_belt_info.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Light_belt_info.DevOfflineLast = Light_belt_info.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Light_belt_info, sizeof(RS485_LED_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>SRAM<41><4D>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
// temp = sizeof(RS485_LED_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(dev_addr,temp);
// SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
return 0x00;
}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Light
* Description : <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
Control_Flag :<3A><><EFBFBD>ƻ<EFBFBD>· bit0~3: ch1~ch4
chx : <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
fadeTime<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
//void BLW_RGB_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint16_t loop,uint16_t start)
//{
//// uint16_t temp = 0;
// uint8_t temp1 = 0; //crc_val = 0,
// uint8_t CtrlMode; //<2F><><EFBFBD><EFBFBD>ģʽ
// uint8_t CtrlContect;
// Device_Public_Information_G BUS_Public;
//
// if(devaddr == 0x00) return;
//
// RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
// SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
//
// if(loop >= RGB_LIGHT_BELT_CH_MAX) //<2F><>Ч<EFBFBD><D0A7>·
// {
// return ;
// }
// CtrlMode = start&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
// CtrlContect = start>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// switch(CtrlMode)
// {
// case CFG_Dev_CtrlWay_Is_Dim_Stop:
// case CFG_Dev_CtrlWay_Is_Dim_Up:
// case CFG_Dev_CtrlWay_Is_Dim_Down:
// Light_belt_info.LEDLightnessReadFlag = 0x01; //Ψ<><CEA8>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3>Żᷢ<C5BB>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
// Light_belt_info.LEDLightnessReadCnt = RGB_Light_Belt_REPEATSENDTIMEMAX;
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:%d\r\n", CtrlMode); //
// temp1++;
// break;
// }
// switch(CtrlMode)
// {
// case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
// case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
// case CFG_Dev_CtrlWay_Is_Dim_Stop:
// Light_belt_info.DevCtrlWayBuf[loop] = CtrlMode; // - CFG_Dev_CtrlWay_Is_PWM_START + 1
// Light_belt_info.DevCtrlWayContect[loop] = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// temp1++;
// break;
// case CFG_Dev_CtrlWay_Is_Open: //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
// case CFG_Dev_CtrlWay_Is_Close:
// Light_belt_info.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
//// Light_belt_info.light_Control_Flag |= 1<<loop;
//// Light_belt_info.LEDCtrlCnt = RGB_Light_Belt_REPEATSENDTIMEMAX;
//// Light_belt_info.set_light[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// temp1++;
// break;
// case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD>
// if(0x00 != Light_belt_info.LEDLightRelease[loop]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ
// {
// CtrlContect = Light_belt_info.LEDLightRelease[loop]; //<2F><> <20><>
// }
// else if(0x00 != CtrlContect) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// CtrlContect = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ׼
// }
// else
// {
// CtrlContect = 0x64; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// }
// Light_belt_info.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
// temp1++;
// break;
// case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
// Light_belt_info.light_Control_Flag |= 1<<loop;
// if(Light_belt_info.DevSendBuf[loop] + CtrlContect <= 100)
// {
// Light_belt_info.DevSendBuf[loop] += CtrlContect;
// }
// else
// {
// Light_belt_info.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// }
// temp1++;
// break;
// case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
// Light_belt_info.light_Control_Flag |= 1<<loop;
// if(Light_belt_info.DevSendBuf[loop] >= CtrlContect)
// {
// Light_belt_info.DevSendBuf[loop] -= CtrlContect;
// }
// else
// {
// Light_belt_info.DevSendBuf[loop] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
// }
// temp1++;
// break;
// case CFG_Dev_CtrlWay_Is_Dim_Up_Limit: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
// if(0x00 != Light_belt_info.DevSendBuf[loop])
// {
// Light_belt_info.light_Control_Flag |= 1<<loop;
// if(Light_belt_info.DevSendBuf[loop] + CtrlContect <= 100)
// {
// Light_belt_info.DevSendBuf[loop] += CtrlContect;
// }
// else
// {
// Light_belt_info.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// }
// temp1++;
// }
// break;
// case CFG_Dev_CtrlWay_Is_Dim_Down_Limit: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
// Light_belt_info.light_Control_Flag |= 1<<loop;
// if(Light_belt_info.DevSendBuf[loop] > CtrlContect)
// {
// Light_belt_info.DevSendBuf[loop] -= CtrlContect;
// temp1++;
// }
//
// break;
// }
// Light_belt_info.fade_time = DEV_Dimming_Time;
//
// if(temp1 != 0x00)
// {
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"RGB DevSendBuf loop:%d,start:%04X\r\n",loop,start);
//
// BUS_Public.check = 0x00;
// BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Light_belt_info, sizeof(RS485_LED_INFO));
// SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
// SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
//
// }
//}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Light
* Description : <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
Control_Flag :<3A><><EFBFBD>ƻ<EFBFBD>· bit0~3: ch1~ch4
chx : <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
fadeTime<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
//void BLV_RGB_Light_Belt_Control_Light(uint32_t dev_addr, uint8_t Control_Flag, uint8_t ch1, uint8_t ch2, uint8_t ch3, uint8_t ch4, uint16_t fadeTime)
//{
// uint8_t crc_val = 0;
// uint16_t temp = 0;
// RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
//
// for(uint8_t i=0; i< RGB_LIGHT_BELT_CH_MAX; i++)
// {
// if(Control_Flag & (1<<i))
// {
// Light_belt_info.light_Control_Flag |= 1<<i;
// switch(i)
// {
// case 0:
// Light_belt_info.set_light[i] = ch1;
// break;
// case 1:
// Light_belt_info.set_light[i] = ch2;
// break;
// case 2:
// Light_belt_info.set_light[i] = ch3;
// break;
// case 3:
// Light_belt_info.set_light[i] = ch4;
// break;
// default: break;
// }
//
// }
// }
// Light_belt_info.fade_time = fadeTime;
//
// SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
// temp = sizeof(RS485_LED_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(dev_addr,temp);
// SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//
//}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Loop_Dimming
* Description : <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
Control_Flag :<3A><><EFBFBD>ƻ<EFBFBD>· 0~2
light : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fadeTime <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
*******************************************************************************/
//void BLV_RGB_Light_Belt_Control_Loop_Dimming(uint32_t dev_addr, uint8_t Control_CH, uint8_t light, uint16_t fadeTime)
//{
// uint8_t crc_val = 0;
// uint16_t temp = 0;
// RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
//
//// for(uint8_t i=0; i< RGB_LIGHT_BELT_CH_MAX; i++)
//// {
//// if(Control_Flag & (1<<i))
//// {
//// Light_belt_info.loop_dimming_Control_Flag |= 1<<i;
//// }
//// }
//
// Light_belt_info.loop_dimming_Control_Flag = 0x01;
// Light_belt_info.loop_dimming_control = Control_CH;
//
//
// Light_belt_info.loop_fade_time = fadeTime;
// Light_belt_info.loop_light = light;
// Light_belt_info.SN++;
//
// SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
// temp = sizeof(RS485_LED_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(dev_addr,temp);
// SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//
//}
/*******************************************************************************
* Function Name : BLV_RGB_Light_Belt_Control_Stop_Dimming
* Description : <20>ƴ<EFBFBD> ֹͣѭ<D6B9><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
*******************************************************************************/
//void BLV_RGB_Light_Belt_Control_Stop_Dimming(uint32_t dev_addr)
//{
// uint8_t crc_val = 0;
// uint16_t temp = 0;
// RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
//
// Light_belt_info.stop_dimming_Control_Flag = 1;
//
// SRAM_DMA_Write_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
// /*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ*/
// SRAM_Write_Byte(0x00,dev_addr+Dev_Check);
// temp = sizeof(RS485_LED_INFO) + Dev_Privately;
// crc_val = Dev_CheckSum(dev_addr,temp);
// SRAM_Write_Byte(crc_val,dev_addr+Dev_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//
//}
/*******************************************************************************
* Function Name : Get_BLV_RGB_Light_Loop_Value
* Description : <20><>ȡRGB<47>ƹ<EFBFBD><C6B9><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
* Input :
dev_addr :<3A><EFBFBD><E8B1B8>ַ
ch <09><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>·
*******************************************************************************/
//uint16_t Get_BLV_RGB_Light_Loop_Value(uint32_t dev_addr,uint16_t ch)
//{
// if(dev_addr == 0x00) return 0;
// RS485_LED_INFO Light_belt_info; //<2F>ƴ<EFBFBD><C6B4>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
// SRAM_DMA_Read_Buff((uint8_t *)&Light_belt_info,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
//
// if(ch < RGB_LIGHT_BELT_CH_MAX)
// {
//// return Light_belt_info.light[ch];
//// Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"RGB<47><42>·:%d <20><><EFBFBD><EFBFBD>:%d! \r\n", ch, Light_belt_info.set_light[ch]);
//
// return Light_belt_info.DevSendBuf[ch];
// }else {
// return 0;
// }
//}
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_RGB_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t lens = 0x0B;
uint8_t SendBuf[lens];
memset(SendBuf,0,sizeof(SendBuf));
SendBuf[0] = 0xA6; //ͷ
SendBuf[1] = 0x0A; //CMD
SendBuf[3] = lens;
SendBuf[4] = 0x00; //Tx_Addr
SendBuf[5] = BUS_Public->addr; //Rx_Addr
SendBuf[6] = Rs485LEDInfo->Dim_GV_Flag;
SendBuf[7] = Rs485LEDInfo->Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[8] = Rs485LEDInfo->LEDUpLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[9] = Rs485LEDInfo->LEDDownLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[10] = 0x00;
SendBuf[2] = CheckSum_Overlook_Check(SendBuf, lens, 2);
MCU485_SendString(BUS_Public->port,SendBuf,lens);
}

View File

@@ -0,0 +1,98 @@
#ifndef BLV_485_DEV_RGB_LIGHT_BELTFUN_H
#define BLV_485_DEV_RGB_LIGHT_BELTFUN_H
#include "BLV_485_Protocol.h"
#include "BLV_485_Dev_LEDFun.h"
#define DEV_RGB_LIGHT_BELT_Type 0x12 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define RGB_LIGHT_BELT_SET_LIGHT_CMD 0x0D //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGB_LIGHT_BELT_READ_LIGHT_CMD 0x0E //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGB_LIGHT_BELT_SET_ACT_CMD 0x44 //<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGB_LIGHT_BELT_STOP_DIMMING_CMD 0x46 //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
#define RGB_LIGHT_BELT_SET_LIGHT_REPLY 0xAD //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define RGB_LIGHT_BELT_READ_LIGHT_REPLY 0xAE //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define RGB_LIGHT_BELT_SET_ACT_REPLY 0xE4 //<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define RGB_LIGHT_BELT_STOP_DIMMING_REPLY 0xE6 //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define RGB_LIGHT_BELT_CONTROL_MODE_SET 0x00 //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RGB_LIGHT_BELT_CONTROL_MODE_LOOP 0x03 //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
#define RGB_LIGHT_BELT_LOOP_DIMMING_CMD 0x13 //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
RGB_LIGHT_BELT_CH1,
RGB_LIGHT_BELT_CH2,
RGB_LIGHT_BELT_CH3,
RGB_LIGHT_BELT_CH4,
RGB_LIGHT_BELT_CH_MAX,
}RS485_RGB_LIGHT_BELT_NUM_E;
#if 0
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t light[RGB_LIGHT_BELT_CH_MAX]; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ
uint8_t last_light[RGB_LIGHT_BELT_CH_MAX]; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint8_t light_Control_Flag; //<2F><><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־λ
uint8_t last_light_Control_Flag; //<2F>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־λ
uint8_t set_light[RGB_LIGHT_BELT_CH_MAX]; //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>ֵ
uint16_t fade_time; //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint8_t PWMLightRelease[RGB_LIGHT_BELT_CH_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־
uint8_t LEDCtrlCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t LEDLoopValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
uint8_t LEDLightnessReadFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t LEDLightnessReadCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t DevSendBuf[RGB_LIGHT_BELT_CH_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ<D6BD>ָʾ<D6B8>Ƶ<EFBFBD>״̬
uint8_t DevSendBuf_last[RGB_LIGHT_BELT_CH_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ<D6BD>ָʾ<D6B8>Ƶ<EFBFBD><C6B5><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevCtrlWayBuf[RGB_LIGHT_BELT_CH_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
uint8_t DevCtrlWayBuf_last[RGB_LIGHT_BELT_CH_MAX]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevCtrlWayContect[RGB_LIGHT_BELT_CH_MAX]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t WayCtrli; //<2F><>ʽ<EFBFBD><CABD><EFBFBD>Ƶ<EFBFBD><C6B5>±<EFBFBD>
uint8_t LEDWayCtrlFlag; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ʊ<EFBFBD>־
uint8_t LEDWayCtrlCnt; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t loop_dimming_control; //<2F><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ͨ<EFBFBD><CDA8>
uint8_t loop_dimming_Control_Flag; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ bit7:ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint8_t last_loop_dimming_Control_Flag; //<2F>ϴ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ bit7:ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint16_t loop_fade_time; //<2F>趨ѭ<E8B6A8><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
uint8_t loop_light; //<2F>趨ѭ<E8B6A8><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t loop_dimming_flg; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t stop_dimming_Control_Flag; //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint8_t last_stop_dimming_Control_Flag; //<2F>ϴ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint8_t SN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}__attribute__ ((__packed__))RS485_RGB_LIGHT_BELT_INFO; //<2F>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLV_485_Dev_RGB_Light_Belt_Init(uint8_t devaddr);
uint8_t BLV_RGB_Light_Belt_Cycle_Call(uint32_t DevAdd);
uint8_t BLV_RGB_Light_Belt_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLV_RGB_Light_Belt_Light_Control_Datasend(Device_Public_Information_G *BUS_Public, RS485_RGB_LIGHT_BELT_INFO* Dev_Info);
void BLV_RGB_Light_Belt_Light_Inquire_Datasend(Device_Public_Information_G *BUS_Public, RS485_RGB_LIGHT_BELT_INFO *Dev_Info);
void BLV_RGB_Light_Belt_stop_dimming_Control_Datasend(uint32_t dev_addr, RS485_RGB_LIGHT_BELT_INFO *Dev_Info);
void BLV_RGB_Light_Belt_loop_dimming_Control_Datasend(uint32_t dev_addr, RS485_RGB_LIGHT_BELT_INFO *Dev_Info);
void BLV_RGB_Light_Belt_Control_Light(uint32_t dev_addr, uint8_t Control_Flag, uint8_t ch1, uint8_t ch2, uint8_t ch3, uint8_t ch4, uint16_t fadeTime);
void BLV_RGB_Light_Belt_Control_Loop_Dimming(uint32_t dev_addr, uint8_t Control_CH, uint8_t light, uint16_t fadeTime);
void BLV_RGB_Light_Belt_Control_Stop_Dimming(uint32_t dev_addr);
uint16_t Get_BLV_RGB_Light_Loop_Value(uint32_t dev_addr,uint16_t ch);
#endif
void BLW_RS485_RGB_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum);
#endif

View File

@@ -0,0 +1,333 @@
/**
******************************************************************************
* @file BLV_485_Dev_Rotary_SwitchFun.c
* @author BLW RCU development Team
* @version YHF
* @date 2024<32><34>01<30><31>26<32><36>
* @brief
* 485<38><35>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
* <20><><EFBFBD><EFBFBD><EBA3BA>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
*/
#include "APP_SwitchCtrl.h"
#include <string.h>
#include "BLV_485_Protocol.h"
#include "SPI_SRAM.h"
#include "usart.h"
#include "CH57x_common.h"
#include "check_fun.h"
#include "rw_logging.h"
#include "SRAM_Variable_Address.h"
#include "DBG.h"
#include "Log_api.h"
#include "includes.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ʼ*/
#include "BLV_485_Dev_BLVP1_Rotary_Switch.h"
#include "BLV_485_Dev_BLVP2_Rotary_Switch.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>*/
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_Switch_Rotary_P1_Flag, BLVP1_485_Dev_Rotary_Switch_Init)
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(RS485_Switch_Rotary_P2_Flag, BLVP2_485_Dev_Rotary_Switch_Init)
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t Dev_Rotary_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
void Dev_Rotary_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType);
uint16_t Dev_Rotary_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
/*******************************************************************************
* @name : <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>
* @para :
* DataLen :<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Data<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @attention : <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*******************************************************************************/
void BLW_RS485_Rotary_Switch_Init(uint16_t DataLen, uint8_t *Data)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485RotaryInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485RotaryInfo,0,sizeof(RS485_SWI_INFO));
BUS_Public.addr = Data[1]; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Data[0]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
// BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 100; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
// BUS_Public.polling_cf = (uint32_t)&BLW_Touch_SwitchCycleDis;
// BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_Touch_Swi_Check;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Rotary_InType_Get;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_Rotary_Output_Ctrl;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_Rotary_Loop_State;
Rs485RotaryInfo.SwtInputValidNum = 0x01;
Rs485RotaryInfo.SwtOutputValidNum = 0x00;
Rs485RotaryInfo.DevOffline = Rs485RotaryInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(Data[7])
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485RotaryInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485RotaryInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485RotaryInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485RotaryInfo);break;
}
switch(Data[2])
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* Function Name : BLW_RS485_Rotary_Switch_For_Logic_Init
* Description : <20><><EFBFBD>س<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
void BLW_RS485_Rotary_Switch_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485RotaryInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485RotaryInfo,0,sizeof(RS485_SWI_INFO));
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s -%d",__func__,dev_info->addr);
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 100; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
// BUS_Public.polling_cf = (uint32_t)&BLW_Touch_SwitchCycleDis;
// BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_Touch_Swi_Check;
BUS_Public.Protocol = dev_info->version;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Rotary_InType_Get;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_Rotary_Output_Ctrl;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_Rotary_Loop_State;
Rs485RotaryInfo.SwtInputValidNum = dev_info->input_num;
Rs485RotaryInfo.SwtOutputValidNum = dev_info->output_num;
Rs485RotaryInfo.DevOffline = Rs485RotaryInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485RotaryInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485RotaryInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485RotaryInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485RotaryInfo);break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List2(&BUS_Public,(uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*<2A><>ȡ<EFBFBD><C8A1>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
uint8_t Get_Rotary_Switch_Online_Status(uint32_t devaddr)
{
RS485_SWI_INFO Rs485RotaryInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO),devaddr+Dev_Privately);
if(Rs485RotaryInfo.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BAAF>
*@para
* DevAddr <20><EFBFBD><E8B1B8>ַ
* DevInputLoop <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>Χ1~RS_SWITCH_CH_MAX
* DevInputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t Dev_Rotary_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485RotaryInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevInputLoop >= RS_SWITCH_CH_MAX)
{
return Ret;
}
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Dev_Rotary_InType_Get,Input:%02X Read:%02X Loop:%d",DevInputType,Rs485RotaryInfo.DevReadBuf[DevInputLoop],DevInputLoop);
if(DevInputType == Rs485RotaryInfo.DevReadBuf[DevInputLoop])
{
Rs485RotaryInfo.DevReadBuf[DevInputLoop] = KeyNoAction;
Ret = CtrlValid;
//Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><>ť<EFBFBD><C5A5><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485RotaryInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);
}
return Ret;
}
/**
*@name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
*@para
* DevAddr <20><EFBFBD><E8B1B8>ַ
* DevOutputLoop <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>Χ0~
* DevInputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Dev_Rotary_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType)
{
// uint8_t CtrlWay = 0x00;
// uint8_t CtrlContect = 0x00;
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485RotaryInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t KeepFlag = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
if(NULL == DevAddr)
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
// if(DevOutputLoop >= Rs485RotaryInfo.SwtOutputValidNum)
// {
// return ;
// }
//
// CtrlWay = DevOutputType&0x00ff; //ȡ<><C8A1><EFBFBD>ֽ<EFBFBD>
// CtrlContect = DevOutputType>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// switch(CtrlWay) //<2F><>Ϊ0
// {
// case 0x05: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485RotaryInfo.RL_Upper_limit = CtrlContect;
// KeepFlag = 0x01;
// break;
// case 0x06: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Rs485RotaryInfo.RL_Lower_limit = CtrlContect;
// KeepFlag = 0x01;
// break;
// default:
// break;
// }
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485RotaryInfo, sizeof(RS485_SWI_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);
}
}
/**
* @name ָ<><D6B8><EFBFBD><EFBFBD>·״̬<D7B4>õ<EFBFBD>
* @param
* devaddr <20><>ǰ<EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
* DevOutputLoop <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ҵķ<D2B5><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·
* @retval
* ret <20><>·״̬<D7B4><CCAC><EFBFBD><EFBFBD> 1 <20><> 2<><32><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief
*/
uint16_t Dev_Rotary_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop)
{
RS485_SWI_INFO Rs485RotaryInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00)
return 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485RotaryInfo,sizeof(RS485_SWI_INFO),devaddr+Dev_Privately);
if(DevOutputLoop >= Rs485RotaryInfo.SwtOutputValidNum)
{
return 0x00;
}
if(Rs485RotaryInfo.DevSendBuf[DevOutputLoop])
{
return 0x01;
}
else
{
return 0x02;
}
}

View File

@@ -0,0 +1,14 @@
#ifndef _BLV_485_DEV_ROTARY_SWITCHFUN_H_
#define _BLV_485_DEV_ROTARY_SWITCHFUN_H_
#include "stdint.h"
#include "BLV_All_Dev_Init.h"
void BLW_RS485_Rotary_Switch_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_Rotary_Switch_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
#endif

Some files were not shown because too many files have changed in this diff Show More