Procházet zdrojové kódy

致铂智能计量开关,1,2,3,6位

zzw před 5 měsíci
rodič
revize
bd66e74e4d
100 změnil soubory, kde provedl 316406 přidání a 0 odebrání
  1. binární
      Projects/macro/switch_ota_app_V1.1.06.rar
  2. 27 0
      Projects/macro/switch_ota_app_V1.1.06/CRC.c
  3. 7 0
      Projects/macro/switch_ota_app_V1.1.06/CRC.h
  4. 196 0
      Projects/macro/switch_ota_app_V1.1.06/EEPROM.c
  5. 29 0
      Projects/macro/switch_ota_app_V1.1.06/EEPROM.h
  6. 166 0
      Projects/macro/switch_ota_app_V1.1.06/GLOBAL.c
  7. 187 0
      Projects/macro/switch_ota_app_V1.1.06/GLOBAL.h
  8. 1442 0
      Projects/macro/switch_ota_app_V1.1.06/HLW8110.c
  9. 100 0
      Projects/macro/switch_ota_app_V1.1.06/HLW8110.h
  10. 51 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/CRC.lst
  11. 243 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/EEPROM.lst
  12. 194 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/GLOBAL.lst
  13. 1612 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HLW8110.lst
  14. 4851 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY.m51
  15. 5468 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP.m51
  16. 5469 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V101.m51
  17. 5420 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V101_.m51
  18. 5472 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V102.m51
  19. 5469 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V102_test.m51
  20. 5426 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V103.m51
  21. 5426 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V104.m51
  22. 5239 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY.m51
  23. 5468 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP.m51
  24. 5469 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V101.m51
  25. 5421 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V101_.m51
  26. 5453 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V102.m51
  27. 5469 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V102_test.m51
  28. 5453 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V103.m51
  29. 5477 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V104.m51
  30. 4851 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY.m51
  31. 5468 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP.m51
  32. 7076 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V10.m51
  33. 5469 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V101.m51
  34. 5472 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V102.m51
  35. 5469 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V102_test.m51
  36. 5477 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V103.m51
  37. 5888 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V104.m51
  38. 5657 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY.m51
  39. 5852 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP.m51
  40. 5853 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_DEBUG.m51
  41. 5853 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V1.0.m51
  42. 5420 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V100_test.m51
  43. 5853 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V101.m51
  44. 5861 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V102.m51
  45. 5853 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V102_test.m51
  46. 5861 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V103.m51
  47. 7165 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V104.m51
  48. 281 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/STARTUP_TENX52.lst
  49. 156 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/TM52F1386_bsp.lst
  50. 1528 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/gpio_ctrl.lst
  51. 367 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/iap.lst
  52. 1494 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/main.lst
  53. 4851 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/main.m51
  54. 650 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/mcu_api.lst
  55. 2816 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/protocol.lst
  56. 62 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/sTimeout.lst
  57. 805 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/system.lst
  58. 97 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/time2.lst
  59. 220 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/uart.lst
  60. 420 0
      Projects/macro/switch_ota_app_V1.1.06/Listings/uart2.lst
  61. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/CRC.obj
  62. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/EEPROM.obj
  63. 2 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/ExtDll.iex
  64. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/GLOBAL.obj
  65. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HLW8110.obj
  66. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY
  67. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.bin
  68. 136 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.build_log.htm
  69. 1316 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.hex
  70. 16 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.lnp
  71. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.log
  72. 4386 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx
  73. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.bin
  74. 32769 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.crc
  75. 18402 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.crc16_WriterVerify
  76. 32801 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.crc2
  77. 38 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_.tin
  78. 2 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_.tin.bak
  79. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP
  80. 1485 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.hex
  81. 18 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.lnp
  82. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.log
  83. 4386 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.tenx
  84. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.tenx.bin
  85. 34 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_.tin
  86. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_.tin.bak
  87. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_Driver.log
  88. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101
  89. 1486 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.hex
  90. 18 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.lnp
  91. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.log
  92. 4386 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.tenx
  93. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.tenx.bin
  94. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_
  95. 1472 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.hex
  96. 18 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.lnp
  97. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.log
  98. 4386 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.tenx
  99. binární
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.tenx.bin
  100. 0 0
      Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.tin

binární
Projects/macro/switch_ota_app_V1.1.06.rar


+ 27 - 0
Projects/macro/switch_ota_app_V1.1.06/CRC.c

@@ -0,0 +1,27 @@
+#include <REGtenxTM52F1386.H>
+#include <intrins.h>
+
+/*******************************************************************
+** 函数名称: crc_calcu
+** 函数描述: 数据CRC校验
+** 输入参数: 无
+** 输出参数: ret   CRC的校验值
+*******************************************************************/
+unsigned int crc_calcu(unsigned char *p,unsigned int len)
+{
+	unsigned int ret=0;
+	unsigned int i=0;
+	CRCIN = 0;
+	CRCDH = 0xff;
+	CRCDL = 0xff;
+	for(i = 0;i<len;i++)
+	{
+		CRCIN = p[i];   //将要检验的数据送入到CRCIN寄存器里
+	}
+
+	ret = CRCDH;
+	ret = ret<<8;
+	ret = ret|CRCDL;
+	return ret;    //返回校验值
+}
+

+ 7 - 0
Projects/macro/switch_ota_app_V1.1.06/CRC.h

@@ -0,0 +1,7 @@
+#ifndef CRC_H
+#define CRC_H
+
+unsigned int crc_calcu(unsigned char *p,unsigned int len);
+
+
+#endif

+ 196 - 0
Projects/macro/switch_ota_app_V1.1.06/EEPROM.c

@@ -0,0 +1,196 @@
+/***********************************************************************************************************
+  显示效果:					
+  用户通过仿真,能够对EEPROM的特定区域地址内容进行读写操作,并验证数据操作正确与否。			
+  eeprom写数据
+  连续写字节不能太多
+  写单个字节的时间根据写的内容的前后不同,时间不等。	以及电源电压相关
+  理论上随着写的次数增加,写的时间会相应增加,建议以单个字节1ms-2ms的时间为基准
+***********************************************************************************************************/
+#include <REGtenxTM52F1386.h>
+#include "TM52F1386_bsp.h"
+#include <intrins.h>
+#include "EEPROM.h"
+
+
+#define		IAPTE_0P8_MS	AUX2=(AUX2&0xf9)|0x02
+#define		IAPTE_3P2_MS	AUX2=(AUX2&0xf9)|0x04
+#define		IAPTE_6P4_MS	AUX2=(AUX2&0xf9)|0x06
+#define		IAPTE_DISABLE	AUX2=(AUX2&0xf9)
+
+// 设置最大20字节存参数
+unsigned char xdata eeprom_address_write[30]  _at_   0XDC00;             //eeprom指定地址,第一页用于状态数据+参数配置
+unsigned char code eeprom_address_read[30]  _at_   0XDC00;             //eeprom指定地址
+
+// 设置最大20字节存参数
+unsigned char xdata eeprom_address_write_backup[30]  _at_   0XDE00;             //eeprom指定地址,第二页,参数配置备份区,第一页读取失败从第二页读取参数备份
+unsigned char code eeprom_address_read_backup[30]  _at_   0XDE00;             //eeprom指定地址
+
+/*
+参数数据(10,实际从1开始,0字节保留):0-9:开机状态(通电勿扰)全局设置1字节-1,三个继电器开机状态3个字节-2-3-4,背光等级1个字节-5 , 开关、场景设置-6-7-8,人感1字节-9
+
+实时数据(6):10:19:当前继电器状态3个字节-10-11-12,雷达状态1字节-13,点动倒计时未结束1个字节-15-16-17,ota状态1字节-19(最后一字节)
+
+点动开关参数(9):,点动开关2个字节(使能1,时间2)-20-21-22,-23-24-25,-26-27-28
+*/
+unsigned char write_mileage[30];//0:人感开关,1:开机状态全局开关,2:按键1默认状态,3:按键2默认状态,4:按键3默认状态
+unsigned char read_mileage[30];
+
+unsigned char write_mileage_backup[30];//0:人感开关,1:开机状态全局开关,2:按键1默认状态,3:按键2默认状态,4:按键3默认状态
+unsigned char read_mileage_backup[30];
+//unsigned char II=0;
+/**********************************************************************************************************
+** 函数名称: iap_eeprom_write
+** 函数描述: iap_EEPROM写数据配置函数  
+** 输入参数: addr:存储地址,范围0~127
+             buf:数据的首地址
+			len:数据长度(addr+len不要超过128)
+** 输出参数: 无 
+**********************************************************************************************************/
+void iap_eeprom_write(unsigned char addr, unsigned char *buf, unsigned char len)       
+{
+	unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+	temp_ea = EA;
+	EA = 0;
+	temp_lvrpd = LVRCON & 0x10;  // LVR的状态位  
+	LVRCON = (LVRCON &~ 0x10) | (1 << 4); //关闭LVR功能
+
+ 	IAPWE_SFR=0XE2;    //使能iap
+ 	IAPWE_SFR=0XBA;    //使能iap	  
+	eeprom_address_write[0] = 0x00;//是所在页的整页都擦除
+	bsp_delay_ms(5);
+	
+ 	IAPWE_SFR=0XE2;    //使能iap
+ 	IAPWE_SFR=0X4C;    //使能iap
+	
+	for(i = 0; i<len; i++) {
+		IAPTE_6P4_MS;        //设置IAP看门狗复位时间
+		eeprom_address_write[addr + i] = *buf;//
+		buf++;
+	}
+	
+	LVRCON = (LVRCON &~ 0x10) | (temp_lvrpd << 4); //还原LVR
+  IAPWE_SFR = 0x00;    //关闭IAP
+	IAPTE_DISABLE;
+	EA = temp_ea;
+}
+
+/**********************************************************************************************************
+** 函数名称: iap_eeprom_write_backup
+** 函数描述: iap_EEPROM写数据配置函数  
+** 输入参数: addr:存储地址,范围0~127
+             buf:数据的首地址
+			len:数据长度(addr+len不要超过128)
+** 输出参数: 无 
+**********************************************************************************************************/
+void iap_eeprom_write_backup(unsigned char addr, unsigned char *buf, unsigned char len)       
+{
+	unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+	temp_ea = EA;
+	EA = 0;
+	temp_lvrpd = LVRCON & 0x10;  // LVR的状态位  
+	LVRCON = (LVRCON &~ 0x10) | (1 << 4); //关闭LVR功能
+
+ 	IAPWE_SFR=0XE2;    //使能iap
+ 	IAPWE_SFR=0XBA;    //使能iap	  
+	eeprom_address_write_backup[0] = 0x00;//是所在页的整页都擦除
+	bsp_delay_ms(5);
+	
+ 	IAPWE_SFR=0XE2;    //使能iap
+ 	IAPWE_SFR=0X4C;    //使能iap
+	
+	for(i = 0; i<len; i++) {
+		IAPTE_6P4_MS;        //设置IAP看门狗复位时间
+		eeprom_address_write_backup[addr + i] = *buf;//
+		buf++;
+	}
+	
+	LVRCON = (LVRCON &~ 0x10) | (temp_lvrpd << 4); //还原LVR
+  IAPWE_SFR = 0x00;    //关闭IAP
+	IAPTE_DISABLE;
+	EA = temp_ea;
+}
+/**********************************************************************************************************
+** 函数名称: iap_eeprom_read
+** 函数描述: iap_EEPROM读数据配置函数  
+** 输入参数: addr:存储地址,范围0~127
+             buf:数据的首地址
+			len:数据长度(addr+len不要超过128)
+** 输出参数: 无 
+**********************************************************************************************************/
+void iap_eeprom_read(unsigned char addr, unsigned char *buf, unsigned char len)    //eeprom读
+{
+ unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+	
+	temp_ea = EA;
+	EA = 0; 
+	for(i = 0;i<len;i++) {
+		*buf = eeprom_address_read[addr+i];
+		buf++;
+	}	
+	EA = temp_ea;
+}
+
+/**********************************************************************************************************
+** 函数名称: iap_eeprom_read_backup
+** 函数描述: iap_EEPROM读数据配置函数  
+** 输入参数: addr:存储地址,范围0~127
+             buf:数据的首地址
+			len:数据长度(addr+len不要超过128)
+** 输出参数: 无 
+**********************************************************************************************************/
+void iap_eeprom_read_backup(unsigned char addr, unsigned char *buf, unsigned char len)    //eeprom读
+{
+ unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+	
+	temp_ea = EA;
+	EA = 0; 
+	for(i = 0;i<len;i++) {
+		*buf = eeprom_address_read_backup[addr+i];
+		buf++;
+	}	
+	EA = temp_ea;
+}
+
+
+/*
+void test(void)
+{
+	
+	bsp_clock_init();                    // 系统快钟18.432 div 2 =  9.216Mhz
+	gpio_init();
+	write_mileage[0] = 0x22;
+	write_mileage[1] = 0x33;
+	write_mileage[2] = 0x44;
+	write_mileage[3] = 0x55;
+  iap_eeprom_write(0,write_mileage,4); //写四个字节(0x22 0x33 0x44 0x55)      
+	bsp_delay_ms(50);                    
+
+	read_mileage[0] = 0;
+	read_mileage[1] = 0;
+	read_mileage[2] = 0;
+	read_mileage[3] = 0;
+	iap_eeprom_read(0,read_mileage,4);  //读四个字节与之前写的四个字节是否一致(0x22 0x33 0x44 0x55)
+	
+	write_mileage[0] = 0x66;
+	write_mileage[1] = 0x77;
+	write_mileage[2] = 0x88;
+	write_mileage[3] = 0x99;
+  iap_eeprom_write(0,write_mileage,4); //写四个字节(0x66 0x77 0x88 0x99) 	                                     
+	bsp_delay_ms(50);                     
+
+	read_mileage[0] = 0;
+	read_mileage[1] = 0;
+	read_mileage[2] = 0;
+	read_mileage[3] = 0;
+	iap_eeprom_read(0,read_mileage,4);  //读四个字节与之前写的四个字节是否一致(0x66 0x77 0x88 0x99)
+
+  while(1) 
+	{
+		if (0x66 == read_mileage[0]) {
+			LED1 = 0;
+		} 
+		else {
+			LED1 = 1;
+		} 
+	}
+}*/

+ 29 - 0
Projects/macro/switch_ota_app_V1.1.06/EEPROM.h

@@ -0,0 +1,29 @@
+/*******************************************************************************
+*
+*   scheduler 
+*   Soft version:   switch V1.00
+*   File Name:      time2.h
+*   Author   :      zzw (zhangzw_3@163.com)
+*   creation date:  2024-01-17
+*	module description: time2 1ms
+*   Copyright (C) reserve
+*
+********************************************************************************/
+#if !defined(__EEPROM_H__)
+#define __EEPROM_H__
+
+
+extern unsigned char write_mileage[30];//最大写入30个有效字节
+extern unsigned char read_mileage[30];
+
+extern unsigned char write_mileage_backup[30];//最大写入30个有效字节
+extern unsigned char read_mileage_backup[30];
+
+void iap_eeprom_write(unsigned char addr, unsigned char *buf, unsigned char len);
+void iap_eeprom_read(unsigned char addr, unsigned char *buf, unsigned char len);
+
+void iap_eeprom_write_backup(unsigned char addr, unsigned char *buf, unsigned char len);
+void iap_eeprom_read_backup(unsigned char addr, unsigned char *buf, unsigned char len);
+
+#endif
+/* EOF */

+ 166 - 0
Projects/macro/switch_ota_app_V1.1.06/GLOBAL.c

@@ -0,0 +1,166 @@
+/*******************************************************************************
+*
+*   SW AS 
+*   Soft version:   
+*   File Name:      GLOBAL.c
+*   Author   :      zzw (zhangzw_3@163.com)
+*   creation date:  2022-07-20
+*   module description:定义系统中的全局变量 
+*   Copyright (C) 
+*
+********************************************************************************/
+#include "GLOBAL.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+///////////////////////////////////////////
+volatile            DBit _BitParament0;
+volatile word   	  tickcount;      /* Timer tick count   		*/
+volatile byte 	    sysTickfor10ms;	/* 10millisecond timer 		*/
+volatile byte 		  sysTickfor100ms;/* 100millisecond timer 	*/
+volatile byte 		  sysTickfor1000ms;/* 100millisecond timer 	*/
+
+SWParameters   switchState;//面板状态
+
+unsigned long	data_dp_add_ele[3] = 0;
+unsigned long data_dp_cur_current[3] = 0;
+unsigned long data_dp_cur_power[3] = 0;
+unsigned long data_dp_cur_voltage = 0;
+
+unsigned long Flash_dp_add_ele[3]={0};
+unsigned long Flash_dp_add_ele_backups[3] = {0};
+unsigned char Save_data_ele_flag = 0;
+unsigned long Save_data_nun = 0;
+
+unsigned char  gRelayOnOff=0;//继电器状态
+byte gLedState = 0;//按键灯状态
+byte gRelayState = 0; // 4bit 继电器值
+
+byte ZG_Joining;//模块进入配网模式, 指示灯快速闪烁10秒
+WORD ZG_JoinCounter;//模块进入配网计数器,倒计时开始
+byte ZG_Joining_S;//模块进入配网模式
+
+
+byte  Brightflag;  //强光标志位,1:白天,0,夜晚
+byte BrightPWMH=6;           //强光灯强光PWM占空比
+byte NightPWMH=1;           //暗光PWM占空比
+byte Light_Intensity;//光强度
+//byte mKeyLedWeakLight;//背光最大亮度值,根据光感设置
+byte mBLedWeakLight;//背光最大亮度值,根据光感设置
+
+unsigned int gRadarKeepTimer=0;//有人存在时,LED灯等相关动作保持时间
+byte gRadarCheckNull;//雷达监测,1为无人,0为有人
+
+byte shockCounter;//震动计数器
+byte shockStart;//按键按下震动触发
+
+byte appControlLedEnable = 0; // app控制背光灯点亮使能位,0:忽略,1:强制点亮10秒
+
+
+
+byte burn_in_test_start=0;//产测标志位
+u32 burn_in_test_counter=0;//产测计数器
+u32 burn_in_test_timeout=0;//产测开机30秒内收到信标才有效
+
+
+u32 IAPUpdateFlag = 0; 
+u32 OTA_Reciv_Datalen;
+
+static const char g_sas8Base64digits[] =
+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+//编码
+void Base64Encode(char *ps8Dest, const char *ps8Source, int s32InLen)
+{
+    if (ps8Dest==NULL || ps8Source==NULL || s32InLen<=0)
+    {
+        return;
+    }
+	
+	for (; s32InLen >= 3; s32InLen -= 3)
+	{
+		*ps8Dest++ = g_sas8Base64digits[ps8Source[0] >> 2];
+		*ps8Dest++ = g_sas8Base64digits[((ps8Source[0] << 4) & 0x30) | (ps8Source[1] >> 4)];
+		*ps8Dest++ = g_sas8Base64digits[((ps8Source[1] << 2) & 0x3c) | (ps8Source[2] >> 6)];
+		*ps8Dest++ = g_sas8Base64digits[ps8Source[2] & 0x3f];
+	    ps8Source += 3;
+	}
+	
+	if (s32InLen > 0)
+	{
+		unsigned char fragment;
+		
+		*ps8Dest++ = g_sas8Base64digits[ps8Source[0] >> 2];
+		fragment = (ps8Source[0] << 4) & 0x30;
+		
+		if (s32InLen > 1)
+			fragment |= ps8Source[1] >> 4;
+		
+		*ps8Dest++ = g_sas8Base64digits[fragment];
+		*ps8Dest++ = (s32InLen < 2) ? '=' : g_sas8Base64digits[(ps8Source[1] << 2) & 0x3c];
+		*ps8Dest++ = '=';
+	}
+	
+	*ps8Dest = '\0';
+}
+
+//解码
+void Base64Decode(char *ps8Dest, const char *ps8Source, int s32InLen)
+{
+    int s32Num = 64;
+    int i,j;
+    char as8ValuePre[4];
+    char s8Temp;
+    int s32Flag = 0;
+	
+    if (ps8Dest==NULL || ps8Source==NULL || s32InLen<=0)
+    {
+        return;
+    }
+    for (i=0; i<s32InLen; i++)
+	{
+		s32Flag = 0;
+		for (j=0; j<64; j++)
+        {
+			if (ps8Source[i] == g_sas8Base64digits[j])
+			{
+                as8ValuePre[i%4] = j;
+                s32Flag = 1;
+                break;
+			}
+		}
+		if (s32Flag == 0)
+		{
+			break;
+		}
+		if (i%4 == 3)
+		{
+			s8Temp = (as8ValuePre[1]>>4)&0x3;
+			*ps8Dest++ = (as8ValuePre[0]<<2) | s8Temp ;
+			s8Temp = (as8ValuePre[2]>>2)&0xF;
+			*ps8Dest++ = (as8ValuePre[1]<<4) | s8Temp ;
+			s8Temp = (as8ValuePre[3])&0x3F;
+			*ps8Dest++ = (as8ValuePre[2]<<6) | s8Temp ;
+		}
+    }
+    i--;
+    if (i%4==1)
+    {
+        s8Temp = (as8ValuePre[1]>>4)&0x3;
+        *ps8Dest++ = (as8ValuePre[0]<<2) | s8Temp ;
+	}
+	else if (i%4==2)
+    {
+        s8Temp = (as8ValuePre[1]>>4)&0x3;
+        *ps8Dest++ = (as8ValuePre[0]<<2) | s8Temp ;
+		s8Temp = (as8ValuePre[2]>>2)&0xF;
+		*ps8Dest++ = (as8ValuePre[1]<<4) | s8Temp ;
+	}
+	
+	*ps8Dest = '\0';
+}
+
+//float   FF_AC_V;													// 电压有效值
+
+/* EOF */

+ 187 - 0
Projects/macro/switch_ota_app_V1.1.06/GLOBAL.h

