/** * @brief Period elapsed callback in non blocking mode * @param htim : TIM handle * @retval None */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { __HAL_TIM_SET_COUNTER(htim, 0); switch (KB_state) { case BTN_Down: if ((len_KB_str == 0) || (pKB_str == NULL)) { HAL_TIM_Base_Stop_IT(htim); return; } KB_state = BTN_Up; char2KBID(*pKB_str); SEGGER_RTT_printf(0, "USB send char %c \r\n" , *pKB_str); pKB_str++; len_KB_str--; USBD_HID_SendReport(&USBD_Device, KB_USBBuf, HID_KB_SIZE); __HAL_TIM_SET_COUNTER(&TimHandle, 0); __HAL_TIM_SET_AUTORELOAD(&TimHandle, 200-1); // 200ms HAL_TIM_Base_Start_IT(&TimHandle); break; case BTN_Up: memset(KB_USBBuf, 0, 9); KB_USBBuf[0] = 1; USBD_HID_SendReport(&USBD_Device, KB_USBBuf, HID_KB_SIZE); if (len_KB_str == 0) { pKB_str = NULL; HAL_TIM_Base_Stop_IT(htim); } else { KB_state = BTN_Down; __HAL_TIM_SET_COUNTER(&TimHandle, 0); __HAL_TIM_SET_AUTORELOAD(&TimHandle, 200-1); // 200ms HAL_TIM_Base_Start_IT(&TimHandle); } break; default: pKB_str = NULL; HAL_TIM_Base_Stop_IT(htim); break; } }
void USB_KB_type(const char *str, uint8_t len) { if (pKB_str != NULL) { return; } if (len == 0) { return; } strcpy(KB_strBuf, str); KB_state = BTN_Up; pKB_str = KB_strBuf; char2KBID(*pKB_str++); len_KB_str = len - 1; USBD_HID_SendReport(&USBD_Device, KB_USBBuf, HID_KB_SIZE); __HAL_TIM_SET_COUNTER(&TimHandle, 0); __HAL_TIM_SET_AUTORELOAD(&TimHandle, 50-1); // 50ms HAL_TIM_Base_Start_IT(&TimHandle); }
/** * @brief SYSTICK callback. * @param None * @retval None */ void HAL_SYSTICK_Callback(void) { uint8_t *buf; uint16_t Temp_X, Temp_Y = 0x00; uint16_t NewARR_X, NewARR_Y = 0x00; if (DemoEnterCondition != 0x00) { buf = USBD_HID_GetPos(); if((buf[1] != 0) ||(buf[2] != 0)) { USBD_HID_SendReport (&hUSBDDevice, buf, 4); } Counter ++; if (Counter == 10) { /* Reset Buffer used to get accelerometer values */ Buffer[0] = 0; Buffer[1] = 0; /* Disable All TIM4 Capture Compare Channels */ HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2); HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3); HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_4); /* Read Acceleration*/ BSP_ACCELERO_GetXYZ(Buffer); /* Set X and Y positions */ X_Offset = Buffer[0]; Y_Offset = Buffer[1]; /* Update New autoreload value in case of X or Y acceleration*/ /* Basic acceleration X_Offset and Y_Offset are divide by 40 to fir with ARR range */ NewARR_X = TIM_ARR - ABS(X_Offset/40); NewARR_Y = TIM_ARR - ABS(Y_Offset/40); /* Calculation of Max acceleration detected on X or Y axis */ Temp_X = ABS(X_Offset/40); Temp_Y = ABS(Y_Offset/40); MaxAcceleration = MAX_AB(Temp_X, Temp_Y); if(MaxAcceleration != 0) { /* Reset CNT to a lowest value (equal to min CCRx of all Channels) */ __HAL_TIM_SET_COUNTER(&htim4,(TIM_ARR-MaxAcceleration)/2); if (X_Offset < ThreadholdAcceleroLow) { /* Sets the TIM4 Capture Compare for Channel1 Register value */ /* Equal to NewARR_X/2 to have duty cycle equal to 50% */ __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, NewARR_X/2); /* Time base configuration */ __HAL_TIM_SET_AUTORELOAD(&htim4, NewARR_X); /* Enable TIM4 Capture Compare Channel1 */ HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); } else if (X_Offset > ThreadholdAcceleroHigh) { /* Sets the TIM4 Capture Compare for Channel3 Register value */ /* Equal to NewARR_X/2 to have duty cycle equal to 50% */ __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, NewARR_X/2); /* Time base configuration */ __HAL_TIM_SET_AUTORELOAD(&htim4, NewARR_X); /* Enable TIM4 Capture Compare Channel3 */ HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); } if (Y_Offset > ThreadholdAcceleroHigh) { /* Sets the TIM4 Capture Compare for Channel2 Register value */ /* Equal to NewARR_Y/2 to have duty cycle equal to 50% */ __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2,NewARR_Y/2); /* Time base configuration */ __HAL_TIM_SET_AUTORELOAD(&htim4, NewARR_Y); /* Enable TIM4 Capture Compare Channel2 */ HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2); } else if (Y_Offset < ThreadholdAcceleroLow) { /* Sets the TIM4 Capture Compare for Channel4 Register value */ /* Equal to NewARR_Y/2 to have duty cycle equal to 50% */ __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, NewARR_Y/2); /* Time base configuration */ __HAL_TIM_SET_AUTORELOAD(&htim4, NewARR_Y); /* Enable TIM4 Capture Compare Channel4 */ HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); } } Counter = 0x00; } } }
void LongPulseLaserWork_Process(uint16_t pic_id) { bool update = false; uint16_t new_pic_id = pic_id; static int timeout_cnt = 0; DGUS_SOLIDSTATELASER* value; ReadVariable(FRAMEDATA_SOLIDSTATELASER_BASE, (void**)&value, sizeof(frameData_SolidStateLaser)); if ((osSignalWait(DGUS_EVENT_SEND_COMPLETED, g_wDGUSTimeout).status != osEventTimeout) && (osSignalWait(DGUS_EVENT_RECEIVE_COMPLETED, g_wDGUSTimeout).status != osEventTimeout)) { convert_laserdata_ss(&frameData_SolidStateLaser, value); timeout_cnt = 0; } else { timeout_cnt++; if (timeout_cnt > 2) { timeout_cnt = 0; // Solid State Laser Off footswitch_en = false; SolidStateLaser_en = false; LampControlPulseStop(); osDelay(100); __SOLIDSTATELASER_SIMMEROFF(); osDelay(100); __SOLIDSTATELASER_HVOFF(); osDelay(100); __SOLIDSTATELASER_DISCHARGEON(); new_pic_id = FRAME_PICID_LONGPULSE_INPUT; SoundOn(); __HAL_TIM_SET_AUTORELOAD(&hTIM11, 42000); HAL_TIM_Base_Start_IT(&hTIM11); update = true; } return; } uint16_t state = frameData_SolidStateLaser.state; osDelay(50); __SOLIDSTATELASER_DISCHARGEOFF(); if (pic_id >= 51 && pic_id <= 62 && pic_id != 55 && pic_id != 53) __SOLIDSTATELASER_HVON(); else __SOLIDSTATELASER_HVOFF(); if (pic_id >= 51 && pic_id <= 62 && pic_id != 53) __SOLIDSTATELASER_SIMMERON(); else __SOLIDSTATELASER_SIMMEROFF(); if (pic_id == FRAME_PICID_LONGPULSE_WORK) SolidStateLaser_en = true; else SolidStateLaser_en = false; //frameData_SolidStateLaser.state = 0; // Input pressed if (frameData_SolidStateLaser.buttons.onSimmerBtn != 0) { new_pic_id = FRAME_PICID_LONGPULSE_SIMMER; frameData_SolidStateLaser.state = 2; // On Input Pressed frameData_SolidStateLaser.buttons.onSimmerBtn = 0; update = true; } #ifdef DEBUG_SOLID_STATE_LASER static int16_t simmer_off_cnt = 0; if (!(__MISC_GETSIMMERSENSOR())) { simmer_off_cnt++; if (simmer_off_cnt > 10) simmer_off_cnt = 10; } else { simmer_off_cnt--; if (simmer_off_cnt < 0) simmer_off_cnt = 0; } if ((simmer_off_cnt > 5) && pic_id != 55 && pic_id != 53) { new_pic_id = FRAME_PICID_LONGPULSE_SIMMERSTART; // Solid State Laser Off footswitch_en = false; SolidStateLaser_en = false; LampControlPulseStop(); osDelay(1000); __SOLIDSTATELASER_HVOFF(); osDelay(1000); __SOLIDSTATELASER_SIMMEROFF(); osDelay(1000); __SOLIDSTATELASER_DISCHARGEON(); update = true; } #endif // Simmer wait if (pic_id == FRAME_PICID_LONGPULSE_SIMMER) { frameData_SolidStateLaser.state = 2; #ifdef DEBUG_SOLID_STATE_LASER if (__MISC_GETSIMMERSENSOR()) #endif { frameData_SolidStateLaser.state = 3; new_pic_id = FRAME_PICID_LONGPULSE_INPUT; update = true; } } // Start pressed if (frameData_SolidStateLaser.buttons.onStartBtn != 0) { // On Start Pressed frameData_SolidStateLaser.buttons.onStartBtn = 0; //LampControlPulseStart(); __MISC_LASERLED_ON(); new_pic_id = FRAME_PICID_LONGPULSE_WORK; update = true; } if (frameData_SolidStateLaser.buttons.onStopBtn != 0) { // On Input Pressed frameData_SolidStateLaser.buttons.onStopBtn = 0; __MISC_LASERLED_OFF(); SolidStateLaser_en = false; LampControlPulseStop(); __SOLIDSTATELASER_HVOFF(); //__SOLIDSTATELASER_SIMMEROFF(); SetDACValue(0.0f); frameData_SolidStateLaser.state = 0; new_pic_id = FRAME_PICID_LONGPULSE_INPUT; update = true; StoreGlobalVariables(); } if (frameData_SolidStateLaser.buttons.onCancelBtn != 0) { // On Input Pressed frameData_SolidStateLaser.buttons.onCancelBtn = 0; SolidStateLaser_en = false; LampControlPulseStop(); __SOLIDSTATELASER_HVOFF(); //__SOLIDSTATELASER_SIMMEROFF(); SetDACValue(0.0f); frameData_SolidStateLaser.state = 0; new_pic_id = FRAME_PICID_LONGPULSE_INPUT; update = true; StoreGlobalVariables(); } if (state != frameData_SolidStateLaser.state) update = true; if (frameData_SolidStateLaser.PulseCounter != GetSolidStateGlobalPulse(LaserID)) { frameData_SolidStateLaser.PulseCounter = GetSolidStateGlobalPulse(LaserID); frameData_SolidStateLaser.SessionPulseCounter = GetSolidStateSessionPulse(LaserID); update = true; } if (update) { WriteSolidStateLaserDataConvert16(FRAMEDATA_SOLIDSTATELASER_BASE, &frameData_SolidStateLaser); osSignalWait(DGUS_EVENT_SEND_COMPLETED, g_wDGUSTimeout); } if (pic_id != new_pic_id && update) SetPicId(new_pic_id, g_wDGUSTimeout); }