/*C***************************************************************************** * NAME: .c *------------------------------------------------------------------------------- * RELEASE: * REVISION: 1.0 *------------------------------------------------------------------------------- * PURPOSE: * *******************************************************************************/ /*_____ I N C L U D E S ______________________________________________________*/ #include "config.h" //全局声明 /*_____ M A C R O S __________________________________________________________*/ const char TsatURL[] = "AT+SOCKA=TCP,test.joyfueling.com,7011\r\n"; /*_____ D E F I N I T I O N ___________________AT+ GPSDTTY=”type”_______________________________*/ const char CMD_LinkMode[] = "AT+WKMOD=NET\r\n"; const char CMD_UARTFL[] = "AT+UARTFL=4096\r\n"; const char CMD_HEARTEN[] = "AT+HEARTEN=OFF\r\n"; const char CMD_Save[] = "AT+S\r\n"; const char CMD_ATRec[] = "AT+E=OFF\r\n"; const char CMD_Model_Set[] = "usr.cn#"; const char CMD_Model_Set_1[] = "+++"; const char CMD_Model_Set_2[] = "a"; const char CMD_Model_NET[] = "AT+ENTM\r\n"; const char CMD_ICCID[] = "AT+ICCID?\r\n"; const char CMD_IMEI[] = "AT+IMEI?\r\n"; const char CMD_CSQ[] = "AT+CSQ?\r\n"; char CMD_APN[50] = "AT+APN="; const char NextStr[] = "\r\n\0"; /***********************USR-K3*************************/ const char WlanTsatURL[] = "AT+SOCKB1=TCPC,test.joyfueling.com,7011\r\n"; const char CMD_Reset[] = "AT+Z\r\n"; const char CMD_DHCP[] = "AT+WANN=DHCP\r\n"; const char CMD_GetIP[] = "AT+WANN\r\n"; const char CMD_GetLinkState[] = "AT+SOCKLKB1\r\n"; /***********************WIFI*************************/ const char CMD_WifiWSSSID[] = "AT+WIFI=KFB-2.4G,KFB123456\r\n"; const char CMD_WifiWSSSID_WIFIStation[] = "AT+WIFI=THX-HD4-2.4,KFB123456\r\n"; const char CMD_WifiSOCKET[] = "AT+Socket=0,0,test.joyfueling.com,7011\r\n"; const char CMD_WifiSOCKET_WIFIStation[] = "AT+Socket=0,0,192.168.14.100,7011\r\n"; const char CMD_WifiRSSI[] = "AT+CWJAP?\r\n"; const char CMD_WifiRST[] = "AT+RES\r\n"; /*******************************L510指令*****************************/ const char CMD_L510_AT[] = "+++"; // 关闭回显 const char CMD_L510_ATRec[] = "ATE0\r\n"; // 关闭回显 192.168.50.206 const char CMD_L510_IMEI[] = "AT+CGSN\r\n"; // 获取IMEI码 const char CMD_L510_ICPIN[] = "AT+CPIN?\r\n"; // 是否识别到卡 const char CMD_L510_ICCID[] = "AT+ICCID\r\n"; // 获取IMEI码 const char CMD_L510_RSSI[] = "AT+CSQ\r\n"; // 获取信号强度 (1-31) const char CMD_L510_Model_NET[] = "AT+CIPMODE=1\r\n"; // 开启透传模式 const char CMD_L510_APN[] = "AT+QICSGP=1,1,\"CMNET\",\"\",\"\"\r\n"; const char CMD_L510_NETOPEN[] = "AT+NETOPEN\r\n"; const char CMD_L510_SOCKET[] = "AT+CIPOPEN=0,\"TCP\",\"test.joyfueling.com\",7011\r\n"; const char CMD_L510_GetLinkState[] = "AT+CIPOPQUERY?\r\n"; const char CMD_L510_RESET[] = "AT+RESET\r\n"; const char CMD_L510_SetGPSMode[] = "AT+GETGPS=GNRMC,0\r\n"; const char CMD_L510_GetGPS[] = "AT+MGPSC=1\r\n"; volatile u8 POS_Connect_TX_Buff[2000] = {0, 1, 2, 3, 4, 5, 6, 7}; // 数据发送缓存 volatile u8 POS_Connect_RX_Buff[2000]; volatile u8 POS2MD_Buff[2000]; // pos的回复转接到wifi从机 volatile u8 POS_Connect_TX_Flag = 1; // 接收任务可以运行标志 typedef struct OperCodeStr { char Country[64]; // 所在国家 char Str[64]; // 运营商名字 char ICCID[10]; // ICCID的前7位 char APN[64]; // 运营商对应的APN } OperCodeStrType; const OperCodeStrType Operators[] = { {"默认", "default", "890000", "internet"}, {"中国", "ChinaMobile", "898600", "CMNET"}, {"中国", "ChinaMobile", "898602", "CMNET"}, {"中国", "ChinaMobile", "898604", "CMNET"}, {"中国", "ChinaTelecom", "898607", "CMNET"}, {"中国", "ChinaUnicom", "898601", "UNINET"}, {"中国", "ChinaUnicom", "898606", "UNINET"}, {"中国", "ChinaUnicom", "898609", "UNINET"}, {"中国", "ChinaTelecom", "898603", "CTNET"}, {"中国", "ChinaTelecom", "898611", "CTNET"}, {"沙特", "STC", "8996601", "jawalnet.com.sa"}, {"科威特", "STC", "8996504", "VIVA"}, {"科威特", "Ooredoo", "8996503", "Action.ooredoo.com"}, {"科威特", "zain", "899659", "HSPPS"}, {"泰国", "AIS", "89660", "internet"}, {"缅甸", "Vietna", "898405", "Metfone"}, {"缅甸", "Mobifone", "898401", "smart"}, {"缅甸", "Viettel", "898404", "smart"}, {"缅甸", "VINA", "898402", "smart"}, {"柬埔寨", "Metfone", "8985508", "Metfone"}, {"柬埔寨", "Smart", "8985502", "smart"}, {"柬埔寨", "Smart", "8985505", "smart"}, {"柬埔寨", "Smart", "8985506", "smart"}, {"孟加拉", "Bobi", "898800", "internet"}, {"孟加拉", "Grameenphone", "898801", "gpinternet"}, {"孟加拉", "Banglalink", "898803", "blweb"}, {"印度", "Airtel", "899100", "airtelgprs.com"}, {"印度", "Airtel", "899110", "airtelgprs.com"}, {"印度", "Airtel", "899131", "airtelgprs.com"}, {"印度", "Airtel", "899140", "airtelgprs.com"}, {"印度", "Airtel", "899145", "airtelgprs.com"}, {"印度", "Airtel", "899149", "airtelgprs.com"}, {"印度", "Airtel", "899151", "airtelgprs.com"}, {"印度", "Airtel", "899152", "airtelgprs.com"}, {"印度", "Airtel", "899153", "airtelgprs.com"}, {"印度", "Airtel", "899154", "airtelgprs.com"}, {"印度", "Airtel", "899155", "airtelgprs.com"}, {"印度", "Airtel", "899156", "airtelgprs.com"}, {"印度", "Airtel", "899190", "airtelgprs.com"}, {"印度", "Airtel", "899192", "airtelgprs.com"}, {"印度", "Airtel", "899193", "airtelgprs.com"}, {"印度", "Airtel", "899194", "airtelgprs.com"}, {"印度", "Airtel", "899195", "airtelgprs.com"}, {"印度", "Airtel", "899196", "airtelgprs.com"}, {"印度", "Airtel", "899197", "airtelgprs.com"}, {"印度", "Airtel", "899198", "airtelgprs.com"}, {"印度", "Airtel", "899102", "airtelgprs.com"}, {"印度", "Airtel", "899103", "airtelgprs.com"}, {"印度", "Idea", "899189", "airtelgprs.com"}, {"印度", "Idea", "8991799", "airtelgprs.com"}, {"印度", "Idea", "8991845", "airtelgprs.com"}, {"印度", "Idea", "8991846", "airtelgprs.com"}, {"印度", "Idea", "8991848", "airtelgprs.com"}, {"印度", "Idea", "8991849", "airtelgprs.com"}, {"印度", "Idea", "8991850", "airtelgprs.com"}, {"印度", "Idea", "8991852", "airtelgprs.com"}, {"印度", "Idea", "8991853", "airtelgprs.com"}, {"印度", "Idea", "899104", "airtelgprs.com"}, {"印度", "Idea", "899107", "airtelgprs.com"}, {"印度", "Idea", "899112", "airtelgprs.com"}, {"印度", "Idea", "899114", "airtelgprs.com"}, {"印度", "Idea", "899119", "airtelgprs.com"}, {"印度", "Idea", "899122", "airtelgprs.com"}, {"印度", "Idea", "899124", "airtelgprs.com"}, {"印度", "Idea", "899144", "airtelgprs.com"}, {"印度", "Idea", "899156", "airtelgprs.com"}, {"印度", "Idea", "899170", "airtelgprs.com"}, {"印度", "Idea", "899178", "airtelgprs.com"}, {"印度", "Idea", "899182", "airtelgprs.com"}, {"印度", "Idea", "899187", "airtelgprs.com"}, {"印度", "Jio", "8991840", "Jionet"}, {"印度", "Jio", "8991854", "Jionet"}, {"印度", "Jio", "8991855", "Jionet"}, {"印度", "Jio", "8991856", "Jionet"}, {"印度", "Jio", "8991857", "Jionet"}, {"印度", "Jio", "8991858", "Jionet"}, {"印度", "Jio", "8991859", "Jionet"}, {"印度", "Jio", "8991860", "Jionet"}, {"印度", "Jio", "8991861", "Jionet"}, {"印度", "Jio", "8991862", "Jionet"}, {"印度", "Jio", "8991863", "Jionet"}, {"印度", "Jio", "8991864", "Jionet"}, {"印度", "Jio", "8991865", "Jionet"}, {"印度", "Jio", "8991866", "Jionet"}, {"印度", "Jio", "8991867", "Jionet"}, {"印度", "Jio", "8991868", "Jionet"}, {"印度", "Jio", "8991869", "Jionet"}, {"印度", "Jio", "8991870", "Jionet"}, {"印度", "Jio", "8991871", "Jionet"}, {"印度", "Jio", "8991872", "Jionet"}, {"印度", "Jio", "8991873", "Jionet"}, {"印度", "Jio", "8991874", "Jionet"}, {"厄瓜多尔", "MOVISTAR", "8959300", "internet.movistar.com.ec"}, {"厄瓜多尔", "Claro", "8959301", "internet.claro.com.ec"}, {"厄瓜多尔", "CNT", "8959302", "internet.cnt.net.ec"}, }; /*_____ D E C L A R A T I O N ____________________________internet.movistar.com.ec____________________*/ u16 crc16(u8 *puchMsg, u16 usDataLen); const u8 auchCRCHi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0 /**/, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40}; const u8 auchCRCLo[] = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06 /**/, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40}; u16 CRC_Check(u8 *puchMsg, u16 usDataLen) { u8 uchCRCHi = 0xFF; u8 uchCRCLo = 0xFF; u16 uIndex; while (usDataLen--) { uIndex = uchCRCHi ^ *puchMsg++; uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex]; uchCRCLo = auchCRCLo[uIndex]; } return (uchCRCLo << 8 | uchCRCHi); } u16 DartCRC16(u8 *puchMsg, u16 usDataLen) { u8 uchCRCHi = 0x00; u8 uchCRCLo = 0x00; u16 uIndex; while (usDataLen--) { uIndex = uchCRCHi ^ *puchMsg++; uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex]; uchCRCLo = auchCRCLo[uIndex]; } return (uchCRCLo << 8 | uchCRCHi); } u8 SUMCRC(u8 *puchMsg, u16 usDataLen) { u8 sum = 0x00; while (usDataLen--) { sum += *puchMsg++; } return (sum); } /**************************************************** 函数名:POS_Connect_IO_Configuration 功能 :通讯部分用到的IO初始化 参数 :无 返回值:无 ****************************************************/ void POS_Connect_IO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; 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(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // 100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // 上拉 GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化 } /**************************************************** 函数名:POS_Connect_NVPOS_Connect_Configuration 功能 :通讯部分用到的中断向量配置 参数 :无 返回值:无 ****************************************************/ void POS_Connect_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; // 定义中断配置结构体 NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream7_IRQn; // USART1_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 = USART1_IRQn; // USART?? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ???? NVIC_Init(&NVIC_InitStructure); //??NVIC_InitStruct???????????NVIC???USART1 } /**************************************************** 函数名:POS_Connect_NVPOS_Connect_Configuration 功能 :通讯部分用到的串口配置 参数 :无 返回值:无 ****************************************************/ void POS_Connect_USART_Configuration(u32 BaudRate) { USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitStructure.USART_BaudRate = BaudRate; // Baud;//????? USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); USART_ClearFlag(USART1, USART_FLAG_IDLE); USART_DMACmd(USART1, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); } /************************************************* 函数名 :DMA_Configuration() 功能 :DMA初始化 传入参数:无 返回值 :无 **************************************************/ void POS_Connect_DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); /*******************发送TX*********************/ DMA_DeInit(DMA2_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; 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)&USART1->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)POS_Connect_TX_Buff; DMA_Init(DMA2_Stream7, &DMA_InitStructure); DMA_ITConfig(DMA2_Stream7, DMA_IT_TC, ENABLE); /*******************RX*********************/ DMA_DeInit(DMA2_Stream5); DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 2000; 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)&USART1->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)POS_Connect_RX_Buff; DMA_Init(DMA2_Stream5, &DMA_InitStructure); DMA_Cmd(DMA2_Stream5, ENABLE); } // F***************************************************************************** //* NAME: POS_Connect_DMATX_IRQHandler //* PURPOSE: 通讯DMA发送完成中断 //* PARAMS: 无 //* return: 无 //****************************************************************************** void POS_Connect_DMATX_IRQHandler(void) { u16 i = 0; DMA_ClearFlag(DMA2_Stream7, DMA_IT_TCIF7); POS_Connect_TX_DMAStop(); // 关闭DMA传输 } // F***************************************************************************** //* NAME: POS_Connect_DMARX_IRQHandler //* PURPOSE: DMA传输完成中断,Gas ModBus //* PARAMS: 无 //* return: 无 //****************************************************************************** void POS_Connect_DMARX_IRQHandler(void) { u8 i = 0; if (USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) //????????? { USART_ClearFlag(USART1, USART_IT_IDLE); POS_Connect_RX_DMAStop(); // 关闭DMA接收 DMA_ClearFlag(DMA2_Stream5, DMA_IT_TCIF5); TXHData.POS_Info.POS_ConnectRXTask_Flag = 1; // 使能接收任务 i = USART1->SR; i = USART1->DR; TXHData.PCMail_RX_Len = 2000 - DMA2_Stream5->NDTR; POS_Connect_RX_DMALenSet(2000); POS_Connect_RX_DMAStart(); // 打开DMA传输()长度在选择发送队列时设置 } } // F***************************************************************************** //* NAME: POS_Connect_u64ToBCD //* PURPOSE: 用于u64类型转成BCD码类型 //* PARAMS: pData要转换的数据,Len长度 //* return: BCD类型 //****************************************************************************** u64 POS_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; } // 初始化队列 void InitQueue(MessageQueue_Type *Queue) { Queue->Front = 0; Queue->Rear = 0; } // 入队操作 void EnQueue(MessageQueue_Type *Queue, u8 Content, u8 Priority) { Message_Type *Message; int i = Queue->Rear; // 从队尾开始遍历 // 按照优先级插入 while (i != Queue->Front && Priority > Queue->Messages[(i - 1 + QUEUE_SIZE) % QUEUE_SIZE].Priority) { Queue->Messages[i] = Queue->Messages[(i - 1 + QUEUE_SIZE) % QUEUE_SIZE]; // 后移一位 i = (i - 1 + QUEUE_SIZE) % QUEUE_SIZE; } Queue->Messages[i].Content = Content; Queue->Messages[i].Priority = Priority; Queue->Rear = (Queue->Rear + 1) % QUEUE_SIZE; // 队尾指针后移 } // 出队操作 Message_Type *DeQueue(MessageQueue_Type *Queue) { Message_Type *Message; if (Queue->Front != Queue->Rear) { Message = &Queue->Messages[Queue->Front]; Queue->Front = (Queue->Front + 1) % QUEUE_SIZE; return Message; } else { Message->Content = 0; return Message; } } // 查询队列中是不是包含特定消息 u8 FindMessage(MessageQueue_Type *Queue, u8 Content) { u8 i = 0; for (i = 0; i < QUEUE_SIZE; i++) { if (Queue->Messages[i].Content == Content) { return Queue->Messages[i].Priority; } } return 0; } void POS_Network_APN_Set(void) { char CMD[50] = "AT+APN="; u32 i = 0; u16 Temp = 0; u32 numElements = 0; u32 strllen = 0; if ((TXHData.POS_Info.ConnectType != POS_Connect_Typ_Station)) { BEEP = 1; TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_Model_Set_2); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_2[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); delay_ms(500); TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_Model_NET); i++) POS_Connect_TX_Buff[i] = CMD_Model_NET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); delay_ms(1000); TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_Model_Set_1); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_1[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); delay_ms(1000); TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_Model_Set_2); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_2[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); delay_ms(1000); { strcat(CMD, (const char *)TXHData.POSData.WirelessData.APN); strcat(CMD, NextStr); TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen((char *)&CMD); i++) POS_Connect_TX_Buff[i] = CMD[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); }; delay_ms(1000); TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < sizeof(CMD_Save); i++) POS_Connect_TX_Buff[i] = CMD_Save[i]; POS_Connect_TX_DMALenSet(i - 1); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); delay_ms(100); BEEP = 0; } } void POS_WIFIReconnect(void) { u32 i = 0, j = 0; u16 Temp = 0; u32 numElements = 0; u32 strllen = 0; u16 StartLen = 0, EndLen = 0; for (i = 0; i < 100; i++) POS_Connect_TX_Buff[i] = 0; TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < 8; i++) POS_Connect_TX_Buff[i] = CMD_WifiWSSSID[i]; for (i = 0; i < strlen((const char *)TXHData.POSData.WirelessData.WiFIName); i++) POS_Connect_TX_Buff[8 + i] = TXHData.POSData.WirelessData.WiFIName[i]; POS_Connect_TX_Buff[8 + i] = ','; j = 8 + i + 1; for (i = 0; i < strlen((const char *)TXHData.POSData.WirelessData.WiFIPassWord); i++) POS_Connect_TX_Buff[j + i] = TXHData.POSData.WirelessData.WiFIPassWord[i]; strcat(POS_Connect_TX_Buff, "\r\n\0"); POS_Connect_TX_DMALenSet(strlen((const char *)POS_Connect_TX_Buff)); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); while (!TXHData.POS_Info.POS_ConnectRXTask_Flag) { delay_ms(1); i++; if (i > 100) break; } if (POS_URL == SWF_ON) // 测试服务器 { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_WifiSOCKET); i++) POS_Connect_TX_Buff[i] = CMD_WifiSOCKET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); while (!TXHData.POS_Info.POS_ConnectRXTask_Flag) { delay_ms(1); i++; if (i > 100) break; } } else { for (i = 0; i < 100; i++) POS_Connect_TX_Buff[i] = 0; TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < 14; i++) POS_Connect_TX_Buff[i] = CMD_WifiSOCKET[i]; // const char CMD_WifiSOCKET[]="AT+Socket=0,0,test.joyfueling.com,7011\r\n"; StartLen = strlen((const char *)TXHData.POSData.WirelessData.CMD_SOCKA); if (StartLen) { for (i = 0; i < StartLen; i++) POS_Connect_TX_Buff[14 + i] = TXHData.POSData.WirelessData.CMD_SOCKA[i]; strcat(POS_Connect_TX_Buff, "\r\n\0"); } POS_Connect_TX_DMALenSet(strlen((const char *)POS_Connect_TX_Buff)); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } while (!TXHData.POS_Info.POS_ConnectRXTask_Flag) { delay_ms(1); i++; if (i > 100) break; } } void POS_Connect_Init(void) { u32 i = 0; u8 Temp = 0; POS_Connect_IO_Configuration(); POS_Connect_DMA_Configuration(); POS_Connect_USART_Configuration(115200); POS_Connect_NVIC_Configuration(); RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE); // 开启 RNG 时钟 RNG_Cmd(ENABLE); // 使能 RNG delay_ms(1000); // InitQueue(&TXHData.POS_TX_MessageQueue); // 数据上传永远占据最低优先,并且不会被移除队列,其余指令优先级不能低于2,否则可能不会被执行 // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_SynchronizationTime,Message_Priority_3); // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_FuelData,Message_Priority_1); TXHData.POS_Info.POS_CMD_Next = POSConnect_SynchronizationTime; TXHData.POS_Info.Link_Flag = 0; TXHData.ReSendDataTimer.Init = 0; // 清除初始化标志 TXHData.ReSendDataTimer.Flag = 0; // 清除到时标志 TXHData.ReSendDataTimer.ON_OFF = 0; // 打开 TXHData.ReSendDataTimer.Cycle = 0; // 设置为循环模式,发送时启动 TXHData.ReSendDataTimer.TimerCountMax = 1000 * 1; // 周期1秒 TXHData.POSCutTimer.Init = 0; // 清除初始化标志 TXHData.POSCutTimer.Flag = 1; // 清除到时标志 TXHData.POSCutTimer.ON_OFF = 1; // 打开 TXHData.POSCutTimer.Cycle = 1; // 设置为循环模式,发送时启动ssssssssss/dddd TXHData.POSCutTimer.TimerCountMax = 8000; // 周期8秒 TXHData.HeartbeatTimer.Init = 0; // 清除初始化标志 TXHData.HeartbeatTimer.Flag = 0; // 清除到时标志 TXHData.HeartbeatTimer.ON_OFF = 1; // 打开 TXHData.HeartbeatTimer.Cycle = 1; // 设置为循环模式,发送时 TXHData.HeartbeatTimer.TimerCountMax = 1000 * 1; // 周期1秒 TXHData.DelayDetectionTimer.Init = 0; // 清除初始化标志 TXHData.DelayDetectionTimer.Flag = 0; // 清除到时标志 TXHData.DelayDetectionTimer.ON_OFF = 0; // 打开 TXHData.DelayDetectionTimer.Cycle = 0; // 设置为循环模式,发送时 TXHData.DelayDetectionTimer.TimerCountMax = 1000; // 周期10秒 TXHData.POS_RS232Timer.Init = 0; // 清除初始化标志 TXHData.POS_RS232Timer.Flag = 1; // 清除到时标志 TXHData.POS_RS232Timer.ON_OFF = 1; // 打开 TXHData.POS_RS232Timer.Cycle = 1; // 设置为循环模式,发送时启动cc/ TXHData.POS_RS232Timer.TimerCountMax = 500; // 周期0.5秒 TXHData.POSReLinkTimer.Init = 0; // 清除初始化标志 TXHData.POSReLinkTimer.Flag = 0; // 清除到时标志 TXHData.POSReLinkTimer.ON_OFF = 1; // 打开 TXHData.POSReLinkTimer.Cycle = 1; // 设置为循环模式,发送时启动cc/ TXHData.POSReLinkTimer.TimerCountMax = 1000 * 70; // 周期0.5秒 for (i = 0; i < 4; i++) { TXHData.MDRestartTimer[i].Init = 0; // 清除初始化标志 TXHData.MDRestartTimer[i].Flag = 0; // 清除到时标志 TXHData.MDRestartTimer[i].ON_OFF = 1; // 打开 TXHData.MDRestartTimer[i].Cycle = 0; // 设置为循环模式,发送时启动 TXHData.MDRestartTimer[i].TimerCountMax = 11000; // 周期10秒 } TXHData.POS_Info.WiFiRSSI = 0; if (TXHData.POSData.POSConnectTyye.Flag.ConnectMode > 0) TXHData.POS_Info.ConnectType = TXHData.POSData.POSConnectTyye.Flag.ConnectMode - 1; if (TXHData.POSData.POSConnectTyye.Flag.NetworkSet > 0) TXHData.POS_Info.NetType = TXHData.POSData.POSConnectTyye.Flag.NetworkSet - 1; if (TXHData.POS_Info.ConnectType == POS_Connect_Typ_Station) // 站级 { POSConnect_Station; TXHData.POSNetSetState.Flag.WorkMode = 1; } else { POSConnect_Cloud; } switch (TXHData.POS_Info.NetType) { case POS_Net_Typ_WAN: TXHData.POSReLinkTimer.TimerCountMax = 1000 * 30; POS_LinkA_Out = 0; break; case POS_Net_Typ_WiFi: TXHData.POSReLinkTimer.TimerCountMax = 1000 * 60; break; case POS_Net_Typ_4G_GM5: TXHData.POSReLinkTimer.TimerCountMax = 1000 * 60; break; case POS_Net_Typ_4G_L510: TXHData.POSReLinkTimer.TimerCountMax = 1000 * 60; POS_LinkA_Out = 0; TXHData.HeartbeatTimer.TimerCountMax = 1000 * 15; break; } STM32CPU.v.id[0] = *(u32 *)0x1fff7a10; STM32CPU.v.id[1] = *(u32 *)(0x1fff7a10 + 4); STM32CPU.v.id[2] = *(u32 *)(0x1fff7a10 + 8); for (i = 0; i < 20; i++) TXHData.POSData.WirelessData.IMEI[i] = 0; sprintf(&TXHData.POSData.WirelessData.IMEI[0], "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%", STM32CPU.v.byte[0], STM32CPU.v.byte[2], STM32CPU.v.byte[4], STM32CPU.v.byte[5], STM32CPU.v.byte[6], STM32CPU.v.byte[7], STM32CPU.v.byte[8], STM32CPU.v.byte[9], STM32CPU.v.byte[10], STM32CPU.v.byte[11]); if (FMItemWrite(CF_POSData, 0)) BEEP = 0; } void FToHA(u8 *Buff, float Temp) // 浮点数转换成字符串形式HEX,传进来是地址 { u8 HexToAsc[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46}; u8 i = 0; u8 *N; N = (u8 *)(&Temp); for (i = 0; i < 4; i++) { *(Buff + i * 2) = HexToAsc[*(N + 3 - i) >> 4]; *(Buff + i * 2 + 1) = HexToAsc[*(N + 3 - i) & 0x0f]; } } u8 FindCharFStr(u8 *Str, char Cha, u8 Num) { u8 i = 0, len = 0; for (; *Str; ++Str) { len++; if (Cha == *Str) i++; if (i == Num) return len; } return 0; } u8 Encrypt_Data(u8 Data, u8 Type, u8 Bit) { u16 Temp = 0; if (Bit > 0x7) Bit = 7; Temp = (Data << 8) | Data; if (Type == 0) { Temp = Temp >> Bit; return (Temp & 0xff); } else if (Type == 1) { Temp = Temp << Bit; Temp >>= 8; return (Temp & 0xff); } } u8 Decode_Data(u8 Data, u8 Type, u8 Bit) { u16 Temp = 0; if (Bit > 7) Bit = 7; Temp = (Data << 8) | Data; if (Type == 0) { Temp = Temp << Bit; Temp >>= 8; return (Temp & 0xff); } else if (Type == 1) { Temp = Temp >> Bit; return (Temp & 0xff); } } // F***************************************************************************** //* NAME: POS_ConnectTask //* PURPOSE: 通讯接收数据处理任务 //* PARAMS: 无 //* return: 无 //****************************************************************************** volatile u32 POS_RX_RNGData = 0; volatile u16 FrameNow = 0; volatile u8 FrameTimeout = 0; void POS_ConnectRXTask(void) { u16 POS_ConnectRX_CMD = 0; // 指令 u16 POS_ConnectRX_Len = 0; // 长度 u8 Temp8 = 0, Package = 0; u8 POS_ConnectRX_AuthorizeNum_Temp = 0; u16 POS_ConnectRX_Check = 0; // 校验变量 volatile u8 TimeLenOffset = 0, Encrypt_Flag1 = 0, Encrypt_Flag2 = 0; volatile u16 MD_Port_Num = 0, DeviceNumber = 0, MD_Port_Num_Top = 0, DeviceNumber_Top = 0, FrameTop = 0, Offset = 0, len = 0, WifiLenOffset = 0; u16 i = 0, j = 0, CRCTemp = 0, Temp16 = 0; u32 Temp32 = 0; if (TXHData.POSNetSetState.Flag.WorkMode == 1) // 透传模式 { while (TXHData.PCMail_RX_Len > 10) { Package++; // 第几包,如果有粘包,标识用 if (TXHData.POS_Info.NetType == POS_Net_Typ_WiFi && TXHData.POS_Info.ConnectType != POS_Connect_Typ_Station) WifiLenOffset = 7; if (POS_Connect_RX_Buff[WifiLenOffset + TimeLenOffset] == 0xFA) { TXHData.PosCTIME.Year = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 1]; TXHData.PosCTIME.Month = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 2]; TXHData.PosCTIME.Day = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 3]; TXHData.PosCTIME.Hour = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 4]; TXHData.PosCTIME.Min = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 5]; TXHData.PosCTIME.Sec = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 6]; if (TXHData.PosCTIME.Sec > TXHData.CTIME.Sec) Temp8 = MD_Connect_BCDTou64(TXHData.PosCTIME.Sec) - MD_Connect_BCDTou64(TXHData.CTIME.Sec); else Temp8 = MD_Connect_BCDTou64(TXHData.CTIME.Sec) - MD_Connect_BCDTou64(TXHData.PosCTIME.Sec); if ((Temp8 >= 5 && TXHData.PosCTIME.Sec < 0x54 && TXHData.PosCTIME.Sec > 0x6) && (TXHData.PosCTIME.Year >= 0x24 && TXHData.PosCTIME.Year <= 0x50)) { TXHData.CTIME = TXHData.PosCTIME; DS1307_Write(); } TimeLenOffset = 6; } POS_ConnectRX_Len = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 1] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 2]; // 提取长度码 Temp32 = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 3] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 4] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 5] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 6]; if (Temp32 != POS_RX_RNGData && POS_ConnectRX_Len < 2000 && POS_ConnectRX_Len > 0) // 随机码不能重复 // if(1)//随机码不能重复 { POS_RX_RNGData = Temp32; if (TXHData.PCMail_RX_Len > (WifiLenOffset + POS_ConnectRX_Len + 2 + 1)) { TXHData.PCMail_RX_Len = TXHData.PCMail_RX_Len - (POS_ConnectRX_Len + 2); } else { TXHData.PCMail_RX_Len = 0; } Temp16 = CRC_Check(&POS_Connect_RX_Buff[WifiLenOffset], POS_ConnectRX_Len); if (Temp16 == ((POS_Connect_RX_Buff[WifiLenOffset + POS_ConnectRX_Len] << 8) | POS_Connect_RX_Buff[WifiLenOffset + POS_ConnectRX_Len + 1])) // if(1)//随机码不能重复 { if (TXHData.UDisk_Flag) Log_Task(&POS_Connect_RX_Buff[WifiLenOffset], POS_ConnectRX_Len + 2, 4, Info_Receive); Encrypt_Flag1 = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 4] & 0x0f) % 2; Encrypt_Flag2 = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 6] & 0x0f) / 2; for (i = 0; i < POS_ConnectRX_Len - TimeLenOffset - 7; i++) POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 7 + i] = Decode_Data(POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 7 + i], Encrypt_Flag1, Encrypt_Flag2); // if(TXHData.UDisk_Flag) // Log_Task(&POS_Connect_RX_Buff[(WifiLenOffset) + 0],POS_ConnectRX_Len + 2,4,Info_Receive); POS_ConnectRX_CMD = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 7]; TXHData.POS_Info.Link_Flag = 1; TXHData.POSCutTimer.TimerCount = 0; TXHData.POSCutTimer.Flag = 0; TXHData.POSReLinkTimer.Flag = 0; TXHData.POSReLinkTimer.TimerCount = 0; TXHData.DelayDetection = TXHData.DelayDetectionTimer.TimerCount; TXHData.DelayDetectionTimer.Init = 1; if (TXHData.POS_Info.NetType == POS_Net_Typ_WAN || TXHData.POS_Info.NetType == POS_Net_Typ_4G_L510) POS_LinkA_Out = 1; Offset = 0; switch (POS_ConnectRX_CMD) { case POSConnect_FuelData: { if (TXHData.PREXDATA_WaitUpNummber) { TXHData.POS_Info.POS_CMD_Next = POSConnect_PREXDATAUp; } for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Port_Num_Top; MD_Port_Num++) { switch (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType) { case PosBlueSky: case PosLY: case PosJP: case PosDart: case PosYGao: case PosHongYang: case PosLanFeng: case PosSSLan: case PosBlueSkyPlus: { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].SlaveNeedReply = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; switch (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]) { case 0: { } break; case 1: { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; } break; case 2: { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 0; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].OrderNumber = 0; FMItemWrite(CF_MD_Port_Data, MD_Port_Num); for (i = 0; i < 20; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CardNumber[i] = 0; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CarLicensePlate[i] = 0; } break; } Offset++; } } break; case PosYWY: case PosPLC: case PosPrice1_4: { switch (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]) { case 0: { } break; case 1: { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; } break; case 2: { } break; } Offset++; } break; case PosRFID: { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].SlaveNeedReply = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; switch (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]) { case 0: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState == 0x10) // 加油中 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = 0; if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next != RFID_MDConnectCmdFindACK && TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next != RFID_MDConnectCmdLossACK) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; } Offset++; } break; case 1: // 通过 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; for (i = 0; i < 15; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDUserName[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + i + 1]; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CarLicensePlate[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + i + 16]; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].BalanceDecimal = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + 26]; for (i = 0; i < 5; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Balance[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + i + 27]; Offset += 32; } break; case 2: // 密码错误 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; Offset++; } break; case 4: // 无效卡 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; Offset++; } break; case 8: // 余额不足 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; Offset++; } break; case 0x10: // 实时余额 { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next != RFID_MDConnectCmdFindACK && TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next != RFID_MDConnectCmdLossACK) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].BalanceDecimal = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + 1]; for (i = 0; i < 5; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Balance[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + i + 2]; Offset += 7; } break; case 0x20: // 积分余额 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; for (i = 0; i < 4; i++) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Balance[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset + i + 1]; Offset += 5; } break; case 0x40: // 授权取消 { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.LockState = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; Offset++; } break; case 235: // case 236: // case 237: // case 238: // case 239: // case 240: // case 241: // case 242: // case 243: // case 244: // case 245: // case 246: // case 247: // case 248: // case 249: // case 250: // case 251: // case 252: // case 253: // case 254: // case 255: // { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].RFIDState = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; Offset++; } break; } } } break; } } if (TXHData.MD_Multiplex_Port_Data.DeviceNumber > 0) { for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Multiplex_Port_Data.DeviceNumber - 1; MD_Port_Num++) { /*设备类型:00无;04打印机;06液位仪;05单价牌*/ { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].SlaveNeedReply = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]; switch (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + Offset]) { case 0: { } break; case 1: { TXHData.MD_Multiplex_Port_Data.State[MD_Port_Num].Flag.UpdateDisplay = 0; } break; case 2: { TXHData.MD_Multiplex_Port_Data.State[MD_Port_Num].Flag.UpdateRecords = 0; } break; } Offset++; } } } } break; case POSConnect_Authorize: { if (POS_ConnectRX_Len >= 0x1B) // 判断一下长度 { for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Port_Num_Top; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.AuthorizeState == 0 && TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.Start_Flag == 0 && TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunControlState != Control_BoxAuto) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber == MD_Connect_BCDTou64(POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + POS_ConnectRX_AuthorizeNum_Temp * 13])) { if ((TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Call == 1 || TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunControlState == Control_NoGun) && TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].NowAuthorizeType = NowAuthorizeType_Online; // TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WiFiPortNum TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13]); TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].OrderNumber = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 17] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 18] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 19] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 20]); // TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState. Flag.AuthorizeState = 1; FMItemWrite(CF_MD_Port_Data, MD_Port_Num); TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue) { switch (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType) // 无协议、无预置值不启动 { case PosBlueSky: { switch (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType) { case Preset_Sale: { if (TXHData.MD_Port_Data[MD_Port_Num].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue == 0x900000) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdStart; else TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdWritePrsetSale; } else { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue == 0x90000000) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdStart; else TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdWritePrsetSale; } } break; case Preset_Volume: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdWritePrsetVolume; } break; } } break; case PosLY: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 14] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 15] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 16]); TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = LY_MDConnectCmdAuthorize; // TXHData.MD_Port_Info[i].pGunNow = TXHData.MD_Port_Data[i].GunData[j].GunNummber; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } break; case PosJP: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 14] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 15] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 16]); TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LY_MDConnectCmdChoiceGun; // TXHData.MD_Port_Info[i].pGunNow = TXHData.MD_Port_Data[i].GunData[j].GunNummber; } } break; case PosYGao: { if (TXHData.MD_Port_Data[MD_Port_Num].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue == 0x900000) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdStart; else TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdWritePrset; } else { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue == 0x90000000) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdStart; else TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdWritePrset; } } break; case PosHongYang: { switch (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType) { case Preset_Sale: { if (TXHData.MD_Port_Data[MD_Port_Num].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue == 0x900000) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdStart; else TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdWritePrsetSale; } else { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue == 0x90000000) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdStart; else TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdWritePrsetSale; } } break; case Preset_Volume: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdWritePrsetVolume; } break; } } break; case PosSSLan: { i = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].FatherNum; // 获取设备父号 TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = i; if (TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top) { TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].SonNow = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].SonNum; // 获取设备在父设备中的位置号,作为当前操作父设备中的哪个设备的识别 TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 14] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 15] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 16]); TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].MB_CMD_Need = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } break; case PosBlueSkyPlus: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LTP_GunCMDAuthorize; } break; } } } // POS_ConnectRX_AuthorizeNum_Temp ++; // if(POS_ConnectRX_AuthorizeNum_Temp >= POS_ConnectRX_AuthorizeNum) break; } } } if (DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber) break; } } } break; case POSConnect_Preset: { if (POS_ConnectRX_Len >= 0x1B) // 判断一下长度 { for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Port_Num_Top; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.Start_Flag == 0 && TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber == MD_Connect_BCDTou64(POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8 + POS_ConnectRX_AuthorizeNum_Temp * 13])) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresetValue = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13]); TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].OrderNumber = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 17] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 18] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 19] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 20]); // TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState. Flag.AuthorizeState = 1; FMItemWrite(CF_MD_Port_Data, MD_Port_Num); TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next_End = 1; switch (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType) { case PosBlueSky: { switch (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType) { case Preset_Sale: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdWritePrsetSale; } break; case Preset_Volume: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdWritePrsetVolume; } break; } } break; case PosYGao: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdWritePrset; } break; case PosHongYang: { switch (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].PresteType) { case Preset_Sale: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdWritePrsetSale; } break; case Preset_Volume: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdWritePrsetVolume; } break; } } break; case PosBlueSkyPlus: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LTP_GunCMDWritePrset; } break; } break; } } } if (DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber) break; } } } break; case POSConnect_DisAuthorize: { for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Port_Num_Top; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber == MD_Connect_BCDTou64(POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8])) { { TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; switch (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType) { case PosBlueSky: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdStop; } break; case PosLY: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top && (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0)) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = LY_MDConnectCmdDisauthorize; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } break; case PosJP: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top && (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0)) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = LY_MDConnectCmdDisauthorize; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } break; case PosYGao: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdStop; } break; case PosHongYang: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdStop; } break; case PosSSLan: { i = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].FatherNum; // 获取设备父号 TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = i; if (TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top) { TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].SonNow = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].SonNum; // 获取设备在父设备中的位置号,作为当前操作父设备中的哪个设备的识别 TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].MB_CMD_Need = LY_MDConnectCmdDisauthorize; TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } break; case PosBlueSkyPlus: { if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LTP_GunCMDStop; } break; } } break; } } if (DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber) break; } } break; case POSConnect_ChangePrice: { for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Port_Num_Top; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber == MD_Connect_BCDTou64(POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8])) { { TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; if (TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top) { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11]); // if(TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price >= 0x7532) // { // // TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price = 0x1234; // if (CoreDebug->DHCSR & 1) // { //check C_DEBUGEN == 1 -> Debugger Connected // __breakpoint(0); // halt program execution here // } // } switch (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType) { case PosBlueSky: { // TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = C_MDConnectCmdWritePrice; // TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectASKControlPower; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = C_MDConnectCmdWritePrice; } break; case PosLY: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = LY_MDConnectCmdWritePrice; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } break; case PosJP: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].LYGunNeedCMD = LY_MDConnectCmdWritePrice; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } break; case PosDart: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = DART_MDConnectCmdWritePrice; } case PosYGao: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = YG_MDConnectCmdWritePrice; } break; case PosHongYang: { TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = HY_MDConnectCmdWritePrice; } break; case PosSSLan: { i = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].FatherNum; // 获取设备父号 TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = i; if (TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].Handshake == TXHData.MD_Port_Info[MD_Port_Num].Handshake_Top) { TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].SonNow = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].SonNum; // 获取设备在父设备中的位置号,作为当前操作父设备中的哪个设备的识别 TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].MB_CMD_Need = LY_MDConnectCmdWritePrice; TXHData.MD_Port_Info[MD_Port_Num].FatherDevice[i].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } break; case PosBlueSkyPlus: { TXHData.MD_Port_Info[MD_Port_Num].pGunCapture = DeviceNumber; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].MB_CMD_Next = LTP_GunCMDWriteParameter; TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].ParameterNumber = 0x01; } break; } } } break; } } if (DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber) break; } } break; case POSConnect_Config: { Offset = (WifiLenOffset + TimeLenOffset) + 8; if (POS_Connect_RX_Buff[Offset] < 5 && POS_Connect_RX_Buff[Offset] > 0) { MD_Port_Num = POS_Connect_RX_Buff[Offset] - 1; Offset++; TXHData.MD_Port_Data[MD_Port_Num].PortData.BaudRate = MD_Connect_BCDTou64((POS_Connect_RX_Buff[Offset] << 16) | (POS_Connect_RX_Buff[Offset + 1] << 8) | POS_Connect_RX_Buff[Offset + 2]); Offset += 3; TXHData.MD_Port_Data[MD_Port_Num].PortData.StopBits = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.Parity_Even = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.MBCountTime = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.Device_Type = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosRFID) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunAddr = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].RFIDBinding != MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]) && TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].RFIDBinding > 0) // 之前绑定过一把枪,要把那把枪的信息消掉 { 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[MD_Port_Num].GunData[DeviceNumber].RFIDBinding) { TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.Number = 0; TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.Port = 0; TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.location = 0; } } } } TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].RFIDBinding = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; } } else { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunAddr = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset += 1; } if ((POS_Connect_RX_Buff[Offset] & 0x0f) < 4) TXHData.MD_Port_Data[MD_Port_Num].PortData.GunDec.Dec.OilCNT = POS_Connect_RX_Buff[Offset] & 0x0f; Offset += 1; if ((POS_Connect_RX_Buff[Offset] >> 4) < 4) TXHData.MD_Port_Data[MD_Port_Num].PortData.GunDec.Dec.MoneyCNT = (POS_Connect_RX_Buff[Offset] >> 4) & 0x0f; if ((POS_Connect_RX_Buff[Offset] & 0x0f) < 4) TXHData.MD_Port_Data[MD_Port_Num].PortData.GunDec.Dec.Price = POS_Connect_RX_Buff[Offset] & 0x0f; Offset += 1; if ((POS_ConnectRX_Len) > (26 + DeviceNumber * 2)) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunControlState = POS_Connect_RX_Buff[Offset]; Offset += 1; } } } for (i = TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; i < 16; i++) TXHData.MD_Port_Data[MD_Port_Num].GunData[i].RFIDBinding = TXHData.MD_Port_Data[MD_Port_Num].GunData[i].GunAddr = TXHData.MD_Port_Data[MD_Port_Num].GunData[i].GunNummber = 0; FMItemWrite(CF_MD_Port_Data, MD_Port_Num); MD_Port_Init(MD_Port_Num); TXHData.MDRestartTimer[MD_Port_Num].ON_OFF = 1; // EnQueue(&TXHData.POS_TX_MessageQueue,POS_ConnectRX_CMD,Message_Priority_2); } else if (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8] == 5 && TXHData.HardwareVersion < 32) // 24-31是大板,32-38是小板,小板没有第五端口 { Offset = (WifiLenOffset + TimeLenOffset) + 9; TXHData.MD_Multiplex_Port_Data.DeviceNumber = POS_Connect_RX_Buff[Offset]; if (TXHData.MD_Multiplex_Port_Data.DeviceNumber > 4) TXHData.MD_Multiplex_Port_Data.DeviceNumber = 4; // 最多4个,留一个给GPS模块 Offset++; for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Multiplex_Port_Data.DeviceNumber; MD_Port_Num++) { TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].DeviceNumber = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset++; TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].POSType = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset++; TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].BaudRate = MD_Connect_BCDTou64((POS_Connect_RX_Buff[Offset] << 16) | (POS_Connect_RX_Buff[Offset + 1] << 8) | POS_Connect_RX_Buff[Offset + 2]); Offset += 3; TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].StopBits = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset++; TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].Parity_Even = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset++; TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].MBCountTime = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Offset]); Offset++; Temp16 = (POS_Connect_RX_Buff[Offset] << 8) | POS_Connect_RX_Buff[Offset + 1]; Offset += 2; Offset += Temp16; } if (TXHData.HardwareVersion >= 26) // 版本26之后增加GPS模块 { TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Data.DeviceNumber].Init = 0; // 清除初始化标志 TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Data.DeviceNumber].Flag = 0; // 清除到时标志 TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Data.DeviceNumber].ON_OFF = 1; // 打开 TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Data.DeviceNumber].Cycle = 1; // 设置为循环模式,发送时启动 TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Data.DeviceNumber].TimerCountMax = 10 * 1000; // 周期1000(1s) TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Data.DeviceNumber].MBCountTime = 10 * 100; TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Data.DeviceNumber].POSType = Multiplex_GPS; TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Data.DeviceNumber].BaudRate = 9600; TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Data.DeviceNumber].StopBits = 1; TXHData.MD_Multiplex_Port_Data.DeviceNumber += 1; // GPS模块放在随后的一个位置 } FMItemWrite(CF_MD_Multiplex_Port_Data, 0); Multiplex_Port_Init(); } } break; case POSConnect_SynchronizationTime: { TXHData.CTIME.Year = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; // 年 TXHData.CTIME.Month = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; // 月 TXHData.CTIME.Day = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10]; // 日 TXHData.CTIME.Hour = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11]; // 时 TXHData.CTIME.Min = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12]; // 分 TXHData.CTIME.Sec = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13]; // 秒 DS1307_Write(); DS1307_Read(); if (TXHData.CTIME.Sec == 0xff) { DS1307_Init(); TXHData.CTIME.Year = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; // 年 TXHData.CTIME.Month = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; // 月 TXHData.CTIME.Day = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10]; // 日 TXHData.CTIME.Hour = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11]; // 时 TXHData.CTIME.Min = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12]; // 分 TXHData.CTIME.Sec = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13]; // 秒 DS1307_Write(); DS1307_Read(); } // if(TXHData.POS_TX_MessageQueue.Messages[TXHData.POS_TX_MessageQueue.Front].Content == POSConnect_SynchronizationTime) { // DeQueue(&TXHData.POS_TX_MessageQueue);//当握手用,如果收不到时间同步,一直发 { // TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; TXHData.POS_Info.POS_CMD_Next = POSConnect_BoxVersion; // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_FuelData,Message_Priority_1); } } } break; case POSConnect_TankAPCDownload: { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; TXHData.CTIME.Year = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; // 年 TXHData.CTIME.Month = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; // 月 TXHData.CTIME.Day = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10]; // 日 TXHData.CTIME.Hour = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11]; // 时 TXHData.CTIME.Min = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12]; // 分 TXHData.CTIME.Sec = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13]; // 秒 DS1307_Write(); TXHData.RNGData = RNG_GetRandomNumber(); // TXHData.RNGData = 0x12345678; Encrypt_Flag1 = ((TXHData.RNGData >> 16) & 0x0f) % 2; Encrypt_Flag2 = (TXHData.RNGData & 0x0f) / 2; } break; case POSConnect_BoxVersion: { TXHData.POS_Info.POS_CMD_Next = POSConnect_BoxVersion; TXHData.ROM_UpData_Port = 0; } break; case POSConnect_BoxROMownload: { for (MD_Port_Num = 0; MD_Port_Num < 4; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.GunUP_Flag == 1) break; if (DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber) break; } if (MD_Port_Num >= 4) { FrameTimeout = 0; BEEP = BEEP_ON; if (TXHData.ATDB45Type >= At45DB321) { TXHData.POS_Info.POS_CMD_Next = POSConnect_BoxROMownload; // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_BoxROMownload,Message_Priority_2); FrameTop = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; // 总段数 FrameNow = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11]; // 当前段数 for (i = 0; i < 512; i++) TXHData.Frame[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12 + i]; if (AT45DBItemWrite(CA_Frame, FrameNow - 1 + RomUpDataAddr_New)) { TXHData.ROM_UpData_Port = 0; TXHData.ROM_UpData_ProgressBar = FrameNow * 100 / FrameTop; TXHData.DisplayOn = 1; FrameNow++; if (FrameNow > FrameTop) { // TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; TXHData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag = 1; TXHData.ROM_UpData.ROM_UpData_State.Flag.RightRun_Flag = 3; TXHData.ROM_UpData.FrameTop = FrameTop; FMItemWrite(CF_ROM_UpData, 0); } } } BEEP = BEEP_OFF; } else { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; TXHData.ROM_UpData.ROM_UpData_State.Flag.DisableUpdate = 1; } } break; case POSConnect_WhiteList: { FrameTimeout = 0; TXHData.POSData.WhiteListVersion = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; FrameTop = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10]; // 总段数 FrameNow = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12]; // 当前段数 if (FrameTop * FrameNow && (FrameTop < 20)) { if (POS_ConnectRX_Len > 16) DeviceNumber_Top = (POS_ConnectRX_Len - 16) / 6; else DeviceNumber_Top = 0; for (i = 0; i < DeviceNumber_Top; i++) for (j = 0; j < 6; j++) TXHData.WhiteList.CardNum[(FrameNow - 1) * 10 + i][j] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13 + i * 6 + j]; TXHData.DisplayOn = 1; FrameNow++; if (FrameNow > FrameTop) { if (FrameTop >= 1) TXHData.WhiteList.WhiteListTop = (FrameTop - 1) * 10 + DeviceNumber_Top; else TXHData.WhiteList.WhiteListTop = 0; for (i = TXHData.WhiteList.WhiteListTop; i < 200; i++) // 清除剩余的白名单 for (j = 0; j < 6; j++) TXHData.WhiteList.CardNum[i][j] = 0; FMItemWrite(CF_WhiteList, 0); FMItemWrite(CF_POSData, 0); TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; } else TXHData.POS_Info.POS_CMD_Next = POSConnect_WhiteList; } } break; case POSConnect_DeviceVersion: { TXHData.ROM_UpData_Port = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; TXHData.POS_Info.POS_CMD_Next = POSConnect_DeviceVersion; } break; case POSConnect_DeviceROMownload: { for (MD_Port_Num = 0; MD_Port_Num < 4; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.GunUP_Flag == 1) break; if (DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber) break; } if (MD_Port_Num >= 4) { FrameTimeout = 0; BEEP = BEEP_ON; if (TXHData.ATDB45Type >= At45DB321 && POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8] <= 4) { TXHData.ROM_UpData_Port = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; MD_Port_Num = TXHData.ROM_UpData_Port - 1; for (i = 0; i < 16; i++) TXHData.MD_Port_Data[MD_Port_Num].GunData[i].ROM_UpData_State.Flag.Update_Flag = 0; TXHData.POS_Info.POS_CMD_Next = POSConnect_DeviceROMownload; for (i = 0; i < 10; i++) TXHData.MD_Port_Data[MD_Port_Num].PortData.ROM_UpData_Version[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9 + i]; FrameTop = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 19] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 20]; // 总段数 FrameNow = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 21] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 22]; // 当前段数 for (i = 0; i < 512; i++) TXHData.Frame[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 23 + i]; if (AT45DBItemWrite(CA_DeviceFrame, FrameNow - 1 + MD_Port_Num * 1024)) { TXHData.ROM_UpData_ProgressBar = FrameNow * 100 / FrameTop; TXHData.DisplayOn = 1; FrameNow++; if (FrameNow > FrameTop) { for (i = 0; i < 16; i++) TXHData.MD_Port_Data[MD_Port_Num].GunData[i].ROM_UpData_State.Flag.Update_Flag = 1; // TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; TXHData.MD_Port_Data[MD_Port_Num].PortData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag = 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.ROM_UpData.ROM_UpData_State.Flag.RightRun_Flag = 1; TXHData.MD_Port_Data[MD_Port_Num].PortData.ROM_UpData.FrameTop = FrameTop; FMItemWrite(CF_MD_Port_Data, MD_Port_Num); } else if (FrameNow == 1) { for (i = 0; i < 16; i++) TXHData.MD_Port_Data[MD_Port_Num].GunData[i].ROM_UpData_State.Flag.Update_Flag = 0; TXHData.MD_Port_Data[MD_Port_Num].PortData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag = 0; FMItemWrite(CF_MD_Port_Data, MD_Port_Num); } } } BEEP = BEEP_OFF; } else { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; TXHData.ROM_UpData.ROM_UpData_State.Flag.DisableUpdate = 1; } } break; case POSConnect_PREXDATAUp: { Temp16 = (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; if (TXHData.PREXDATA_Upload.PREXDATA_NowFrame == Temp16 && TXHData.PREXDATA_Upload.PREXDATA_NowWaitUpNummber == TXHData.PREXDATA_WaitUpNummber) // 帧特征相符,并且上传等待回复期间没有新增记录 { if (TXHData.PREXDATA_WaitUpNummber > TXHData.PREXDATA_Upload.PREXDATA_NowFrameLen) TXHData.PREXDATA_WaitUpNummber -= TXHData.PREXDATA_Upload.PREXDATA_NowFrameLen; else { TXHData.PREXDATA_WaitUpNummber = 0; TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; } TXHData.PREXDATA_Upload.PREXDATA_NowFrame = 0; TXHData.PREXDATA_Upload.PREXDATA_NowFrameLen = 0; FMItemWrite(CF_PREXDATA_Upload, 0); FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.DisplayOn = 1; } } break; case POSConnect_PrintfInfo: { for (i = 0; i < 20; i++) for (j = 0; j < 32; j++) TXHData.PrintInfo.PrintBuff[i][j] = 0x20; TXHData.POS_Info.POS_CMD_Next = POSConnect_PrintfInfo; FrameTop = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; len = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9]; if (FrameTop > 20) FrameTop = 20; if (len > 32) len = 32; for (i = 0; i < FrameTop; i++) for (j = 0; j < len; j++) TXHData.PrintInfo.PrintBuff[i][j] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10 + i * len + j]; FMItemWrite(CF_PrintInfo, 0); } break; case POSConnect_Print: { TXHData.POS_Info.POS_CMD_Next = POSConnect_Print; TXHData.PrintRecord.GunNumber = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 8]; TXHData.PrintRecord.FData.MoneyCNT = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12]); TXHData.PrintRecord.FData.OilCNT = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 13] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 14] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 15] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 16]); TXHData.PrintRecord.Price = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 17] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 18] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 19]); TXHData.PrintRecord.RTIME.Year = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 20]; // 年 TXHData.PrintRecord.RTIME.Month = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 21]; // 月 TXHData.PrintRecord.RTIME.Day = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 22]; // 日 TXHData.PrintRecord.RTIME.Hour = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 23]; // 时 TXHData.PrintRecord.RTIME.Min = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 24]; // 分 TXHData.PrintRecord.RTIME.Sec = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 25]; // 秒 if (POS_ConnectRX_Len > 32) TXHData.PrintRecord.OrderNumber = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 26] << 24) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 27] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 28] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 29]); TXHData.MD_Multiplex_Port_Info.PrintType = PT_Record; } break; case POSConnect_WritePriceTag: { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; for (MD_Port_Num = 0; MD_Port_Num < 4; MD_Port_Num++) { if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosPrice1_4) { if (TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.State.Flag.Online == 1) { DeviceNumber = (POS_ConnectRX_Len - 14) / 5; for (i = 0; i < DeviceNumber; i++) { TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.Price[i] = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9 + i * 5] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10 + i * 5] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11 + i * 5]); TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.Decimal[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12 + i * 5]; } TXHData.MD_Port_Info[MD_Port_Num].GunInfo[0].MB_CMD_Next = Price_MDConnectCmdWriteDecimal; } break; } } if (MD_Port_Num == 4) { for (MD_Port_Num = 0; MD_Port_Num < 5; MD_Port_Num++) { if (TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].POSType == Multiplex_Price) { TXHData.MD_Multiplex_Port_Info.DevicerCapture = MD_Port_Num; if (TXHData.MD_Multiplex_Port_Data.State[MD_Port_Num].Flag.Online == 1) { DeviceNumber = (POS_ConnectRX_Len - 14) / 5; for (i = 0; i < DeviceNumber; i++) { TXHData.MD_Multiplex_Port_Info.PriceTagData.Price[i] = ((POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 9 + i * 5] << 16) | (POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 10 + i * 5] << 8) | POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 11 + i * 5]); TXHData.MD_Multiplex_Port_Info.PriceTagData.Decimal[i] = POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + 12 + i * 5]; } TXHData.MD_Multiplex_Port_Info.MB_CMD_Next[MD_Port_Num] = Price_MDConnectCmdWriteDecimal; } break; } } } } break; default: for (i = 0; i < 50; i++) POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + i] = 0; break; } } else { for (i = 0; i < 50; i++) POS_Connect_RX_Buff[(WifiLenOffset + TimeLenOffset) + i] = 0; TXHData.PCMail_RX_Len = 0; break; } } else { TXHData.PCMail_RX_Len = 0; break; } if (TXHData.PCMail_RX_Len) { TimeLenOffset = 0; for (i = 0; i < TXHData.PCMail_RX_Len; i++) { POS_Connect_RX_Buff[(WifiLenOffset) + i] = POS_Connect_RX_Buff[WifiLenOffset + POS_ConnectRX_Len + 2 + i]; } } } for (i = TXHData.PCMail_RX_Len; i < 40; i++) { POS_Connect_RX_Buff[i] = 0; } } else // 指令模式 { switch (TXHData.POS_Info.NetType) { case POS_Net_Typ_4G_GM5: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case GM5_ENTM: { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_Model_Set_1; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } break; case GM5_Model_Set_1: { Temp16 = mystrstr(POS_Connect_RX_Buff, "a"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_Model_Set_2; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_Model_Set_2: { Temp16 = mystrstr(POS_Connect_RX_Buff, "ok"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_Rec; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_Rec: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_HEARTEN; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_HEARTEN: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_UARTFL; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_UARTFL: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_LinkMode; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_APN: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_LinkMode; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_LinkMode: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { if (TXHData.HardwareVersion > 24) // 新的硬件版本,从这开始,所有的模块使用主芯片生成IMEI码 { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_GetICCID; } else { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_GetIMEI; } TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_GetIMEI: { Temp16 = mystrstr(POS_Connect_RX_Buff, "IMEI:"); if (Temp16) { for (i = 0; i < 20; i++) TXHData.POSData.WirelessData.IMEI[i] = 0; for (i = 0; i < 15; i++) TXHData.POSData.WirelessData.IMEI[5 + i] = POS_Connect_RX_Buff[Temp16 + 4 + i]; FMItemWrite(CF_POSData, 0); TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_GetICCID; } } break; case GM5_GetICCID: { Temp16 = mystrstr(POS_Connect_RX_Buff, "ICCID:"); if (Temp16) { for (i = 0; i < 20; i++) TXHData.ICCID[i] = 0; for (i = 0; i < 20; i++) TXHData.ICCID[i] = POS_Connect_RX_Buff[Temp16 + 5 + i]; // FMItemWrite(CF_,0); TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_SOCKET; } } break; case GM5_SOCKET: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_CSQ; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case GM5_CSQ: { if (TXHData.POS_Info.WiFiRSSI) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_Save; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } Temp16 = mystrstr(POS_Connect_RX_Buff, "CSQ:"); if (Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POS_Info.WiFiRSSI = MD_Connect_BCDTou64(((POS_Connect_RX_Buff[Temp16 + 4] - 0x30) << 4) | (POS_Connect_RX_Buff[Temp16 + 5] - 0x30)); Temp16 = mystrstr(POS_Connect_RX_Buff, ","); if (Temp16) { if (POS_Connect_RX_Buff[Temp16 + 1] >= 0x30) TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(((POS_Connect_RX_Buff[Temp16] - 0x30) << 4) | (POS_Connect_RX_Buff[Temp16 + 1] - 0x30)); else TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Temp16] - 0x30); } } } break; case GM5_Save: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.WorkMode = 1; TXHData.HeartbeatTimer.TimerCountMax = 1000; } } break; case GM5_RESET: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_ENTM; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; } } }; break; case POS_Net_Typ_4G_L510: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case L510_ATRec: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { // for(i = 0;i < 20;i ++) // TXHData.POSData.WirelessData.IMEI[i] = 0; // TXHData.HeartbeatTimer.TimerCount = 0; // TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_IMEI; } } break; case L510_IMEI: { Temp16 = mystrstr(POS_Connect_RX_Buff, "\""); if (Temp16) { // for(i = 0;i < 20;i ++) // TXHData.POSData.WirelessData.IMEI[i] = 0; // for(i = 0;i < 15;i ++) // TXHData.POSData.WirelessData.IMEI[5 + i] = POS_Connect_RX_Buff[Temp16 + i]; // FMItemWrite(CF_POSData,0); TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_ICPIN; } } break; case L510_SetGPSMode: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_ICPIN; } } break; case L510_ICPIN: { Temp16 = mystrstr(POS_Connect_RX_Buff, "READY"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_ICCID; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case L510_ICCID: { Temp16 = mystrstr(POS_Connect_RX_Buff, "ICCID:"); if (Temp16) { for (i = 0; i < 20; i++) TXHData.ICCID[i] = 0; for (i = 0; i < 15; i++) TXHData.ICCID[5 + i] = POS_Connect_RX_Buff[Temp16 + 5 + i]; // FMItemWrite(CF_,0); TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_RSSI; } } break; case L510_RSSI: { Temp16 = mystrstr(POS_Connect_RX_Buff, "CSQ:"); if (Temp16) { if (TXHData.POS_Info.WiFiRSSI) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_Model_NET; } TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POS_Info.WiFiRSSI = MD_Connect_BCDTou64(((POS_Connect_RX_Buff[Temp16 + 4] - 0x30) << 4) | (POS_Connect_RX_Buff[Temp16 + 5] - 0x30)); } } break; case L510_Model_NET: { // Temp16 = mystrstr(POS_Connect_RX_Buff,"OK"); // if(Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_NETOPEN; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case L510_APN: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_NETOPEN; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case L510_NETOPEN: { // Temp16 = mystrstr(POS_Connect_RX_Buff,"OK"); // if(Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_SOCKET; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case L510_SOCKET: { TXHData.POSNetSetState.Flag.WorkMode = 1; TXHData.HeartbeatTimer.TimerCountMax = 1000; } break; case L510_AT: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_RESET; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case L510_RESET: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_ATRec; // TXHData.HeartbeatTimer.TimerCount = 0; // TXHData.HeartbeatTimer.Flag = 1; } } break; } } }; break; case POS_Net_Typ_WiFi: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case WIFI_ATRec: { // Temp16 = mystrstr(POS_Connect_RX_Buff,"OK"); // if(Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = WIFI_WifiWSSSID; } } break; case WIFI_WifiWSSSID: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = WIFI_WifiRSSI; } } break; case WIFI_WifiRSSI: { // Temp16 = mystrstr(POS_Connect_RX_Buff,"atus:"); // if(Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POS_Info.WiFiRSSI = MD_Connect_BCDTou64(((POS_Connect_RX_Buff[Temp16 + 5] - 0x30) << 4) | (POS_Connect_RX_Buff[Temp16 + 6] - 0x30)); Temp16 = mystrstr(POS_Connect_RX_Buff, ","); if (Temp16) { if (POS_Connect_RX_Buff[Temp16 + 1] >= 0x30) TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(((POS_Connect_RX_Buff[Temp16] - 0x30) << 4) | (POS_Connect_RX_Buff[Temp16 + 1] - 0x30)); else TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(POS_Connect_RX_Buff[Temp16] - 0x30); } TXHData.POSNetSetState.Flag.POSNetCMDNext = WIFI_WifiSOCKET; } } break; case WIFI_WifiSOCKET: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { // TXHData.HeartbeatTimer.TimerCount = 0; // TXHData.HeartbeatTimer.Flag = 1; // STM32CPU.v.id[0] = *(u32*)0x1fff7a10; // STM32CPU.v.id[1] = *(u32*)(0x1fff7a10 + 4); // STM32CPU.v.id[2] = *(u32*)(0x1fff7a10 + 8); // for(i = 0;i < 20;i ++) // TXHData.POSData.WirelessData.IMEI[i] = 0; // // for(i = 0;i < 12;i ++) // // TXHData.POSData.WirelessData.IMEI[i+8] = STM32CPU.v.byte[i]; // sprintf(&TXHData.POSData.WirelessData.IMEI[0],"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%", // STM32CPU.v.byte[0],STM32CPU.v.byte[2],STM32CPU.v.byte[4],STM32CPU.v.byte[5],STM32CPU.v.byte[6], // STM32CPU.v.byte[7],STM32CPU.v.byte[8],STM32CPU.v.byte[9],STM32CPU.v.byte[10],STM32CPU.v.byte[11]); // if(FMItemWrite(CF_POSData,0)) // BEEP = 0; TXHData.POSNetSetState.Flag.WorkMode = 1; TXHData.HeartbeatTimer.TimerCountMax = 1000; } } break; case WIFI_WifiRST: { // Temp16 = mystrstr(POS_Connect_RX_Buff,"OK"); // if(Temp16) { TXHData.POSNetSetState.Flag.WorkMode = 0; TXHData.POSNetSetState.Flag.POSNetCMDNext = WIFI_ATRec; // TXHData.POSNetSetState.Flag.POSNetSetNeedFlag = 0; TXHData.POSReLinkTimer.Flag = 0; TXHData.POSReLinkTimer.TimerCount = 0; } } break; } } }; break; case POS_Net_Typ_WAN: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case USRK3_ENTM: { // Temp16 = mystrstr(POS_Connect_RX_Buff,"OK"); // if(Temp16) // { // STM32CPU.v.id[0] = *(u32*)0x1fff7a10; // STM32CPU.v.id[1] = *(u32*)(0x1fff7a10 + 4); // STM32CPU.v.id[2] = *(u32*)(0x1fff7a10 + 8); // for(i = 0;i < 20;i ++) // TXHData.POSData.WirelessData.IMEI[i] = 0; // // for(i = 0;i < 12;i ++) // // TXHData.POSData.WirelessData.IMEI[i+8] = STM32CPU.v.byte[i]; // sprintf(&TXHData.POSData.WirelessData.IMEI[0],"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%", // STM32CPU.v.byte[0],STM32CPU.v.byte[2],STM32CPU.v.byte[4],STM32CPU.v.byte[5],STM32CPU.v.byte[6], // STM32CPU.v.byte[7],STM32CPU.v.byte[8],STM32CPU.v.byte[9],STM32CPU.v.byte[10],STM32CPU.v.byte[11]); // if(FMItemWrite(CF_POSData,0)) // BEEP = 0; // TXHData.POSNetSetState.Flag.WorkMode = 1; // TXHData.HeartbeatTimer.TimerCountMax = 1000; // } // else { TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_Model_Set_1; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case USRK3_Model_Set_1: { Temp16 = mystrstr(POS_Connect_RX_Buff, "a"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_Model_Set_2; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case USRK3_Model_Set_2: { Temp16 = mystrstr(POS_Connect_RX_Buff, "ok"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_Rec; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case USRK3_Rec: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_DHCP; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case USRK3_DHCP: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_GetIP; TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; } } break; case USRK3_GetIP: { Temp16 = mystrstr(POS_Connect_RX_Buff, "DHCP,"); if (Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; for (i = 0; i < 20; i++) TXHData.POS_Info.IP[i] = POS_Connect_RX_Buff[Temp16 + 4 + i]; Temp16 = mystrstr(TXHData.POS_Info.IP, ","); if (Temp16) { for (i = 0; i < 2; i++) TXHData.POS_Info.IP[i + Temp16 - 1] = 0; } TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_SOCKET; TXHData.DisplayOn = 1; } } break; case USRK3_SOCKET: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_GetLinkState; } } break; case USRK3_GetLinkState: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { TXHData.HeartbeatTimer.TimerCount = 0; TXHData.HeartbeatTimer.Flag = 1; TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_RST; } } break; case USRK3_RST: { Temp16 = mystrstr(POS_Connect_RX_Buff, "OK"); if (Temp16) { // STM32CPU.v.id[0] = *(u32*)0x1fff7a10; // STM32CPU.v.id[1] = *(u32*)(0x1fff7a10 + 4); // STM32CPU.v.id[2] = *(u32*)(0x1fff7a10 + 8); // for(i = 0;i < 20;i ++) // TXHData.POSData.WirelessData.IMEI[i] = 0; // // for(i = 0;i < 12;i ++) // // TXHData.POSData.WirelessData.IMEI[i+8] = STM32CPU.v.byte[i]; // sprintf(&TXHData.POSData.WirelessData.IMEI[0],"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%", // STM32CPU.v.byte[0],STM32CPU.v.byte[2],STM32CPU.v.byte[4],STM32CPU.v.byte[5],STM32CPU.v.byte[6], // STM32CPU.v.byte[7],STM32CPU.v.byte[8],STM32CPU.v.byte[9],STM32CPU.v.byte[10],STM32CPU.v.byte[11]); // if(FMItemWrite(CF_POSData,0)) // BEEP = 0; TXHData.POSNetSetState.Flag.WorkMode = 1; TXHData.HeartbeatTimer.TimerCountMax = 1000; } } break; } }; break; } break; } TXHData.PCMail_RX_Len = 0; for (i = 0; i < 100; i++) POS_Connect_RX_Buff[i] = 0; } } u16 POS_ConnectTXTask(u8 POS_Connect_Typ, u8 GunNum, u8 POS_Connect_Com) // 数据发送任务 { u16 i = 0, k = 0, j = 0; u8 Encrypt_Flag1 = 0; u8 Encrypt_Flag2 = 0; u64 Temp = 0; u16 len = 0, lenTemp = 0, TxLenOffset = 0; u64 CRCTemp = 0; u8 *PBuff; u8 Char_Buff[30]; u16 MD_Port_Num = 0, DeviceNumber = 0; for (i = 0; i < 100; i++) POS_Connect_TX_Buff[i] = 0; if (TXHData.POSReLinkTimer.Flag && TXHData.POS_Info.ConnectType != POS_Connect_Typ_Station) // 站级) { TXHData.POSReLinkTimer.Flag = 0; TXHData.POSNetSetState.Flag.WorkMode = 0; switch (TXHData.POS_Info.NetType) { case POS_Net_Typ_WAN: TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_ENTM; break; case POS_Net_Typ_WiFi: TXHData.POSNetSetState.Flag.POSNetCMDNext = WIFI_WifiRST; break; case POS_Net_Typ_4G_GM5: TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_ENTM; break; case POS_Net_Typ_4G_L510: TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_AT; ; break; } } if (TXHData.POSNetSetState.Flag.WorkMode == 1) // 透传模式 { if (TXHData.POSCutTimer.Flag == 1) { if (TXHData.POS_Info.Link_Flag == 1) { for (MD_Port_Num = 0; MD_Port_Num < 4; MD_Port_Num++) { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.Online == 1) { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay = 1; if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateRecords == 1) // 慎重,非油机设备不要用这个标志 { TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 0; TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].CTOTAL = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CTOTAL; TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].FData = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].FData; TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].GunNumber = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].Price = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price; TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].OrderNumber = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].OrderNumber; TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].AssociatedDevices.location].CardNumber[i]; for (i = 0; i < 6; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_Port_Num].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); } } } FMItemWrite(CF_MD_Port_Data, MD_Port_Num); } if (TXHData.POS_Info.NetType == POS_Net_Typ_WAN || TXHData.POS_Info.NetType == POS_Net_Typ_4G_L510) POS_LinkA_Out = 0; TXHData.POS_Info.Link_Flag = 0; TXHData.POS_Info.POS_CMD_Next = POSConnect_SynchronizationTime; // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_SynchronizationTime,Message_Priority_3);//重新同步时间 } } if (POS_Connect_TX_Flag == 1) { while (Encrypt_Flag2 == 0) { // 不能使用原始数据 TXHData.RNGData = RNG_GetRandomNumber(); // TXHData.RNGData = 0x12345678; Encrypt_Flag1 = ((TXHData.RNGData >> 16) & 0x0f) % 2; Encrypt_Flag2 = (TXHData.RNGData & 0x0f) / 2; } if (TXHData.POS_Info.NetType == POS_Net_Typ_WiFi && TXHData.POS_Info.ConnectType != POS_Connect_Typ_Station) { TxLenOffset = 7; POS_Connect_TX_Buff[0] = 0x55; POS_Connect_TX_Buff[1] = 0xFD; POS_Connect_TX_Buff[2] = 0xAA; POS_Connect_TX_Buff[3] = 0x00; POS_Connect_TX_Buff[4] = 0x00; POS_Connect_TX_Buff[5] = 0x61; POS_Connect_TX_Buff[6] = 0x00; } POS_Connect_TX_Buff[TxLenOffset + 0] = 0xfa; // 帧头 POS_Connect_TX_Buff[TxLenOffset + 1] = TXHData.CTIME.Year; POS_Connect_TX_Buff[TxLenOffset + 2] = TXHData.CTIME.Month; POS_Connect_TX_Buff[TxLenOffset + 3] = TXHData.CTIME.Day; POS_Connect_TX_Buff[TxLenOffset + 4] = TXHData.CTIME.Hour; POS_Connect_TX_Buff[TxLenOffset + 5] = TXHData.CTIME.Min; POS_Connect_TX_Buff[TxLenOffset + 6] = TXHData.CTIME.Sec; for (i = 0; i < 4; i++) POS_Connect_TX_Buff[TxLenOffset + 9 + i] = TXHData.RNGData >> (8 * (3 - i)); if (TXHData.POS_Info.ConnectType == POS_Connect_Typ_Station) // 站级 { POS_Connect_TX_Buff[TxLenOffset + 13] = POS_Connect_Com; len = TxLenOffset + 8 + 6; } else // 中心 { if (POS_LinkA || (TXHData.BoardType == 0) || TXHData.POS_Info.NetType == POS_Net_Typ_WAN || TXHData.POS_Info.NetType == POS_Net_Typ_4G_L510) { for (i = 0; i < 20; i++) POS_Connect_TX_Buff[TxLenOffset + 13 + i] = TXHData.POSData.WirelessData.IMEI[i]; for (i = 0; i < 10; i++) POS_Connect_TX_Buff[TxLenOffset + 33 + i] = TXHData.GPSData.Buff[i]; POS_Connect_TX_Buff[TxLenOffset + 43] = POS_Connect_Com; len = TxLenOffset + 38 + 6; } else { TXHData.POSCutTimer.Flag = 1; return 0; } } if (len) { TXHData.DelayDetectionTimer.ON_OFF = 1; TXHData.POS_TX_CMDNow = POS_Connect_Com; switch (POS_Connect_Com) { case POSConnect_SynchronizationTime: case POSConnect_Config: case POSConnect_ChangePrice: case POSConnect_DisAuthorize: case POSConnect_Authorize: { } break; case POSConnect_BoxVersion: { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; for (i = 0; i < 10; i++) POS_Connect_TX_Buff[len + i] = BoxVersion[i]; len += 10; POS_Connect_TX_Buff[len] = TXHData.POSData.WhiteListVersion; len++; } break; case POSConnect_FuelData: { if (TXHData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag == 1) { __set_FAULTMASK(1); NVIC_SystemReset(); } for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Port_Num_Top; MD_Port_Num++) { if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosJP || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosBlueSky || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosLY || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosDart || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosYGao || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosHongYang || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosLanFeng || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosSSLan || TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosBlueSkyPlus) { POS_Connect_TX_Buff[len] = 0x01; // 设备类型 油枪数据s len += 3; // 预留长度字节位置 lenTemp = len; // 记录数据块起始位置。用来计算数据块长度长度 POS_Connect_TX_Buff[len] = 2; // 无数据长度 len += 1; POS_Connect_TX_Buff[len] = 29; // 有数据长度 len += 1; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { POS_Connect_TX_Buff[len] = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; len += 1; POS_Connect_TX_Buff[len] = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.State; len += 1; if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay == 1 || TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateRecords == 1 || TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.Start_Flag == 1) { for (i = 0; i < 4; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].OrderNumber >> ((3 - i) * 8); len += 4; for (i = 0; i < 4; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].FData.OilCNT >> ((3 - i) * 8); len += 4; for (i = 0; i < 4; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].FData.MoneyCNT >> ((3 - i) * 8); len += 4; for (i = 0; i < 3; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Price >> ((2 - i) * 8); len += 3; for (i = 0; i < 6; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CTOTAL.TotalLit >> ((5 - i) * 8); len += 6; for (i = 0; i < 6; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CTOTAL.TotalMoney >> ((5 - i) * 8); len += 6; } } POS_Connect_TX_Buff[lenTemp - 2] = (len - lenTemp) >> 8; POS_Connect_TX_Buff[lenTemp - 1] = (len - lenTemp) & 0xff; } else if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosYWY) { POS_Connect_TX_Buff[len] = 0x02; len += 3; lenTemp = len; for (DeviceNumber = 0; DeviceNumber < TXHData.TankNumTop; DeviceNumber++) { POS_Connect_TX_Buff[len] = DeviceNumber + 1; len += 1; POS_Connect_TX_Buff[len] = TXHData.TankState[MD_Port_Num][DeviceNumber].State; len += 1; for (i = 0; i < 16; i++) POS_Connect_TX_Buff[i + len] = TXHData.TankData[MD_Port_Num][DeviceNumber].Buff[i]; len += 16; } POS_Connect_TX_Buff[lenTemp - 2] = (len - lenTemp) << 8; POS_Connect_TX_Buff[lenTemp - 1] = (len - lenTemp) & 0xff; } else if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosPLC) { POS_Connect_TX_Buff[len] = 0x07; len += 1; POS_Connect_TX_Buff[len] = 1; len += 1; POS_Connect_TX_Buff[len] = 59; len += 1; POS_Connect_TX_Buff[len] = TXHData.CNGPLCState.State; len += 1; for (i = 0; i < 58; i++) POS_Connect_TX_Buff[i + len] = TXHData.CNGPLCData.Buff[i]; len += 58; } else if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosRFID) { POS_Connect_TX_Buff[len] = 0x03; len += 3; lenTemp = len; POS_Connect_TX_Buff[len] = 2; // 无数据长度 len += 1; POS_Connect_TX_Buff[len] = 17; // 有数据长度 len += 1; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_Port_Num].PortData.DeviceNumber; DeviceNumber++) { POS_Connect_TX_Buff[len] = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunNummber; len += 1; POS_Connect_TX_Buff[len] = TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.State; len += 1; if (TXHData.MD_Port_Data[MD_Port_Num].GunData[DeviceNumber].GunState.Flag.UpdateDisplay == 1) { for (i = 0; i < 10; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CardNumber[i]; len += 10; for (i = 0; i < 2; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].CardPSWD[i]; len += 2; for (i = 0; i < 3; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].GunInfo[DeviceNumber].Mileage >> ((2 - i) * 8); len += 3; } } POS_Connect_TX_Buff[lenTemp - 2] = (len - lenTemp) << 8; POS_Connect_TX_Buff[lenTemp - 1] = (len - lenTemp) & 0xff; } else if (TXHData.MD_Port_Data[MD_Port_Num].PortData.POSType == PosPrice1_4) { POS_Connect_TX_Buff[len] = PosPrice1_4; len += 3; lenTemp = len; POS_Connect_TX_Buff[len] = 1; // 无数据长度 len += 1; POS_Connect_TX_Buff[len] = 1 + TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.PriceNumber * 3; // 有数据长度 len += 1; POS_Connect_TX_Buff[len] = TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.State.State; len += 1; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.PriceNumber; DeviceNumber++) { if (TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.State.Flag.UpdateDisplay == 1) { for (i = 0; i < 3; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Port_Info[MD_Port_Num].PriceTagData.Price[DeviceNumber] >> ((2 - i) * 8); len += 3; } } POS_Connect_TX_Buff[lenTemp - 2] = (len - lenTemp) << 8; POS_Connect_TX_Buff[lenTemp - 1] = (len - lenTemp) & 0xff; } } if (TXHData.MD_Multiplex_Port_Data.DeviceNumber > 0) { for (MD_Port_Num = 0; MD_Port_Num < TXHData.MD_Multiplex_Port_Data.DeviceNumber - 1; MD_Port_Num++) { /*设备类型:00无;04打印机;06液位仪;05单价牌*/ if (TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].POSType == Multiplex_Print) { POS_Connect_TX_Buff[len] = Multiplex_Print; len += 1; POS_Connect_TX_Buff[len] = 1; len += 1; POS_Connect_TX_Buff[len] = TXHData.MD_Multiplex_Port_Info.State[MD_Port_Num].State; len += 1; } if (TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].POSType == Multiplex_YWY) { POS_Connect_TX_Buff[len] = Multiplex_YWY; len += 1; POS_Connect_TX_Buff[len] = TXHData.TankNumTop; len += 1; POS_Connect_TX_Buff[len] = 18; len += 1; for (DeviceNumber = 0; DeviceNumber < TXHData.TankNumTop; DeviceNumber++) { POS_Connect_TX_Buff[len] = DeviceNumber + 1; len += 1; POS_Connect_TX_Buff[len] = TXHData.TankState[4][DeviceNumber].State; len += 1; for (i = 0; i < 16; i++) POS_Connect_TX_Buff[i + len] = TXHData.TankData[4][DeviceNumber].Buff[i]; len += 16; } } else if (TXHData.MD_Multiplex_Port_Data.PortData[MD_Port_Num].POSType == Multiplex_Price) { POS_Connect_TX_Buff[len] = Multiplex_Price; len += 3; lenTemp = len; POS_Connect_TX_Buff[len] = 1; // 无数据长度 len += 1; POS_Connect_TX_Buff[len] = 1 + TXHData.MD_Multiplex_Port_Info.PriceTagData.PriceNumber * 3; // 有数据长度 len += 1; POS_Connect_TX_Buff[len] = TXHData.MD_Multiplex_Port_Data.State[MD_Port_Num].State; len += 1; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Multiplex_Port_Info.PriceTagData.PriceNumber; DeviceNumber++) { if (TXHData.MD_Multiplex_Port_Data.State[MD_Port_Num].Flag.UpdateDisplay == 1) { for (i = 0; i < 3; i++) POS_Connect_TX_Buff[i + len] = TXHData.MD_Multiplex_Port_Info.PriceTagData.Price[DeviceNumber] >> ((2 - i) * 8); len += 3; } } POS_Connect_TX_Buff[lenTemp - 2] = (len - lenTemp) << 8; POS_Connect_TX_Buff[lenTemp - 1] = (len - lenTemp) & 0xff; } } } } break; case POSConnect_BoxROMownload: { FrameTimeout++; if (FrameTimeout < 5 && TXHData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag == 0) { TXHData.POS_Info.POS_CMD_Next = POSConnect_BoxROMownload; } else { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; if (TXHData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag == 0) TXHData.ROM_UpData_ProgressBar = 0xFF; // 失败 } POS_Connect_TX_Buff[len] = (FrameNow >> 8) & 0xff; POS_Connect_TX_Buff[len + 1] = FrameNow & 0xff; len += 2; } break; case POSConnect_WhiteList: { FrameTimeout++; if (FrameTimeout < 5) { TXHData.POS_Info.POS_CMD_Next = POSConnect_WhiteList; } else { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; } POS_Connect_TX_Buff[len] = (FrameNow >> 8) & 0xff; POS_Connect_TX_Buff[len + 1] = FrameNow & 0xff; len += 2; } break; case POSConnect_DeviceVersion: { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; POS_Connect_TX_Buff[len] = TXHData.ROM_UpData_Port; len++; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[TXHData.ROM_UpData_Port - 1].PortData.DeviceNumber; DeviceNumber++) { if (TXHData.MD_Port_Info[TXHData.ROM_UpData_Port - 1].GunInfo[DeviceNumber].GunVersion.VersionFindFlag == 1) { POS_Connect_TX_Buff[len] = TXHData.MD_Port_Data[TXHData.ROM_UpData_Port - 1].GunData[DeviceNumber].GunNummber; len += 1; for (i = 0; i < 10; i++) POS_Connect_TX_Buff[len + i] = TXHData.MD_Port_Info[TXHData.ROM_UpData_Port - 1].GunInfo[DeviceNumber].GunVersion.Version[i]; len += 10; } } } break; case POSConnect_DeviceROMownload: { FrameTimeout++; if (FrameTimeout < 5 && TXHData.MD_Port_Data[TXHData.ROM_UpData_Port - 1].PortData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag == 0) { TXHData.POS_Info.POS_CMD_Next = POSConnect_DeviceROMownload; // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_BoxROMownload,Message_Priority_2); } else { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; if (TXHData.MD_Port_Data[TXHData.ROM_UpData_Port - 1].PortData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag == 0) TXHData.ROM_UpData_ProgressBar = 0xFF; // 失败 } POS_Connect_TX_Buff[len] = TXHData.ROM_UpData_Port; POS_Connect_TX_Buff[len + 1] = (FrameNow >> 8) & 0xff; POS_Connect_TX_Buff[len + 2] = FrameNow & 0xff; len += 3; } break; case POSConnect_PREXDATAUp: { // EnQueue(&TXHData.POS_TX_MessageQueue,POSConnect_PREXDATAUp,Message_Priority_3); TXHData.DisplayOn = 1; POS_Connect_TX_Buff[len] = (TXHData.PREXDATA_WaitUpNummber / 10) >> 8; // 帧特征 len += 1; POS_Connect_TX_Buff[len] = TXHData.PREXDATA_WaitUpNummber / 10; // 帧特征 len += 1; if (TXHData.PREXDATA_WaitUpNummber > 10) Temp = 10; else Temp = TXHData.PREXDATA_WaitUpNummber; TXHData.PREXDATA_Upload.PREXDATA_NowWaitUpNummber = TXHData.PREXDATA_WaitUpNummber; TXHData.PREXDATA_Upload.PREXDATA_NowFrame = TXHData.PREXDATA_WaitUpNummber / 10; TXHData.PREXDATA_Upload.PREXDATA_NowFrameLen = Temp; FMItemWrite(CF_PREXDATA_Upload, 0); POS_Connect_TX_Buff[len] = Temp; // 本次传输条数 len += 1; POS_Connect_TX_Buff[len] = 40; len += 1; for (i = 0; i < Temp; i++) { if (TXHData.PREXDATA_WaitUpNummber > 0) AT45DBItemRead(CA_PREXDATA, (TXHData.PREXDATA_WaitUpNummber - 1 - i) / 5); POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].GunNumber; len += 1; for (k = 0; k < 4; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].FData.OilCNT >> ((3 - k) * 8); len += 4; for (k = 0; k < 4; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].FData.MoneyCNT >> ((3 - k) * 8); len += 4; for (k = 0; k < 3; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].Price >> ((2 - k) * 8); len += 3; for (k = 0; k < 6; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].CTOTAL.TotalLit >> ((5 - k) * 8); len += 6; for (k = 0; k < 6; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].CTOTAL.TotalMoney >> ((5 - k) * 8); len += 6; POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME.Year; len += 1; POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME.Month; len += 1; POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME.Day; len += 1; POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME.Hour; len += 1; POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME.Min; len += 1; POS_Connect_TX_Buff[len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].RTIME.Sec; len += 1; for (k = 0; k < 4; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].OrderNumber >> ((3 - k) * 8); len += 4; for (k = 0; k < 6; k++) POS_Connect_TX_Buff[k + len] = TXHData.PREXDATA[(TXHData.PREXDATA_WaitUpNummber - 1 - i) % 5].CardNum[k]; len += 6; } } break; case POSConnect_PrintfInfo: { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; POS_Connect_TX_Buff[len] = 0x59; len += 1; } break; case POSConnect_Print: { TXHData.POS_Info.POS_CMD_Next = POSConnect_FuelData; POS_Connect_TX_Buff[len] = 0x59; len += 1; } break; } POS_Connect_TX_Buff[TxLenOffset + 7] = ((len - TxLenOffset) >> 8) & 0xff; POS_Connect_TX_Buff[TxLenOffset + 8] = (len - TxLenOffset) & 0xff; // if(TXHData.UDisk_Flag) // Log_Task(&POS_Connect_TX_Buff[TxLenOffset],len - TxLenOffset,4,Info_Issue); for (i = 0; i < len - TxLenOffset; i++) POS_Connect_TX_Buff[TxLenOffset + 13 + i] = Encrypt_Data(POS_Connect_TX_Buff[TxLenOffset + 13 + i], Encrypt_Flag1, Encrypt_Flag2); if (TXHData.UDisk_Flag) Log_Task(&POS_Connect_TX_Buff[TxLenOffset], len - TxLenOffset, 4, Info_Issue); CRCTemp = CRC_Check(&POS_Connect_TX_Buff[TxLenOffset], len - TxLenOffset); // 校验 POS_Connect_TX_Buff[len] = (CRCTemp >> 8) & 0xff; len++; POS_Connect_TX_Buff[len] = CRCTemp & 0xff; len++; if (TXHData.POS_Info.NetType == POS_Net_Typ_WiFi && TXHData.POS_Info.ConnectType != POS_Connect_Typ_Station) { POS_Connect_TX_Buff[3] = ((len - 5) >> 8) & 0xff; POS_Connect_TX_Buff[4] = (len - 5) & 0xff; POS_Connect_TX_Buff[len] = SUMCRC(&POS_Connect_TX_Buff[5], len - 5); len++; } POS_Connect_TX_DMALenSet(len); POS_Connect_TX_DMAStart(); return len; } } } else if (TXHData.POSNetSetState.Flag.WorkMode == 0) // 指令模式 { switch (TXHData.POS_Info.NetType) { case POS_Net_Typ_4G_GM5: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case GM5_ENTM: { for (i = 0; i < strlen(CMD_Model_NET); i++) POS_Connect_TX_Buff[i] = CMD_Model_NET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.POSNetSetState.Flag.POSNetCMDNext = GM5_Model_Set_1; TXHData.HeartbeatTimer.TimerCountMax = 1000; } break; case GM5_Model_Set_1: { for (i = 0; i < strlen(CMD_Model_Set_1); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_1[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_Model_Set_2: { for (i = 0; i < strlen(CMD_Model_Set_2); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_2[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_Rec: { for (i = 0; i < strlen(CMD_ATRec); i++) POS_Connect_TX_Buff[i] = CMD_ATRec[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_HEARTEN: { for (i = 0; i < strlen(CMD_HEARTEN); i++) POS_Connect_TX_Buff[i] = CMD_HEARTEN[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_UARTFL: { for (i = 0; i < strlen(CMD_UARTFL); i++) POS_Connect_TX_Buff[i] = CMD_UARTFL[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_APN: { for (i = 0; i < strlen(CMD_APN); i++) POS_Connect_TX_Buff[i] = CMD_APN[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_LinkMode: { for (i = 0; i < strlen(CMD_LinkMode); i++) POS_Connect_TX_Buff[i] = CMD_LinkMode[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_GetIMEI: { for (i = 0; i < strlen(CMD_IMEI); i++) POS_Connect_TX_Buff[i] = CMD_IMEI[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_GetICCID: { for (i = 0; i < strlen(CMD_ICCID); i++) POS_Connect_TX_Buff[i] = CMD_ICCID[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_SOCKET: { if (TXHData.POS_Info.ConnectType == POS_Connect_Typ_Cloud_Tast) // 测试服务器 { for (i = 0; i < strlen(TsatURL); i++) POS_Connect_TX_Buff[i] = TsatURL[i]; } else { for (i = 0; i < 13; i++) POS_Connect_TX_Buff[i] = TsatURL[i]; //"AT+SOCKA=TCP,test.joyfueling.com,7011\r\n"; Temp = strlen((const char *)TXHData.POSData.WirelessData.CMD_SOCKA); if (Temp) { for (i = 0; i < Temp; i++) POS_Connect_TX_Buff[13 + i] = TXHData.POSData.WirelessData.CMD_SOCKA[i]; strcat(POS_Connect_TX_Buff, "\r\n\0"); } i = strlen((char *)&POS_Connect_TX_Buff); } POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_CSQ: { for (i = 0; i < strlen(CMD_CSQ); i++) POS_Connect_TX_Buff[i] = CMD_CSQ[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case GM5_Save: { for (i = 0; i < strlen(CMD_Save); i++) POS_Connect_TX_Buff[i] = CMD_Save[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.HeartbeatTimer.TimerCountMax = 1000 * 10; } break; case GM5_RESET: { for (i = 0; i < strlen(CMD_Reset); i++) POS_Connect_TX_Buff[i] = CMD_Reset[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.HeartbeatTimer.TimerCountMax = 1000 * 10; } break; } } }; break; case POS_Net_Typ_4G_L510: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case L510_ATRec: { for (i = 0; i < strlen(CMD_L510_ATRec); i++) POS_Connect_TX_Buff[i] = CMD_L510_ATRec[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.HeartbeatTimer.TimerCountMax = 3000; } break; case L510_IMEI: { for (i = 0; i < strlen(CMD_L510_IMEI); i++) POS_Connect_TX_Buff[i] = CMD_L510_IMEI[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_SetGPSMode: { for (i = 0; i < strlen(CMD_L510_SetGPSMode); i++) POS_Connect_TX_Buff[i] = CMD_L510_SetGPSMode[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_ICPIN: { for (i = 0; i < strlen(CMD_L510_ICPIN); i++) POS_Connect_TX_Buff[i] = CMD_L510_ICPIN[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); // TXHData.HeartbeatTimer.TimerCountMax = 3000; } break; case L510_ICCID: { for (i = 0; i < strlen(CMD_L510_ICCID); i++) POS_Connect_TX_Buff[i] = CMD_L510_ICCID[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_RSSI: { for (i = 0; i < strlen(CMD_L510_RSSI); i++) POS_Connect_TX_Buff[i] = CMD_L510_RSSI[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_Model_NET: { for (i = 0; i < strlen(CMD_L510_Model_NET); i++) POS_Connect_TX_Buff[i] = CMD_L510_Model_NET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_APN: { for (i = 0; i < strlen(CMD_L510_APN); i++) POS_Connect_TX_Buff[i] = CMD_L510_APN[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_NETOPEN: { for (i = 0; i < strlen(CMD_L510_NETOPEN); i++) POS_Connect_TX_Buff[i] = CMD_L510_NETOPEN[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_SOCKET: { if (TXHData.POS_Info.ConnectType == POS_Connect_Typ_Cloud_Tast) // 测试服务器 { for (i = 0; i < strlen(CMD_L510_SOCKET); i++) POS_Connect_TX_Buff[i] = CMD_L510_SOCKET[i]; } else { for (i = 0; i < 20; i++) POS_Connect_TX_Buff[i] = CMD_L510_SOCKET[i]; //"AT+SOCKA=TCP,test.joyfueling.com,7011\r\n"; Temp = strlen((const char *)TXHData.POSData.WirelessData.CMD_SOCKA); k = mystrstr(TXHData.POSData.WirelessData.CMD_SOCKA, ","); if (Temp) { for (i = 0; i < k - 1; i++) POS_Connect_TX_Buff[20 + i] = TXHData.POSData.WirelessData.CMD_SOCKA[i]; POS_Connect_TX_Buff[20 + k - 1] = '\"'; for (i = k; i < Temp + 1; i++) POS_Connect_TX_Buff[20 + i] = TXHData.POSData.WirelessData.CMD_SOCKA[i - 1]; strcat(POS_Connect_TX_Buff, "\r\n\0"); } i = strlen((char *)&POS_Connect_TX_Buff); } POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_GetLinkState: { for (i = 0; i < strlen(CMD_L510_GetLinkState); i++) POS_Connect_TX_Buff[i] = CMD_L510_GetLinkState[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case L510_AT: { if (TXHData.HeartbeatTimer.TimerCountMax == 1001) TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_RESET; else TXHData.HeartbeatTimer.TimerCountMax = 1001; for (i = 0; i < strlen(CMD_L510_AT); i++) POS_Connect_TX_Buff[i] = CMD_L510_AT[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); /// TXHData.POSNetSetState.Flag.POSNetCMDNext = L510_RESET; } break; case L510_RESET: { for (i = 0; i < strlen(CMD_L510_RESET); i++) POS_Connect_TX_Buff[i] = CMD_L510_RESET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.HeartbeatTimer.TimerCountMax = 1000 * 15; } break; } } }; break; case POS_Net_Typ_WiFi: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case WIFI_ATRec: { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_ATRec); i++) POS_Connect_TX_Buff[i] = CMD_ATRec[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); // TXHData.HeartbeatTimer.TimerCountMax = 1000*10; } break; case WIFI_WifiWSSSID: { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < 100; i++) POS_Connect_TX_Buff[i] = 0; TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; { // if(TXHData.POS_Info.ConnectType == POS_Connect_Typ_WifiStation) // { // TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; // for(i = 0;i < strlen(CMD_WifiWSSSID_WIFIStation);i ++) // POS_Connect_TX_Buff[i] = CMD_WifiWSSSID_WIFIStation[i]; // POS_Connect_TX_DMALenSet(i); //设置发送DMA长度 // POS_Connect_TX_DMAStart(); // } // else { for (i = 0; i < 8; i++) POS_Connect_TX_Buff[i] = CMD_WifiWSSSID[i]; for (i = 0; i < strlen((const char *)TXHData.POSData.WirelessData.WiFIName); i++) POS_Connect_TX_Buff[8 + i] = TXHData.POSData.WirelessData.WiFIName[i]; POS_Connect_TX_Buff[8 + i] = ','; j = 8 + i + 1; for (i = 0; i < strlen((const char *)TXHData.POSData.WirelessData.WiFIPassWord); i++) POS_Connect_TX_Buff[j + i] = TXHData.POSData.WirelessData.WiFIPassWord[i]; strcat(POS_Connect_TX_Buff, "\r\n\0"); POS_Connect_TX_DMALenSet(strlen((const char *)POS_Connect_TX_Buff)); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } } TXHData.HeartbeatTimer.TimerCountMax = 1000 * 10; } break; case WIFI_WifiRSSI: { for (i = 0; i < strlen(CMD_WifiRSSI); i++) POS_Connect_TX_Buff[i] = CMD_WifiRSSI[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.POSNetSetState.Flag.POSNetCMDNext = WIFI_WifiSOCKET; TXHData.HeartbeatTimer.TimerCountMax = 1000 * 2; } break; case WIFI_WifiSOCKET: { switch (TXHData.POS_Info.ConnectType) { case POS_Connect_Typ_Cloud_Tast: { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(CMD_WifiSOCKET); i++) POS_Connect_TX_Buff[i] = CMD_WifiSOCKET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case POS_Connect_Typ_Cloud: { for (i = 0; i < 100; i++) POS_Connect_TX_Buff[i] = 0; TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < 14; i++) POS_Connect_TX_Buff[i] = CMD_WifiSOCKET[i]; // const char CMD_WifiSOCKET[]="AT+Socket=0,0,test.joyfueling.com,7011\r\n"; j = strlen((const char *)TXHData.POSData.WirelessData.CMD_SOCKA); if (j) { for (i = 0; i < j; i++) POS_Connect_TX_Buff[14 + i] = TXHData.POSData.WirelessData.CMD_SOCKA[i]; strcat(POS_Connect_TX_Buff, "\r\n\0"); } POS_Connect_TX_DMALenSet(strlen((const char *)POS_Connect_TX_Buff)); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; // case POS_Connect_Typ_WifiStation: // { // TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; // for(i = 0;i < strlen(CMD_WifiSOCKET_WIFIStation);i ++) // POS_Connect_TX_Buff[i] = CMD_WifiSOCKET_WIFIStation[i]; // POS_Connect_TX_DMALenSet(i); //设置发送DMA长度 // POS_Connect_TX_DMAStart(); // }break; } TXHData.HeartbeatTimer.TimerCountMax = 1000 * 10; } break; case WIFI_WifiRST: { for (i = 0; i < strlen(CMD_WifiRST); i++) POS_Connect_TX_Buff[i] = CMD_WifiRST[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.HeartbeatTimer.TimerCountMax = 1000 * 10; } break; } } }; break; case POS_Net_Typ_WAN: { { switch (TXHData.POSNetSetState.Flag.POSNetCMDNext) { case USRK3_ENTM: { for (i = 0; i < strlen(CMD_Model_NET); i++) POS_Connect_TX_Buff[i] = CMD_Model_NET[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.POSNetSetState.Flag.POSNetCMDNext = USRK3_Model_Set_1; TXHData.HeartbeatTimer.TimerCountMax = 1000; } break; case USRK3_Model_Set_1: { for (i = 0; i < strlen(CMD_Model_Set_1); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_1[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_Model_Set_2: { for (i = 0; i < strlen(CMD_Model_Set_2); i++) POS_Connect_TX_Buff[i] = CMD_Model_Set_2[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_Rec: { for (i = 0; i < strlen(CMD_ATRec); i++) POS_Connect_TX_Buff[i] = CMD_ATRec[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_DHCP: { for (i = 0; i < strlen(CMD_DHCP); i++) POS_Connect_TX_Buff[i] = CMD_DHCP[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_GetIP: { for (i = 0; i < strlen(CMD_GetIP); i++) POS_Connect_TX_Buff[i] = CMD_GetIP[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_SOCKET: { if (TXHData.POS_Info.ConnectType == POS_Connect_Typ_Cloud_Tast) // 测试服务器 { for (i = 0; i < strlen(WlanTsatURL); i++) POS_Connect_TX_Buff[i] = WlanTsatURL[i]; } else { for (i = 0; i < 15; i++) POS_Connect_TX_Buff[i] = WlanTsatURL[i]; //"AT+SOCKB1=TCPC,test.joyfueling.com,7011\r\n" j = strlen((const char *)TXHData.POSData.WirelessData.CMD_SOCKA); if (j) { for (i = 0; i < j; i++) POS_Connect_TX_Buff[15 + i] = TXHData.POSData.WirelessData.CMD_SOCKA[i]; strcat(POS_Connect_TX_Buff, "\r\n\0"); } i = strlen((char *)&POS_Connect_TX_Buff); } POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_GetLinkState: { for (i = 0; i < strlen(CMD_GetLinkState); i++) POS_Connect_TX_Buff[i] = CMD_GetLinkState[i]; POS_Connect_TX_DMALenSet(i); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); } break; case USRK3_RST: { for (i = 0; i < sizeof(CMD_Reset); i++) POS_Connect_TX_Buff[i] = CMD_Reset[i]; POS_Connect_TX_DMALenSet(i - 1); // 设置发送DMA长度 POS_Connect_TX_DMAStart(); TXHData.HeartbeatTimer.TimerCountMax = 1000 * 10; } break; } } }; break; } } return 0; }