/**********************************?(C)?COPYRIGHT?******************************* *?File?Name??????????:?KEY.c *?Author?????????????:?WCH *?Version????????????:?V1.0 *?Date???????????????:?2014/05/12 *?Description????????:? *******************************************************************************/ /******************************************************************************/ /*?頭文件包含?*/ #include?"CH57x_common.h" #include?"HAL.h" /************************************************************************************************** ?*????????????????????????????????????????GLOBAL?VARIABLES ?**************************************************************************************************/ uint8?Hal_KeyIntEnable;???????????/*?interrupt?enable/disable?flag?*/ //?Registered?keys?task?ID,?initialized?to?NOT?USED. static?uint8?registeredKeysTaskID?=?TASK_NO_TASK; static?uint8?halKeySavedKeys;?????/*?保留按鍵最后的狀態(tài),用于查詢是否有鍵值變化?*/ static?uint8?KeyConfigFlag; ????/*?按鍵是否配置標(biāo)志位?*/ /************************************************************************************************** ?*????????????????????????????????????????FUNCTIONS?-?Local ?**************************************************************************************************/ static?halKeyCBack_t?pHalKeyProcessFunction; ????/*?callback?function?*/ /************************************************************************************************** ?*?@fn??????HAL_KeyInit ?* ?*?@brief???Initilize?Key?Service ?* ?*?@param???none ?* ?*?@return??None ?**************************************************************************************************/ void?HAL_KeyInit(?void?) { ??/*?Initialize?previous?key?to?0?*/ ??halKeySavedKeys?=?0; ??/*?Initialize?callback?function?*/ ??pHalKeyProcessFunction??=?NULL; ??/*?Start?with?key?is?not?configured?*/ ??KeyConfigFlag?=?FALSE; ??KEY1_DIR; ??KEY1_PU; KEY2_DIR; ??KEY2_PU; KEY3_DIR; ??KEY3_PU; KEY4_DIR; ??KEY4_PU; KEY5_DIR; ??KEY5_PU; KEY6_DIR; ??KEY6_PU; KEY7_DIR; ??KEY7_PU; KEY8_DIR; ??KEY8_PU; KEY9_DIR; ??KEY9_PU; KEY10_DIR; ??KEY10_PU; KEY11_DIR; ??KEY11_PU; KEY12_DIR; ??KEY12_PU; ??HalKeyConfig(?HAL_KEY_INTERRUPT_ENABLE,?HalKeyCallback?); } void?HAL_KEY_RegisterForKeys(?tmosTaskID?id?) { registeredKeysTaskID?=?id; } /************************************************************************************************** ?*?@fn??????HalKeyConfig ?* ?*?@brief???Configure?the?Key?serivce ?* ?*?@param???interruptEnable?-?TRUE/FALSE,?enable/disable?interrupt ?*??????????cback?-?pointer?to?the?CallBack?function ?* ?*?@return??None ?**************************************************************************************************/ void?HalKeyConfig?(uint8?interruptEnable,?halKeyCBack_t?cback) { ??/*?Enable/Disable?Interrupt?or?*/ ??Hal_KeyIntEnable?=?interruptEnable; ??/*?Register?the?callback?fucntion?*/ ??pHalKeyProcessFunction?=?cback; ??/*?Determine?if?interrupt?is?enable?or?not?*/ ??if?(Hal_KeyIntEnable){ ????/*?Do?this?only?after?the?hal_key?is?configured?-?to?work?with?sleep?stuff?*/ ????if?(KeyConfigFlag?==?TRUE){ ??????tmos_stop_task(?halTaskID,?HAL_KEY_EVENT?);??/*?Cancel?polling?if?active?*/ ????} ??} ??else{????/*?Interrupts?NOT?enabled?*/ ????tmos_start_task(?halTaskID,?HAL_KEY_EVENT,?HAL_KEY_POLLING_VALUE);????/*?Kick?off?polling?*/ ??} ??/*?Key?now?is?configured?*/ ??KeyConfigFlag?=?TRUE; } /********************************************************************* ?*?@fn??????OnBoard_SendKeys ?* ?*?@brief???Send?"Key?Pressed"?message?to?application. ?* ?*?@param???keys??-?keys?that?were?pressed ?*??????????state?-?shifted ?* ?*?@return??status ?*********************************************************************/ uint8?OnBoard_SendKeys(?uint8?keys,?uint8?state?) { ??keyChange_t?*msgPtr; ??if?(?registeredKeysTaskID?!=?TASK_NO_TASK?){ ????//?Send?the?address?to?the?task ????msgPtr?=?(keyChange_t?*)tmos_msg_allocate(?sizeof(keyChange_t)?); ????if?(?msgPtr?){ ??????msgPtr->hdr.event?=?KEY_CHANGE; ??????msgPtr->state?=?state; ??????msgPtr->keys?=?keys; ??????tmos_msg_send(?registeredKeysTaskID,?(uint8?*)msgPtr?); ????} ????return?(?SUCCESS?); ??} ??else{ ????return?(?FAILURE?); ??} } /********************************************************************* ?*?@fn??????OnBoard_KeyCallback ?* ?*?@brief???Callback?service?for?keys ?* ?*?@param???keys??-?keys?that?were?pressed ?*??????????state?-?shifted ?* ?*?@return??void ?*********************************************************************/ void?HalKeyCallback?(?uint8?keys,?uint8?state?) { ??(void)state; ??if?(?OnBoard_SendKeys(?keys,?state?)?!=?SUCCESS?){ ????//?Process?SW1?here ????if?(?keys?&?HAL_KEY_SW_1?){??//?Switch?1 } ????//?Process?SW2?here ????if?(?keys?&?HAL_KEY_SW_2?){??//?Switch?2 ????} ????//?Process?SW3?here ????if?(?keys?&?HAL_KEY_SW_3?){??//?Switch?3 ????} ????//?Process?SW4?here ????if?(?keys?&?HAL_KEY_SW_4?){??//?Switch?4 ????} ?//?Process?SW5?here ????if?(?keys?&?HAL_KEY_SW_5?)??//?Switch?5 ????{ ????} ????//?Process?SW6?here ????if?(?keys?&?HAL_KEY_SW_6?)??//?Switch?6 ????{ ????} ????if?(?keys?&?HAL_KEY_SW_7?)??//?Switch?7 ????{ ????} ????if?(?keys?&?HAL_KEY_SW_8?)??//?Switch?8 ????{ ????} ?????if?(?keys?&?HAL_KEY_SW_9?)??//?Switch?9 ????{ ????} ?????if?(?keys?&?HAL_KEY_SW_10?)??//?Switch?9 ????{ ????} ?????if?(?keys?&?HAL_KEY_SW_11?)??//?Switch?9 ????{ ????} ?????if?(?keys?&?HAL_KEY_SW_12?)??//?Switch?9 ????{ ????} ??} } /************************************************************************************************** ?*?@fn??????HalKeyRead ?* ?*?@brief???Read?the?current?value?of?a?key ?* ?*?@param???None ?* ?*?@return??keys?-?current?keys?status ?**************************************************************************************************/ uint8?HalKeyRead?(?void?) { ??uint8?keys?=?0; ??if?(HAL_PUSH_BUTTON1()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_1; ??} ??if?(HAL_PUSH_BUTTON2()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_2; ??} ??if?(HAL_PUSH_BUTTON3()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_3; ??} ??if?(HAL_PUSH_BUTTON4()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_4; ??} if?(HAL_PUSH_BUTTON5()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_5; ??} if?(HAL_PUSH_BUTTON6()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_6; ??} if?(HAL_PUSH_BUTTON7()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_7; ??} if?(HAL_PUSH_BUTTON8()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_8; ??} if?(HAL_PUSH_BUTTON9()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_9; ??} if?(HAL_PUSH_BUTTON10()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_10; ??} if?(HAL_PUSH_BUTTON11()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_11; ??} if?(HAL_PUSH_BUTTON12()){?//讀按鍵1 ????keys?|=?HAL_KEY_SW_12; ??} ??return?keys; } /************************************************************************************************** ?*?@fn??????HAL_KeyPoll ?* ?*?@brief???Called?by?hal_driver?to?poll?the?keys ?* ?*?@param???None ?* ?*?@return??None ?**************************************************************************************************/ void?HAL_KeyPoll?(void) { ??uint8?keys?=?0; ??if(?HAL_PUSH_BUTTON1()?){ ????keys?|=?HAL_KEY_SW_1; ??} ??if(?HAL_PUSH_BUTTON2()?){ ????keys?|=?HAL_KEY_SW_2; ??} ??if(?HAL_PUSH_BUTTON3()?){ ????keys?|=?HAL_KEY_SW_3; ??} ??if(?HAL_PUSH_BUTTON4()?){ ????keys?|=?HAL_KEY_SW_4; ??} ??if(?HAL_PUSH_BUTTON5()?){ ????keys?|=?HAL_KEY_SW_5; ??} ??if(?HAL_PUSH_BUTTON6()?){ ????keys?|=?HAL_KEY_SW_6; ??} ??if(?HAL_PUSH_BUTTON7()?){ ????keys?|=?HAL_KEY_SW_7; ??} ??if(?HAL_PUSH_BUTTON8()?){ ????keys?|=?HAL_KEY_SW_8; ??} ??if(?HAL_PUSH_BUTTON9()?){ ????keys?|=?HAL_KEY_SW_9; ??} ??if(?HAL_PUSH_BUTTON10()?){ ????keys?|=?HAL_KEY_SW_10; ??} ??if(?HAL_PUSH_BUTTON11()?){ ????keys?|=?HAL_KEY_SW_11; ??} ??if(?HAL_PUSH_BUTTON12()?){ ????keys?|=?HAL_KEY_SW_12; ??} ??if?(!Hal_KeyIntEnable){ ?????????????/*?中斷未使能?*/ ????if(keys?==?halKeySavedKeys){?????????/*?Exit?-?since?no?keys?have?changed?*/ ??????return; } halKeySavedKeys?=?keys; ???????/*?Store?the?current?keys?for?comparation?next?time?*/ ??} ??/*?Invoke?Callback?if?new?keys?were?depressed?*/ ??if?(keys?&&?(pHalKeyProcessFunction)){ ????(pHalKeyProcessFunction)?(keys,?HAL_KEY_STATE_NORMAL); ??} } /********************************?endfile?@?key?******************************/
KEY.H
/**********************************?(C)?COPYRIGHT?******************************* *?File?Name??????????:?KEY.h *?Author?????????????:?WCH *?Version????????????:?V1.0 *?Date???????????????:?2016/04/12 *?Description????????:? *******************************************************************************/ /******************************************************************************/ #ifndef?__KEY_H #define?__KEY_H #ifdef?__cplusplus extern?"C" { #endif /************************************************************************************************** ?*??????????????????????????????????????????????MACROS ?**************************************************************************************************/ #define?KEY_CHANGE???????????????? ?0xC0????//?Key?message #define?HAL_KEY_RISING_EDGE??? ???0 #define?HAL_KEY_FALLING_EDGE?? ???1 #define?HAL_KEY_DEBOUNCE_VALUE?? ???25 #define?HAL_KEY_POLLING_VALUE??? ???100 /*?Interrupt?option?-?Enable?or?disable?*/ #define?HAL_KEY_INTERRUPT_DISABLE????0x00 #define?HAL_KEY_INTERRUPT_ENABLE?????0x01 /*?Key?state?-?shift?or?nornal?*/ #define?HAL_KEY_STATE_NORMAL?????????0x00 #define?HAL_KEY_STATE_SHIFT??????????0x01 /*?Switches?(keys)?*/ #define?HAL_KEY_SW_1?0x0001?? #define?HAL_KEY_SW_2?0x0002?? #define?HAL_KEY_SW_3?0x0004?? #define?HAL_KEY_SW_4?0x0008?? #define?HAL_KEY_SW_5?0x0010?? #define?HAL_KEY_SW_6?0x0020?? #define?HAL_KEY_SW_7?0x0040?? #define?HAL_KEY_SW_8?0x0080?? #define?HAL_KEY_SW_9?0x0100 #define?HAL_KEY_SW_10?0x0200 #define?HAL_KEY_SW_11?0x0400 #define?HAL_KEY_SW_12?0x0800 ?? ?/*?按鍵定義?*/ /*?1?-?KEY?*/ ??#define?KEY1_BV???????????BV(23)???//引腳定義 ??#define?KEY2_BV???????????GPIO_Pin_1???? #define?KEY3_BV? GPIO_Pin_2???? ??#define?KEY4_BV???????????GPIO_Pin_3???? #define?KEY5_BV???????????GPIO_Pin_4???? ??#define?KEY6_BV???????????GPIO_Pin_5???? ??#define?KEY7_BV? GPIO_Pin_6???? #define?KEY8_BV???????????GPIO_Pin_7???? ??#define?KEY9_BV???????????GPIO_Pin_8???? ??#define?KEY10_BV??????????GPIO_Pin_9???? #define?KEY11_BV??????????GPIO_Pin_10???? #define?KEY12_BV??????????GPIO_Pin_11??? ?? #define?KEY1_PU???????? (R32_PB_PU?|=?KEY1_BV)???//上拉電阻使能 ??#define?KEY2_PU???????? (R32_PB_PU?|=?KEY2_BV) ??#define?KEY3_PU???????? (R32_PB_PU?|=?KEY3_BV) ??#define?KEY4_PU???????? (R32_PB_PU?|=?KEY4_BV) #define?KEY5_PU???????? (R32_PB_PU?|=?KEY5_BV) ??#define?KEY6_PU???????? (R32_PB_PU?|=?KEY6_BV) ??#define?KEY7_PU???????? (R32_PB_PU?|=?KEY7_BV) ??#define?KEY8_PU???????? (R32_PB_PU?|=?KEY8_BV) #define?KEY9_PU???????? (R32_PB_PU?|=?KEY9_BV) ??#define?KEY10_PU????????(R32_PB_PU?|=?KEY10_BV) ??#define?KEY11_PU????????(R32_PB_PU?|=?KEY11_BV) ??#define?KEY12_PU????????(R32_PB_PU?|=?KEY12_BV) ??#define?KEY1_DIR??????? (R32_PB_DIR?&=?~KEY1_BV)??//設(shè)置成輸入模式 #define?KEY2_DIR??????? (R32_PB_DIR?&=?~KEY2_BV) #define?KEY3_DIR??????? (R32_PB_DIR?&=?~KEY3_BV) #define?KEY4_DIR??????? (R32_PB_DIR?&=?~KEY4_BV) #define?KEY5_DIR??????? (R32_PB_DIR?&=?~KEY5_BV) #define?KEY6_DIR??????? (R32_PB_DIR?&=?~KEY6_BV) #define?KEY7_DIR??????? (R32_PB_DIR?&=?~KEY7_BV) #define?KEY8_DIR??????? (R32_PB_DIR?&=?~KEY8_BV) #define?KEY9_DIR??????? (R32_PB_DIR?&=?~KEY9_BV) #define?KEY10_DIR???????(R32_PB_DIR?&=?~KEY10_BV) #define?KEY11_DIR???????(R32_PB_DIR?&=?~KEY11_BV) #define?KEY12_DIR???????(R32_PB_DIR?&=?~KEY12_BV) ??#define?KEY1_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY1_BV))??//沒有按鍵按下時(shí)1111(由于上拉了),如第第一個(gè)按下,1110?然后&上第一個(gè)按鍵的鍵碼0001?結(jié)果變成0000?后再取反變成1111 #define?KEY2_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY2_BV)) #define?KEY3_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY3_BV)) #define?KEY4_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY4_BV)) #define?KEY5_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY5_BV)) #define?KEY6_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY6_BV)) #define?KEY7_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY7_BV)) #define?KEY8_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY8_BV)) #define?KEY9_IN???????? (ACTIVE_LOW(R32_PB_PIN&KEY9_BV)) #define?KEY10_IN????????(ACTIVE_LOW(R32_PB_PIN&KEY10_BV)) #define?KEY11_IN????????(ACTIVE_LOW(R32_PB_PIN&KEY11_BV)) #define?KEY12_IN????????(ACTIVE_LOW(R32_PB_PIN&KEY12_BV)) #define?HAL_PUSH_BUTTON1()????????(?KEY1_IN?)?//添加自定義按鍵 #define?HAL_PUSH_BUTTON2()????????(?KEY2_IN??) #define?HAL_PUSH_BUTTON3()????????(?KEY3_IN?)? #define?HAL_PUSH_BUTTON4()????????(?KEY4_IN?)? #define?HAL_PUSH_BUTTON5()????????(?KEY5_IN?)?//添加自定義按鍵 #define?HAL_PUSH_BUTTON6()????????(?KEY6_IN??) #define?HAL_PUSH_BUTTON7()????????(?KEY7_IN?)? #define?HAL_PUSH_BUTTON8()????????(?KEY8_IN?)? #define?HAL_PUSH_BUTTON9()????????(?KEY9_IN?)?//添加自定義按鍵 #define?HAL_PUSH_BUTTON10()???????(?KEY10_IN??) #define?HAL_PUSH_BUTTON11()???????(?KEY11_IN?)? #define?HAL_PUSH_BUTTON12()???????(?KEY12_IN?)? /************************************************************************************************** ?*?TYPEDEFS ?**************************************************************************************************/ typedef?void?(*halKeyCBack_t)?(uint8?keys,?uint8?state); typedef?struct { ??tmos_event_hdr_t?hdr; ??uint8??state;?//?shift ??uint8??keys;??//?keys }?keyChange_t; /************************************************************************************************** ?*?????????????????????????????????????????????GLOBAL?VARIABLES ?**************************************************************************************************/ extern?uint8?Hal_KeyIntEnable; /********************************************************************* ?*?FUNCTIONS ?*/ /* ?*?Initialize?the?Key?Service ?*/ void?HAL_KeyInit(?void?); /* ?*?This?is?for?internal?used?by?hal_driver ?*/ void?HAL_KeyPoll(?void?); /* ?*?Register?the?Key?Service ?*/ void?HAL_KEY_RegisterForKeys(?tmosTaskID?id?); /* ?*?Configure?the?Key?Service ?*/ void?HalKeyConfig(?uint8?interruptEnable,?const?halKeyCBack_t?cback); /* ?*?Read?the?Key?callback ?*/ void?HalKeyCallback?(?uint8?keys,?uint8?state?); /* ?*?Read?the?Key?status ?*/ uint8?HalKeyRead(?void); /************************************************************************************************** **************************************************************************************************/ #ifdef?__cplusplus } #endif #endif
peripheral.C
這個(gè)只是相關(guān)key的代碼
HAL_KEY_RegisterForKeys(Peripheral_TaskID); /********************************************************************* ?*?@fn??????Peripheral_ProcessTMOSMsg ?* ?*?@brief???Process?an?incoming?task?message. ?* ?*?@param???pMsg?-?message?to?process ?* ?*?@return??none ?*/ static?void?Peripheral_ProcessTMOSMsg(?tmos_event_hdr_t?*pMsg?) { ??switch?(?pMsg->event?){ ??case?KEY_CHANGE: PRINT("KEY?changed?\n"); ??????Peripheral_HandleKeys(?((keyChange_t?*)pMsg)->state,? ??????????????????????????????????????((keyChange_t?*)pMsg)->keys?); ??????break; ? ????case?GATT_MSG_EVENT: ??????//?Process?GATT?message ??????Peripheral_ProcessGATTMsg(?(gattMsgEvent_t?*)pMsg?); ??????break; default: break; ??} } /********************************************************************* ?*?@fn??????simpleBLEPeripheral_HandleKeys ?* ?*?@brief???Handles?all?key?events?for?this?device. ?* ?*?@param???shift?-?true?if?in?shift/alt. ?*?@param???keys?-?bit?field?for?key?events.?Valid?entries: ?*?????????????????HAL_KEY_SW_2 ?*?????????????????HAL_KEY_SW_1 ?* ?*?@return??none ?*/ static?void?Peripheral_HandleKeys(?uint8?shift,?uint16?keys?) { ??uint8?char1?=?1; ??uint8?char2?=?2; ??uint8?char3?=?3; ??uint8?char4?=?4; ??uint8?char5?=?5; ??uint8?char6?=?6; ??uint8?char7?=?7; ??uint8?char8?=?8; ??uint8?char9?=?9; ??uint8?char10?=?16;??//假如此處的值為10,那么手機(jī)端顯示0A,10進(jìn)制的10是16進(jìn)制的0A,10進(jìn)制的16是16進(jìn)制的10 ??uint8?char11?=?17;?//同上 ??uint8?char12?=?18;?//同上 ??uint8?char21?=?153;?//同上 ???if?(?keys?&?HAL_KEY_SW_1??) ??{ ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char1); ?????button_values?=?1; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?? ???if?(?keys?&?HAL_KEY_SW_2?) ??{ ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char2); ?????button_values?=?2; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if??(?keys?&?HAL_KEY_SW_3?) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char3);? ?????button_values?=?3; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if?(?keys?&?HAL_KEY_SW_4?) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char4); ?????button_values?=?4; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if??(?keys?&?HAL_KEY_SW_5??) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char5); ?????button_values?=?5; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if?(?keys?&?HAL_KEY_SW_6??) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char6); ?????button_values?=?6; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if?(?keys?&?HAL_KEY_SW_7??) ??{ ??? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char7); ?????button_values?=?7; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if??(?keys?&?HAL_KEY_SW_8?) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char8); ?????button_values?=?8; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if??(?keys?&?HAL_KEY_SW_9?) ?{ ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char9); ?????button_values?=?9; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ??if??(?keys?&?HAL_KEY_SW_10) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char10); ?????button_values?=?16; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if??(?keys?&?HAL_KEY_SW_11?) ??{ ???? ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char11); ?????button_values?=?17; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ?if??(?keys?&?HAL_KEY_SW_12??) ??{ ?????SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char12); ?????button_values?=?18; ?????HalLedSet(HAL_LED_2,?HAL_LED_MODE_ON); ??} ??if?(keys?==?0x00){ ???SimpleProfile_SetParameter(?SIMPLEPROFILE_CHAR4,?sizeof(uint8),?&char21); ???}? ??? }