@@ -0,0 +1,187 @@
+/*******************************************************************************
+*
+*   SW 
+*   Soft version:   
+*   File Name:      GLOBAL.h
+*   Author   :      zzw (zhangzw_3@163.com)
+*   creation date:  2011-05-22
+*   module description:声明SW系统中的全局变量 
+*   Copyright (C) 
+*
+********************************************************************************/
+
+#if !defined(_GLOBAL_H_)
+#define _GLOBAL_H_
+
+
+// ************************* Typedef data type  *********************************
+typedef unsigned 	char  	u08;
+typedef          	char  	s08;
+typedef unsigned 	short 	u16;
+typedef          	short 	s16;
+typedef unsigned 	long 	u32;
+typedef          	long 	s32;
+typedef unsigned 	char  	uchar;
+typedef unsigned 	int   	uint;
+
+
+typedef unsigned char   	BOOL;
+typedef unsigned char		BYTE;
+typedef unsigned int		WORD;
+
+
+typedef unsigned char		byte;
+typedef unsigned int		word;
+typedef unsigned long		dword;
+
+typedef unsigned char		UCHAR;
+typedef unsigned int		UINT;
+typedef unsigned short  	USHORT;
+
+
+#ifndef NULL
+#define NULL 0
+#endif
+///////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////
+// 
+// UART消息及外设ID定义
+//
+#define COM1		0 // 
+#define COM2		1 // 
+
+
+/************************ 位变量定义 ***********************/
+typedef union {
+  byte Byte;
+  struct {
+    byte bit0        :1;                                       
+    byte bit1        :1;                                       
+    byte bit2        :1;                                      
+    byte bit3        :1;                                       
+    byte bit4        :1;                                       
+    byte bit5        :1; 
+    byte bit6        :1; 
+    byte bit7        :1;                                       
+  } Bits;
+} DBit;
+
+typedef struct SW_Parameters
+{
+  u16  SWID;			         //模块ID号
+	u08  KeyIn[6];           //按键状态,未按下时0xff
+	u08  step[6];           //01:按键触发,02:闪烁设置,03:全亮,04:闪烁:05:待机背光
+	u32  flicker[6]; //闪烁总时间
+
+  u08  relay_allstatus;   //继电器开机状态全局标志,开关上电状态设置
+  u08  relay_status[3];   //继电器开机1-3状态,开关上电状态设置
+  u08  relay_new_status[3]; //实时最新的状态,继电器断电前的最新状态
+
+  u08  plus_en[3];//点动触发标志,被设置为点动开关,且有按键按下则置1,点动倒计时结束清零
+  u32  plus_counter[3];//点动开关时间,倒计时计数器
+  u32  plus_auto_time[3];//点动开关自动关闭的时间固定值,通过APP设置保存的
+  u08  plus_mod[3];//对应按键开启点动配置
+
+  u08  mod[6]; //0:开关,1:场景
+	//u08  SCENE[4];			   //4个场景模式状态
+	u08  SWITCH[3];		   //4个普通灯的状态
+
+	//u08  LED[4];	     //4个背光状态
+  //u08  LongKey[4];   //长按标志位,LongKey[1-4]:KEY1-KEY4
+
+  //u08  DEBUG;//调试状态,背光常亮
+  //u08  shock;//震动设置,1有效
+  u08  human;//人感设置,1有效
+  u08  gRadarCheckNull;//无人标志位
+ // u08  light;//光感设置,1有效
+  u08  led_level;//led背光亮度等级
+  //u08  bluelight;//氛围灯设置,1有效
+
+  u08  zigbee_work_state;//zigbee网络状态,0:不在网,1:在网,2:脱网报警(60S)
+  //u08  update_config;//APP更新配置参数
+  u32  time;//倒计时
+	
+	u08  KeyPress;			     //1号按键状态,0未被按下,1被按下
+  u32  buttonPressTime;
+
+  unsigned long  dp_add_ele[3]; //下发可上报(rw)    数值型(Value)    数值范围: 0-5000000, 间距: 100, 倍数: 2, 单位: kW·h    
+  unsigned long  dp_cur_current[3];//    只上报(ro)    数值型(Value)    数值范围: 0-30000, 间距: 1, 倍数: 0, 单位: mA   
+  unsigned long  dp_cur_power[3];//    只上报(ro)    数值型(Value)    数值范围: 0-50000, 间距: 1, 倍数: 1, 单位: W   
+  unsigned long  dp_cur_voltage;//    只上报(ro)    数值型(Value)    数值范围: 0-5000, 间距: 1, 倍数: 1, 单位: V   
+
+  //u16  add_ele; //       add_ele =dp_add_ele/100  单位: kW·h/100    
+  //u16  cur_current;//    cur_current=dp_cur_current, 单位: mA   
+  //u16  cur_power;//      cur_power=dp_cur_power/10, 单位: W/10   
+  //u16  cur_voltage;//    cur_voltage=dp_cur_voltage/10, 单位: V/10   
+
+
+} SWParameters;
+extern unsigned long Flash_dp_add_ele[3];
+extern unsigned long Flash_dp_add_ele_backups[3];
+extern unsigned long data_dp_add_ele[3];
+extern unsigned long data_dp_cur_current[3];
+extern unsigned long data_dp_cur_power[3];
+extern unsigned long data_dp_cur_voltage;
+extern unsigned char Save_data_ele_flag;
+extern unsigned long Save_data_nun;
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+extern volatile              DBit _BitParament0;
+#define sys10msFlag 		_BitParament0.Bits.bit0 	/* 10ms标志 			*/
+
+//#define sysstate             _BitParament0.Bits.bit7 	/* 0代表无故障,1表示故障开启故障指示灯 */
+#define Nightledvalue        0x0C00	 //背光灯调暗AD采集阈值
+
+extern volatile word   	    tickcount;      /* Timer tick count   		*/
+extern volatile byte 		sysTickfor10ms;	/* 10millisecond timer 		*/
+extern volatile byte 		sysTickfor100ms;/* 100millisecond timer 	*/
+extern volatile byte 		sysTickfor1000ms;/* 100millisecond timer 	*/
+
+
+extern  SWParameters   switchState;
+extern unsigned char gRelayOnOff;
+extern byte gLedState;//按键灯状态
+extern byte gRelayState;// 4bit 继电器值
+
+
+#define CONDITION_NORMAL_TO_BEFOR_JOINING 101
+#define CONDITION_BEFOR_JOINING_TO_JOINING 102 //触发入网后倒计时状态
+#define CONDITION_JOINGING_TO_NORMAL 103
+#define CONDITION_JOINGING__NOT_JION 104
+
+
+#define PWMPRD 18432	// 1ms周期
+#define PWMLEVEL1 32 //4608/72	// 一档 25%占空比,64太亮,降低测试
+#define PWMLEVEL2 64 //9216/72	// 二挡 50%占空比,128太亮,降低测试
+#define PWMLEVEL3 255 //18432/72 // 三挡 100%占空比
+
+extern byte ZG_Joining;//模块进入配网模式, 指示灯快速闪烁10秒
+extern WORD ZG_JoinCounter;//模块进入配网计数器,倒计时开始
+
+extern unsigned int gRadarKeepTimer;
+//#define  mKeyLedFlash 240	  //亮度变化间隔(频率),默认24ms变化改变一个光强度
+
+extern  byte  gRadarCheckNull;//雷达监测,1为无人,0为有人
+
+extern byte appControlLedEnable;//APP控制是否联动背光灯标志位
+
+extern byte shockCounter;//震动计数器
+extern byte shockStart;//按键按下震动触发
+
+
+extern byte burn_in_test_start;//产测标志位
+extern u32 burn_in_test_counter;//产测计数器
+extern u32 burn_in_test_timeout;//产测开机30秒内收到信标才有效
+
+extern u32 IAPUpdateFlag; 
+extern u32 OTA_Reciv_Datalen;
+
+extern void Base64Encode(char *ps8Dest, const char *ps8Source, int s32InLen);
+extern void Base64Decode(char *ps8Dest, const char *ps8Source, int s32InLen);
+
+//extern float   FF_AC_V;													// 电压有效值
+
+#endif // !defined(_GLOBAL_H_)
+
+/* EOF */

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1442 - 0
Projects/macro/switch_ota_app_V1.1.06/HLW8110.c


+ 100 - 0
Projects/macro/switch_ota_app_V1.1.06/HLW8110.h

@@ -0,0 +1,100 @@
+#ifndef __HLW8110_H
+#define __HLW8110_H	 
+#include "sys.h"
+#include "core_cm3.h"
+#include "stdio.h"
+#include "iap.h" 
+
+//8112/8110 reg define
+#define REG_SYSCON_ADDR         0x00
+#define REG_EMUCON_ADDR         0x01
+#define REG_HFCONST_ADDR        0x02
+#define REG_EMUCON2_ADDR        0x13
+#define REG_ANGLE_ADDR        	0x22			//相角寄存器
+#define REG_UFREQ_ADDR          0x23     	//市电线性频率地址
+#define REG_RMSIA_ADDR          0x24
+#define REG_RMSIB_ADDR          0x25
+#define REG_RMSU_ADDR           0x26
+#define REG_PF_ADDR             0x27
+#define REG_ENERGY_PA_ADDR			0x28
+#define REG_ENERGY_PB_ADDR			0x29
+#define REG_POWER_PA_ADDR       0x2C
+#define REG_POWER_PB_ADDR       0x2D
+
+#define REG_POWER_PS_ADDR       0x2E
+
+
+#define REG_SAGCYC_ADDR         0x17
+#define REG_SAGLVL_ADDR         0x18
+#define REG_OVLVL_ADDR          0x19
+#define REG_OIALVL_ADDR          0x1a
+
+#define REG_INT_ADDR          	0x1D
+#define REG_IE_ADDR          		0x40
+#define REG_IF_ADDR          		0x41
+#define REG_RIF_ADDR          	0x42
+
+#define REG_RDATA_ADDR          0x44
+
+
+#define REG_CHECKSUM_ADDR				0x6f
+#define REG_RMS_IAC_ADDR				0x70
+#define REG_RMS_IBC_ADDR				0x71
+#define REG_RMS_UC_ADDR					0x72
+#define REG_POWER_PAC_ADDR			0x73
+#define REG_POWER_PBC_ADDR			0x74
+#define REG_POWER_SC_ADDR				0x75
+#define REG_ENERGY_AC_ADDR			0x76
+#define REG_ENERGY_BC_ADDR			0x77
+
+
+//宏定义
+
+#define D_TIME1_50MS	50
+
+
+
+void Init_HLW8110(unsigned char nun);
+void Calculate_HLW8110_MeterData(unsigned char nun);
+void Init_HLW8112(void);
+void HLW8112_Measure(void);
+void Read_Power_Data_handle(void);
+void Raed_ele_data(void);
+	
+extern unsigned char HLW8110Msg;		   //程序状态机
+enum HLW8110_TASK
+{
+	HLW8110_1int = 0,
+	HLW8110_2int,
+	HLW8110_3int,
+	HLW8110_1,//第一路
+	HLW8110_2,    //第二路
+	HLW8110_3,     //第三路
+  HLW8110_IDEL,//空闲任务
+	HLW8110_ERR
+};
+
+typedef struct hlw8110_power
+{
+	float F_AC_V;                                                            
+  float F_AC_I[3];                                                      
+  float F_AC_P[3]; 
+  float F_AC_E[3]; 
+}hlw8110_power_t;
+
+extern hlw8110_power_t hlw8110_power_data;
+extern long int SystemTimer;
+extern unsigned char power_data[21];
+
+extern unsigned char	u8_TxBuf[10]; 
+extern unsigned char	u8_RxBuf[10];
+extern unsigned char	u8_TX_Length;
+extern unsigned char	u8_RX_Length;
+extern unsigned char	u8_RX_Index;
+//unsigned char	B_ReadReg_Time_EN;			// 串口读取寄存器数据,时间计数器标志位,1--开启计数,0--关闭计数
+//unsigned char	B_Tx_Finish;
+extern unsigned char	B_Rx_Finish;
+extern unsigned char	B_Rx_Data_ING;					// 接收数据标志位	,		< 1:接收数据中,0:未接收到数据 >
+extern unsigned char	B_Read_Error;										
+
+#endif

+ 51 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/CRC.lst

@@ -0,0 +1,51 @@
+C51 COMPILER V9.53.0.0   CRC                                                               10/28/2024 12:44:26 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE CRC
+OBJECT MODULE PLACED IN .\Objects\CRC.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE CRC.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG OBJ
+                    -ECTEXTEND PRINT(.\Listings\CRC.lst) TABS(2) OBJECT(.\Objects\CRC.obj)
+
+line level    source
+
+   1          #include <REGtenxTM52F1386.H>
+   2          #include <intrins.h>
+   3          
+   4          /*******************************************************************
+   5          ** 函数名称: crc_calcu
+   6          ** 函数描述: 数据CRC校验
+   7          ** 输入参数: 无
+   8          ** 输出参数: ret   CRC的校验值
+   9          *******************************************************************/
+  10          unsigned int crc_calcu(unsigned char *p,unsigned int len)
+  11          {
+  12   1        unsigned int ret=0;
+  13   1        unsigned int i=0;
+  14   1        CRCIN = 0;
+  15   1        CRCDH = 0xff;
+  16   1        CRCDL = 0xff;
+  17   1        for(i = 0;i<len;i++)
+  18   1        {
+  19   2          CRCIN = p[i];   //将要检验的数据送入到CRCIN寄存器里
+  20   2        }
+  21   1      
+  22   1        ret = CRCDH;
+  23   1        ret = ret<<8;
+  24   1        ret = ret|CRCDL;
+  25   1        return ret;    //返回校验值
+  26   1      }
+  27          
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =    114    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =   ----       7
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

+ 243 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/EEPROM.lst

@@ -0,0 +1,243 @@
+C51 COMPILER V9.53.0.0   EEPROM                                                            10/28/2024 12:44:25 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE EEPROM
+OBJECT MODULE PLACED IN .\Objects\EEPROM.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE EEPROM.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG 
+                    -OBJECTEXTEND PRINT(.\Listings\EEPROM.lst) TABS(2) OBJECT(.\Objects\EEPROM.obj)
+
+line level    source
+
+   1          /*********************************************************************************************************
+             -**
+   2            显示效果:          
+   3            用户通过仿真,能够对EEPROM的特定区域地址内容进行读写操作,并验证数据操作正确与否。      
+   4            eeprom写数据
+   5            连续写字节不能太多
+   6            写单个字节的时间根据写的内容的前后不同,时间不等。  以及电源电压相关
+   7            理论上随着写的次数增加,写的时间会相应增加,建议以单个字节1ms-2ms的时间为基准
+   8          **********************************************************************************************************
+             -*/
+   9          #include <REGtenxTM52F1386.h>
+  10          #include "TM52F1386_bsp.h"
+  11          #include <intrins.h>
+  12          #include "EEPROM.h"
+  13          
+  14          
+  15          #define   IAPTE_0P8_MS  AUX2=(AUX2&0xf9)|0x02
+  16          #define   IAPTE_3P2_MS  AUX2=(AUX2&0xf9)|0x04
+  17          #define   IAPTE_6P4_MS  AUX2=(AUX2&0xf9)|0x06
+  18          #define   IAPTE_DISABLE AUX2=(AUX2&0xf9)
+  19          
+  20          // 设置最大20字节存参数
+  21          unsigned char xdata eeprom_address_write[30]  _at_   0XDC00;             //eeprom指定地址,第一页用于状态数
+             -据+参数配置
+  22          unsigned char code eeprom_address_read[30]  _at_   0XDC00;             //eeprom指定地址
+  23          
+  24          // 设置最大20字节存参数
+  25          unsigned char xdata eeprom_address_write_backup[30]  _at_   0XDE00;             //eeprom指定地址,第二页,
+             -参数配置备份区,第一页读取失败从第二页读取参数备份
+  26          unsigned char code eeprom_address_read_backup[30]  _at_   0XDE00;             //eeprom指定地址
+  27          
+  28          /*
+  29          参数数据(10,实际从1开始,0字节保留):0-9:开机状态(通电勿扰)全局设置1字节-1,三个继电器开机状态3个字节-
+             -2-3-4,背光等级1个字节-5 , 开关、场景设置-6-7-8,人感1字节-9
+  30          
+  31          实时数据(6):10:19:当前继电器状态3个字节-10-11-12,雷达状态1字节-13,点动倒计时未结束1个字节-15-16-17,o
+             -ta状态1字节-19(最后一字节)
+  32          
+  33          点动开关参数(9):,点动开关2个字节(使能1,时间2)-20-21-22,-23-24-25,-26-27-28
+  34          */
+  35          unsigned char write_mileage[30];//0˸пأ1״̬ȫֿأ21Ĭ״̬32Ĭ״̬4
+             -3Ĭ״̬
+  36          unsigned char read_mileage[30];
+  37          
+  38          unsigned char write_mileage_backup[30];//0˸пأ1״̬ȫֿأ21Ĭ״̬32Ĭ
+             -̬43Ĭ״̬
+  39          unsigned char read_mileage_backup[30];
+  40          //unsigned char II=0;
+  41          /*********************************************************************************************************
+             -*
+  42          ** 函数名称: iap_eeprom_write
+  43          ** 函数描述: iap_EEPROM写数据配置函数  
+  44          ** 输入参数: addr:存储地址,范围0~127
+  45                       buf:数据的首地址
+C51 COMPILER V9.53.0.0   EEPROM                                                            10/28/2024 12:44:25 PAGE 2   
+
+  46                len:数据长度(addr+len不要超过128)
+  47          ** 输出参数: 无 
+  48          **********************************************************************************************************
+             -/
+  49          void iap_eeprom_write(unsigned char addr, unsigned char *buf, unsigned char len)       
+  50          {
+  51   1        unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+  52   1        temp_ea = EA;
+  53   1        EA = 0;
+  54   1        temp_lvrpd = LVRCON & 0x10;  // LVR的状态位  
+  55   1        LVRCON = (LVRCON &~ 0x10) | (1 << 4); //关闭LVR功能
+  56   1      
+  57   1        IAPWE_SFR=0XE2;    //使能iap
+  58   1        IAPWE_SFR=0XBA;    //使能iap    
+  59   1        eeprom_address_write[0] = 0x00;//是所在页的整页都擦除
+  60   1        bsp_delay_ms(5);
+  61   1        
+  62   1        IAPWE_SFR=0XE2;    //使能iap
+  63   1        IAPWE_SFR=0X4C;    //使能iap
+  64   1        
+  65   1        for(i = 0; i<len; i++) {
+  66   2          IAPTE_6P4_MS;        //设置IAP看门狗复位时间
+  67   2          eeprom_address_write[addr + i] = *buf;//
+  68   2          buf++;
+  69   2        }
+  70   1        
+  71   1        LVRCON = (LVRCON &~ 0x10) | (temp_lvrpd << 4); //还原LVR
+  72   1        IAPWE_SFR = 0x00;    //关闭IAP
+  73   1        IAPTE_DISABLE;
+  74   1        EA = temp_ea;
+  75   1      }
+  76          
+  77          /*********************************************************************************************************
+             -*
+  78          ** 函数名称: iap_eeprom_write_backup
+  79          ** 函数描述: iap_EEPROM写数据配置函数  
+  80          ** 输入参数: addr:存储地址,范围0~127
+  81                       buf:数据的首地址
+  82                len:数据长度(addr+len不要超过128)
+  83          ** 输出参数: 无 
+  84          **********************************************************************************************************
+             -/
+  85          void iap_eeprom_write_backup(unsigned char addr, unsigned char *buf, unsigned char len)       
+  86          {
+  87   1        unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+  88   1        temp_ea = EA;
+  89   1        EA = 0;
+  90   1        temp_lvrpd = LVRCON & 0x10;  // LVR的状态位  
+  91   1        LVRCON = (LVRCON &~ 0x10) | (1 << 4); //关闭LVR功能
+  92   1      
+  93   1        IAPWE_SFR=0XE2;    //使能iap
+  94   1        IAPWE_SFR=0XBA;    //使能iap    
+  95   1        eeprom_address_write_backup[0] = 0x00;//是所在页的整页都擦除
+  96   1        bsp_delay_ms(5);
+  97   1        
+  98   1        IAPWE_SFR=0XE2;    //使能iap
+  99   1        IAPWE_SFR=0X4C;    //使能iap
+ 100   1        
+ 101   1        for(i = 0; i<len; i++) {
+ 102   2          IAPTE_6P4_MS;        //设置IAP看门狗复位时间
+ 103   2          eeprom_address_write_backup[addr + i] = *buf;//
+ 104   2          buf++;
+C51 COMPILER V9.53.0.0   EEPROM                                                            10/28/2024 12:44:25 PAGE 3   
+
+ 105   2        }
+ 106   1        
+ 107   1        LVRCON = (LVRCON &~ 0x10) | (temp_lvrpd << 4); //还原LVR
+ 108   1        IAPWE_SFR = 0x00;    //关闭IAP
+ 109   1        IAPTE_DISABLE;
+ 110   1        EA = temp_ea;
+ 111   1      }
+ 112          /*********************************************************************************************************
+             -*
+ 113          ** 函数名称: iap_eeprom_read
+ 114          ** 函数描述: iap_EEPROM读数据配置函数  
+ 115          ** 输入参数: addr:存储地址,范围0~127
+ 116                       buf:数据的首地址
+ 117                len:数据长度(addr+len不要超过128)
+ 118          ** 输出参数: 无 
+ 119          **********************************************************************************************************
+             -/
+ 120          void iap_eeprom_read(unsigned char addr, unsigned char *buf, unsigned char len)    //eeprom读
+ 121          {
+ 122   1       unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+ 123   1        
+ 124   1        temp_ea = EA;
+ 125   1        EA = 0; 
+ 126   1        for(i = 0;i<len;i++) {
+ 127   2          *buf = eeprom_address_read[addr+i];
+ 128   2          buf++;
+ 129   2        } 
+ 130   1        EA = temp_ea;
+ 131   1      }
+ 132          
+ 133          /*********************************************************************************************************
+             -*
+ 134          ** 函数名称: iap_eeprom_read_backup
+ 135          ** 函数描述: iap_EEPROM读数据配置函数  
+ 136          ** 输入参数: addr:存储地址,范围0~127
+ 137                       buf:数据的首地址
+ 138                len:数据长度(addr+len不要超过128)
+ 139          ** 输出参数: 无 
+ 140          **********************************************************************************************************
+             -/
+ 141          void iap_eeprom_read_backup(unsigned char addr, unsigned char *buf, unsigned char len)    //eeprom读
+ 142          {
+ 143   1       unsigned char i=0,temp_ea=0,temp_lvrpd=0;
+ 144   1        
+ 145   1        temp_ea = EA;
+ 146   1        EA = 0; 
+ 147   1        for(i = 0;i<len;i++) {
+ 148   2          *buf = eeprom_address_read_backup[addr+i];
+ 149   2          buf++;
+ 150   2        } 
+ 151   1        EA = temp_ea;
+ 152   1      }
+ 153          
+ 154          
+ 155          /*
+ 156          void test(void)
+ 157          {
+ 158            
+ 159            bsp_clock_init();                    // 系统快钟18.432 div 2 =  9.216Mhz
+ 160            gpio_init();
+ 161            write_mileage[0] = 0x22;
+ 162            write_mileage[1] = 0x33;
+C51 COMPILER V9.53.0.0   EEPROM                                                            10/28/2024 12:44:25 PAGE 4   
+
+ 163            write_mileage[2] = 0x44;
+ 164            write_mileage[3] = 0x55;
+ 165            iap_eeprom_write(0,write_mileage,4); //写四个字节(0x22 0x33 0x44 0x55)      
+ 166            bsp_delay_ms(50);                    
+ 167          
+ 168            read_mileage[0] = 0;
+ 169            read_mileage[1] = 0;
+ 170            read_mileage[2] = 0;
+ 171            read_mileage[3] = 0;
+ 172            iap_eeprom_read(0,read_mileage,4);  //读四个字节与之前写的四个字节是否一致(0x22 0x33 0x44 0x55)
+ 173            
+ 174            write_mileage[0] = 0x66;
+ 175            write_mileage[1] = 0x77;
+ 176            write_mileage[2] = 0x88;
+ 177            write_mileage[3] = 0x99;
+ 178            iap_eeprom_write(0,write_mileage,4); //写四个字节(0x66 0x77 0x88 0x99)                                
+             -       
+ 179            bsp_delay_ms(50);                     
+ 180          
+ 181            read_mileage[0] = 0;
+ 182            read_mileage[1] = 0;
+ 183            read_mileage[2] = 0;
+ 184            read_mileage[3] = 0;
+ 185            iap_eeprom_read(0,read_mileage,4);  //读四个字节与之前写的四个字节是否一致(0x66 0x77 0x88 0x99)
+ 186          
+ 187            while(1) 
+ 188            {
+ 189              if (0x66 == read_mileage[0]) {
+ 190                LED1 = 0;
+ 191              } 
+ 192              else {
+ 193                LED1 = 1;
+ 194              } 
+ 195            }
+ 196          }*/
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =    432    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =    120      26
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

+ 194 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/GLOBAL.lst

@@ -0,0 +1,194 @@
+C51 COMPILER V9.53.0.0   GLOBAL                                                            10/28/2024 12:44:25 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE GLOBAL
+OBJECT MODULE PLACED IN .\Objects\GLOBAL.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE GLOBAL.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG 
+                    -OBJECTEXTEND PRINT(.\Listings\GLOBAL.lst) TABS(2) OBJECT(.\Objects\GLOBAL.obj)
+
+line level    source
+
+   1          /*******************************************************************************
+   2          *
+   3          *   SW AS 
+   4          *   Soft version:   
+   5          *   File Name:      GLOBAL.c
+   6          *   Author   :      zzw (zhangzw_3@163.com)
+   7          *   creation date:  2022-07-20
+   8          *   module description:定义系统中的全局变量 
+   9          *   Copyright (C) 
+  10          *
+  11          ********************************************************************************/
+  12          #include "GLOBAL.h"
+  13          #include <stdio.h>
+  14          #include <stdlib.h>
+  15          #include <string.h>
+  16          
+  17          ///////////////////////////////////////////
+  18          volatile            DBit _BitParament0;
+  19          volatile word       tickcount;      /* Timer tick count       */
+  20          volatile byte       sysTickfor10ms; /* 10millisecond timer    */
+  21          volatile byte       sysTickfor100ms;/* 100millisecond timer   */
+  22          volatile byte       sysTickfor1000ms;/* 100millisecond timer  */
+  23          
+  24          SWParameters   switchState;//面板状态
+  25          
+  26          unsigned long data_dp_add_ele[3] = 0;
+  27          unsigned long data_dp_cur_current[3] = 0;
+  28          unsigned long data_dp_cur_power[3] = 0;
+  29          unsigned long data_dp_cur_voltage = 0;
+  30          
+  31          unsigned long Flash_dp_add_ele[3]={0};
+  32          unsigned long Flash_dp_add_ele_backups[3] = {0};
+  33          unsigned char Save_data_ele_flag = 0;
+  34          unsigned long Save_data_nun = 0;
+  35          
+  36          unsigned char  gRelayOnOff=0;//继电器状态
+  37          byte gLedState = 0;//按键灯状态
+  38          byte gRelayState = 0; // 4bit 继电器值
+  39          
+  40          byte ZG_Joining;//模块进入配网模式, 指示灯快速闪烁10秒
+  41          WORD ZG_JoinCounter;//模块进入配网计数器,倒计时开始
+  42          byte ZG_Joining_S;//模块进入配网模式
+  43          
+  44          
+  45          byte  Brightflag;  //强光标志位,1:白天,0,夜晚
+  46          byte BrightPWMH=6;           //强光灯强光PWM占空比
+  47          byte NightPWMH=1;           //暗光PWM占空比
+  48          byte Light_Intensity;//光强度
+  49          //byte mKeyLedWeakLight;//背光最大亮度值,根据光感设置
+  50          byte mBLedWeakLight;//背光最大亮度值,根据光感设置
+  51          
+  52          unsigned int gRadarKeepTimer=0;//有人存在时,LED灯等相关动作保持时间
+  53          byte gRadarCheckNull;//雷达监测,1为无人,0为有人
+  54          
+C51 COMPILER V9.53.0.0   GLOBAL                                                            10/28/2024 12:44:25 PAGE 2   
+
+  55          byte shockCounter;//震动计数器
+  56          byte shockStart;//按键按下震动触发
+  57          
+  58          byte appControlLedEnable = 0; // app控制背光灯点亮使能位,0:忽略,1:强制点亮10秒
+  59          
+  60          
+  61          
+  62          byte burn_in_test_start=0;//产测标志位
+  63          u32 burn_in_test_counter=0;//产测计数器
+  64          u32 burn_in_test_timeout=0;//产测开机30秒内收到信标才有效
+  65          
+  66          
+  67          u32 IAPUpdateFlag = 0; 
+  68          u32 OTA_Reciv_Datalen;
+  69          
+  70          static const char g_sas8Base64digits[] =
+  71          "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+  72          
+  73          //编码
+  74          void Base64Encode(char *ps8Dest, const char *ps8Source, int s32InLen)
+  75          {
+  76   1          if (ps8Dest==NULL || ps8Source==NULL || s32InLen<=0)
+  77   1          {
+  78   2              return;
+  79   2          }
+  80   1        
+  81   1        for (; s32InLen >= 3; s32InLen -= 3)
+  82   1        {
+  83   2          *ps8Dest++ = g_sas8Base64digits[ps8Source[0] >> 2];
+  84   2          *ps8Dest++ = g_sas8Base64digits[((ps8Source[0] << 4) & 0x30) | (ps8Source[1] >> 4)];
+  85   2          *ps8Dest++ = g_sas8Base64digits[((ps8Source[1] << 2) & 0x3c) | (ps8Source[2] >> 6)];
+  86   2          *ps8Dest++ = g_sas8Base64digits[ps8Source[2] & 0x3f];
+  87   2            ps8Source += 3;
+  88   2        }
+  89   1        
+  90   1        if (s32InLen > 0)
+  91   1        {
+  92   2          unsigned char fragment;
+  93   2          
+  94   2          *ps8Dest++ = g_sas8Base64digits[ps8Source[0] >> 2];
+  95   2          fragment = (ps8Source[0] << 4) & 0x30;
+  96   2          
+  97   2          if (s32InLen > 1)
+  98   2            fragment |= ps8Source[1] >> 4;
+  99   2          
+ 100   2          *ps8Dest++ = g_sas8Base64digits[fragment];
+ 101   2          *ps8Dest++ = (s32InLen < 2) ? '=' : g_sas8Base64digits[(ps8Source[1] << 2) & 0x3c];
+ 102   2          *ps8Dest++ = '=';
+ 103   2        }
+ 104   1        
+ 105   1        *ps8Dest = '\0';
+ 106   1      }
+ 107          
+ 108          //解码
+ 109          void Base64Decode(char *ps8Dest, const char *ps8Source, int s32InLen)
+ 110          {
+ 111   1          int s32Num = 64;
+ 112   1          int i,j;
+ 113   1          char as8ValuePre[4];
+ 114   1          char s8Temp;
+ 115   1          int s32Flag = 0;
+ 116   1        
+C51 COMPILER V9.53.0.0   GLOBAL                                                            10/28/2024 12:44:25 PAGE 3   
+
+ 117   1          if (ps8Dest==NULL || ps8Source==NULL || s32InLen<=0)
+ 118   1          {
+ 119   2              return;
+ 120   2          }
+ 121   1          for (i=0; i<s32InLen; i++)
+ 122   1        {
+ 123   2          s32Flag = 0;
+ 124   2          for (j=0; j<64; j++)
+ 125   2              {
+ 126   3            if (ps8Source[i] == g_sas8Base64digits[j])
+ 127   3            {
+ 128   4                      as8ValuePre[i%4] = j;
+ 129   4                      s32Flag = 1;
+ 130   4                      break;
+ 131   4            }
+ 132   3          }
+ 133   2          if (s32Flag == 0)
+ 134   2          {
+ 135   3            break;
+ 136   3          }
+ 137   2          if (i%4 == 3)
+ 138   2          {
+ 139   3            s8Temp = (as8ValuePre[1]>>4)&0x3;
+ 140   3            *ps8Dest++ = (as8ValuePre[0]<<2) | s8Temp ;
+ 141   3            s8Temp = (as8ValuePre[2]>>2)&0xF;
+ 142   3            *ps8Dest++ = (as8ValuePre[1]<<4) | s8Temp ;
+ 143   3            s8Temp = (as8ValuePre[3])&0x3F;
+ 144   3            *ps8Dest++ = (as8ValuePre[2]<<6) | s8Temp ;
+ 145   3          }
+ 146   2          }
+ 147   1          i--;
+ 148   1          if (i%4==1)
+ 149   1          {
+ 150   2              s8Temp = (as8ValuePre[1]>>4)&0x3;
+ 151   2              *ps8Dest++ = (as8ValuePre[0]<<2) | s8Temp ;
+ 152   2        }
+ 153   1        else if (i%4==2)
+ 154   1          {
+ 155   2              s8Temp = (as8ValuePre[1]>>4)&0x3;
+ 156   2              *ps8Dest++ = (as8ValuePre[0]<<2) | s8Temp ;
+ 157   2          s8Temp = (as8ValuePre[2]>>2)&0xF;
+ 158   2          *ps8Dest++ = (as8ValuePre[1]<<4) | s8Temp ;
+ 159   2        }
+ 160   1        
+ 161   1        *ps8Dest = '\0';
+ 162   1      }
+ 163          
+ 164          //float   FF_AC_V;                          // 电压有效值
+ 165          
+ 166          /* EOF */
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =   1289    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =    312      30
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1612 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HLW8110.lst


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4851 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5468 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5469 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V101.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5420 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V101_.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5472 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V102.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5469 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V102_test.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5426 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V103.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5426 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_1KEY_APP_V104.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5239 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5468 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5469 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V101.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5421 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V101_.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5453 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V102.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5469 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V102_test.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5453 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V103.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5477 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_2KEY_APP_V104.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4851 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5468 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 7076 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V10.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5469 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V101.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5472 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V102.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5469 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V102_test.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5477 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V103.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5888 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_3KEY_APP_V104.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5657 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5852 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5853 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_DEBUG.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5853 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V1.0.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5420 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V100_test.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5853 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V101.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5861 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V102.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5853 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V102_test.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5861 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V103.m51


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 7165 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/HSW_6KEY_APP_V104.m51


+ 281 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/STARTUP_TENX52.lst

@@ -0,0 +1,281 @@
+A51 MACRO ASSEMBLER  STARTUP_TENX52                                                       10/28/2024 12:44:25 PAGE     1
+
+
+MACRO ASSEMBLER A51 V8.02b
+OBJECT MODULE PLACED IN .\Objects\STARTUP_TENX52.obj
+ASSEMBLER INVOKED BY: D:\Keil_c51\C51\BIN\A51.EXE STARTUP_TENX52.A51 INCDIR(..\..\..\Drivers) SET(LARGE) DEBUG PRINT(.\L
+                      istings\STARTUP_TENX52.lst) OBJECT(.\Objects\STARTUP_TENX52.obj) EP
+
+LOC  OBJ            LINE     SOURCE
+
+                       1     $nomod51 
+                       2     ;------------------------------------------------------------------------------
+                       3     ;Description:
+                       4     ;  This code is executed after a reset.  Besides the usual C51 startup 
+                       5     ;  settings, Some specific TM52FXXXX  initializations are done here such as the
+                       6     ;  LCD RAM clear. When the startup code execution is complete, this code jumps to ?C_START 
+                             that 
+                       7     ;  is typically the main() function in the C code.
+                       8     ;  
+                       9     ;
+                      10     ;  This example demo code is provided as is and has no warranty,
+                      11     ;  implied or otherwise.  You are free to use/modify any of the provided
+                      12     ;  code at your own risk in your applications with the expressed limitation
+                      13     ;  of liability  so long as your product using the code contains
+                      14     ;  at least one TM52FXXXX product (device).
+                      15     ;------------------------------------------------------------------------------
+                      16     ;  User-defined <h> Power-On Initialization of Memory 
+                      17     ;
+                      18     ;  With the following EQU statements the initialization of memory
+                      19     ;  at processor reset can be defined:
+                      20     ;
+                      21     ; <o> IDATALEN: IDATA memory size <0x0-0x100>
+                      22     ;     <i> Note: The absolute start-address of IDATA memory is always 0
+                      23     ;     <i>       The IDATA space overlaps physically the DATA and BIT areas.
+  0080                24     IDATALEN        EQU     80H   ; the length of IDATA memory in bytes to clear
+                      25     ;
+                      26     ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF> 
+                      27     ;     <i> The absolute start address of XDATA memory
+                      28     ;     <i> TM52FXXXX users need to fill this in based on where SRAM memory mapped.
+  FFFF                29     XDATAEND        EQU     0FFFFH ; the absolute end-address of XDATA memory
+                      30     ;
+                      31     ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF> 
+                      32     ;     <i> The length of XDATA memory in bytes.
+                      33     ;     <i> NOTE: The length equates for XDATALEN  should be changed to 
+                      34     ;     <i>       non-zero values indicating the amount of XDATA 
+                      35     ;     <i>       memory to be initialized to 0x00.  The start address equates 
+                      36     ;     <i>       (XDATASTART ) must be set to the respective starting
+                      37     ;     <i>       addresses as mapped in TM52FXXXX if the memory is to be initialized.
+  0000                38     XDATALEN        EQU     0H      ; the length of XDATA memory in bytes to clear.
+                      39     ;
+                      40     ; <o> LCDDATASTART: LCD DATA memory start address <0x0-0xFFFF> 
+                      41     ;     <i> The absolute start address of LCD DATA memory
+                      42     ;     <i> TM52XX users need to fill this in based on where LCD DATA memory mapped.
+  F000                43     LCDDATASTART    EQU     0F000H  ; the absolute start-address of LCD DATA memory
+                      44     ;
+                      45     ; <o> LCDDATALEN: XDATA memory size <0x0-0xFF> 
+                      46     ;     <i> The length of LCD DATA memory in bytes.
+                      47     ;     <i> NOTE: The length equates for LCDDATALEN should be changed to 
+                      48     ;     <i>       non-zero values indicating the amount of LCD DATA 
+                      49     ;     <i>       memory to be initialized to 0x00.  The start address equates 
+                      50     ;     <i>       (LCDDATASTART) must be set to the respective starting
+                      51     ;     <i>       addresses as mapped in TM52FXXXX if the memory is to be initialized.
+  0000                52     LCDDATALEN      EQU     0H      ; the length of XDATA memory in bytes to clear.
+                      53     ;
+                      54     ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF> 
+                      55     ;     <i> The absolute start address of PDATA memory
+  0000                56     PDATASTART      EQU     0H              ; the absolute start-address of PDATA memory
+A51 MACRO ASSEMBLER  STARTUP_TENX52                                                       10/28/2024 12:44:25 PAGE     2
+
+                      57     ;
+                      58     ; <o> PDATALEN: PDATA memory size <0x0-0xFF> 
+                      59     ;     <i> The length of PDATA memory in bytes.
+  0000                60     PDATALEN        EQU     0H              ; the length of PDATA memory in bytes to clear.
+                      61     ;
+                      62     ;</h>
+                      63     ;------------------------------------------------------------------------------
+                      64     ;
+                      65     ;<h> Reentrant Stack Initialization
+                      66     ;
+                      67     ;  The following EQU statements define the stack pointer for reentrant
+                      68     ;  functions and initialized it:
+                      69     ;
+                      70     ; <h> Stack Space for reentrant functions in the SMALL model.
+                      71     ;  <q> IBPSTACK: Enable SMALL model reentrant stack
+                      72     ;     <i> Stack space for reentrant functions in the SMALL model.
+  0000                73     IBPSTACK        EQU     0           ; set to 1 if small reentrant is used.
+                      74     ;  <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
+                      75     ;     <i> Set the top of the stack to the highest location.
+  0100                76     IBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1  
+                      77     ; </h>
+                      78     ;
+                      79     ; <h> Stack Space for reentrant functions in the LARGE model.      
+                      80     ;  <q> XBPSTACK: Enable LARGE model reentrant stack
+                      81     ;     <i> Stack space for reentrant functions in the LARGE model.
+  0000                82     XBPSTACK        EQU     0           ; set to 1 if large reentrant is used.
+                      83     ;  <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
+                      84     ;     <i> Set the top of the stack to the highest location.
+  0000                85     XBPSTACKTOP     EQU     0xFFFF +1   ; default 0FFFFH+1 
+                      86     ; </h>
+                      87     ;
+                      88     ; <h> Stack Space for reentrant functions in the COMPACT model.    
+                      89     ;  <q> PBPSTACK: Enable COMPACT model reentrant stack
+                      90     ;     <i> Stack space for reentrant functions in the COMPACT model.
+  0000                91     PBPSTACK        EQU     0           ; set to 1 if compact reentrant is used.
+                      92     ;
+                      93     ;   <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
+                      94     ;     <i> Set the top of the stack to the highest location.
+  0100                95     PBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1  
+                      96     ;</h>
+                      97     ;</h>
+                      98     ;------------------------------------------------------------------------------
+                      99     ;
+                     100     ;  Memory Page for Using the Compact Model with 64 KByte xdata RAM
+                     101     ;  <e>Compact Model Page Definition
+                     102     ;
+                     103     ;  <i>Define the XDATA page used for PDATA variables. 
+                     104     ;  <i>PPAGE must conform with the PPAGE set in the linker invocation.
+                     105     ;
+                     106     ; Enable pdata memory page initalization
+  0000               107     PPAGEENABLE     EQU     0           ; set to 1 if pdata object are used.
+                     108     ;
+                     109     ; <o> PPAGE number <0x0-0xFF> 
+                     110     ; <i> uppermost 256-byte address of the page used for PDATA variables.
+  0000               111     PPAGE           EQU     0
+                     112     ;
+                     113     ; <o> SFR address which supplies uppermost address byte <0x0-0xFF> 
+                     114     ; <i> most 8051 variants use P2 as uppermost address byte
+  00A0               115     PPAGE_SFR       DATA    0A0H
+                     116     ;
+                     117     ; </e>
+                     118     ;; </e>
+                     119     ;;------------------------------------------------------------------------------
+                     120     
+                     121     ; Standard SFR Symbols 
+  00E0               122     ACC     DATA    0E0H
+A51 MACRO ASSEMBLER  STARTUP_TENX52                                                       10/28/2024 12:44:25 PAGE     3
+
+  00F0               123     B       DATA    0F0H
+  0081               124     SP      DATA    81H
+  0082               125     DPL     DATA    82H
+  0083               126     DPH     DATA    83H
+                     127     
+                     128                     NAME    ?C_STARTUP
+                     129     
+                     130     
+                     131     ?C_C51STARTUP   SEGMENT   CODE
+                     132     ?STACK          SEGMENT   IDATA
+                     133     
+----                 134                     RSEG    ?STACK
+0000                 135                     DS      1
+                     136     
+                     137                     EXTRN CODE (?C_START)
+                     138                     PUBLIC  ?C_STARTUP
+                     139     
+----                 140                     CSEG    AT      0
+0000 020000   F      141     ?C_STARTUP:     LJMP    STARTUP1
+                     142     
+----                 143                     RSEG    ?C_C51STARTUP
+                     144     
+0000                 145     STARTUP1:
+                     146     
+                     147     IF IDATALEN <> 0
+0000 787F            148                     MOV     R0,#IDATALEN - 1
+0002 E4              149                     CLR     A
+0003 F6              150     IDATALOOP:      MOV     @R0,A
+0004 D8FD            151                     DJNZ    R0,IDATALOOP
+                     152     ENDIF
+                     153     
+                     154     IF XDATALEN <> 0
+                                             MOV     DPTR,#(XDATAEND-XDATALEN)+1
+                                             MOV     R7,#LOW (XDATALEN)
+                               IF (LOW (XDATALEN)) <> 0
+                                             MOV     R6,#(HIGH (XDATALEN)) +1
+                               ELSE
+                                             MOV     R6,#HIGH (XDATALEN)
+                               ENDIF
+                                             CLR     A
+                             XDATALOOP:      MOVX    @DPTR,A
+                                             INC     DPTR
+                                             DJNZ    R7,XDATALOOP
+                                             DJNZ    R6,XDATALOOP
+                             ENDIF
+                     168     
+                     169     IF LCDDATALEN <> 0
+                                             MOV     DPTR,#LCDDATASTART
+                                             MOV     R7,#LCDDATALEN
+                                             CLR     A
+                             LCDDATALOOP:    MOVX    @DPTR,A
+                                             INC     DPTR
+                                             DJNZ    R7,LCDDATALOOP
+                             ENDIF
+                     177     
+                     178     
+                     179     IF PPAGEENABLE <> 0
+                                             MOV     PPAGE_SFR,#PPAGE
+                             ENDIF
+                     182     
+                     183     IF PDATALEN <> 0
+                                             MOV     R0,#LOW (PDATASTART)
+                                             MOV     R7,#LOW (PDATALEN)
+                                             CLR     A
+                             PDATALOOP:      MOVX    @R0,A
+                                             INC     R0
+A51 MACRO ASSEMBLER  STARTUP_TENX52                                                       10/28/2024 12:44:25 PAGE     4
+
+                                             DJNZ    R7,PDATALOOP
+                             ENDIF
+                     191     
+                     192     IF IBPSTACK <> 0
+                             EXTRN DATA (?C_IBP)
+                             
+                                             MOV     ?C_IBP,#LOW IBPSTACKTOP
+                             ENDIF
+                     197     
+                     198     IF XBPSTACK <> 0
+                             EXTRN DATA (?C_XBP)
+                             
+                                             MOV     ?C_XBP,#HIGH XBPSTACKTOP
+                                             MOV     ?C_XBP+1,#LOW XBPSTACKTOP
+                             ENDIF
+                     204     
+                     205     IF PBPSTACK <> 0
+                             EXTRN DATA (?C_PBP)
+                                             MOV     ?C_PBP,#LOW PBPSTACKTOP
+                             ENDIF
+                     209     
+0006 758100   F      210                     MOV     SP,#?STACK-1  ; init SP for hardware stack 
+                     211     
+                     212     ; This code is required if you use L51_BANK.A51 with Banking Mode 4
+                     213     ;<h> Code Banking
+                     214     ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
+                     215     
+                             
+                             
+                                             
+                             
+                     220     ;</h>
+0009 020000   F      221                     LJMP    ?C_START    ;call main() function in the C code
+                     222     
+                     223                     END
+A51 MACRO ASSEMBLER  STARTUP_TENX52                                                       10/28/2024 12:44:25 PAGE     5
+
+SYMBOL TABLE LISTING
+------ ----- -------
+
+
+N A M E             T Y P E  V A L U E   ATTRIBUTES
+
+?C_C51STARTUP. . .  C SEG    000CH       REL=UNIT
+?C_START . . . . .  C ADDR   -----       EXT
+?C_STARTUP . . . .  C ADDR   0000H   A   
+?STACK . . . . . .  I SEG    0001H       REL=UNIT
+ACC. . . . . . . .  D ADDR   00E0H   A   
+B. . . . . . . . .  D ADDR   00F0H   A   
+DPH. . . . . . . .  D ADDR   0083H   A   
+DPL. . . . . . . .  D ADDR   0082H   A   
+IBPSTACK . . . . .  N NUMB   0000H   A   
+IBPSTACKTOP. . . .  N NUMB   0100H   A   
+IDATALEN . . . . .  N NUMB   0080H   A   
+IDATALOOP. . . . .  C ADDR   0003H   R   SEG=?C_C51STARTUP
+LCDDATALEN . . . .  N NUMB   0000H   A   
+LCDDATASTART . . .  N NUMB   F000H   A   
+PBPSTACK . . . . .  N NUMB   0000H   A   
+PBPSTACKTOP. . . .  N NUMB   0100H   A   
+PDATALEN . . . . .  N NUMB   0000H   A   
+PDATASTART . . . .  N NUMB   0000H   A   
+PPAGE. . . . . . .  N NUMB   0000H   A   
+PPAGEENABLE. . . .  N NUMB   0000H   A   
+PPAGE_SFR. . . . .  D ADDR   00A0H   A   
+SP . . . . . . . .  D ADDR   0081H   A   
+STARTUP1 . . . . .  C ADDR   0000H   R   SEG=?C_C51STARTUP
+XBPSTACK . . . . .  N NUMB   0000H   A   
+XBPSTACKTOP. . . .  N NUMB   0000H   A   
+XDATAEND . . . . .  N NUMB   FFFFH   A   
+XDATALEN . . . . .  N NUMB   0000H   A   
+
+
+REGISTER BANK(S) USED: 0 
+
+
+ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

+ 156 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/TM52F1386_bsp.lst

