Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Управление широковещательным оборудованием - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка "Access violation..." при попытке отсортировать структуру из файла быстрым методом http://www.cyberforum.ru/cpp-beginners/thread306941.html
Собстно ошибко "Project '...' raised exception class EAccessViolation with message 'Access violation at address 00401464 Write of address 004040bc'. Process stopped. Use..." Компилируется нормально,...
C++ Несколько простых задач... 1. составить программу вывода 3-х значных десятичных цифр сумма которых делится на 3. #include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; int _tmain(int argc,... http://www.cyberforum.ru/cpp-beginners/thread306934.html
C++ нужно составить программу.
Всем привет,люди знающие хорошо с++ помогите написать программу. С внешнего устройства (с клавиатуры, из файла) вводятся последовательно числа, количество которых велико и заранее неизвестно....
Обработка символьной информации C++
Добрый день. Форумчани, очень нужна помощь, вот задание:Распечатать в порядке, обатном алфавитному, все буквы, которые входят в текст не менее трех раз... Вот код: #include "iostream" #include...
C++ Списки, динамическая память и указатели http://www.cyberforum.ru/cpp-beginners/thread306909.html
11. Написать функцию numberstring( ) для подсчета числа строк в тексте. Напечатать это число. То есть нужно создать однонаправленный список, в который заносится построчно текст какой-либо уже...
C++ Для каждого массива опpеделить номеp столбца с наибольшим количеством положительных элементов Помогите с решением!! Что надо вставить вместо ???, чтобы все работало? Даны вещественные массивы A, V. Для каждого массива опpеделить номеp столбца с наибольшим количеством положительных... подробнее

Показать сообщение отдельно
kazhuravlev
Сообщений: n/a

Управление широковещательным оборудованием - C++

28.05.2011, 16:15. Просмотров 361. Ответов 0
Метки (Все метки)

Работаю инженером на телевидении. Контролирую работу широковещательного пред-эфирного, пост-эфирного и эфирного оборудования. Для управления работой некоторых устройств используются дорогие и малоэффективные программы с ограниченной поддержкой протокола управления. В руки попало описание протокола, и примеры реализации его на языке C ( или C++, мне сложно определить ). Встала задача написать программу, способную контролировать работу данного устройства. Так как я являюсь Python/Java программистом, и только догадываюсь о том что написано в коде ниже, я прошу вас помочь мне понять смысл действий, описанных в данном коде. Если кто-либо может в точности перевести это на Python, и оно будет работать - переведу денежку на WebMoney.
С помощью описанной ниже функции remote_send(), по идее должна осуществляться передача команды вышеописанному устройству ( думаю не имеет особого смысла рассказывать о его предназначении ).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#define STX0 0x002
#define STX1 0x003
#define ACK0 0x004
#define ACK1 0x005
#define NAK 0x007
char stx = STX0;
const UINT lstab[] =
{
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0,
0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741,
0x0500, 0xc5c1, 0xc481, 0x0440
};
const UINT mstab[] =
{
0x0000, 0xcc01, 0xd801, 0x1400, 0xf001, 0x3c00,
0x2800, 0xe401, 0xa001, 0x6c00, 0x7800, 0xb401,
0x5000, 0x9c01, 0x8801, 0x4400
};
void do_crc(INT8 ch, UINT16 * crcptr)
{
UINT tmp;
 
tmp = *crcptr ^ ch;
*crcptr = mstab[(tmp>>4) & 0xf] ^ lstab[tmp&0xf] ^ ((*crcptr) >> 8);
}
void remote_send(char * format,...)
{
UINT16 rem_crc = 0;
INT ch;
char message[128];
char* messageptr = (char*)message;
va_list argptr;
va_start(argptr, format);
vsprintf(message, format, argptr);
va_end(argptr);
rem_send_char(stx);
while((ch = *messageptr++) != 0)
{
rem_send_char(ch);
do_crc(ch, &rem_crc);
}
rem_send_char(':');
do_crc(':', &rem_crc);
rem_send_char(rem_crc & 0xff);
rem_send_char(rem_crc >> 8);
if (stx == STX0)
stx = STX1;
else
stx = STX0;
}


Для примера приведу пример использования функции remote_send() в обертке:

C++
1
2
3
4
5
6
7
8
9
// плавно скрыть/показать видео слой
// где 1( единица ) - номер команды ( длинна команды до 3 символов ),
// Layer - один из четырех слоев,
// Up - одно из двух значений( 1 - поднять слой, 2 - опустить)
 
void FadeKeyer(int Layer, bool Up) 
 {
   remote_send("1%x %d", Layer, Up ? 1:0); 
 }
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru