⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmoserialconnection.cpp

📁 VLC Player Source Code
💻 CPP
字号:
/* * AtmoSerialConnection.cpp: Class for communication with the serial hardware of * Atmo Light, opens and configures the serial port * * See the README.txt file for copyright information and how to reach the author(s). * * $Id$ */#include "AtmoDefs.h"#include "AtmoSerialConnection.h"#include <stdio.h>#include <fcntl.h>#include <sys/stat.h>#if !defined(WIN32)#include <termios.h>#include <unistd.h>#endif/*#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <termios.h>#include <unistd.h>#include <vdr/tools.h>*/CAtmoSerialConnection::CAtmoSerialConnection(CAtmoConfig *cfg) : CAtmoConnection(cfg) {    m_hComport = INVALID_HANDLE_VALUE;}CAtmoSerialConnection::~CAtmoSerialConnection() {   CloseConnection();}ATMO_BOOL CAtmoSerialConnection::OpenConnection() {#if defined(_ATMO_VLC_PLUGIN_)     char *serdevice = m_pAtmoConfig->getSerialDevice();     if(!serdevice)        return ATMO_FALSE;#else     int portNummer = m_pAtmoConfig->getComport();     m_dwLastWin32Error = 0;	 if(portNummer < 1) return ATMO_FALSE; // make no real sense;-)#endif	 CloseConnection();#if !defined(_ATMO_VLC_PLUGIN_)     char comport[16];  // com4294967295     sprintf(comport,"com%d",portNummer);#endif#if defined(WIN32)#  if defined(_ATMO_VLC_PLUGIN_)     m_hComport = CreateFile(serdevice, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);#  else     m_hComport = CreateFile(comport, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);#  endif     if(m_hComport == INVALID_HANDLE_VALUE) {//      we have a problem here can't open com port... somebody else may use it?//	    m_dwLastWin32Error = GetLastError();	    return ATMO_FALSE;     }     /* change serial settings (Speed, stopbits etc.) */     DCB dcb; // für comport-parameter     dcb.DCBlength = sizeof(DCB);     GetCommState (m_hComport, &dcb); // ger current serialport settings     dcb.BaudRate  = 38400;        // set speed     dcb.ByteSize  = 8;            // set databits     dcb.Parity    = NOPARITY;     // set parity     dcb.StopBits  = ONESTOPBIT;   // set one stop bit     SetCommState (m_hComport, &dcb);    // apply settings#else     int bconst = B38400;#  if defined(_ATMO_VLC_PLUGIN_)     m_hComport = open(serdevice,O_RDWR |O_NOCTTY);#  else     m_hComport = open(comport,O_RDWR | O_NOCTTY);#  endif     if(m_hComport < 0) {	    return ATMO_FALSE;     }     struct termios tio;     memset(&tio,0,sizeof(tio));     tio.c_cflag = (CS8 | CREAD | HUPCL | CLOCAL);     tio.c_iflag = (INPCK | BRKINT);     cfsetispeed(&tio, bconst);     cfsetospeed(&tio, bconst);     if(!tcsetattr(m_hComport, TCSANOW, &tio)) {         tcflush(m_hComport, TCIOFLUSH);     } else {         // can't change parms        close(m_hComport);        m_hComport = -1;        return false;     }#endif     return true;}void CAtmoSerialConnection::CloseConnection() {  if(m_hComport!=INVALID_HANDLE_VALUE) {#if defined(WIN32)     CloseHandle(m_hComport);#else     close(m_hComport);#endif	 m_hComport = INVALID_HANDLE_VALUE;  }}ATMO_BOOL CAtmoSerialConnection::isOpen(void) {	 return (m_hComport != INVALID_HANDLE_VALUE);}ATMO_BOOL CAtmoSerialConnection::HardwareWhiteAdjust(int global_gamma,                                                     int global_contrast,                                                     int contrast_red,                                                     int contrast_green,                                                     int contrast_blue,                                                     int gamma_red,                                                     int gamma_green,                                                     int gamma_blue,                                                     ATMO_BOOL storeToEeprom) {     if(m_hComport == INVALID_HANDLE_VALUE)   	    return ATMO_FALSE;     DWORD iBytesWritten;/*[0] = 255[1] = 00[2] = 00[3] = 101[4]  brightness  0..255 ?[5]  Contrast Red     11 .. 100[6]  Contrast  Green  11 .. 100[7]  Contrast  Blue   11 .. 100[8]   Gamma Red    11 .. 35[9]   Gamma Red    11 .. 35[10]  Gamma Red    11 .. 35[11]  Globale Contrast  11 .. 100[12]  Store Data: 199 (else 0)*/     unsigned char sendBuffer[16];     sendBuffer[0] = 0xFF;     sendBuffer[1] = 0x00;     sendBuffer[2] = 0x00;     sendBuffer[3] = 101;     sendBuffer[4] = (global_gamma & 255);     sendBuffer[5] = (contrast_red & 255);     sendBuffer[6] = (contrast_green & 255);     sendBuffer[7] = (contrast_blue & 255);     sendBuffer[8]  = (gamma_red & 255);     sendBuffer[9]  = (gamma_green & 255);     sendBuffer[10] = (gamma_blue & 255);     sendBuffer[11] = (global_contrast & 255);     if(storeToEeprom == ATMO_TRUE)        sendBuffer[12] = 199; // store to eeprom!     else        sendBuffer[12] = 0;#if defined(WIN32)     WriteFile(m_hComport, sendBuffer, 13, &iBytesWritten, NULL); // send to COM-Port#else     iBytesWritten = write(m_hComport, sendBuffer, 13);     tcdrain(m_hComport);#endif     return (iBytesWritten == 13) ? ATMO_TRUE : ATMO_FALSE;}ATMO_BOOL CAtmoSerialConnection::SendData(tColorPacket data) {   if(m_hComport == INVALID_HANDLE_VALUE)	  return ATMO_FALSE;   unsigned char buffer[19];   DWORD iBytesWritten;   buffer[0] = 0xFF;  // Start Byte   buffer[1] = 0x00;  // Start channel 0   buffer[2] = 0x00;  // Start channel 0   buffer[3] = 15; //   int iBuffer = 4;   for(int i=0;i<5;i++) {       if(m_ChannelAssignment[i]>=0) {          buffer[iBuffer++] = data.channel[m_ChannelAssignment[i]].r;          buffer[iBuffer++] = data.channel[m_ChannelAssignment[i]].g;          buffer[iBuffer++] = data.channel[m_ChannelAssignment[i]].b;       } else {          buffer[iBuffer++] = 0;          buffer[iBuffer++] = 0;          buffer[iBuffer++] = 0;       }   }#if defined(WIN32)   WriteFile(m_hComport, buffer, 19, &iBytesWritten, NULL); // send to COM-Port#else   iBytesWritten = write(m_hComport, buffer, 19);   tcdrain(m_hComport);#endif   return (iBytesWritten == 19) ? ATMO_TRUE : ATMO_FALSE;}ATMO_BOOL CAtmoSerialConnection::SendData(unsigned char numChannels,                                          int red[],                                          int green[],                                          int blue[]){   if(m_hComport == INVALID_HANDLE_VALUE)	  return ATMO_FALSE;   DWORD bufSize = 4 + numChannels*3;   unsigned char *buffer = new unsigned char[bufSize];   DWORD iBytesWritten;   buffer[0] = 0xFF;  // Start Byte   buffer[1] = 0x00;  // Start Kanal 0   buffer[2] = 0x00;  // Start Kanal 0   buffer[3] = numChannels * 3; //   int iBuffer = 4;   for(int i=0;i<numChannels;i++) {       if(m_ChannelAssignment[i]>=0) {          buffer[iBuffer++] = red[m_ChannelAssignment[i]] & 255;          buffer[iBuffer++] = green[m_ChannelAssignment[i]] & 255;          buffer[iBuffer++] = blue[m_ChannelAssignment[i]] & 255;       } else {          buffer[iBuffer++] = 0;          buffer[iBuffer++] = 0;          buffer[iBuffer++] = 0;       }   }#if defined(WIN32)   WriteFile(m_hComport, buffer, bufSize, &iBytesWritten, NULL);#else   iBytesWritten = write(m_hComport, buffer, bufSize);   tcdrain(m_hComport);#endif   delete[] buffer;   return (iBytesWritten == bufSize) ? ATMO_TRUE : ATMO_FALSE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -