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一次。
流程大概就是這樣.....
