Автомат запуска сервера по F1 или USB-HID Keyboard

Автоматическое нажатие F1 через определенное время при запуске сервера.

Иногда случаются ситуации когда необходимо нажимать кнопку F1 , причин может быть много, НО не идти же каждый раз к серверу(компьютеру), а если он в другом городе? — поэтому это устройство призвано автоматизировать процесс.

В данном варианте реализовано только нажатие F1, но при желании можно дополнить алгоритм любыми комбинациями. Исходник написан на CodeVisionAVR с использованием встроенной библиотеки USB Atmega32U4. В качестве макета была использована плата Leonardo Pro micro. Дополнительной возможностью повесил четыре кнопки, на которые назначены операторы в си, но при желании можно запрограммировать другие словосочетания.

Джампер JP1 переключает задержку нажатия F1 — 30 секунд или 60.

#include <mega32u4.h>
#include <delay.h>
// USB Device functions
#include <usb_device.h>
// USB Human Interface Device functions
#include <usb_hid.h>
// USB initialization
#include "usb_init.h"

#define KEY_EN PINF.6
#define KEY_BK PINF.7
#define KEY_CP PINF.4
#define KEY_PS PINF.5
#define JP_TM  PIND.1

unsigned int tik=0;
unsigned int tim=0;

void pr()
{

  if(tik<tim)
  { 
   tik++; 
   if(tik==tim-1)
   {
    usb_keyboard_keypress(KS_F1,0);
    PORTB.0=1;
    PORTD.5=1;
   }
   
  }
   
  delay_ms(100); 
  
  if(KEY_CP==0)
  {
   delay_ms(100);
   while(!KEY_CP){;};
   usb_keyboard_keypress(KS_I,0); usb_keyboard_keypress(KS_F,0);  
  }
  
    if(KEY_PS==0)
  {
   delay_ms(100);
   while(!KEY_PS){;};
   usb_keyboard_keypress(KS_V,0); usb_keyboard_keypress(KS_O,0);
   usb_keyboard_keypress(KS_I,0); usb_keyboard_keypress(KS_D,0);  
  }
  
      if(KEY_BK==0)
  {
   delay_ms(100);
   while(!KEY_BK){;};
    usb_keyboard_keypress(KS_W,0); usb_keyboard_keypress(KS_H,0);
   usb_keyboard_keypress(KS_I,0); usb_keyboard_keypress(KS_L,0);
   usb_keyboard_keypress(KS_E,0);  
  }
  
       if(KEY_EN==0)
  {
   delay_ms(100);
   while(!KEY_EN){;};
   usb_keyboard_keypress(KS_F,0); usb_keyboard_keypress(KS_O,0);
   usb_keyboard_keypress(KS_R,0);
  } 
   
}
     
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In 
DDRC=(0<<DDC7) | (0<<DDC6);
PORTC=(0<<PORTC7) | (0<<PORTC6);

// Port D initialization
DDRD=(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (1<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (1<<PORTD1) | (0<<PORTD0);

// Port E initialization
// Function: Bit6=In Bit2=In 
DDRE=(0<<DDE6) | (0<<DDE2);
PORTE=(0<<PORTE6) | (0<<PORTE2);

// Port F initialization
DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF1) | (0<<DDF0); 
PORTF=(1<<PORTF7) | (1<<PORTF6) | (1<<PORTF5) | (1<<PORTF4) | (0<<PORTF1) | (0<<PORTF0);

// USB Controller initialization in device mode
// Note: This function also initializes the PLL
usb_init_device(&usb_config);

// Global enable interrupts
#asm("sei")

// Wait for the USB device to be enumerated by the host
while (!usb_enumerated);

// Wait 1.5 seconds for the operating system to
// load any drivers needed by the USB device
delay_ms(1500);
    if(JP_TM==0)
    {
     tim = 600;   //60
    }else{ tim = 300; }  //30
while (1)
      {
       pr();

      }
}

Удачных экспериментов!!!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *