AMI在抓溫度、電壓等等等,是用callback function達成的,記錄一下整個流程。

1. 首先在.SD裡先宣告如下:

#if EFI_SPECIFICATION_VERSION>0x20000
INTERACTIVE_TEXT(STRING_TOKEN(STR_EMPTY), STRING_TOKEN(STR_NCT6106D_SYSTEM_TEMP1), STRING_TOKEN(STR_NCT6106D_SYSTEM_TEMP1_VALUE), AUTO_ID(HWM_INTERACTIVE_KEY))
#else
text
help = STRING_TOKEN(STR_EMPTY),
text = STRING_TOKEN(STR_NCT6106D_SYSTEM_TEMP1),
text = STRING_TOKEN(STR_NCT6106D_SYSTEM_TEMP1_VALUE),
flags = INTERACTIVE,
key = HWM_INTERACTIVE_KEY;
#endif

2. ELink:

CallBack應該是每100ms會去polling一次。

ELINK
Name = "ITEM_CALLBACK(ADVANCED_FORM_SET_CLASS,0,HWM_INTERACTIVE_KEY,NCT6106D_HWM_CallBack),"
Parent = "SetupItemCallbacks"
Token = "NCT6106D_HWM_PRESENT" "=" "1"
InvokeOrder = AfterParent
End

3. 在NCT6106DSetup.c裡有,NCT6106D_HWM_CallBack{},主要的code如下:

for(i=0; OemHwmExternalFunList[i]; i++)
{
OemHwmExternalFunList[i](&Data);
HHMCommon(Data.Value, Data.Type, Data.Token, Data.OddPos, HiiHandle);
}

4.其中OemHwmExternalFunList定義為:

extern HWM_EXTERNAL_FUN HWM_External_Fun_LIST EndOfFunList;
static HWM_EXTERNAL_FUN* OemHwmExternalFunList[] = {HWM_External_Fun_LIST NULL};

5. 而HWM_External_Fun_LIST定義在NCT6106D.MAK內:

......HWM_External_Fun_LIST=$(HwmExtFunList)......

6. HwmExtFunList 在IO_NCT6106D.SDL內有定義:

ELINK
Name = "HwmExtFunList"
InvokeOrder = ReplaceParent
End

7.其它所以抓電壓,溫度的procedure都是設成elink在SDL內,範例如下:

ELINK
Name = "GetSYSThermistorTemp,"
Parent = "HwmExtFunList"
Help = "elink HWM external function in NCT6106DHwnOemHooks.C to HWM external function list."
Token = "NCT6106D_HWM_PRESENT" "=" "1"
InvokeOrder = AfterParent
End

ELINK
Name = "GetCPUDiodeTemp,"
Parent = "HwmExtFunList"
Help = "elink HWM external function in NCT6106DHwnOemHooks.C to HWM external function list."
Token = "NCT6106D_HWM_PRESENT" "=" "1"
InvokeOrder = AfterParent
End

8.所以第3點的迴圈,for(i=0; OemHwmExternalFunList[i]; i++),會把所以抓溫度、電壓的跑一遍,每100ms polling一次。

流程大概就是這樣.....

文章標籤
全站熱搜
創作者介紹
創作者 pipiwau 的頭像
pipiwau

pipiwau的部落格

pipiwau 發表在 痞客邦 留言(0) 人氣(1,769)