Ejemplo n.º 1
0
/**
  * @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;
    }
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
/**
  * @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);
}