32bit_me (32bit_me) wrote,
32bit_me
32bit_me

Скриншоты с экрана устройства

Originally published at 32 bit.me. You can comment here or there.

Для получения скриншотов с экранов устройств была разработана маленькая утилитка, получающая текущее изображение по Rs-232.

Сама утилитка написана на C#, в программу устройства был добавлен небольшой фрагмент, отправляющий в UART изображение из буфера:

switch(buf[1])
{
case 0x03: //read multiple holding registers (0x04)
  ...
  break;
//Другие команды Modbus
...
 
case 0xFF: //  Команда получения скриншота
 
...
  return PrintScreen(uartNum);
};

Таким образом, стандартные команды Modbus «расширяются» специальной командой с кодом 0xFF, при получении которой устройство посылает в порт копию экрана (для монохромного экрана 128*64 это составляет ровно 1 кбайт данных).

Утилитка очень простая, небольшое (но, как оказалось, легко решаемое) затруднение вызвал тот факт, что С# работает с COM-портом не так, как другие системы (например, Delphi).

C# создает отдельный поток исполнения для обработчика события приема сообщения COM-порта. А раз это отдельный поток, в нем нельзя отрисовывать изображение (операции с графикой не являются в .Net потокобезопасными).

Проблему можно решить двумя путями: верным и неверным.

Read the rest of this entry »

Tags: C и C++, c sharp, микроконтроллеры, программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments