Procházet zdrojové kódy

ibutton 增加设备类型、相应协议更新

guoqiang před 9 měsíci
rodič
revize
f325ea310b

+ 3 - 3
Device/AngleSensor.c

@@ -129,9 +129,9 @@ float AngleSensor_GetAnglePolling(void)
 			crc = SPI_CRC8(g_spiTxBuff1, 4);
 			if(g_spiRxBuff1[4] == crc){
 				
-				printf("crc22 %x: g_spiRxBuff1[0]:0x%x, g_spiRxBuff1[1]:0x%x \r\n", crc, g_spiRxBuff1[0], g_spiRxBuff1[1]);
-				printf("g_spiRxBuff1[2]:0x%x, g_spiRxBuff1[3]:0x%x \r\n", g_spiRxBuff1[2], g_spiRxBuff1[3]);
-				printf("g_spiRxBuff1[4]:0x%x, g_spiRxBuff1[5]:0x%x \r\n", g_spiRxBuff1[4], g_spiRxBuff1[5]);
+//				printf("crc22 %x: g_spiRxBuff1[0]:0x%x, g_spiRxBuff1[1]:0x%x \r\n", crc, g_spiRxBuff1[0], g_spiRxBuff1[1]);
+//				printf("g_spiRxBuff1[2]:0x%x, g_spiRxBuff1[3]:0x%x \r\n", g_spiRxBuff1[2], g_spiRxBuff1[3]);
+//				printf("g_spiRxBuff1[4]:0x%x, g_spiRxBuff1[5]:0x%x \r\n", g_spiRxBuff1[4], g_spiRxBuff1[5]);
 //				
 				if((g_spiRxBuff1[5]&0x30) != 0x30){
 //					printf("angle_raw 111 : %f \r\n", angle);

+ 17 - 11
Device/IB_Reader.c

@@ -14,7 +14,7 @@
 
 
 static uint8_t rom_id[8]={0};
-static uint8_t oil_type = OIL_TYPE_NULL;
+static uint16_t g_oilType = OIL_TYPE_NULL;
 static uint8_t ib_readerror_count = 0;
 
 /**
@@ -165,6 +165,8 @@ uint8_t IBread_Memory(void)
 {
 	uint8_t Ackbit = 1;
 	uint8_t i=0;
+	uint16_t oil_type = 0;
+	uint16_t _type = 0;
 	
 	memset(rom_id, 0, sizeof(rom_id));
 	Ackbit = OneWire_Init();		//总线初始化时序
@@ -176,20 +178,24 @@ uint8_t IBread_Memory(void)
 		OneWire_SenByte(0x00);	
 		OneWire_SenByte(0x00);	
 		
-		for(i=0; i<2;i++){
+		for(i=0; i<4;i++){
 			rom_id[i]=OneWire_ReceiveByte();		//第一个字节为低位
 		}
 		
-		//油品两个字节互为补码
-		if((0 == (rom_id[0]&rom_id[1])) && (0xFF == (rom_id[0]|rom_id[1]))){
-			oil_type = rom_id[0];
+		oil_type = (rom_id[0]<<8)|rom_id[1];
+		_type = (rom_id[2]<<8)|rom_id[3];
+		
+		//油品类型 是按位取反关系
+		if((0 == (oil_type&_type)) && (0xFFFF == (oil_type|_type))){
+			//oil_type = rom_id[0];
+			g_oilType = oil_type;
 			ib_readerror_count = 0;
 		}else{
 			
-			if(((0xFF == rom_id[0]) && (0xFF == rom_id[1])) || ((0x00 == rom_id[0]) && (0x00 == rom_id[1])))
+			if(((0xFFFF == oil_type) && (0xFFFF == _type)) || ((0x00 == oil_type) && (0x00 == _type)))
 			{
 				//断开
-				oil_type = OIL_TYPE_NULL;
+				g_oilType = OIL_TYPE_NULL;
 				ib_readerror_count = 0;
 
 			}else{
@@ -198,7 +204,7 @@ uint8_t IBread_Memory(void)
 				
 				if(ib_readerror_count >= 3){
 					ib_readerror_count = 3;
-					oil_type = OIL_TYPE_NULL;
+					g_oilType = OIL_TYPE_NULL;
 				}
 				
 			}
@@ -212,7 +218,7 @@ uint8_t IBread_Memory(void)
 		
 		if(ib_readerror_count >= 2){
 			ib_readerror_count = 3;
-			oil_type = OIL_TYPE_NULL;
+			g_oilType = OIL_TYPE_NULL;
 		}
 	}
 
@@ -234,7 +240,7 @@ void IBRead_OilType(void)
 	IBread_Memory();
 }
 
-uint8_t IBGet_OilType(void)
+uint16_t IBGet_OilType(void)
 {
-	return oil_type;
+	return g_oilType;
 }

+ 1 - 1
Device/IB_Reader.h

@@ -47,7 +47,7 @@ extern "C" {
 /*¶ÁÈ¡ÓÍÆ·ÀàÐÍ*/
 void IB_Print(void);
 void IBRead_OilType(void);
-uint8_t IBGet_OilType(void);
+uint16_t IBGet_OilType(void);
 
 
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 159 - 93
Project/AirControlValve.uvguix.JL200


+ 18 - 1
Project/AirControlValve.uvoptx

@@ -148,7 +148,24 @@
           <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AC780x_128KB -FS08000000 -FL020000 -FP0($$Device:AC78013MDQA$Flash\AC780x_128KB.FLM))</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>84</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\User\process.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+      </Breakpoint>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>

+ 1 - 1
Project/AirControlValve.uvprojx

@@ -50,7 +50,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>ElectricalValve_20240929</OutputName>
+          <OutputName>ElectricalValve_20241119</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 6284 - 6197
Project/JLinkLog.txt


+ 7 - 0
User/main_task.c

@@ -134,6 +134,13 @@ void mb_03_handle(void)
 					g_mb_ctx.exception_code = INVALID_DATA;
 				}
 				break;
