Дравер ИК-пультов — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
(Новая страница: «По умолчанию драйвер компилируется под частоту пультов 38 кГц. Это значение можно поменя…»)
 

Текущая версия на 16:51, 30 октября 2014

По умолчанию драйвер компилируется под частоту пультов 38 кГц. Это значение можно поменять на этапе сборки ядра в файле /kernel/drivers/v2r/v2r_irsend.c

#define N_PULSE 13 //uS 38 kHz  

Если требуется другая частота модуляции, то дефайн N_PULSE рассчитывается по формуле:

N_PULSE = 5 / F_MOD * 100000

, где F_MOD - частота модуляции

Драйвер создаёт файл-устройство /dev/irsend.


Отправка импульсов идёт записью массива длительностей импульсов типа unsigned int в файл устройство. Каждый элемент массива содержит длительность в микросекундах. Нулевой элемент массива всегда длинна положительного импульс. Закачанчивается массив всегда нулём. Пример массива:

unsigned int  array[] = {
	4796, 1584,
	1584, 4796,
	1584, 4796,
	1584, 4796,
	1584, 4796,
	1584, 4796,
	1584, 4796,
	4796, 1584,
	0};

Простейший пример процедуры отправки выглядит таким образом:

void send_array (unsigned int * array) {
	int devfile = -1; 
	int req_sz = 0;
	int i;
//считаем длинну массива	
	for (i=0; array[i]!=0; i++) {
		req_sz++;
	}
	req_sz++;
//пересчитываем длинну массива в байтах
	req_sz=req_sz*sizeof(unsigned int);
//открвываем файл длязаписи
	devfile = open("/dev/irsend", O_WRONLY);
	if(devfile < 0){
		perror("open");
		exit(-1);
	}
//записываем
	if((write(devfile, array, req_sz))!=req_sz){
		printf( "Device file Write Error!\n" );
	}
	close(devfile);
}

Рекомендуется во избежание проблем между посылками пачки импульсов делать задержки не менее 100 мкс.

Драйвер пересчитывает данные импульсы, модулируя положительные импульсы с частотой, согласно определению N_PULSE и выводит данную последовательность на ножку RTO GPIO90. ИК-светодиод рекомендуется подключать либо через транзистор, либо через буферную логическую микросхему.