7481 lines
361 KiB
C
7481 lines
361 KiB
C
/*C*****************************************************************************
|
||
* NAME: .c
|
||
*-------------------------------------------------------------------------------
|
||
* RELEASE:
|
||
* REVISION: 1.0
|
||
*-------------------------------------------------------------------------------
|
||
* PURMDE:
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*_____ I N C L U D E S ______________________________________________________*/
|
||
|
||
#include "config.h" //全局声明
|
||
|
||
/*_____ M A C R O S __________________________________________________________*/
|
||
|
||
volatile u8 MD_ConnectRX1Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行
|
||
volatile u8 MD_ConnectRX2Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行
|
||
volatile u8 MD_ConnectRX3Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行
|
||
volatile u8 MD_ConnectRX4Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行
|
||
|
||
/***********************WIFI*************************/
|
||
const char MD_WifiWSSSID[] = "AT+WAP=TXH04,45535142,1\r\n";
|
||
const char MD_WifiSOCKET[] = "AT+Socket=0,3,192.168.4.1,50000\r\n";
|
||
const char MD_WifiRSSI[] = "AT+CWJAP?\r\n";
|
||
const char MD_WifiRST[] = "AT+RES\r\n";
|
||
const char MD_ATRec[] = "AT+E=OFF\r\n";
|
||
const char MD_WMODE[] = "AT+WMODE=AP\r\n";
|
||
/*******************************L510指令***
|
||
|
||
/*_____ D E F I N I T I O N __________________________________________________*/
|
||
|
||
volatile u8 MD_Connect_TX_Buff[4][600]; // MD_Connect卡发送缓存,DMA方式
|
||
volatile u8 MD_Connect_RX_Buff[4][1000]; // MD_Connect卡接受缓存
|
||
|
||
volatile u8 MD_Connect_TX_Flag = 1; // MD_Connect卡通讯DMA发送允许标志
|
||
/*_____ D E C L A R A T I O N ________________________________________________*/
|
||
LORA_Set_Type LORA_Set[4];
|
||
|
||
unsigned short crc16_ccitt_table[256] =
|
||
{
|
||
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
|
||
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
|
||
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
|
||
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
|
||
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
|
||
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
|
||
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
|
||
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
|
||
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
|
||
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
|
||
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
|
||
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
|
||
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
|
||
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
|
||
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
|
||
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
|
||
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
|
||
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
|
||
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
|
||
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
|
||
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
|
||
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
|
||
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
|
||
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
|
||
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
|
||
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
|
||
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
|
||
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
|
||
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
|
||
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
|
||
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
|
||
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78};
|
||
|
||
unsigned short do_crc(unsigned char *message, unsigned int len)
|
||
{
|
||
unsigned short crc_reg = 0;
|
||
|
||
while (len--)
|
||
crc_reg = (crc_reg >> 8) ^ crc16_ccitt_table[(crc_reg ^ *message++) & 0xff];
|
||
|
||
return crc_reg;
|
||
}
|
||
/****************************************************
|
||
函数名:MD_Connect_IO_Configuration
|
||
功能 :MD_Connect卡通讯部分用到的IO初始化
|
||
参数 :无
|
||
返回值:无
|
||
****************************************************/
|
||
void MD_Connect_IO_Configuration(void)
|
||
{
|
||
GPIO_InitTypeDef GPIO_InitStructure; // 定义GOIP配置结构体
|
||
|
||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
|
||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
|
||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
|
||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
|
||
|
||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
|
||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2);
|
||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3);
|
||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3);
|
||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_UART4);
|
||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_UART4);
|
||
GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5);
|
||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5);
|
||
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_8 | GPIO_Pin_9;
|
||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||
GPIO_Init(GPIOD, &GPIO_InitStructure);
|
||
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
|
||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
||
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10;
|
||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
||
GPIO_Init(GPIOD, &GPIO_InitStructure);
|
||
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
|
||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
||
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12 | GPIO_Pin_11;
|
||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
||
GPIO_Init(GPIOG, &GPIO_InitStructure);
|
||
MD_Connect_LORA_IdleMode1;
|
||
MD_Connect_LORA_IdleMode2;
|
||
MD_Connect_LORA_IdleMode3;
|
||
MD_Connect_LORA_IdleMode4;
|
||
}
|
||
/****************************************************
|
||
函数名:MD_Connect_NVMD_Connect_Configuration
|
||
功能 :MD_Connect卡通讯部分用到的中断向量配置
|
||
参数 :无
|
||
返回值:无
|
||
****************************************************/
|
||
void MD_Connect_NVIC_Configuration(void)
|
||
{
|
||
NVIC_InitTypeDef NVIC_InitStructure; // 定义中断配置结构体
|
||
|
||
// USART2_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream6_IRQn; // USART2_TX_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||
NVIC_Init(&NVIC_InitStructure);
|
||
|
||
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; // USART2
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
|
||
NVIC_Init(&NVIC_InitStructure); //
|
||
|
||
// USART3_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn; // USART2_TX_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||
NVIC_Init(&NVIC_InitStructure);
|
||
|
||
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // USART2
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
|
||
NVIC_Init(&NVIC_InitStructure); //
|
||
|
||
// USART4_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn; // USART2_TX_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||
NVIC_Init(&NVIC_InitStructure);
|
||
|
||
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn; // USART2
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
|
||
NVIC_Init(&NVIC_InitStructure); //
|
||
|
||
// USART5_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream7_IRQn; // USART2_TX_DMA
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||
NVIC_Init(&NVIC_InitStructure);
|
||
|
||
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn; // USART2
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
|
||
NVIC_Init(&NVIC_InitStructure); //
|
||
}
|
||
|
||
/****************************************************
|
||
函数名:MD_Connect_NVMD_Connect_Configuration
|
||
功能 :MD_Connect卡通讯部分用到的串口配置
|
||
参数 :无
|
||
返回值:无
|
||
****************************************************/
|
||
void MD_Connect_USART_Configuration(u8 PortNum, u32 Baud, u16 USART_WordLength, u8 Check)
|
||
{
|
||
USART_InitTypeDef USART_InitStructure;
|
||
|
||
switch (PortNum)
|
||
{
|
||
case 0:
|
||
{
|
||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
||
USART_InitStructure.USART_BaudRate = Baud; // Baud;//?????
|
||
if (Check == Check_EVEN)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Even;
|
||
}
|
||
else if (Check == Check_ODD)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Odd;
|
||
}
|
||
else if (Check == Check_NONE)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength;
|
||
USART_InitStructure.USART_Parity = USART_Parity_No;
|
||
}
|
||
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
||
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
||
USART_Init(USART2, &USART_InitStructure);
|
||
USART_Cmd(USART2, ENABLE);
|
||
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);
|
||
USART_ClearFlag(USART2, USART_FLAG_IDLE);
|
||
|
||
USART_DMACmd(USART2, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE);
|
||
}
|
||
break;
|
||
case 1:
|
||
{
|
||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
|
||
USART_InitStructure.USART_BaudRate = Baud; // Baud;//?????
|
||
if (Check == Check_EVEN)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Even;
|
||
}
|
||
else if (Check == Check_ODD)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Odd;
|
||
}
|
||
else if (Check == Check_NONE)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength;
|
||
USART_InitStructure.USART_Parity = USART_Parity_No;
|
||
}
|
||
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
||
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
||
USART_Init(UART4, &USART_InitStructure);
|
||
USART_Cmd(UART4, ENABLE);
|
||
|
||
USART_ITConfig(UART4, USART_IT_IDLE, ENABLE);
|
||
USART_ClearFlag(UART4, USART_FLAG_IDLE);
|
||
|
||
USART_DMACmd(UART4, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE);
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
|
||
USART_InitStructure.USART_BaudRate = Baud; // Baud;//?????
|
||
if (Check == Check_EVEN)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Even;
|
||
}
|
||
else if (Check == Check_ODD)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Odd;
|
||
}
|
||
else if (Check == Check_NONE)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength;
|
||
USART_InitStructure.USART_Parity = USART_Parity_No;
|
||
}
|
||
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
||
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
||
USART_Init(UART5, &USART_InitStructure);
|
||
USART_Cmd(UART5, ENABLE);
|
||
|
||
USART_ITConfig(UART5, USART_IT_IDLE, ENABLE);
|
||
USART_ClearFlag(UART5, USART_FLAG_IDLE);
|
||
|
||
USART_DMACmd(UART5, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE);
|
||
}
|
||
break;
|
||
case 3:
|
||
{
|
||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
||
USART_InitStructure.USART_BaudRate = Baud; // Baud;//?????
|
||
if (Check == Check_EVEN)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Even;
|
||
}
|
||
else if (Check == Check_ODD)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Odd;
|
||
}
|
||
else if (Check == Check_NONE)
|
||
{
|
||
USART_InitStructure.USART_WordLength = USART_WordLength;
|
||
USART_InitStructure.USART_Parity = USART_Parity_No;
|
||
}
|
||
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
||
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
||
USART_Init(USART3, &USART_InitStructure);
|
||
USART_Cmd(USART3, ENABLE);
|
||
|
||
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);
|
||
USART_ClearFlag(USART3, USART_FLAG_IDLE);
|
||
|
||
USART_DMACmd(USART3, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
/*************************************************
|
||
函数名 :DMA_Configuration()
|
||
功能 :DMA初始化
|
||
传入参数:无
|
||
返回值 :无
|
||
**************************************************/
|
||
void MD_Connect_DMA_Configuration(u8 Port, u8 DateSize)
|
||
{
|
||
DMA_InitTypeDef DMA_InitStructure;
|
||
|
||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
{
|
||
/*******************发送TX1*********************/
|
||
DMA_DeInit(DMA1_Stream6);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||
// DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
if (DateSize == 8)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
}
|
||
else if (DateSize == 16)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
||
}
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART2->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[0];
|
||
|
||
DMA_Init(DMA1_Stream6, &DMA_InitStructure);
|
||
DMA_ITConfig(DMA1_Stream6, DMA_IT_TC, ENABLE);
|
||
// DMA_Cmd(DMA1_Stream3, ENABLE);
|
||
|
||
/*******************RX1*********************/
|
||
DMA_DeInit(DMA1_Stream5);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
||
DMA_InitStructure.DMA_BufferSize = 1000;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART2->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[0];
|
||
|
||
DMA_Init(DMA1_Stream5, &DMA_InitStructure);
|
||
DMA_Cmd(DMA1_Stream5, ENABLE);
|
||
}
|
||
break;
|
||
case 1:
|
||
{
|
||
/*******************发送TX2*********************/
|
||
DMA_DeInit(DMA1_Stream4);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||
// DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
if (DateSize == 8)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
}
|
||
else if (DateSize == 16)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
||
}
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART4->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[1];
|
||
|
||
DMA_Init(DMA1_Stream4, &DMA_InitStructure);
|
||
DMA_ITConfig(DMA1_Stream4, DMA_IT_TC, ENABLE);
|
||
// DMA_Cmd(DMA1_Stream3, ENABLE);
|
||
|
||
/*******************RX2*********************/
|
||
DMA_DeInit(DMA1_Stream2);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
||
DMA_InitStructure.DMA_BufferSize = 1000;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART4->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[1];
|
||
|
||
DMA_Init(DMA1_Stream2, &DMA_InitStructure);
|
||
DMA_Cmd(DMA1_Stream2, ENABLE);
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
/*******************发送TX3*********************/
|
||
DMA_DeInit(DMA1_Stream7);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||
// DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
if (DateSize == 8)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
}
|
||
else if (DateSize == 16)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
||
}
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[2];
|
||
|
||
DMA_Init(DMA1_Stream7, &DMA_InitStructure);
|
||
DMA_ITConfig(DMA1_Stream7, DMA_IT_TC, ENABLE);
|
||
// DMA_Cmd(DMA1_Stream7, ENABLE);
|
||
|
||
/*******************RX3*********************/
|
||
DMA_DeInit(DMA1_Stream0);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
||
DMA_InitStructure.DMA_BufferSize = 1000;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[2];
|
||
|
||
DMA_Init(DMA1_Stream0, &DMA_InitStructure);
|
||
DMA_Cmd(DMA1_Stream0, ENABLE);
|
||
}
|
||
break;
|
||
case 3:
|
||
{
|
||
/*******************发送TX4*********************/
|
||
DMA_DeInit(DMA1_Stream3);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||
// DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
if (DateSize == 8)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
}
|
||
else if (DateSize == 16)
|
||
{
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
||
}
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART3->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[3];
|
||
|
||
DMA_Init(DMA1_Stream3, &DMA_InitStructure);
|
||
DMA_ITConfig(DMA1_Stream3, DMA_IT_TC, ENABLE);
|
||
// DMA_Cmd(DMA1_Stream3, ENABLE);
|
||
|
||
/*******************RX4*********************/
|
||
DMA_DeInit(DMA1_Stream1);
|
||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
||
DMA_InitStructure.DMA_BufferSize = 1000;
|
||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
||
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART3->DR;
|
||
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
|
||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[3];
|
||
|
||
DMA_Init(DMA1_Stream1, &DMA_InitStructure);
|
||
DMA_Cmd(DMA1_Stream1, ENABLE);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMATX_IRQHandler
|
||
//* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMATX1_IRQHandler(void)
|
||
{
|
||
u16 i = 0;
|
||
DMA_ClearFlag(DMA1_Stream6, DMA_IT_TCIF6);
|
||
MD_Connect_TX1_DMAStop(); // 关闭DMA传输
|
||
while (!USART_GetFlagStatus(USART2, USART_FLAG_TC))
|
||
NULL;
|
||
MD_Connect_RS485_Rx1EN;
|
||
DMA_ClearFlag(DMA1_Stream5, DMA_IT_TCIF5);
|
||
MD_Connect_RX1_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置
|
||
MD_Connect_TX_Flag = 1;
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMARX_IRQHandler
|
||
//* PURMDE: DMA传输完成中断,Gas ModBus
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
volatile u8 DTTDYS = 0;
|
||
void MD_Connect_DMARX1_IRQHandler(void)
|
||
{
|
||
u8 i = 0;
|
||
if (USART_GetITStatus(USART2, USART_IT_IDLE) == SET) //?????????
|
||
{
|
||
i = USART2->SR;
|
||
i = USART2->DR;
|
||
USART_ClearFlag(USART2, USART_IT_IDLE);
|
||
TXHData.MBCountRXIDLETimer[0].ON_OFF = 1;
|
||
TXHData.MD_Rec_NummberB[0] = 1000 - DMA1_Stream5->NDTR;
|
||
// MD_Connect_RX1_DMAStop(); //关闭DMA接收
|
||
// DMA_ClearFlag(DMA1_Stream5, DMA_IT_TCIF5);
|
||
// MD_ConnectRX1Task_Flag = 1; //使能Gas接收任务
|
||
// MD_Connect_RX1_DMALenSet(1000);//重置接受长度
|
||
// MD_Connect_RX1_DMAStart(); //打开DMA接收
|
||
}
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMATX_IRQHandler
|
||
//* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMATX2_IRQHandler(void)
|
||
{
|
||
u16 i = 0;
|
||
DMA_ClearFlag(DMA1_Stream4, DMA_IT_TCIF4);
|
||
MD_Connect_TX2_DMAStop(); // 关闭DMA传输
|
||
while (!USART_GetFlagStatus(UART4, USART_FLAG_TC))
|
||
NULL;
|
||
MD_Connect_RS485_Rx2EN;
|
||
DMA_ClearFlag(DMA1_Stream2, DMA_IT_TCIF2);
|
||
MD_Connect_RX2_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置
|
||
MD_Connect_TX_Flag = 1;
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMARX_IRQHandler
|
||
//* PURMDE: DMA传输完成中断,Gas ModBus
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMARX2_IRQHandler(void)
|
||
{
|
||
u8 i = 0;
|
||
if (USART_GetITStatus(UART4, USART_IT_IDLE) == SET) //?????????
|
||
{
|
||
i = UART4->SR;
|
||
i = UART4->DR;
|
||
TXHData.MBCountRXIDLETimer[1].ON_OFF = 1;
|
||
TXHData.MD_Rec_NummberB[1] = 1000 - DMA1_Stream2->NDTR;
|
||
// MD_Connect_RX2_DMAStop(); //关闭DMA接收
|
||
// DMA_ClearFlag(DMA1_Stream2, DMA_IT_TCIF2);
|
||
// MD_ConnectRX2Task_Flag = 1; //使能Gas接收任务
|
||
// MD_Connect_RX2_DMALenSet(1000);//重置接受长度
|
||
// MD_Connect_RX2_DMAStart(); //打开DMA接收
|
||
}
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMATX_IRQHandler
|
||
//* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMATX3_IRQHandler(void)
|
||
{
|
||
u16 i = 0;
|
||
DMA_ClearFlag(DMA1_Stream7, DMA_IT_TCIF7);
|
||
MD_Connect_TX3_DMAStop(); // 关闭DMA传输
|
||
while (!USART_GetFlagStatus(UART5, USART_FLAG_TC))
|
||
NULL;
|
||
MD_Connect_RS485_Rx3EN;
|
||
DMA_ClearFlag(DMA1_Stream0, DMA_IT_TCIF0);
|
||
MD_Connect_RX3_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置
|
||
MD_Connect_TX_Flag = 1;
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMARX_IRQHandler
|
||
//* PURMDE: DMA传输完成中断,Gas ModBus
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMARX3_IRQHandler(void)
|
||
{
|
||
u8 i = 0;
|
||
if (USART_GetITStatus(UART5, USART_IT_IDLE) == SET) //?????????
|
||
{
|
||
i = UART5->SR;
|
||
i = UART5->DR;
|
||
TXHData.MBCountRXIDLETimer[2].ON_OFF = 1;
|
||
TXHData.MD_Rec_NummberB[2] = 1000 - DMA1_Stream0->NDTR;
|
||
// MD_Connect_RX3_DMAStop(); //关闭DMA接收
|
||
// DMA_ClearFlag(DMA1_Stream0, DMA_IT_TCIF0);
|
||
// MD_ConnectRX3Task_Flag = 1; //使能Gas接收任务
|
||
// MD_Connect_RX3_DMALenSet(1000);//重置接受长度
|
||
// MD_Connect_RX3_DMAStart(); //打开DMA接收
|
||
}
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMATX_IRQHandler
|
||
//* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMATX4_IRQHandler(void)
|
||
{
|
||
u16 i = 0;
|
||
DMA_ClearFlag(DMA1_Stream3, DMA_IT_TCIF3);
|
||
MD_Connect_TX4_DMAStop(); // 关闭DMA传输
|
||
while (!USART_GetFlagStatus(USART3, USART_FLAG_TC))
|
||
NULL;
|
||
MD_Connect_RS485_Rx4EN;
|
||
DMA_ClearFlag(DMA1_Stream1, DMA_IT_TCIF1);
|
||
MD_Connect_RX4_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置
|
||
MD_Connect_TX_Flag = 1;
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_DMARX_IRQHandler
|
||
//* PURMDE: DMA传输完成中断,Gas ModBus
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
void MD_Connect_DMARX4_IRQHandler(void)
|
||
{
|
||
u8 i = 0;
|
||
if (USART_GetITStatus(USART3, USART_IT_IDLE) == SET) //?????????
|
||
{
|
||
i = USART3->SR;
|
||
i = USART3->DR;
|
||
TXHData.MBCountRXIDLETimer[3].ON_OFF = 1;
|
||
TXHData.MD_Rec_NummberB[3] = 1000 - DMA1_Stream1->NDTR;
|
||
// MD_Connect_RX4_DMAStop(); //关闭DMA接收
|
||
// DMA_ClearFlag(DMA1_Stream1, DMA_IT_TCIF1);
|
||
// MD_ConnectRX4Task_Flag = 1; //使能Gas接收任务
|
||
// MD_Connect_RX4_DMALenSet(1000);//重置接受长度
|
||
// MD_Connect_RX4_DMAStart(); //打开DMA接收
|
||
}
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: LTMD_TXDataCheck
|
||
//* PURMDE: LTMD通信校验函数
|
||
//* PARAMS: pData需要检验的数组地址,len数据长度
|
||
//* return: 无
|
||
//******************************************************************************
|
||
u8 MD_Connect_TXDataCheck(volatile u8 *pData, u16 len)
|
||
{
|
||
u8 result;
|
||
if (len == 0)
|
||
len = 16;
|
||
result = *pData++;
|
||
do
|
||
{
|
||
result ^= *pData++;
|
||
} while (--len);
|
||
|
||
return result & 0x7f;
|
||
}
|
||
|
||
u8 InteiHEXCheck(volatile u8 *pData, u16 len)
|
||
{
|
||
u8 i;
|
||
u8 checksum = 0;
|
||
|
||
for (i = 0; i < len; i++)
|
||
{
|
||
checksum += *pData++;
|
||
}
|
||
return (0 - checksum);
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_u64ToBCD
|
||
//* PURMDE: 用于u64类型转成BCD码类型
|
||
//* PARAMS: pData要转换的数据,Len长度
|
||
//* return: BCD类型
|
||
//******************************************************************************
|
||
u64 MD_Connect_u64ToBCD(u64 Dat)
|
||
{
|
||
u8 i = 0;
|
||
u64 T64 = 0, Temp = 0;
|
||
u8 *pData;
|
||
pData = (u8 *)&T64;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
Temp = Dat % 100;
|
||
*(pData + i) = ((Temp / 10) << 4) + ((Temp % 10) & 0x0F);
|
||
Dat /= 100;
|
||
}
|
||
|
||
return T64;
|
||
}
|
||
/**************TCP/IP校验和,IC卡通讯***************/
|
||
u16 CheckSum(u8 *buf, u16 nword)
|
||
{
|
||
unsigned long long sum;
|
||
|
||
for (sum = 0; nword > 0; nword--)
|
||
sum += *buf++;
|
||
|
||
sum = (sum >> 16) + (sum & 0xffff);
|
||
sum += (sum >> 16);
|
||
|
||
return ~sum;
|
||
}
|
||
u8 CheckSum8(u8 *buf, u8 len) // BCC校验函数
|
||
{
|
||
u8 i;
|
||
u8 checksum = 0;
|
||
|
||
for (i = 0; i < len; i++)
|
||
{
|
||
checksum += *buf++;
|
||
}
|
||
return checksum;
|
||
}
|
||
u16 TrueCharBuffSize(char *Buff)
|
||
{
|
||
u16 i = 0;
|
||
while (*(Buff++))
|
||
i++;
|
||
return i;
|
||
}
|
||
/*************字符串转浮点数******************/
|
||
float StrToFloat(u8 *str, u8 len)
|
||
{
|
||
u8 i = 0;
|
||
int Temp = 0;
|
||
float TempF = 0;
|
||
u8 *Pi = (u8 *)&Temp;
|
||
u8 *Pf = (u8 *)&TempF;
|
||
for (i = 0; i < len; i++)
|
||
{
|
||
if (*(str + i) >= 0x30 && *(str + i) < 0x40)
|
||
{
|
||
Temp = Temp << 4;
|
||
Temp |= *(str + i) - 0x30;
|
||
}
|
||
else if (*(str + i) > 0x40 && *(str + i) < 0x47)
|
||
{
|
||
Temp = Temp << 4;
|
||
Temp |= *(str + i) - 0x37;
|
||
}
|
||
else
|
||
return -1;
|
||
}
|
||
for (i = 0; i < len / 2; i++)
|
||
*(Pf + i) = *(Pi + i);
|
||
return TempF;
|
||
}
|
||
/*************字符串转整数******************/
|
||
int StrToInt(u8 *str, u8 len)
|
||
{
|
||
u8 i = 0;
|
||
int Temp = 0;
|
||
|
||
for (i = 0; i < len; i++)
|
||
{
|
||
if (*(str + i) >= 0x30 && *(str + i) < 0x40)
|
||
{
|
||
Temp = Temp << 4;
|
||
Temp |= *(str + i) - 0x30;
|
||
}
|
||
else if (*(str + i) > 0x40 && *(str + i) < 0x47)
|
||
{
|
||
Temp = Temp << 4;
|
||
Temp |= *(str + i) - 0x37;
|
||
}
|
||
else
|
||
return -1;
|
||
}
|
||
|
||
return Temp;
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: MD_Connect_BCDTou64
|
||
//* PURMDE: 用于BCD类型转成u64码类型
|
||
//* PARAMS: pData要转换的数据,Len长度
|
||
//* return: u64类型
|
||
//******************************************************************************
|
||
u64 MD_Connect_BCDTou64(u64 Dat)
|
||
{
|
||
u8 i = 0;
|
||
u64 T64 = 0;
|
||
u8 Temp;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
Temp = Dat >> (8 * i);
|
||
T64 += ((Temp >> 4) * 10 + (Temp & 0x0f)) * pow(100, i);
|
||
}
|
||
return T64;
|
||
}
|
||
u8 BCC_CheckSum(u8 *buf, u8 len) // BCC校验函数
|
||
{
|
||
u8 i;
|
||
u8 checksum = 0;
|
||
|
||
for (i = 0; i < len; i++)
|
||
{
|
||
checksum ^= *buf++;
|
||
}
|
||
|
||
return checksum;
|
||
}
|
||
// 加密函数
|
||
void Bluesky_Encrypt(unsigned char *data, unsigned int len, unsigned int key)
|
||
{
|
||
unsigned char bytes[4];
|
||
int i = 0, j = 0;
|
||
// 提取随机数的每个字节
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
bytes[i] = (key >> (i * 8)) & 0xFF;
|
||
}
|
||
|
||
// 遍历数组中的每个字节
|
||
for (i = 0; i < len; i++)
|
||
{
|
||
// 判断索引位置是否满足条件
|
||
int order = (i / 2) == 0 ? 1 : -1;
|
||
|
||
// 根据条件选择正序或倒序加密
|
||
for (j = 0; j < 4; j++)
|
||
{
|
||
data[i] ^= bytes[(order == 1) ? j : (3 - j)];
|
||
}
|
||
}
|
||
}
|
||
|
||
// 解密函数
|
||
void Bluesky_Decrypt(unsigned char *data, unsigned int len, unsigned int key)
|
||
{
|
||
// 解密过程与加密过程相同
|
||
Bluesky_Encrypt(data, len, key);
|
||
}
|
||
void MD_Connect_Init(void)
|
||
{
|
||
u8 i = 0, j = 0, Port = 0;
|
||
MD_Connect_IO_Configuration();
|
||
TXHData.MD_Port_Num_Top = 4;
|
||
for (Port = 0; Port < TXHData.MD_Port_Num_Top; Port++)
|
||
{
|
||
MD_Connect_DMA_Configuration(Port, 8);
|
||
MD_Port_Init(Port);
|
||
}
|
||
MD_Connect_NVIC_Configuration();
|
||
TXHData.MD_LORA_SlaveTimer.Init = 0; // 清除初始化标志
|
||
TXHData.MD_LORA_SlaveTimer.Flag = 0; // 清除到时标志
|
||
TXHData.MD_LORA_SlaveTimer.ON_OFF = 0; // 打开
|
||
TXHData.MD_LORA_SlaveTimer.Cycle = 1; // 设置为循环模式,发送时启动
|
||
TXHData.MD_LORA_SlaveTimer.TimerCountMax = 1000; // 周期1000(1s)
|
||
}
|
||
void MD_Port_LORASet(u8 Port, u8 Mode)
|
||
{
|
||
u32 MCU_ID = *(u32 *)(0x1fff7a18);
|
||
|
||
if (Mode == LORA_Master)
|
||
{
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
MD_Connect_LORA_SetMode1;
|
||
break;
|
||
case 1:
|
||
MD_Connect_LORA_SetMode2;
|
||
break;
|
||
case 2:
|
||
MD_Connect_LORA_SetMode3;
|
||
break;
|
||
case 3:
|
||
MD_Connect_LORA_SetMode4;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
MD_Connect_LORA_IdleMode1;
|
||
break;
|
||
case 1:
|
||
MD_Connect_LORA_IdleMode2;
|
||
break;
|
||
case 2:
|
||
MD_Connect_LORA_IdleMode3;
|
||
break;
|
||
case 3:
|
||
MD_Connect_LORA_IdleMode4;
|
||
break;
|
||
}
|
||
}
|
||
delay_ms(100);
|
||
// 设置成LORA配置参数
|
||
MD_Connect_USART_Configuration(Port, 9600, USART_WordLength_8b, Check_NONE);
|
||
// 暂停油机通讯
|
||
TXHData.MBCountTimer[Port].Flag = 0;
|
||
TXHData.MBCountTimer[Port].TimerCount = 0;
|
||
// 计算超时
|
||
TXHData.MD_LORA_SlaveTimer.TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime;
|
||
TXHData.MD_LORA_SlaveTimer.ON_OFF = 1;
|
||
LORA_Set[Port].Communication = 0x77;
|
||
switch (TXHData.MD_Port_Data[Port].PortData.POSType)
|
||
{
|
||
case PosBlueSky:
|
||
LORA_Set[Port].Communication = 0x77;
|
||
break;
|
||
case PosLY:
|
||
LORA_Set[Port].Communication = 0x97;
|
||
break;
|
||
case PosJP:
|
||
LORA_Set[Port].Communication = 0x97;
|
||
break;
|
||
case PosDart:
|
||
LORA_Set[Port].Communication = 0x6F;
|
||
break;
|
||
case PosYWY:
|
||
LORA_Set[Port].Communication = 0x67;
|
||
break;
|
||
case PosYGao:
|
||
LORA_Set[Port].Communication = 0x77;
|
||
break;
|
||
case PosSSLan:
|
||
LORA_Set[Port].Communication = 0x97;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
LORA_Set[Port].Communication = 0xD7;
|
||
break;
|
||
}
|
||
MD_Connect_TX_Buff[Port][0] = 0xC0;
|
||
MD_Connect_TX_Buff[Port][1] = 0x00;
|
||
MD_Connect_TX_Buff[Port][2] = 0x08;
|
||
MD_Connect_TX_Buff[Port][3] = (MCU_ID >> 24) & 0xFF;
|
||
MD_Connect_TX_Buff[Port][4] = (MCU_ID & 0xF0) + Port * 3;
|
||
MD_Connect_TX_Buff[Port][5] = LORA_Set[Port].Communication;
|
||
MD_Connect_TX_Buff[Port][6] = 0x20;
|
||
MD_Connect_TX_Buff[Port][7] = (MCU_ID & 0x0f) + Port * 7;
|
||
MD_Connect_TX_Buff[Port][8] = 0x80;
|
||
MD_Connect_TX_Buff[Port][9] = 'L';
|
||
MD_Connect_TX_Buff[Port][10] = 'T';
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
{
|
||
MD_Connect_RS485_Tx1EN;
|
||
MD_Connect_TX1_DMALenSet(11);
|
||
MD_Connect_TX1_DMAStart();
|
||
}
|
||
break;
|
||
case 1:
|
||
{
|
||
MD_Connect_RS485_Tx2EN;
|
||
MD_Connect_TX2_DMALenSet(11);
|
||
MD_Connect_TX2_DMAStart();
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
MD_Connect_RS485_Tx3EN;
|
||
MD_Connect_TX3_DMALenSet(11);
|
||
MD_Connect_TX3_DMAStart();
|
||
}
|
||
break;
|
||
case 3:
|
||
{
|
||
MD_Connect_RS485_Tx4EN;
|
||
MD_Connect_TX4_DMALenSet(11);
|
||
MD_Connect_TX4_DMAStart();
|
||
}
|
||
break;
|
||
}
|
||
if (TXHData.UDisk_Flag)
|
||
Log_Task(&MD_Connect_TX_Buff[Port][0], 11, Port, Info_Issue);
|
||
delay_ms(500);
|
||
TXHData.MD_LORA_Slave_Flag = 1;
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
MD_Connect_LORA_IdleMode1;
|
||
break;
|
||
case 1:
|
||
MD_Connect_LORA_IdleMode2;
|
||
break;
|
||
case 2:
|
||
MD_Connect_LORA_IdleMode3;
|
||
break;
|
||
case 3:
|
||
MD_Connect_LORA_IdleMode4;
|
||
break;
|
||
}
|
||
BEEP_OFF;
|
||
}
|
||
|
||
void MD_Port_Init(u8 Port)
|
||
{
|
||
u8 i = 0, j = 0, DeviceNum = 0;
|
||
u8 block_count = 0, start = 0, length = 1;
|
||
|
||
// TXHData.MD_Port_Data[0].PortData.POSType = PosSSLan;
|
||
|
||
if (TXHData.MD_Port_Data[Port].PortData.MDConnectType == MD_LORA)
|
||
{
|
||
MD_Port_LORASet(Port, LORA_Master);
|
||
}
|
||
|
||
TXHData.MDConnectState[Port].Flag.WorkMode = 1;
|
||
TXHData.MBCountRXIDLETimer[Port].Init = 0; // 清除初始化标志
|
||
TXHData.MBCountRXIDLETimer[Port].Flag = 0; // 清除到时标志
|
||
TXHData.MBCountRXIDLETimer[Port].ON_OFF = 0; // 打开
|
||
TXHData.MBCountRXIDLETimer[Port].Cycle = 0; // 设置为循环模式,发送时启动
|
||
TXHData.MBCountRXIDLETimer[Port].TimerCountMax = 5; // 周期5(0.005)
|
||
|
||
TXHData.MBCountTimer[Port].Init = 0; // 清除初始化标志
|
||
TXHData.MBCountTimer[Port].Flag = 0; // 清除到时标志
|
||
TXHData.MBCountTimer[Port].ON_OFF = 1; // 打开
|
||
TXHData.MBCountTimer[Port].Cycle = 1; // 设置为循环模式,发送时启动
|
||
TXHData.MBCountTimer[Port].TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 10; // 周期
|
||
MD_Connect_DMA_Configuration(Port, 8);
|
||
MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_8b, TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
switch (TXHData.MD_Port_Data[Port].PortData.POSType)
|
||
{
|
||
case PosBlueSky:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x05;
|
||
break;
|
||
case PosLY:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x11;
|
||
break;
|
||
case PosJP:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x07;
|
||
break;
|
||
case PosDart:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x04;
|
||
break;
|
||
case PosYWY:
|
||
TXHData.MBCountTimer[Port].TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 100;
|
||
TXHData.MBCountRXIDLETimer[Port].TimerCountMax = 50; // 周期5(0.005)
|
||
break;
|
||
case PosRFID:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x03;
|
||
break;
|
||
case PosYGao:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x04;
|
||
break;
|
||
case PosHongYang:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x06;
|
||
MD_Connect_DMA_Configuration(Port, 16);
|
||
MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_9b, 0);
|
||
break;
|
||
case PosLanFeng:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x03;
|
||
break;
|
||
case PosSSLan:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x011;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x03;
|
||
break;
|
||
case PosPLC:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x00;
|
||
MD_Connect_USART_Configuration(Port, 9600, USART_WordLength_8b, TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
break;
|
||
case PosPrice1_4:
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0x02;
|
||
TXHData.MBCountTimer[Port].TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 100;
|
||
break;
|
||
}
|
||
if (TXHData.POS_MonitorModel == 1) // 监管模式
|
||
{
|
||
TXHData.MD_Port_Info[Port].Handshake_Top = 0;
|
||
TXHData.MBCountRXIDLETimer[Port].TimerCountMax = 1; // 周期5(0.005)
|
||
MD_Connect_RS485_Rx1EN;
|
||
MD_Connect_RS485_Rx2EN;
|
||
MD_Connect_RS485_Rx3EN;
|
||
MD_Connect_RS485_Rx4EN;
|
||
}
|
||
/*****************************************计算多枪相关设备***************************************************/
|
||
TXHData.MD_Port_Info[Port].GunInfo[0].FatherNum = 0; // 记录每个设备的付设备号
|
||
TXHData.MD_Port_Info[Port].GunInfo[0].SonNum = 0; // 记录每个设备在付设备中的位置
|
||
for (DeviceNum = 1; DeviceNum < TXHData.MD_Port_Data[Port].PortData.DeviceNumber; DeviceNum++)
|
||
{
|
||
if (TXHData.MD_Port_Data[Port].GunData[DeviceNum].GunAddr == TXHData.MD_Port_Data[Port].GunData[DeviceNum - 1].GunAddr) // 和上一个枪地址相同,属于同一个泵
|
||
{
|
||
length++; // 子设备数增加
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonStart = start;
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].Address = TXHData.MD_Port_Data[Port].GunData[DeviceNum - 1].GunAddr;
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonNumber = length;
|
||
block_count++; // 泵号增加
|
||
start = DeviceNum;
|
||
length = 1;
|
||
}
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].FatherNum = block_count; // 记录每个设备的付设备号
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].SonNum = length - 1; // 记录每个设备在付设备中的位置
|
||
}
|
||
TXHData.MD_Port_Info[Port].FatherDeviceTop = block_count + 1;
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonStart = start;
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].Address = TXHData.MD_Port_Data[Port].GunData[DeviceNum - 1].GunAddr;
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonNumber = length;
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.Init = 0; // 清除初始化标志
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.Flag = 0; // 清除到时标志
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.ON_OFF = 0; // 打开
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.Cycle = 0; // 设置为循环模式,发送时启动
|
||
TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.TimerCountMax = 1000;
|
||
|
||
for (DeviceNum = 0; DeviceNum < TXHData.MD_Port_Data[Port].PortData.DeviceNumber; DeviceNum++)
|
||
{
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.Init = 0; // 清除初始化标志
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.Flag = 0; // 清除到时标志
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.ON_OFF = 0; // 打开
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.Cycle = 0; // 设置为循环模式,发送时启动
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 10 * TXHData.MD_Port_Data[Port].PortData.DeviceNumber * 2; // 周期1000(1S)
|
||
TXHData.MD_Port_Data[Port].GunData[DeviceNum].GunState.Flag.Online = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].Handshake = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].GunVersion.VersionFindFlag = 0;
|
||
switch (TXHData.MD_Port_Data[Port].PortData.POSType)
|
||
{
|
||
case PosBlueSky:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = C_MDConnectASKControlPower;
|
||
break;
|
||
case PosLY:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
break;
|
||
case PosJP:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
break;
|
||
case PosYWY:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = YWY_MDConnectCmdReadData;
|
||
break;
|
||
case PosRFID:
|
||
{
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = RFID_MDConnectCmdReadVersion;
|
||
for (i = 0; i < TXHData.MD_Port_Num_Top; i++)
|
||
{
|
||
for (j = 0; j < TXHData.MD_Port_Data[i].PortData.DeviceNumber; j++)
|
||
{
|
||
if (TXHData.MD_Port_Data[i].GunData[j].GunNummber == TXHData.MD_Port_Data[Port].GunData[DeviceNum].RFIDBinding)
|
||
{
|
||
TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.Number = TXHData.MD_Port_Data[Port].GunData[DeviceNum].GunNummber;
|
||
TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.Port = Port;
|
||
TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.location = DeviceNum;
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].AssociatedDevices.Number = TXHData.MD_Port_Data[i].GunData[j].GunNummber;
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].AssociatedDevices.Port = i;
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].AssociatedDevices.location = j;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case PosYGao:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = YG_MDConnectControlMode;
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].Price = TXHData.PrintLastRecord[Port * 16 + DeviceNum].Price;
|
||
break;
|
||
case PosHongYang:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = HY_MDConnectASKControlPower;
|
||
break;
|
||
case PosLanFeng:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LF_MDConnectASKControlPower;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LTP_GunCMDReadStateAndData;
|
||
break;
|
||
case PosPLC:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = PLC_MDConnectCmdReadData;
|
||
break;
|
||
case PosPrice1_4:
|
||
TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = Price_MDConnectCmdReadParameter;
|
||
break;
|
||
}
|
||
}
|
||
/***************************************************多枪协议**************************************************************/
|
||
if (TXHData.MD_Port_Data[Port].PortData.POSType == PosDart || TXHData.MD_Port_Data[Port].PortData.POSType == PosSSLan || TXHData.MD_Port_Data[Port].PortData.POSType == PosBlueSkyPlus)
|
||
{
|
||
for (DeviceNum = 0; DeviceNum < TXHData.MD_Port_Info[Port].FatherDeviceTop; DeviceNum++)
|
||
{
|
||
switch (TXHData.MD_Port_Data[Port].PortData.POSType)
|
||
{
|
||
case PosDart:
|
||
TXHData.MD_Port_Info[Port].FatherDevice[DeviceNum].MB_CMD_Next = DART_MDConnectCmdPoll;
|
||
break;
|
||
case PosSSLan:
|
||
TXHData.MD_Port_Info[Port].FatherDevice[DeviceNum].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
TXHData.MD_Port_Info[Port].FatherDevice[DeviceNum].MB_CMD_Next = LTP_DriverCMDReadVerAndMac;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
TXHData.MD_Gun_Num_Top = 0;
|
||
}
|
||
// F*****************************************************************************
|
||
//* NAME: KeyBoardTask
|
||
//* PURMDE: KeyBoard键盘通讯处理任务
|
||
//* PARAMS: 无
|
||
//* return: 无
|
||
//******************************************************************************
|
||
volatile u16 HY_SendBuff[25];
|
||
volatile u8 zhtningzhuangtai = 0;
|
||
void MD_ConnectTXTask(u8 Port, u8 GunNum, u8 MD_TX_CMD)
|
||
{
|
||
volatile u16 i = 0, j = 0, k = 0, l = 0;
|
||
volatile u8 PosTypeTemp = 0, GunAddr = 0, FatherNum = 0;
|
||
volatile u64 TempBCD = 0, Tempu64 = 0;
|
||
volatile u16 MD_ConnectTX_Len = 0; // 长度
|
||
u8 Encrypt_Flag1 = 0;
|
||
u8 Encrypt_Flag2 = 0;
|
||
volatile u16 MD_Port_Num = 0, DeviceNumber = 0;
|
||
u8 MD_ConnectRX_Check = 0; // 校验变量
|
||
u8 Data_201[7] = "i20100";
|
||
u8 Data_20E[7] = "i20E00";
|
||
|
||
u16 CRCTemp = 0;
|
||
MD_Connect_TX_Flag = 0;
|
||
{
|
||
PosTypeTemp = TXHData.MD_Port_Data[Port].PortData.POSType;
|
||
if (TXHData.MBCountCutNum[Port][GunNum] > 5)
|
||
{
|
||
TXHData.MBCountCutNum[Port][GunNum] = 6;
|
||
if (TXHData.MD_Port_Data[Port].PortData.POSType == PosDart || TXHData.MD_Port_Data[Port].PortData.POSType == PosSSLan || TXHData.MD_Port_Data[Port].PortData.POSType == PosBlueSkyPlus) // 多枪
|
||
{
|
||
TXHData.MD_Port_Info[Port].FatherDevice[GunNum].Handshake = 0;
|
||
for (i = 0; i < TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonNumber; i++)
|
||
{
|
||
TXHData.MD_Port_Data[Port].GunData[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].GunState.Flag.Online = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].ROM_UpData_State.Flag.BaudRateSync_Flag = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].ROM_UpData_State.Flag.Update_Flag = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].Handshake = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].MB_CMD_Next = LTP_GunCMDReadStateAndData;
|
||
}
|
||
switch (TXHData.MD_Port_Data[Port].PortData.POSType)
|
||
{
|
||
case PosDart:
|
||
TXHData.MD_Port_Info[Port].FatherDevice[GunNum].MB_CMD_Next = DART_MDConnectCmdPoll;
|
||
break;
|
||
case PosSSLan:
|
||
TXHData.MD_Port_Info[Port].FatherDevice[GunNum].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
TXHData.MD_Port_Info[Port].FatherDevice[GunNum].MB_CMD_Next = LTP_DriverCMDReadVerAndMac;
|
||
break;
|
||
}
|
||
}
|
||
else // 单枪
|
||
{
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0;
|
||
TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.Online = 0;
|
||
// MD_Connect_USART_Configuration(Port,TXHData.MD_Port_Data[Port].PortData.BaudRate,TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.Update_Flag = 0;
|
||
switch (TXHData.MD_Port_Data[Port].PortData.POSType)
|
||
{
|
||
case PosBlueSky:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = C_MDConnectASKControlPower;
|
||
break;
|
||
case PosLY:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
break;
|
||
case PosJP:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
break;
|
||
case PosYWY:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = YWY_MDConnectCmdReadData;
|
||
break;
|
||
case PosRFID:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = RFID_MDConnectCmdReadVersion;
|
||
break;
|
||
case PosYGao:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = YG_MDConnectControlMode;
|
||
break;
|
||
case PosHongYang:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = HY_MDConnectASKControlPower;
|
||
break;
|
||
case PosLanFeng:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = LF_MDConnectASKControlPower;
|
||
break;
|
||
case PosPLC:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = PLC_MDConnectCmdReadData;
|
||
TXHData.CNGPLCState.Flag.Online = 0;
|
||
break;
|
||
case PosPrice1_4:
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = Price_MDConnectCmdReadParameter;
|
||
TXHData.MD_Port_Info[Port].PriceTagData.State.State = 0;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (TXHData.MDConnectState[Port].Flag.WorkMode == 1) // 数据模式
|
||
{
|
||
if (TXHData.POS_MonitorModel != 1 && PosTypeTemp) // 非监管模式有线模式
|
||
{
|
||
switch (PosTypeTemp)
|
||
{
|
||
case PosBlueSky:
|
||
{
|
||
GunAddr = MD_Connect_u64ToBCD(TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr);
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag == 1)
|
||
{
|
||
MD_Connect_USART_Configuration(Port, BaudRateSync, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
}
|
||
else
|
||
{
|
||
MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
}
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case C_MDConnectCmdReadState: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadState;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadFuelState: // 读数据
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadFuelState;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePrsetSale: // 预置金额
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
MD_Connect_TX_Buff[Port][2] = 0xA5;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrsetSale;
|
||
MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000)
|
||
Tempu64 = 0x90000000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
MD_Connect_TX_Buff[Port][2] = 0xA6;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][7] = C_MDConnectCmdWritePrsetSale;
|
||
MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePrsetVolume: // 预置油量
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x900000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
MD_Connect_TX_Buff[Port][2] = 0xA5;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrsetVolume;
|
||
MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x90000000)
|
||
Tempu64 = 0x90000000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
MD_Connect_TX_Buff[Port][2] = 0xA6;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][7] = C_MDConnectCmdWritePrsetVolume;
|
||
MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdStart: // 启动
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdStart;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdStop: // 停机
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdStop;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectPauseFueling: // 暂停
|
||
{
|
||
zhtningzhuangtai = 1;
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectPauseFueling;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectResumeFueling: // 继续
|
||
{
|
||
zhtningzhuangtai = 2;
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectResumeFueling;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadPrice;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
MD_Connect_TX_Buff[Port][2] = 0xA4;
|
||
for (i = 0; i < 2; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((1 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][5] = C_MDConnectCmdWritePrice;
|
||
MD_Connect_TX_Buff[Port][6] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
else
|
||
{
|
||
MD_Connect_TX_Buff[Port][2] = 0xA5;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrice;
|
||
MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePulseCoefficient: // xie
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头MD_Connect_u64ToBCD(TXHData.PulseCoefficient[GunNum - 1]
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA6;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PulseCoefficient) >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][7] = C_MDConnectCmdWritePulseCoefficient;
|
||
MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadTotal;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWriteTotal: // xie总累
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
MD_Connect_TX_Buff[Port][2] = 0xAc;
|
||
for (i = 0; i < 5; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalLit) >> ((4 - i) * 8)) & 0xff;
|
||
}
|
||
for (i = 0; i < 5; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][8 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalMoney) >> ((4 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][13] = C_MDConnectCmdWriteTotal;
|
||
MD_Connect_TX_Buff[Port][14] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 13); // 校验
|
||
MD_ConnectTX_Len = 15;
|
||
}
|
||
else
|
||
{
|
||
MD_Connect_TX_Buff[Port][2] = 0xAe;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalLit) >> ((5 - i) * 8)) & 0xff;
|
||
}
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][9 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalMoney) >> ((5 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][15] = C_MDConnectCmdWriteTotal;
|
||
MD_Connect_TX_Buff[Port][16] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 15); // 校验
|
||
MD_ConnectTX_Len = 17;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectASKControlPower: // 要控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectASKControlPower;
|
||
// MD_Connect_TX_Buff[Port][3] = C_MDConnectReturnControlPower;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectReturnControlPower: // 还控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectReturnControlPower;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadVersion: // 读版本号
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadVersion;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x01;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdSetBaudRate: // 同步波特率
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA5;
|
||
MD_Connect_TX_Buff[Port][3] = (115200 >> 16) & 0xff;
|
||
MD_Connect_TX_Buff[Port][4] = (115200 >> 8) & 0xff;
|
||
MD_Connect_TX_Buff[Port][5] = 115200 & 0xff;
|
||
MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdSetBaudRate;
|
||
MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdSendFrame: // 传送帧
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0xff;
|
||
for (i = 0; i < 10; i++)
|
||
MD_Connect_TX_Buff[Port][3 + i] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData_Version[i];
|
||
MD_Connect_TX_Buff[Port][13] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop >> 8;
|
||
MD_Connect_TX_Buff[Port][14] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop;
|
||
MD_Connect_TX_Buff[Port][15] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow >> 8;
|
||
MD_Connect_TX_Buff[Port][16] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow;
|
||
AT45DBItemRead(CA_DeviceFrame, TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow + Port * 1024);
|
||
for (i = 0; i < 512; i++)
|
||
MD_Connect_TX_Buff[Port][17 + i] = TXHData.Frame[i];
|
||
MD_Connect_TX_Buff[Port][529] = C_MDConnectCmdSendFrame;
|
||
MD_Connect_TX_Buff[Port][530] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 529);
|
||
MD_ConnectTX_Len = 531;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
{
|
||
FatherNum = GunNum; // 这离GunNum表示泵号
|
||
GunAddr = MD_Connect_u64ToBCD(TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Address); // 泵地址
|
||
if (TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][FatherNum]++;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag == 1)
|
||
// {
|
||
// MD_Connect_USART_Configuration(Port,BaudRateSync,USART_WordLength_9b,TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
// }
|
||
// else
|
||
// {
|
||
// MD_Connect_USART_Configuration(Port,TXHData.MD_Port_Data[Port].PortData.BaudRate,USART_WordLength_9b,TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
// }
|
||
TXHData.RNGData = RNG_GetRandomNumber();
|
||
MD_Connect_TX_Buff[Port][0] = 0xFB; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][4] = TXHData.CTIME.Year;
|
||
MD_Connect_TX_Buff[Port][5] = TXHData.CTIME.Month;
|
||
MD_Connect_TX_Buff[Port][6] = TXHData.CTIME.Day;
|
||
MD_Connect_TX_Buff[Port][7] = TXHData.CTIME.Hour;
|
||
MD_Connect_TX_Buff[Port][8] = TXHData.CTIME.Min;
|
||
MD_Connect_TX_Buff[Port][9] = TXHData.CTIME.Sec;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][10 + i] = TXHData.RNGData >> (8 * (3 - i));
|
||
MD_Connect_TX_Buff[Port][14] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNumber;
|
||
MD_ConnectTX_Len = 15;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case LTP_DriverCMDReadPassword: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Password_Lever;
|
||
MD_ConnectTX_Len++;
|
||
}
|
||
break;
|
||
case LTP_DriverCMDWritePassword: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Password_Lever;
|
||
MD_ConnectTX_Len++;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Password >> (8 * (3 - i));
|
||
MD_ConnectTX_Len += 4;
|
||
}
|
||
break;
|
||
case LTP_DriverCMDReadVerAndMac: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD;
|
||
MD_ConnectTX_Len++;
|
||
}
|
||
break;
|
||
case LTP_DriverCMDLock: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockType;
|
||
MD_ConnectTX_Len++;
|
||
switch (TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockType)
|
||
{
|
||
case 0:
|
||
{
|
||
}
|
||
break;
|
||
case 1:
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockTime[i];
|
||
MD_ConnectTX_Len += 3;
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockValue[i];
|
||
MD_ConnectTX_Len += 6;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case LTP_DriverCMDUnlock: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD;
|
||
MD_ConnectTX_Len++;
|
||
}
|
||
break;
|
||
case LTP_DriverCMDSendFrame: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD;
|
||
MD_ConnectTX_Len++;
|
||
for (i = 0; i < 10; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData_Version[i];
|
||
MD_ConnectTX_Len += 10;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop >> 8;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].FrameNow >> 8;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].FrameNow;
|
||
AT45DBItemRead(CA_DeviceFrame, TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].FrameNow + Port * 1024);
|
||
for (i = 0; i < 512; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.Frame[i];
|
||
MD_ConnectTX_Len += 512;
|
||
|
||
TXHData.MBCountTimer[Port].TimerCountMax = 120; // 周期调整ms
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = LTP_GunCMD;
|
||
for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNumber; DeviceNumber++)
|
||
{
|
||
GunNum = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + DeviceNumber; //
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = DeviceNumber + 1;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next;
|
||
switch (TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next)
|
||
{
|
||
case LTP_GunCMDReadState: //
|
||
case LTP_GunCMDReadStateAndData: //
|
||
case LTP_GunCMDReadTotal: //
|
||
case LTP_GunCMDStop: //
|
||
case LTP_GunCMDReadEvent: //
|
||
case LTP_GunCMDReadError: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0;
|
||
}
|
||
break;
|
||
case LTP_GunCMDSuspend: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0;
|
||
}
|
||
break;
|
||
case LTP_GunCMDContinue: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0;
|
||
}
|
||
break;
|
||
case LTP_GunCMDWritePrset: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 5;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (8 * (3 - i));
|
||
MD_ConnectTX_Len += 4;
|
||
}
|
||
break;
|
||
case LTP_GunCMDAuthorize: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 9;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (8 * (3 - i));
|
||
MD_ConnectTX_Len += 4;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0;
|
||
for (i = 0; i < 3; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (8 * (2 - i));
|
||
MD_ConnectTX_Len += 3;
|
||
}
|
||
break;
|
||
case LTP_GunCMDReadParameter: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0;
|
||
}
|
||
break;
|
||
case LTP_GunCMDWriteParameter: //
|
||
{
|
||
switch (TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber)
|
||
{
|
||
case 0x01: // 单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 4;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber;
|
||
for (i = 0; i < 3; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (8 * (2 - i));
|
||
MD_ConnectTX_Len += 3;
|
||
}
|
||
break;
|
||
case 0x02: // 脉当
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 4;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber;
|
||
for (i = 0; i < 3; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PulseCoefficient >> (8 * (2 - i));
|
||
MD_ConnectTX_Len += 3;
|
||
}
|
||
break;
|
||
case 0x03: // 提前关阀量
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 3;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber;
|
||
for (i = 0; i < 2; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ValveValue >> (8 * (1 - i));
|
||
MD_ConnectTX_Len += 2;
|
||
}
|
||
break;
|
||
case 0x04: // 最小显示值
|
||
{
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 3;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber;
|
||
for (i = 0; i < 2; i++)
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].MinDisplay >> (8 * (1 - i));
|
||
MD_ConnectTX_Len += 2;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
if (DeviceNumber == 0)
|
||
{
|
||
if (CoreDebug->DHCSR & 1)
|
||
{ // check C_DEBUGEN == 1 -> Debugger Connected
|
||
__breakpoint(0); // halt program execution here
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
MD_Connect_TX_Buff[Port][2] = (MD_ConnectTX_Len >> 8) & 0xff;
|
||
MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len & 0xff;
|
||
|
||
Bluesky_Encrypt(&MD_Connect_TX_Buff[Port][14], MD_ConnectTX_Len - 14, TXHData.RNGData);
|
||
|
||
CRCTemp = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len); // 校验
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = (CRCTemp >> 8) & 0xff;
|
||
MD_ConnectTX_Len++;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = CRCTemp & 0xff;
|
||
MD_ConnectTX_Len++;
|
||
}
|
||
break;
|
||
case PosLY:
|
||
{
|
||
GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
if (GunAddr > 0)
|
||
GunAddr -= 1;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case LY_MDConnectCmdHandshake: // 握手
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x30;
|
||
MD_Connect_TX_Buff[Port][4] = 0x30;
|
||
MD_Connect_TX_Buff[Port][5] = (TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC >> 4) & 0x0f;
|
||
if (MD_Connect_TX_Buff[Port][5] < 0x0A)
|
||
MD_Connect_TX_Buff[Port][5] += 0x30;
|
||
else
|
||
MD_Connect_TX_Buff[Port][5] = MD_Connect_TX_Buff[Port][5] - 0x0A + 0x41;
|
||
MD_Connect_TX_Buff[Port][6] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC & 0x0f;
|
||
if (MD_Connect_TX_Buff[Port][6] < 0x0A)
|
||
MD_Connect_TX_Buff[Port][6] += 0x30;
|
||
else
|
||
MD_Connect_TX_Buff[Port][6] = MD_Connect_TX_Buff[Port][6] - 0x0A + 0x41;
|
||
MD_Connect_TX_Buff[Port][7] = 0x03;
|
||
MD_Connect_TX_Buff[Port][8] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 7); // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x06)
|
||
// {
|
||
// TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x07;
|
||
// }
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x08;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdPoll: // 轮询
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x51;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_ConnectTX_Len = 4;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdReadState: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x35;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdReadTotal: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x32;
|
||
MD_Connect_TX_Buff[Port][4] = 0x30;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdChoiceGun: // 选择枪
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_ConnectTX_Len = 4;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x02)
|
||
// {
|
||
// TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x03;
|
||
// }
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdDisauthorize: // 取消授权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x32;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 0;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdAuthorize: // 授权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x30;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000)
|
||
MD_Connect_TX_Buff[Port][5] = 0x30;
|
||
else
|
||
{
|
||
MD_Connect_TX_Buff[Port][5] = 0x32;
|
||
}
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume)
|
||
MD_Connect_TX_Buff[Port][6] = 0x31;
|
||
else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale)
|
||
MD_Connect_TX_Buff[Port][6] = 0x32;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (5 - i) * 4) & 0x0f);
|
||
MD_Connect_TX_Buff[Port][13] = 0x32;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][14 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (3 - i) * 4) & 0x0f);
|
||
MD_Connect_TX_Buff[Port][18] = 0x03;
|
||
MD_Connect_TX_Buff[Port][19] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 18); // 校验
|
||
MD_ConnectTX_Len = 20;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdWritePrice: // 写单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x32;
|
||
MD_Connect_TX_Buff[Port][4] = 0x31;
|
||
MD_Connect_TX_Buff[Port][5] = 0x32;
|
||
|
||
MD_Connect_TX_Buff[Port][6] = 0x32;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (3 - i) * 4) & 0x0f);
|
||
for (i = 0; i < 25; i++)
|
||
MD_Connect_TX_Buff[Port][11 + i] = 0x30;
|
||
MD_Connect_TX_Buff[Port][36] = 0x03;
|
||
MD_Connect_TX_Buff[Port][37] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 36); // 校验
|
||
MD_ConnectTX_Len = 38;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK0: // 1030
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x10;
|
||
MD_Connect_TX_Buff[Port][1] = 0x30;
|
||
MD_ConnectTX_Len = 2;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK1: // 1031
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x10;
|
||
MD_Connect_TX_Buff[Port][1] = 0x31;
|
||
MD_ConnectTX_Len = 2;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosJP:
|
||
{
|
||
GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
if (GunAddr > 0)
|
||
GunAddr -= 1;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case LY_MDConnectCmdPoll: // 轮询
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x51;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_ConnectTX_Len = 4;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdReadState: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x35;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdReadTotal: // 读
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x32;
|
||
MD_Connect_TX_Buff[Port][4] = 0x30;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdChoiceGun: // 选择枪
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_ConnectTX_Len = 4;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdDisauthorize: // 取消授权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x32;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 0;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdAuthorize: // 授权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x41;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x90000000)
|
||
MD_Connect_TX_Buff[Port][5] = 0x30;
|
||
else
|
||
{
|
||
MD_Connect_TX_Buff[Port][5] = 0x32;
|
||
}
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume)
|
||
MD_Connect_TX_Buff[Port][6] = 0x31;
|
||
else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale)
|
||
MD_Connect_TX_Buff[Port][6] = 0x32;
|
||
for (i = 0; i < 8; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (7 - i) * 4) & 0x0f);
|
||
|
||
MD_Connect_TX_Buff[Port][15] = 0x32;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][16 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (5 - i) * 4) & 0x0f);
|
||
MD_Connect_TX_Buff[Port][22] = 0x30;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][23 + i] = 0x30;
|
||
MD_Connect_TX_Buff[Port][29] = 0x30;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][30 + i] = 0x30;
|
||
MD_Connect_TX_Buff[Port][36] = 0x30;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][37 + i] = 0x30;
|
||
MD_Connect_TX_Buff[Port][43] = 0x30;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][44 + i] = 0x30;
|
||
MD_Connect_TX_Buff[Port][50] = 0x30;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][51 + i] = 0x30;
|
||
|
||
MD_Connect_TX_Buff[Port][57] = 0x03;
|
||
MD_Connect_TX_Buff[Port][58] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 57); // 校验
|
||
MD_ConnectTX_Len = 59;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdWritePrice: // 写单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x32;
|
||
MD_Connect_TX_Buff[Port][4] = 0x31;
|
||
MD_Connect_TX_Buff[Port][5] = 0x33;
|
||
|
||
MD_Connect_TX_Buff[Port][6] = 0x32;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (5 - i) * 4) & 0x0f);
|
||
for (i = 0; i < 25; i++)
|
||
MD_Connect_TX_Buff[Port][13 + i] = 0x30;
|
||
MD_Connect_TX_Buff[Port][38] = 0x03;
|
||
MD_Connect_TX_Buff[Port][39] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 38); // 校验
|
||
MD_ConnectTX_Len = 40;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK0: // 1030
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x10;
|
||
MD_Connect_TX_Buff[Port][1] = 0x30;
|
||
MD_ConnectTX_Len = 2;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK1: // 1031
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x10;
|
||
MD_Connect_TX_Buff[Port][1] = 0x31;
|
||
MD_ConnectTX_Len = 2;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosDart:
|
||
{
|
||
GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[i].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
for (i = 0; i < TXHData.MD_Port_Data[Port].PortData.DeviceNumber; i++)
|
||
if (GunAddr == TXHData.MD_Port_Data[Port].GunData[i].GunAddr)
|
||
break;
|
||
// SunNum = GunNum - TXHData.MD_Port_Data[Port].GunData[i].GunNummber + 1;//确认同一地址的第几条枪
|
||
|
||
if (GunAddr > 0)
|
||
GunAddr -= 1;
|
||
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq < 0x0f) // 序列号自动增加
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq++;
|
||
else
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq = 0;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case DART_MDConnectCmdPoll: // 轮询
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0x20; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA;
|
||
MD_ConnectTX_Len = 3;
|
||
}
|
||
break;
|
||
case DART_MDConnectCmdReadState: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x01;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x00;
|
||
Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff;
|
||
MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff;
|
||
MD_Connect_TX_Buff[Port][7] = 0x03;
|
||
MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = DART_MDConnectCmdPoll;
|
||
}
|
||
break;
|
||
case DART_MDConnectCmdReadVTotal: // 读50 33 65 01 14 DE C8 03 FA
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x65;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x00;
|
||
Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff;
|
||
MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff;
|
||
MD_Connect_TX_Buff[Port][7] = 0x03;
|
||
MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
break;
|
||
case DART_MDConnectCmdReadPTotal: // 读
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x65;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x10;
|
||
Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff;
|
||
MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff;
|
||
MD_Connect_TX_Buff[Port][7] = 0x03;
|
||
MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
break;
|
||
case DART_MDConnectCmdReStart: // 重新握手50 3F 01 01 05 03 04 00 09 00 01 48 A3 03 FA
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x01;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x05;
|
||
Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff;
|
||
MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff;
|
||
MD_Connect_TX_Buff[Port][7] = 0x03;
|
||
MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
break;
|
||
case DART_MDConnectCmdACK: // 1030
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYGunNeedCMD != DART_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYGunNeedCMD;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYGunNeedCMD = DART_MDConnectCmdPoll;
|
||
}
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xC0 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA;
|
||
MD_ConnectTX_Len = 3;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosYWY:
|
||
{
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
switch (TXHData.MD_Port_Data[Port].PortData.Device_Type)
|
||
{
|
||
case YWY_Bluesky:
|
||
{
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case YWY_MDConnectCmdReadData: // 读数据
|
||
{
|
||
for (i = 0; i < 7; i++)
|
||
MD_Connect_TX_Buff[Port][i] = Data_201[i];
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case YWY_MDConnectCmdWriteApacity: // 下载罐容表
|
||
{
|
||
for (i = 0; i < 7; i++)
|
||
MD_Connect_TX_Buff[Port][i] = Data_20E[i];
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case YWY_Probe_KY:
|
||
{
|
||
GunAddr = GunNum + 1;
|
||
// TXHData.MBCountCutNum[Port][i] ++;
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 0x02;
|
||
MD_Connect_TX_Buff[Port][4] = 0x00;
|
||
MD_Connect_TX_Buff[Port][5] = 0x09;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6);
|
||
MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
break;
|
||
case YWY_Pressure:
|
||
{
|
||
GunAddr = GunNum + 1;
|
||
// TXHData.MBCountCutNum[0][i] ++;
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 0x00;
|
||
MD_Connect_TX_Buff[Port][4] = 0x00;
|
||
MD_Connect_TX_Buff[Port][5] = 0x02;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6);
|
||
MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosRFID:
|
||
{
|
||
GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber > 0)//这个设备支持多枪协议
|
||
// {
|
||
// for(i = 0;i < TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber;i ++)
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum+i].Handshake != TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
// break;
|
||
// if(i == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber && MD_TX_CMD != RFID_MDConnectCmdROMownload)//所有枪都握手完成,并且不是在线升级指令,使用多枪指令
|
||
// MD_TX_CMD = RFID_MDConnectCmdAllData;
|
||
// }
|
||
switch (MD_TX_CMD)
|
||
{
|
||
// case RFID_MDConnectCmdAllData://读所有枪状态
|
||
// {
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber > 0)//这个设备支持多枪协议
|
||
// {
|
||
// if(GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[0] ||
|
||
// GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[1] ||
|
||
// GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[2] ||
|
||
// GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[3])//第一个地址,跳过剩下的地址
|
||
// {
|
||
// TXHData.MD_Port_Info[Port].pGunNow += TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber-1 ;
|
||
// }
|
||
// }
|
||
// MD_Connect_TX_Buff[Port][0] = 0xF5;//
|
||
// MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
// MD_Connect_TX_Buff[Port][2] = 0;
|
||
// MD_Connect_TX_Buff[Port][3] = 0;
|
||
// MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdAllData;
|
||
// MD_ConnectTX_Len = 5;//缓存数据位置
|
||
// for(DeviceNumber = 0;DeviceNumber < TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber;DeviceNumber ++)
|
||
// {
|
||
// switch(TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next) // 根据命令字节进行不同的操作
|
||
// {
|
||
// case RFID_MDConnectCmdReadData: //轮询
|
||
// {
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Data[Port].GunData[GunNum + DeviceNumber].GunAddr;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next;
|
||
// MD_ConnectTX_Len ++;
|
||
// }break;
|
||
// case RFID_MDConnectCmdWriteCardInfo://写授权信息 RFID_MDConnectCmdWriteFullingInfo
|
||
// {
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Data[Port].GunData[GunNum + DeviceNumber].GunAddr;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState;
|
||
// MD_ConnectTX_Len ++;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState == 0x01)
|
||
// {
|
||
// for(i = 0;i < 15;i ++)
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDUserName[i];
|
||
// MD_ConnectTX_Len += 15;
|
||
// for(i = 0;i < 10;i ++)
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].CarLicensePlate[i];
|
||
// MD_ConnectTX_Len += 10;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].BalanceDecimal;
|
||
// MD_ConnectTX_Len += 1;
|
||
// for(i = 0;i < 5;i ++)
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].Balance[i];
|
||
// MD_ConnectTX_Len += 5;
|
||
// }
|
||
// else if(TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState == 0x20)
|
||
// {
|
||
// for(i = 0;i < 4;i ++)
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].Balance[i];
|
||
// MD_ConnectTX_Len += 4;
|
||
// }
|
||
// }break;
|
||
// case RFID_MDConnectCmdWriteFullingInfo://写实时信息
|
||
// {
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Data[Port].GunData[GunNum + DeviceNumber].GunAddr;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].BalanceDecimal;
|
||
// MD_ConnectTX_Len ++;
|
||
// for(i = 0;i < 5;i ++)
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].Balance[i];
|
||
// MD_ConnectTX_Len += 5;
|
||
// }break;
|
||
// }
|
||
// }
|
||
// MD_Connect_TX_Buff[Port][2] = MD_ConnectTX_Len >> 8;
|
||
// MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len;
|
||
// Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0],MD_ConnectTX_Len);
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8;
|
||
// MD_ConnectTX_Len ++;
|
||
// MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64;
|
||
// MD_ConnectTX_Len ++;
|
||
// }break;
|
||
case RFID_MDConnectCmdReadData: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdReadData;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdLossACK: //
|
||
case RFID_MDConnectCmdFindACK: //
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_Connect_TX_Buff[Port][4] = MD_TX_CMD;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteCardInfo: // 写授权信息 RFID_MDConnectCmdWriteFullingInfo
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
|
||
MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdWriteCardInfo;
|
||
MD_Connect_TX_Buff[Port][5] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState == 0x01)
|
||
{
|
||
MD_ConnectTX_Len = 37;
|
||
for (i = 0; i < 15; i++)
|
||
MD_Connect_TX_Buff[Port][6 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDUserName[i];
|
||
for (i = 0; i < 10; i++)
|
||
MD_Connect_TX_Buff[Port][21 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].CarLicensePlate[i];
|
||
MD_Connect_TX_Buff[Port][31] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].BalanceDecimal;
|
||
for (i = 0; i < 5; i++)
|
||
MD_Connect_TX_Buff[Port][32 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Balance[i];
|
||
}
|
||
else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState == 0x20)
|
||
{
|
||
MD_ConnectTX_Len = 10;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][6 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Balance[i];
|
||
}
|
||
else
|
||
{
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len);
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64;
|
||
MD_ConnectTX_Len = MD_ConnectTX_Len + 2;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteFullingInfo: // 写实时信息
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
|
||
MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdWriteFullingInfo;
|
||
MD_Connect_TX_Buff[Port][5] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState;
|
||
MD_ConnectTX_Len = 12;
|
||
MD_Connect_TX_Buff[Port][6] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].BalanceDecimal;
|
||
for (i = 0; i < 5; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Balance[i];
|
||
MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len);
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64;
|
||
MD_ConnectTX_Len = MD_ConnectTX_Len + 2;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteBindingInfo: // 下发绑定信息
|
||
{
|
||
MD_ConnectTX_Len = 6;
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len;
|
||
MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdWriteBindingInfo;
|
||
MD_Connect_TX_Buff[Port][5] = TXHData.MD_Port_Data[Port].GunData[GunNum].RFIDBinding;
|
||
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len);
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64;
|
||
MD_ConnectTX_Len = MD_ConnectTX_Len + 2;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdReadVersion: // 读版本
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdReadVersion;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 5);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdROMownload: // 固件下发
|
||
{
|
||
MD_ConnectTX_Len = 531;
|
||
MD_Connect_TX_Buff[Port][0] = 0xF5;
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr;
|
||
MD_Connect_TX_Buff[Port][2] = MD_ConnectTX_Len >> 8;
|
||
MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len & 0xff;
|
||
MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdROMownload;
|
||
for (i = 0; i < 10; i++)
|
||
MD_Connect_TX_Buff[Port][5 + i] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData_Version[i];
|
||
MD_Connect_TX_Buff[Port][15] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop >> 8;
|
||
MD_Connect_TX_Buff[Port][16] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop;
|
||
MD_Connect_TX_Buff[Port][17] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow >> 8;
|
||
MD_Connect_TX_Buff[Port][18] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow;
|
||
AT45DBItemRead(CA_DeviceFrame, TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow + Port * 1024);
|
||
for (i = 0; i < 512; i++)
|
||
MD_Connect_TX_Buff[Port][19 + i] = TXHData.Frame[i];
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len);
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64;
|
||
MD_ConnectTX_Len = MD_ConnectTX_Len + 2;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosYGao:
|
||
{
|
||
GunAddr = (TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr);
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case YG_MDConnectCmdReadFuelVolumeState: // 读状态+数据
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdReadFuelRecord: // 读记录
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdReadFuelRecordConfirm: // 读记录确认信息
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdWritePrset: // 预置
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][5 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][8 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][12 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][15 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
Tempu64 = 100000000 / TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][18 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][22] = 0;
|
||
}
|
||
else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale)
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][5 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][8 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][12 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][15 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
Tempu64 = 100000000 / TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][18 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][22] = 1;
|
||
}
|
||
Tempu64 = TXHData.MD_Port_Data[Port].GunData[GunNum].OrderNumber + 1;
|
||
for (i = 0; i < 2; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][23 + i] = (Tempu64 >> ((1 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][25] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 22); // 校验
|
||
MD_ConnectTX_Len = 26;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdStart: // 启动
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdStop: // 停机
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][5 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
Tempu64 = 100000000 / MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price);
|
||
Tempu64 = MD_Connect_u64ToBCD(Tempu64);
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][8 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][12] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 9); // 校验
|
||
MD_ConnectTX_Len = 13;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
break;
|
||
case YG_MDConnectControlMode: // 要控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = 0x55; // 联机模式
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 3); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdLock: // 锁定
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = 0xAA; // 联机模式
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][6 + i] = 0x00;
|
||
}
|
||
MD_Connect_TX_Buff[Port][9] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 6); // 校验
|
||
MD_ConnectTX_Len = 10;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdUnLock: // 解锁
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头
|
||
MD_Connect_TX_Buff[Port][3] = MD_TX_CMD;
|
||
MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验
|
||
MD_ConnectTX_Len = 6;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosHongYang:
|
||
{
|
||
GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
MD_Connect_TX1_DMAAddrSet((uint32_t)&HY_SendBuff);
|
||
break;
|
||
case 1:
|
||
MD_Connect_TX2_DMAAddrSet((uint32_t)&HY_SendBuff);
|
||
break;
|
||
case 2:
|
||
MD_Connect_TX3_DMAAddrSet((uint32_t)&HY_SendBuff);
|
||
break;
|
||
case 3:
|
||
MD_Connect_TX4_DMAAddrSet((uint32_t)&HY_SendBuff);
|
||
break;
|
||
}
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case HY_MDConnectCmdReadFuelData: // 读数据
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdReadFuelData;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdWritePrsetSale: // 预置金额
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdWritePrsetSale;
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue);
|
||
MD_Connect_TX_Buff[Port][1] = 0x06;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = CheckSum8(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000)
|
||
Tempu64 = 0x90000000;
|
||
else
|
||
Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue);
|
||
MD_Connect_TX_Buff[Port][1] = 0x07;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][7] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdWritePrsetVolume: // 预置油量
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdWritePrsetVolume;
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x900000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue);
|
||
MD_Connect_TX_Buff[Port][1] = 0x06;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = CheckSum8(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x90000000)
|
||
Tempu64 = 0x90000000;
|
||
else
|
||
Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue);
|
||
MD_Connect_TX_Buff[Port][1] = 0x07;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
|
||
MD_Connect_TX_Buff[Port][7] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdStart: // 启动
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdStart;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 1;
|
||
FMItemWrite(CF_MD_Port_Data, Port);
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdStop: // 停机
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdStop;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdReadPrice;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdWritePrice;
|
||
MD_Connect_TX_Buff[Port][1] = 0x07;
|
||
Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price);
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((Tempu64) >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][7] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdReadTotal;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectASKControlPower: // 要控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectASKControlPower;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
case HY_MDConnectReturnControlPower: // 还控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = HY_MDConnectReturnControlPower;
|
||
MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 4;
|
||
if (GunAddr <= 64)
|
||
HY_SendBuff[0] = GunAddr | 0x100;
|
||
else
|
||
HY_SendBuff[0] = GunAddr;
|
||
for (i = 1; i < MD_ConnectTX_Len; i++)
|
||
HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i];
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosLanFeng:
|
||
{
|
||
GunAddr = MD_Connect_u64ToBCD(TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr);
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag == 1)
|
||
{
|
||
MD_Connect_USART_Configuration(Port, BaudRateSync, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
}
|
||
else
|
||
{
|
||
MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even);
|
||
}
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case LF_MDConnectCmdReadState: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = LF_MDConnectCmdReadState;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case LF_MDConnectCmdWritePrset: // 预置金额
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000)
|
||
Tempu64 = 0x900000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
MD_Connect_TX_Buff[Port][2] = 0xA5;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrsetSale;
|
||
MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000)
|
||
Tempu64 = 0x90000000;
|
||
else
|
||
Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue;
|
||
MD_Connect_TX_Buff[Port][2] = 0xA6;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][7] = LF_MDConnectCmdWritePrset;
|
||
MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
}
|
||
}
|
||
break;
|
||
case LF_MDConnectCmdStop: // 停机
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = LF_MDConnectCmdStop;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case LF_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664)
|
||
{
|
||
MD_Connect_TX_Buff[Port][2] = 0xA4;
|
||
for (i = 0; i < 2; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((1 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][5] = C_MDConnectCmdWritePrice;
|
||
MD_Connect_TX_Buff[Port][6] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
else
|
||
{
|
||
MD_Connect_TX_Buff[Port][2] = 0xA5;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((2 - i) * 8)) & 0xff;
|
||
}
|
||
MD_Connect_TX_Buff[Port][6] = LF_MDConnectCmdWritePrice;
|
||
MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验
|
||
MD_ConnectTX_Len = 8;
|
||
}
|
||
}
|
||
break;
|
||
case LF_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = LF_MDConnectCmdReadTotal;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case LF_MDConnectASKControlPower: // 要控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = LF_MDConnectASKControlPower;
|
||
// MD_Connect_TX_Buff[Port][3] = C_MDConnectReturnControlPower;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
case LF_MDConnectReturnControlPower: // 还控制权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0xA2;
|
||
MD_Connect_TX_Buff[Port][3] = LF_MDConnectReturnControlPower;
|
||
MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验
|
||
MD_ConnectTX_Len = 5;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosSSLan: //
|
||
{
|
||
FatherNum = GunNum; // 这离GunNum表示泵号
|
||
GunNum = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNow; //
|
||
GunAddr = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Address; // 泵地址
|
||
if (TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top)
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][FatherNum]++;
|
||
if (GunAddr > 0)
|
||
GunAddr -= 1;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case LY_MDConnectCmdHandshake: // 握手
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x30;
|
||
MD_Connect_TX_Buff[Port][4] = 0x30;
|
||
MD_Connect_TX_Buff[Port][5] = (TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC >> 4) & 0x0f;
|
||
if (MD_Connect_TX_Buff[Port][5] < 0x0A)
|
||
MD_Connect_TX_Buff[Port][5] += 0x30;
|
||
else
|
||
MD_Connect_TX_Buff[Port][5] = MD_Connect_TX_Buff[Port][5] - 0x0A + 0x41;
|
||
MD_Connect_TX_Buff[Port][6] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC & 0x0f;
|
||
if (MD_Connect_TX_Buff[Port][6] < 0x0A)
|
||
MD_Connect_TX_Buff[Port][6] += 0x30;
|
||
else
|
||
MD_Connect_TX_Buff[Port][6] = MD_Connect_TX_Buff[Port][6] - 0x0A + 0x41;
|
||
MD_Connect_TX_Buff[Port][7] = 0x03;
|
||
MD_Connect_TX_Buff[Port][8] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 7); // 校验
|
||
MD_ConnectTX_Len = 9;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x06)
|
||
// {
|
||
// TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x07;
|
||
// }
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x08;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdPoll: // 轮询
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x51;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_ConnectTX_Len = 4;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdReadState: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x35;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdReadTotal: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x32;
|
||
MD_Connect_TX_Buff[Port][4] = 0x30;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdChoiceGun: // 选择枪
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x05;
|
||
MD_ConnectTX_Len = 4;
|
||
// if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x02)
|
||
// {
|
||
// TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x03;
|
||
// }
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdDisauthorize: // 取消授权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x32;
|
||
MD_Connect_TX_Buff[Port][5] = 0x03;
|
||
MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验
|
||
MD_ConnectTX_Len = 7;
|
||
TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 0;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdAuthorize: // 授权
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x31;
|
||
MD_Connect_TX_Buff[Port][4] = 0x31;
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000)
|
||
MD_Connect_TX_Buff[Port][5] = 0x30;
|
||
else
|
||
{
|
||
MD_Connect_TX_Buff[Port][5] = 0x32;
|
||
}
|
||
if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume)
|
||
MD_Connect_TX_Buff[Port][6] = 0x31;
|
||
else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale)
|
||
MD_Connect_TX_Buff[Port][6] = 0x32;
|
||
for (i = 0; i < 6; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (5 - i) * 4) & 0x0f);
|
||
for (i = 0; i < 30; i++)
|
||
MD_Connect_TX_Buff[Port][13 + i] = 0x30;
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if ((TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNow == j) && TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price != 0)
|
||
MD_Connect_TX_Buff[Port][13 + j * 5] = 0x32;
|
||
else
|
||
MD_Connect_TX_Buff[Port][13 + j * 5] = 0x30;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][14 + i + j * 5] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price >> (3 - i) * 4) & 0x0f);
|
||
}
|
||
MD_Connect_TX_Buff[Port][13 + 30] = 0x03;
|
||
MD_Connect_TX_Buff[Port][14 + 30] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 13 + 30); // 校验
|
||
MD_ConnectTX_Len = 15 + 30;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdWritePrice: // 写单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头
|
||
MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号
|
||
MD_Connect_TX_Buff[Port][2] = 0x41;
|
||
MD_Connect_TX_Buff[Port][3] = 0x32;
|
||
MD_Connect_TX_Buff[Port][4] = 0x31;
|
||
MD_Connect_TX_Buff[Port][5] = 0x32;
|
||
for (i = 0; i < 30; i++)
|
||
MD_Connect_TX_Buff[Port][6 + i] = 0x30;
|
||
for (j = 0; j < 6; j++)
|
||
{
|
||
if ((TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNow == j) && TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price != 0)
|
||
MD_Connect_TX_Buff[Port][6 + j * 5] = 0x32;
|
||
else
|
||
MD_Connect_TX_Buff[Port][6 + j * 5] = 0x30;
|
||
for (i = 0; i < 4; i++)
|
||
MD_Connect_TX_Buff[Port][7 + i + j * 5] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price >> (3 - i) * 4) & 0x0f);
|
||
}
|
||
MD_Connect_TX_Buff[Port][36] = 0x03;
|
||
MD_Connect_TX_Buff[Port][37] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 36); // 校验
|
||
MD_ConnectTX_Len = 38;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK0: // 1030
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x10;
|
||
MD_Connect_TX_Buff[Port][1] = 0x30;
|
||
MD_ConnectTX_Len = 2;
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK1: // 1031
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x10;
|
||
MD_Connect_TX_Buff[Port][1] = 0x31;
|
||
MD_ConnectTX_Len = 2;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case PosPLC:
|
||
{
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case PLC_MDConnectCmdReadData: // 轮询
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x03;
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 0x00;
|
||
MD_Connect_TX_Buff[Port][4] = 0x00;
|
||
MD_Connect_TX_Buff[Port][5] = 26;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6);
|
||
MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 8;
|
||
// TXHData.MD_Port_Info[Port].GunInfo[0].MB_CMD_Next = PLC_MDConnectCmdReadErro;
|
||
}
|
||
break;
|
||
case PLC_MDConnectCmdReadErro: // 读状态
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0x03;
|
||
MD_Connect_TX_Buff[Port][1] = 0x03;
|
||
MD_Connect_TX_Buff[Port][2] = 0x00;
|
||
MD_Connect_TX_Buff[Port][3] = 30;
|
||
MD_Connect_TX_Buff[Port][4] = 0;
|
||
MD_Connect_TX_Buff[Port][5] = 3;
|
||
Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6);
|
||
MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8;
|
||
MD_Connect_TX_Buff[Port][6] = Tempu64;
|
||
MD_ConnectTX_Len = 8;
|
||
// TXHData.MD_Port_Info[Port].GunInfo[0].MB_CMD_Next = PLC_MDConnectCmdReadData;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosPrice1_4:
|
||
{
|
||
TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1;
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
switch (MD_TX_CMD)
|
||
{
|
||
case Price_MDConnectCmdWriteParameter: // 写参数
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFE;
|
||
MD_Connect_TX_Buff[Port][1] = 0xFF;
|
||
MD_Connect_TX_Buff[Port][2] = 0x04;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x03;
|
||
Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64;
|
||
MD_Connect_TX_Buff[Port][6] = 0xEF;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdReadParameter: // 读参数
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFE;
|
||
MD_Connect_TX_Buff[Port][1] = 0xFF;
|
||
MD_Connect_TX_Buff[Port][2] = 0x04;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x02;
|
||
Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64;
|
||
MD_Connect_TX_Buff[Port][6] = 0xEF;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdWriteDecimal: // 写小数位MD_Port_Info_Type
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFE;
|
||
MD_Connect_TX_Buff[Port][1] = 0xFF;
|
||
MD_Connect_TX_Buff[Port][2] = 16;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x04;
|
||
for (j = 0; j < TXHData.MD_Port_Info[Port].PriceTagData.PriceNumber; j++)
|
||
{
|
||
MD_Connect_TX_Buff[Port][5 + j] = TXHData.MD_Port_Info[Port].PriceTagData.Length - TXHData.MD_Port_Info[Port].PriceTagData.Decimal[j];
|
||
}
|
||
for (j = TXHData.MD_Port_Info[Port].PriceTagData.PriceNumber; j < 17; j++)
|
||
MD_Connect_TX_Buff[Port][5 + j] = 0;
|
||
Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1);
|
||
MD_Connect_TX_Buff[Port][17] = Tempu64;
|
||
MD_Connect_TX_Buff[Port][18] = 0xEF;
|
||
MD_ConnectTX_Len = 19;
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdWritePrice: // 写单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFE;
|
||
MD_Connect_TX_Buff[Port][1] = 0xFF;
|
||
MD_Connect_TX_Buff[Port][2] = 40;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x01;
|
||
for (i = 5; i < 40; i++)
|
||
MD_Connect_TX_Buff[Port][i] = 0;
|
||
for (i = 0; i < TXHData.MD_Port_Info[Port].PriceTagData.PriceNumber; i++)
|
||
{
|
||
for (j = 0; j < 3; j++)
|
||
{
|
||
if (TXHData.MD_Port_Info[Port].PriceTagData.Length / 2 > j)
|
||
MD_Connect_TX_Buff[Port][5 + j + (i * 3)] = TXHData.MD_Port_Info[Port].PriceTagData.Price[i] >> ((TXHData.MD_Port_Info[Port].PriceTagData.Length / 2 - 1 - j) * 8);
|
||
else
|
||
MD_Connect_TX_Buff[Port][5 + j + (i * 3)] = 0;
|
||
}
|
||
}
|
||
Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1);
|
||
MD_Connect_TX_Buff[Port][41] = Tempu64;
|
||
MD_Connect_TX_Buff[Port][42] = 0xEF;
|
||
MD_ConnectTX_Len = 43;
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
MD_Connect_TX_Buff[Port][0] = 0xFE;
|
||
MD_Connect_TX_Buff[Port][1] = 0xFF;
|
||
MD_Connect_TX_Buff[Port][2] = 0x04;
|
||
MD_Connect_TX_Buff[Port][3] = 0x01;
|
||
MD_Connect_TX_Buff[Port][4] = 0x03;
|
||
Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1);
|
||
MD_Connect_TX_Buff[Port][5] = Tempu64;
|
||
MD_Connect_TX_Buff[Port][6] = 0xEF;
|
||
MD_ConnectTX_Len = 7;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx1EN;
|
||
MD_Connect_TX1_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX1_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
case 1:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx2EN;
|
||
MD_Connect_TX2_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX2_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx3EN;
|
||
MD_Connect_TX3_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX3_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx4EN;
|
||
MD_Connect_TX4_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX4_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
if (TXHData.UDisk_Flag)
|
||
Log_Task(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len, Port, Info_Issue);
|
||
}
|
||
else
|
||
{
|
||
TXHData.MBCountCutNum[Port][GunNum]++;
|
||
}
|
||
}
|
||
else if (TXHData.MDConnectState[Port].Flag.WorkMode == 0) // 指令模式
|
||
{
|
||
switch (TXHData.MDConnectState[Port].Flag.SetModeCMDNext)
|
||
{
|
||
case WIFI_ATRec:
|
||
{
|
||
TXHData.POS_Info.POS_ConnectRXTask_Flag = 0;
|
||
for (i = 0; i < strlen(MD_ATRec); i++)
|
||
MD_Connect_TX_Buff[Port][i] = MD_ATRec[i];
|
||
MD_ConnectTX_Len = (i); // 设置发送DMA长度
|
||
TXHData.MBCountTimer[Port].TimerCountMax = 1000;
|
||
}
|
||
break;
|
||
case WIFI_WMODE:
|
||
{
|
||
TXHData.POS_Info.POS_ConnectRXTask_Flag = 0;
|
||
for (i = 0; i < strlen(MD_WMODE); i++)
|
||
MD_Connect_TX_Buff[Port][i] = MD_WMODE[i];
|
||
MD_ConnectTX_Len = (i); // 设置发送DMA长度
|
||
}
|
||
break;
|
||
case WIFI_WifiRST:
|
||
{
|
||
for (i = 0; i < strlen(MD_WifiRST); i++)
|
||
MD_Connect_TX_Buff[Port][i] = MD_WifiRST[i];
|
||
MD_ConnectTX_Len = (i); // 设置发送DMA长度
|
||
|
||
TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 10;
|
||
}
|
||
break;
|
||
case WIFI_WifiWSSSID:
|
||
{
|
||
TXHData.POS_Info.POS_ConnectRXTask_Flag = 0;
|
||
for (i = 0; i < strlen(MD_WifiWSSSID); i++)
|
||
MD_Connect_TX_Buff[Port][i] = MD_WifiWSSSID[i];
|
||
MD_Connect_TX_Buff[Port][11] = 0x31 + Port;
|
||
MD_Connect_TX_Buff[Port][22] = 0x31 + Port * 3;
|
||
if (Port == 3)
|
||
{
|
||
MD_Connect_TX_Buff[Port][22] = 0x31;
|
||
MD_Connect_TX_Buff[Port][23] = 0x30;
|
||
MD_Connect_TX_Buff[Port][24] = 0x0D;
|
||
MD_Connect_TX_Buff[Port][25] = 0x0A;
|
||
i++;
|
||
}
|
||
MD_ConnectTX_Len = (i); // 设置发送DMA长度
|
||
|
||
TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 10;
|
||
}
|
||
break;
|
||
case WIFI_WifiRSSI:
|
||
{
|
||
for (i = 0; i < strlen(MD_WifiRSSI); i++)
|
||
MD_Connect_TX_Buff[Port][i] = MD_WifiRSSI[i];
|
||
MD_ConnectTX_Len = (i); // 设置发送DMA长度
|
||
|
||
TXHData.MDConnectState[Port].Flag.SetModeCMDNext = WIFI_WifiSOCKET;
|
||
TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 2;
|
||
}
|
||
break;
|
||
case WIFI_WifiSOCKET:
|
||
{
|
||
{
|
||
for (i = 0; i < strlen(MD_WifiSOCKET); i++)
|
||
MD_Connect_TX_Buff[Port][i] = MD_WifiSOCKET[i];
|
||
MD_ConnectTX_Len = (i); // 设置发送DMA长度
|
||
}
|
||
TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 10;
|
||
}
|
||
break;
|
||
}
|
||
switch (Port)
|
||
{
|
||
case 0:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx1EN;
|
||
MD_Connect_TX1_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX1_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
case 1:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx2EN;
|
||
MD_Connect_TX2_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX2_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx3EN;
|
||
MD_Connect_TX3_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX3_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
{
|
||
if (MD_ConnectTX_Len)
|
||
{
|
||
MD_Connect_RS485_Tx4EN;
|
||
MD_Connect_TX4_DMALenSet(MD_ConnectTX_Len);
|
||
MD_Connect_TX4_DMAStart();
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
/*F*****************************************************************************
|
||
* NAME: KeyBoardTask
|
||
* PURMDE: KeyBoard键盘通讯处理任务
|
||
* PARAMS: 无
|
||
* return: 无
|
||
*******************************************************************************/
|
||
volatile u8 KBAddr_Init[4] = {0, 0, 0, 0};
|
||
volatile u32 MD_RX_RNGData[4] = {0, 0, 0, 0};
|
||
void MD_ConnectRXTask(void)
|
||
{
|
||
volatile u16 i = 0, j = 0, Port = 0, Temp = 0, DeviceNumber = 0, DeviceType = 0, DeviceDataLen = 0, DeviceNoDataLen = 0, DevicePortLen = 0;
|
||
volatile u64 TempBCD = 0, Tempu64 = 0;
|
||
volatile u8 MD_ConnectRX_Port = 0, POSType = 0, RXBuild_Port = 0, WhiteList_Num = 0;
|
||
volatile u16 MD_ConnectRX_Len = 0; // 长度
|
||
volatile u8 MD_ConnectRX_pGun = 0; // 地址枪号
|
||
volatile u8 MD_ConnectRX_pGun_Father = 0; // 多枪协议父设备号
|
||
volatile u8 MD_ConnectRX_pGun_SonDeviceBusy = 0; // 多强协议中用来标识有子设备在提枪或者加油中
|
||
volatile u16 MD_ConnectRX_CMD = 0, MD_ConnectRX_CMDType = 0; // 命令
|
||
volatile GunState_TypeDef GunState;
|
||
u8 MD_ConnectRX_Check = 0; // 校验变量
|
||
u8 Buff[50];
|
||
u8 Temp8 = 0;
|
||
u8 Encrypt_Flag1 = 0;
|
||
u8 Encrypt_Flag2 = 0;
|
||
u32 Temp32 = 0;
|
||
u16 Temp16 = 0;
|
||
volatile u16 Offset = 0;
|
||
volatile u32 CRC_temp = 0;
|
||
volatile float TempF = 0;
|
||
volatile u8 Tank_Num;
|
||
u8 Data_201[7] = "i20100";
|
||
u8 Data_20E[7] = "i20E00";
|
||
|
||
while (TXHData.MBCountRXIDLETimer[0].Flag + TXHData.MBCountRXIDLETimer[1].Flag + TXHData.MBCountRXIDLETimer[2].Flag + TXHData.MBCountRXIDLETimer[3].Flag)
|
||
{
|
||
if (TXHData.MBCountRXIDLETimer[0].Flag)
|
||
{
|
||
TXHData.MBCountRXIDLETimer[0].Flag = 0;
|
||
if (TXHData.MD_Rec_NummberB[0] == 1000 - DMA1_Stream5->NDTR)
|
||
{
|
||
TXHData.MD_Rec_Nummber[0] = 1000 - DMA1_Stream5->NDTR;
|
||
MD_Connect_RX1_DMAStop(); // 关闭DMA接收
|
||
DMA_ClearFlag(DMA1_Stream5, DMA_IT_TCIF5);
|
||
MD_ConnectRX1Task_Flag = 1; // 使能Gas接收任务
|
||
MD_Connect_RX1_DMALenSet(1000); // 重置接受长度
|
||
MD_Connect_RX1_DMAStart(); // 打开DMA接收
|
||
}
|
||
}
|
||
if (TXHData.MBCountRXIDLETimer[1].Flag)
|
||
{
|
||
TXHData.MBCountRXIDLETimer[1].Flag = 0;
|
||
if (TXHData.MD_Rec_NummberB[1] == 1000 - DMA1_Stream2->NDTR)
|
||
{
|
||
TXHData.MD_Rec_Nummber[1] = 1000 - DMA1_Stream2->NDTR;
|
||
MD_Connect_RX2_DMAStop(); // 关闭DMA接收
|
||
DMA_ClearFlag(DMA1_Stream2, DMA_IT_TCIF2);
|
||
MD_ConnectRX2Task_Flag = 1; // 使能Gas接收任务
|
||
MD_Connect_RX2_DMALenSet(1000); // 重置接受长度
|
||
MD_Connect_RX2_DMAStart(); // 打开DMA接收
|
||
}
|
||
}
|
||
if (TXHData.MBCountRXIDLETimer[2].Flag)
|
||
{
|
||
TXHData.MBCountRXIDLETimer[2].Flag = 0;
|
||
if (TXHData.MD_Rec_NummberB[2] == 1000 - DMA1_Stream0->NDTR)
|
||
{
|
||
TXHData.MD_Rec_Nummber[2] = 1000 - DMA1_Stream0->NDTR;
|
||
MD_Connect_RX3_DMAStop(); // 关闭DMA接收
|
||
DMA_ClearFlag(DMA1_Stream0, DMA_IT_TCIF0);
|
||
MD_ConnectRX3Task_Flag = 1; // 使能Gas接收任务
|
||
MD_Connect_RX3_DMALenSet(1000); // 重置接受长度
|
||
MD_Connect_RX3_DMAStart(); // 打开DMA接收
|
||
}
|
||
}
|
||
if (TXHData.MBCountRXIDLETimer[3].Flag)
|
||
{
|
||
TXHData.MBCountRXIDLETimer[3].Flag = 0;
|
||
if (TXHData.MD_Rec_NummberB[3] == 1000 - DMA1_Stream1->NDTR)
|
||
{
|
||
TXHData.MD_Rec_Nummber[3] = 1000 - DMA1_Stream1->NDTR;
|
||
MD_Connect_RX4_DMAStop(); // 关闭DMA接收
|
||
DMA_ClearFlag(DMA1_Stream1, DMA_IT_TCIF1);
|
||
MD_ConnectRX4Task_Flag = 1; // 使能Gas接收任务
|
||
MD_Connect_RX4_DMALenSet(1000); // 重置接受长度
|
||
MD_Connect_RX4_DMAStart(); // 打开DMA接收
|
||
}
|
||
}
|
||
}
|
||
while (MD_ConnectRX1Task_Flag + MD_ConnectRX2Task_Flag + MD_ConnectRX3Task_Flag + MD_ConnectRX4Task_Flag)
|
||
{
|
||
if (MD_ConnectRX1Task_Flag)
|
||
{
|
||
MD_ConnectRX1Task_Flag = 0;
|
||
MD_ConnectRX_Port = 0;
|
||
}
|
||
else if (MD_ConnectRX2Task_Flag)
|
||
{
|
||
MD_ConnectRX2Task_Flag = 0;
|
||
MD_ConnectRX_Port = 1;
|
||
}
|
||
else if (MD_ConnectRX3Task_Flag)
|
||
{
|
||
MD_ConnectRX3Task_Flag = 0;
|
||
MD_ConnectRX_Port = 2;
|
||
}
|
||
else if (MD_ConnectRX4Task_Flag)
|
||
{
|
||
MD_ConnectRX4Task_Flag = 0;
|
||
MD_ConnectRX_Port = 3;
|
||
}
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0xC1 && MD_Connect_RX_Buff[MD_ConnectRX_Port][2] == 0x08) // LORA设置回复
|
||
{
|
||
TXHData.MD_LORA_Slave_Flag = 1;
|
||
switch (MD_ConnectRX_Port)
|
||
{
|
||
case 0:
|
||
MD_Connect_LORA_IdleMode1;
|
||
break;
|
||
case 1:
|
||
MD_Connect_LORA_IdleMode2;
|
||
break;
|
||
case 2:
|
||
MD_Connect_LORA_IdleMode3;
|
||
break;
|
||
case 3:
|
||
MD_Connect_LORA_IdleMode4;
|
||
break;
|
||
}
|
||
BEEP_OFF;
|
||
}
|
||
else if (TXHData.MDConnectState[MD_ConnectRX_Port].Flag.WorkMode == 1) // 数据模式
|
||
{
|
||
if (TXHData.UDisk_Flag)
|
||
Log_Task(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], TXHData.MD_Rec_Nummber[MD_ConnectRX_Port], MD_ConnectRX_Port, Info_Receive);
|
||
POSType = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.POSType;
|
||
switch (POSType)
|
||
{
|
||
case PosBlueSky:
|
||
{
|
||
MD_ConnectRX_pGun = MD_Connect_BCDTou64(MD_Connect_RX_Buff[MD_ConnectRX_Port][1]); // 提取指令抢号
|
||
for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; DeviceNumber++)
|
||
if (MD_ConnectRX_pGun == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunAddr)
|
||
{
|
||
MD_ConnectRX_pGun = DeviceNumber;
|
||
break;
|
||
}
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] & 0xf0) == 0xa0)
|
||
MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2] & 0x0f; // 提取长度码
|
||
else
|
||
MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2];
|
||
if (MD_ConnectRX_Len == 0)
|
||
MD_ConnectRX_Len = 16;
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1]; // 提取命令码
|
||
Temp = MD_Connect_TXDataCheck(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len + 1);
|
||
if (Temp == MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 2] && MD_Connect_RX_Buff[MD_ConnectRX_Port][1] > 0) // 判断校验位
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 3];
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
if (TXHData.POS_MonitorModel == 1) // 监管模式
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case C_MDConnectCmdReadState: // 读状态
|
||
{
|
||
if (MD_ConnectRX_Len < 3)
|
||
MD_ConnectRX_CMD = 0;
|
||
break;
|
||
};
|
||
break;
|
||
case C_MDConnectCmdReadFuelState: // 读数据
|
||
{
|
||
if (MD_ConnectRX_Len < 3)
|
||
MD_ConnectRX_CMD = 0;
|
||
break;
|
||
};
|
||
break;
|
||
case C_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
if (MD_ConnectRX_Len < 3)
|
||
MD_ConnectRX_CMD = 0;
|
||
break;
|
||
};
|
||
break;
|
||
case C_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
if (MD_ConnectRX_Len < 3)
|
||
MD_ConnectRX_CMD = 0;
|
||
break;
|
||
};
|
||
break;
|
||
default:
|
||
MD_ConnectRX_CMD = 0;
|
||
break;
|
||
}
|
||
}
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case C_MDConnectCmdReadState: // 读状态
|
||
{
|
||
TXHData.LTGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][3];
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.LTGunState.Flag.StartFlag;
|
||
if (TXHData.LTGunState.Flag.StartFlag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = 1;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice;
|
||
}
|
||
else if (TXHData.LTGunState.Flag.TitleFlag == 0) // 如果控制权丢失,从新获取控制权
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectASKControlPower;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.LTGunState.Flag.StartFlag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1)
|
||
{
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number)
|
||
{
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0x11;
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number)
|
||
{
|
||
TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.UpdateDisplay = 0;
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0;
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo;
|
||
}
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
}
|
||
else // 提枪
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1;
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
}
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0;
|
||
for (i = 0; i < 15; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == C_MDConnectCmdReadState)
|
||
{
|
||
// if(TXHData.POSCutTimer.Flag == 1)
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStop;
|
||
// else
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == C_MDConnectCmdWritePrice && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectASKControlPower;
|
||
}
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online == 1 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords == 0)
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag == 0)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag)
|
||
{
|
||
for (i = 0; i < 6; i++) // 判断是不是同一个系列
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i == 6)
|
||
{
|
||
for (i = 6; i < 10; i++) // 判断版本号是不是相同
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i != 10)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdSetBaudRate;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadFuelState: // 读数据
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (MD_ConnectRX_Len != 8)
|
||
break;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09)
|
||
break;
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90)
|
||
break;
|
||
}
|
||
if (i < 6)
|
||
break;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8]));
|
||
}
|
||
else
|
||
{
|
||
if (MD_ConnectRX_Len != 10)
|
||
break;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09)
|
||
break;
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90)
|
||
break;
|
||
}
|
||
if (i < 8)
|
||
break;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6]));
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][9] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][10]));
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadTotal;
|
||
}
|
||
else if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == C_MDConnectCmdReadFuelState)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdStart: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] == 0x59)
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
else
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
break;
|
||
case C_MDConnectCmdStop: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectPauseFueling: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
}
|
||
break;
|
||
case C_MDConnectResumeFueling: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePrsetSale: // 预置金额
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePrsetVolume: // 预置油量
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]);
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]);
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664)
|
||
{
|
||
if (MD_ConnectRX_Len != 12)
|
||
break;
|
||
for (i = 0; i < 10; i++)
|
||
{
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09)
|
||
break;
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90)
|
||
break;
|
||
}
|
||
if (i < 10)
|
||
break;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 5; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 5; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][8 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
}
|
||
else
|
||
{
|
||
if (MD_ConnectRX_Len != 14)
|
||
break;
|
||
for (i = 0; i < 12; i++)
|
||
{
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09)
|
||
break;
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90)
|
||
break;
|
||
}
|
||
if (i < 12)
|
||
break;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][9 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
}
|
||
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i];
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWriteTotal: // xie
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectCmdWritePulseCoefficient: // xie
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectASKControlPower: // 要控制权
|
||
{
|
||
TXHData.POSLOCK_Impower = 1;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadVersion;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == C_MDConnectCmdWritePrice)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdWritePrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = 0;
|
||
}
|
||
else
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
case C_MDConnectReturnControlPower: // 还控制权
|
||
{
|
||
TXHData.POSLOCK_Impower = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x00)
|
||
// {
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState;
|
||
// }
|
||
// else if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == C_MDConnectCmdWritePrice)
|
||
// {
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdWritePrice;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = 0;
|
||
// }
|
||
}
|
||
break;
|
||
case C_MDConnectCmdReadVersion: // 读版本号
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 3];
|
||
}
|
||
break;
|
||
case C_MDConnectCmdSetBaudRate: // 同步波特率
|
||
{
|
||
if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]) == BaudRateSync)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdSendFrame;
|
||
MD_Connect_USART_Configuration(MD_ConnectRX_Port, BaudRateSync, USART_WordLength_9b, TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Parity_Even);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.BaudRateSync_Flag = 1;
|
||
}
|
||
}
|
||
break;
|
||
case C_MDConnectCmdSendFrame: // 传送帧
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow >= TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData.FrameTop)
|
||
{
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 6; // 更新完了,断开从新握手
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case PosLY: // TXHData.LoopGunNextFlag
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x04)
|
||
MD_ConnectRX_CMD = 0x04;
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x15)
|
||
MD_ConnectRX_CMD = 0x15;
|
||
if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1030)
|
||
MD_ConnectRX_CMD = LY_MDConnectCmdACK0;
|
||
else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1031)
|
||
MD_ConnectRX_CMD = LY_MDConnectCmdACK1;
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x02)
|
||
{
|
||
// BCC_CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][1] , 5);//校验
|
||
MD_ConnectRX_CMD = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
}
|
||
MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
if (TXHData.POS_MonitorModel == 1) // 监管模式
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
}
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case LY_MDConnectCmdACK0: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x05)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x06;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdHandshake;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0a)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0b;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadTotal;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0f)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x10;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadState;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdWritePrice)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK1: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x08;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0b)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0c;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdAuthorize)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
}
|
||
break;
|
||
case 0x3030: // 握手1
|
||
{
|
||
for (i = 0; i < 6; i++)
|
||
Buff[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i];
|
||
TempBCD = do_crc(Buff, 6);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYHandshakeCRC = ((TempBCD >> 8) + TempBCD) % 256;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYHandshakeCRC = Tempu64 >> 4;
|
||
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
break;
|
||
case 0x04: //
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < 0x04) // 等待握手
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake++;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x04) // 如果三次没有收到握手,跳过
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0a;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x04) // 收到握手,开始验证
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x05;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x09;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x09)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0a;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0d)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0e;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0e)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0f;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x10)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x11;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdReadState)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
else
|
||
{
|
||
if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 0x15: // 失败
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
break;
|
||
case 0x3630: // 握手2
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x09;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
}
|
||
break;
|
||
case 0x3632: // 报错信息
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
}
|
||
break;
|
||
case 0x3631: // 状态
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
// if(TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State)
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState == 0x31)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState == 0x33)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000 * 5;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x31 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x33)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState;
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x34)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;//加个定时器,用来判断是否完成交易记录的生成
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000*5;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
}
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 6] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 13] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 17] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState = MD_Connect_RX_Buff[MD_ConnectRX_Port][5];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top && (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake > 0x0f)) // 等待主动读数据,防止为握手之前设备主动发数据造成状态识别戳我
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun;
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 0x3635: // 累计
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 10; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 11] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 10; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 21] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun;
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCount = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0c)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0d;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosJP:
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x04)
|
||
MD_ConnectRX_CMD = 0x04;
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x15)
|
||
MD_ConnectRX_CMD = 0x15;
|
||
if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1030)
|
||
MD_ConnectRX_CMD = LY_MDConnectCmdACK0;
|
||
else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1031)
|
||
MD_ConnectRX_CMD = LY_MDConnectCmdACK1;
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x02)
|
||
{
|
||
MD_ConnectRX_CMD = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
}
|
||
MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
if (TXHData.POS_MonitorModel == 1) // 监管模式
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
}
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case 0x3630: // 握手
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x00)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK0: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x02)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadTotal;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x05)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x06;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadState;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdWritePrice)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK1: //
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdAuthorize)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
}
|
||
break;
|
||
case 0x04: //
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x01)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x04)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x05;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x06)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdReadState)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 0x15: // 失败
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
break;
|
||
case 0x3641: // 状态
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
// if(TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State)
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState == 0x31)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal;
|
||
}
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x31 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1;
|
||
}
|
||
// else
|
||
// {
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
// }
|
||
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x33)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState;
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x34)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
}
|
||
|
||
// else
|
||
// {
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
// }
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 6] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 15] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 21] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState = MD_Connect_RX_Buff[MD_ConnectRX_Port][5];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun;
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 0x3642: // 累计
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 12; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 11] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 12; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 23] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x03)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosDart:
|
||
{
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][1] == 0x70 && MD_Connect_RX_Buff[MD_ConnectRX_Port][2] == 0xFA)
|
||
MD_ConnectRX_CMD = DART_MDConnectCmdPoll;
|
||
else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][1] & 0xF0) == 0xC0) && (MD_Connect_RX_Buff[MD_ConnectRX_Port][2] == 0xFA))
|
||
{
|
||
MD_ConnectRX_CMD = DART_MDConnectCmdACK;
|
||
}
|
||
else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] & 0xF0) == 0x50) && ((MD_Connect_RX_Buff[MD_ConnectRX_Port][1] & 0xF0) == 0x30))
|
||
{
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][2];
|
||
}
|
||
|
||
MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
if (TXHData.POS_MonitorModel == 1) // 监管模式
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
}
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case DART_MDConnectCmdPoll: // 轮询
|
||
{
|
||
}
|
||
break;
|
||
case DART_MDConnectCmdACK: //
|
||
{
|
||
}
|
||
break;
|
||
case 0x01: // CD1
|
||
{
|
||
switch (MD_Connect_RX_Buff[MD_ConnectRX_Port][4])
|
||
{
|
||
case 0x01: // 重新握手
|
||
{
|
||
}
|
||
break;
|
||
case 0x02: // 已授权
|
||
{
|
||
}
|
||
break;
|
||
case 0x03: // 实时数据
|
||
{
|
||
}
|
||
break;
|
||
case 0x05: // 复位
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = DART_MDConnectCmdACK;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = DART_MDConnectCmdReadState;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case 0x03:
|
||
{
|
||
TXHData.DartGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][7];
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = TXHData.DartGunState.Flag.State;
|
||
}
|
||
break;
|
||
case 0x65: // CD101
|
||
{
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][4] & 0xf0) == 0)
|
||
MD_ConnectRX_CMD = DART_MDConnectCmdReadVTotal;
|
||
else
|
||
MD_ConnectRX_CMD = DART_MDConnectCmdReadPTotal;
|
||
// MD_ConnectRX_pGun_Sun = MD_Connect_RX_Buff[MD_ConnectRX_Port][4] & 0x0f;
|
||
for (i = 0; i < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; i++)
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] - 0x50) == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[i].GunAddr)
|
||
break;
|
||
// MD_ConnectRX_pGun = i + MD_ConnectRX_pGun_Sun;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 2;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = DART_MDConnectCmdReadPTotal;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 2;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = DART_MDConnectCmdReadPTotal;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosYWY:
|
||
{
|
||
switch (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type)
|
||
{
|
||
case YWY_Bluesky:
|
||
{
|
||
TempBCD = CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][1], TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 6);
|
||
Tempu64 = StrToInt(&MD_Connect_RX_Buff[MD_ConnectRX_Port][TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 5], 4);
|
||
if (Tempu64 == TempBCD)
|
||
{
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][0] = 0;
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case YWY_MDConnectCmdReadData:
|
||
{
|
||
TXHData.TankNumTop = Tempu64 = (TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 24) / 65;
|
||
for (i = 0; i < Tempu64; i++)
|
||
{
|
||
if(MD_Connect_RX_Buff[MD_ConnectRX_Port][23 + i * 65] == 0)
|
||
TXHData.TankState[MD_ConnectRX_Port][i].State = MD_Connect_RX_Buff[MD_ConnectRX_Port][20 + i * 65];
|
||
|
||
TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][26 + i * 65], 8);
|
||
if(MD_Connect_RX_Buff[MD_ConnectRX_Port][26 + i * 65] != 0x3F)
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.OV = TempF;
|
||
else
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.OV = 0;
|
||
TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][50 + i * 65], 8);
|
||
if(MD_Connect_RX_Buff[MD_ConnectRX_Port][50 + i * 65] != 0x3F)
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.OH = TempF;
|
||
else
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.OH = 0;
|
||
TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][58 + i * 65], 8);
|
||
if(MD_Connect_RX_Buff[MD_ConnectRX_Port][58 + i * 65] != 0x3F)
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.WH = TempF;
|
||
else
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.WH = 0;
|
||
TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][66 + i * 65], 8);
|
||
if(MD_Connect_RX_Buff[MD_ConnectRX_Port][66 + i * 65] != 0x3F)
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.TH = TempF;
|
||
else
|
||
TXHData.TankData[MD_ConnectRX_Port][i].Data.TH = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[i].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 1];
|
||
}
|
||
}
|
||
break;
|
||
case YWY_MDConnectCmdWriteApacity:
|
||
{
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case YWY_Probe_KY:
|
||
{
|
||
Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][22] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][21];
|
||
TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], 21);
|
||
if (Tempu64 == TempBCD)
|
||
{
|
||
MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][0] - 1;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
TXHData.TankState[MD_ConnectRX_Port][MD_ConnectRX_pGun].State = 0;
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OV = 0;
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OH = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]) + (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][6]) / 65535;
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.WH = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][8]) + (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][9] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][10]) / 65535;
|
||
;
|
||
if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][11] & 0x80) == 0)
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.TH = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][11] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][12]) / 16;
|
||
else
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.TH = 0.0 - ((float)((0 - ((MD_Connect_RX_Buff[MD_ConnectRX_Port][11] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][12])) & 0xffff) / 16.0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][23];
|
||
TXHData.TankNumTop = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber;
|
||
}
|
||
}
|
||
break;
|
||
case YWY_Pressure:
|
||
{
|
||
Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][8] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][7];
|
||
TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], 7);
|
||
if (Tempu64 == TempBCD)
|
||
{
|
||
MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][0] - 1;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][0] = 0;
|
||
TXHData.TankState[MD_ConnectRX_Port][MD_ConnectRX_pGun].State = 0;
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OV = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]) / (pow(10, MD_Connect_RX_Buff[MD_ConnectRX_Port][6]));
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OH = 0;
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.WH = 0;
|
||
TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.TH = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][9];
|
||
TXHData.TankNumTop = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case PosRFID:
|
||
{
|
||
MD_ConnectRX_Len = (MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][3];
|
||
Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1];
|
||
TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len);
|
||
if (Tempu64 == TempBCD)
|
||
{
|
||
MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][1]; // 提取指令地址号
|
||
for (i = 0; i < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; i++)
|
||
if (MD_ConnectRX_pGun == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[i].GunAddr)
|
||
{
|
||
MD_ConnectRX_pGun = i; // 提取指令抢号
|
||
break;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case RFID_MDConnectCmdAllData: // 读所有状态
|
||
{
|
||
Offset = 6;
|
||
for (DeviceNumber = 0; DeviceNumber < MD_Connect_RX_Buff[MD_ConnectRX_Port][5]; DeviceNumber++)
|
||
{
|
||
Offset++;
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset];
|
||
Offset++;
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case RFID_MDConnectCmdReadData: // 读状态
|
||
{
|
||
MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset];
|
||
Offset++;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag == 0)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].GunVersion.VersionFindFlag)
|
||
{
|
||
for (i = 0; i < 4; i++) // 判断是不是同一个系列
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i == 4)
|
||
{
|
||
for (i = 4; i < 10; i++) // 判断版本号是不是相同
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i != 10)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (MD_ConnectRX_Len == 15)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].GunState.Flag.UpdateDisplay = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardNumber[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i];
|
||
Offset += 10;
|
||
for (i = 0; i < 2; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardPSWD[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i];
|
||
Offset += 2;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].Mileage = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + 1] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + 2];
|
||
Offset += 3;
|
||
if (TXHData.POS_Info.Link_Flag == 0) // 离线
|
||
{
|
||
for (i = 0; i < 10; i++)
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardNumber[i] != 0)
|
||
break;
|
||
if (i == 10)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 0x40;
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState == 0)
|
||
{
|
||
for (WhiteList_Num = 0; WhiteList_Num < TXHData.WhiteList.WhiteListTop; WhiteList_Num++) // 查找白名单
|
||
{
|
||
for (Temp = 0; Temp < 6; Temp++)
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardNumber[Temp + 4] != TXHData.WhiteList.CardNum[WhiteList_Num][Temp])
|
||
break;
|
||
if (Temp == 6) // z在白名单内
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 3;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].GunState.Flag.UpdateDisplay = 0;
|
||
for (i = 0; i < 15; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDUserName[i] = 0x20;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CarLicensePlate[i] = 0x20;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].BalanceDecimal = 0;
|
||
for (i = 0; i < 5; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].Balance[i] = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].Mileage;
|
||
break;
|
||
}
|
||
}
|
||
if (WhiteList_Num == TXHData.WhiteList.WhiteListTop)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 0x40;
|
||
}
|
||
}
|
||
switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState)
|
||
{
|
||
case 3:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo;
|
||
break;
|
||
case 17:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo;
|
||
break;
|
||
case 0x40:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].GunState.Flag.UpdateDisplay = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].FrameNow = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdROMownload;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteCardInfo: //
|
||
{
|
||
switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState)
|
||
{
|
||
case 0x40:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 0;
|
||
break;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
// if(TXHData.POS_Info.Link_Flag == 0)//离线
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteFullingInfo: // 读
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdReadData: // 读状态
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadVersion;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag == 0)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag)
|
||
{
|
||
for (i = 0; i < 4; i++) // 判断是不是同一个系列
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i == 4)
|
||
{
|
||
for (i = 4; i < 10; i++) // 判断版本号是不是相同
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i != 10)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (MD_ConnectRX_Len == 17)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 5];
|
||
for (i = 0; i < 2; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardPSWD[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 15];
|
||
}
|
||
else if (MD_ConnectRX_Len == 20)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 5];
|
||
for (i = 0; i < 2; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardPSWD[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 15];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Mileage = (MD_Connect_RX_Buff[MD_ConnectRX_Port][17] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][18] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][19];
|
||
if (TXHData.POS_Info.Link_Flag == 0) // 离线
|
||
{
|
||
for (i = 0; i < 10; i++)
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] != 0)
|
||
break;
|
||
if (i == 10)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 0x40;
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState == 0)
|
||
{
|
||
for (WhiteList_Num = 0; WhiteList_Num < TXHData.WhiteList.WhiteListTop; WhiteList_Num++) // 查找白名单
|
||
{
|
||
for (Temp = 0; Temp < 6; Temp++)
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[Temp + 4] != TXHData.WhiteList.CardNum[WhiteList_Num][Temp])
|
||
break;
|
||
if (Temp == 6) // z在白名单内
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 3;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 0;
|
||
for (i = 0; i < 15; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDUserName[i] = 0x20;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0x20;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].BalanceDecimal = 0;
|
||
for (i = 0; i < 5; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Balance[i] = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Mileage;
|
||
break;
|
||
}
|
||
}
|
||
if (WhiteList_Num == TXHData.WhiteList.WhiteListTop)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 0x40;
|
||
}
|
||
}
|
||
switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState)
|
||
{
|
||
case 3:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo;
|
||
break;
|
||
case 17:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo;
|
||
break;
|
||
case 0x40:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo;
|
||
break;
|
||
}
|
||
}
|
||
else if (MD_ConnectRX_Len == 6) // 有状态返回
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 1) // 标签消失
|
||
{
|
||
zhtningzhuangtai = 3;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdLossACK;
|
||
if (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.Start_Flag)
|
||
{
|
||
switch (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].PortData.POSType)
|
||
{
|
||
case PosBlueSky:
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = C_MDConnectPauseFueling;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = LTP_GunCMDSuspend;
|
||
break;
|
||
}
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].pGunCapture = TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunNummber;
|
||
}
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 2) // 标签恢复
|
||
{
|
||
zhtningzhuangtai = 4;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdFindACK;
|
||
if (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.Start_Flag)
|
||
{
|
||
switch (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].PortData.POSType)
|
||
{
|
||
case PosBlueSky:
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = C_MDConnectResumeFueling;
|
||
break;
|
||
case PosBlueSkyPlus:
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = LTP_GunCMDContinue;
|
||
break;
|
||
}
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].pGunCapture = TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunNummber;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdROMownload;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdFindACK: //
|
||
case RFID_MDConnectCmdLossACK: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteCardInfo: //
|
||
{
|
||
switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState)
|
||
{
|
||
case 0x40:
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 0;
|
||
break;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
// if(TXHData.POS_Info.Link_Flag == 0)//离线
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteFullingInfo: // 读
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdWriteBindingInfo: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdReadVersion: // 读版本号
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteBindingInfo;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 5];
|
||
if (MD_ConnectRX_Len == 21)
|
||
{
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].SonDevice.SonNumber = MD_Connect_RX_Buff[MD_ConnectRX_Port][15];
|
||
// for(i = 0;i < 4;i ++)
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].SonDevice.SonAddress[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][16+i];
|
||
}
|
||
}
|
||
break;
|
||
case RFID_MDConnectCmdROMownload: //
|
||
{
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][6];
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow >= TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData.FrameTop)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 0;
|
||
// FMItemWrite(CF_MD_Port_Data,MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case PosYGao:
|
||
{
|
||
MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; // 提取指令抢号
|
||
for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; DeviceNumber++)
|
||
{
|
||
if (MD_ConnectRX_pGun == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunAddr)
|
||
{
|
||
MD_ConnectRX_pGun = DeviceNumber;
|
||
break;
|
||
}
|
||
}
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][3]; // 提取命令码
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case YG_MDConnectCmdWritePrset:
|
||
MD_ConnectRX_Len = 7;
|
||
break;
|
||
case YG_MDConnectCmdWritePrice:
|
||
MD_ConnectRX_Len = 7;
|
||
break;
|
||
case YG_MDConnectCmdStop:
|
||
MD_ConnectRX_Len = 6;
|
||
break;
|
||
case YG_MDConnectCmdStart:
|
||
MD_ConnectRX_Len = 6;
|
||
break;
|
||
case YG_MDConnectControlMode:
|
||
MD_ConnectRX_Len = 6;
|
||
break;
|
||
case YG_MDConnectCmdReadTotal:
|
||
MD_ConnectRX_Len = 18;
|
||
break;
|
||
case YG_MDConnectCmdRemovePrset:
|
||
MD_ConnectRX_Len = 7;
|
||
break;
|
||
case YG_MDConnectCmdReadVersion:
|
||
MD_ConnectRX_Len = 9;
|
||
break;
|
||
case YG_MDConnectCmdUnLock:
|
||
MD_ConnectRX_Len = 6;
|
||
break;
|
||
case YG_MDConnectCmdLock:
|
||
MD_ConnectRX_Len = 6;
|
||
break;
|
||
case YG_MDConnectCmdReadFuelVolumeState:
|
||
MD_ConnectRX_Len = 11;
|
||
break;
|
||
case YG_MDConnectCmdReadFuelSaleState:
|
||
MD_ConnectRX_Len = 11;
|
||
break;
|
||
case YG_MDConnectCmdReadFuelRecord:
|
||
MD_ConnectRX_Len = 42;
|
||
break;
|
||
}
|
||
Temp = BCC_CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][3], MD_ConnectRX_Len - 4);
|
||
if (Temp == MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len - 1] && MD_Connect_RX_Buff[MD_ConnectRX_Port][1] > 0) // 判断校验位
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len];
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
if (TXHData.POS_MonitorModel == 1) // 监管模式
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
}
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case YG_MDConnectCmdReadFuelVolumeState: // 读状态
|
||
case YG_MDConnectCmdReadFuelSaleState: // 读数据
|
||
{
|
||
if (MD_ConnectRX_CMD == YG_MDConnectCmdReadFuelVolumeState)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8]));
|
||
Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT);
|
||
TempBCD = pow(10, TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.GunDec.Dec.OilCNT + TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.GunDec.Dec.Price - TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.GunDec.Dec.MoneyCNT); // 换算小数位
|
||
Tempu64 = (Tempu64 * MD_Connect_BCDTou64(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price) + TempBCD / 2) / TempBCD; // 计算包含四舍五入
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD(Tempu64);
|
||
}
|
||
else if (MD_ConnectRX_CMD == YG_MDConnectCmdReadFuelSaleState)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8]));
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][9];
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.GunUp;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.State == 0x01 || TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.State == 0x03)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
}
|
||
else
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) // 加油结束
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
}
|
||
else // 提枪
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1;
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
}
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdStart;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
for (i = 0; i < 20; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0;
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdStart;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x01)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02;
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x02)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadTotal;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.UpdateRecords == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelRecord;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdStart: // 启动
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdStop: // 停机
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdWritePrset: // 预置金额
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdStart;
|
||
}
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdReadFuelRecord: // 读记录
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][5 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD(Tempu64);
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][8 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = MD_Connect_u64ToBCD(Tempu64);
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][19 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadTotal;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][5 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = MD_Connect_u64ToBCD(Tempu64);
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][9 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = MD_Connect_u64ToBCD(Tempu64);
|
||
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.UpdateRecords == 1)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelRecordConfirm;
|
||
else
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i];
|
||
}
|
||
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
}
|
||
break;
|
||
case YG_MDConnectControlMode: // 要控制权
|
||
{
|
||
TXHData.POSLOCK_Impower = 1;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdLock: // 锁定
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
break;
|
||
case YG_MDConnectCmdUnLock: // 解锁
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case PosHongYang:
|
||
{
|
||
MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow; // 提取指令抢号
|
||
MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][0];
|
||
MD_ConnectRX_CMD = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next; // 提取命令码,,可能会有时间差,发送命令已经变更,还未发送的时候收到上一次指令,要想办法处理
|
||
Temp = InteiHEXCheck(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len);
|
||
if (Temp == MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len] && MD_Connect_RX_Buff[MD_ConnectRX_Port][1] > 0) // 判断校验位
|
||
{
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case HY_MDConnectCmdReadFuelData: // 读数据
|
||
{
|
||
if (MD_ConnectRX_Len == 0x0D)
|
||
{
|
||
TXHData.HYState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][1];
|
||
TXHData.HYSelfTestState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][11];
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 3) // 多读几次数据,可能刚上电的数据不对
|
||
{
|
||
if (TXHData.HYSelfTestState.State > 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake++;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake >= 4)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.HYSelfTestState.Flag.GunUp;
|
||
if (TXHData.HYState.Flag.StartFlag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = 1;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadPrice;
|
||
}
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.HYSelfTestState.Flag.GunUp;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.HYState.Flag.StartFlag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
}
|
||
else // 提枪
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1;
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
}
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto)
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
for (i = 0; i < 20; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == HY_MDConnectCmdWritePrice && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectASKControlPower;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadPrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7]));
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][5]));
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][9]));
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdStart: // 启动
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
// TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
// FMItemWrite(CF_MD_Port_Data,MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdStop: // 停机
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdWritePrsetSale: // 预置金额
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdWritePrsetVolume: // 预置油量
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
if (MD_ConnectRX_Len == 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]);
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x05;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadTotal;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdWritePrice: // xie单价
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadPrice;
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectCmdReadTotal: // 读总累
|
||
{
|
||
if (MD_ConnectRX_Len == 0x0F)
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664)
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 5; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][2 + 4 - i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 5; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][7 + 4 - i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
}
|
||
else
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][2 + 5 - i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][8 + 5 - i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
}
|
||
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i];
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectASKControlPower: // 要控制权
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
{
|
||
TXHData.POSLOCK_Impower = 1;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == HY_MDConnectCmdWritePrice)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdWritePrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case HY_MDConnectReturnControlPower: // 还控制权
|
||
{
|
||
if (MD_ConnectRX_Len == 3)
|
||
{
|
||
TXHData.POSLOCK_Impower = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case PosSSLan: // TXHData.LoopGunNextFlag
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x04)
|
||
MD_ConnectRX_CMD = 0x04;
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x15)
|
||
MD_ConnectRX_CMD = 0x15;
|
||
if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1030)
|
||
MD_ConnectRX_CMD = LY_MDConnectCmdACK0;
|
||
else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1031)
|
||
MD_ConnectRX_CMD = LY_MDConnectCmdACK1;
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x02)
|
||
{
|
||
// BCC_CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][1] , 5);//校验
|
||
MD_ConnectRX_CMD = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
}
|
||
MD_ConnectRX_pGun_Father = TXHData.MD_Port_Info[MD_ConnectRX_Port].PumpNow; // 表示
|
||
MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow; // 设备位置
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun_Father] = 0;
|
||
for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++) // 同一父设备下的子设备,握手状态同步
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake;
|
||
}
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case LY_MDConnectCmdACK0: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x05)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x06;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdHandshake;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0a)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0b;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdReadTotal;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0f)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x10;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdReadState;
|
||
}
|
||
else
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next == LY_MDConnectCmdWritePrice)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need != LY_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdPoll;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case LY_MDConnectCmdACK1: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x08;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0b)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0c;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next == LY_MDConnectCmdAuthorize)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
}
|
||
break;
|
||
case 0x3030: // 握手1
|
||
{
|
||
for (i = 0; i < 6; i++)
|
||
Buff[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i];
|
||
TempBCD = do_crc(Buff, 6);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun_Father].LYHandshakeCRC = ((TempBCD >> 8) + TempBCD) % 256;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYHandshakeCRC = Tempu64 >> 4;
|
||
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun_Father].Handshake = 0x04;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
break;
|
||
case 0x04: //
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake < 0x04) // 等待握手
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake++;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == 0x04) // 如果三次没有收到握手,跳过
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0a;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == 0x04) // 收到握手,开始验证
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x05;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x09;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x09)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0a;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0d)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0e;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0e)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0f;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x10)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x11;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdPoll;
|
||
for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0)
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need != LY_MDConnectCmdPoll)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need != LY_MDConnectCmdReadState)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
else
|
||
{
|
||
if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadTotal;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 0x15: // 失败
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
break;
|
||
case 0x3630: // 握手2
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x09;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
}
|
||
break;
|
||
case 0x3632: // 报错信息
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
}
|
||
}
|
||
break;
|
||
case 0x3631: // 状态
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][23] >= 0x31)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow = MD_Connect_RX_Buff[MD_ConnectRX_Port][23] - 0x31;
|
||
else
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow = 0;
|
||
DeviceNumber = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow; // 根据当前子设备所在的付设备中的位置,推算设备号
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
// if(TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State)
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30 && TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].LYGunState == 0x31)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].LYGunState == 0x33)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadTotal;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0;
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x31 && TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 1;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0;
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber = 0x00;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FatherNum;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresteType = Preset_Sale;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresetValue = 0x90000000;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdAuthorize;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call == 1)
|
||
{
|
||
// if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FatherNum;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresteType = Preset_Sale;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresetValue = 0x90000000;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdAuthorize;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber = 0x00;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x33)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag == 0)
|
||
{
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadState;
|
||
}
|
||
else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x34 && TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.ON_OFF = 1;//加个定时器,用来判断是否完成交易记录的生成
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.TimerCountMax = 1000*5;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
}
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 6] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData.OilCNT = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 13] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 17] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData.MoneyCNT = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].LYGunState = MD_Connect_RX_Buff[MD_ConnectRX_Port][5];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].fuelState_B.State = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.State;
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
// TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll;
|
||
for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++)
|
||
{
|
||
if (i != TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.State = 0;
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1;
|
||
}
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 0;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState == 1 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 1;
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun;
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 0x3635: // 累计
|
||
{
|
||
for (Temp8 = 0; Temp8 < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; Temp8++)
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 10; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 11 + Temp8 * 20] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + Temp8].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 10; i++)
|
||
{
|
||
Tempu64 = Tempu64 << 4;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 21 + Temp8 * 20] - 0x30;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + Temp8].CTOTAL.TotalMoney = Tempu64;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
}
|
||
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top || TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag == 1)
|
||
{
|
||
//TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
DeviceNumber = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow + TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart; // 根据当前子设备所在的付设备中的位置,推算设备号
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun;
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 0;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CardNumber[i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.ON_OFF = 0;//加个定时器,用来判断是否完成交易记录的生成
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.TimerCount = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber;
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0c)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0d;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadState;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case PosBlueSkyPlus: // TXHData.LoopGunNextFlag
|
||
{
|
||
MD_ConnectRX_pGun = MD_Connect_BCDTou64(MD_Connect_RX_Buff[MD_ConnectRX_Port][1]); // 提取指令抢号
|
||
for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDeviceTop; DeviceNumber++)
|
||
if (MD_ConnectRX_pGun == MD_Connect_u64ToBCD(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[DeviceNumber].Address))
|
||
{
|
||
MD_ConnectRX_pGun_Father = DeviceNumber;
|
||
break;
|
||
}
|
||
MD_ConnectRX_Len = (MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][3];
|
||
Temp16 = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len);
|
||
if (Temp16 == ((MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1]))
|
||
{
|
||
TXHData.RNGData = (MD_Connect_RX_Buff[MD_ConnectRX_Port][10] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][11] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][12] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][13];
|
||
Bluesky_Decrypt(&MD_Connect_RX_Buff[MD_ConnectRX_Port][14], MD_ConnectRX_Len - 14, TXHData.RNGData);
|
||
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCountMax;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun_Father] = 0;
|
||
MD_ConnectRX_CMDType = MD_Connect_RX_Buff[MD_ConnectRX_Port][15];
|
||
Offset = 16;
|
||
if (MD_ConnectRX_CMDType == 0xA1) // 机指令
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = 0;
|
||
MD_ConnectRX_CMD = MD_ConnectRX_CMDType = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case LTP_DriverCMDReadPassword: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Password_Lever = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Password = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 24) |
|
||
(MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) |
|
||
(MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) |
|
||
MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
}
|
||
break;
|
||
case LTP_DriverCMDWritePassword: //
|
||
{
|
||
}
|
||
break;
|
||
case LTP_DriverCMDReadVerAndMac: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.VersionFindFlag = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i];
|
||
Offset += 10;
|
||
for (i = 0; i < 12; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Mac[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i];
|
||
Offset += 12;
|
||
for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; DeviceNumber++) // 同一父设备下的子设备,握手状态同步
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber].Handshake = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber].GunVersion.VersionFindFlag = 1;
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber].GunVersion.Version[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i];
|
||
}
|
||
}
|
||
break;
|
||
case LTP_DriverCMDLock: //
|
||
{
|
||
}
|
||
break;
|
||
case LTP_DriverCMDUnlock: //
|
||
{
|
||
}
|
||
break;
|
||
case LTP_DriverCMDSendFrame: //
|
||
{
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCountMax = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.MBCountTime * 10; // 周期;//周期调整ms
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].FrameNow = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + 1]);
|
||
Offset += 2;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].FrameNow >= TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData.FrameTop)
|
||
{
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun_Father] = 6; // 离线
|
||
}
|
||
else
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LTP_DriverCMDSendFrame;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
else if (MD_ConnectRX_CMDType == 0xA2) // 枪指令
|
||
{
|
||
|
||
for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; DeviceNumber++)
|
||
{
|
||
MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber; //
|
||
Offset++; // 抢号
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
DeviceDataLen = Offset++; // 长度
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case LTP_GunCMDReadStateAndData: //
|
||
{
|
||
TXHData.LTGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
if (TXHData.LTGunState.Flag.StartFlag == 1 || TXHData.LTGunState.Flag.GunUp == 0) // 提枪或者加油
|
||
{
|
||
MD_ConnectRX_pGun_SonDeviceBusy = 1;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]));
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]));
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]);
|
||
}
|
||
case LTP_GunCMDReadState: //
|
||
{
|
||
if (MD_ConnectRX_CMD == LTP_GunCMDReadState) //
|
||
{
|
||
TXHData.LTGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
if (TXHData.LTGunState.Flag.StartFlag == 1 || TXHData.LTGunState.Flag.GunUp == 0) // 提枪或者加油
|
||
{
|
||
MD_ConnectRX_pGun_SonDeviceBusy = 1;
|
||
}
|
||
if (DeviceNumber == (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber - 1))
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online == 1 && MD_ConnectRX_pGun_SonDeviceBusy == 0)
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart].ROM_UpData_State.Flag.Update_Flag == 0)
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.VersionFindFlag)
|
||
{
|
||
for (i = 0; i < 6; i++) // 判断是不是同一个系列
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i == 6)
|
||
{
|
||
for (i = 6; i < 10; i++) // 判断版本号是不是相同
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i])
|
||
break;
|
||
if (i != 10)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].FrameNow = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart].ROM_UpData_State.Flag.Update_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LTP_DriverCMDSendFrame;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp;
|
||
if (TXHData.LTGunState.Flag.StartFlag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1)
|
||
{
|
||
// sprintf(Buff,"%d-AuthorizeState = 1",MD_ConnectRX_pGun);
|
||
// Log_Task(Buff,TrueCharBuffSize(Buff),MD_ConnectRX_Port,Info_String);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = 1;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal;
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.LTGunState.Flag.StartFlag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadStateAndData;
|
||
if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number)
|
||
{
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0x11;
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// sprintf(Buff,"%d-WaitPREXDATA_flag = 1",MD_ConnectRX_pGun);
|
||
// Log_Task(Buff,TrueCharBuffSize(Buff),MD_ConnectRX_Port,Info_String);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000 * 5;
|
||
if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number)
|
||
{
|
||
TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.UpdateDisplay = 0;
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0;
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo;
|
||
}
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag;
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪
|
||
{
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) // 已经授权了,但是没有启动直接挂枪,同样要走结算流程
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000 * 5;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
}
|
||
else // 提枪
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1;
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0;
|
||
}
|
||
if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权
|
||
{
|
||
if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDAuthorize;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0;
|
||
for (i = 0; i < 15; i++)
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0;
|
||
}
|
||
else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1)
|
||
{
|
||
if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过
|
||
{
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDAuthorize;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
}
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal;
|
||
}
|
||
if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LTP_GunCMDReadState)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadStateAndData;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case LTP_GunCMDReadTotal: //
|
||
{
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64;
|
||
Tempu64 = 0;
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
Tempu64 <<= 8;
|
||
Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64;
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置
|
||
if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录
|
||
|| (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录
|
||
|| TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6
|
||
for (i = 0; i < 10; i++)
|
||
TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0;
|
||
AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5);
|
||
FMItemWrite(CF_PREXDATA_TTC, 0);
|
||
if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)
|
||
TXHData.PREXDATA_WaitUpNummber++;
|
||
FMItemWrite(CF_PREXDATA_WaitUpNummber, 0);
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i];
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1;
|
||
TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber;
|
||
for (i = 0; i < 6; i++)
|
||
TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i];
|
||
}
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL;
|
||
TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData;
|
||
TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber;
|
||
TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME;
|
||
TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price;
|
||
|
||
FMItemWrite(CF_PrintLastRecord, Tempu64);
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCount = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 0;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
// sprintf(Buff,"%d-WaitPREXDATA_flag = 0",MD_ConnectRX_pGun);
|
||
// Log_Task(Buff,TrueCharBuffSize(Buff),MD_ConnectRX_Port,Info_String);
|
||
}
|
||
else
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
}
|
||
}
|
||
break;
|
||
case LTP_GunCMDWritePrset: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDAuthorize: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1;
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset] == 0x59)
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1;
|
||
else
|
||
TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0;
|
||
FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port);
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDStop: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDContinue: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDSuspend: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDReadEvent: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDReadError: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDReadParameter: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
case LTP_GunCMDWriteParameter: //
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState;
|
||
Offset += DeviceDataLen;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case PosPLC:
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x03)
|
||
{
|
||
MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2];
|
||
Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 3];
|
||
TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len + 3);
|
||
if (Tempu64 == TempBCD)
|
||
{
|
||
TXHData.CNGPLCState.Flag.Online = 1;
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][0] = 0;
|
||
MD_ConnectRX_CMD = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next;
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case PLC_MDConnectCmdReadData:
|
||
{
|
||
for (i = 0; i < MD_ConnectRX_Len; i += 4)
|
||
{
|
||
TXHData.CNGPLCData.Buff[i + 0] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 3];
|
||
TXHData.CNGPLCData.Buff[i + 1] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 2];
|
||
TXHData.CNGPLCData.Buff[i + 2] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 1];
|
||
TXHData.CNGPLCData.Buff[i + 3] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 0];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = PLC_MDConnectCmdReadErro;
|
||
}
|
||
break;
|
||
case PLC_MDConnectCmdReadErro:
|
||
{
|
||
for (i = 0; i < MD_ConnectRX_Len; i += 2)
|
||
{
|
||
TXHData.CNGPLCData.Buff[52 + i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 1];
|
||
TXHData.CNGPLCData.Buff[52 + i + 1] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i];
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = PLC_MDConnectCmdReadData;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case PosPrice1_4:
|
||
{
|
||
MD_ConnectRX_pGun = 0;
|
||
MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2];
|
||
TempBCD = Price_DataCheck(&MD_Connect_RX_Buff[MD_ConnectRX_Port][2], MD_ConnectRX_Len - 1);
|
||
Tempu64 = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1];
|
||
if (Tempu64 == TempBCD)
|
||
{
|
||
TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0;
|
||
MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][4];
|
||
switch (MD_ConnectRX_CMD)
|
||
{
|
||
case Price_MDConnectCmdWriteParameter: // 写参数
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdReadPrice;
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdReadParameter: // 读参数
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdReadPrice;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.State.Flag.Online = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.SingleOrDouble = MD_Connect_RX_Buff[MD_ConnectRX_Port][7];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.PriceNumber = MD_Connect_RX_Buff[MD_ConnectRX_Port][8];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length = MD_Connect_RX_Buff[MD_ConnectRX_Port][9];
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Brightness = MD_Connect_RX_Buff[MD_ConnectRX_Port][11];
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdWritePrice: // 写单价
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdReadPrice;
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdReadPrice: // 读单价
|
||
{
|
||
if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.State.Flag.UpdateDisplay = 1;
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top;
|
||
}
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.State.Flag.Online = 1;
|
||
for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.PriceNumber; i++)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Price[i] = 0;
|
||
for (j = 0; j < TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length / 2; j++)
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Price[i] |= MD_Connect_RX_Buff[MD_ConnectRX_Port][5 + j + i * TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length / 2] << (8 * (TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length / 2 - 1 - j));
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case Price_MDConnectCmdWriteDecimal: // 写小数位
|
||
{
|
||
TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdWritePrice;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
for (i = 0; i < 20; i++)
|
||
MD_Connect_RX_Buff[MD_ConnectRX_Port][i] = 0;
|
||
}
|
||
else if (TXHData.MDConnectState[MD_ConnectRX_Port].Flag.WorkMode == 0) // WiFi指令模式
|
||
{
|
||
switch (TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext)
|
||
{
|
||
case WIFI_ATRec:
|
||
{
|
||
Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK");
|
||
if (Temp16)
|
||
{
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0;
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1;
|
||
TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WMODE;
|
||
}
|
||
}
|
||
break;
|
||
case WIFI_WMODE:
|
||
{
|
||
Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK");
|
||
if (Temp16)
|
||
{
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0;
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1;
|
||
TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiRST;
|
||
}
|
||
}
|
||
break;
|
||
case WIFI_WifiWSSSID:
|
||
{
|
||
Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK");
|
||
if (Temp16)
|
||
{
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0;
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1;
|
||
TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiSOCKET;
|
||
}
|
||
}
|
||
break;
|
||
case WIFI_WifiRSSI:
|
||
{
|
||
// Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port],"atus:");
|
||
// if(Temp16)
|
||
{
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0;
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1;
|
||
TXHData.POS_Info.WiFiRSSI = MD_Connect_BCDTou64(((MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 5] - 0x30) << 4) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 6] - 0x30));
|
||
Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], ",");
|
||
if (Temp16)
|
||
{
|
||
if (MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 1] >= 0x30)
|
||
TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(((MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16] - 0x30) << 4) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 1] - 0x30));
|
||
else
|
||
TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16] - 0x30);
|
||
}
|
||
TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiSOCKET;
|
||
}
|
||
}
|
||
break;
|
||
case WIFI_WifiSOCKET:
|
||
{
|
||
Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK");
|
||
if (Temp16)
|
||
{
|
||
BEEP_OFF;
|
||
TXHData.MDConnectState[MD_ConnectRX_Port].Flag.WorkMode = 1;
|
||
TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCountMax = 1000;
|
||
}
|
||
}
|
||
break;
|
||
case WIFI_WifiRST:
|
||
{
|
||
Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK");
|
||
if (Temp16)
|
||
{
|
||
TXHData.POSNetSetState.Flag.WorkMode = 0;
|
||
TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiWSSSID;
|
||
// TXHData.POSNetSetState.Flag.POSNetSetNeedFlag = 0;
|
||
TXHData.POSReLinkTimer.Flag = 0;
|
||
TXHData.POSReLinkTimer.TimerCount = 0;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|