+			case Cmd_DeviceInfo:
+				if(4 == read_len){
+					tx_offset += Read_Devinfo(g_mb_ctx.txbuf+tx_offset, g_mb_ctx.txbuf_size-tx_offset);
+				}else{
+					g_mb_ctx.exception_code = INVALID_DATA;
+				}
+				break;
 			case Cmd_ReadRecordNum:
 				if(2 == read_len){
 					tx_offset += Read_RecordsNum(g_mb_ctx.txbuf+tx_offset, g_mb_ctx.txbuf_size-tx_offset);

+ 13 - 15
User/process.c

@@ -32,8 +32,8 @@ uint32_t	g_poweroff_count = 0;				/*
 
 uint8_t g_runstate; //运行状态,切换LED灯光 
 
-uint8_t g_lockstatus = STATUS_UNKOWN;
-uint8_t g_coverstatus = STATUS_COVERCLOSE;
+volatile uint8_t g_lockstatus = STATUS_UNKOWN;
+volatile uint8_t g_coverstatus = STATUS_COVERCLOSE;
 
 //电机状态 
 uint8_t g_motorstate = MOTOR_INIT;
@@ -95,21 +95,18 @@ void Process_Init(void)
 	
 		g_detectTime = 0;
 		g_runstate = STATE_LOCK;
-		g_angleRead_Interval = 500;
+		g_angleRead_Interval = 5;
 		g_angleRead_Count = 0;
 		g_ibRead_count =0;
 	
-		s_angle = AngleSensor_GetAngle();
-		g_lockstatus=get_lockstatus();
-
-
-		
-		g_coverstatus=Gpio_IsOpenCover()>0?STATUS_COVEROPEN:STATUS_COVERCLOSE;
+//		s_angle = AngleSensor_GetAngle();
+//		g_lockstatus=get_lockstatus();
+//		g_coverstatus=Gpio_IsOpenCover()>0?STATUS_COVEROPEN:STATUS_COVERCLOSE;
 
 		g_motorstate = MOTOR_READY;
 	
 		/*上电默认LED点亮.*/
-		update_runstate();
+//		update_runstate();
 }
 
 void Process_RunPrd(void)
@@ -120,6 +117,9 @@ void Process_RunPrd(void)
 	{
 		g_blinkLedTime = 0;
 		g_blinkLedTgtTime = BLINK_LED_DFTT;
+		
+		g_coverstatus=Gpio_IsOpenCover();
+	
 		update_runstate();
 		
 		switch(g_runstate){
@@ -192,10 +192,10 @@ void Process_RunPrd(void)
 		//Storage_CountReduce();
 		
 		//g_poweroff_count++;
-		printf(" opencover : %d \r\n", Gpio_IsOpenCover());
+		printf(" opencover : %d \r\n", g_coverstatus);
 		
 		
-		printMotorCurrent();
+		//printMotorCurrent();
 		
 		//printf(" Battery Voltage:%f V \r\n", getBatteryVoltage());
 		
@@ -278,8 +278,6 @@ void Process_MotorControl(float angle)
 	}
 	
 	g_lockstatus=get_lockstatus();
-	g_coverstatus=Gpio_IsOpenCover()>0?STATUS_COVEROPEN:STATUS_COVERCLOSE;
-	
 
 	//处理开关锁  
 	switch(g_motorstate){
@@ -429,7 +427,7 @@ uint8_t get_lockstatus(void)
 }
 
 
-uint8_t Process_GetOilType(void)
+uint16_t Process_GetOilType(void)
 {
 	return IBGet_OilType();
 }

+ 1 - 1
User/process.h

@@ -104,7 +104,7 @@ void Process_RunPrd(void);
 void Process_Poweroff(void); 
 void Process_Storage(void); 
 
-uint8_t Process_GetOilType(void); 
+uint16_t Process_GetOilType(void); 
 uint8_t Process_GetLockStatus(void); 
 uint8_t Process_GetCoverStatus(void); 
 uint8_t Process_OpLock(uint8_t speed); 

+ 27 - 3
User/protocol.c

@@ -12,9 +12,9 @@ static DataItem tmp_record;
 static uint8_t tmp_i=0;
 	
 #ifdef IS_BOOTLOADER
-uint32_t Firmware_Version[4] = {1, 0, 2, 20241009};
+uint32_t Firmware_Version[4] = {1, 1, 1, 20241119};
 #else
-uint32_t Firmware_Version[4] = {1, 1, 8, 20240929};
+uint32_t Firmware_Version[4] = {1, 1, 1, 20241119};
 #endif
 
 
@@ -112,13 +112,15 @@ uint16_t Read_Baudrate(uint8_t *pBuf, uint16_t buf_len)
 uint16_t Read_LockStatus(uint8_t *pBuf, uint16_t buf_len) 
 {
 	uint8_t tmp = 0;
+	uint16_t tmp2 = 0;
 	if( buf_len < 2){
 		return 0;
 	}
 	
 	tmp = Process_GetCoverStatus();  //上盖状态
 	pBuf[0] = (tmp<<4)|Process_GetLockStatus();   //锁状态 
-	pBuf[1] = Process_GetOilType();  //油品标识
+	tmp2 = Process_GetOilType();
+	pBuf[1] = tmp2>>8;  //油品标识
 	
 	return 2;
 }
@@ -173,6 +175,28 @@ uint16_t Read_Angle(uint8_t *pBuf, uint16_t buf_len)
 
 }
 
+
+//读取设备信息 
+uint16_t Read_Devinfo(uint8_t *pBuf, uint16_t buf_len) 
+{
+	uint8_t tmp = 0;
+	uint16_t tmp2 = 0;
+	if( buf_len < 4){
+		return 0;
+	}
+	
+	tmp = Process_GetCoverStatus();  //上盖状态
+	pBuf[0] = (tmp<<4)|Process_GetLockStatus();   //锁状态 
+	tmp2 = Process_GetOilType();
+	pBuf[1] = tmp2>>8;  //油品标识
+	pBuf[2] = tmp2;     //设备类型
+	pBuf[3] = 0x00;
+	
+	return 4;
+}
+
+
+
 //读取设备日期时间 
 uint16_t Read_DateTime(uint8_t *pBuf, uint16_t buf_len)
 {

+ 3 - 0
User/protocol.h

@@ -57,6 +57,7 @@ extern "C" {
 #define Cmd_ReadThreshold    	 (0x0023)
 #define Cmd_AngleCalibration   (0x002B)
 #define Cmd_ReadAngle    	 		 (0x002C)
+#define Cmd_DeviceInfo    		 (0x002E)
 //#define 
 #define Cmd_ReadRecordNum    	 (0x0030)
 #define Cmd_ReadRecords	       (0x0031)
@@ -90,6 +91,8 @@ uint16_t Read_Baudrate(uint8_t *pBuf, uint16_t buf_len);
 uint16_t Read_LockStatus(uint8_t *pBuf, uint16_t buf_len); //读取锁状态 
 uint16_t Read_Threshold(uint8_t *pBuf, uint16_t buf_len);//读取开锁、上锁阀值 
 uint16_t Read_Angle(uint8_t *pBuf, uint16_t buf_len);//读取编码器角度值  
+uint16_t Read_Devinfo(uint8_t *pBuf, uint16_t buf_len); //读取设备状态及ibutton 信息
+
 uint16_t Read_DateTime(uint8_t *pBuf, uint16_t buf_len);//读取设备日期时间 
 
 uint16_t Read_RecordsNum(uint8_t *pBuf, uint16_t buf_len);//读取设备历史记录条数