C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 1 C51 COMPILER V9.60.7.0, COMPILATION OF MODULE BULBID OBJECT MODULE PLACED IN .\Objects\BulbId.obj COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Src\BulbId.c OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(.\Src;.\Task;.\Task\cpu_p -ort\S92F8003A;.\Task\cfg;.\Task\pt_thread;.\SC92F8003_Lib\Inc) DEBUG CODE LISTINCLUDE SYMBOLS PRINT(.\Listings\BulbId.ls -t) PREPRINT(.\Listings\BulbId.i) OBJECT(.\Objects\BulbId.obj) line level source 1 #include "BulbId.h" 1 =1 #ifndef _BULBLD_H_ 2 =1 #define _BULBLD_H_ 3 =1 4 =1 #include "BulbId_def.h" 1 =2 #ifndef _BULBLD_DEF_H_ 2 =2 #define _BULBLD_DEF_H_ 3 =2 #include "stdint.h" 1 =3 #ifndef _STD_INT_H_ 2 =3 #define _STD_INT_H_ 3 =3 typedef signed long int32_t; 4 =3 typedef unsigned long uint32_t; 5 =3 typedef signed char int8_t; 6 =3 typedef unsigned char uint8_t; 7 =3 typedef signed int int16_t; 8 =3 typedef unsigned int uint16_t; 9 =3 #endif 4 =2 5 =2 6 =2 #define V2_PACKET_LEN 9 7 =2 8 =2 #define V2_PROTOCOL_ID_INDEX 1 9 =2 #define V2_ID_HI_INDEX 2 10 =2 #define V2_ID_LOW_INDEX 3 11 =2 #define V2_COMMAND_INDEX 4 12 =2 #define V2_ARGUMENT_INDEX 5 13 =2 14 =2 #define V2_GRP_INDEX 7 15 =2 16 =2 17 =2 #define FUT089_COLOR_OFFSET 0 18 =2 19 =2 enum MiLightFUT089Command 20 =2 { 21 =2 FUT089_ON = 0x01, 22 =2 FUT089_OFF = 0x01, 23 =2 FUT089_COLOR = 0x02, 24 =2 FUT089_BRIGHTNESS = 0x05, 25 =2 FUT089_MODE = 0x06, 26 =2 FUT089_KELVIN = 0x07, // Controls Kelvin when in White mode 27 =2 FUT089_SATURATION = 0x07 // Controls Saturation when in Color mode 28 =2 }; 29 =2 30 =2 enum MiLightFUT089Arguments 31 =2 { 32 =2 FUT089_MODE_SPEED_UP = 0x12, 33 =2 FUT089_MODE_SPEED_DOWN = 0x13, 34 =2 FUT089_WHITE_MODE = 0x14 35 =2 }; 36 =2 37 =2 enum MiLightRemoteType 38 =2 { 39 =2 REMOTE_TYPE_UNKNOWN = 255, C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 2 40 =2 REMOTE_TYPE_RGBW = 0, 41 =2 REMOTE_TYPE_CCT = 1, 42 =2 REMOTE_TYPE_RGB_CCT = 2, 43 =2 REMOTE_TYPE_RGB = 3, 44 =2 REMOTE_TYPE_FUT089 = 4, 45 =2 REMOTE_TYPE_FUT091 = 5, 46 =2 REMOTE_TYPE_FUT020 = 6 47 =2 }; 48 =2 49 =2 // MiLight CCT bulbs range from 2700K-6500K, or ~370.3-153.8 mireds. 50 =2 #define COLOR_TEMP_MAX_MIREDS 370 51 =2 #define COLOR_TEMP_MIN_MIREDS 153 52 =2 53 =2 54 =2 55 =2 enum BulbMode { 56 =2 BULB_MODE_WHITE, 57 =2 BULB_MODE_COLOR, 58 =2 BULB_MODE_SCENE, 59 =2 BULB_MODE_NIGHT 60 =2 }; 61 =2 62 =2 enum IncDIR{ 63 =2 INCREASE = 1, 64 =2 DECREASE = -1U 65 =2 }; 66 =2 67 =2 68 =2 enum eCommands { 69 =2 UNPAIR , 70 =2 PAIR , 71 =2 SET_WHITE , 72 =2 NIGHT_MODE , 73 =2 LEVEL_UP , 74 =2 LEVEL_DOWN , 75 =2 TEMPERATURE_UP , 76 =2 TEMPERATURE_DOWN, 77 =2 NEXT_MODE , 78 =2 PREVIOUS_MODE , 79 =2 MODE_SPEED_DOWN , 80 =2 MODE_SPEED_UP , 81 =2 TOGGLE , 82 =2 TRANSITION 83 =2 }; 84 =2 85 =2 86 =2 enum LEDState 87 =2 { 88 =2 OFF = 0, 89 =2 ON 90 =2 }; 91 =2 92 =2 struct Result 93 =2 { 94 =2 uint8_t button_id ; 95 =2 uint8_t argument ; 96 =2 uint8_t STATE ; 97 =2 uint8_t STATUS ; 98 =2 uint8_t BRIGHTNESS ; 99 =2 uint8_t LEVEL ; 100 =2 uint8_t HUE ; 101 =2 uint8_t SATURATION ; C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 3 102 =2 uint8_t COLOR ; 103 =2 uint8_t MODE ; 104 =2 uint8_t KELVIN ; 105 =2 uint8_t TEMPERATURE ; 106 =2 uint8_t COLOR_TEMP ; 107 =2 uint8_t BULB_MODE ; 108 =2 uint8_t COMPUTED_COLOR ; 109 =2 uint8_t EFFECT ; 110 =2 uint8_t DEVICE_ID ; 111 =2 uint8_t GROUP_ID ; 112 =2 uint8_t DEVICE_TYPE ; 113 =2 uint8_t OH_COLOR ; 114 =2 uint8_t HEX_COLOR ; 115 =2 uint8_t COMMAND ; 116 =2 uint8_t COMMANDS ; 117 =2 uint8_t COLOR_MODE ; 118 =2 }; 119 =2 120 =2 struct BulbId 121 =2 { 122 =2 enum MiLightRemoteType deviceType; 123 =2 uint8_t groupId; 124 =2 uint16_t deviceId; 125 =2 uint16_t PWM_Value[5]; 126 =2 127 =2 uint8_t bENPWM :1; 128 =2 uint8_t bInit :1; 129 =2 uint8_t repeatCnt; 130 =2 131 =2 struct Result result; 132 =2 }; 133 =2 #endif 5 =1 #include "al_helper.h" 1 =2 /* 2 =2 * al_helper.h 3 =2 * 4 =2 * Created on: 2023-4-20 5 =2 * Author: xukaiming 6 =2 */ 7 =2 8 =2 #ifndef _AL_HELPER_H_ 9 =2 #define _AL_HELPER_H_ 10 =2 11 =2 #include "stdint.h" 1 =3 #ifndef _STD_INT_H_ =3 #define _STD_INT_H_ =3 typedef signed long int32_t; =3 typedef unsigned long uint32_t; =3 typedef signed char int8_t; =3 typedef unsigned char uint8_t; =3 typedef signed int int16_t; =3 typedef unsigned int uint16_t; =3 #endif 12 =2 13 =2 #ifdef __cplusplus =2 extern "C" { =2 #endif 16 =2 17 =2 //#define AL_STATIC static 18 =2 #define AL_STATIC 19 =2 #define AL_INLINE inline 20 =2 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 4 21 =2 #define TASK_WITH_PT 1 22 =2 #define TASK_WITH_NAME 0 23 =2 24 =2 #define XDATA xdata 25 =2 #define IDATA idata 26 =2 #define CONST code 27 =2 //#define CONST xdata 28 =2 29 =2 30 =2 #ifndef UNUSED 31 =2 #define UNUSED(x) (void)(x) 32 =2 #endif 33 =2 34 =2 enum 35 =2 { 36 =2 false = 0, 37 =2 true =!false 38 =2 }; 39 =2 40 =2 #ifdef __cplusplus =2 } =2 #endif 43 =2 44 =2 #endif 45 =2 6 =1 #include "pt_header.h" 1 =2 #ifndef _PT_HEADER_H_ 2 =2 #define _PT_HEADER_H_ 3 =2 4 =2 #include "pt_timer.h" 1 =3 #ifndef _PT_TIMER_H_ 2 =3 #define _PT_TIMER_H_ 3 =3 #include "pt.h" 1 =4 2 =4 #ifndef __PT_H__ 3 =4 #define __PT_H__ 4 =4 5 =4 #include "lc.h" 1 =5 #ifndef __LC_H__ 2 =5 #define __LC_H__ 3 =5 4 =5 5 =5 #ifdef LC_INCLUDE =5 #include LC_INCLUDE =5 #else 8 =5 #include "lc-switch.h" 1 =6 2 =6 3 =6 #ifndef __LC_SWITCH_H__ 4 =6 #define __LC_SWITCH_H__ 5 =6 6 =6 typedef unsigned short lc_t; 7 =6 8 =6 #define LC_INIT(s) s = 0; 9 =6 10 =6 #define LC_RESUME(s) switch(s) { case 0: 11 =6 12 =6 #define LC_SET(s) s = __LINE__; case __LINE__: 13 =6 14 =6 #define LC_END(s) } 15 =6 16 =6 #endif /* __LC_SWITCH_H__ */ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 5 17 =6 18 =6 /** @} */ 9 =5 #endif 10 =5 11 =5 #endif 6 =4 7 =4 struct pt { 8 =4 lc_t lc; 9 =4 }; 10 =4 11 =4 12 =4 #ifndef UNUSED_PARAM 13 =4 #define UNUSED_PARAM(v) (void)(v) 14 =4 #endif 15 =4 16 =4 #define PT_WAITING 0 //等待 17 =4 #define PT_YIELDED 1 //锁死线程 18 =4 #define PT_EXITED 2 //退出 19 =4 #define PT_ENDED 3 //结束 20 =4 21 =4 22 =4 #define PT_BIND(pt1) {static idata struct pt pt_hide ;pt1 = &pt_hide;} 23 =4 24 =4 25 =4 #define PT_INIT(pt) LC_INIT((pt)->lc) 26 =4 #define PT_THREAD(name_args) int8_t name_args 27 =4 #define PT_BEGIN(pt) { int8_t PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc) 28 =4 #define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \ 29 =4 UNUSED_PARAM(PT_YIELD_FLAG );\ 30 =4 PT_INIT(pt); return PT_ENDED; } 31 =4 32 =4 33 =4 //等待条件成立,如果不成立,继续等待 34 =4 #define PT_WAIT_UNTIL(pt, condition) \ 35 =4 do { \ 36 =4 LC_SET((pt)->lc); \ 37 =4 if(!(condition)) { \ 38 =4 return PT_WAITING; \ 39 =4 } \ 40 =4 } while(0) 41 =4 42 =4 //一直等待,直到条件不成立 43 =4 #define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond)) 44 =4 //等待子线程退出 45 =4 #define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread)) 46 =4 47 =4 //启动子线程,等待子线程退出,如果不退出,在此阻塞 48 =4 #define PT_SPAWN(pt, child, thread) \ 49 =4 do { \ 50 =4 PT_INIT((child)); \ 51 =4 PT_WAIT_THREAD((pt), (thread)); \ 52 =4 } while(0) 53 =4 54 =4 //重新启动线程,从头开始 55 =4 #define PT_RESTART(pt) \ 56 =4 do { \ 57 =4 PT_INIT(pt); \ 58 =4 return PT_WAITING; \ 59 =4 } while(0) 60 =4 61 =4 //退出线程 62 =4 #define PT_EXIT(pt) \ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 6 63 =4 do { \ 64 =4 PT_INIT(pt); \ 65 =4 return PT_EXITED; \ 66 =4 } while(0) 67 =4 //子线程是否退出 68 =4 #define PT_SCHEDULE(f) ((f) < PT_EXITED) 69 =4 70 =4 //锁死任务 71 =4 #define PT_YIELD(pt) \ 72 =4 do { \ 73 =4 PT_YIELD_FLAG = 0; \ 74 =4 LC_SET((pt)->lc); \ 75 =4 if(PT_YIELD_FLAG == 0) { \ 76 =4 return PT_YIELDED; \ 77 =4 } \ 78 =4 } while(0) 79 =4 80 =4 //锁死任务直到符合条件 81 =4 #define PT_YIELD_UNTIL(pt, cond) \ 82 =4 do { \ 83 =4 PT_YIELD_FLAG = 0; \ 84 =4 LC_SET((pt)->lc); \ 85 =4 if((PT_YIELD_FLAG == 0) || !(cond)) { \ 86 =4 return PT_YIELDED; \ 87 =4 } \ 88 =4 } while(0) 89 =4 90 =4 91 =4 #endif /* __PT_H__ */ 4 =3 5 =3 6 =3 struct timer { 7 =3 unsigned long start; //记录启动时的tick值 8 =3 unsigned long interval; //要定时的tick数 9 =3 }; 10 =3 11 =3 void timer_set(struct timer *t, unsigned long interval); 12 =3 unsigned char timer_expired(struct timer *t); 13 =3 void delay_ms(unsigned long t_ms); 14 =3 void Delay10us(void); 15 =3 void delay_us(unsigned int t); 16 =3 #endif 5 =2 #include "pt-sem.h" 1 =3 /* 2 =3 #include "pt-sem.h" 3 =3 4 =3 #define NUM_ITEMS 32 5 =3 #define BUFSIZE 8 6 =3 7 =3 static struct pt_sem mutex, full, empty; 8 =3 9 =3 PT_THREAD(producer(struct pt *pt)) 10 =3 { 11 =3 static int produced; 12 =3 13 =3 PT_BEGIN(pt); 14 =3 15 =3 for(produced = 0; produced < NUM_ITEMS; ++produced) { 16 =3 17 =3 PT_SEM_WAIT(pt, &full); 18 =3 19 =3 PT_SEM_WAIT(pt, &mutex); C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 7 20 =3 add_to_buffer(produce_item()); 21 =3 PT_SEM_SIGNAL(pt, &mutex); 22 =3 23 =3 PT_SEM_SIGNAL(pt, &empty); 24 =3 } 25 =3 26 =3 PT_END(pt); 27 =3 } 28 =3 29 =3 PT_THREAD(consumer(struct pt *pt)) 30 =3 { 31 =3 static int consumed; 32 =3 33 =3 PT_BEGIN(pt); 34 =3 35 =3 for(consumed = 0; consumed < NUM_ITEMS; ++consumed) { 36 =3 37 =3 PT_SEM_WAIT(pt, &empty); 38 =3 39 =3 PT_SEM_WAIT(pt, &mutex); 40 =3 consume_item(get_from_buffer()); 41 =3 PT_SEM_SIGNAL(pt, &mutex); 42 =3 43 =3 PT_SEM_SIGNAL(pt, &full); 44 =3 } 45 =3 46 =3 PT_END(pt); 47 =3 } 48 =3 49 =3 PT_THREAD(driver_thread(struct pt *pt)) 50 =3 { 51 =3 static struct pt pt_producer, pt_consumer; 52 =3 53 =3 PT_BEGIN(pt); 54 =3 55 =3 PT_SEM_INIT(&empty, 0); 56 =3 PT_SEM_INIT(&full, BUFSIZE); 57 =3 PT_SEM_INIT(&mutex, 1); 58 =3 59 =3 PT_INIT(&pt_producer); 60 =3 PT_INIT(&pt_consumer); 61 =3 62 =3 PT_WAIT_THREAD(pt, producer(&pt_producer) & 63 =3 consumer(&pt_consumer)); 64 =3 65 =3 PT_END(pt); 66 =3 } 67 =3 */ 68 =3 69 =3 #ifndef __PT_SEM_H__ 70 =3 #define __PT_SEM_H__ 71 =3 72 =3 #include "pt.h" 1 =4 2 =4 #ifndef __PT_H__ =4 #define __PT_H__ =4 =4 #include "lc.h" =4 =4 struct pt { =4 lc_t lc; =4 }; C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 8 =4 =4 =4 #ifndef UNUSED_PARAM =4 #define UNUSED_PARAM(v) (void)(v) =4 #endif =4 =4 #define PT_WAITING 0 //等待 =4 #define PT_YIELDED 1 //锁死线程 =4 #define PT_EXITED 2 //退出 =4 #define PT_ENDED 3 //结束 =4 =4 =4 #define PT_BIND(pt1) {static idata struct pt pt_hide ;pt1 = &pt_hide;} =4 =4 =4 #define PT_INIT(pt) LC_INIT((pt)->lc) =4 #define PT_THREAD(name_args) int8_t name_args =4 #define PT_BEGIN(pt) { int8_t PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc) =4 #define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \ =4 UNUSED_PARAM(PT_YIELD_FLAG );\ =4 PT_INIT(pt); return PT_ENDED; } =4 =4 =4 //等待条件成立,如果不成立,继续等待 =4 #define PT_WAIT_UNTIL(pt, condition) \ =4 do { \ =4 LC_SET((pt)->lc); \ =4 if(!(condition)) { \ =4 return PT_WAITING; \ =4 } \ =4 } while(0) =4 =4 //一直等待,直到条件不成立 =4 #define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond)) =4 //等待子线程退出 =4 #define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread)) =4 =4 //启动子线程,等待子线程退出,如果不退出,在此阻塞 =4 #define PT_SPAWN(pt, child, thread) \ =4 do { \ =4 PT_INIT((child)); \ =4 PT_WAIT_THREAD((pt), (thread)); \ =4 } while(0) =4 =4 //重新启动线程,从头开始 =4 #define PT_RESTART(pt) \ =4 do { \ =4 PT_INIT(pt); \ =4 return PT_WAITING; \ =4 } while(0) =4 =4 //退出线程 =4 #define PT_EXIT(pt) \ =4 do { \ =4 PT_INIT(pt); \ =4 return PT_EXITED; \ =4 } while(0) =4 //子线程是否退出 =4 #define PT_SCHEDULE(f) ((f) < PT_EXITED) =4 =4 //锁死任务 =4 #define PT_YIELD(pt) \ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 9 =4 do { \ =4 PT_YIELD_FLAG = 0; \ =4 LC_SET((pt)->lc); \ =4 if(PT_YIELD_FLAG == 0) { \ =4 return PT_YIELDED; \ =4 } \ =4 } while(0) =4 =4 //锁死任务直到符合条件 =4 #define PT_YIELD_UNTIL(pt, cond) \ =4 do { \ =4 PT_YIELD_FLAG = 0; \ =4 LC_SET((pt)->lc); \ =4 if((PT_YIELD_FLAG == 0) || !(cond)) { \ =4 return PT_YIELDED; \ =4 } \ =4 } while(0) =4 =4 =4 #endif /* __PT_H__ */ 73 =3 74 =3 struct pt_sem { 75 =3 unsigned int count; 76 =3 }; 77 =3 78 =3 //信号量 79 =3 #define PT_SEM_INIT(s, c) (s)->count = c 80 =3 81 =3 //信号量等待 当信号量大于0 时继续,否则等待 82 =3 #define PT_SEM_WAIT(pt, s) \ 83 =3 do { \ 84 =3 PT_WAIT_UNTIL(pt, (s)->count > 0); \ 85 =3 --(s)->count; \ 86 =3 } while(0) 87 =3 88 =3 //写入信号量 89 =3 #define PT_SEM_SIGNAL(pt, s) ++(s)->count 90 =3 91 =3 #endif /* __PT_SEM_H__ */ 92 =3 93 =3 /** @} */ 94 =3 /** @} */ 95 =3 6 =2 7 =2 #endif 8 =2 7 =1 8 =1 9 =1 void SetBulbInfo(uint8_t *pBulbInfo,uint8_t len1); 10 =1 void InitOrUninit(void* p); 11 =1 void waitForInitOrUnInit(void); 12 =1 13 =1 14 =1 #if TASK_WITH_PT 15 =1 PT_THREAD(TaskBlinLed(struct pt * pt1 )) ; 16 =1 #else =1 PT_THREAD(TaskBlinLed(void)) ; =1 #endif 19 =1 20 =1 #endif 2 #include "BulbId_cfg.h" 3 #include "PWM.h" C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 10 1 =1 #ifndef _PWM_H_ 2 =1 #define _PWM_H_ 3 =1 #include "stdint.h" 1 =2 #ifndef _STD_INT_H_ =2 #define _STD_INT_H_ =2 typedef signed long int32_t; =2 typedef unsigned long uint32_t; =2 typedef signed char int8_t; =2 typedef unsigned char uint8_t; =2 typedef signed int int16_t; =2 typedef unsigned int uint16_t; =2 #endif 4 =1 #include "al_helper.h" 1 =2 /* 2 =2 * al_helper.h 3 =2 * 4 =2 * Created on: 2023-4-20 5 =2 * Author: xukaiming 6 =2 */ 7 =2 8 =2 #ifndef _AL_HELPER_H_ =2 #define _AL_HELPER_H_ =2 =2 #include "stdint.h" =2 =2 #ifdef __cplusplus =2 extern "C" { =2 #endif =2 =2 //#define AL_STATIC static =2 #define AL_STATIC =2 #define AL_INLINE inline =2 =2 #define TASK_WITH_PT 1 =2 #define TASK_WITH_NAME 0 =2 =2 #define XDATA xdata =2 #define IDATA idata =2 #define CONST code =2 //#define CONST xdata =2 =2 =2 #ifndef UNUSED =2 #define UNUSED(x) (void)(x) =2 #endif =2 =2 enum =2 { =2 false = 0, =2 true =!false =2 }; =2 =2 #ifdef __cplusplus =2 } =2 #endif =2 =2 #endif 45 =2 5 =1 6 =1 enum ePWM_INDEX 7 =1 { 8 =1 PWM_R = 0, C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 11 9 =1 PWM_G, 10 =1 PWM_B, 11 =1 PWM_C, 12 =1 PWM_W 13 =1 }; 14 =1 15 =1 void SetPWMInfo(uint16_t *pPwmInfo,uint8_t len1) ; 16 =1 void InitPWM(void); 17 =1 void SetPWMDuty(unsigned char channel,unsigned int duty); 18 =1 void StartBlinkLED(uint8_t cnt); 19 =1 #endif 4 #include "string.h" 1 =1 /*-------------------------------------------------------------------------- 2 =1 STRING.H 3 =1 4 =1 String functions. 5 =1 Copyright (c) 1988-2008 Keil Elektronik GmbH and Keil Software, Inc. 6 =1 Copyright (c) 2008-2016 ARM Germany GmbH 7 =1 All rights reserved. 8 =1 --------------------------------------------------------------------------*/ 9 =1 10 =1 #ifndef __STRING_H__ 11 =1 #define __STRING_H__ 12 =1 13 =1 #ifndef _SIZE_T 14 =1 #define _SIZE_T 15 =1 typedef unsigned int size_t; 16 =1 #endif 17 =1 18 =1 #ifndef NULL 19 =1 #define NULL ((void *)0) 20 =1 #endif 21 =1 22 =1 #pragma SAVE 23 =1 #pragma REGPARMS 24 =1 extern char *strcat (char *s1, const char *s2); 25 =1 extern char *strncat (char *s1, const char *s2, size_t n); 26 =1 27 =1 extern char strcmp (const char *s1, const char *s2); 28 =1 extern char strncmp (const char *s1, const char *s2, size_t n); 29 =1 30 =1 extern char *strcpy (char *s1, const char *s2); 31 =1 extern char *strncpy (char *s1, const char *s2, size_t n); 32 =1 33 =1 extern size_t strlen (const char *); 34 =1 35 =1 extern char *strchr (const char *s, char c); 36 =1 extern int strpos (const char *s, char c); 37 =1 extern char *strrchr (const char *s, char c); 38 =1 extern int strrpos (const char *s, char c); 39 =1 40 =1 extern size_t strspn (const char *s, const char *set); 41 =1 extern size_t strcspn (const char *s, const char *set); 42 =1 extern char *strpbrk (const char *s, const char *set); 43 =1 extern char *strrpbrk(const char *s, const char *set); 44 =1 extern char *strstr (const char *s, const char *sub); 45 =1 extern char *strtok (char *str, const char *set); 46 =1 47 =1 extern char memcmp (const void *s1, const void *s2, size_t n); 48 =1 extern void *memcpy (void *s1, const void *s2, size_t n); 49 =1 extern void *memchr (const void *s, char val, size_t n); 50 =1 extern void *memccpy (void *s1, const void *s2, char val, size_t n); C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 12 51 =1 extern void *memmove (void *s1, const void *s2, size_t n); 52 =1 extern void *memset (void *s, char val, size_t n); 53 =1 #pragma RESTORE 54 =1 55 =1 #endif 5 #include "intrins.h" 1 =1 /*-------------------------------------------------------------------------- 2 =1 INTRINS.H 3 =1 4 =1 Intrinsic functions for C51. 5 =1 Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH 6 =1 All rights reserved. 7 =1 --------------------------------------------------------------------------*/ 8 =1 9 =1 #ifndef __INTRINS_H__ 10 =1 #define __INTRINS_H__ 11 =1 12 =1 #pragma SAVE 13 =1 14 =1 #if defined (__CX2__) =1 #pragma FUNCTIONS(STATIC) =1 /* intrinsic functions are reentrant, but need static attribute */ =1 #endif 18 =1 19 =1 extern void _nop_ (void); 20 =1 extern bit _testbit_ (bit); 21 =1 extern unsigned char _cror_ (unsigned char, unsigned char); 22 =1 extern unsigned int _iror_ (unsigned int, unsigned char); 23 =1 extern unsigned long _lror_ (unsigned long, unsigned char); 24 =1 extern unsigned char _crol_ (unsigned char, unsigned char); 25 =1 extern unsigned int _irol_ (unsigned int, unsigned char); 26 =1 extern unsigned long _lrol_ (unsigned long, unsigned char); 27 =1 extern unsigned char _chkfloat_(float); 28 =1 #if defined (__CX2__) =1 extern int abs (int); =1 extern void _illop_ (void); =1 #endif 32 =1 #if !defined (__CX2__) 33 =1 extern void _push_ (unsigned char _sfr); 34 =1 extern void _pop_ (unsigned char _sfr); 35 =1 #endif 36 =1 37 =1 #pragma RESTORE 38 =1 39 =1 #endif 40 =1 6 #include "math.h" 1 =1 /*-------------------------------------------------------------------------- 2 =1 MATH.H 3 =1 4 =1 Prototypes for mathematic functions. 5 =1 Copyright (c) 1988-2008 Keil Elektronik GmbH and Keil Software, Inc. 6 =1 Copyright (c) 2008-2016 ARM Germany GmbH 7 =1 All rights reserved. 8 =1 --------------------------------------------------------------------------*/ 9 =1 10 =1 #ifndef __MATH_H__ 11 =1 #define __MATH_H__ 12 =1 13 =1 #if defined __CX2__ && (__CX2__ >= 558 || __CX2__ == 556 && __CX2_MINOR__ >= 207) =1 #ifndef HUGE_VAL =1 #define HUGE_VAL __inf__ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 13 =1 #endif // HUGE_VAL =1 =1 #ifndef NAN =1 #define NAN __nan__ =1 #endif // NAN =1 =1 #pragma SAVE =1 #pragma FUNCTIONS(STATIC) =1 /* intrinsic functions are reentrant, but need static attribute */ =1 extern int abs (int val); =1 #pragma RESTORE =1 #endif 28 =1 29 =1 #pragma SAVE 30 =1 #pragma REGPARMS 31 =1 #if !defined (__CX2__) 32 =1 extern char cabs (char val); 33 =1 extern int abs (int val); 34 =1 extern long labs (long val); 35 =1 #endif 36 =1 37 =1 extern float fabs (float val); 38 =1 extern float sqrt (float val); 39 =1 extern float exp (float val); 40 =1 extern float log (float val); 41 =1 extern float log10 (float val); 42 =1 extern float sin (float val); 43 =1 extern float cos (float val); 44 =1 extern float tan (float val); 45 =1 extern float asin (float val); 46 =1 extern float acos (float val); 47 =1 extern float atan (float val); 48 =1 extern float sinh (float val); 49 =1 extern float cosh (float val); 50 =1 extern float tanh (float val); 51 =1 extern float atan2 (float y, float x); 52 =1 53 =1 extern float ceil (float val); 54 =1 extern float floor (float val); 55 =1 extern float modf (float val, float *n); 56 =1 extern float fmod (float x, float y); 57 =1 extern float pow (float x, float y); 58 =1 59 =1 #if defined (__CX2__) =1 extern float frexp (float val, int *exp); =1 extern float ldexp (float val, int exp); =1 #endif 63 =1 64 =1 #pragma RESTORE 65 =1 66 =1 #endif 7 8 #include "task.h" 1 =1 #ifndef _TASK_H_ 2 =1 #define _TASK_H_ 3 =1 4 =1 #include "cfg/task_header.h" 1 =2 #ifndef _TASK_HEADER_H 2 =2 #define _TASK_HEADER_H 3 =2 4 =2 #include "task_hal.h" 1 =3 #ifndef _TASK_HAL_H_ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 14 2 =3 #define _TASK_HAL_H_ 3 =3 4 =3 5 =3 #include "stdint.h" 1 =4 #ifndef _STD_INT_H_ =4 #define _STD_INT_H_ =4 typedef signed long int32_t; =4 typedef unsigned long uint32_t; =4 typedef signed char int8_t; =4 typedef unsigned char uint8_t; =4 typedef signed int int16_t; =4 typedef unsigned int uint16_t; =4 #endif 6 =3 #include "intrins.h" 1 =4 /*-------------------------------------------------------------------------- 2 =4 INTRINS.H 3 =4 4 =4 Intrinsic functions for C51. 5 =4 Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH 6 =4 All rights reserved. 7 =4 --------------------------------------------------------------------------*/ 8 =4 9 =4 #ifndef __INTRINS_H__ =4 #define __INTRINS_H__ =4 =4 #pragma SAVE =4 =4 #if defined (__CX2__) =4 #pragma FUNCTIONS(STATIC) =4 /* intrinsic functions are reentrant, but need static attribute */ =4 #endif =4 =4 extern void _nop_ (void); =4 extern bit _testbit_ (bit); =4 extern unsigned char _cror_ (unsigned char, unsigned char); =4 extern unsigned int _iror_ (unsigned int, unsigned char); =4 extern unsigned long _lror_ (unsigned long, unsigned char); =4 extern unsigned char _crol_ (unsigned char, unsigned char); =4 extern unsigned int _irol_ (unsigned int, unsigned char); =4 extern unsigned long _lrol_ (unsigned long, unsigned char); =4 extern unsigned char _chkfloat_(float); =4 #if defined (__CX2__) =4 extern int abs (int); =4 extern void _illop_ (void); =4 #endif =4 #if !defined (__CX2__) =4 extern void _push_ (unsigned char _sfr); =4 extern void _pop_ (unsigned char _sfr); =4 #endif =4 =4 #pragma RESTORE =4 =4 #endif 40 =4 7 =3 #include "task_hal_cfg.h" 1 =4 #ifndef _TASK_HAL_CFG_H_ 2 =4 #define _TASK_HAL_CFG_H_ 3 =4 4 =4 5 =4 #include 1 =5 #ifndef _SC92F8003_H 2 =5 #define _SC92F8003_H C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 15 3 =5 4 =5 #include "SC92F8003_C.h" 1 =6 /*-------------------------------------------------------------------------- 2 =6 SC92F8003_C.H 3 =6 4 =6 C Header file for SC92F8003 microcontroller. 5 =6 Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. 6 =6 All rights reserved. 7 =6 深圳市赛元微电子有限公司 8 =6 版本号: V1.0 9 =6 日期: 2018.05.02 10 =6 --------------------------------------------------------------------------*/ 11 =6 #ifndef _SC92F8003_H_ 12 =6 #define _SC92F8003_H_ 13 =6 14 =6 /* ------------------- 字节寄存器-------------------- */ 15 =6 ///*CPU*/ 16 =6 sfr ACC = 0xE0; //累加器A 17 =6 sfr B = 0xF0; //通用寄存器B 18 =6 sfr PSW = 0xD0; //程序状态字 19 =6 sfr DPH = 0x83; //数据指针高8位 20 =6 sfr DPL = 0x82; //数据指针低8位 21 =6 sfr SP = 0x81; //堆栈指针 22 =6 23 =6 24 =6 /*system*/ 25 =6 sfr PCON = 0x87; //电源管理控制寄存器 26 =6 27 =6 /*interrupt*/ 28 =6 sfr IP1 = 0XB9; //中断优先级控制寄存器1 29 =6 sfr IP = 0xB8; //中断优先权控制寄存器 30 =6 sfr IE = 0xA8; //中断控制寄存器 31 =6 sfr IE1 = 0XA9; //中断控制寄存器1 32 =6 33 =6 /*PORT*/ 34 =6 sfr P2PH = 0xA2; //P2口模式控制寄存器 35 =6 sfr P2CON = 0xA1; //P2口模式控制寄存器 36 =6 sfr P2 = 0xA0; //P2口数据寄存器 37 =6 sfr P1PH = 0x92; //P1口模式控制寄存器 38 =6 sfr P1CON = 0x91; //P1口模式控制寄存器 39 =6 sfr P1 = 0x90; //P1口数据寄存器 40 =6 sfr P0PH = 0x9B; //P0口模式控制寄存器 41 =6 sfr P0CON = 0x9A; //P0口模式控制寄存器 42 =6 sfr P0 = 0x80; //P0口数据寄存器 43 =6 44 =6 /*TIMER*/ 45 =6 sfr TMCON = 0x8E; //定时器频率控制寄存器 46 =6 sfr TH1 = 0x8D; //定时器1高8位 47 =6 sfr TH0 = 0x8C; //定时器0高8位 48 =6 sfr TL1 = 0x8B; //定时器1低8位 49 =6 sfr TL0 = 0x8A; //定时器0低8位 50 =6 sfr TMOD = 0x89; //定时器工作模式寄存器 51 =6 sfr TCON = 0x88; //定时器控制寄存器 52 =6 sfr T2CON = 0xC8; //定时器2控制寄存器 53 =6 sfr T2MOD = 0xC9; //定时器2工作模式寄存器 54 =6 sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 55 =6 sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 56 =6 sfr TL2 = 0xCC; //定时器2低8位 57 =6 sfr TH2 = 0xCD; //定时器2高8位 58 =6 59 =6 60 =6 /*ADC*/ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 16 61 =6 sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 62 =6 sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 63 =6 sfr ADCCON = 0XAD; //ADC控制寄存器 64 =6 sfr ADCVL = 0xAE; //ADC 结果寄存器 65 =6 sfr ADCVH = 0xAF; //ADC 结果寄存器 66 =6 67 =6 /*PWM*/ 68 =6 sfr PWMCFG = 0xD1; //PWM设置寄存器 69 =6 sfr PWMCON0 = 0xD2; //PWM控制寄存器 70 =6 sfr PWMPRD = 0xD3; //PWM周期设置寄存器 71 =6 sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A 72 =6 sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 73 =6 sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 74 =6 sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 75 =6 sfr PWMCON1 = 0xDA; //PWM控制寄存器 76 =6 sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B 77 =6 sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 78 =6 sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 79 =6 sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 80 =6 sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 81 =6 82 =6 83 =6 // 84 =6 ///*WatchDog*/ 85 =6 sfr BTMCON = 0XCE; //低频定时器控制寄存器 86 =6 sfr WDTCON = 0xCF; //WDT控制寄存器 87 =6 88 =6 89 =6 sfr OTCON = 0X8F; //输出控制寄存器 90 =6 91 =6 /*INT*/ 92 =6 sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 93 =6 sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 94 =6 sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 95 =6 sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 96 =6 sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 97 =6 sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 98 =6 99 =6 /*IAP */ 100 =6 sfr IAPCTL = 0xF6; //IAP控制寄存器 101 =6 sfr IAPDAT = 0xF5; //IAP数据寄存器 102 =6 sfr IAPADE = 0xF4; //IAP扩展地址寄存器 103 =6 sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 104 =6 sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 105 =6 sfr IAPKEY = 0xF1; //IAP保护寄存器 106 =6 107 =6 /*uart0*/ 108 =6 sfr SCON = 0X98; //uart控制寄存器 109 =6 sfr SBUF = 0X99; //uart0数据寄存器 110 =6 111 =6 /*三合一*/ 112 =6 sfr SSCON0 = 0X9D; //SSI控制寄存器0 113 =6 sfr SSCON1 = 0X9E; //SSI控制寄存器1 114 =6 sfr SSCON2 = 0X95; //SSI控制寄存器2 115 =6 sfr SSDAT = 0X9F; //SSI数据寄存器 116 =6 117 =6 sfr OPINX = 0XFE; 118 =6 sfr OPREG = 0XFF; 119 =6 120 =6 /*Check Sum*/ 121 =6 sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 122 =6 sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 17 123 =6 124 =6 sfr OPERCON = 0xEF; //运算控制寄存器 125 =6 126 =6 ///* ------------------- 位寄存器-------------------- */ 127 =6 /*PSW*/ 128 =6 sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借 -时 1:加法运算最高位有进位,或者减法运算最高位有借位时 129 =6 sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位 -,或减法运算在bit3位有借位时 130 =6 sbit F0 = PSW^5; //用户标志位 131 =6 sbit RS1 = PSW^4; //工作寄存器组选择位 132 =6 sbit RS0 = PSW^3; //工作寄存器组选择位 133 =6 sbit OV = PSW^2; //溢出标志位 134 =6 sbit F1 = PSW^1; //F1标志 135 =6 sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数 -奇数 136 =6 137 =6 /*T2CON*/ 138 =6 sbit TF2 = T2CON^7; 139 =6 sbit EXF2 = T2CON^6; 140 =6 sbit RCLK = T2CON^5; 141 =6 sbit TCLK = T2CON^4; 142 =6 sbit EXEN2 = T2CON^3; 143 =6 sbit TR2 = T2CON^2; 144 =6 sbit T2 = T2CON^1; 145 =6 sbit CP = T2CON^0; 146 =6 147 =6 148 =6 /*IP*/ 149 =6 sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 AD -C的中断优先权是 “高” 150 =6 sbit IPT2 = IP^5; //PWM中断优先控制位 0:设定 PWM的中断优先权是 “低” 1:设定 PW -M 的中断优先权是 “高” 151 =6 sbit IPUART = IP^4; //SIF中断优先控制位 0:设定 SIF的中断优先权是 “低” 1:设定 SI -F的中断优先权是 “高” 152 =6 sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设 - Timer 1的中断优先权是 “高” 153 =6 sbit IPINT1 = IP^2; //32K Base Timer中断优先控制位 0:设定 32K的中断优先权是 “低” - 1:设定 32K的中断优先权是 “高” 154 =6 sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设 - Timer 0的中断优先权是 “高” 155 =6 sbit IPINT0 = IP^0; 156 =6 157 =6 /*IE*/ 158 =6 sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 159 =6 sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 160 =6 sbit ET2 = IE^5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 161 =6 sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 162 =6 sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 163 =6 sbit EINT1 = IE^2; //32K Base Timer中断使能控制 0:关闭32K中断 1:打开32K中断 164 =6 sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 165 =6 sbit EINT0 = IE^0; //TouchKey的中断使能控制 0:关闭TouchKey中断 1:打开TouchKey中断 166 =6 167 =6 /*TCON*/ 168 =6 sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1 -为“1”,申请中断,CPU响应时,硬件清“0”。 169 =6 sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 170 =6 sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0 -为“1”,申请中断,CPU响应时,硬件清“0”。 171 =6 sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 172 =6 173 =6 /*SCON*/ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 18 174 =6 sbit SM0 = SCON^7; 175 =6 sbit SM1 = SCON^6; 176 =6 sbit SM2 = SCON^5; 177 =6 sbit REN = SCON^4; 178 =6 sbit TB8 = SCON^3; 179 =6 sbit RB8 = SCON^2; 180 =6 sbit TI = SCON^1; 181 =6 sbit RI = SCON^0; 182 =6 183 =6 /* P0 */ 184 =6 sbit P01 = P0^1; 185 =6 sbit P00 = P0^0; 186 =6 187 =6 /* P1 */ 188 =6 sbit P17 = P1^7; 189 =6 sbit P16 = P1^6; 190 =6 sbit P15 = P1^5; 191 =6 sbit P14 = P1^4; 192 =6 sbit P13 = P1^3; 193 =6 sbit P12 = P1^2; 194 =6 sbit P11 = P1^1; 195 =6 sbit P10 = P1^0; 196 =6 197 =6 /* P2 */ 198 =6 sbit P27 = P2^7; 199 =6 sbit P26 = P2^6; 200 =6 sbit P25 = P2^5; 201 =6 sbit P24 = P2^4; 202 =6 sbit P23 = P2^3; 203 =6 sbit P22 = P2^2; 204 =6 sbit P21 = P2^1; 205 =6 sbit P20 = P2^0; 206 =6 207 =6 #endif 5 =5 #include "stdint.h" 1 =6 #ifndef _STD_INT_H_ =6 #define _STD_INT_H_ =6 typedef signed long int32_t; =6 typedef unsigned long uint32_t; =6 typedef signed char int8_t; =6 typedef unsigned char uint8_t; =6 typedef signed int int16_t; =6 typedef unsigned int uint16_t; =6 #endif 6 =5 7 =5 #define enableInterrupts() EA=1 /** 开启总中断 **/ 8 =5 #define disableInterrupts() EA=0 /** 关闭总中断 **/ 9 =5 10 =5 #define __I volatile const /*!< defines 'read only' permissions */ 11 =5 #define __O volatile /*!< defines 'write only' permissions */ 12 =5 #define __IO volatile /*!< defines 'read / write' permissions */ 13 =5 /* 14 =5 //!< Signed integer types 15 =5 typedef signed char int8_t; 16 =5 typedef signed short int16_t; 17 =5 typedef signed long int32_t; 18 =5 19 =5 //!< Unsigned integer types 20 =5 typedef unsigned char uint8_t; 21 =5 typedef unsigned short uint16_t; 22 =5 typedef unsigned long uint32_t; 23 =5 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 19 24 =5 typedef int32_t s32; 25 =5 typedef int16_t s16; 26 =5 typedef int8_t s8; 27 =5 28 =5 typedef uint32_t u32; 29 =5 typedef uint16_t u16; 30 =5 typedef uint8_t u8; 31 =5 */ 32 =5 33 =5 34 =5 typedef enum {FALSE = 0, TRUE = !FALSE} bool; 35 =5 36 =5 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus, BitStatus; 37 =5 38 =5 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; 39 =5 40 =5 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; 41 =5 42 =5 typedef enum {LOW = 0, HIGH = !LOW} PriorityStatus; 43 =5 44 =5 #endif 6 =4 7 =4 #define INT_EXT0 0 8 =4 #define INT_T0 1 9 =4 #define INT_EXT1 2 10 =4 #define INT_T1 3 11 =4 #define INT_UART0 4 12 =4 #define INT_T2 5 13 =4 #define INT_ADC 6 14 =4 #define INT_SSI 7 15 =4 #define INT_PWM 8 16 =4 #define INT_BTM 9 17 =4 #define INT_EXT2 10 18 =4 19 =4 20 =4 21 =4 #define GPIOR GPIO1 22 =4 #define GPIOG GPIO2 23 =4 #define GPIOB GPIO2 24 =4 #define GPIOC GPIO2 25 =4 #define GPIOW GPIO2 26 =4 27 =4 #define LEDR GPIO_PIN_0 28 =4 #define LEDG GPIO_PIN_7 29 =4 #define LEDB GPIO_PIN_6 30 =4 #define LEDC GPIO_PIN_5 31 =4 #define LEDW GPIO_PIN_4 32 =4 33 =4 34 =4 35 =4 #define FOSC 12000000UL 36 =4 #define TICKPER1S 1000UL 37 =4 38 =4 39 =4 40 =4 #endif 8 =3 #include "al_helper.h" 1 =4 /* 2 =4 * al_helper.h 3 =4 * 4 =4 * Created on: 2023-4-20 5 =4 * Author: xukaiming C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 20 6 =4 */ 7 =4 8 =4 #ifndef _AL_HELPER_H_ =4 #define _AL_HELPER_H_ =4 =4 #include "stdint.h" =4 =4 #ifdef __cplusplus =4 extern "C" { =4 #endif =4 =4 //#define AL_STATIC static =4 #define AL_STATIC =4 #define AL_INLINE inline =4 =4 #define TASK_WITH_PT 1 =4 #define TASK_WITH_NAME 0 =4 =4 #define XDATA xdata =4 #define IDATA idata =4 #define CONST code =4 //#define CONST xdata =4 =4 =4 #ifndef UNUSED =4 #define UNUSED(x) (void)(x) =4 #endif =4 =4 enum =4 { =4 false = 0, =4 true =!false =4 }; =4 =4 #ifdef __cplusplus =4 } =4 #endif =4 =4 #endif 45 =4 9 =3 #include "pt_header.h" 1 =4 #ifndef _PT_HEADER_H_ =4 #define _PT_HEADER_H_ =4 =4 #include "pt_timer.h" =4 #include "pt-sem.h" =4 =4 #endif 8 =4 10 =3 11 =3 #include "LT89xx_rf.h" 1 =4 #ifndef _LT89XX_RF_H_ 2 =4 #define _LT89XX_RF_H_ 3 =4 #include "stdint.h" 1 =5 #ifndef _STD_INT_H_ =5 #define _STD_INT_H_ =5 typedef signed long int32_t; =5 typedef unsigned long uint32_t; =5 typedef signed char int8_t; =5 typedef unsigned char uint8_t; =5 typedef signed int int16_t; =5 typedef unsigned int uint16_t; C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 21 =5 #endif 4 =4 5 =4 #define SIMULATOR 0 6 =4 void InitLT89xxRF(void); 7 =4 uint8_t DecodePackage(uint8_t *pBuf,uint8_t len1); 8 =4 void TaskLT89xx_thread_entry(void *param ); 9 =4 10 =4 #endif 12 =3 #include "key.h" 1 =4 #ifndef _KEY_H_ 2 =4 #define _KEY_H_ 3 =4 #include "pt.h" 1 =5 2 =5 #ifndef __PT_H__ =5 #define __PT_H__ =5 =5 #include "lc.h" =5 =5 struct pt { =5 lc_t lc; =5 }; =5 =5 =5 #ifndef UNUSED_PARAM =5 #define UNUSED_PARAM(v) (void)(v) =5 #endif =5 =5 #define PT_WAITING 0 //等待 =5 #define PT_YIELDED 1 //锁死线程 =5 #define PT_EXITED 2 //退出 =5 #define PT_ENDED 3 //结束 =5 =5 =5 #define PT_BIND(pt1) {static idata struct pt pt_hide ;pt1 = &pt_hide;} =5 =5 =5 #define PT_INIT(pt) LC_INIT((pt)->lc) =5 #define PT_THREAD(name_args) int8_t name_args =5 #define PT_BEGIN(pt) { int8_t PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc) =5 #define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \ =5 UNUSED_PARAM(PT_YIELD_FLAG );\ =5 PT_INIT(pt); return PT_ENDED; } =5 =5 =5 //等待条件成立,如果不成立,继续等待 =5 #define PT_WAIT_UNTIL(pt, condition) \ =5 do { \ =5 LC_SET((pt)->lc); \ =5 if(!(condition)) { \ =5 return PT_WAITING; \ =5 } \ =5 } while(0) =5 =5 //一直等待,直到条件不成立 =5 #define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond)) =5 //等待子线程退出 =5 #define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread)) =5 =5 //启动子线程,等待子线程退出,如果不退出,在此阻塞 =5 #define PT_SPAWN(pt, child, thread) \ =5 do { \ =5 PT_INIT((child)); \ C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 22 =5 PT_WAIT_THREAD((pt), (thread)); \ =5 } while(0) =5 =5 //重新启动线程,从头开始 =5 #define PT_RESTART(pt) \ =5 do { \ =5 PT_INIT(pt); \ =5 return PT_WAITING; \ =5 } while(0) =5 =5 //退出线程 =5 #define PT_EXIT(pt) \ =5 do { \ =5 PT_INIT(pt); \ =5 return PT_EXITED; \ =5 } while(0) =5 //子线程是否退出 =5 #define PT_SCHEDULE(f) ((f) < PT_EXITED) =5 =5 //锁死任务 =5 #define PT_YIELD(pt) \ =5 do { \ =5 PT_YIELD_FLAG = 0; \ =5 LC_SET((pt)->lc); \ =5 if(PT_YIELD_FLAG == 0) { \ =5 return PT_YIELDED; \ =5 } \ =5 } while(0) =5 =5 //锁死任务直到符合条件 =5 #define PT_YIELD_UNTIL(pt, cond) \ =5 do { \ =5 PT_YIELD_FLAG = 0; \ =5 LC_SET((pt)->lc); \ =5 if((PT_YIELD_FLAG == 0) || !(cond)) { \ =5 return PT_YIELDED; \ =5 } \ =5 } while(0) =5 =5 =5 #endif /* __PT_H__ */ 4 =4 #include "al_helper.h" 1 =5 /* 2 =5 * al_helper.h 3 =5 * 4 =5 * Created on: 2023-4-20 5 =5 * Author: xukaiming 6 =5 */ 7 =5 8 =5 #ifndef _AL_HELPER_H_ =5 #define _AL_HELPER_H_ =5 =5 #include "stdint.h" =5 =5 #ifdef __cplusplus =5 extern "C" { =5 #endif =5 =5 //#define AL_STATIC static =5 #define AL_STATIC =5 #define AL_INLINE inline =5 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 23 =5 #define TASK_WITH_PT 1 =5 #define TASK_WITH_NAME 0 =5 =5 #define XDATA xdata =5 #define IDATA idata =5 #define CONST code =5 //#define CONST xdata =5 =5 =5 #ifndef UNUSED =5 #define UNUSED(x) (void)(x) =5 #endif =5 =5 enum =5 { =5 false = 0, =5 true =!false =5 }; =5 =5 #ifdef __cplusplus =5 } =5 #endif =5 =5 #endif 45 =5 5 =4 void InitKey(void); 6 =4 7 =4 #if TASK_WITH_PT 8 =4 PT_THREAD(TaskScanKey(struct pt *pt1 )) ; 9 =4 #else =4 PT_THREAD(TaskScanKey(void)) ; =4 #endif 12 =4 extern XDATA unsigned char gcKey; 13 =4 unsigned char GetKey(void) ; 14 =4 #endif 13 =3 #include "BulbId.h" 1 =4 #ifndef _BULBLD_H_ =4 #define _BULBLD_H_ =4 =4 #include "BulbId_def.h" =4 #include "al_helper.h" =4 #include "pt_header.h" =4 =4 =4 void SetBulbInfo(uint8_t *pBulbInfo,uint8_t len1); =4 void InitOrUninit(void* p); =4 void waitForInitOrUnInit(void); =4 =4 =4 #if TASK_WITH_PT =4 PT_THREAD(TaskBlinLed(struct pt * pt1 )) ; =4 #else =4 PT_THREAD(TaskBlinLed(void)) ; =4 #endif =4 =4 #endif 14 =3 15 =3 typedef void (* func )(void); 16 =3 17 =3 void Idle(void); 18 =3 void Init(void); 19 =3 void InitWdt(void); C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 24 20 =3 void InitPort(void); 21 =3 22 =3 23 =3 void SysTick_Handler(void); 24 =3 void Task_SysTick_Handler(void); 25 =3 26 =3 27 =3 #if TASK_WITH_PT 28 =3 PT_THREAD(TaskWDT(struct pt * pt1 )) ; 29 =3 #else =3 PT_THREAD(TaskWDT(void )) ; =3 #endif 32 =3 int InitTaskStack(void); 33 =3 int InitTimerStack(void); 34 =3 #endif 5 =2 #endif 6 =2 5 =1 #include "task_def.h" 1 =2 #ifndef _TASK_DEF_H_ 2 =2 #define _TASK_DEF_H_ 3 =2 4 =2 5 =2 #define TASK_ID(FUNC) TASK_ID_##FUNC 6 =2 7 =2 #if(TASK_WITH_NAME) =2 #define TASK_NAME(FUNC) #FUNC =2 #else 10 =2 #define TASK_NAME(FUNC) 0 11 =2 #endif 12 =2 13 =2 14 =2 #ifndef UNUSED_PARAM =2 #define UNUSED_PARAM(p) (void)(p) =2 #endif 17 =2 18 =2 19 =2 #ifndef NULL =2 #define NULL (void*)0 =2 #endif 22 =2 23 =2 24 =2 #ifndef UNUSED =2 #define UNUSED(x) (void)(x) =2 #endif 27 =2 28 =2 #endif 6 =1 7 =1 #ifdef __cplusplus =1 extern "C" { =1 #endif 10 =1 11 =1 12 =1 13 =1 enum TASK_ID { 14 =1 TASK_ID(TaskTimer), 15 =1 #include "cfg/taskid.h" 1 =2 TASK_ID(TaskBlinLed), 2 =2 TASK_ID(TaskWDT), 3 =2 TASK_ID(TaskScanKey), 4 =2 5 =2 16 =1 }; C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 25 17 =1 18 =1 19 =1 20 =1 enum TASK_MODE 21 =1 { 22 =1 TASK_MODE_ONCE, 23 =1 TASK_MODE_PERIOD 24 =1 }; 25 =1 26 =1 enum TIMER_MODE 27 =1 { 28 =1 TIMER_MODE_TIMER = 0, 29 =1 TIMER_MODE_ONCEROUTINE, 30 =1 TIMER_MODE_CYCROUTINE 31 =1 }; 32 =1 33 =1 void InitT0(void); 34 =1 void InitTask(void); 35 =1 void TaskProc(void) ; 36 =1 37 =1 38 =1 int8_t ActiveTask(int8_t cTaskID, int32_t lPeriod); 39 =1 int8_t SuspendTask(int8_t cTaskID); 40 =1 41 =1 void ActiveTaskNow(int8_t cTaskID, int32_t lPeriod); 42 =1 int8_t SetTaskLastTime(int8_t cTaskID,int32_t lLastTime); 43 =1 44 =1 45 =1 int8_t StartTimer2(int8_t *TimerID,int8_t cMode,uint32_t lPeriod,void (* routine)(void * Param1),void * - Param1); 46 =1 int8_t StartTimer( int8_t cMode,int32_t lPeriod,void (* routine)(void * Param1),void * - Param1); 47 =1 int8_t StopTimer ( int8_t * pcTimerNumber ); 48 =1 void StopAllTimer(void); 49 =1 50 =1 uint32_t get_system_ms(void); 51 =1 void ResetTimer(void); 52 =1 //////////////// 53 =1 54 =1 55 =1 56 =1 // function prototype 57 =1 #if TASK_WITH_PT 58 =1 PT_THREAD(TaskTimer(struct pt *pt1 )); 59 =1 #else =1 PT_THREAD(TaskTimer(void)); =1 #endif 62 =1 63 =1 #ifdef __cplusplus =1 } =1 #endif 66 =1 #endif 67 =1 9 10 #define BULB_INFO_CNT 2 11 #define BULB_INFO_SIZE 9 12 XDATA uint8_t BulbInfo[BULB_INFO_CNT][BULB_INFO_SIZE]; 13 XDATA struct BulbId bulbId; 14 15 16 // MiLight CCT bulbs range from 2700K-6500K, or ~370.3-153.8 mireds. 17 #define COLOR_TEMP_MAX_MIREDS 370 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 26 18 #define COLOR_TEMP_MIN_MIREDS 153 19 static uint8_t rescale(uint16_t value, uint16_t newMax, float oldMax) 20 { 21 1 float r = ((value * (newMax / oldMax))+0.5f); 22 1 return (uint8_t)r; 23 1 } 24 25 static uint16_t whiteValToMireds(uint8_t value, uint8_t maxValue) 26 { 27 1 uint16_t scaled = rescale (value, (COLOR_TEMP_MAX_MIREDS - COLOR_TEMP_MIN_MIREDS), maxValue); 28 1 return COLOR_TEMP_MIN_MIREDS + scaled; 29 1 } 30 31 uint8_t constrain(uint8_t in,uint8_t min,uint8_t max) 32 { 33 1 uint8_t r = 0; 34 1 if(in max) 37 1 r = max; 38 1 return r; 39 1 } 40 41 42 43 uint16_t hiteValToMireds(uint8_t value, uint8_t maxValue) 44 { 45 1 uint16_t scaled = rescale(value, (COLOR_TEMP_MAX_MIREDS - COLOR_TEMP_MIN_MIREDS), maxValue); 46 1 return COLOR_TEMP_MIN_MIREDS + scaled; 47 1 } 48 49 50 static void decodeCmd(uint8_t *pBulbInfo,uint8_t len1) 51 { 52 1 uint8_t *packetCopy = pBulbInfo; 53 1 uint8_t command = (packetCopy[V2_COMMAND_INDEX] & 0x7F); 54 1 uint8_t arg = packetCopy[V2_ARGUMENT_INDEX]; 55 1 56 1 uint16_t deviceId = (packetCopy[V2_ID_HI_INDEX ] << 8) | packetCopy[V2_ID_LOW_INDEX ]; 57 1 uint8_t groupId = packetCopy[V2_GRP_INDEX ]; 58 1 59 1 60 1 if(!bulbId.bInit) 61 1 { 62 2 bulbId.deviceId = deviceId; 63 2 bulbId.groupId = groupId; 64 2 bulbId.deviceType = REMOTE_TYPE_FUT089; 65 2 66 2 } 67 1 68 1 69 1 if(bulbId.deviceId==deviceId) 70 1 { 71 2 switch(command) 72 2 { 73 3 case FUT089_ON: 74 3 if ((packetCopy[V2_COMMAND_INDEX] & 0x80) == 0x80) 75 3 { 76 4 bulbId.result.COMMAND = NIGHT_MODE; 77 4 } 78 3 else if (arg == FUT089_MODE_SPEED_DOWN) 79 3 { C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 27 80 4 bulbId.result.COMMAND = MODE_SPEED_DOWN; 81 4 } 82 3 else if (arg == FUT089_MODE_SPEED_UP) 83 3 { 84 4 bulbId.result.COMMAND = MODE_SPEED_UP; 85 4 } 86 3 else if (arg == FUT089_WHITE_MODE) 87 3 { 88 4 bulbId.result.COMMAND = SET_WHITE; 89 4 } 90 3 else if (arg <9) 91 3 { // Group is not reliably encoded in group byte. Extract from arg byte 92 4 bulbId.result.STATE = ON ; 93 4 bulbId.groupId = arg; 94 4 } 95 3 else if (arg > 10 && arg < 18) 96 3 { 97 4 bulbId.result.STATE = OFF ; 98 4 bulbId.groupId = arg-9; 99 4 } 100 3 break; 101 3 case FUT089_COLOR: 102 3 { 103 4 uint8_t rescaledColor = (arg - FUT089_COLOR_OFFSET) % 0x100; 104 4 uint16_t hue = rescale(rescaledColor, 360, 255.0); 105 4 bulbId.result.HUE = hue; 106 4 } 107 3 break; 108 3 case FUT089_BRIGHTNESS: 109 3 { 110 4 uint8_t level = constrain(arg, 0, 100); 111 4 bulbId.result.BRIGHTNESS = rescale (level, 255, 100); 112 4 } 113 3 break; 114 3 case FUT089_SATURATION: //饱和度 115 3 { 116 4 /* 117 4 //const GroupState* state = stateStore->get(bulbId); 118 4 //if (state != NULL && state->getBulbMode() == BULB_MODE_COLOR) 119 4 { 120 4 bulbId.result.SATURATION = 100 - constrain(arg, 0, 100); 121 4 } 122 4 //else 123 4 { 124 4 bulbId.result.COLOR_TEMP = whiteValToMireds(100 - arg, 100); 125 4 } 126 4 */ 127 4 } 128 3 break; 129 3 case FUT089_MODE: 130 3 bulbId.result.MODE = arg; 131 3 break; 132 3 default: 133 3 break; 134 3 } 135 2 bulbId.result.button_id = command; 136 2 bulbId.result.argument = arg; 137 2 _nop_(); 138 2 } 139 1 140 1 UNUSED(len1); *** WARNING C275 IN LINE 140 OF Src\BulbId.c: expression with possibly no effect C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 28 141 1 } 142 143 void SetLEDState(uint8_t state) 144 { 145 1 CONST uint16_t pPwmInfo_Low[5] = {0,0,0,0,0}; 146 1 CONST uint16_t pPwmInfo_Hi[5] = {0xFF,0xFF,0xFF,0xFF,0xFF}; 147 1 SetPWMInfo( state?pPwmInfo_Hi:pPwmInfo_Low,sizeof(pPwmInfo_Low)/sizeof(uint16_t)); 148 1 149 1 } 150 151 XDATA uint8_t BlinkLEDCnt = 0; 152 153 154 #if TASK_WITH_PT 155 PT_THREAD(TaskBlinLed(struct pt *pt1 )) 156 #else PT_THREAD(TaskBlinLed(void)) #endif 159 { 160 1 161 1 static XDATA struct timer input_timer; 162 1 //一定要绑定,不然是个野指针 163 1 #if(!TASK_WITH_PT) struct pt *pt1 ; PT_BIND(pt1); #endif 167 1 168 1 _nop_(); 169 1 PT_BEGIN(pt1); 170 3 PT_INIT(pt1); 171 3 while(1) 172 3 { 173 4 timer_set(&input_timer,100); 174 4 //LED = 1; 175 4 SetLEDState(1); 176 4 PT_WAIT_UNTIL(pt1, timer_expired(&input_timer)); 177 4 _nop_(); 178 4 179 4 timer_set(&input_timer,900); 180 4 //LED = 0; 181 4 SetLEDState(0); 182 4 PT_WAIT_UNTIL(pt1, timer_expired(&input_timer)); 183 4 _nop_(); 184 4 BlinkLEDCnt--; 185 4 if(BlinkLEDCnt==0) 186 4 { 187 5 SuspendTask(TASK_ID(TaskBlinLed)); 188 5 PT_EXIT(pt1); 189 5 } 190 4 } 191 3 PT_END(pt1); *** WARNING C275 IN LINE 191 OF Src\BulbId.c: expression with possibly no effect 192 1 } 193 194 void StartBlinkLED(uint8_t cnt) 195 { 196 1 BlinkLEDCnt = cnt; 197 1 ActiveTask(TASK_ID(TaskBlinLed),10); 198 1 } 199 200 201 //链接代码:关灯后等待10秒再打开,然后在灯亮时3秒内短按“I”按钮3次,灯光 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 29 -缓慢闪烁3次表示链接成功。(实际为10s) 202 //解绑代码:类似链接操作,但需在灯亮时3秒内短按“I”按钮5次,灯光快速闪 -10次表示解绑成功。(实际为10s) 203 int8_t InitTimer = -1; 204 void InitOrUninit(void* p) 205 { 206 1 if(InitTimer>=0) 207 1 { 208 2 if(bulbId.bInit) 209 2 { 210 3 if(bulbId.repeatCnt>=5) 211 3 { 212 4 bulbId.bInit = 0; 213 4 //解绑 214 4 StartBlinkLED(10); 215 4 bulbId.repeatCnt = 0; 216 4 StopTimer(&InitTimer); 217 4 //TODO:写入EEPROM 218 4 } 219 3 } 220 2 else 221 2 { 222 3 if(bulbId.repeatCnt>=3) 223 3 { 224 4 bulbId.bInit = 1; 225 4 //绑定 226 4 StartBlinkLED(3); 227 4 bulbId.repeatCnt = 0; 228 4 StopTimer(&InitTimer); 229 4 //TODO:写入EEPROM 230 4 } 231 3 } 232 2 } 233 1 UNUSED(p); *** WARNING C275 IN LINE 233 OF Src\BulbId.c: expression with possibly no effect 234 1 } 235 236 237 //等待初始化 238 void waitForInitOrUnInit(void) 239 { 240 1 StartTimer2(&InitTimer,TIMER_MODE_TIMER,10000,NULL,NULL); 241 1 _nop_(); 242 1 } 243 244 uint8_t GetRepeatCnt(uint8_t curIndex,uint8_t preIndex) 245 { 246 1 uint8_t bCompMemValue = memcmp(BulbInfo[curIndex],BulbInfo[preIndex],6); 247 1 uint8_t bCompGrp =(BulbInfo[curIndex][V2_GRP_INDEX]==BulbInfo[preIndex][V2_GRP_INDEX]); 248 1 CONST uint8_t maxv = (1U<<3)-1; 249 1 if( (bCompMemValue==0)&&bCompGrp ) 250 1 { 251 2 if(bulbId.repeatCnt(), - 100, 255)); 315 changes |= stateChange; 316 } 317 if (isOn() && state.containsKey(GroupStateFieldNames::HUE)) { 318 changes |= setHue(state[GroupStateFieldNames::HUE]); 319 changes |= setBulbMode(BULB_MODE_COLOR); 320 } 321 if (isOn() && state.containsKey(GroupStateFieldNames::SATURATION)) { C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 31 322 changes |= setSaturation(state[GroupStateFieldNames::SATURATION]); 323 } 324 if (isOn() && state.containsKey(GroupStateFieldNames::MODE)) { 325 changes |= setMode(state[GroupStateFieldNames::MODE]); 326 changes |= setBulbMode(BULB_MODE_SCENE); 327 } 328 if (isOn() && state.containsKey(GroupStateFieldNames::COLOR_TEMP)) { 329 changes |= setMireds(state[GroupStateFieldNames::COLOR_TEMP]); 330 changes |= setBulbMode(BULB_MODE_WHITE); 331 } 332 333 if (state.containsKey(GroupStateFieldNames::COMMAND)) { 334 const String& command = state[GroupStateFieldNames::COMMAND]; 335 336 if (isOn() && command == MiLightCommandNames::SET_WHITE) { 337 changes |= setBulbMode(BULB_MODE_WHITE); 338 } else if (command == MiLightCommandNames::NIGHT_MODE) { 339 changes |= setBulbMode(BULB_MODE_NIGHT); 340 } else if (isOn() && command == "brightness_up") { 341 changes |= applyIncrementCommand(GroupStateField::BRIGHTNESS, IncrementDirection::INCREASE); 342 } else if (isOn() && command == "brightness_down") { 343 changes |= applyIncrementCommand(GroupStateField::BRIGHTNESS, IncrementDirection::DECREASE); 344 } else if (isOn() && command == MiLightCommandNames::TEMPERATURE_UP) { 345 changes |= applyIncrementCommand(GroupStateField::KELVIN, IncrementDirection::INCREASE); 346 changes |= setBulbMode(BULB_MODE_WHITE); 347 } else if (isOn() && command == MiLightCommandNames::TEMPERATURE_DOWN) { 348 changes |= applyIncrementCommand(GroupStateField::KELVIN, IncrementDirection::DECREASE); 349 changes |= setBulbMode(BULB_MODE_WHITE); 350 } 351 } 352 353 if (changes) { 354 debugState("GroupState::patch: State changed"); 355 } 356 else { 357 debugState("GroupState::patch: State not changed"); 358 } 359 360 return changes; 361 } 362 */ 363 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 32 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION _rescale (BEGIN) ; SOURCE LINE # 19 0000 8E00 R MOV value,R6 0002 8F00 R MOV value+01H,R7 ;---- Variable 'newMax' assigned to Register 'R4/R5' ---- ; SOURCE LINE # 20 ; SOURCE LINE # 21 0004 AE04 MOV R6,AR4 0006 AF05 MOV R7,AR5 0008 E4 CLR A 0009 120000 E LCALL ?C?FCASTI 000C AB00 R MOV R3,oldMax+03H 000E AA00 R MOV R2,oldMax+02H 0010 A900 R MOV R1,oldMax+01H 0012 A800 R MOV R0,oldMax 0014 120000 E LCALL ?C?FPDIV 0017 C004 PUSH AR4 0019 C005 PUSH AR5 001B C006 PUSH AR6 001D C007 PUSH AR7 001F AC00 R MOV R4,value 0021 AD00 R MOV R5,value+01H 0023 E4 CLR A 0024 120000 E LCALL ?C?FCASTI 0027 D003 POP AR3 0029 D002 POP AR2 002B D001 POP AR1 002D D000 POP AR0 002F 120000 E LCALL ?C?FPMUL 0032 E4 CLR A 0033 FB MOV R3,A 0034 FA MOV R2,A 0035 F9 MOV R1,A 0036 783F MOV R0,#03FH 0038 120000 E LCALL ?C?FPADD ;---- Variable 'r' assigned to Register 'R4/R5/R6/R7' ---- ; SOURCE LINE # 22 003B 020000 E LJMP ?C?CASTF ; FUNCTION _rescale (END) ; FUNCTION _whiteValToMireds (BEGIN) ; SOURCE LINE # 25 ;---- Variable 'maxValue' assigned to Register 'R5' ---- ;---- Variable 'value' assigned to Register 'R7' ---- ; SOURCE LINE # 26 ; SOURCE LINE # 27 0000 7E00 MOV R6,#00H 0002 C006 PUSH AR6 0004 C007 PUSH AR7 0006 AF05 MOV R7,AR5 0008 AC07 MOV R4,AR7 000A E4 CLR A 000B 120000 E LCALL ?C?FCASTC 000E 8F00 R MOV ?_rescale?BYTE+07H,R7 0010 8E00 R MOV ?_rescale?BYTE+06H,R6 0012 8D00 R MOV ?_rescale?BYTE+05H,R5 0014 8C00 R MOV ?_rescale?BYTE+04H,R4 0016 D007 POP AR7 0018 D006 POP AR6 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 33 001A 7DD9 MOV R5,#0D9H 001C 7C00 MOV R4,#00H 001E 120000 R LCALL _rescale ;---- Variable 'scaled' assigned to Register 'R6/R7' ---- ; SOURCE LINE # 28 0021 EF MOV A,R7 0022 2499 ADD A,#099H 0024 FF MOV R7,A 0025 E4 CLR A 0026 33 RLC A 0027 FE MOV R6,A ; SOURCE LINE # 29 0028 22 RET ; FUNCTION _whiteValToMireds (END) ; FUNCTION _constrain (BEGIN) ; SOURCE LINE # 31 ;---- Variable 'in' assigned to Register 'R7' ---- ;---- Variable 'max' assigned to Register 'R3' ---- ;---- Variable 'min' assigned to Register 'R5' ---- ; SOURCE LINE # 32 ; SOURCE LINE # 33 ;---- Variable 'r' assigned to Register 'R6' ---- 0000 E4 CLR A 0001 FE MOV R6,A ; SOURCE LINE # 34 0002 EF MOV A,R7 0003 C3 CLR C 0004 9D SUBB A,R5 0005 5002 JNC ?C0003 ; SOURCE LINE # 35 0007 AE05 MOV R6,AR5 0009 ?C0003: ; SOURCE LINE # 36 0009 EF MOV A,R7 000A D3 SETB C 000B 9B SUBB A,R3 000C 4002 JC ?C0004 ; SOURCE LINE # 37 000E AE03 MOV R6,AR3 0010 ?C0004: ; SOURCE LINE # 38 0010 AF06 MOV R7,AR6 ; SOURCE LINE # 39 0012 22 RET ; FUNCTION _constrain (END) ; FUNCTION _hiteValToMireds (BEGIN) ; SOURCE LINE # 43 ;---- Variable 'maxValue' assigned to Register 'R5' ---- ;---- Variable 'value' assigned to Register 'R7' ---- ; SOURCE LINE # 44 ; SOURCE LINE # 45 0000 7E00 MOV R6,#00H 0002 C006 PUSH AR6 0004 C007 PUSH AR7 0006 AF05 MOV R7,AR5 0008 AC07 MOV R4,AR7 000A E4 CLR A 000B 120000 E LCALL ?C?FCASTC 000E 8F00 R MOV ?_rescale?BYTE+07H,R7 0010 8E00 R MOV ?_rescale?BYTE+06H,R6 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 34 0012 8D00 R MOV ?_rescale?BYTE+05H,R5 0014 8C00 R MOV ?_rescale?BYTE+04H,R4 0016 D007 POP AR7 0018 D006 POP AR6 001A 7DD9 MOV R5,#0D9H 001C 7C00 MOV R4,#00H 001E 120000 R LCALL _rescale ;---- Variable 'scaled' assigned to Register 'R6/R7' ---- ; SOURCE LINE # 46 0021 EF MOV A,R7 0022 2499 ADD A,#099H 0024 FF MOV R7,A 0025 E4 CLR A 0026 33 RLC A 0027 FE MOV R6,A ; SOURCE LINE # 47 0028 22 RET ; FUNCTION _hiteValToMireds (END) ; FUNCTION _decodeCmd (BEGIN) ; SOURCE LINE # 50 0000 8D00 R MOV len1,R5 ;---- Variable 'pBulbInfo' assigned to Register 'R1/R2/R3' ---- ; SOURCE LINE # 51 ; SOURCE LINE # 52 ;---- Variable 'packetCopy' assigned to Register 'R1/R2/R3' ---- ; SOURCE LINE # 53 0002 900004 MOV DPTR,#04H 0005 120000 E LCALL ?C?CLDOPTR 0008 547F ANL A,#07FH 000A F500 R MOV command,A ; SOURCE LINE # 54 000C 900005 MOV DPTR,#05H 000F 120000 E LCALL ?C?CLDOPTR 0012 F500 R MOV arg,A ; SOURCE LINE # 56 0014 900002 MOV DPTR,#02H 0017 120000 E LCALL ?C?CLDOPTR 001A FE MOV R6,A 001B 900003 MOV DPTR,#03H 001E 120000 E LCALL ?C?CLDOPTR 0021 FD MOV R5,A 0022 ED MOV A,R5 0023 FF MOV R7,A ;---- Variable 'deviceId' assigned to Register 'R6/R7' ---- ; SOURCE LINE # 57 0024 900007 MOV DPTR,#07H 0027 120000 E LCALL ?C?CLDOPTR 002A FD MOV R5,A ;---- Variable 'groupId' assigned to Register 'R5' ---- ; SOURCE LINE # 60 002B 900000 R MOV DPTR,#bulbId+0EH 002E E0 MOVX A,@DPTR 002F 20E113 JB ACC.1,?C0007 ; SOURCE LINE # 61 ; SOURCE LINE # 62 0032 900000 R MOV DPTR,#bulbId+02H 0035 EE MOV A,R6 0036 F0 MOVX @DPTR,A 0037 A3 INC DPTR 0038 EF MOV A,R7 0039 F0 MOVX @DPTR,A C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 35 ; SOURCE LINE # 63 003A 900000 R MOV DPTR,#bulbId+01H 003D ED MOV A,R5 003E F0 MOVX @DPTR,A ; SOURCE LINE # 64 003F 900000 R MOV DPTR,#bulbId 0042 7404 MOV A,#04H 0044 F0 MOVX @DPTR,A ; SOURCE LINE # 66 0045 ?C0007: ; SOURCE LINE # 69 0045 900000 R MOV DPTR,#bulbId+02H 0048 E0 MOVX A,@DPTR 0049 6E XRL A,R6 004A 7003 JNZ ?C0070 004C A3 INC DPTR 004D E0 MOVX A,@DPTR 004E 6F XRL A,R7 004F ?C0070: 004F 6003 JZ $ + 5H 0051 020000 R LJMP ?C0008 ; SOURCE LINE # 70 ; SOURCE LINE # 71 0054 E500 R MOV A,command 0056 24FE ADD A,#0FEH 0058 7003 JNZ $ + 5H 005A 020000 R LJMP ?C0022 005D 24FD ADD A,#0FDH 005F 7003 JNZ $ + 5H 0061 020000 R LJMP ?C0023 0064 14 DEC A 0065 7003 JNZ $ + 5H 0067 020000 R LJMP ?C0025 006A 2405 ADD A,#05H 006C 6003 JZ $ + 5H 006E 020000 R LJMP ?C0009 ; SOURCE LINE # 72 ; SOURCE LINE # 73 0071 ?C0010: ; SOURCE LINE # 74 0071 900004 MOV DPTR,#04H 0074 120000 E LCALL ?C?CLDOPTR 0077 30E709 JNB ACC.7,?C0011 ; SOURCE LINE # 75 ; SOURCE LINE # 76 007A 900000 R MOV DPTR,#bulbId+025H 007D 7403 MOV A,#03H 007F F0 MOVX @DPTR,A ; SOURCE LINE # 77 0080 020000 R LJMP ?C0009 0083 ?C0011: ; SOURCE LINE # 78 0083 E500 R MOV A,arg 0085 B41309 CJNE A,#013H,?C0013 ; SOURCE LINE # 79 ; SOURCE LINE # 80 0088 900000 R MOV DPTR,#bulbId+025H 008B 740A MOV A,#0AH 008D F0 MOVX @DPTR,A ; SOURCE LINE # 81 008E 020000 R LJMP ?C0009 0091 ?C0013: C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 36 ; SOURCE LINE # 82 0091 E500 R MOV A,arg 0093 B41209 CJNE A,#012H,?C0015 ; SOURCE LINE # 83 ; SOURCE LINE # 84 0096 900000 R MOV DPTR,#bulbId+025H 0099 740B MOV A,#0BH 009B F0 MOVX @DPTR,A ; SOURCE LINE # 85 009C 020000 R LJMP ?C0009 009F ?C0015: ; SOURCE LINE # 86 009F E500 R MOV A,arg 00A1 B41408 CJNE A,#014H,?C0017 ; SOURCE LINE # 87 ; SOURCE LINE # 88 00A4 900000 R MOV DPTR,#bulbId+025H 00A7 7402 MOV A,#02H 00A9 F0 MOVX @DPTR,A ; SOURCE LINE # 89 00AA 807E SJMP ?C0009 00AC ?C0017: ; SOURCE LINE # 90 00AC E500 R MOV A,arg 00AE C3 CLR C 00AF 9409 SUBB A,#09H 00B1 500B JNC ?C0019 ; SOURCE LINE # 91 ; SOURCE LINE # 92 00B3 900000 R MOV DPTR,#bulbId+012H 00B6 7401 MOV A,#01H 00B8 F0 MOVX @DPTR,A ; SOURCE LINE # 93 00B9 900000 R MOV DPTR,#bulbId+01H ; SOURCE LINE # 94 00BC 8069 SJMP ?C0071 00BE ?C0019: ; SOURCE LINE # 95 00BE E500 R MOV A,arg 00C0 D3 SETB C 00C1 940A SUBB A,#0AH 00C3 4065 JC ?C0009 00C5 E500 R MOV A,arg 00C7 9412 SUBB A,#012H 00C9 505F JNC ?C0009 ; SOURCE LINE # 96 ; SOURCE LINE # 97 00CB E4 CLR A 00CC 900000 R MOV DPTR,#bulbId+012H 00CF F0 MOVX @DPTR,A ; SOURCE LINE # 98 00D0 E500 R MOV A,arg 00D2 24F7 ADD A,#0F7H 00D4 900000 R MOV DPTR,#bulbId+01H 00D7 F0 MOVX @DPTR,A ; SOURCE LINE # 99 ; SOURCE LINE # 100 00D8 8050 SJMP ?C0009 ; SOURCE LINE # 101 00DA ?C0022: ; SOURCE LINE # 102 ; SOURCE LINE # 103 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 37 00DA 850000 R MOV rescaledColor,arg ; SOURCE LINE # 104 00DD AF00 R MOV R7,rescaledColor 00DF 7E00 MOV R6,#00H 00E1 E4 CLR A 00E2 F500 R MOV ?_rescale?BYTE+07H,A 00E4 F500 R MOV ?_rescale?BYTE+06H,A 00E6 75007F R MOV ?_rescale?BYTE+05H,#07FH 00E9 750043 R MOV ?_rescale?BYTE+04H,#043H 00EC 7D68 MOV R5,#068H 00EE 7C01 MOV R4,#01H 00F0 120000 R LCALL _rescale 00F3 750000 R MOV hue,#00H 00F6 8F00 R MOV hue+01H,R7 ; SOURCE LINE # 105 00F8 900000 R MOV DPTR,#bulbId+016H 00FB EF MOV A,R7 00FC F0 MOVX @DPTR,A ; SOURCE LINE # 106 ; SOURCE LINE # 107 00FD 802B SJMP ?C0009 ; SOURCE LINE # 108 00FF ?C0023: ; SOURCE LINE # 109 ; SOURCE LINE # 110 00FF 7B64 MOV R3,#064H 0101 E4 CLR A 0102 FD MOV R5,A 0103 AF00 R MOV R7,arg 0105 120000 R LCALL _constrain 0108 8F00 R MOV level,R7 ; SOURCE LINE # 111 010A 7E00 MOV R6,#00H 010C E4 CLR A 010D F500 R MOV ?_rescale?BYTE+07H,A 010F F500 R MOV ?_rescale?BYTE+06H,A 0111 7500C8 R MOV ?_rescale?BYTE+05H,#0C8H 0114 750042 R MOV ?_rescale?BYTE+04H,#042H 0117 7DFF MOV R5,#0FFH 0119 FC MOV R4,A 011A 120000 R LCALL _rescale 011D 900000 R MOV DPTR,#bulbId+014H 0120 EF MOV A,R7 0121 F0 MOVX @DPTR,A ; SOURCE LINE # 112 ; SOURCE LINE # 113 0122 8006 SJMP ?C0009 ; SOURCE LINE # 114 ; SOURCE LINE # 115 ; SOURCE LINE # 127 ; SOURCE LINE # 128 ; SOURCE LINE # 129 0124 ?C0025: ; SOURCE LINE # 130 0124 900000 R MOV DPTR,#bulbId+019H 0127 ?C0071: 0127 E500 R MOV A,arg 0129 F0 MOVX @DPTR,A ; SOURCE LINE # 131 ; SOURCE LINE # 132 ; SOURCE LINE # 133 ; SOURCE LINE # 134 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 38 012A ?C0009: ; SOURCE LINE # 135 012A 900000 R MOV DPTR,#bulbId+010H 012D E500 R MOV A,command 012F F0 MOVX @DPTR,A ; SOURCE LINE # 136 0130 A3 INC DPTR 0131 E500 R MOV A,arg 0133 F0 MOVX @DPTR,A ; SOURCE LINE # 137 0134 00 NOP ; SOURCE LINE # 138 0135 ?C0008: ; SOURCE LINE # 140 ; SOURCE LINE # 141 0135 22 RET ; FUNCTION _decodeCmd (END) ; FUNCTION _SetLEDState (BEGIN) ; SOURCE LINE # 143 ;---- Variable 'state' assigned to Register 'R7' ---- ; SOURCE LINE # 144 ; SOURCE LINE # 147 0000 EF MOV A,R7 0001 7BFF MOV R3,#0FFH 0003 6006 JZ ?C0028 0005 7A00 R MOV R2,#HIGH pPwmInfo_Hi 0007 7900 R MOV R1,#LOW pPwmInfo_Hi 0009 8004 SJMP ?C0029 000B ?C0028: 000B 7A00 R MOV R2,#HIGH pPwmInfo_Low 000D 7900 R MOV R1,#LOW pPwmInfo_Low 000F ?C0029: 000F 7D05 MOV R5,#05H 0011 020000 E LJMP _SetPWMInfo ; FUNCTION _SetLEDState (END) ; FUNCTION _TaskBlinLed (BEGIN) ; SOURCE LINE # 155 0000 8B00 R MOV pt1,R3 0002 8A00 R MOV pt1+01H,R2 0004 8900 R MOV pt1+02H,R1 ; SOURCE LINE # 159 ; SOURCE LINE # 168 0006 00 NOP ; SOURCE LINE # 169 0007 750001 R MOV PT_YIELD_FLAG,#01H 000A 120000 E LCALL ?C?ILDPTR 000D FF MOV R7,A 000E E5F0 MOV A,B 0010 6003 JZ $ + 5H 0012 020000 R LJMP ?C0031 0015 EF MOV A,R7 0016 2450 ADD A,#050H 0018 6034 JZ ?C0038 001A 24FA ADD A,#0FAH 001C 6062 JZ ?C0044 001E 24B6 ADD A,#0B6H 0020 6003 JZ $ + 5H 0022 020000 R LJMP ?C0031 0025 ?C0032: ; SOURCE LINE # 170 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 39 0025 E4 CLR A 0026 F5F0 MOV B,A 0028 120000 E LCALL ?C?ISTPTR 002B ?C0033: ; SOURCE LINE # 171 ; SOURCE LINE # 172 ; SOURCE LINE # 173 002B 7B01 MOV R3,#01H 002D 7A00 R MOV R2,#HIGH input_timer 002F 7900 R MOV R1,#LOW input_timer 0031 7F64 MOV R7,#064H 0033 7E00 MOV R6,#00H 0035 7D00 MOV R5,#00H 0037 7C00 MOV R4,#00H 0039 120000 E LCALL _timer_set ; SOURCE LINE # 175 003C 7F01 MOV R7,#01H 003E 120000 R LCALL _SetLEDState ; SOURCE LINE # 176 0041 AB00 R MOV R3,pt1 0043 AA00 R MOV R2,pt1+01H 0045 A900 R MOV R1,pt1+02H 0047 E4 CLR A 0048 75F0B0 MOV B,#0B0H 004B 120000 E LCALL ?C?ISTPTR 004E ?C0038: 004E 7B01 MOV R3,#01H 0050 7A00 R MOV R2,#HIGH input_timer 0052 7900 R MOV R1,#LOW input_timer 0054 120000 E LCALL _timer_expired 0057 EF MOV A,R7 0058 7002 JNZ ?C0036 005A FF MOV R7,A 005B 22 RET 005C ?C0036: ; SOURCE LINE # 177 005C 00 NOP ; SOURCE LINE # 179 005D 7B01 MOV R3,#01H 005F 7A00 R MOV R2,#HIGH input_timer 0061 7900 R MOV R1,#LOW input_timer 0063 7F84 MOV R7,#084H 0065 7E03 MOV R6,#03H 0067 7D00 MOV R5,#00H 0069 7C00 MOV R4,#00H 006B 120000 E LCALL _timer_set ; SOURCE LINE # 181 006E E4 CLR A 006F FF MOV R7,A 0070 120000 R LCALL _SetLEDState ; SOURCE LINE # 182 0073 AB00 R MOV R3,pt1 0075 AA00 R MOV R2,pt1+01H 0077 A900 R MOV R1,pt1+02H 0079 E4 CLR A 007A 75F0B6 MOV B,#0B6H 007D 120000 E LCALL ?C?ISTPTR 0080 ?C0044: 0080 7B01 MOV R3,#01H 0082 7A00 R MOV R2,#HIGH input_timer 0084 7900 R MOV R1,#LOW input_timer 0086 120000 E LCALL _timer_expired C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 40 0089 EF MOV A,R7 008A 7002 JNZ ?C0042 008C FF MOV R7,A 008D 22 RET 008E ?C0042: ; SOURCE LINE # 183 008E 00 NOP ; SOURCE LINE # 184 008F 900000 R MOV DPTR,#BlinkLEDCnt 0092 E0 MOVX A,@DPTR 0093 14 DEC A 0094 F0 MOVX @DPTR,A ; SOURCE LINE # 185 0095 E0 MOVX A,@DPTR 0096 7093 JNZ ?C0033 ; SOURCE LINE # 186 ; SOURCE LINE # 187 0098 7F01 MOV R7,#01H 009A 120000 E LCALL _SuspendTask ; SOURCE LINE # 188 009D AB00 R MOV R3,pt1 009F AA00 R MOV R2,pt1+01H 00A1 A900 R MOV R1,pt1+02H 00A3 E4 CLR A 00A4 F5F0 MOV B,A 00A6 120000 E LCALL ?C?ISTPTR 00A9 7F02 MOV R7,#02H 00AB 22 RET ; SOURCE LINE # 189 ; SOURCE LINE # 190 ; SOURCE LINE # 191 00AC ?C0031: 00AC E4 CLR A 00AD F500 R MOV PT_YIELD_FLAG,A 00AF AB00 R MOV R3,pt1 00B1 AA00 R MOV R2,pt1+01H 00B3 A900 R MOV R1,pt1+02H 00B5 F5F0 MOV B,A 00B7 120000 E LCALL ?C?ISTPTR 00BA 7F03 MOV R7,#03H ; SOURCE LINE # 192 00BC ?C0040: 00BC 22 RET ; FUNCTION _TaskBlinLed (END) ; FUNCTION _StartBlinkLED (BEGIN) ; SOURCE LINE # 194 ;---- Variable 'cnt' assigned to Register 'R7' ---- ; SOURCE LINE # 195 ; SOURCE LINE # 196 0000 900000 R MOV DPTR,#BlinkLEDCnt 0003 EF MOV A,R7 0004 F0 MOVX @DPTR,A ; SOURCE LINE # 197 0005 E4 CLR A 0006 75000A E MOV ?_ActiveTask?BYTE+04H,#0AH 0009 F500 E MOV ?_ActiveTask?BYTE+03H,A 000B F500 E MOV ?_ActiveTask?BYTE+02H,A 000D F500 E MOV ?_ActiveTask?BYTE+01H,A 000F 7F01 MOV R7,#01H 0011 020000 E LJMP _ActiveTask ; FUNCTION _StartBlinkLED (END) C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 41 ; FUNCTION _InitOrUninit (BEGIN) ; SOURCE LINE # 204 0000 8B00 R MOV p,R3 0002 8A00 R MOV p+01H,R2 0004 8900 R MOV p+02H,R1 ; SOURCE LINE # 205 ; SOURCE LINE # 206 0006 C3 CLR C 0007 E500 R MOV A,InitTimer 0009 6480 XRL A,#080H 000B 9480 SUBB A,#080H 000D 403B JC ?C0051 ; SOURCE LINE # 207 ; SOURCE LINE # 208 000F 900000 R MOV DPTR,#bulbId+0EH 0012 E0 MOVX A,@DPTR 0013 FF MOV R7,A 0014 30E111 JNB ACC.1,?C0052 ; SOURCE LINE # 209 ; SOURCE LINE # 210 0017 A3 INC DPTR 0018 E0 MOVX A,@DPTR 0019 9405 SUBB A,#05H 001B 402D JC ?C0051 ; SOURCE LINE # 211 ; SOURCE LINE # 212 001D EF MOV A,R7 001E 54FD ANL A,#0FDH 0020 900000 R MOV DPTR,#bulbId+0EH 0023 F0 MOVX @DPTR,A ; SOURCE LINE # 214 0024 7F0A MOV R7,#0AH ; SOURCE LINE # 215 ; SOURCE LINE # 216 ; SOURCE LINE # 218 ; SOURCE LINE # 219 0026 8012 SJMP ?C0072 0028 ?C0052: ; SOURCE LINE # 221 ; SOURCE LINE # 222 0028 900000 R MOV DPTR,#bulbId+0FH 002B E0 MOVX A,@DPTR 002C C3 CLR C 002D 9403 SUBB A,#03H 002F 4019 JC ?C0051 ; SOURCE LINE # 223 ; SOURCE LINE # 224 0031 900000 R MOV DPTR,#bulbId+0EH 0034 E0 MOVX A,@DPTR 0035 4402 ORL A,#02H 0037 F0 MOVX @DPTR,A ; SOURCE LINE # 226 0038 7F03 MOV R7,#03H 003A ?C0072: 003A 120000 R LCALL _StartBlinkLED ; SOURCE LINE # 227 003D E4 CLR A 003E 900000 R MOV DPTR,#bulbId+0FH 0041 F0 MOVX @DPTR,A ; SOURCE LINE # 228 0042 FB MOV R3,A C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 42 0043 7A00 R MOV R2,#HIGH InitTimer 0045 7900 R MOV R1,#LOW InitTimer 0047 120000 E LCALL _StopTimer ; SOURCE LINE # 230 ; SOURCE LINE # 231 ; SOURCE LINE # 232 004A ?C0051: ; SOURCE LINE # 233 ; SOURCE LINE # 234 004A 22 RET ; FUNCTION _InitOrUninit (END) ; FUNCTION waitForInitOrUnInit (BEGIN) ; SOURCE LINE # 238 ; SOURCE LINE # 239 ; SOURCE LINE # 240 0000 E4 CLR A 0001 750010 E MOV ?_StartTimer2?BYTE+07H,#010H 0004 750027 E MOV ?_StartTimer2?BYTE+06H,#027H 0007 F500 E MOV ?_StartTimer2?BYTE+05H,A 0009 F500 E MOV ?_StartTimer2?BYTE+04H,A 000B F500 E MOV ?_StartTimer2?BYTE+08H,A 000D F500 E MOV ?_StartTimer2?BYTE+09H,A 000F F500 E MOV ?_StartTimer2?BYTE+0AH,A 0011 F500 E MOV ?_StartTimer2?BYTE+0BH,A 0013 F500 E MOV ?_StartTimer2?BYTE+0CH,A 0015 F500 E MOV ?_StartTimer2?BYTE+0DH,A 0017 FB MOV R3,A 0018 7A00 R MOV R2,#HIGH InitTimer 001A 7900 R MOV R1,#LOW InitTimer 001C FD MOV R5,A 001D 120000 E LCALL _StartTimer2 ; SOURCE LINE # 241 0020 00 NOP ; SOURCE LINE # 242 0021 22 RET ; FUNCTION waitForInitOrUnInit (END) ; FUNCTION _GetRepeatCnt (BEGIN) ; SOURCE LINE # 244 0000 8F00 R MOV curIndex,R7 0002 8D00 R MOV preIndex,R5 ; SOURCE LINE # 245 ; SOURCE LINE # 246 0004 E500 R MOV A,preIndex 0006 75F009 MOV B,#09H 0009 A4 MUL AB 000A 2400 R ADD A,#LOW BulbInfo 000C F9 MOV R1,A 000D 7400 R MOV A,#HIGH BulbInfo 000F 35F0 ADDC A,B 0011 FA MOV R2,A 0012 7B01 MOV R3,#01H 0014 C001 PUSH AR1 0016 E500 R MOV A,curIndex 0018 75F009 MOV B,#09H 001B A4 MUL AB 001C 2400 R ADD A,#LOW BulbInfo 001E F9 MOV R1,A 001F 7400 R MOV A,#HIGH BulbInfo 0021 35F0 ADDC A,B 0023 A801 MOV R0,AR1 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 43 0025 FC MOV R4,A 0026 7D01 MOV R5,#01H 0028 D001 POP AR1 002A 7E00 MOV R6,#00H 002C 7F06 MOV R7,#06H 002E 120000 E LCALL ?C?MEMCMP ;---- Variable 'bCompMemValue' assigned to Register 'R7' ---- ; SOURCE LINE # 247 0031 E500 R MOV A,preIndex 0033 75F009 MOV B,#09H 0036 A4 MUL AB 0037 2400 R ADD A,#LOW BulbInfo+07H 0039 F582 MOV DPL,A 003B E4 CLR A 003C 3400 R ADDC A,#HIGH BulbInfo+07H 003E F583 MOV DPH,A 0040 E0 MOVX A,@DPTR 0041 FE MOV R6,A 0042 E500 R MOV A,curIndex 0044 75F009 MOV B,#09H 0047 A4 MUL AB 0048 2400 R ADD A,#LOW BulbInfo+07H 004A F582 MOV DPL,A 004C E4 CLR A 004D 3400 R ADDC A,#HIGH BulbInfo+07H 004F F583 MOV DPH,A 0051 E0 MOVX A,@DPTR 0052 B50604 CJNE A,AR6,?C0058 0055 7E01 MOV R6,#01H 0057 8002 SJMP ?C0059 0059 ?C0058: 0059 7E00 MOV R6,#00H 005B ?C0059: ;---- Variable 'bCompGrp' assigned to Register 'R6' ---- ; SOURCE LINE # 249 005B EF MOV A,R7 005C 701F JNZ ?C0060 005E EE MOV A,R6 005F 601C JZ ?C0060 ; SOURCE LINE # 250 ; SOURCE LINE # 251 0061 900000 R MOV DPTR,#maxv 0064 E4 CLR A 0065 93 MOVC A,@A+DPTR 0066 FF MOV R7,A 0067 900000 R MOV DPTR,#bulbId+0FH 006A E0 MOVX A,@DPTR 006B C3 CLR C 006C 9F SUBB A,R7 006D 5003 JNC ?C0061 ; SOURCE LINE # 252 006F E0 MOVX A,@DPTR 0070 04 INC A 0071 F0 MOVX @DPTR,A 0072 ?C0061: ; SOURCE LINE # 253 0072 7B00 MOV R3,#00H 0074 7A00 MOV R2,#00H 0076 7900 MOV R1,#00H 0078 120000 R LCALL _InitOrUninit ; SOURCE LINE # 254 007B 8005 SJMP ?C0062 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 44 007D ?C0060: ; SOURCE LINE # 256 ; SOURCE LINE # 257 007D E4 CLR A 007E 900000 R MOV DPTR,#bulbId+0FH 0081 F0 MOVX @DPTR,A ; SOURCE LINE # 259 0082 ?C0062: ; SOURCE LINE # 260 0082 900000 R MOV DPTR,#bulbId+0FH 0085 E0 MOVX A,@DPTR 0086 FF MOV R7,A ; SOURCE LINE # 261 0087 22 RET ; FUNCTION _GetRepeatCnt (END) ; FUNCTION _isDuplicatePackage (BEGIN) ; SOURCE LINE # 265 0000 8F00 R MOV curIndex,R7 ;---- Variable 'preIndex' assigned to Register 'R5' ---- ; SOURCE LINE # 266 ; SOURCE LINE # 267 0002 ED MOV A,R5 0003 75F009 MOV B,#09H 0006 A4 MUL AB 0007 2400 R ADD A,#LOW BulbInfo 0009 F9 MOV R1,A 000A 7400 R MOV A,#HIGH BulbInfo 000C 35F0 ADDC A,B 000E FA MOV R2,A 000F 7B01 MOV R3,#01H 0011 C001 PUSH AR1 0013 E500 R MOV A,curIndex 0015 75F009 MOV B,#09H 0018 A4 MUL AB 0019 2400 R ADD A,#LOW BulbInfo 001B F9 MOV R1,A 001C 7400 R MOV A,#HIGH BulbInfo 001E 35F0 ADDC A,B 0020 A801 MOV R0,AR1 0022 FC MOV R4,A 0023 7D01 MOV R5,#01H 0025 D001 POP AR1 0027 7E00 MOV R6,#00H 0029 7F09 MOV R7,#09H 002B 120000 E LCALL ?C?MEMCMP ;---- Variable 'bCompMemValue' assigned to Register 'R7' ---- ; SOURCE LINE # 268 002E EF MOV A,R7 002F 7F00 MOV R7,#00H 0031 7002 JNZ ?C0064 0033 7F01 MOV R7,#01H 0035 ?C0064: 0035 ?C0065: ; SOURCE LINE # 269 0035 22 RET ; FUNCTION _isDuplicatePackage (END) ; FUNCTION _SetBulbInfo (BEGIN) ; SOURCE LINE # 271 0000 8B00 R MOV pBulbInfo,R3 0002 8A00 R MOV pBulbInfo+01H,R2 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 45 0004 8900 R MOV pBulbInfo+02H,R1 0006 8D00 R MOV len1,R5 ; SOURCE LINE # 272 ; SOURCE LINE # 274 0008 E500 R MOV A,index 000A 04 INC A 000B 5401 ANL A,#01H 000D F500 R MOV preIndex,A ; SOURCE LINE # 276 000F E500 R MOV A,len1 0011 F582 MOV DPL,A 0013 758300 MOV DPH,#00H 0016 E500 R MOV A,index 0018 75F009 MOV B,#09H 001B A4 MUL AB 001C 2400 R ADD A,#LOW BulbInfo 001E F9 MOV R1,A 001F 7400 R MOV A,#HIGH BulbInfo 0021 35F0 ADDC A,B 0023 A801 MOV R0,AR1 0025 FC MOV R4,A 0026 7D01 MOV R5,#01H 0028 A900 R MOV R1,pBulbInfo+02H 002A 7E00 MOV R6,#00H 002C AF82 MOV R7,DPL 002E 120000 E LCALL ?C?COPY ; SOURCE LINE # 278 0031 AD00 R MOV R5,preIndex 0033 AF00 R MOV R7,index 0035 120000 R LCALL _isDuplicatePackage 0038 EF MOV A,R7 0039 7019 JNZ ?C0067 ; SOURCE LINE # 279 ; SOURCE LINE # 280 003B AD00 R MOV R5,preIndex 003D AF00 R MOV R7,index 003F 120000 R LCALL _GetRepeatCnt ; SOURCE LINE # 281 0042 0500 R INC index ; SOURCE LINE # 282 0044 530001 R ANL index,#01H ; SOURCE LINE # 284 0047 AB00 R MOV R3,pBulbInfo 0049 AA00 R MOV R2,pBulbInfo+01H 004B A900 R MOV R1,pBulbInfo+02H 004D AD00 R MOV R5,len1 004F 120000 R LCALL _decodeCmd ; SOURCE LINE # 285 0052 8001 SJMP ?C0068 0054 ?C0067: ; SOURCE LINE # 287 ; SOURCE LINE # 288 0054 00 NOP ; SOURCE LINE # 289 0055 ?C0068: ; SOURCE LINE # 290 0055 00 NOP ; SOURCE LINE # 291 0056 22 RET ; FUNCTION _SetBulbInfo (END) C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 46 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== _hiteValToMireds . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 maxValue . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 scaled . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2 OPREG. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00FFH 1 uint16_t . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2 P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1 MODE_SPEED_UP. . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 LEVEL_UP . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 SSDAT. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 009FH 1 P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1 P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1 FUT089_SATURATION. . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 EUART. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1 TMCON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008EH 1 Result . . . . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 24 button_id. . . . . . . . . . . . . . MEMBER ----- U_CHAR 0000H 1 argument . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0001H 1 STATE. . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0002H 1 STATUS . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0003H 1 BRIGHTNESS . . . . . . . . . . . . . MEMBER ----- U_CHAR 0004H 1 LEVEL. . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0005H 1 HUE. . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0006H 1 SATURATION . . . . . . . . . . . . . MEMBER ----- U_CHAR 0007H 1 COLOR. . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0008H 1 MODE . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0009H 1 KELVIN . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 000AH 1 TEMPERATURE. . . . . . . . . . . . . MEMBER ----- U_CHAR 000BH 1 COLOR_TEMP . . . . . . . . . . . . . MEMBER ----- U_CHAR 000CH 1 BULB_MODE. . . . . . . . . . . . . . MEMBER ----- U_CHAR 000DH 1 COMPUTED_COLOR . . . . . . . . . . . MEMBER ----- U_CHAR 000EH 1 EFFECT . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 000FH 1 DEVICE_ID. . . . . . . . . . . . . . MEMBER ----- U_CHAR 0010H 1 GROUP_ID . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0011H 1 DEVICE_TYPE. . . . . . . . . . . . . MEMBER ----- U_CHAR 0012H 1 OH_COLOR . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0013H 1 HEX_COLOR. . . . . . . . . . . . . . MEMBER ----- U_CHAR 0014H 1 COMMAND. . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0015H 1 COMMANDS . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0016H 1 COLOR_MODE . . . . . . . . . . . . . MEMBER ----- U_CHAR 0017H 1 NIGHT_MODE . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 MiLightFUT089Arguments . . . . . . . . * TAG * ----- ENUM ----- ----- AC . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D6H 1 FlagStatus . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 RESET. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 OTCON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008FH 1 EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1 T2 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00C9H 1 PWMCON0. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D2H 1 REMOTE_TYPE_RGBW . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 REMOTE_TYPE_UNKNOWN. . . . . . . . . . E_CONST ----- U_CHAR ----- 1 FUT089_MODE_SPEED_DOWN . . . . . . . . E_CONST ----- U_CHAR ----- 1 int32_t. . . . . . . . . . . . . . . . TYPEDEF ----- LONG ----- 4 PWMCON1. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00DAH 1 PREVIOUS_MODE. . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _SetLEDState . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- state. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 47 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== pPwmInfo_Low . . . . . . . . . . . . STATIC CODE ARRAY 0000H 10 pPwmInfo_Hi. . . . . . . . . . . . . STATIC CODE ARRAY 000AH 10 TASK_ID_TaskWDT. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 int16_t. . . . . . . . . . . . . . . . TYPEDEF ----- INT ----- 2 TIMER_MODE . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- BULB_MODE_NIGHT. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 MiLightFUT089Command . . . . . . . . . * TAG * ----- ENUM ----- ----- ERROR. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 pt_sem . . . . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 2 count. . . . . . . . . . . . . . . . MEMBER ----- U_INT 0000H 2 EADC . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AEH 1 IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1 false. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 BulbMode . . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- BULB_MODE_COLOR. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 OPINX. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00FEH 1 TRANSITION . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 FUT089_ON. . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 BULB_MODE_WHITE. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 size_t . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2 CP . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00C8H 1 MODE_SPEED_DOWN. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 LEVEL_DOWN . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 BulbInfo . . . . . . . . . . . . . . . PUBLIC XDATA ARRAY 0008H 18 ErrorStatus. . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 EXF2 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CEH 1 CHKSUMH. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00FDH 1 waitForInitOrUnInit. . . . . . . . . . PUBLIC CODE PROC 0000H ----- PWM_B. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 PWMDTY0. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D5H 1 PWM_C. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 OPERCON. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00EFH 1 PWMDTY1. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D6H 1 P0PH . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 009BH 1 IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1 FUT089_MODE. . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 CHKSUML. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00FCH 1 PWMDTY2. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D7H 1 P1PH . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0092H 1 InitTimer. . . . . . . . . . . . . . . PUBLIC DATA CHAR 0001H 1 RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1 PWMDTY3. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00DCH 1 P2PH . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A2H 1 SUCCESS. . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1 PWMDTY4. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00DDH 1 PWM_G. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TASK_ID_TaskTimer. . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1 PWMDTY5. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00DEH 1 ON . . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 eCommands. . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- IPT0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B9H 1 PWMDTY6. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00DFH 1 FunctionalState. . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 IPT1 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BBH 1 IPT2 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BDH 1 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 48 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== HIGH . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TASK_ID. . . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- RCAP2H . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CBH 1 SP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0081H 1 timer. . . . . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 8 start. . . . . . . . . . . . . . . . MEMBER ----- U_LONG 0000H 4 interval . . . . . . . . . . . . . . MEMBER ----- U_LONG 0004H 4 lc_t . . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2 OV . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D2H 1 ITStatus . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 IAPADE . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F4H 1 RCAP2L . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CAH 1 PWM_R. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 ENABLE . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 BitStatus. . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 IAPADH . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F3H 1 PWMDTYA. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D4H 1 PWMDTYB. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00DBH 1 ADCCON . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00ADH 1 PWM_W. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _StopTimer . . . . . . . . . . . . . . EXTERN CODE PROC ----- ----- RCLK . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CDH 1 IAPADL . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F2H 1 PAIR . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _GetRepeatCnt. . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- curIndex . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1 preIndex . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1 bCompMemValue. . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 bCompGrp . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1 maxv . . . . . . . . . . . . . . . . STATIC CODE U_CHAR 0014H 1 func . . . . . . . . . . . . . . . . . TYPEDEF ----- PTR ----- 3 bool . . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 REMOTE_TYPE_CCT. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TCLK . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CCH 1 REMOTE_TYPE_RGB. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _isDuplicatePackage. . . . . . . . . . PUBLIC CODE PROC 0000H ----- curIndex . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1 preIndex . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 bCompMemValue. . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 P00. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0080H 1 P10. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1 P01. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0081H 1 SBUF . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0099H 1 PCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0087H 1 P20. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A0H 1 P11. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1 _SetPWMInfo. . . . . . . . . . . . . . EXTERN CODE PROC ----- ----- P21. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A1H 1 P12. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1 P22. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A2H 1 P13. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0093H 1 SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1 _TaskBlinLed . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- pt1. . . . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3 PT_YIELD_FLAG. . . . . . . . . . . . AUTO DATA CHAR 0003H 1 input_timer. . . . . . . . . . . . . STATIC XDATA STRUCT 0000H 8 P23. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A3H 1 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 49 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== P14. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0094H 1 IAPDAT . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F5H 1 TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1 TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1 ePWM_INDEX . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- BulbId . . . . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 40 deviceType . . . . . . . . . . . . . MEMBER ----- U_CHAR 0000H 1 groupId. . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0001H 1 deviceId . . . . . . . . . . . . . . MEMBER ----- U_INT 0002H 2 PWM_Value. . . . . . . . . . . . . . MEMBER ----- ARRAY 0004H 10 bENPWM . . . . . . . . . . . . . . . MEMBER ----- FIELD 000EH 1.0 bInit. . . . . . . . . . . . . . . . MEMBER ----- FIELD 000EH 1.1 repeatCnt. . . . . . . . . . . . . . MEMBER ----- U_CHAR 000FH 1 result . . . . . . . . . . . . . . . MEMBER ----- STRUCT 0010H 24 P24. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A4H 1 P15. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0095H 1 IPINT0 . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B8H 1 TASK_ID_TaskBlinLed. . . . . . . . . . E_CONST ----- U_CHAR ----- 1 P25. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A5H 1 P16. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0096H 1 IPINT1 . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BAH 1 P26. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A6H 1 P17. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0097H 1 SSCON0 . . . . . . . . . . . . . . . . SFR DATA U_CHAR 009DH 1 P27. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A7H 1 SSCON1 . . . . . . . . . . . . . . . . SFR DATA U_CHAR 009EH 1 SSCON2 . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0095H 1 TIMER_MODE_ONCEROUTINE . . . . . . . . E_CONST ----- U_CHAR ----- 1 TASK_MODE. . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- FUT089_KELVIN. . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 IAPCTL . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F6H 1 IE1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A9H 1 DECREASE . . . . . . . . . . . . . . . E_CONST ----- CHAR ----- 1 TRUE . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 B. . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F0H 1 TASK_MODE_ONCE . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 true . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _SetBulbInfo . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- pBulbInfo. . . . . . . . . . . . . . AUTO DATA PTR 0000H 3 len1 . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 index. . . . . . . . . . . . . . . . STATIC DATA U_CHAR 0000H 1 preIndex . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1 TOGGLE . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 IAPKEY . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00F1H 1 BTMCON . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CEH 1 PWMCFG . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D1H 1 ACC. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00E0H 1 NEXT_MODE. . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _StartTimer2 . . . . . . . . . . . . . EXTERN CODE PROC ----- ----- MiLightRemoteType. . . . . . . . . . . * TAG * ----- ENUM ----- ----- ET0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A9H 1 TF0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008DH 1 ET1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ABH 1 ADCCFG0. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00ABH 1 IP1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B9H 1 TASK_ID_TaskScanKey. . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TF1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008FH 1 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 50 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== ET2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ADH 1 ADCCFG1. . . . . . . . . . . . . . . . SFR DATA U_CHAR 00AAH 1 RB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009AH 1 TF2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CFH 1 TH0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008CH 1 TH1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008DH 1 INCREASE . . . . . . . . . . . . . . . E_CONST ----- CHAR ----- 1 TB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009BH 1 TH2. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CDH 1 FUT089_OFF . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 P. . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D0H 1 uint8_t. . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 SM0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009FH 1 TL0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008AH 1 SET_WHITE. . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 SM1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009EH 1 WDTCON . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CFH 1 TL1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008BH 1 UNPAIR . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 SM2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009DH 1 TL2. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00CCH 1 _timer_set . . . . . . . . . . . . . . EXTERN CODE PROC ----- ----- _InitOrUninit. . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- p. . . . . . . . . . . . . . . . . . AUTO DATA VOID_PTR 0000H 3 bulbId . . . . . . . . . . . . . . . . PUBLIC XDATA STRUCT 001AH 40 RS0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D3H 1 TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1 RS1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D4H 1 REMOTE_TYPE_FUT020 . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 _constrain . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- in . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 min. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 max. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1 r. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1 TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1 IPUART . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1 TR2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CAH 1 TEMPERATURE_UP . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 int8_t . . . . . . . . . . . . . . . . TYPEDEF ----- CHAR ----- 1 LEDState . . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- _StartBlinkLED . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- cnt. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 OFF. . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 PWMPRD . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D3H 1 DPH. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0083H 1 REMOTE_TYPE_FUT091 . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 DPL. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0082H 1 TASK_MODE_PERIOD . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 EINT0. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A8H 1 P0CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 009AH 1 EINT1. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AAH 1 IPADC. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BEH 1 INT0F. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00BAH 1 P1CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0091H 1 _rescale . . . . . . . . . . . . . . . STATIC CODE PROC 0000H ----- value. . . . . . . . . . . . . . . . AUTO DATA U_INT 0000H 2 newMax . . . . . . . . . . . . . . . AUTO DATA U_INT 0004H 2 C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 51 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== oldMax . . . . . . . . . . . . . . . AUTO DATA FLOAT 0004H 4 r. . . . . . . . . . . . . . . . . . * REG * DATA FLOAT 0004H 4 EXEN2. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CBH 1 INT1F. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00BCH 1 P2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A1H 1 INT2F. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C6H 1 pt . . . . . . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 2 lc . . . . . . . . . . . . . . . . . MEMBER ----- U_INT 0000H 2 REN. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009CH 1 REMOTE_TYPE_FUT089 . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 ADCVH. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00AFH 1 T2MOD. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C9H 1 T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1 REMOTE_TYPE_RGB_CCT. . . . . . . . . . E_CONST ----- U_CHAR ----- 1 ADCVL. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00AEH 1 SET. . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 FALSE. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TIMER_MODE_TIMER . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TEMPERATURE_DOWN . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 INT0R. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00BBH 1 INT1R. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00BDH 1 BlinkLEDCnt. . . . . . . . . . . . . . PUBLIC XDATA U_CHAR 0042H 1 PriorityStatus . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 INT2R. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C7H 1 FUT089_BRIGHTNESS. . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 LOW. . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 FUT089_MODE_SPEED_UP . . . . . . . . . E_CONST ----- U_CHAR ----- 1 FUT089_COLOR . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 TIMER_MODE_CYCROUTINE. . . . . . . . . E_CONST ----- U_CHAR ----- 1 _ActiveTask. . . . . . . . . . . . . . EXTERN CODE PROC ----- ----- F0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D5H 1 _whiteValToMireds. . . . . . . . . . . STATIC CODE PROC 0000H ----- value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 maxValue . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 scaled . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2 DISABLE. . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 F1 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D1H 1 PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1 _timer_expired . . . . . . . . . . . . EXTERN CODE PROC ----- ----- IncDIR . . . . . . . . . . . . . . . . * TAG * ----- ENUM ----- ----- _SuspendTask . . . . . . . . . . . . . EXTERN CODE PROC ----- ----- FUT089_WHITE_MODE. . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 uint32_t . . . . . . . . . . . . . . . TYPEDEF ----- U_LONG ----- 4 _decodeCmd . . . . . . . . . . . . . . STATIC CODE PROC 0000H ----- pBulbInfo. . . . . . . . . . . . . . * REG * DATA PTR 0001H 3 len1 . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1 rescaledColor. . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 hue. . . . . . . . . . . . . . . . . AUTO DATA U_INT 0004H 2 level. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 packetCopy . . . . . . . . . . . . . * REG * DATA PTR 0001H 3 command. . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1 arg. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1 deviceId . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2 groupId. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 BULB_MODE_SCENE. . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1 MODULE INFORMATION: STATIC OVERLAYABLE C51 COMPILER V9.60.7.0 BULBID 08/17/2024 22:06:31 PAGE 52 CODE SIZE = 1088 ---- CONSTANT SIZE = 21 ---- XDATA SIZE = 67 ---- PDATA SIZE = ---- ---- DATA SIZE = 2 29 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)