
Влад
16.01.2017
18:11:48
там есть по две штуки сетевогой буфера и uart.
роутер и есть мк

Dolphin
16.01.2017
18:12:14
а парсер тогда кто?

Влад
16.01.2017
18:12:26
роутер он потому что строит радио-сеть

Google

Влад
16.01.2017
18:12:34
парсит скрипт на одноплатнике

Dolphin
16.01.2017
18:13:02
нене, ты сказал роутер ловит пакет и шлет парсеру, тот парсит и обратно в роутер
да

Влад
16.01.2017
18:13:16
смотри.
это умный дом.
есть выключатель и реле
на выключателе нажимаю кнопку — он отправляет пакет на главное устройство в радио-сети(dag root), которое и есть роутер, "адрес такой-то, нажата кнопка 2". роутер это выплевывает в uart, где это ловит компьютер, парсит посылку, смотрит у себя в логике, что надо сделать. ага, он видит, что вторая кнопка этого выключателя должна включать свет на реле в ванной, например. он формирует команду "включить реле по адресу такому-то" и отправляет это обратно в uart. там это ловит радио-роутер, извлекает адрес из команды, формирует пакет с командой и отправляет по адресу. реле получает пакет, включает свет.

Dolphin
16.01.2017
18:18:27
ок
но ты сказал что вешается уарт
значит либо парсер криво парсит

Влад
16.01.2017
18:19:17
и вот если куча выключателей ему начнут слать посылки, а он в ответ начнет слать команды, то через 20-30 секунд он перестанет посылать пакеты устройствам.

Dolphin
16.01.2017
18:19:17
либо переполнение буфера на мк (одного из, либо обоих)

Влад
16.01.2017
18:20:08
все остальное будет работать нормально — принимает пакеты по сети, принимает по уарт, отправляет по уарт, строит сеть. но пакеты по сети не передает.

Google

Влад
16.01.2017
18:20:45
и выключатель с реле тоже будут работать нормально — достаточно перезагрузить радио-роутер, и все заработает нормально

Dolphin
16.01.2017
18:21:10
это я понял

Влад
16.01.2017
18:22:39
переполнение буфера — это когда ты начинаешь ему столько пихать данных, что он их не успевает переваривать. а тут он успевает переварить, обмен мизерный по uart.

Dolphin
16.01.2017
18:23:01
не, я имею ввиду именно ошибку
типа буфер на n-байт выделен, а ему прилетело n+1
просто ты полез в уарт ковырять, а проблема мож не там совсем?
не в либе всмс

Влад
16.01.2017
18:24:39
static int uart_data_receiver(unsigned char c)
{
if ((uart_iterator <= MAGIC_SEQUENCE_LENGTH - 1) ||
(uart_iterator >= UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH && uart_iterator <= UART_DATA_LENGTH - 1))
{
if (c != uart_magic_sequence[uart_iterator])
{
uart_iterator = 0;
return 1;
}
}
uart_command_buf[uart_iterator] = c;
if (uart_iterator < UART_DATA_LENGTH-1)
{
uart_iterator++;
}
else
{
uart_iterator = 0;
if (uart_command_buf[6] == UART_PROTOCOL_VERSION_V1)
{
for (int i = 0; i <= 15; i++)
{
destination_address.u8[i] = uart_command_buf[i+7];
}
send_command_packet(&destination_address, &udp_connection, uart_command_buf[23], uart_command_buf[24], uart_command_buf[25]);
}
}
return 1;
}
все, что относится к приему по uart выглядит вот так

Dolphin
16.01.2017
18:25:59
UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH - 1 ?
?

Влад
16.01.2017
18:26:29
static uint8_t uart_magic_sequence[UART_DATA_LENGTH] =
{0x01,0x16,0x16,0x16,0x16,0x10,
0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x03,0x16,0x16,0x16,0x17,0x04};
/* UART Binary data */
#define UART_PROTOCOL_VERSION_V1 0x01
#define UART_DATA_LENGTH 42
#define MAGIC_SEQUENCE_LENGTH 6
м?

Dolphin
16.01.2017
18:28:10
Это ты писал?

Влад
16.01.2017
18:28:26
часть я, часть по наследству досталась

Samael
16.01.2017
18:28:56
ru_raspberry
PI: Raspberry, Orange, Banana. Lattepanda, etc...
https://telegram.me/ru_raspberry
Памагите!!!?

Dolphin
16.01.2017
18:29:17
if ((uart_iterator <= MAGIC_SEQUENCE_LENGTH - 1) || ((uart_iterator >= UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH) && (uart_iterator <= UART_DATA_LENGTH - 1)))

Влад
16.01.2017
18:31:11
что?

Dolphin
16.01.2017
18:31:41
ничего, в скобки взял

Google

Dolphin
16.01.2017
18:32:08
много недостает данных, чтобы так основательно копнуть

Влад
16.01.2017
18:33:45
ну я просто не вижу, где тут можно словить переполнение. ничего динамически не выделяется
если пришло не то, ругнется просто

Dolphin
16.01.2017
18:37:18
а че такое - уарт_итератор?
счетчик?

Влад
16.01.2017
18:37:58
номер символа в пакета, если распознана правильная последовательность в начале пакета
да

Dolphin
16.01.2017
18:43:16
uart_iterator >= UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH вот здесь должно же быть - 1?

Samael
16.01.2017
18:45:03
Посоветуйте ssh клиент на андроид.
Иначе сюда свой секас с малиной перенесу?

Dolphin
16.01.2017
18:46:20

Подполковник
16.01.2017
18:46:27
как сделать индикацию чувствительнее к звуку

Samael
16.01.2017
18:47:11

Dolphin
16.01.2017
18:47:15

Влад
16.01.2017
18:47:39
а
щас

Dolphin
16.01.2017
18:47:56
не, туплю я ... все - спать пора значит

Влад
16.01.2017
18:52:26
вроде нет, 0x03 это 37 байт
массив с 0, значит 36

Google

Влад
16.01.2017
18:52:55
42-6 равно 36

Dolphin
16.01.2017
18:52:56
да
да да, говорю же туплю
уже проверил

Влад
16.01.2017
18:53:29
а я думал глюк нашел :(
хотя тогда бы он не разбирал

Dolphin
16.01.2017
18:53:54
не растраивайся, найдешь )

Влад
16.01.2017
19:01:49
да

Dolphin
16.01.2017
19:02:17
Может сделать флаг заполнения буфера (конец приема), а отправку вынести наружу из этой функции

Admin
ERROR: S client not available

Dolphin
16.01.2017
19:02:31
подозреваю что тут неладное со стеком творится
у тебя нет гарантий, что при получении нового пакета по уарт сразу за этим, не закончена отправка предыдущего

Th0r
16.01.2017
19:04:33
http://i.imgur.com/86BHvRb.png

Dolphin
16.01.2017
19:05:07

Влад
16.01.2017
19:05:43
хм. какого пакета, сетевого? уарт-то не сунет ему новый символ, пока обработчик не вернет 1
а он ему не вернет, пока не отработает send_command_packet

Dolphin
16.01.2017
19:06:47
либо сброс приема
ну короче меня настораживает отправка внутри прерывания. с переполнением вроде все ок, все ровно
с логикой вроде тоже

Google

Влад
16.01.2017
19:09:59

Black
16.01.2017
19:10:26
В чём первичный вопрос?

Dolphin
16.01.2017
19:10:38
почему нет? Это быстро произойдет же

Влад
16.01.2017
19:10:45
если в этом дело, то он не должен упасть, если закомментировать send_command_packet
да, как вариант

Dolphin
16.01.2017
19:11:01
согласен

Влад
16.01.2017
19:11:04
собрал, поставил проверяться

Dolphin
16.01.2017
19:11:17
скрестил пальцЫ )

Влад
16.01.2017
19:13:17

Dolphin
16.01.2017
19:13:21
компактненько так

Black
16.01.2017
19:13:58

Dolphin
16.01.2017
19:14:13
Бля красиво, тоже так хочу )
4 минуты )

Влад
16.01.2017
19:16:02
я его ребутнул случайно :(

Dolphin
16.01.2017
19:16:15
ну епт ))
я спать хочу ))
но не уйду пока не узнаю ?

Влад
16.01.2017
19:17:32
Все, не дышу

Dolphin
16.01.2017
19:17:53
?
красота

Влад
16.01.2017
19:19:31
левое окошко — это устройство шлет ему кучу запросов, правое — это по ссш с одноплатника парсер принимает пакеты