0
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 /* File Name: atp_uart.c */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 /* Purpose: This file contains the internal functions related to */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 /* the ATP-UART interface and used to utilize a COM port */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 /* under WIN32. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 /* Note: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 /* Revision History: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 /* 10/04/01 Pascal Pompei */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 /* - Create. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 /* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 #include "atp/atp_uart_i.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 /* Function Name: atp_uart_create_com_port */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 /* Purpose: This function creates a COM port. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 /* Input Parameters: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 /* com_port - Contains the COM port number. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 /* baud_rate - Contains the baud rate (in bits per second). */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 /* Output Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 /* Global Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 /* Note: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 /* Revision History: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 /* 02/05/01 David Lamy-Charrier */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 /* - Create. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 T_ATP_UART_ERROR_CODES atp_uart_create_com_port (T_ATP_UART_COM_PORT com_port,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 T_ATP_UART_BAUD_RATE baud_rate)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 /* Declare local variables. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 DCB control_settings;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 COMMTIMEOUTS timeouts = {MAXDWORD, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 MAXDWORD, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 0x0000000A, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 0x00000000, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 0x00000000};
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 /******************* atp_uart_create_com_port function begins *******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 /* First, update the name associated with the COM port. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 (gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_name[3] = (char) ('0' + com_port);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 /* Then, create the COM port with the following parameters: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 /* - Read/Write access, */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 /* - The COM port can not be shared and can not be opened again until the */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 /* handle is closed, */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 /* - The handle can not be inherited, */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 /* - The COM port is just opened (failed if does not exist), */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 /* - No specific file attributes, */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 /* - No template used. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 (gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle = CreateFile ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 (GENERIC_READ | GENERIC_WRITE),
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 0x00000000,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 NULL,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 OPEN_EXISTING,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 0x00000000,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 NULL);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 /* If any error occurred, then abort. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 if ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle == INVALID_HANDLE_VALUE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 return (RV_INVALID_PARAMETER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 /* Otherwise, having created the COM port, get the default setting */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 /* information. However, if any error occurred, then remove the COM port */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 /* and abort. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 control_settings.DCBlength = sizeof (DCB);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 if (GetCommState ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 &control_settings) == FALSE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 (void) atp_uart_remove_com_port ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 return (RV_INVALID_PARAMETER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 /* Define the baud rate, as well as the DCB structure settings. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 control_settings.BaudRate = baud_rate;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 control_settings.fOutxCtsFlow = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 control_settings.fOutxDsrFlow = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 control_settings.fDtrControl = DTR_CONTROL_ENABLE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 control_settings.fDsrSensitivity = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 control_settings.fRtsControl = RTS_CONTROL_HANDSHAKE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 /* Then, configure the COM port according to the specifications of the DCB */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 /* structure, set the timeout parameters for all read and write operations */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 /* on the COM port and discard all characters from the output and input */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 /* buffers. However, if any error occurred, then remove the COM port and */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 /* abort. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 if ((SetCommState ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 &control_settings) == FALSE) || \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 (SetCommTimeouts ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 &timeouts) == FALSE) || \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 (PurgeComm ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 (PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT)) == FALSE))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 (void) atp_uart_remove_com_port ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 return (RV_INTERNAL_ERR);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 return (RV_OK);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 } /****************** End of atp_uart_create_com_port function ******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 /* Function Name: atp_uart_write_com_port */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 /* Purpose: This function writes data on the COM port. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 /* Input Parameters: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 /* data_buffer_p - Pointer on the data to be written. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 /* data_size - Contains the total byte count to be written. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 /* Output Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 /* Global Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 /* Note: Buffer de-allocation is outside the scope of this */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 /* function. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 /* Revision History: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 /* 02/05/01 David Lamy-Charrier */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 /* - Create. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 T_ATP_UART_ERROR_CODES atp_uart_write_com_port (UINT8 *data_buffer_p,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 UINT32 data_size)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 /* Declare a local variable. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 UINT32 data_size_sent = 0x00000000;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 /******************** atp_uart_write_com_port function begins *******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 /* Attempt writing data. If any error occurred, then abort. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 if (((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle == INVALID_HANDLE_VALUE) || \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 (WriteFile ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 data_buffer_p, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 data_size, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 (unsigned long *) (&data_size_sent), \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 NULL) == FALSE) || \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 (data_size_sent != data_size))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 return (RV_INVALID_PARAMETER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 return (RV_OK);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 } /******************* End of atp_uart_write_com_port function ******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 /* Function Name: atp_uart_read_com_port */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 /* Purpose: This function reads data from the COM port. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 /* Input Parameters: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 /* data_buffer_p - Pointer on the destination buffer. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 /* data_size_p - Pointer on the total byte count to be read. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 /* Output Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 /* data_size_p - Contains the total byte count read. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 /* Global Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 /* Notes: Buffer allocation is outside the scope of this */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 /* function Moreover, this function returns the total */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 /* byte count read, up to the expected value (from */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 /* 0x00000000 to 'data_size_p'). */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 /* Revision History: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 /* 02/05/01 David Lamy-Charrier */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 /* - Create. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 T_ATP_UART_ERROR_CODES atp_uart_read_com_port (UINT8 *data_buffer_p,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 UINT32 *data_size_p)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 /* Declare a local variable. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 UINT32 data_size_read = 0x00000000;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 UINT32 total_data_size_read = 0x00000000;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 /******************** atp_uart_read_com_port function begins ********************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 /* First, check whether the COM port is in use and whether the total byte */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 /* count to be read is valid. Otherwise, abort. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 if (((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle == INVALID_HANDLE_VALUE) || \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 (data_size_p == NULL))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 return (RV_INVALID_PARAMETER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 /* Then, attempt reading data, up to the expected value. However, abort if */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 /* no data available from the COM port or if any error occurred. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 do
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 if (ReadFile ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle, \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 (data_buffer_p + total_data_size_read), \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 (*data_size_p - total_data_size_read), \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 (unsigned long *) (&data_size_read), \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 NULL) == FALSE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 return (RV_INVALID_PARAMETER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 total_data_size_read += data_size_read;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 while (data_size_read != 0x00000000);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 /* Update the total byte count read. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 *data_size_p = total_data_size_read;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 return(RV_OK);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 } /******************* End of atp_uart_read_com_port function *******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 /* Function Name: atp_uart_remove_com_port */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 /* Purpose: This function removes the COM port. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 /* Input Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 /* Output Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 /* Global Parameters: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 /* Note: None. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 /* Revision History: */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 /* 02/05/01 David Lamy-Charrier */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 /* - Create. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 /* */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 /********************************************************************************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 T_ATP_UART_ERROR_CODES atp_uart_remove_com_port (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 /******************* atp_uart_remove_com_port function begins *******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 /* Remove the COM port. If any error occurred, then abort. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 if (((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle == INVALID_HANDLE_VALUE) || \
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 (DeleteFile ((gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_name) == FALSE))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 return (RV_INVALID_PARAMETER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 /* Set the default handle assigned to the COM port. */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 (gbl_atp_uart_ctrl_blk_p->conn_ctrl_blk).com_port_handle = INVALID_HANDLE_VALUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 return (RV_OK);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 } /****************** End of atp_uart_remove_com_port function ******************/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 |