/* Main loop */ int main() { CYBLE_API_RESULT_T apiResult; CyGlobalIntEnable; Initialization(); for(;;) { /* Delayed start of advertisement */ if(initCounter == 6) { initCounter = 7; WDT_DisableWcoEcoCounters(); apiResult = CyBle_GappStartAdvertisement(CYBLE_ADVERTISING_CUSTOM); if(apiResult != CYBLE_ERROR_OK) { CYASSERT(0); } } CyBle_ProcessEvents(); /* BLE stack processing state machine interface */ LowPower(); } }
/* 将E2中的一个值加1然后写回E2。由于E2中存的是BCD码,要转换为HEX,最后再转为BCD保存 函数名太汇编风格了 ----FIX ME---- len参数是不是不必要的? ----FIX ME---- */ void E2PINC(uint eeAddr, uchar len) { uint tmp; uchar eebuf[2]; //读固定存储0x68值的E2地址,以确定E2是否正确。【这种防护机制的作用有多大?】 Read512(eebuf, EE64_Check68_Add, 1); if(0x68 != eebuf[0]) { return; } Read512(eebuf, eeAddr, len); BHN(eebuf, eebuf, 2, 2); //BCD转HEX,名称太汇编了 tmp = eebuf[1]; tmp <<= 8; tmp += eebuf[0]; tmp++; eebuf[0] = (uchar)tmp; tmp >>= 8; eebuf[1] = (uchar)tmp; HB2(eebuf, eebuf, 2, 2); //HEX转BCD,名称太汇编了 if(LowPower()) return; Write512(eebuf, eeAddr, len); }
/* Format: AT#PowerSaving -r+enter*/ int16 iot_exec_atcmd_ps_set(puchar pCmdBuf, int16 AtCmdLen) { char *argv[MAX_OPTION_COUNT]; char *opString = "r::l:t:?"; char *endptr = NULL; int16 argc = 0; char opt = 0; uint8 Level = 0; uint32 SleepTime = 0; split_string_cmd(pCmdBuf, AtCmdLen, &argc, argv); opt = getopt(argc, argv, opString); while (opt != -1) { switch (opt) { case 'l': /*write power saving level*/ Level = (uint8)simple_strtol(optarg,&endptr,0); if ((Level>0) && (Level<=5)) { printf_high("[PS Lvl]=%d\n",Level); pIoTMlme->PMLevel = Level; } break; case 't': /*power sleep time*/ SleepTime = (uint32)simple_strtol(optarg,&endptr,0); if ((Level>0) && (Level<=5)) { printf_high("[PS] Lvl=%d Sleep=%u(us)\n",Level,SleepTime); LowPower(0,Level,SleepTime); } break; case 'r': /*read power saving level*/ printf_high("[PS Lvl]=%d\n",pIoTMlme->PMLevel); break; case '?': default: break; } opt = getopt(argc, argv, opString); } return 0; }