Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Linux для начинающих

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2013, 15:11   #1
AlexSMG95
Member
 
Регистрация: 08.04.2013
Адрес: Томск
Сообщений: 64
Вес репутации: 0
AlexSMG95 is an unknown quantity at this point
По умолчанию OpenWrt +C++

Всем доброго времени суток!
Собственно перейду сразу к делу!
Есть роутер tp-link mr3020 Есть ардуино.
Цель:
1)Написать на C++ Программу определяющую комбинацию клавиш.
2)В зависимости от комбинации клавиш формировать массив из 4 чисел
3)Установить на роутер.
4)при подключении по ssh к роутеру запустить программу нажимать клавиши или комбинации клавиш.
5)Передавать этот массив в ардуино.
Вообще вот в кратце!
Проблемы с которыми я столкнулся
1)С помощью C++ Отслеживать комбинацию клавиш
2)С помощью C++ передавать значения в порт ttyUSB

Вот код которым я отслеживаю нажатие клавиш
Код:
#include <iostream>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
 
using namespace std;
 
int main()
{
     while(1)
     {
     struct termios oldt,
     newt;
     int ch;
     tcgetattr( STDIN_FILENO, &oldt );
     newt = oldt;
     newt.c_lflag &= ~( ICANON | ECHO );
     tcsetattr( STDIN_FILENO, TCSANOW, &newt );
     ch = getchar();
     tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
     cout<<ch;
     }
}
Кто знает подскажите в какую сторону смотреть? Хоть по какомонибуть пункту, буду рад любой подсказке.
AlexSMG95 вне форума   Ответить с цитированием
Старый 05.09.2013, 15:57   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

По первому вопросу не подскажу, а по второму: нужно открыть фаил /dev/ttyUSB0 и сохранять в него любые значения
Admin вне форума   Ответить с цитированием
Старый 05.09.2013, 16:03   #3
AlexSMG95
Member
 
Регистрация: 08.04.2013
Адрес: Томск
Сообщений: 64
Вес репутации: 0
AlexSMG95 is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
По первому вопросу не подскажу, а по второму: нужно открыть фаил /dev/ttyUSB0 и сохранять в него любые значения
Ну я понимаю что его нужно открыть, мне интересно как его открывать используя C++
AlexSMG95 вне форума   Ответить с цитированием
Старый 05.09.2013, 16:09   #4
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

У меня нет готового примера, можно посмотреть на примере GPIO
Цитата:
void Export_GPIO(string gpio)
{
int exportfd;
exportfd = open("/sys/class/gpio/export", O_WRONLY); //открыть фаил
if (exportfd < 0)
{
printf("Cannot open GPIO to export it %d\n", errno); //если ошибка, то сообщить
exit -1;
} else {
write(exportfd, gpio, 3); //записать в открытый фаил 3 байта
close(exportfd); //закрыть фаил
}
return 0;
}
Admin вне форума   Ответить с цитированием
Старый 05.09.2013, 16:15   #5
AlexSMG95
Member
 
Регистрация: 08.04.2013
Адрес: Томск
Сообщений: 64
Вес репутации: 0
AlexSMG95 is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
У меня нет готового примера, можно посмотреть на примере GPIO
Не совсем понимаю что здесь делается.
AlexSMG95 вне форума   Ответить с цитированием
Старый 05.09.2013, 16:28   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Читай комментарии в коде
Admin вне форума   Ответить с цитированием
Старый 20.09.2013, 22:50   #7
CrazyPit
Junior Member
 
Регистрация: 07.04.2013
Сообщений: 14
Вес репутации: 0
CrazyPit is an unknown quantity at this point
По умолчанию