@@ -0,0 +1,156 @@
+C51 COMPILER V9.53.0.0   TM52F1386_BSP                                                     10/28/2024 12:44:27 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE TM52F1386_BSP
+OBJECT MODULE PLACED IN .\Objects\TM52F1386_bsp.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE ..\..\..\Drivers\TM52F1386_bsp.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(
+                    -..\..\..\Drivers) DEBUG OBJECTEXTEND PRINT(.\Listings\TM52F1386_bsp.lst) TABS(2) OBJECT(.\Objects\TM52F1386_bsp.obj)
+
+line level    source
+
+   1          #include <REGtenxTM52F1386.h>
+   2          #include <intrins.h>
+   3          #include "TM52F1386_bsp.h"
+   4          
+   5          /*********************************************************************************************************
+             -*
+   6          **函数名称  bsp_clock_init()
+   7          **函数描述 :设置内部FRC/2为系统时钟
+   8          **输    入 :无
+   9          **输    出 :无
+  10          **说    明 :快时钟系统主频为 18.432/2M   默认二分频
+  11          **********************************************************************************************************
+             -/
+  12          void bsp_clock_init()      
+  13          {
+  14   1        SELFCK = 0;          //切换到慢时钟
+  15   1          
+  16   1        CLKCON = 0x02;       //时钟二分频
+  17   1      //  CLKCON = 0x03;       //时钟一分频
+  18   1        
+  19   1        STPPCK = 0;      //开启部分模块使用快时钟
+  20   1        STPFCK = 0;      //开启快时钟
+  21   1        SELFCK = 1;      //切换到快时钟
+  22   1      }
+  23          
+  24          /*********************************************************************************************************
+             -*
+  25          **函数名称  bsp_FXT_clock_init()
+  26          **函数描述 :设置FXT外部快速晶体振荡器/2为系统时钟
+  27          **输    入 :无
+  28          **输    出 :无
+  29          **说    明 :注意 P20 P21需要配置为接外部快速晶振
+  30          **********************************************************************************************************
+             -/
+  31          void bsp_FXT_clock_init()      
+  32          {
+  33   1        SELFCK = 0;          //切换到慢时钟
+  34   1      
+  35   1        CLKCON = 0x02;       //时钟二分频
+  36   1      //  CLKCON = 0x03;       //时钟一分频
+  37   1      
+  38   1        FCKTYPE = 1;     //FXT
+  39   1        STPPCK = 0;      //开启快时钟
+  40   1        STPFCK = 0;      //开启部分模块使用快时钟
+  41   1        //延时2ms等待晶体振荡器稳定
+  42   1        bsp_delay_ms(2);
+  43   1        SELFCK = 1;      //切换到快时钟
+  44   1      }
+  45          
+  46          /*********************************************************************************************************
+             -*
+  47          **函数名称  bsp_SXT_clock_init()
+  48          **函数描述 :设置SXT外部慢速晶体振荡器/2为系统时钟
+  49          **输    入 :无
+C51 COMPILER V9.53.0.0   TM52F1386_BSP                                                     10/28/2024 12:44:27 PAGE 2   
+
+  50          **输    出 :无
+  51          **说    明 :注意 P20 P21需要配置为接外部快速晶振
+  52          **********************************************************************************************************
+             -/
+  53          void bsp_SXT_clock_init()      
+  54          {
+  55   1        SELFCK = 0;      //切换到慢时钟
+  56   1        
+  57   1        CLKCON = 0x02;   //时钟二分频 
+  58   1      //  CLKCON = 0x03;       //时钟一分频
+  59   1        STPPCK = 0;      //开启快时钟
+  60   1        STPFCK = 0;      //开启部分模块使用快时钟
+  61   1        SELFCK = 1;      //切换到快时钟
+  62   1        SCKTYPE = 1;     //SXT
+  63   1        SELFCK = 0;      //切换到慢时钟
+  64   1      }
+  65          
+  66          /*********************************************************************************************************
+             -*
+  67          **函数名称  bsp_delay_100us()
+  68          **函数描述 :100us单位延时函数
+  69          **输    入 :
+  70          **输    出 :无
+  71          **说    明 :基于内部时钟二分频计算,非精确延时 
+  72          **********************************************************************************************************
+             -/
+  73          void bsp_delay_100us(unsigned int cnt)   //该函数不是精确延时,根据内部时钟FRC二分频计算得来的
+  74          {
+  75   1        unsigned int i;
+  76   1        unsigned char delay_cnt;
+  77   1        for(i = 0;i<cnt;i++)
+  78   1        {
+  79   2          delay_cnt = 23;
+  80   2          while(delay_cnt--)
+  81   2          {
+  82   3            delay_10nop();
+  83   3          }
+  84   2        }
+  85   1      }
+  86          
+  87          /*********************************************************************************************************
+             -*
+  88          **函数名称  bsp_delay_100us()
+  89          **函数描述 :100us单位延时函数
+  90          **输    入 :
+  91          **输    出 :无
+  92          **说    明 :基于内部时钟二分频计算,非精确延时 
+  93          **********************************************************************************************************
+             -/
+  94          void bsp_delay_ms(unsigned int ms)      //该函数不是精确延时,根据内部时钟FRC二分频计算得来的
+  95          {
+  96   1        unsigned int i;
+  97   1        unsigned char delay_cnt;
+  98   1        for(i = 0;i<ms;i++)
+  99   1        {
+ 100   2          delay_cnt =95;
+ 101   2          while(delay_cnt--)
+ 102   2          {
+ 103   3            delay_10nop();
+ 104   3            delay_10nop();
+ 105   3            delay_10nop();
+ 106   3            delay_10nop();
+C51 COMPILER V9.53.0.0   TM52F1386_BSP                                                     10/28/2024 12:44:27 PAGE 3   
+
+ 107   3          }
+ 108   2        }
+ 109   1      }
+ 110          
+ 111          
+ 112          
+ 113          
+ 114          
+ 115          
+ 116          
+ 117          
+ 118          
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =    155    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =   ----    ----
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1528 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/gpio_ctrl.lst


+ 367 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/iap.lst

@@ -0,0 +1,367 @@
+C51 COMPILER V9.53.0.0   IAP                                                               10/28/2024 12:44:27 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE IAP
+OBJECT MODULE PLACED IN .\Objects\iap.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE iap.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG OBJ
+                    -ECTEXTEND PRINT(.\Listings\iap.lst) TABS(2) OBJECT(.\Objects\iap.obj)
+
+line level    source
+
+   1          #include <REGtenxTM52F1386.H>
+   2          #include "CRC.h" 
+   3          #include "iap.h" 
+   4          
+   5          
+   6          
+   7          
+   8          //以下两个指针必须是xdata类型
+   9          unsigned char xdata *p_info_addr;          //指向信息存储器区域 - 读写
+  10          unsigned char xdata *p_write_app_addr;     //指向app区域 - 写
+  11          unsigned char code  *p_read_app_addr;      //指向app区域 - 读
+  12          
+  13          static  bit iap_flag=0;     //0:正常   1:异常
+  14          
+  15          unsigned char CheckBuf[20]={0};                  //读取升级标记的数组
+  16          
+  17          /******************************************************************************************
+  18          ** 函数名称: erasure_INFO_page
+  19          ** 函数描述: 擦除信息存储器区域的一页数据
+  20          ** 输入参数: 地址
+  21          ** 输出参数: 状态:0 正常, 1 异常
+  22          *******************************************************************************************/
+  23          static bit erasure_INFO_page(unsigned int addr)
+  24          {
+  25   1        unsigned char temp_ea;
+  26   1        
+  27   1        if(addr < 0x800)       //INFO区 5~8,用户可写
+  28   1        {
+  29   2          return 1;            //返回异常值
+  30   2        }
+  31   1        
+  32   1        iap_flag = 0;          //iap_flag标志清零
+  33   1        
+  34   1        temp_ea = EA;
+  35   1        EA = 0;
+  36   1        
+  37   1        LVRCON = LVRCON|0x10;  //关闭LVR
+  38   1        
+  39   1        p_info_addr = (unsigned char *)addr;
+  40   1        
+  41   1        AUX2 = AUX2&0xF9|0x06; //设置IAP超时时间
+  42   1        
+  43   1        //写入0XA1和0xBA, 开启 INFO 区域擦除  
+  44   1        IAPWE_SFR=0XA1;
+  45   1        IAPWE_SFR=0XBA; 
+  46   1        
+  47   1        //INFO区域不需要设置 SWCMD 寄存器
+  48   1        
+  49   1        *p_info_addr = 0;      //触发页擦除
+  50   1        
+  51   1        if(IAPWE_SFR & IAPTO)  //置位表示超时
+  52   1        {
+  53   2          iap_flag = 1;        //iap_flag标志置位
+  54   2        }
+C51 COMPILER V9.53.0.0   IAP                                                               10/28/2024 12:44:27 PAGE 2   
+
+  55   1        
+  56   1        AUX2 = AUX2&0xF9;      //关闭IAP看门狗
+  57   1        IAPWE_SFR = 0x00;      //禁止IAP擦除
+  58   1        SWCMD = 0x00;          //关闭IAP权限
+  59   1        
+  60   1        LVRCON = LVRCON&~0x10; //开启LVR
+  61   1        
+  62   1        EA = temp_ea; 
+  63   1        
+  64   1        return  iap_flag;
+  65   1      }
+  66          
+  67          /******************************************************************************************
+  68          ** 函数名称: read_INFO_byte
+  69          ** 函数描述: 读取信息存储器区域的数据
+  70          ** 输入参数: 地址 数组的首地址、长度 
+  71          ** 输出参数: 无
+  72          *******************************************************************************************/
+  73          static void read_INFO_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+  74          {
+  75   1        unsigned int i;
+  76   1        
+  77   1        p_info_addr =(unsigned char*)addr;
+  78   1        
+  79   1        for(i = 0; i<len; i++)
+  80   1        {
+  81   2          buf[i] = *p_info_addr;
+  82   2          p_info_addr++;  
+  83   2        }
+  84   1      }
+  85          
+  86          /******************************************************************************************
+  87          ** 函数名称: write_INFO_byte
+  88          ** 函数描述: 写入信息存储器区域的数据
+  89          ** 输入参数: 地址 数组的首地址、长度 
+  90          ** 输出参数: 状态:0 正常, 1 异常
+  91          *******************************************************************************************/
+  92          static bit write_INFO_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+  93          {
+  94   1        unsigned char temp_ea;
+  95   1        unsigned int i;
+  96   1        
+  97   1        iap_flag = 0;           //iap_flag标志清零
+  98   1        
+  99   1        temp_ea = EA;
+ 100   1        EA = 0;
+ 101   1        
+ 102   1        LVRCON = LVRCON|0x10;   //关闭LVR
+ 103   1        
+ 104   1        p_info_addr = (unsigned char *)addr;
+ 105   1        
+ 106   1        AUX2 = AUX2&0xF9|0x06;  //设置IAP超时时间
+ 107   1        
+ 108   1        //写入0XA1和0X4C, 开启 INFO 区域擦除  
+ 109   1        IAPWE_SFR=0XA1;
+ 110   1        IAPWE_SFR=0X4C; 
+ 111   1        
+ 112   1        //INFO区域不需要设置 SWCMD 寄存器
+ 113   1        for(i = 0; i<len; i++)
+ 114   1        {
+ 115   2          *p_info_addr = buf[i];//触发写
+ 116   2          p_info_addr++;
+C51 COMPILER V9.53.0.0   IAP                                                               10/28/2024 12:44:27 PAGE 3   
+
+ 117   2        }
+ 118   1        
+ 119   1        if(IAPWE_SFR & IAPTO)   //置位表示超时
+ 120   1        {
+ 121   2          iap_flag = 1;         //iap_flag标志置位
+ 122   2        }
+ 123   1        
+ 124   1        AUX2 = AUX2&0xF9;       //关闭IAP看门狗
+ 125   1        IAPWE_SFR = 0x00;       //禁止IAP擦除
+ 126   1        SWCMD = 0x00;           //关闭IAP权限
+ 127   1        
+ 128   1        LVRCON = LVRCON&~0x10;  //开启LVR
+ 129   1        
+ 130   1        EA = temp_ea; 
+ 131   1        
+ 132   1        return  iap_flag; 
+ 133   1      }
+ 134          
+ 135          /******************************************************************************************
+ 136          ** 函数名称: user_write_INFO_byte
+ 137          ** 函数描述: 存储INFO数据的函数,供用户使用
+ 138          ** 输入参数: 地址 数组的首地址、长度 
+ 139          ** 输出参数: 状态:0 正常, 1 异常
+ 140          *******************************************************************************************/
+ 141          bit user_write_INFO_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+ 142          {
+ 143   1        bit flag=0;
+ 144   1        unsigned int crc_write=0,crc_read=0;
+ 145   1        
+ 146   1        //页首地址才会执行页擦除,一页512byte
+ 147   1        if(addr==0 || ((addr%0x200)==0))    
+ 148   1        {
+ 149   2          flag = erasure_INFO_page(addr);    
+ 150   2          if(flag)  return  flag;         //异常就返回
+ 151   2        }
+ 152   1        
+ 153   1        //先擦除页,再写入数据
+ 154   1        flag = write_INFO_byte(addr,buf,len);
+ 155   1        if(flag)  return  flag;           //异常就返回
+ 156   1        crc_write = crc_calcu(buf,len);   //计算写之前的CRC值
+ 157   1        
+ 158   1        //读出比较CRC值
+ 159   1        read_INFO_byte(addr,buf,len);
+ 160   1        crc_read = crc_calcu(buf,len);    //从flash里读出数据,在计算CRC值
+ 161   1        
+ 162   1        if(crc_write != crc_read)         //判断读写的数据是否一致
+ 163   1        {
+ 164   2          flag = 1; 
+ 165   2        }
+ 166   1        
+ 167   1        return  flag;
+ 168   1      }
+ 169          
+ 170          /******************************************************************************************
+ 171          ** 函数名称: user_read_INFO_byte
+ 172          ** 函数描述: 读INFO数据的函数,供用户使用
+ 173          ** 输入参数: 地址 数组的首地址、长度 
+ 174          ** 输出参数: 无
+ 175          *******************************************************************************************/
+ 176          void user_read_INFO_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+ 177          {
+ 178   1        read_INFO_byte(addr, buf,len);  
+C51 COMPILER V9.53.0.0   IAP                                                               10/28/2024 12:44:27 PAGE 4   
+
+ 179   1      }
+ 180          
+ 181          /******************************************************************************************
+ 182          ** 函数名称: erasure_APP_page
+ 183          ** 函数描述: 擦除信app区域的一页数据
+ 184          ** 输入参数: 地址
+ 185          ** 输出参数: 状态:0 正常, 1 异常
+ 186          *******************************************************************************************/
+ 187          static bit erasure_APP_page(unsigned int addr)
+ 188          {
+ 189   1        unsigned char temp_ea;
+ 190   1        
+ 191   1        iap_flag = 0;           //iap_flag标志清零
+ 192   1        
+ 193   1        temp_ea = EA;
+ 194   1        EA = 0;
+ 195   1        
+ 196   1        LVRCON = LVRCON|0x10;   //关闭LVR
+ 197   1        
+ 198   1        p_write_app_addr = (unsigned char *)addr;
+ 199   1        
+ 200   1        AUX2 = AUX2&0xF9|0x06;  //设置IAP超时时间
+ 201   1        
+ 202   1        //写入0xE2和0xBA, 开启APP 区域擦除  
+ 203   1        IAPWE_SFR=0XE2;
+ 204   1        IAPWE_SFR=0XBA; 
+ 205   1        
+ 206   1        //写入0x65和0xA7,开启APP区域擦除和写入权限
+ 207   1        SWCMD=0x65;   
+ 208   1        SWCMD=0xA7;
+ 209   1        
+ 210   1        *p_write_app_addr = 0;  //触发页擦除
+ 211   1        
+ 212   1        if(IAPWE_SFR & IAPTO)   //置位表示超时
+ 213   1        {
+ 214   2          iap_flag = 1;         //iap_flag标志置位
+ 215   2        }
+ 216   1        
+ 217   1        AUX2 = AUX2&0xF9;       //关闭IAP看门狗
+ 218   1        IAPWE_SFR = 0x00;       //禁止IAP擦除
+ 219   1        SWCMD = 0x00;           //关闭IAP权限
+ 220   1        
+ 221   1        LVRCON = LVRCON&~0x10;  //开启LVR
+ 222   1        
+ 223   1        EA = temp_ea; 
+ 224   1        
+ 225   1        return  iap_flag;
+ 226   1      }
+ 227          
+ 228          /******************************************************************************************
+ 229          ** 函数名称: read_APP_byte
+ 230          ** 函数描述: 读取APP区域的数据
+ 231          ** 输入参数: 地址 数组的首地址、长度 
+ 232          ** 输出参数: 无
+ 233          *******************************************************************************************/
+ 234          static void read_APP_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+ 235          {
+ 236   1        unsigned int i;
+ 237   1        
+ 238   1        p_read_app_addr =(unsigned char*)addr;
+ 239   1        
+ 240   1        for(i = 0; i<len; i++)
+C51 COMPILER V9.53.0.0   IAP                                                               10/28/2024 12:44:27 PAGE 5   
+
+ 241   1        {
+ 242   2          buf[i] = *p_read_app_addr;
+ 243   2          p_read_app_addr++;  
+ 244   2        }
+ 245   1      }
+ 246          
+ 247          /******************************************************************************************
+ 248          ** 函数名称: write_APP_byte
+ 249          ** 函数描述: 写入APP的数据
+ 250          ** 输入参数: 地址 数组的首地址、长度 
+ 251          ** 输出参数: 状态:0 正常, 1 异常
+ 252          *******************************************************************************************/
+ 253          static bit write_APP_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+ 254          {
+ 255   1        unsigned char temp_ea;
+ 256   1        unsigned int i;
+ 257   1        
+ 258   1        iap_flag = 0;           //iap_flag标志清零
+ 259   1        
+ 260   1        temp_ea = EA;
+ 261   1        EA = 0;
+ 262   1        
+ 263   1        LVRCON = LVRCON|0x10;   //关闭LVR
+ 264   1        
+ 265   1        p_write_app_addr = (unsigned char *)addr;
+ 266   1        
+ 267   1        AUX2 = AUX2&0xF9|0x06;  //设置IAP超时时间
+ 268   1        
+ 269   1        //写入0xE2和0X4C, 开启APP 区域擦除  
+ 270   1        IAPWE_SFR=0XE2;
+ 271   1        IAPWE_SFR=0X4C; 
+ 272   1        
+ 273   1        //写入0x65和0xA7,开启APP区域擦除和写入权限
+ 274   1        SWCMD=0x65;   
+ 275   1        SWCMD=0xA7;
+ 276   1        
+ 277   1        for(i = 0; i<len; i++)
+ 278   1        {
+ 279   2          *p_write_app_addr = buf[i];     //触发写
+ 280   2          p_write_app_addr++;
+ 281   2        }
+ 282   1        
+ 283   1        if(IAPWE_SFR & IAPTO)   //置位表示超时
+ 284   1        {
+ 285   2          iap_flag = 1;         //iap_flag标志置位
+ 286   2        }
+ 287   1        
+ 288   1        AUX2 = AUX2&0xF9;       //关闭IAP看门狗
+ 289   1        IAPWE_SFR = 0x00;       //禁止IAP擦除
+ 290   1        SWCMD = 0x00;           //关闭IAP权限
+ 291   1        
+ 292   1        LVRCON = LVRCON&~0x10;  //开启LVR
+ 293   1        
+ 294   1        EA = temp_ea; 
+ 295   1        
+ 296   1        return  iap_flag; 
+ 297   1      }
+ 298          
+ 299          /******************************************************************************************
+ 300          ** 函数名称: user_write_APP_byte
+ 301          ** 函数描述: 存储APP数据的函数,供用户使用
+ 302          ** 输入参数: 地址 数组的首地址、长度 
+C51 COMPILER V9.53.0.0   IAP                                                               10/28/2024 12:44:27 PAGE 6   
+
+ 303          ** 输出参数: 状态:0 正常, 1 异常
+ 304          *******************************************************************************************/
+ 305          bit user_write_APP_byte(unsigned int addr, unsigned char *buf, unsigned int len)
+ 306          {
+ 307   1        bit flag=0;
+ 308   1        unsigned int crc_write=0,crc_read=0;
+ 309   1        
+ 310   1        //页首地址才会执行页擦除
+ 311   1        if(addr==0 || ((addr%0x200)==0))    
+ 312   1        {
+ 313   2          flag = erasure_APP_page(addr);    
+ 314   2          if(flag)  return  flag;         //异常就返回
+ 315   2        }
+ 316   1        
+ 317   1        //先擦除页,再写入数据
+ 318   1        flag = write_APP_byte(addr,buf,len);
+ 319   1        if(flag)  return  flag;           //异常就返回
+ 320   1        crc_write = crc_calcu(buf,len);   //计算写之前的CRC值
+ 321   1        
+ 322   1        //读出比较CRC值
+ 323   1        read_APP_byte(addr,buf,len);
+ 324   1        crc_read = crc_calcu(buf,len);    //从flash里读出数据,在计算CRC值
+ 325   1        
+ 326   1        if(crc_write != crc_read)
+ 327   1        {
+ 328   2          flag = 1; 
+ 329   2        }
+ 330   1        
+ 331   1        return  flag;
+ 332   1      }
+ 333          
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =   1116    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =     26      63
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =      1       2
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1494 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/main.lst


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4851 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/main.m51


+ 650 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/mcu_api.lst

@@ -0,0 +1,650 @@
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE MCU_API
+OBJECT MODULE PLACED IN .\Objects\mcu_api.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE mcu_api.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG
+                    - OBJECTEXTEND PRINT(.\Listings\mcu_api.lst) TABS(2) OBJECT(.\Objects\mcu_api.obj)
+
+line level    source
+
+   1          /**
+   2          * @file  mcu_api.c
+   3          * @brief this file contains basic fuctions and DP data report fucntion which is base on DP type
+   4          * @author qinlang
+   5          * @date 2022.05.06
+   6          * @par email:qinlang.chen@tuya.com
+   7          * @copyright HANGZHOU TUYA INFORMATION TECHNOLOGY CO.,LTD
+   8          * @par company
+   9          * http://www.tuya.com
+  10          */
+  11          
+  12          #include "zigbee.h"
+  13          
+  14          /**
+  15          * @brief hex translate to bcd 
+  16          * @param[in] {Value_H} higher bits data 
+  17          * @param[in] {Value_L} lower bits data
+  18          * @return  bcd type data
+  19          */
+  20          unsigned char hex_to_bcd(unsigned char Value_H,unsigned char Value_L)
+  21          {
+  22   1        unsigned char bcd_value;
+  23   1        
+  24   1        if((Value_H >= '0') && (Value_H <= '9')){
+  25   2          Value_H -= '0';
+  26   2        }
+  27   1        else if((Value_H >= 'A') && (Value_H <= 'F')){
+  28   2          Value_H = Value_H - 'A' + 10;
+  29   2        }
+  30   1        else if((Value_H >= 'a') && (Value_H <= 'f')){
+  31   2          Value_H = Value_H - 'a' + 10;
+  32   2        }
+  33   1      
+  34   1        bcd_value = Value_H & 0x0f;
+  35   1        bcd_value <<= 4;
+  36   1      
+  37   1        if((Value_L >= '0') && (Value_L <= '9')){
+  38   2          Value_L -= '0';
+  39   2        }
+  40   1        else if((Value_L >= 'A') && (Value_L <= 'F')){
+  41   2          Value_L = Value_L - 'a' + 10;
+  42   2        }
+  43   1        else if((Value_L >= 'a') && (Value_L <= 'f')){
+  44   2          Value_L = Value_L - 'a' + 10;
+  45   2        }
+  46   1        
+  47   1        bcd_value |= Value_L & 0x0f;
+  48   1      
+  49   1        return bcd_value;
+  50   1      }
+  51          
+  52          /**
+  53          * @brief get string len 
+  54          * @param[in] {str} higher bits data 
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 2   
+
+  55          * @return string len 
+  56          */
+  57          unsigned long my_strlen(unsigned char *str)  
+  58          {
+  59   1        unsigned long len = 0;
+  60   1        if(str == NULL){ 
+  61   2          return 0;
+  62   2        }
+  63   1        
+  64   1        for(len = 0; *str ++ != '\0'; ){
+  65   2          len ++;
+  66   2        }
+  67   1        
+  68   1        return len;
+  69   1      }
+  70          
+  71          /**
+  72          * @brief  assign ch to the first count bytes of the memory address src
+  73          * @param[in] {src}    srouce address
+  74          * @param[in] {ch}     set value 
+  75          * @param[in] {count}  length of set address 
+  76          * @return void
+  77          */
+  78          void *my_memset(void *src,unsigned char ch,unsigned short count)
+  79          {
+  80   1        unsigned char *tmp = (unsigned char *)src;
+  81   1        if(src == NULL){
+  82   2          return NULL;
+  83   2        }
+  84   1        
+  85   1        while(count --){
+  86   2          *tmp ++ = ch;
+  87   2        }
+  88   1        return src;
+  89   1      }
+  90          
+  91          /**
+  92          * @brief copy count bytes data from src to dest
+  93          * @param[in] {src}    srouce address
+  94          * @param[in] {dest}   destination address
+  95          * @param[in] {count}  length of copy data
+  96          * @return void
+  97          */
+  98          void *my_memcpy(void *dest, const void *src, unsigned short count)  
+  99          {  
+ 100   1        unsigned char *pdest = (unsigned char *)dest;  
+ 101   1        const unsigned char *psrc  = (const unsigned char *)src;  
+ 102   1        unsigned short i;
+ 103   1        
+ 104   1        if(dest == NULL || src == NULL){ 
+ 105   2          return NULL;
+ 106   2        }
+ 107   1        
+ 108   1        if((pdest <= psrc) || (pdest > psrc + count)){  
+ 109   2          for(i = 0; i < count; i ++){  
+ 110   3            pdest[i] = psrc[i];  
+ 111   3          }  
+ 112   2        }
+ 113   1        else{
+ 114   2          for(i = count; i > 0; i --){  
+ 115   3            pdest[i - 1] = psrc[i - 1];  
+ 116   3          }  
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 3   
+
+ 117   2        }  
+ 118   1        
+ 119   1        return dest;  
+ 120   1      }
+ 121          
+ 122          /**
+ 123          * @brief copy string src to string dest
+ 124          * @param[in] {src}    srouce address
+ 125          * @param[in] {dest}   destination address
+ 126          * @return the tail of destination 
+ 127          */
+ 128          char *my_strcpy(char *dest, const char *src)  
+ 129          {
+ 130   1        char *p = dest;
+ 131   1        while(*src!='\0'){
+ 132   2          *dest++ = *src++;
+ 133   2        }
+ 134   1        *dest = '\0';
+ 135   1        return p;
+ 136   1      }
+ 137          
+ 138          /**
+ 139          * @brief compare string s1 with string s2
+ 140          * @param[in] {s1}  srouce address
+ 141          * @param[in] {s2}  destination address
+ 142          * @return compare result
+ 143          */
+ 144          int my_strcmp(char *s1 , char *s2)
+ 145          {
+ 146   1        while( *s1 && *s2 && *s1 == *s2 ){
+ 147   2          s1++;
+ 148   2          s2++;
+ 149   2        }
+ 150   1        return *s1 - *s2;
+ 151   1      }
+ 152          
+ 153          /**
+ 154          * @brief int translate to byte
+ 155          * @param[in] {number} int data 
+ 156          * @param[out] {value} the result array     
+ 157          * @return void
+ 158          */
+ 159          void int_to_byte(unsigned long number,unsigned char value[4])
+ 160          {
+ 161   1        value[0] = number >> 24;
+ 162   1        value[1] = number >> 16;
+ 163   1        value[2] = number >> 8;
+ 164   1        value[3] = number & 0xff;
+ 165   1      }
+ 166          
+ 167          /**
+ 168          * @brief byte data translate to int 
+ 169          * @param[in] {value}  the byte array 
+ 170          * @return result of int data 
+ 171          */
+ 172          unsigned long byte_to_int(const unsigned char value[4])
+ 173          {
+ 174   1        unsigned long nubmer = 0;
+ 175   1      
+ 176   1        nubmer = (unsigned long)value[0];
+ 177   1        nubmer <<= 8;
+ 178   1        nubmer |= (unsigned long)value[1];
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 4   
+
+ 179   1        nubmer <<= 8;
+ 180   1        nubmer |= (unsigned long)value[2];
+ 181   1        nubmer <<= 8;
+ 182   1        nubmer |= (unsigned long)value[3];
+ 183   1        
+ 184   1        return nubmer;
+ 185   1      }
+ 186          
+ 187          
+ 188          /**
+ 189          * @brief report bool type DP data to zigbee module 
+ 190          * @param[in]  {dpid}  dp id
+ 191          * @param[in]  {value} Data contents of dp 
+ 192          * @return send result 
+ 193          */
+ 194          unsigned char mcu_dp_bool_update(unsigned char dpid,unsigned char value)
+ 195          {
+ 196   1        unsigned short length = 0;
+ 197   1        
+ 198   1        length = set_zigbee_uart_byte(length,dpid);
+ 199   1        length = set_zigbee_uart_byte(length,DP_TYPE_BOOL);
+ 200   1       
+ 201   1        length = set_zigbee_uart_byte(length,0);
+ 202   1        length = set_zigbee_uart_byte(length,1);
+ 203   1      
+ 204   1        if(value == FALSE){
+ 205   2          length = set_zigbee_uart_byte(length,FALSE);
+ 206   2        }
+ 207   1        else{
+ 208   2          length = set_zigbee_uart_byte(length,1);
+ 209   2        }
+ 210   1        
+ 211   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 212   1        
+ 213   1        return SUCCESS;
+ 214   1      }
+ 215          
+ 216          
+ 217          /**
+ 218          * @brief report enum type DP data to zigbee module 
+ 219          * @param[in]  {dpid}  dp id
+ 220          * @param[in]  {value} Data contents of dp 
+ 221          * @return send result 
+ 222          */
+ 223          unsigned char mcu_dp_enum_update(unsigned char dpid,unsigned char value)
+ 224          {
+ 225   1        unsigned short length = 0;
+ 226   1        
+ 227   1        length = set_zigbee_uart_byte(length,dpid);
+ 228   1        length = set_zigbee_uart_byte(length,DP_TYPE_ENUM);
+ 229   1        //
+ 230   1        length = set_zigbee_uart_byte(length,0);
+ 231   1        length = set_zigbee_uart_byte(length,1);
+ 232   1        //
+ 233   1        length = set_zigbee_uart_byte(length,value);
+ 234   1        
+ 235   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 236   1        
+ 237   1        return SUCCESS;
+ 238   1      }
+ 239          
+ 240          
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 5   
+
+ 241          /**
+ 242          * @brief report bitmap type DP data to zigbee module 
+ 243          * @param[in]  {dpid}  dp id
+ 244          * @param[in]  {value} Data contents of dp 
+ 245          * @return send result 
+ 246          */
+ 247          unsigned char mcu_dp_bitmap_update(unsigned char dpid,unsigned long value)
+ 248          {
+ 249   1        unsigned short length = 0;
+ 250   1      
+ 251   1        length = set_zigbee_uart_byte(length,dpid);
+ 252   1        length = set_zigbee_uart_byte(length,DP_TYPE_BITMAP);
+ 253   1        //
+ 254   1        length = set_zigbee_uart_byte(length,0);
+ 255   1        
+ 256   1        if((value | 0xff) == 0xff){
+ 257   2          length = set_zigbee_uart_byte(length,1);
+ 258   2          length = set_zigbee_uart_byte(length,value);
+ 259   2        }
+ 260   1        else if((value | 0xffff) == 0xffff){
+ 261   2          length = set_zigbee_uart_byte(length,2);
+ 262   2          length = set_zigbee_uart_byte(length,value >> 8);
+ 263   2          length = set_zigbee_uart_byte(length,value & 0xff);
+ 264   2        }
+ 265   1        else{
+ 266   2          length = set_zigbee_uart_byte(length,4);
+ 267   2          length = set_zigbee_uart_byte(length,value >> 24);
+ 268   2          length = set_zigbee_uart_byte(length,value >> 16);
+ 269   2          length = set_zigbee_uart_byte(length,value >> 8);
+ 270   2          length = set_zigbee_uart_byte(length,value & 0xff);
+ 271   2        }    
+ 272   1        
+ 273   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 274   1      
+ 275   1        return SUCCESS;
+ 276   1      }
+ 277          
+ 278          
+ 279          /**
+ 280          * @brief report fault type DP data to zigbee module 
+ 281          * @param[in]  {dpid}  dp id
+ 282          * @param[in]  {value} Data contents of dp 
+ 283          * @return send result 
+ 284          */
+ 285          unsigned char mcu_dp_fault_update(unsigned char dpid,unsigned long value)
+ 286          {
+ 287   1        unsigned short length = 0;
+ 288   1      
+ 289   1        length = set_zigbee_uart_byte(length,dpid);
+ 290   1        length = set_zigbee_uart_byte(length,DP_TYPE_BITMAP);
+ 291   1        //
+ 292   1        length = set_zigbee_uart_byte(length,0);
+ 293   1        
+ 294   1        if((value | 0xff) == 0xff){
+ 295   2          length = set_zigbee_uart_byte(length,1);
+ 296   2          length = set_zigbee_uart_byte(length,value);
+ 297   2        }
+ 298   1        else if((value | 0xffff) == 0xffff){
+ 299   2          length = set_zigbee_uart_byte(length,2);
+ 300   2          length = set_zigbee_uart_byte(length,value >> 8);
+ 301   2          length = set_zigbee_uart_byte(length,value & 0xff);
+ 302   2        }
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 6   
+
+ 303   1        else{
+ 304   2          length = set_zigbee_uart_byte(length,4);
+ 305   2          length = set_zigbee_uart_byte(length,value >> 24);
+ 306   2          length = set_zigbee_uart_byte(length,value >> 16);
+ 307   2          length = set_zigbee_uart_byte(length,value >> 8);
+ 308   2          length = set_zigbee_uart_byte(length,value & 0xff);
+ 309   2        }    
+ 310   1        
+ 311   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 312   1      
+ 313   1        return SUCCESS;
+ 314   1      }
+ 315          
+ 316          /**
+ 317          * @brief report raw type DP data to zigbee module 
+ 318          * @param[in]  {dpid}  dp id
+ 319          * @param[in]  {value} Data contents of dp 
+ 320          * @param[in]  {len} length of Data contents  
+ 321          * @return send result 
+ 322          */
+ 323          unsigned char mcu_dp_raw_update(unsigned char dpid,const unsigned char value[],unsigned short len)
+ 324          {
+ 325   1        unsigned short length = 0;
+ 326   1        
+ 327   1        length = set_zigbee_uart_byte(length,dpid);
+ 328   1        length = set_zigbee_uart_byte(length,DP_TYPE_RAW);
+ 329   1        //
+ 330   1        length = set_zigbee_uart_byte(length,len / 0x100);
+ 331   1        length = set_zigbee_uart_byte(length,len % 0x100);
+ 332   1        //
+ 333   1        length = set_zigbee_uart_buffer(length,(unsigned char *)value,len);
+ 334   1        
+ 335   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 336   1        
+ 337   1        return SUCCESS;
+ 338   1      }
+ 339          
+ 340          /**
+ 341          * @brief report string type DP data to zigbee module 
+ 342          * @param[in]  {dpid}  dp id
+ 343          * @param[in]  {value} Data contents of dp 
+ 344          * @param[in]  {len} length of Data contents  
+ 345          * @return send result 
+ 346          */
+ 347          unsigned char mcu_dp_string_update(unsigned char dpid,const unsigned char value[],unsigned short len)
+ 348          {
+ 349   1        unsigned short length = 0;
+ 350   1        
+ 351   1        length = set_zigbee_uart_byte(length,dpid);
+ 352   1        length = set_zigbee_uart_byte(length,DP_TYPE_STRING);
+ 353   1        //
+ 354   1        length = set_zigbee_uart_byte(length,len / 0x100);
+ 355   1        length = set_zigbee_uart_byte(length,len % 0x100);
+ 356   1        //
+ 357   1        length = set_zigbee_uart_buffer(length,(unsigned char *)value,len);
+ 358   1        
+ 359   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 360   1        
+ 361   1        return SUCCESS;
+ 362   1      }
+ 363          
+ 364          /**
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 7   
+
+ 365          * @brief report raw type DP data to zigbee module 
+ 366          * @param[in]  {dpid}  dp id
+ 367          * @param[in]  {value} Data contents of dp 
+ 368          * @return send result 
+ 369          */
+ 370          unsigned char mcu_dp_value_update(unsigned char dpid,unsigned long value)
+ 371          {
+ 372   1        unsigned short length = 0;
+ 373   1        
+ 374   1        length = set_zigbee_uart_byte(length,dpid);
+ 375   1        length = set_zigbee_uart_byte(length,DP_TYPE_VALUE);
+ 376   1        //
+ 377   1        length = set_zigbee_uart_byte(length,0);
+ 378   1        length = set_zigbee_uart_byte(length,4);
+ 379   1        //
+ 380   1        length = set_zigbee_uart_byte(length,value >> 24);
+ 381   1        length = set_zigbee_uart_byte(length,value >> 16);
+ 382   1        length = set_zigbee_uart_byte(length,value >> 8);
+ 383   1        length = set_zigbee_uart_byte(length,value & 0xff);
+ 384   1        
+ 385   1        zigbee_uart_write_frame(DATA_REPORT_CMD,length);
+ 386   1        
+ 387   1        return SUCCESS;
+ 388   1      }
+ 389          
+ 390          /**
+ 391          * @brief mcu get bool type value from zigbee translate 
+ 392          * @param[in]  {value}  data of dp
+ 393          * @param[in]  {len} Data length
+ 394          * @return  true or false
+ 395          */
+ 396          unsigned char mcu_get_dp_download_bool(const unsigned char value[],unsigned short len)
+ 397          {
+ 398   1        return(value[0]);
+ 399   1      }
+*** WARNING C280 IN LINE 396 OF mcu_api.c: 'len': unreferenced local variable
+ 400          
+ 401          /**
+ 402          * @brief mcu get enum type value from zigbee translate 
+ 403          * @param[in]  {value}  data of dp
+ 404          * @param[in]  {len} Data length
+ 405          * @return  enum data
+ 406          */
+ 407          unsigned char mcu_get_dp_download_enum(const unsigned char value[],unsigned short len)
+ 408          {
+ 409   1        return(value[0]);
+ 410   1      }
+*** WARNING C280 IN LINE 407 OF mcu_api.c: 'len': unreferenced local variable
+ 411          
+ 412          /**
+ 413          * @brief mcu get value type value from zigbee translate 
+ 414          * @param[in]  {value}  data of dp
+ 415          * @param[in]  {len} Data length
+ 416          * @return  value data
+ 417          */
+ 418          unsigned long mcu_get_dp_download_value(const unsigned char value[],unsigned short len)
+ 419          {
+ 420   1        return(byte_to_int(value));
+ 421   1      }
+*** WARNING C280 IN LINE 418 OF mcu_api.c: 'len': unreferenced local variable
+ 422          
+ 423          
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 8   
+
+ 424          /**
+ 425          * @brief mcu start zigbee module test 
+ 426          * @param[in]  {channel} test channel usually 11
+ 427          * @return void
+ 428          */
+ 429          void mcu_start_zigbee_test(unsigned char channel)
+ 430          {
+ 431   1        zigbee_uart_tx_buf[DATA_START] = channel; 
+ 432   1        zigbee_uart_write_frame(ZIGBEE_RF_TEST_CMD,1);
+ 433   1      }
+ 434          
+ 435          /**
+ 436          * @brief mcu reset zigbee module 
+ 437          * @param[in]  {void} 
+ 438          * @return void
+ 439          */
+ 440          void mcu_reset_zigbee(void)
+ 441          {
+ 442   1        unsigned short length = 0;
+ 443   1      
+ 444   1        length = set_zigbee_uart_byte(length,0);
+ 445   1        zigbee_uart_write_frame(ZIGBEE_CFG_CMD, length);
+ 446   1      }
+ 447          
+ 448          /**
+ 449          * @brief mcu start zigbee module 
+ 450          * this commond must be call after reveived checking proudect info, or after get zigbee network info
+ 451          * @param[in]  {void} 
+ 452          * @return void
+ 453          */
+ 454          void mcu_network_start(void)
+ 455          {
+ 456   1        unsigned short length = 0;
+ 457   1      
+ 458   1        length = set_zigbee_uart_byte(length,1);
+ 459   1        zigbee_uart_write_frame(ZIGBEE_CFG_CMD, length);
+ 460   1      }
+ 461          
+ 462          /**
+ 463          * @brief copy receive data from uart receive interrupt
+ 464          * @param[in]  {value} Data received from interrupt
+ 465          * @return void 
+ 466          */
+ 467          void uart_receive_input(unsigned char value)
+ 468          {
+ 469   1        //#error "please call this fuction in the interrupt fuction of serial receive, and delete this line"
+ 470   1      
+ 471   1          if(1 == queue_out - queue_in) {
+ 472   2              //queue full
+ 473   2          }else if((queue_in > queue_out) && ((queue_in - queue_out) >= sizeof(zigbee_queue_buf))) {
+ 474   2              //queue full
+ 475   2          }else {
+ 476   2              //queue not full
+ 477   2              if(queue_in >= (unsigned char *)(zigbee_queue_buf + sizeof(zigbee_queue_buf))){
+ 478   3                  queue_in = (unsigned char *)(zigbee_queue_buf);
+ 479   3              }
+ 480   2              *queue_in ++ = value;
+ 481   2          }
+ 482   1      }
+ 483          
+ 484          
+ 485          /**
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 9   
+
+ 486          * @brief init paramter and set rx_buf with zero
+ 487          * @param[in]  {void}
+ 488          * @return void 
+ 489          */
+ 490          void zigbee_protocol_init(void)
+ 491          {
+ 492   1       // #error "please call this fuction in main init"
+ 493   1      
+ 494   1        queue_in = (unsigned char *)zigbee_queue_buf;
+ 495   1        queue_out = (unsigned char *)zigbee_queue_buf;
+ 496   1      }
+ 497          
+ 498          /**
+ 499          * @brief read byte from zigbee_queue_buf array
+ 500          * @param[in]  {void}
+ 501          * @return read byte value
+ 502          */
+ 503          unsigned char Queue_Read_Byte(void)
+ 504          {
+ 505   1          unsigned char value;
+ 506   1          
+ 507   1          if(queue_out != queue_in) {
+ 508   2              //have data in queue
+ 509   2              if(queue_out >= (unsigned char *)(zigbee_queue_buf + sizeof(zigbee_queue_buf))) {
+ 510   3                  queue_out = (unsigned char *)(zigbee_queue_buf);
+ 511   3              }
+ 512   2              value = *queue_out ++;   
+ 513   2          }
+ 514   1          
+ 515   1          return value;
+ 516   1      }
+ 517          
+ 518          /**
+ 519           * @brief  check rx buffer is empty or not
+ 520           * @param  Null
+ 521           * @return the queue state
+ 522           */
+ 523          unsigned char with_data_rxbuff(void)
+ 524          {
+ 525   1          if(queue_out != queue_in)
+ 526   1              return 1;
+ 527   1          else
+ 528   1              return 0;
+ 529   1      }
+ 530          
+ 531          
+ 532          /**
+ 533          * @brief uart receive data handle, call this function at mian loop 
+ 534          * @param[in]  {void}
+ 535          * @return void 
+ 536          */
+ 537          void zigbee_uart_service(void)
+ 538          {
+ 539   1          //#error "please call this fucntion in main while(1){}, and delete this line" 
+ 540   1          static unsigned short rx_in = 0;
+ 541   1          unsigned short offset = 0;
+ 542   1          unsigned short rx_value_len = 0;  
+ 543   1          unsigned short protocol_version = 0, protocol_head_len = PROTOCOL_HEAD;
+ 544   1      
+ 545   1          while((rx_in < sizeof(zigbee_uart_rx_buf)) && (with_data_rxbuff() > 0)){
+ 546   2              zigbee_uart_rx_buf[rx_in++] = Queue_Read_Byte();
+ 547   2          }
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 10  
+
+ 548   1      
+ 549   1          if(rx_in < PROTOCOL_HEAD){
+ 550   2              return;
+ 551   2          }
+ 552   1      
+ 553   1          while((rx_in - offset) >= PROTOCOL_HEAD){
+ 554   2              if(zigbee_uart_rx_buf[offset + HEAD_FIRST] != FIRST_FRAME_HEAD){
+ 555   3                  offset++;
+ 556   3                  continue;
+ 557   3              }
+ 558   2      
+ 559   2              if(zigbee_uart_rx_buf[offset + HEAD_SECOND] != SECOND_FRAME_HEAD){
+ 560   3                  offset++;
+ 561   3                  continue;
+ 562   3              }
+ 563   2      
+ 564   2              protocol_version = zigbee_uart_rx_buf[offset + PROTOCOL_VERSION];
+ 565   2      
+ 566   2             if(protocol_version != SERIAL_PROTOCOL_VER) /*version 2 is more than two byte  sequence number than
+             - version 1*/
+ 567   2              {
+ 568   3                  offset += 2; 
+ 569   3                  continue;
+ 570   3              }
+ 571   2      
+ 572   2              rx_value_len =  zigbee_uart_rx_buf[offset + LENGTH_HIGH ] * 0x100;
+ 573   2              rx_value_len += (zigbee_uart_rx_buf[offset + LENGTH_LOW] + PROTOCOL_HEAD);
+ 574   2      
+ 575   2              if(rx_value_len > sizeof(zigbee_uart_rx_buf)){
+ 576   3                  offset += 3;
+ 577   3                  continue;
+ 578   3              }
+ 579   2      
+ 580   2              if((rx_in - offset) < rx_value_len){
+ 581   3                  break;
+ 582   3              }
+ 583   2      
+ 584   2              if( get_check_sum((unsigned char *)zigbee_uart_rx_buf + offset, rx_value_len - 1) != zigbee_uart_r
+             -x_buf[offset + rx_value_len - 1]){
+ 585   3                  offset += 3; 
+ 586   3                  continue;
+ 587   3              }
+ 588   2      
+ 589   2              data_handle(offset);//数据处理
+ 590   2              offset += rx_value_len;
+ 591   2          }
+ 592   1          rx_in -= offset;
+ 593   1      
+ 594   1          if(rx_in > 0){
+ 595   2          if((offset == 0)  && (rx_in >= sizeof(zigbee_uart_rx_buf))){
+ 596   3                  offset++;
+ 597   3                  rx_in -= offset;
+ 598   3              }
+ 599   2          my_memcpy((char*)zigbee_uart_rx_buf, (const char *)zigbee_uart_rx_buf + offset, rx_in);
+ 600   2          }
+ 601   1      }
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =   3430    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =      2     106
+C51 COMPILER V9.53.0.0   MCU_API                                                           10/28/2024 12:44:25 PAGE 11  
+
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  3 WARNING(S),  0 ERROR(S)

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2816 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/protocol.lst


+ 62 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/sTimeout.lst

@@ -0,0 +1,62 @@
+C51 COMPILER V9.53.0.0   STIMEOUT                                                          10/28/2024 12:44:26 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE STIMEOUT
+OBJECT MODULE PLACED IN .\Objects\sTimeout.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE sTimeout.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBU
+                    -G OBJECTEXTEND PRINT(.\Listings\sTimeout.lst) TABS(2) OBJECT(.\Objects\sTimeout.obj)
+
+line level    source
+
+   1          /*******************************************************************************
+   2          *
+   3          *   Timeout 
+   4          *   Soft version:   V1.00
+   5          *   File Name:      sTimeout.c
+   6          *   Author   :      zzw (zhangzw_3@163.com)
+   7          *   creation date:  2022-07-20
+   8          * module description: 
+   9          *   Copyright (C) reserve
+  10          *
+  11          ********************************************************************************/
+  12          #include "sTimeout.h"
+  13          
+  14          /*******************************************************************************
+  15          Function:     sTimeout()
+  16          Description:    Check for timeout using the given tick counter and timeout value
+  17                  Force timeout if timeout value is zero
+  18          Calls:      
+  19          Called By:    
+  20          Input:      *varp -- the given tick counter, tout -- Force timeout
+  21          Output:     BOOL
+  22          Return:     return 1 when timeout  
+  23          Others:     no
+  24          ********************************************************************************/
+  25          BOOL sTimeout(unsigned int *varp, unsigned int tout)
+  26          {
+  27   1          unsigned int diff;
+  28   1      
+  29   1          diff = tickcount - *varp;
+  30   1          if (!tout || diff >= tout)
+  31   1          {
+  32   2              *varp = tickcount;
+  33   2              return 1;
+  34   2          }
+  35   1          return 0;
+  36   1      }
+  37          
+  38          /* EOF */ 
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =     63    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =   ----       2
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

+ 805 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/system.lst

@@ -0,0 +1,805 @@
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE SYSTEM
+OBJECT MODULE PLACED IN .\Objects\system.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE system.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG 
+                    -OBJECTEXTEND PRINT(.\Listings\system.lst) TABS(2) OBJECT(.\Objects\system.obj)
+
+line level    source
+
+   1          /**
+   2          * @file  system.c
+   3          * @brief this file contains frame analysis of communication between MCU and zigbee 
+   4          * and construct these functions which used send data in a frame format
+   5          * @author qinlang
+   6          * @date 2022.05.06
+   7          * @par email:
+   8          * @par email:qinlang.chen@tuya.com
+   9          * @copyright HANGZHOU TUYA INFORMATION TECHNOLOGY CO.,LTD
+  10          * @par company
+  11          * http://www.tuya.com
+  12          */
+  13          
+  14          
+  15          #define SYSTEM_GLOBAL
+  16          
+  17          #include "zigbee.h"
+  18          #include "iap.h" 
+  19          #include "HLW8110.h"
+*** WARNING C318 IN LINE 3 OF HLW8110.h: can't open file 'sys.h'
+*** WARNING C318 IN LINE 4 OF HLW8110.h: can't open file 'core_cm3.h'
+  20          
+  21          extern const DOWNLOAD_CMD_S download_cmd[];
+  22          
+  23          
+  24          #ifdef SUPPORT_MCU_RTC_CHECK
+              const unsigned char mon_table[12]={31,28,31,30,31,30,31,31,30,31,30,31};  
+              #endif
+  27          
+  28          #ifdef CHECK_MCU_TYPE
+              MCU_TYPE_E mcu_type = MCU_TYPE_DC_POWER;   
+              #endif
+  31          
+  32          
+  33          static volatile unsigned short global_seq_num;
+  34          
+  35          #ifdef CHECK_MCU_TYPE
+              static void response_mcu_type(void);
+              #endif
+  38          
+  39          
+  40          #ifdef SET_ZIGBEE_NWK_PARAMETER
+              nwk_parameter_t  nwk_paremeter;
+              #endif
+  43          
+  44          
+  45          
+  46          #ifdef SET_ZIGBEE_NWK_PARAMETER
+              void init_nwk_paremeter(void)
+              {
+                #error "please call this fuction in main init"
+                nwk_paremeter.fast_poll_period = 0xfffe;
+                nwk_paremeter.heart_period = 0xfffe;
+                nwk_paremeter.join_nwk_time = 0xfffe;
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 2   
+
+                nwk_paremeter.rejion_period = 0xfffe;
+                nwk_paremeter.poll_period = 0xfffe;
+                nwk_paremeter.fast_poll_period = 0xfffe;
+                nwk_paremeter.poll_failure_times = 0xfe;
+                nwk_paremeter.rejoin_try_times = 0xfe;
+                nwk_paremeter.app_trigger_rejoin = 0xfe;
+                nwk_paremeter.rf_send_power = 0xfe;
+              }
+              #endif
+  62          
+  63          /**
+  64          * @brief get frame seq_num
+  65          * @param[in] {void}
+  66          * @return seq_num  
+  67          */
+  68          static unsigned short seq_num_get(void)
+  69          {
+  70   1        global_seq_num ++;
+  71   1        if(global_seq_num > 0xfff0){
+  72   2          global_seq_num = 1;
+  73   2        }
+  74   1        return global_seq_num;
+  75   1      }
+  76          
+  77          /**
+  78          * @brief padding a byte in send buf base on dest
+  79          * @param[in] {dest} the location of padding byte 
+  80          * @param[in] {byte} padding byte 
+  81          * @return  sum of frame after this operation 
+  82          */
+  83          unsigned short set_zigbee_uart_byte(unsigned short dest, unsigned char byte)
+  84          {
+  85   1        unsigned char *obj = (unsigned char *)zigbee_uart_tx_buf + DATA_START + dest;
+  86   1        
+  87   1        *obj = byte;
+  88   1        dest += 1;
+  89   1        
+  90   1        return dest;
+  91   1      }
+  92          
+  93          /**
+  94          * @brief padding buf in send buf base on dest
+  95          * @param[in] {dest} the location of padding 
+  96          * @param[in] {src}  the head address of padding buf
+  97          * @param[in] {len}  the length of padding buf
+  98          * @return  sum of frame after this operation 
+  99          */
+ 100          unsigned short set_zigbee_uart_buffer(unsigned short dest, unsigned char *src, unsigned short len)
+ 101          {
+ 102   1        unsigned char *obj = (unsigned char *)zigbee_uart_tx_buf + DATA_START + dest;
+ 103   1        
+ 104   1        my_memcpy(obj,src,len);
+ 105   1        
+ 106   1        dest += len;
+ 107   1        return dest;
+ 108   1      }
+ 109          
+ 110          /**
+ 111          * @brief send len bytes data
+ 112          * @param[in] {in} the head address of send data
+ 113          * @param[in] {len}  the length of send data
+ 114          * @return  void
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 3   
+
+ 115          */
+ 116          void zigbee_uart_write_data(unsigned char *in, unsigned short len)
+ 117          {
+ 118   1        if((NULL == in) || (0 == len)){
+ 119   2          return;
+ 120   2        }
+ 121   1        
+ 122   1        while(len --){
+ 123   2          uart_transmit_output(*in);
+ 124   2          in ++;
+ 125   2        }
+ 126   1      }
+ 127          
+ 128          /**
+ 129          * @brief calculate the sum of the array
+ 130          * @param[in] {pack} the head address of array
+ 131          * @param[in] {pack_len}  the length of  array
+ 132          * @return  sum
+ 133          */
+ 134          unsigned char get_check_sum(unsigned char *pack, unsigned short pack_len)
+ 135          {
+ 136   1        unsigned short i;
+ 137   1        unsigned char check_sum = 0;
+ 138   1        
+ 139   1        for(i = 0; i < pack_len; i ++){
+ 140   2          check_sum += *pack ++;
+ 141   2        }
+ 142   1        
+ 143   1        return check_sum;
+ 144   1      }
+ 145          
+ 146          /**
+ 147          * @brief send a frame data 
+ 148          * @param[in] {fr_cmd} frame cmd id
+ 149          * @param[in] {len}    len of frame data 
+ 150          * @return  void
+ 151          */
+ 152          void zigbee_uart_write_frame(unsigned char fr_cmd, unsigned short len)
+ 153          {
+ 154   1        unsigned char check_sum = 0;  
+ 155   1        unsigned short  seq;
+ 156   1        
+ 157   1        zigbee_uart_tx_buf[HEAD_FIRST] = FIRST_FRAME_HEAD;
+ 158   1        zigbee_uart_tx_buf[HEAD_SECOND] = SECOND_FRAME_HEAD;
+ 159   1        zigbee_uart_tx_buf[PROTOCOL_VERSION] = SERIAL_PROTOCOL_VER;
+ 160   1        
+ 161   1       
+ 162   1        seq = seq_num_get();
+ 163   1        zigbee_uart_tx_buf[SEQ_HIGH] = (seq << 8);
+ 164   1        zigbee_uart_tx_buf[SEQ_LOW] = (seq & 0xff); 
+ 165   1      
+ 166   1        
+ 167   1        zigbee_uart_tx_buf[FRAME_TYPE] = fr_cmd;
+ 168   1        zigbee_uart_tx_buf[LENGTH_HIGH] = len >> 8;
+ 169   1        zigbee_uart_tx_buf[LENGTH_LOW] = len & 0xff;
+ 170   1        
+ 171   1        len += PROTOCOL_HEAD;
+ 172   1        
+ 173   1        check_sum = get_check_sum((unsigned char *)zigbee_uart_tx_buf, len-1);
+ 174   1        zigbee_uart_tx_buf[len -1] = check_sum;
+ 175   1        
+ 176   1        zigbee_uart_write_data((unsigned char *)zigbee_uart_tx_buf, len);
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 4   
+
+ 177   1      }
+ 178          
+ 179          /**
+ 180          * @brief send product info and mcu version 
+ 181          * @param[in] {void} 
+ 182          * @return  void
+ 183          */
+ 184          static void product_info_update(void)
+ 185          {
+ 186   1        unsigned short length = 0;
+ 187   1        length = set_zigbee_uart_buffer(length, "{\"p\":\"", my_strlen("{\"p\":\""));
+ 188   1        length = set_zigbee_uart_buffer(length,(unsigned char *)PRODUCT_KEY,my_strlen((unsigned char *)PRODUCT_K
+             -EY));
+ 189   1        length = set_zigbee_uart_buffer(length, "\",\"v\":\"", my_strlen("\",\"v\":\""));
+ 190   1        length = set_zigbee_uart_buffer(length,(unsigned char *)MCU_VER,my_strlen((unsigned char *)MCU_VER));
+ 191   1        length = set_zigbee_uart_buffer(length, "\"}", my_strlen("\"}"));
+ 192   1        zigbee_uart_write_frame(PRODUCT_INFO_CMD, length);
+ 193   1      }
+ 194          
+ 195          /**
+ 196          * @brief get the serial number of dpid in dp array  
+ 197          * @param[in] {dpid} dp id 
+ 198          * @return  serial number of dp 
+ 199          */
+ 200          static unsigned char get_dowmload_dpid_index(unsigned char dpid)
+ 201          {
+ 202   1        unsigned char index;
+ 203   1        unsigned char total = get_download_cmd_total();
+ 204   1        
+ 205   1        for(index = 0; index < total; index ++){
+ 206   2          if(download_cmd[index].dp_id == dpid){
+ 207   3            break;
+ 208   3          }
+ 209   2        }
+ 210   1        return index;
+ 211   1      }
+ 212          
+ 213          /**
+ 214          * @brief handle received dp data from zigbee module
+ 215          * @param[in] {value} dp data
+ 216          * @return  result of handle
+ 217          */
+ 218          static unsigned char zigbee_data_point_handle(const unsigned char value[])
+ 219          {
+ 220   1        unsigned char dp_id,index;
+ 221   1        unsigned char dp_type;
+ 222   1        unsigned char ret;
+ 223   1        unsigned short dp_len;
+ 224   1        
+ 225   1        dp_id = value[0];
+ 226   1        dp_type = value[1];
+ 227   1        dp_len = value[2] * 0x100;
+ 228   1        dp_len += value[3];
+ 229   1        
+ 230   1      
+ 231   1        index = get_dowmload_dpid_index(dp_id);
+ 232   1      
+ 233   1        if(dp_type != download_cmd[index].dp_type){
+ 234   2          return FALSE;
+ 235   2        }
+ 236   1        else{
+ 237   2          ret = dp_download_handle(dp_id,value + 4,dp_len);
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 5   
+
+ 238   2        }
+ 239   1        
+ 240   1        return ret;
+ 241   1      }
+ 242          
+ 243          /**
+ 244          * @brief handle received frame from zigbee module baseon frame cmd id
+ 245          * @param[in] {void}
+ 246          * @return  result of handle
+ 247          */
+ 248          int data_handle(unsigned short offset)
+ 249          {
+ 250   1          unsigned char cmd_type = 0;
+ 251   1          unsigned short total_len = 0, seq_num = 0;
+ 252   1          unsigned short dp_len;  
+ 253   1          unsigned char ret;
+ 254   1        unsigned short i;
+ 255   1        
+ 256   1          cmd_type  = zigbee_uart_rx_buf[offset + FRAME_TYPE];
+ 257   1      
+ 258   1          total_len  = zigbee_uart_rx_buf[offset + LENGTH_HIGH] * 0x100;
+ 259   1          total_len += zigbee_uart_rx_buf[offset + LENGTH_LOW];
+ 260   1          
+ 261   1        seq_num = zigbee_uart_rx_buf[offset + SEQ_HIGH] << 8;
+ 262   1          seq_num += zigbee_uart_rx_buf[offset + SEQ_LOW];
+ 263   1      
+ 264   1        switch(cmd_type)
+ 265   1        {
+ 266   2            case ZIGBEE_FACTORY_NEW_CMD:{
+ 267   3              zigbee_notify_factory_new_hanlde(); // response,APP删除设备,这里确认是否恢复出厂设置
+*** WARNING C206 IN LINE 267 OF system.c: 'zigbee_notify_factory_new_hanlde': missing function-prototype
+ 268   3          }
+ 269   2          break;
+ 270   2      
+ 271   2          case PRODUCT_INFO_CMD:{                                   
+ 272   3            product_info_update();
+ 273   3          }
+ 274   2          break;
+ 275   2           
+ 276   2          case ZIGBEE_STATE_CMD:{    
+ 277   3            unsigned char current_state = zigbee_uart_rx_buf[offset + DATA_START];                          
+ 278   3            zigbee_work_state_event(current_state);
+ 279   3          }
+ 280   2          break;
+ 281   2          
+ 282   2          case ZIGBEE_CFG_CMD:{                                   
+ 283   3            mcu_reset_zigbee_event(zigbee_uart_rx_buf[offset + DATA_START]);
+ 284   3          }
+ 285   2          break;
+ 286   2      
+ 287   2          case ZIGBEE_DATA_REQ_CMD:{                               
+ 288   3            for(i = 0;i < total_len;){
+ 289   4              dp_len = zigbee_uart_rx_buf[offset + DATA_START + i + 2] * 0x100;
+ 290   4              dp_len += zigbee_uart_rx_buf[offset + DATA_START + i + 3];
+ 291   4              ret = zigbee_data_point_handle((unsigned char *)zigbee_uart_rx_buf + offset + DATA_START + i);
+ 292   4                
+ 293   4              if(SUCCESS == ret){
+ 294   5                  
+ 295   5              }
+ 296   4              else{
+ 297   5                  
+ 298   5              }      
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 6   
+
+ 299   4              i += (dp_len + 4);  
+ 300   4            } 
+ 301   3          }   
+ 302   2          break;
+ 303   2          case DATA_DATA_RES_CMD:{
+ 304   3        
+ 305   3          } 
+ 306   2          case DATA_REPORT_CMD:{
+ 307   3      
+ 308   3          } 
+ 309   2          break;  
+ 310   2      
+ 311   2          case QUERY_KEY_INFO_CMD:{
+ 312   3      
+ 313   3          }
+ 314   2          break;
+ 315   2      
+ 316   2          case CALL_SCENE_CMD:{
+ 317   3      
+ 318   3          }
+ 319   2          break;
+ 320   2      
+ 321   2          case ZIGBEE_RF_TEST_CMD:{
+ 322   3                 
+ 323   3          }
+ 324   2          break;
+ 325   2          
+ 326   2          case MCU_OTA_VERSION_CMD:{
+ 327   3            response_mcu_ota_version_event();       
+ 328   3          }
+ 329   2          break;
+ 330   2      #ifdef SUPPORT_MCU_OTA    
+ 331   2          case MCU_OTA_NOTIFY_CMD:{
+ 332   3            response_mcu_ota_notify_event(offset);
+ 333   3          }
+ 334   2          break;
+ 335   2          
+ 336   2          case MCU_OTA_DATA_REQUEST_CMD:{
+ 337   3            mcu_ota_fw_request_event(offset);
+ 338   3              }
+ 339   2          break;
+ 340   2          
+ 341   2          case MCU_OTA_RESULT_CMD:{
+ 342   3            mcu_ota_result_event(offset);
+ 343   3          }
+ 344   2          break;
+ 345   2      #endif
+ 346   2          case CHECK_MCU_TYPE_CMD:
+ 347   2          {
+ 348   3      #ifdef CHECK_MCU_TYPE
+                    response_mcu_type();
+              #endif
+ 351   3          }
+ 352   2          break;
+ 353   2      
+ 354   2          case TIME_GET_CMD:{
+ 355   3      #ifdef SUPPORT_MCU_RTC_CHECK
+                    mcu_write_rtctime((unsigned char *)(zigbee_uart_rx_buf + offset + DATA_START));
+              #endif
+ 358   3          }
+ 359   2          break;
+ 360   2          
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 7   
+
+ 361   2      #ifdef  BEACON_TEST
+                  case SEND_BEACON_NOTIFY_CMD:{
+                    mcu_received_beacon_test_handle();
+                  }
+                  break;
+              #endif
+ 367   2      
+ 368   2          case READ_MCU_DP_DATA_CMD:{ // gw read DP
+ 369   3            all_data_update();
+ 370   3          }
+ 371   2          break;
+ 372   2      
+ 373   2          default:
+ 374   2            return 0;
+ 375   2        }
+ 376   1        return 1;
+ 377   1      }
+ 378          
+ 379          /**
+ 380          * @brief mcu send a cmd which used to making zigbee module reset
+ 381          * @param[in] {void}
+ 382          * @return  void
+ 383          */
+ 384          void mcu_exit_zigbee(void)
+ 385          {
+ 386   1        unsigned short length = 0;
+ 387   1        length = set_zigbee_uart_byte(length,0x00);
+ 388   1        zigbee_uart_write_frame(ZIGBEE_CFG_CMD, length);
+ 389   1      }
+ 390          
+ 391          /**
+ 392          * @brief mcu send this commond starting zigbee module join network
+ 393          * this commond must be call after reveived checking proudect info, or after get zigbee network info
+ 394          * @param[in] {void}
+ 395          * @return  void
+ 396          */
+ 397          void mcu_join_zigbee(void)
+ 398          {
+ 399   1        unsigned short length = 0;
+ 400   1        length = set_zigbee_uart_byte(length,0x01);
+ 401   1          zigbee_uart_write_frame(ZIGBEE_CFG_CMD, length);
+ 402   1      }
+ 403          
+ 404          /**
+ 405          * @brief mcu send a cmd which used to getting zigbee network state 
+ 406          * @param[in] {void}
+ 407          * @return  void
+ 408          */
+ 409          void mcu_get_zigbee_state(void)
+ 410          {
+ 411   1        zigbee_uart_write_frame(ZIGBEE_STATE_CMD, 0);
+ 412   1      }
+ 413          
+ 414          
+ 415          #ifdef CHECK_MCU_TYPE
+              /**
+              * @brief response zigbee check mcu type cmd 
+              * @param[in] {void}
+              * @return  void
+              */
+              static void response_mcu_type(void)
+              {
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 8   
+
+                unsigned short length = 0;
+                length = set_zigbee_uart_byte(length,mcu_type);
+                zigbee_uart_write_frame(CHECK_MCU_TYPE_CMD, length);
+              }   
+              #endif
+ 428          
+ 429          
+ 430          
+ 431          #ifdef SUPPORT_MCU_RTC_CHECK
+              /**
+              * @brief mcu send a cmd which used to getting timestamp
+              * @param[in] {void}
+              * @return void
+              */
+              void mcu_get_system_time(void)
+              {
+                zigbee_uart_write_frame(TIME_GET_CMD,0);
+              }
+              
+              /**
+              * @brief is a leap year
+              * @param[in] {pyear}
+              * @return  leap year return 1 
+              */
+              static unsigned char Is_Leap_Year(unsigned int pyear)
+              {
+                if(0 == (pyear%4)) {
+                  if(0 == (pyear%100)){
+                    if(0 == (pyear%400))   
+                      return 1;
+                    else    
+                      return 0;
+                  }
+                  else
+                    return 1; 
+                }
+                else
+                  return 0;
+              }
+              
+              /**
+              * @brief get calendar time from timestamp
+              * @param[in]  {secCount} input timestamp 
+              * @param[out] {calendar} output calendar 
+              * @return  result of changing
+              */
+              static unsigned char RTC_Get(unsigned int secCount,_calendar_obj *calendar)
+              {
+                static unsigned int dayCount=0;
+                unsigned int tmp=0; 
+                unsigned int tmp1=0;  
+              
+                tmp=secCount/86400;
+              
+                if(dayCount!=tmp){
+                  dayCount=tmp;
+                  tmp1=1970;
+                
+                  while(tmp>=365){
+                    if(Is_Leap_Year(tmp1)){
+                      if(tmp>=366)    
+                        tmp-=366;
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 9   
+
+                      else{
+                        break;
+                      }
+                    }
+                    else
+                      tmp-=365;
+                    tmp1++; 
+                  }
+                  calendar->w_year=tmp1;
+                  tmp1=0;
+                  
+                  while(tmp>=28){
+                    if(Is_Leap_Year(calendar->w_year)&&tmp1==1){
+                      if(tmp>=29) 
+                        tmp-=29;  
+                      else
+                        break;
+                    }
+                    else{
+                      if(tmp>=mon_table[tmp1])
+                        tmp-=mon_table[tmp1]; 
+                      else
+                        break;
+                    }
+                    tmp1++;
+                  }
+                  calendar->w_month=tmp1+1; 
+                  calendar->w_date=tmp+1;
+                }
+              
+                tmp=secCount%86400;
+                calendar->hour=tmp/3600;
+                calendar->min=(tmp%3600)/60;
+                calendar->sec=(tmp%3600)%60;
+              
+                return 0;
+              }
+              
+              /**
+              * @brief calculta time from frame 
+              * @param[in] {void}
+              * @return  void
+              */
+              void zigbee_timestamp_to_time(void) 
+              {
+                unsigned int time_stamp = byte_to_int(timestamp);
+                RTC_Get(time_stamp,&_time); 
+              }
+              #endif
+ 534          
+ 535          #ifdef BROADCAST_DATA_SEND
+              /**
+              * @brief mcu can send a broadcast data in zigbee network
+              * @param[in] {buf} array of buf which to be sended
+              * @param[in] {buf_len} send buf length
+              * @return void
+              */
+               void mcu_send_broadcast_data(unsigned char buf[], unsigned char buf_len)
+              {
+                 unsigned short length = 0;
+                   length = set_zigbee_uart_buffer(length,(unsigned char *)buf, buf_len);
+                   zigbee_uart_write_frame(SEND_BROADCAST_DATA_CMD,length);
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 10  
+
+              }
+              #endif
+ 549          
+ 550          #ifdef SET_ZIGBEE_NWK_PARAMETER
+              /**
+              * @brief mcu can set zigbee nwk parameter
+              * @param[in] {parameter_t *} 
+              * @param
+              * @return void
+              */
+               void mcu_set_zigbee_nwk_parameter(nwk_parameter_t *Pparameter)
+              {
+                unsigned short length = 0;
+                #error "please set network parameter in here, when zigbee received this message, it will start reboot"
+                 //Pparameter->app_trigger_rejoin  = 0x00;
+                   //Pparameter->fast_poll_period = 0x00;
+              
+                   length = set_zigbee_uart_byte(length,(Pparameter->heart_period >>8)); 
+                 length = set_zigbee_uart_byte(length,(Pparameter->heart_period)); 
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->join_nwk_time >>8)); 
+                 length = set_zigbee_uart_byte(length,(Pparameter->join_nwk_time)); 
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->rejion_period >>8)); 
+                   length = set_zigbee_uart_byte(length,(Pparameter->rejion_period)); 
+              
+                   length = set_zigbee_uart_byte(length,(Pparameter->poll_period >>8)); 
+                 length = set_zigbee_uart_byte(length,(Pparameter->poll_period));
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->fast_poll_period >>8)); 
+                 length = set_zigbee_uart_byte(length,(Pparameter->fast_poll_period)); 
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->poll_failure_times)); 
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->app_trigger_rejoin)); 
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->rejoin_try_times)); 
+              
+                 length = set_zigbee_uart_byte(length,(Pparameter->rf_send_power)); 
+                   zigbee_uart_write_frame(SET_ZIGBEE_NEK_PARAMETER_CMD,length);
+              }
+              #endif
+ 589          
+ 590          /**
+ 591          * @brief mcu version string to char
+ 592          * @param[in] {void}
+ 593          * @return  result of version
+ 594          */
+ 595          unsigned char get_current_mcu_fw_ver(void)
+ 596          {
+ 597   1        /*unsigned char *fw_ver = (unsigned char*) MCU_VER; //Current version
+ 598   1        unsigned char current_mcu_fw_ver = 0;
+ 599   1        if(assic_to_hex(fw_ver[5]) == -1){ // 3 number
+ 600   1          current_mcu_fw_ver = (assic_to_hex(fw_ver[0]) & 0x03) << 6; //high ver
+ 601   1          current_mcu_fw_ver |= (assic_to_hex(fw_ver[2]) & 0x03) << 4;  //mid ver
+ 602   1          current_mcu_fw_ver |= (assic_to_hex(fw_ver[4]) & 0x0F); //low ver
+ 603   1        }
+ 604   1        else{ // 4 number
+ 605   1          current_mcu_fw_ver = (assic_to_hex(fw_ver[0]) & 0x03) << 6; //high ver
+ 606   1          current_mcu_fw_ver |= (assic_to_hex(fw_ver[2]) & 0x03) << 4;  //mid ver
+ 607   1          current_mcu_fw_ver |= ((assic_to_hex(fw_ver[4])*10 + assic_to_hex(fw_ver[5])) & 0x0F);  //low ver
+ 608   1        }
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 11  
+
+ 609   1        return current_mcu_fw_ver;*/
+ 610   1        //modified by zzw 优化版本查询函数
+ 611   1        //unsigned char *fw_ver = (unsigned char*) MCU_VER; //Current version
+ 612   1          unsigned char fw_ver[10];//modified by zzw 20240326
+ 613   1        unsigned char current_mcu_fw_ver = 0;
+ 614   1        
+ 615   1          my_memcpy(fw_ver, (unsigned char *)MCU_VER,my_strlen((unsigned char *)MCU_VER));
+ 616   1        
+ 617   1        
+ 618   1        if(my_strlen((unsigned char *)MCU_VER)<=5)//1.0.1,5个字节
+ 619   1        {
+ 620   2        // 3 number
+ 621   2          current_mcu_fw_ver = (assic_to_hex(fw_ver[0]) & 0x03) << 6; //high ver
+ 622   2          current_mcu_fw_ver |= (assic_to_hex(fw_ver[2]) & 0x03) << 4;  //mid ver
+ 623   2          current_mcu_fw_ver |= (assic_to_hex(fw_ver[4]) & 0x0F); //low ver   
+ 624   2        }
+ 625   1        else
+ 626   1        {
+ 627   2          // 4 number
+ 628   2          current_mcu_fw_ver = (assic_to_hex(fw_ver[0]) & 0x03) << 6; //high ver
+ 629   2          current_mcu_fw_ver |= (assic_to_hex(fw_ver[2]) & 0x03) << 4;  //mid ver
+ 630   2          current_mcu_fw_ver |= ((assic_to_hex(fw_ver[4])*10 + assic_to_hex(fw_ver[5])) & 0x0F);  //low ver
+ 631   2        
+ 632   2        }
+ 633   1        
+ 634   1        /*if((fw_ver[4] >= 0x30)&&(fw_ver[5] >= 0x30))
+ 635   1        { // 4 number
+ 636   1          current_mcu_fw_ver = (assic_to_hex(fw_ver[0]) & 0x03) << 6; //high ver
+ 637   1          current_mcu_fw_ver |= (assic_to_hex(fw_ver[2]) & 0x03) << 4;  //mid ver
+ 638   1          current_mcu_fw_ver |= ((assic_to_hex(fw_ver[4])*10 + assic_to_hex(fw_ver[5])) & 0x0F);  //low ver
+ 639   1          
+ 640   1        }
+ 641   1        else
+ 642   1        { // 3 number
+ 643   1          current_mcu_fw_ver = (assic_to_hex(fw_ver[0]) & 0x03) << 6; //high ver
+ 644   1          current_mcu_fw_ver |= (assic_to_hex(fw_ver[2]) & 0x03) << 4;  //mid ver
+ 645   1          current_mcu_fw_ver |= (assic_to_hex(fw_ver[4]) & 0x0F); //low ver   
+ 646   1        }*/
+ 647   1        return current_mcu_fw_ver;
+ 648   1      }
+ 649          
+ 650          #ifdef SUPPORT_MCU_OTA
+ 651          /**
+ 652          * @brief get mcu pid data saved in current_mcu_pid
+ 653          * @param[in] {void}
+ 654          * @return  result of handle
+ 655          */
+ 656          void current_mcu_fw_pid(void)
+ 657          {
+ 658   1        unsigned char i = 0;
+ 659   1        //unsigned char *fw_pid = (unsigned char*) PRODUCT_KEY;
+ 660   1        unsigned char fw_pid[10];//modified by zzw 20240326
+ 661   1      
+ 662   1      
+ 663   1        my_memcpy(fw_pid,(unsigned char *)PRODUCT_KEY,my_strlen((unsigned char *)PRODUCT_KEY));
+ 664   1        while(i < 8){
+ 665   2          current_mcu_pid[i] = fw_pid[i];
+ 666   2          i++;
+ 667   2        }
+ 668   1      }
+ 669          
+ 670          /**
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 12  
+
+ 671          * @brief mcu ota offset requset 
+ 672          * @param[in] {packet_offset}  packet offset 
+ 673          * @return  viod
+ 674          */
+ 675          //when call this function, should set timeout event, if not received zigbee send response should res
+ 676          void mcu_ota_fw_request(void)
+ 677          {
+ 678   1        unsigned char i = 0;
+ 679   1        unsigned short length = 0;
+ 680   1      
+ 681   1        if(ota_fw_info.mcu_current_offset >= ota_fw_info.mcu_ota_fw_size)   //outside
+ 682   1          return;
+ 683   1        while(i < 8){
+ 684   2          length = set_zigbee_uart_byte(length,ota_fw_info.mcu_ota_pid[i]); //ota fw pid
+ 685   2          i++;
+ 686   2        }
+ 687   1        length = set_zigbee_uart_byte(length,ota_fw_info.mcu_ota_ver);    //ota fw version
+ 688   1        i = 0;
+ 689   1        while(i < 4){
+ 690   2          length = set_zigbee_uart_byte(length , ota_fw_info.mcu_current_offset >> (24 - i * 8)); //pakage offset 
+             -request
+ 691   2          i++;
+ 692   2        }
+ 693   1        length = set_zigbee_uart_byte(length ,FW_SINGLE_PACKET_SIZE); // packet size request
+ 694   1        
+ 695   1        zigbee_uart_write_frame(MCU_OTA_DATA_REQUEST_CMD,length);
+ 696   1      }
+ 697          
+ 698          /**
+ 699          * @brief mcu ota result report 
+ 700          * @param[in] {status} result of mcu ota
+ 701          * @return  void
+ 702          */
+ 703          void mcu_ota_result_report(unsigned char status)
+ 704          {
+ 705   1        unsigned short length = 0;
+ 706   1        unsigned char i = 0;
+ 707   1        
+ 708   1        length = set_zigbee_uart_byte(length,status); //upgrade result status(0x00:ota success;0x01:ota failed)
+ 709   1        while(i < 8){
+ 710   2          length = set_zigbee_uart_byte(length,ota_fw_info.mcu_ota_pid[i]); //PID
+ 711   2          i++;
+ 712   2        }
+ 713   1        length = set_zigbee_uart_byte(length,ota_fw_info.mcu_ota_ver);  //ota fw version
+ 714   1        
+ 715   1        zigbee_uart_write_frame(MCU_OTA_RESULT_CMD,length); //response 
+ 716   1      }
+ 717          
+ 718          #endif
+ 719          
+ 720          /**
+ 721          * @brief compare str1 and str2
+ 722          * @param[in] {str1} str1 
+ 723          * @param[in] {str2} str2
+ 724          * @param[in] {len}  len
+ 725          * @return  equal return 0 else return -1
+ 726          */
+ 727          int strcmp_barry(unsigned char *str1,unsigned char *str2,unsigned char len)
+ 728          {
+ 729   1         unsigned char i;
+ 730   1         for(i = 0; i < len; i++){
+ 731   2          if(str1[i] < str2[i]){
+C51 COMPILER V9.53.0.0   SYSTEM                                                            10/28/2024 12:44:26 PAGE 13  
+
+ 732   3            return -1; //str1 < str2
+ 733   3          }
+ 734   2          else if(str1[i] > str2[i]){ 
+ 735   3            return 1; //str1 > str2
+ 736   3          }
+ 737   2        }
+ 738   1        return 0; //str1 == str2
+ 739   1      }
+ 740          
+ 741          /**
+ 742          * @brief translate assic to hex
+ 743          * @param[in] {assic_num} assic number
+ 744          * @return hex data
+ 745          */
+ 746          char assic_to_hex(unsigned char assic_num)
+ 747          {
+ 748   1        if(assic_num<0x30 || assic_num > 0x39)  //0~9
+ 749   1          return -1;
+ 750   1        else
+ 751   1          return assic_num % 0x30;
+ 752   1      }
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =   1975    ----
+   CONSTANT SIZE    =     33    ----
+   XDATA SIZE       =    578      72
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  3 WARNING(S),  0 ERROR(S)

+ 97 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/time2.lst

@@ -0,0 +1,97 @@
+C51 COMPILER V9.53.0.0   TIME2                                                             10/28/2024 12:44:26 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE TIME2
+OBJECT MODULE PLACED IN .\Objects\time2.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE time2.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG O
+                    -BJECTEXTEND PRINT(.\Listings\time2.lst) TABS(2) OBJECT(.\Objects\time2.obj)
+
+line level    source
+
+   1          /*********************************************************************************************************
+             -**
+   2            测试tim2定时器:
+   3            说明:
+   4            *1.系统主频为FRC/2.波形输出引脚:P10
+   5            *3.定时模式, 16位定时器定时1ms,中断一次
+   6          **********************************************************************************************************
+             -*/
+   7          
+   8          #include <REGtenxTM52F1386.h>
+   9          #include "TM52F1386_bsp.h"
+  10          #include <intrins.h>
+  11          #include "time2.h"
+  12          #include "GLOBAL.h"
+  13          #include "gpio_ctrl.h"
+  14          
+  15          #define FRC_HZ 18432000
+  16          #define FRC_DIV 2
+  17          #define CLK_US 1000                                        // 1ms
+  18          #define TIME2_RELOAD (unsigned int)(65536 - (((FRC_HZ / FRC_DIV) / 2 / 1000) * CLK_US / 1000)) // 精度更高
+  19          
+  20          /*********************************************************************************************************
+             -*
+  21          **函数名称 :tim2_init
+  22          **函数描述 :定时器初始化
+  23          **输    入 :None
+  24          **输    出 :None
+  25          **********************************************************************************************************
+             -/
+  26          void tim2_init(void)
+  27          {
+  28   1        CT2N = 0; // 定时器模式
+  29   1        CPRL2N = 0; // 重载模式
+  30   1      
+  31   1        TH2 = (TIME2_RELOAD) / 256;
+  32   1        TL2 = (TIME2_RELOAD) % 256;
+  33   1      
+  34   1        RCP2H = (TIME2_RELOAD) / 256;
+  35   1        RCP2L = (TIME2_RELOAD) % 256;
+  36   1      
+  37   1        TR2 = 1;
+  38   1        ET2 = 1;
+  39   1      }
+  40          /******************************************************************************************
+  41          ** 函数名称: time2_irq
+  42          ** 函数描述: time2中断处理函数
+  43          ** 输入参数: 无
+  44          ** 输出参数: 无
+  45          *******************************************************************************************/
+  46          void time2_irq() interrupt 5
+  47          {
+  48   1        int i=0;
+  49   1        if (TF2)
+  50   1        {
+C51 COMPILER V9.53.0.0   TIME2                                                             10/28/2024 12:44:26 PAGE 2   
+
+  51   2          TF2 = 0; // 除了用作串口的时基外,其他应用必须清零
+  52   2          
+  53   2          // key_led_ctl();  //
+  54   2          if (++sysTickfor10ms >= 10) // 10ms
+  55   2          {
+  56   3           for(i=0;i<6;i++)
+  57   3           {
+  58   4            ledTimer[i].ticket++;//1ms控制按键背光灯,PWM基准周期1ms
+  59   4           }
+  60   3            sysTickfor10ms = 0;
+  61   3            sys10msFlag = 1;
+  62   3            tickcount++;
+  63   3            switchState.buttonPressTime++; // 长按键计数器
+  64   3            ledTimerAll.ticket++;      // 背光闪烁用
+  65   3          }
+  66   2        }
+  67   1      }
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =    191    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =   ----    ----
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

+ 220 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/uart.lst

@@ -0,0 +1,220 @@
+C51 COMPILER V9.53.0.0   UART                                                              10/28/2024 12:44:26 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE UART
+OBJECT MODULE PLACED IN .\Objects\uart.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE uart.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG OB
+                    -JECTEXTEND PRINT(.\Listings\uart.lst) TABS(2) OBJECT(.\Objects\uart.obj)
+
+line level    source
+
+   1          /*********************************************************************************************************
+             -**
+   2            功能:
+   3            Uart1(9600)Uart2(9600),采用time1定时器
+   4            Uart1选用P30,P31作为通信口,Uart2选用P17,P36作为通信口
+   5          
+   6            8位数据位,无校验位,1位停止位。
+   7          **********************************************************************************************************
+             -*/
+   8          #include <REGtenxTM52F1386.h>
+   9          #include "TM52F1386_bsp.h"
+  10          #include <intrins.h>
+  11          #include "uart.h"
+  12          #include "zigbee.h"
+  13          
+  14          // 波特率=(SMOD+1) x F SYSCLK /(32 x 2 x (256 – TH1))
+  15          #define SMOD_PRICE 1
+  16          #define FRC_HZ 18432000
+  17          #define FRC_DIV 2
+  18          
+  19          #define BAUD4800 4800
+  20          #define BAUD9600 9600
+  21          #define BAUD19200 19200
+  22          #define BAUD38400 38400
+  23          #define BAUD57600 57600
+  24          #define BAUD115200 115200 // 必须在系统一分频下
+  25          
+  26          #define UART0_BAUD_RATE BAUD9600
+  27          
+  28          #define TIM_NUM (unsigned int)(256 - ((((FRC_HZ / FRC_DIV) * (SMOD_PRICE + 1)) / 2) / 32 / BAUD9600)); // 
+             -计算不同波特率下的定时器值
+  29          /*
+  30          系统频率设置为二分频
+  31          */
+  32          
+  33          unsigned char txrx_buf[8] = {0x55};
+  34          char busy;
+  35          char setuart;
+  36          /*********************************************************************************************************
+             -*
+  37          **函数名称 :uart1_gpio_init
+  38          **函数描述 :串口IO初始化
+  39          **输    入 :None
+  40          **输    出 :None
+  41          **********************************************************************************************************
+             -/
+  42          void uart0_gpio_init()
+  43          {
+  44   1        // RXD p30 --p4.4
+  45   1        // TXD p31  --p4.5
+  46   1      
+  47   1        /*SET_REG(PORTIDX, PORT3);
+  48   1        SET_REG_BITS(PINMOD10, PINMOD1, PIN_MODE_PP);
+  49   1        SET_REG_BITS(PINMOD10, PINMOD0, PIN_MODE_OD_IPU);*/
+C51 COMPILER V9.53.0.0   UART                                                              10/28/2024 12:44:26 PAGE 2   
+
+  50   1      
+  51   1        ////modified by  zzw  修改串口为P4.4和P4.5
+  52   1        SET_REG(PORTIDX, PORT4);
+  53   1        SET_REG_BITS(PINMOD54, PINMOD5, PIN_MODE_PP);
+  54   1        SET_REG_BITS(PINMOD54, PINMOD4, PIN_MODE_OD_IPU);
+  55   1      
+  56   1        setuart = GET_REG(PINMODE) | 0x02;
+  57   1        SET_REG(PINMODE, setuart); // 设置UART0PS为10,将P4.4/P4.5用作RXD0/TXD0
+  58   1                       ////modified by  zzw  修改串口为P4.4和P4.5
+  59   1      }
+  60          /*********************************************************************************************************
+             -*
+  61          **函数名称 :uart1_timer2_init
+  62          **函数描述 :uart1在timer2下配置
+  63          **输    入 :None
+  64          **输    出 :None
+  65          **********************************************************************************************************
+             -/
+  66          void uart0_timer1_init()
+  67          {
+  68   1      
+  69   1        /*SET_REG(PORTIDX, PORT3);
+  70   1        SET_REG_BITS(PINMOD10, PINMOD1, PIN_MODE_PP);
+  71   1        SET_REG_BITS(PINMOD10, PINMOD0, PIN_MODE_OD_IPU);*/
+  72   1      
+  73   1        uart0_gpio_init();
+  74   1      
+  75   1        SET_REG_BITS(PCON, SMOD, SMOD_PRICE); // 双波特率控制位
+  76   1        SM0 = 0;
+  77   1        SM1 = 1; // 模式1
+  78   1        SM2 = 0;
+  79   1        REN = 1; // 允许接收
+  80   1      
+  81   1        SET_REG_BITS(TMOD, TMOD1, 2); // 8 位自动重载定时器/计数器(TL1),溢出时从 TH1 重新装载。
+  82   1      
+  83   1        TL1 = TIM_NUM;
+  84   1        TH1 = TIM_NUM;
+  85   1      
+  86   1        TI = 0;  // 先清发送中断 标志
+  87   1        RI = 0;  // 先清接收中断 标志
+  88   1        TR1 = 1; // TIMER1 运行
+  89   1        REN = 1; // UART接收收据使能
+  90   1      
+  91   1        ES = 1; // 允许串口Uart1中断
+  92   1      
+  93   1        ////boot uart,前提一倍频下计算////
+  94   1        /*UART0CON = UART0CON & ~0x80; // UART0BRS清零,波特率设置同标准 8051
+  95   1      
+  96   1        SM0 = 0;
+  97   1        SM1 = 1;           // SM0\SM1=01   UART mode=1;8位数据传送  ,01:模式 1:8 位 UART0,波特率可变
+  98   1        SM2 = 0;           // Mode 1, 3    波特率采用9600 = (SMOD+1) x Fsysclk / (32 x 2 x (256-TH1)) --- 若使用Timer1
+             - 自动重载模式
+  99   1        PCON = (PCON & 0x7F) | 0x80; // SMOD=1允许UART双波特率控制//波特率= (SMOD + 1) x F SYSCLK / (32 x 2 x (25
+             -6 – TH1))
+ 100   1        // Fsysclk = 波特率 * 32 * (256 - TH1)
+ 101   1        // TH1 = 256-Fsysclk/(波特率*32)
+ 102   1        // 115200  :TH1 =256- 18432000/115200/32=256-5
+ 103   1        // 9600  : TH1 =256- 18432000/9600/32=256- 60
+ 104   1      
+ 105   1        TMOD = TMOD & ~0X30 | 0x20;
+ 106   1        TL1 = 256 - 5;
+ 107   1        TH1 = 256 - 5; // 115200
+C51 COMPILER V9.53.0.0   UART                                                              10/28/2024 12:44:26 PAGE 3   
+
+ 108   1      
+ 109   1        //TL1 = 256 - 60;
+ 110   1        //TH1 = 256 - 60; // 9600
+ 111   1      
+ 112   1        TCLK = 0; // UART1模式1&3发送时钟源:0-timer1   1-timer2
+ 113   1        RCLK = 0; // UART1模式1&3接收时钟源:0-timer1   1-timer2
+ 114   1      
+ 115   1        ES = 1;  // 允许串口Uart中断
+ 116   1        TI = 0;  // 先清发送中断 标志
+ 117   1        RI = 0;  // 先清接收中断 标志
+ 118   1        TR1 = 1; // TIMER1 运行
+ 119   1        REN = 1; // UART接收使能*/
+ 120   1        ////boot uart///
+ 121   1      
+ 122   1        busy = 0; // 初始化
+ 123   1      }
+ 124          
+ 125          /*********************************************************************************************************
+             -*
+ 126          **函数名称 :uart1_irq
+ 127          **函数描述 :uart1中断入口
+ 128          **输    入 :None
+ 129          **输    出 :None
+ 130          **********************************************************************************************************
+             -/
+ 131          void uart0_irq() interrupt 4
+ 132          {
+ 133   1        unsigned char temp;
+ 134   1        if (RI)
+ 135   1        {
+ 136   2          temp = SBUF;
+ 137   2          uart_receive_input(temp); // zigbee函数
+ 138   2          RI = 0;
+ 139   2        }
+ 140   1        /*  if (TI)
+ 141   1          {
+ 142   1            TI = 0;
+ 143   1            busy = 0; // 清除忙标志
+ 144   1          }*/
+ 145   1        // 不是方式0,不采用中断请标志位
+ 146   1      }
+ 147          /*********************************************************************************************************
+             -*
+ 148          **函数名称 UART1_send
+ 149          **函数描述 :uart1发送单字节数据
+ 150          **输    入 char
+ 151          **输    出 :None
+ 152          **********************************************************************************************************
+             -/
+ 153          void UART0_send(unsigned char c) // 发送单字节
+ 154          {
+ 155   1        // while (busy)
+ 156   1        //  ;
+ 157   1        // busy = 1;
+ 158   1        SBUF = c; // 发送单字节
+ 159   1        while (TI == 0)
+ 160   1          ; // 等待发送完成
+ 161   1        TI = 0; //
+ 162   1      }
+ 163          /*********************************************************************************************************
+             -*
+ 164          **函数名称 UART1_send_buf
+C51 COMPILER V9.53.0.0   UART                                                              10/28/2024 12:44:26 PAGE 4   
+
+ 165          **函数描述 :uart1发送字符串
+ 166          **输    入 char
+ 167          **输    出 :None
+ 168          **********************************************************************************************************
+             -/
+ 169          void UART0_send_buf(char *s) // 发送字符串
+ 170          {
+ 171   1        while (*s)
+ 172   1        {
+ 173   2          UART0_send(*s++);
+ 174   2        }
+ 175   1      }
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =    200    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =     10       3
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

+ 420 - 0
Projects/macro/switch_ota_app_V1.1.06/Listings/uart2.lst

@@ -0,0 +1,420 @@
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 1   
+
+
+C51 COMPILER V9.53.0.0, COMPILATION OF MODULE UART2
+OBJECT MODULE PLACED IN .\Objects\uart2.obj
+COMPILER INVOKED BY: D:\Keil_c51\C51\BIN\C51.EXE uart2.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\..\..\Drivers) DEBUG O
+                    -BJECTEXTEND PRINT(.\Listings\uart2.lst) TABS(2) OBJECT(.\Objects\uart2.obj)
+
+line level    source
+
+   1          /******************************************************************************************************
+   2            IC : TM52F1386
+   3            
+   4            演示效果  :
+   5                通过USB将开发板与电脑,打开电脑中的串口助手,设置对应端口,
+   6              9600波特率,8位数据位,无校验位,1位停止位。向学习板发送任
+   7              意1个字节数据,学习板会回传1个相同字节数据。
+   8              
+   9              注意:
+  10                   需要将底板的OP4端子的TX与RX跳线帽接好
+  11                   
+  12            时钟 : 
+  13              快时钟系统主频为 18.432M/2 = 9.216M 
+  14              分给定时器的时钟频率为9.216M/2 = 4.608M
+  15          *********************************************************************************************************/
+  16          
+  17          #include <REGtenxTM52F1386.h>
+  18          #include "TM52F1386_bsp.h"
+  19          #include <intrins.h>
+  20          #include "uart2.h"
+  21          #include "HLW8110.h"
+*** WARNING C318 IN LINE 3 OF HLW8110.h: can't open file 'sys.h'
+*** WARNING C318 IN LINE 4 OF HLW8110.h: can't open file 'core_cm3.h'
+  22          #include "zigbee.h"
+  23          
+  24          // 波特率=(SMOD+1) x F SYSCLK /(32 x 2 x (256 – TH1))
+  25          #define SMOD_PRICE 1
+  26          #define FRC_HZ 18432000
+  27          #define FRC_DIV 2
+  28          
+  29          #define BAUD4800 4800
+  30          #define BAUD9600 9600
+  31          #define BAUD19200 19200
+  32          #define BAUD38400 38400
+  33          #define BAUD57600 57600
+  34          #define BAUD115200 115200 // 必须在系统一分频下
+  35          
+  36          #define CKS_EVEN_ODD  0        //0:EVEN    1:ODD
+  37          #define UART2BRP  (unsigned int)(FRC_HZ/FRC_DIV/32/BAUD9600)    //计算不同波特率下的UART2BRP
+  38          /*********************************************************************************************************
+             -*
+  39          **函数名称 :uart1_gpio_init
+  40          **函数描述 :串口IO初始化
+  41          **输    入 :None
+  42          **输    出 :None
+  43          **********************************************************************************************************
+             -/
+  44          void uart2_gpio_init()
+  45          {
+  46   1        PORTIDX = PORT1;
+  47   1        PINMOD10 = PINMOD10&0x00 | PIN_L_MODE_OD_IPU | PIN_H_MODE_PP;
+  48   1        P1_1 = 1;     // tx
+  49   1        P1_0 = 1;     // rx
+  50   1      
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 2   
+
+  51   1          
+  52   1          // p55,54
+  53   1        SET_REG(PORTIDX, 5);
+  54   1        SET_REG_BITS(PINMOD54, PINMOD5, PIN_MODE_PP); // 配置为CMOS推挽输出
+  55   1        P5_5 = 0;   //A
+  56   1      
+  57   1        SET_REG(PORTIDX, 5);
+  58   1        SET_REG_BITS(PINMOD54, PINMOD4, PIN_MODE_PP); // 配置为CMOS推挽输出
+  59   1        P5_4 = 0;   //B
+  60   1      }
+  61          
+  62          void open_first_passageway(void)   
+  63          {
+  64   1        P5_4 = 1;   //B   //P5_4 = 0;   //B
+  65   1        P5_5 = 0;   //A   //P5_5 = 0;   //A
+  66   1      }
+  67          void open_second_passageway(void)  //对应实际第三路
+  68          {
+  69   1      //  P5_4 = 1;   //B
+  70   1      //  P5_5 = 0;   //A
+  71   1        P5_4 = 0;   //B
+  72   1        P5_5 = 1;   //A
+  73   1      }
+  74          void open_third_passageway(void)     //对应实际第二路
+  75          {
+  76   1      //  P5_4 = 0;   //B
+  77   1      //  P5_5 = 1;   //A
+  78   1        P5_4 = 0;   //B   //P5_4 = 1;   //B
+  79   1        P5_5 = 0;   //A   //P5_5 = 0;   //A
+  80   1      }
+  81          void close_all_passageway(void)
+  82          {
+  83   1        P5_4 = 1;   //B
+  84   1        P5_5 = 1;   //A
+  85   1      }
+  86          /******************************************************************************************
+  87          ** 函数名称: uart2_init
+  88          ** 函数描述: uart初始化函数  9600-8-1 无校验(轮询接收)
+  89          ** 输入参数: 无
+  90          ** 输出参数: 无
+  91          *******************************************************************************************/
+  92          void uart2_init(void)
+  93          {
+  94   1        uart2_gpio_init();
+  95   1      
+  96   1        UART2_9Bits;
+  97   1        SCON2 = (SCON2&~SCON2_REN2_MASK) | 1 <<SCON2_REN2_POS;     //允许接收,REN2=1
+  98   1        UART2CON = (UART2CON &~ UART2CON_UART2BRP_MASK) | (UART2BRP << UART2CON_UART2BRP_POS);
+  99   1      
+ 100   1        SCON2 = (SCON2 & ~RI2);                  //UART2 接收中断标志
+ 101   1        SCON2 = (SCON2 & ~TI2);                 // UART2 发送中断标志
+ 102   1          
+ 103   1      
+ 104   1        UART2_RECEPTION_ENABLE;             //UART接收使能
+ 105   1        INTE1 = (INTE1 &~ INTE1_ES2_MASK) | 1 <<INTE1_ES2_POS;  //ES2=1
+ 106   1      }
+ 107          
+ 108          /******************************************************************************************
+ 109          ** 函数名称: uart_recv
+ 110          ** 函数描述: uart2接收函数
+ 111          ** 输入参数: 无
+ 112          ** 输出参数: 无
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 3   
+
+ 113          *******************************************************************************************/
+ 114          /*void uart_recv (unsigned char *buf, unsigned char len)
+ 115          {
+ 116            unsigned char i;
+ 117            for (i = 0; i < len; i++)
+ 118            {
+ 119              while ( (SCON2 & RI2) == 0);
+ 120              *buf = SBUF2;
+ 121              SCON2 = SCON2 & ~RI2;                   //清除标志位
+ 122              buf++;
+ 123            }
+ 124          }*/
+ 125          /******************************************************************************************
+ 126          ** 函数名称: uart_send
+ 127          ** 函数描述: uart2发送函数
+ 128          ** 输入参数: 无
+ 129          ** 输出参数: 无
+ 130          *******************************************************************************************/
+ 131          /*void uart_send (unsigned char *buf, unsigned char len)
+ 132          {
+ 133            unsigned char i;
+ 134            for (i = 0; i < len; i++)
+ 135            {
+ 136              SBUF2 = *buf;
+ 137              buf++;
+ 138              while ((SCON2 & TI2) == 0);
+ 139              SCON2 = SCON2 & ~TI2;                   //清除标志位
+ 140            }
+ 141          }*/
+ 142          
+ 143          /*********************************************************************************************************
+             -*
+ 144          **函数名称 :uart1_irq
+ 145          **函数描述 :uart1中断入口
+ 146          **输    入 :None
+ 147          **输    出 :None
+ 148          **********************************************************************************************************
+             -/
+ 149          //void uart2_irq() interrupt 12     //测试版
+ 150          //{
+ 151          //  unsigned char temp;
+ 152          //  if(SCON2&RI2)
+ 153          //  {
+ 154          //    temp = SBUF2;
+ 155          ////    //uart_receive_input(temp); // zigbee函数
+ 156          ////    SCON2 = SCON2&~SCON2_RI2_MASK;
+ 157          //    
+ 158          ////    if (u8_RX_Index < u8_RX_Length )
+ 159          ////    {
+ 160          //      u8_RxBuf[u8_RX_Index] = temp;   // 数据接收中
+ 161          //      u8_RX_Index++;
+ 162          //      if(u8_RX_Index>=9)
+ 163          //      {
+ 164          //        u8_RX_Index =0;
+ 165          //      }
+ 166          ////      
+ 167          ////      B_Rx_Data_ING = 1;                    // 置数据接收标志位
+ 168          ////    }
+ 169          ////    else
+ 170          ////    {
+ 171          ////      B_Rx_Finish = TRUE;                   // 数据接收完毕
+ 172          ////      u8_RX_Index = 0;
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 4   
+
+ 173          
+ 174          ////    }
+ 175          //    SCON2 = SCON2&~SCON2_RI2_MASK;
+ 176          //  }
+ 177          
+ 178          //}
+ 179          
+ 180          //void uart2_irq() interrupt 12     //测试版
+ 181          //{
+ 182          //  unsigned char temp;
+ 183          //  if(SCON2&RI2)
+ 184          //  {
+ 185          //    temp = SBUF2; 
+ 186          //    if (u8_RX_Index < u8_RX_Length )
+ 187          //    {
+ 188          //      u8_RxBuf[u8_RX_Index] = temp;   // 数据接收中
+ 189          //      u8_RX_Index++;  
+ 190          //      B_Rx_Data_ING = 1;                    // 置数据接收标志位
+ 191          //    }
+ 192          //    else
+ 193          //    {
+ 194          //      B_Rx_Finish = TRUE;                   // 数据接收完毕
+ 195          //      u8_RX_Index = 0;
+ 196          
+ 197          //    }
+ 198          //    SCON2 = SCON2&~SCON2_RI2_MASK;
+ 199          //  }
+ 200          
+ 201          //}
+ 202          
+ 203          void uart2_irq() interrupt 12     //
+ 204          {
+ 205   1        unsigned char temp;
+ 206   1        unsigned char xdata dat=0;    //必须定义成Xdata类型,这样才能将数据存放到A寄存器里,配合PSW实现奇偶判断
+ 207   1        unsigned char i=0, tmp=0,total=0;
+ 208   1        if(SCON2&RI2)
+ 209   1        {
+ 210   2          temp = SCON2&RB82;
+ 211   2      
+ 212   2          dat = SBUF2;
+ 213   2          tmp = dat;
+ 214   2          for(i=0;i<8;i++)
+ 215   2          {
+ 216   3            if((tmp&0x01)==1)
+ 217   3            {
+ 218   4              total++;
+ 219   4            }
+ 220   3            tmp>>=1;
+ 221   3          }
+ 222   2          #if (CKS_EVEN_ODD==0)  //接收偶校验数据值
+ 223   2          //if(((RB82==0)&&(P==0)) ||((RB82==1)&&(P==1))) //P为PSW寄存器里面成员,单片机都能根据A中1的个数的奇偶自
+             -动令P置位或清零,奇为1,偶为0
+ 224   2          if(((temp==0)&&(total%2==0)) ||((temp==0x04)&&(total%2==1))) //奇为1,偶为0
+ 225   2          {
+ 226   3            if (u8_RX_Index < u8_RX_Length )
+ 227   3            {
+ 228   4              u8_RxBuf[u8_RX_Index] = dat;    // 数据接收中
+ 229   4              u8_RX_Index++;  
+ 230   4              B_Rx_Data_ING = 1;                    // 置数据接收标志位
+ 231   4      //        if(u8_RX_Index>9)
+ 232   4      //        {
+ 233   4      //          u8_RX_Index = 0;
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 5   
+
+ 234   4      //        }
+ 235   4            }
+ 236   3            else
+ 237   3            {
+ 238   4              B_Rx_Finish = TRUE;                   // 数据接收完毕
+ 239   4              u8_RX_Index = 0;
+ 240   4            }
+ 241   3          }
+ 242   2          #else             //接收奇校验数据值
+                  //if(((RB82==1)&&(P==0)) ||((RB82==0)&&(P==1)))
+                  if(((temp==0x04)&&(total%2==0)) ||((temp==0)&&(total%2==1)))
+                  {
+                    if (u8_RX_Index < u8_RX_Length )
+                    {
+                      u8_RxBuf[u8_RX_Index] = dat;    // 数据接收中
+                      u8_RX_Index++;  
+                      B_Rx_Data_ING = 1;                    // 置数据接收标志位
+                    }
+                    else
+                    {
+                      B_Rx_Finish = TRUE;                   // 数据接收完毕
+                      u8_RX_Index = 0;
+                    }
+                  }
+                  #endif 
+ 259   2          SCON2 = SCON2&~SCON2_RI2_MASK;
+ 260   2        }
+ 261   1      }
+ 262          
+ 263          /*********************************************************************************************************
+             -*
+ 264          **函数名称 UART1_send
+ 265          **函数描述 :uart1发送单字节数据
+ 266          **输    入 char
+ 267          **输    出 :None
+ 268          **********************************************************************************************************
+             -/
+ 269          //void UART2_send(unsigned char c) // 发送单字节
+ 270          //{
+ 271          //  // while (busy)
+ 272          //  //  ;
+ 273          //  // busy = 1;
+ 274          //  SBUF2 = c; // 发送单字节
+ 275          //  while((SCON2&TI2) == 0);// 等待发送完成
+ 276          //  SCON2 = SCON2&~SCON2_TI2_MASK;
+ 277          //}
+ 278          
+ 279          void UART2_send(unsigned char tx_dat)
+ 280          {
+ 281   1        unsigned char i=0,total=0;
+ 282   1        unsigned char xdata dat;
+ 283   1        dat = tx_dat; 
+ 284   1        for(i=0;i<8;i++)
+ 285   1        {
+ 286   2          if((dat&0x01)==1)
+ 287   2          {
+ 288   3            total++;
+ 289   3          }
+ 290   2          dat>>=1;
+ 291   2        }
+ 292   1        #if CKS_EVEN_ODD  
+                if((total%2)!=0)        //奇为1,偶为0
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 6   
+
+                {SCON2 &= ~TB82;}
+                else
+                {SCON2 |= TB82;}
+              #else 
+ 298   1        if((total%2)==0) 
+ 299   1        {SCON2 &= ~TB82;}
+ 300   1        else
+ 301   1        {SCON2 |= TB82;}
+ 302   1      #endif  
+ 303   1        
+ 304   1          SBUF2 = tx_dat; // 发送单字节
+ 305   1          while((SCON2&TI2) == 0);// 等待发送完成
+ 306   1          //SCON2 = SCON2&~SCON2_TI2_MASK;
+ 307   1          SCON2 = SCON2 & ~TI2;                   //清除标志位
+ 308   1      }
+ 309          
+ 310          /*********************************************************************************************************
+             -*
+ 311          **函数名称 UART1_send_buf
+ 312          **函数描述 :uart1发送字符串
+ 313          **输    入 char
+ 314          **输    出 :None
+ 315          **********************************************************************************************************
+             -/
+ 316          void UART2_send_buf(char *s) // 发送字符串
+ 317          {
+ 318   1        while (*s)
+ 319   1        {
+ 320   2          UART2_send(*s++);
+ 321   2        }
+ 322   1      }
+ 323          
+ 324          void Start_Send_UartData(unsigned char len)
+ 325          {
+ 326   1        unsigned char i;
+ 327   1        for(i=0;i<len;i++)
+ 328   1        { 
+ 329   2          UART2_send(u8_TxBuf[i]);
+ 330   2          
+ 331   2        }
+ 332   1      
+ 333   1      }
+ 334          
+ 335          void uart_send (unsigned char *buf, unsigned char len)
+ 336          {
+ 337   1        unsigned char i;
+ 338   1        for (i = 0; i < len; i++)
+ 339   1        {
+ 340   2          SBUF2 = *buf;
+ 341   2          buf++;
+ 342   2          while ((SCON2 & TI2) == 0);
+ 343   2          SCON2 = SCON2 & ~TI2;                   //清除标志位
+ 344   2        }
+ 345   1      }
+ 346          
+ 347          /******************************************************************************************
+ 348          ** 函数名称: main
+ 349          ** 函数描述: main函数
+ 350          ** 输入参数: 无
+ 351          ** 输出参数: 无
+ 352          *******************************************************************************************/
+ 353          /*void main (void)
+C51 COMPILER V9.53.0.0   UART2                                                             10/28/2024 12:44:27 PAGE 7   
+
+ 354          {
+ 355            bsp_clock_init();         // 系统快钟18.432 div 2 =  9.216Mhz
+ 356          
+ 357            uart2_init();
+ 358          
+ 359            while (1)
+ 360            {
+ 361              uart_recv (txrx_buf, 1);
+ 362              uart_send (txrx_buf, 1);
+ 363          //    bsp_delay_ms(1000);
+ 364            }
+ 365          }*/
+ 366          
+ 367          
+ 368          
+ 369          
+ 370          
+ 371          
+ 372          
+ 373          
+
+
+MODULE INFORMATION:   STATIC OVERLAYABLE
+   CODE SIZE        =    402    ----
+   CONSTANT SIZE    =   ----    ----
+   XDATA SIZE       =   ----       3
+   PDATA SIZE       =   ----    ----
+   DATA SIZE        =   ----    ----
+   IDATA SIZE       =   ----    ----
+   BIT SIZE         =   ----    ----
+END OF MODULE INFORMATION.
+
+
+C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

