made a public and private header and merged the c code back into one
[webos-internals:precomd.git] / src / novacom_private.h
1 /*
2  * novacom_private.h
3  *
4  *  Created on: Jun 24, 2009
5  *      Author: mike.gaffney
6  *
7  * Hopefully this name is temporary. This is the internal header
8  * for the novacom / pmux stuff. It's mainly here so we can do
9  * lower level testing.
10  *
11  * You should only be using this header if you
12  * are working IN novacom, not WITH it.
13  */
14
15 #ifndef NOVACOM_PRIVATE_H_
16 #define NOVACOM_PRIVATE_H_
17 #include <usb.h>
18
19 #define uint32                         unsigned int
20 #define uint16                         short
21
22 #define USB_VENDOR_PALM             0x0830
23 #define USB_TIMEOUT                 5000
24 #define USB_BUFLEN                  32768
25
26 #define NOVACOM_USB_CLASS           255
27 #define NOVACOM_USB_SUBCLASS        71
28 #define NOVACOM_USB_PROTOCOL        17
29
30 #define NOVACOM_CMD_NOP             0
31 #define NOVACOM_CMD_ANNOUNCEMENT    2
32 #define NOVACOM_CMD_PMUX            3
33
34 #define PMUX_HEADER_VERSION         1
35
36 #define PMUX_HEADER_TYPE_DATA       0
37 #define PMUX_HEADER_TYPE_ERR        1
38 #define PMUX_HEADER_TYPE_OOB        2
39
40 #define PMUX_OOB_EOF                0
41 #define PMUX_OOB_SIGNAL             1
42 #define PMUX_OOB_RETURN             2
43 #define PMUX_OOB_RESIZE             3
44
45 #define PMUX_FILENO_STDIN           0
46 #define PMUX_FILENO_STDOUT          1
47 #define PMUX_FILENO_STDERR          2
48
49 static char *NOVACOM_COMMANDS[] = {
50     "NOP",
51     "",
52     "ANNOUNCEMENT",
53     "PMUX"
54 } ;
55
56 #define PMUX_HEADER_MAGIC           0x7573626c
57
58 #define PMUX_ASCII_MAGIC             0x706d7578
59 #define PMUX_TX                     0x0037
60 #define PMUX_RX                     0x0162
61
62 typedef struct {
63     uint32 magic ;
64     uint32 direction ;
65     char *command ;
66 } novacom_ascii_t ;
67
68 typedef struct {
69     // nduid is NOT null terminated here
70     char nduid[40] ;
71     uint32 mtu ;
72     uint32 heartbeat ;
73     uint32 timeout ;
74 } novacom_announcement_t ;
75
76 typedef struct {
77     // nduid IS null terminated here
78     char nduid[40] ;
79 } novacom_nop_t ;
80
81 typedef struct {
82     uint32 type ;
83     uint32 payload ;
84     uint32 zero[3] ;
85 } pmux_oob_t ;
86
87 // Structure to open the tty
88 typedef struct {
89     uint32 three ;
90     uint32 ten ;
91     uint32 dee ;
92 } pmux_channel_open_t ;
93
94 typedef struct {
95     char request[0] ;
96 } pmux_cmd_request_t ;
97
98 typedef struct {
99     char reply[0] ;
100 } pmux_cmd_reply_t ;
101
102 // Structure for the tty
103 typedef struct {
104     uint32 magic ;
105     uint32 version ;
106     uint32 length ;
107     uint32 type ;
108     char payload[0] ;
109 } pmux_data_payload_t ;
110
111 typedef struct {
112     uint32 magic ;
113     char mode ;
114     char direction ;
115     uint16 ack_synx ;
116     uint16 status ;
117     uint32 sequence_num ;
118     uint32 length_payload ;
119     uint32 length_pmux_packet ;
120     uint32 zero ;
121     char payload[0] ;
122 } pmux_packet_t ;
123
124 struct usb_dev_handle* novacom_find_endpoints( uint32 *ep_in, uint32 *ep_out );
125 int is_interface_novacom(struct usb_interface_descriptor *interface);
126 int novacom_init( novacom_device_t *dev );
127 void print_buf( char *buf, int size );
128 void novacom_payload_print( uint32 command, char payload[], uint32 size );
129 int novacom_packet_read( novacom_device_t *dev, uint32 size, uint32 timeout );
130 int novacom_packet_write( novacom_device_t *dev, uint32 size, uint32 timeout );
131 void novacom_packet_print( novacom_packet_t *packet, int size );
132 int novacom_reply_nop( novacom_device_t *dev, uint32 len );
133 int novacom_reply_announcement( novacom_device_t *dev, uint32 len );
134 int novacom_packet_process( novacom_device_t *dev, int len );
135 int error_check( int ret, int quit, char *msg );
136
137
138 #endif /* NOVACOM_PRIVATE_H_ */