void Export_GPIO(string gpio)//это функция с именем Export_GPIO
{
int exportfd; // exportfd целое знаковое (32 бит наверное )
exportfd = open("/sys/class/gpio/export",O_WRON//exportfd

//присвоить значение попытки открыть файл в каиалоге/sys/class/gpio/export

export if (exportfd < 0) // если не смогли открыть то пишем
{
printf("Cannot open GPIO to export it %d\n", errno); //если ошибка, то сообщить
exit -1;
} else {
write(exportfd, gpio, 3); //записать в открытый фаил 3 байта значение gpo
close(exportfd); //закрыть фаил
}
return 0;
}
CrazyPit вне форума   Ответить с цитированием
Старый 20.09.2013, 22:55   #8
CrazyPit
Junior Member
 
Регистрация: 07.04.2013
Сообщений: 14
Вес репутации: 0
CrazyPit is an unknown quantity at this point
По умолчанию

тоже хочется писать на сях
есть много вопросов.. хотелось бы видеть специалиста кто может подсказать
1 как компилировать
2 как читать с ком порта
3 как открыть порт
4 как читать из порта
5 как поднять соединение чз tcp/ip
6 как отправить данные по IP
да многое..
не пинайте сильно с linux познакомился после покупки wr703
так что в винде я ответы на эти вопросы знаю.. возожно большая часть вопросов лишняя и делать все это не надо..
а задача такова

роутер должен поднять соединение с интернетом через usb модем .далее законектица по IP к OPC серверу
... OPC сервер опрашивать роутер по протоколу модбас или модбас через эзернет . данные берет роутер через usb сщь переходник с прибора по своему протоколу..
вот.....



http://www.cyber-place.ru/showpost.p...8&postcount=79
http://cyber-place.ru/showthread.php?t=506
многое стало проясняться

Последний раз редактировалось CrazyPit; 21.09.2013 в 00:39.
CrazyPit вне форума   Ответить с цитированием
Старый 21.09.2013, 10:20   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

1-Кросс компиляция
2-Так же как и любой фаил, смотри пример, только вместо файла будет порт ttyUSBxx
3-смотри ответ 2
4-смотри ответ 2
5-Я с этим еще разбирался
6-Я с этим еще разбирался

Литература по программированию в линукс
Admin вне форума   Ответить с цитированием
Старый 22.09.2013, 08:39   #10
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию

Пример опроса hid устройства

PHP код:
// gcc test_hid.c -o test_hid


#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/inotify.h>


#define true  1
#define false 0


hexb(int ichar *c)
//возвращает в (char c) 16-й код i в символьном видк: 'A'(0x41) -> 41 
{
 
char   hc[] = "0123456789ABCDEF";
 
char  st[4] = ""
 
int hi = (0xF0) >> 4// (i and 0xF0) shr 4
 
int lo = (0x0F);      // i and 0x0F
 
c[0] = hc[hi];
 
c[1] = hc[lo];
 
c[2] = '\0';
}


hexstr(char *cichar *coint ibyte
// ci - input, co - output, int - размер ci
{
 
char  st[4] = "";
 
int   in;
// printf("hexstr> ibyte       = %d\n", ibyte);
 
for( ibytei++) {
  
n=(int)ci[i];    // получили код символа n из char
  
hexb(nst);     // st = hh
  
co[i*3]   = st[0];        // ABC -> AA:BB:CC:
  
co[i*3+1] = st[1];        // 012 -> 012345678
  
co[i*3+2] = ':';          // разделитель
//  printf("hexstr> i cycle     = %d\n", i);
  
}
//  printf("hexstr> i end cycle = %d\n", i);
  
co[i*3-1] ='\0'// затереть последний символ разделителя
}

int MouseEvent(int fd_mouse) {
 
fd_set rfds;
 
struct timeval tv;
 
int retval;

    
FD_ZERO(&rfds);
    
FD_SET(fd_mouse, &rfds);
    
tv.tv_sec =  0;
    
tv.tv_usec 0;
    return 
select(fd_mouse+1, &rfdsNULLNULL, &tv);
}


int main (int argcchar argv[])
{
    
char fname "/dev/input/event1";  // устройство или файл
    
int ibyte 0;     // кол-во прочитанных байт
    
int fd    0;     // файловый дискриптор
    
char buf[64] = "";    // память для чтения
    
char out[256]= "";    // буфер для вывода

       
printf("=====================================================\n");
       
printf("  Test Usb Event hid Devices v 0.3 (C) Sh.A.S.\n");
       
printf("  For help Use: %s -?\n",argv[0]);
       
printf("=====================================================\n");    

    if (
argc == 2)
    { 
     if (
argv[1] == "-?" 
        { 
        
printf("Uses: %s [path to device] \n",argv[0]);
        
printf("Example device: /dev/input/event0  - you USB hid device\n");
        
printf("for see hid device: ls /dev/input/ n");
        
printf("Default use device: %s\n"fname);
        return -
1;
        } 
     else
         {
        
fname=argv[1];
        }
    }
    

    
printf("Open device: %s\n"fname);


    
fd open (fnameO_RDONLY); // открыть файл на чтение
    
if (fd 0) { fprintf (stderr"Can't open file : %s\n"fname); exit (2); } //проверка на существование

    
while (1// основной беск.цикл
    
{
    if (
MouseEvent(fd)) 
        {  
            
ibyte=read(fdbuf64);    // прочитать файл, ibyte - кол-во прочит. байт
        
hexstr(bufoutibyte);    // преобразовать buf в строку out
        
printf("size: %2d | data: %s\n"ibyteout);
        } 
        }

 
close(fd); // закрыть файл, дискриптор 
 
return 0;

в роутер нужно установить драйвер
Код:
opkg install kmod-usb-hid
andr128 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 15:41. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика