private unsafe void OnPressAndReleaseDelegateFunc(ref HotKey_API.IMC_HOTKEY_MSG_OBJECT msg) { byte[] byKeyBuf = new byte[HotKey_API.IMC_HOTKEY_BUFFER_SIZE]; unsafe { fixed(byte *pDst = byKeyBuf) { fixed(byte *pSrc = msg.buf) { IMCWin32API.CopyMemory(pDst, pSrc, HotKey_API.IMC_HOTKEY_BUFFER_SIZE); } } } BeginInvoke(ShowHotKeyStatusDelegateFunc, byKeyBuf); }
// The thread function of reading hot key status private void ReadHotKeyStatusWorkerThread() { ushort ret; HotKey_API.IMC_HOTKEY_MSG_OBJECT msg = new HotKey_API.IMC_HOTKEY_MSG_OBJECT(); byte[] byKeyBuf = new byte[HotKey_API.IMC_HOTKEY_BUFFER_SIZE]; nReadHotKeyStatusExit = 0; while (nReadHotKeyStatusExit == 0) { // Read hot key status from the registers ret = HotKey_API.HotKey_Read(out msg); if (ret != IMCAPIErrCode.IMC_ERR_NO_ERROR && ret != IMCAPIErrCode.IMC_ERR_TIME_OUT && ret != IMCAPIErrCode.IMC_ERR_NON_ANY_KEY_PRESS ) { ShowWanringMessage("Fails to read the values of key status", ret); AutoEvtReadHotKeyStatus.Set(); return; } unsafe { fixed(byte *pDst = byKeyBuf) { byte *pSrc = msg.buf; { IMCWin32API.CopyMemory(pDst, pSrc, HotKey_API.IMC_HOTKEY_BUFFER_SIZE); } } } BeginInvoke(ShowHotKeyStatusDelegateFunc, byKeyBuf); Thread.Sleep(10); } Thread.Sleep(0); AutoEvtReadHotKeyStatus.Set(); }
private void BtnLoadDefault_Click(object sender, EventArgs e) { // Load default value LastErrCode = HotKey_API.ControlPanel_LoadDefaultValue(); if (LastErrCode != IMCAPIErrCode.IMC_ERR_NO_ERROR) { ShowWanringMessage("Fails to load default value", LastErrCode); return; } // Reset the firmware into normal mode lock (LockReadWrite) { LastErrCode = HotKey_API.ControlPanel_ResetFirmware(HotKey_API.IMC_RESET_INTO_NORMAL_MODE); } if (LastErrCode != IMCAPIErrCode.IMC_ERR_NO_ERROR) { ShowWanringMessage("Fails to reset the firmware into normal mode", LastErrCode); return; } MessageBox.Show("The parameters are all reset !\nPlease re-open the HotKey dialog", "Warning"); IMCWin32API.PostMessage(Handle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); }
// The events private void HotKeyForm_Load(object sender, EventArgs e) { ChkShowScrollbar(PanelInner); nCOMPortNo = 1; FormWait = new IMCWaitForm(); FormWait.Show(); int nRealSize; try { // Get library version byte[] byLibVersion = new byte[HotKey_API.IMC_LIB_VERSION_SIZE]; unsafe { fixed(byte *pVersion = byLibVersion) { LastErrCode = HotKey_API.ControlPanel_GetVersion(pVersion); } } if (LastErrCode != IMCAPIErrCode.IMC_ERR_NO_ERROR) { ShowWanringMessage("Fails to get library version", LastErrCode); NotifyLibInitFail(Text); return; } StaticLibVersionValue.Text = ConvertByte2String(byLibVersion, byLibVersion.Length, out nRealSize); } catch (System.Exception ex) { bDllExist = false; MessageBox.Show(ex.Message, "Error"); IMCWin32API.PostMessage(Handle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); // IMCWin32API.PostQuitMessage(0); return; } // Initialize the ControlPanel library. hEvtInitLibraryDone = IMCWin32API.CreateEvent(IntPtr.Zero, true, false, null); Thread InitControlPanelLibraryThread = new Thread(InitControlPanelLibraryWorkerThread); InitControlPanelLibraryThread.Start(); // Wait for the worker thread IMCCmnFunc.WaitForWorkerThread(hEvtInitLibraryDone, 20); if (LastErrCode != IMCAPIErrCode.IMC_ERR_NO_ERROR) { ShowWanringMessage("Fails to initialize the library", LastErrCode); NotifyLibInitFail(Text); return; } // Get the firmware version HotKey_API.IMC_CONTROLPANEL_FIRMWARE_INFO info = new HotKey_API.IMC_CONTROLPANEL_FIRMWARE_INFO(); LastErrCode = HotKey_API.ControlPanel_GetFirmwareInformation(out info); if (LastErrCode != IMCAPIErrCode.IMC_ERR_NO_ERROR) { ShowWanringMessage("Fails to get firmware information", LastErrCode); NotifyLibInitFail(Text); return; } // Add the new future for TREK-306DH // If the model name was 306D that means it fully supports temperature sensor function unsafe { if (info.model_name[6] == 'D') { StaticTemperatureSensor.Enabled = true; StaticTemperatureSensorValue.Enabled = true; EditTemperatureSeonsorGetValue.Enabled = true; nEnabledTemperatureSensor = true; } } byte[] byFWVersion = new byte[HotKey_API.IMC_FIRMWARE_VERSION_SIZE]; string strFWFormatVersion = String.Empty; byte[] byFWModelName = new byte[HotKey_API.IMC_FIRMWARE_MODEL_NAME_SIZE]; unsafe { ConvertPointer2Array(info.version, byFWVersion, HotKey_API.IMC_FIRMWARE_VERSION_SIZE); FormatFirmwareVersion(byFWVersion, HotKey_API.IMC_FIRMWARE_VERSION_SIZE, ref strFWFormatVersion); ConvertPointer2Array(info.model_name, byFWModelName, HotKey_API.IMC_FIRMWARE_MODEL_NAME_SIZE); } StaticFirmwareVersionValue.Text = strFWFormatVersion; StaticFirmwareModelNameValue.Text = ConvertByte2String(byFWModelName, HotKey_API.IMC_FIRMWARE_MODEL_NAME_SIZE, out nRealSize); HotKey_API.HotKey_RegisterOnPressAndReleaseEventMonitor(OnPressAndReleaseDelegateCallbackFunc); // Start to read the hot key status StartReadHotKeyStatus(); SetReadDataModeString(); FormWait.Hide(); FormWait = null; // Create a worker thread to read the value of light sensor Thread LightSensorWorkerThread = new Thread(ReadLightSensorWorkerThread); LightSensorWorkerThread.IsBackground = true; LightSensorWorkerThread.Start(); IMCCmnFunc.SetWindowZOrder(Handle, IMCWin32API.HWND_TOPMOST); }
// The worker thread of initializing the control panel library public void InitControlPanelLibraryWorkerThread() { LastErrCode = HotKey_API.ControlPanel_Initialize((byte)nCOMPortNo); IMCWin32API.SetEvent(hEvtInitLibraryDone); }