TSSASlider::TSSASlider(UINT8 control_num) : _callbacks() { TSS_SetControlPrivateData(control_num, static_cast<void *>(this)); setControlStruct(static_cast<TSS_CSASlider*>(TSS_GetControlStruct(control_num))); /* Explicit call, no virtual inside ctor */ TSSASlider::enable(TSS_MOVEMENT); TSSASlider::enable(TSS_CONTROL); TSSASlider::enable(TSS_CALLBACK); }
/*FUNCTION*---------------------------------------------------------------- * * Function Name : hmi_tss_get_value * Returned Value : bool * Comments : * This function gets value of requested TSS element. * *END*--------------------------------------------------------------------*/ static bool hmi_tss_get_value(HMI_PROVIDER_STRUCT_PTR provider_struct, uint32_t uid, uint32_t *value) { /* get context structure */ HMI_TSS_CONTEXT_STRUCT_PTR context_struct = (HMI_TSS_CONTEXT_STRUCT_PTR) provider_struct->CONTEXT_PTR; uint8_t i; bool result = FALSE; uint8_t electrodes_status; uint8_t electrode_index; /* get TSS control structure */ uint8_t *tss_control_struct_ptr = (uint8_t *)TSS_GetControlStruct(context_struct->CONTROL_NUMBER); if (tss_control_struct_ptr == NULL || context_struct == NULL) { return result; } if ((((TSS_CSRotary *)tss_control_struct_ptr)->ControlId.ControlType) == TSS_CT_ROTARY) /* rotary */ { if (context_struct->TSS_TABLE[0].UID == uid) { *value = (*(TSS_CSRotary *)tss_control_struct_ptr).StaticStatus.Position; /* actual absolute position */ result = TRUE; } } else if ((((TSS_CSSlider *)tss_control_struct_ptr)->ControlId.ControlType) == TSS_CT_SLIDER) /* slider */ { if (context_struct->TSS_TABLE[0].UID == uid) { *value = (*(TSS_CSSlider *)tss_control_struct_ptr).StaticStatus.Position; /* actual absolute position */ result = TRUE; } } else if ((((TSS_CSKeypad *)tss_control_struct_ptr)->ControlId.ControlType) == TSS_CT_KEYPAD) /* keypad */ { for (i=0; i<context_struct->TSS_COUNT; i++) { if (context_struct->TSS_TABLE[i].UID == uid) { /* get index */ electrode_index = (TSS_GetControlFirstElectrodeIndex(context_struct->CONTROL_NUMBER) + i); /* electrodes status */ electrodes_status = TSS_GetSystemConfig(System_ElectrodeStatus_Register + (electrode_index/8u)); /* status of requested electrode */ *value = (uint32_t)(electrodes_status >> (electrode_index % 8u)) & 0x1; result = TRUE; break; } } }
/*FUNCTION*---------------------------------------------------------------- * * Function Name : hmi_tss_slider_callback * Returned Value : void * Comments : * This function is slider callback. * *END*--------------------------------------------------------------------*/ void hmi_tss_slider_callback(TSS_CONTROL_ID u8ControlId) { /* get provider struct from TSS private data */ HMI_PROVIDER_STRUCT_PTR provider_struct = (HMI_PROVIDER_STRUCT_PTR)TSS_GetControlPrivateData(u8ControlId.ControlNumber); /* get context data */ HMI_TSS_CONTEXT_STRUCT_PTR context_struct = (HMI_TSS_CONTEXT_STRUCT_PTR) provider_struct->CONTEXT_PTR; /* check if client is attached to provider */ if (context_struct == NULL || context_struct->CLIENT_HANDLE == NULL) { return; } if ((*(TSS_CSSlider *)TSS_GetControlStruct(context_struct->CONTROL_NUMBER)).DynamicStatus.Movement) { context_struct->CLIENT_HANDLE->ON_CHANGE(context_struct->CLIENT_HANDLE, context_struct->TSS_TABLE[0].UID, HMI_VALUE_MOVEMENT); } }
/*FUNCTION*---------------------------------------------------------------- * * Function Name : hmi_tss_keypad_callback * Returned Value : void * Comments : * This function is callback for TSS buttons. * *END*--------------------------------------------------------------------*/ void hmi_tss_keypad_callback(TSS_CONTROL_ID u8ControlId) { /* get provider structure from TSS private data */ HMI_PROVIDER_STRUCT_PTR provider_struct = (HMI_PROVIDER_STRUCT_PTR)TSS_GetControlPrivateData(u8ControlId.ControlNumber); /* get context data */ HMI_TSS_CONTEXT_STRUCT_PTR context_struct = (HMI_TSS_CONTEXT_STRUCT_PTR)provider_struct->CONTEXT_PTR; /* get keypad structure pointer */ TSS_CSKeypad *keypad_structure = ((TSS_CSKeypad *)TSS_GetControlStruct(context_struct->CONTROL_NUMBER)); uint8_t u8Event; /* 8 bits local variable used to store the event information */ uint8_t flag; /* push / release flag */ /* check if client is attached to provider */ if (context_struct == NULL || context_struct->CLIENT_HANDLE == NULL) { return; } /* While unread events are in the buffer */ while (!TSS_KEYPAD_BUFFER_EMPTY( *keypad_structure)) { /* Read the buffer and store the event in the u8Event variable */ TSS_KEYPAD_BUFFER_READ(u8Event, * keypad_structure); if (u8Event & TSS_KEYPAD_BUFFER_RELEASE_FLAG) { u8Event = (uint8_t)(u8Event & TSS_KEYPAD_BUFFER_KEY_MASK); /* Get key index */ flag = HMI_VALUE_RELEASE; } else { flag = HMI_VALUE_PUSH; } /* check if key index is registered in provider */ if (u8Event >= context_struct->TSS_COUNT) { return; } context_struct->CLIENT_HANDLE->ON_CHANGE(context_struct->CLIENT_HANDLE, context_struct->TSS_TABLE[u8Event].UID, flag); } }