binární
Projects/macro/switch_ota_app_V1.1.06/Objects/CRC.obj


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/EEPROM.obj


+ 2 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/ExtDll.iex

@@ -0,0 +1,2 @@
+[EXTDLL]
+Count=0

binární
Projects/macro/switch_ota_app_V1.1.06/Objects/GLOBAL.obj


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HLW8110.obj


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.bin


+ 136 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.build_log.htm

@@ -0,0 +1,136 @@
+<html>
+<body>
+<pre>
+<h1>µVision Build Log</h1>
+<h2>Tool Versions:</h2>
+IDE-Version: ¦ÌVision V5.11.2.0
+Copyright (C) 2014 ARM Ltd and ARM Germany GmbH. All rights reserved.
+License Information: LUXCON 273380647@qq.com, LUXCON, LIC=ZBD7S-LJL1L-D8FFM-XR6G3-B2KW1-M4LPX
+ 
+Tool Versions:
+Toolchain:       PK51 Prof. Developers Kit  Version: 9.53.0.0
+Toolchain Path:  C:\Keil_v5_51\C51\BIN
+C Compiler:      C51.exe V9.53.0.0
+Assembler:       A51.exe V8.02b
+Linker/Locator:  BL51.exe V6.22
+Library Manager: LIB51.exe V4.30.0.2
+Hex Converter:   OH51.exe V2.7.0.0
+CPU DLL:         S8051.DLL V3.95.0.0
+Dialog DLL:      DP51.DLL V2.62.0.1
+Target DLL:      C:\Keil_v5_51\SampTarg.DLL V1.06.44.75.R
+Dialog DLL:      TP51.DLL V2.58
+ 
+<h2>Project:</h2>
+D:\Work\GIT\TM52eF1386_OTA\TM52F1386_SDK_v0_0_1\Projects\macro\switch_ota_V1.0\main.uvproj
+Project File Date:  03/19/2024
+
+<h2>Output:</h2>
+Rebuild target 'Target 1'
+assembling STARTUP_TENX52.A51...
+compiling main.c...
+compiling EEPROM.c...
+compiling GLOBAL.c...
+compiling gpio_ctrl.c...
+gpio_ctrl.c(340): warning C280: 'state': unreferenced local variable
+gpio_ctrl.c(351): warning C280: 'state': unreferenced local variable
+gpio_ctrl.c(362): warning C280: 'state': unreferenced local variable
+gpio_ctrl.c(941): warning C280: 'ledprd': unreferenced local variable
+gpio_ctrl.c(1016): warning C280: 'row': unreferenced local variable
+gpio_ctrl.c(1018): warning C280: 'ReadValue': unreferenced local variable
+compiling mcu_api.c...
+mcu_api.c(396): warning C280: 'len': unreferenced local variable
+mcu_api.c(407): warning C280: 'len': unreferenced local variable
+mcu_api.c(418): warning C280: 'len': unreferenced local variable
+compiling protocol.c...
+protocol.c(1758): warning C280: 'k': unreferenced local variable
+protocol.c(1758): warning C280: 'Ret': unreferenced local variable
+protocol.c(1759): warning C280: 'temp_buff': unreferenced local variable
+protocol.c(1792): warning C280: 'data1': unreferenced local variable
+protocol.c(1798): warning C280: 'write_data': unreferenced local variable
+compiling sTimeout.c...
+compiling system.c...
+system.c(266): warning C206: 'zigbee_notify_factory_new_hanlde': missing function-prototype
+compiling time2.c...
+compiling uart.c...
+compiling TM52F1386_bsp.c...
+linking...
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?RELAY_CTL?MAIN
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_BASE64ENCODE?GLOBAL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_KEY1_LED_CONTROL?GPIO_CTRL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_KEY2_LED_CONTROL?GPIO_CTRL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_KEY3_LED_CONTROL?GPIO_CTRL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?KEY_LED_CTL?GPIO_CTRL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_HEX_TO_BCD?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MY_MEMSET?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MY_STRCPY?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MY_STRCMP?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_INT_TO_BYTE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MCU_DP_BITMAP_UPDATE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MCU_DP_FAULT_UPDATE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MCU_DP_RAW_UPDATE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MCU_DP_VALUE_UPDATE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MCU_GET_DP_DOWNLOAD_VALUE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_MCU_START_ZIGBEE_TEST?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?MCU_RESET_ZIGBEE?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?MCU_NETWORK_START?MCU_API
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?ZIGBEE_TEST_RESULT?PROTOCOL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_REPORT_MCU_OTA_RESULT?PROTOCOL
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_STIMEOUT?STIMEOUT
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?MCU_EXIT_ZIGBEE?SYSTEM
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?MCU_GET_ZIGBEE_STATE?SYSTEM
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_UART1_SEND_BUF?UART
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?BSP_FXT_CLOCK_INIT?TM52F1386_BSP
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?BSP_SXT_CLOCK_INIT?TM52F1386_BSP
+*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
+    SEGMENT: ?PR?_BSP_DELAY_100US?TM52F1386_BSP
+Program Size: data=9.0 xdata=2241 code=18458
+creating hex file from ".\Objects\HSW_2KEY"...
+User command #1: .\_MakeTenx_main\run.bat
+D:\Work\GIT\TM52eF1386_OTA\TM52F1386_SDK_v0_0_1\Projects\macro\switch_ota_V1.0>".\_MakeTenx_main\CallKeilDll.exe"
+".\Objects\HSW_2KEY" - 0 Error(s), 43 Warning(s).
+Load "D:\\Work\\GIT\\TM52eF1386_OTA\\TM52F1386_SDK_v0_0_1\\Projects\\macro\\switch_ota_V1.0\\Objects\\HSW_2KEY" 
+Flash Write Done: 18398 bytes programmed.
+Flash Verify Done: 18398 bytes verified.
+Code checksum: 0xA2D3.
+Load "D:\\Work\\GIT\\TM52eF1386_OTA\\TM52F1386_SDK_v0_0_1\\Projects\\macro\\switch_ota_V1.0\\Objects\\HSW_2KEY" 
+Flash Write Done: 18398 bytes programmed.
+Flash Verify Done: 18398 bytes verified.
+Code checksum: 0xA2D3.
+Load "D:\\Work\\GIT\\TM52eF1386_OTA\\TM52F1386_SDK_v0_0_1\\Projects\\macro\\switch_ota_V1.0\\Objects\\HSW_2KEY" 
+Flash Write Done: 18398 bytes programmed.
+Flash Verify Done: 18398 bytes verified.
+Code checksum: 0xA2D3.
+</pre>
+</body>
+</html>
+F1386_OTA\\TM52F1386_SDK_v0_0_1\\Projects\\macro\\switch_ota_V1.0\\Objects\\HSW_1KEY" 
+Flash Write Done: 18402 bytes programmed.
+Flash Verify Done: 18402 bytes verified.
+Code checksum: 0x18C0.

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1316 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.hex


+ 16 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.lnp

@@ -0,0 +1,16 @@
+".\Objects\STARTUP_TENX52.obj",
+".\Objects\main.obj",
+".\Objects\EEPROM.obj",
+".\Objects\GLOBAL.obj",
+".\Objects\gpio_ctrl.obj",
+".\Objects\mcu_api.obj",
+".\Objects\protocol.obj",
+".\Objects\sTimeout.obj",
+".\Objects\system.obj",
+".\Objects\time2.obj",
+".\Objects\uart.obj",
+".\Objects\TM52F1386_bsp.obj" 
+TO ".\Objects\HSW_1KEY" 
+PRINT(".\Listings\HSW_1KEY.m51") RAMSIZE(256) 
+CODE( 0x00-0x32,0x3B-0xFBFF )
+XDATA( 0XE800-0XF7FF )

+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.log


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4386 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.bin


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 32769 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.crc


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 18402 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.crc16_WriterVerify


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 32801 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY.tenx.crc2


+ 38 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_.tin

@@ -0,0 +1,38 @@
+[Project Data state]
+SYSCFG = C0 1F 
+SYSCFG_ATK_ENABLE = 0
+MULTI_LANGUAGE = 0
+FORCE_ERASE = 0
+IRCF_O = 0
+SHOW_IRCF = 0
+ICE_MESS = 0
+SHOWMSGBOX_BEFOREDOWNLOAD = 0
+SHOWMSGBOX_BEFOREREADCODE = 0
+UNLOCK_PROTECT_PLUS_ERASE = 0
+FLASH_P = 1
+FLASH_V = 1
+READID_RETRY_COUNT = 0
+READID_DELAY_TIME = 1000
+COMPILE_WITH_MAKETENX = 1
+AP_MESS = 0
+
+[Project PageLock state]
+PAGE_LOCK_EN = 0
+PAGE_LOCK_ID = 
+PAGE_LOCK_PATH = 
+PAGE_LOCK_COUNT = 0
+PAGE_LOCK_EXPORT_ID = 
+PAGE_LOCK_EXPORT_COUNT = 0
+PAGE_LOCK_EXPORT_INPATH = 
+PAGE_LOCK_EXPORT_OUTPATH = 
+
+[Project Debug state]
+SKIP_READ_PC = 0
+SKIP_READ_XRAM = 0
+SKIP_READ_SFR = 0
+SKIP_33TO3A_CHECK = 0
+SKIP_CODEEND_CHECK = 0
+WRITE_ONE_BYTE = 0
+
+[Project LCD state]
+LCD_VIEW = 0

+ 2 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_.tin.bak

@@ -0,0 +1,2 @@
+[Project Data state]
+SYSCFG = C0 1F 

binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1485 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.hex


+ 18 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.lnp

@@ -0,0 +1,18 @@
+".\Objects\STARTUP_TENX52.obj",
+".\Objects\main.obj",
+".\Objects\EEPROM.obj",
+".\Objects\GLOBAL.obj",
+".\Objects\gpio_ctrl.obj",
+".\Objects\mcu_api.obj",
+".\Objects\protocol.obj",
+".\Objects\sTimeout.obj",
+".\Objects\system.obj",
+".\Objects\time2.obj",
+".\Objects\uart.obj",
+".\Objects\CRC.obj",
+".\Objects\iap.obj",
+".\Objects\TM52F1386_bsp.obj" 
+TO ".\Objects\HSW_1KEY_APP" 
+PRINT(".\Listings\HSW_1KEY_APP.m51") RAMSIZE(256) 
+CODE( 0x00-0x32,0x3B-0xDFFF )
+XDATA( 0xE800-0xF7FF )

+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.log


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4386 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.tenx


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP.tenx.bin


+ 34 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_.tin

@@ -0,0 +1,34 @@
+[Project Data state]
+SYSCFG = C0 1F 
+SYSCFG_ATK_ENABLE = 0
+MULTI_LANGUAGE = 0
+FORCE_ERASE = 0
+IRCF_O = 0
+SHOW_IRCF = 0
+ICE_MESS = 0
+SHOWMSGBOX_BEFOREDOWNLOAD = 0
+SHOWMSGBOX_BEFOREREADCODE = 0
+UNLOCK_PROTECT_PLUS_ERASE = 0
+FLASH_P = 1
+FLASH_V = 1
+READID_RETRY_COUNT = 0
+READID_DELAY_TIME = 1000
+COMPILE_WITH_MAKETENX = 1
+
+[Project PageLock state]
+PAGE_LOCK_EN = 0
+PAGE_LOCK_ID = 
+PAGE_LOCK_PATH = 
+PAGE_LOCK_COUNT = 0
+PAGE_LOCK_EXPORT_ID = 
+PAGE_LOCK_EXPORT_COUNT = 0
+PAGE_LOCK_EXPORT_INPATH = 
+PAGE_LOCK_EXPORT_OUTPATH = 
+
+[Project Debug state]
+SKIP_READ_PC = 0
+SKIP_READ_XRAM = 0
+SKIP_READ_SFR = 0
+SKIP_33TO3A_CHECK = 0
+SKIP_CODEEND_CHECK = 0
+WRITE_ONE_BYTE = 0

+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_.tin.bak


+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_Driver.log


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1486 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.hex


+ 18 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.lnp

@@ -0,0 +1,18 @@
+".\Objects\STARTUP_TENX52.obj",
+".\Objects\main.obj",
+".\Objects\EEPROM.obj",
+".\Objects\GLOBAL.obj",
+".\Objects\gpio_ctrl.obj",
+".\Objects\mcu_api.obj",
+".\Objects\protocol.obj",
+".\Objects\sTimeout.obj",
+".\Objects\system.obj",
+".\Objects\time2.obj",
+".\Objects\uart.obj",
+".\Objects\CRC.obj",
+".\Objects\iap.obj",
+".\Objects\TM52F1386_bsp.obj" 
+TO ".\Objects\HSW_1KEY_APP_V101" 
+PRINT(".\Listings\HSW_1KEY_APP_V101.m51") RAMSIZE(256) 
+CODE( 0x00-0x32,0x3B-0xDFFF )
+XDATA( 0xE800-0xF7FF )

+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.log


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4386 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.tenx


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101.tenx.bin


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1472 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.hex


+ 18 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.lnp

@@ -0,0 +1,18 @@
+".\Objects\STARTUP_TENX52.obj",
+".\Objects\main.obj",
+".\Objects\EEPROM.obj",
+".\Objects\GLOBAL.obj",
+".\Objects\gpio_ctrl.obj",
+".\Objects\mcu_api.obj",
+".\Objects\protocol.obj",
+".\Objects\sTimeout.obj",
+".\Objects\system.obj",
+".\Objects\time2.obj",
+".\Objects\uart.obj",
+".\Objects\CRC.obj",
+".\Objects\iap.obj",
+".\Objects\TM52F1386_bsp.obj" 
+TO ".\Objects\HSW_1KEY_APP_V101_" 
+PRINT(".\Listings\HSW_1KEY_APP_V101_.m51") RAMSIZE(256) 
+CODE( 0x00-0x32,0x3B-0xDFFF )
+XDATA( 0xE800-0xF7FF )

+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.log


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4386 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.tenx


binární
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.tenx.bin


+ 0 - 0
Projects/macro/switch_ota_app_V1.1.06/Objects/HSW_1KEY_APP_V101_.tin


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů