324 lines
7.0 KiB
C
324 lines
7.0 KiB
C
/*
|
|
* irtrans driver
|
|
*
|
|
* Displays LCD screens, one after another; suitable for hard-copy
|
|
* terminals.
|
|
*
|
|
* Copyright (C) 1998-2007 <info@irtrans.de>
|
|
*
|
|
* Copyright (C) 2007 Phant0m <phantom@netkeke.com>
|
|
* porting the LCDproc 0.4.3 code to LCDproc 0.5.1
|
|
*
|
|
* Inspired by:
|
|
* TextMode driver (LCDproc authors)
|
|
* irtrans driver (Irtrans)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
*/
|
|
|
|
#define IRTRANS_PROTOCOL_VERSION 208
|
|
|
|
#define COMMAND_SEND 1
|
|
#define COMMAND_LRNREM 2
|
|
#define COMMAND_LRNTIM 3
|
|
#define COMMAND_LRNCOM 4
|
|
#define COMMAND_CLOSE 5
|
|
#define COMMAND_STATUS 6
|
|
#define COMMAND_RESEND 7
|
|
#define COMMAND_LRNRAW 8
|
|
#define COMMAND_LRNRPT 9
|
|
#define COMMAND_LRNTOG 10
|
|
#define COMMAND_SETSTAT 11
|
|
#define COMMAND_LRNLONG 12
|
|
#define COMMAND_LRNRAWRPT 13
|
|
#define COMMAND_RELOAD 14
|
|
#define COMMAND_LCD 15
|
|
#define COMMAND_LEARNSTAT 16
|
|
#define COMMAND_TEMP 17
|
|
#define COMMAND_GETREMOTES 18
|
|
#define COMMAND_GETCOMMANDS 19
|
|
#define COMMAND_STORETRANS 20
|
|
#define COMMAND_LOADTRANS 21
|
|
#define COMMAND_SAVETRANS 22
|
|
#define COMMAND_FLASHTRANS 23
|
|
#define COMMAND_FUNCTIONS 24
|
|
#define COMMAND_TESTCOM 25
|
|
#define COMMAND_LONGSEND 26
|
|
#define COMMAND_SHUTDOWN 27
|
|
#define COMMAND_SENDCCF 28
|
|
#define COMMAND_LCDINIT 29
|
|
#define COMMAND_SETSWITCH 30
|
|
#define COMMAND_STATUSEX 31
|
|
#define COMMAND_RESET 32
|
|
#define STATUS_MESSAGE 1
|
|
#define STATUS_TIMING 2
|
|
#define STATUS_DEVICEMODE 3
|
|
#define STATUS_RECEIVE 4
|
|
#define STATUS_LEARN 5
|
|
#define STATUS_REMOTELIST 6
|
|
#define STATUS_COMMANDLIST 7
|
|
#define STATUS_TRANSLATE 8
|
|
#define STATUS_FUNCTION 9
|
|
#define STATUS_DEVICEMODEEX 10
|
|
|
|
#pragma pack(1)
|
|
typedef struct {
|
|
uint8_t mode;
|
|
uint8_t time_cnt;
|
|
uint8_t ir_repeat;
|
|
uint8_t repeat_pause;
|
|
uint16_t pause_len[TIME_LEN];
|
|
uint16_t pulse_len[TIME_LEN];
|
|
uint8_t data[CODE_LEN];
|
|
} TIMINGDATA;
|
|
|
|
typedef struct {
|
|
uint8_t netcommand;
|
|
uint8_t mode;
|
|
uint16_t timeout;
|
|
int32_t adress;
|
|
int8_t remote[80];
|
|
int8_t command[20];
|
|
uint8_t trasmit_freq;
|
|
} OLD_NETWORKCOMMAND;
|
|
|
|
typedef struct {
|
|
uint8_t netcommand;
|
|
uint8_t mode;
|
|
uint8_t lcdcommand;
|
|
uint8_t timeout;
|
|
int32_t adress;
|
|
uint8_t wid;
|
|
uint8_t hgt;
|
|
int8_t framebuffer[200];
|
|
} OLD_LCDCOMMAND;
|
|
|
|
typedef struct {
|
|
uint8_t netcommand;
|
|
uint8_t mode;
|
|
uint16_t timeout;
|
|
int32_t adress;
|
|
int32_t protocol_version;
|
|
int8_t remote[80];
|
|
int8_t command[20];
|
|
uint8_t trasmit_freq;
|
|
} NETWORKCOMMAND;
|
|
|
|
typedef struct {
|
|
uint8_t netcommand;
|
|
uint8_t mode;
|
|
uint16_t timeout;
|
|
int32_t adress;
|
|
int32_t protocol_version;
|
|
uint16_t sendmask[32];
|
|
uint16_t pronto_data[256];
|
|
} CCFCOMMAND;
|
|
|
|
typedef struct {
|
|
uint8_t netcommand;
|
|
uint8_t mode;
|
|
uint8_t lcdcommand;
|
|
uint8_t timeout;
|
|
int32_t adress;
|
|
int32_t protocol_version;
|
|
uint8_t wid;
|
|
uint8_t hgt;
|
|
int8_t framebuffer[200];
|
|
} LCDCOMMAND;
|
|
|
|
typedef struct {
|
|
uint8_t netcommand;
|
|
uint8_t mode;
|
|
uint16_t timeout;
|
|
int32_t adress;
|
|
int32_t protocol_version;
|
|
int32_t number;
|
|
uint8_t setup;
|
|
uint8_t type;
|
|
uint8_t accelerator_timeout;
|
|
uint8_t accelerator_repeat;
|
|
uint16_t wait_timeout;
|
|
uint8_t remote_num;
|
|
uint8_t group_num;
|
|
int8_t remote[80];
|
|
int8_t command[20];
|
|
int32_t source_mask;
|
|
int32_t target_mask;
|
|
} TRANSLATECOMMAND;
|
|
|
|
typedef struct {
|
|
int32_t send_mask;
|
|
uint8_t device_mode;
|
|
uint8_t extended_mode;
|
|
uint16_t switch_mode;
|
|
uint16_t features;
|
|
int8_t version[10];
|
|
int8_t remote[80];
|
|
int8_t command[20];
|
|
} MODELINE;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
uint8_t align[2];
|
|
int8_t data[16384];
|
|
} STATUSBUFFER;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int32_t serno;
|
|
int32_t functions;
|
|
} FUNCTIONBUFFER;
|
|
|
|
typedef struct {
|
|
int32_t target_mask;
|
|
int32_t source_mask;
|
|
int8_t name[80];
|
|
} REMOTELINE;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t offset;
|
|
int16_t count_buffer;
|
|
int16_t count_total;
|
|
int16_t count_remaining;
|
|
REMOTELINE remotes[40];
|
|
} REMOTEBUFFER;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t offset;
|
|
int16_t count_buffer;
|
|
int16_t count_total;
|
|
int16_t count_remaining;
|
|
int8_t commands[200][20];
|
|
} COMMANDBUFFER;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t offset;
|
|
int16_t count_buffer;
|
|
int16_t count_total;
|
|
int16_t count_remaining;
|
|
TRANSLATECOMMAND trdata[30];
|
|
} TRANSLATEBUFFER;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
uint8_t align[2];
|
|
MODELINE stat[16];
|
|
} NETWORKMODE;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
uint8_t align;
|
|
uint8_t count;
|
|
uint8_t dev_adr[8];
|
|
MODELINE stat[8][16];
|
|
} NETWORKMODEEX;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
uint16_t netstatus;
|
|
uint16_t statuslevel;
|
|
uint8_t align[2];
|
|
int8_t message[256];
|
|
} NETWORKSTATUS;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
uint8_t align[2];
|
|
TIMINGDATA timing;
|
|
} NETWORKTIMING;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
uint16_t command_num;
|
|
int8_t remote[80];
|
|
int8_t command[20];
|
|
int8_t data[200];
|
|
} NETWORKRECV;
|
|
|
|
typedef struct {
|
|
uint32_t clientid;
|
|
int16_t statuslen;
|
|
int16_t statustype;
|
|
int16_t adress;
|
|
int16_t learnok;
|
|
int8_t remote[80];
|
|
int16_t num_timings;
|
|
int16_t num_commands;
|
|
int8_t received[CODE_LEN];
|
|
} NETWORKLEARNSTAT;
|
|
|
|
typedef struct {
|
|
SOCKET fd;
|
|
int32_t type;
|
|
uint32_t clientid;
|
|
uint32_t callno;
|
|
int8_t ip[20];
|
|
WSAEVENT event;
|
|
FILE *fp;
|
|
int32_t timing;
|
|
uint8_t resend_load;
|
|
IRDATA ird;
|
|
NETWORKLEARNSTAT learnstatus;
|
|
int8_t restdata[sizeof(LCDCOMMAND)];
|
|
int32_t restlen;
|
|
int32_t restread;
|
|
}
|
|
NETWORKCLIENT;
|
|
|
|
#define TCP_PORT 21000
|
|
#define LIRC_PORT 8765
|
|
#define UDP_PORT 6510
|
|
#define WEB_PORT 80
|
|
#define ALTERNATE_WEB 8080
|
|
|
|
#ifdef WIN32
|
|
#define CLIENT_COUNT MAXIMUM_WAIT_OBJECTS - 3
|
|
#endif /*
|
|
*/
|
|
|
|
#ifdef LINUX
|
|
#define CLIENT_COUNT 64
|
|
#endif /*
|
|
*/
|