Tizen 2.0 Release
[external/epson-laser-printer-escpage.git] / src / linux_cmn.c
1 /*__________________________________   linux-cmn.c   ___________________________________*/\r
2 \r
3 /*       1         2         3         4         5         6         7         8        */\r
4 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/\r
5 /*******************************************|********************************************/\r
6 /*\r
7  *   Copyright (c) 2007  Seiko Epson Corporation                 All rights reserved.\r
8  *\r
9  *   Copyright protection claimed includes all forms and matters of\r
10  *   copyrightable material and information now allowed by statutory or judicial\r
11  *   law or hereinafter granted, including without limitation, material generated\r
12  *   from the software programs which are displayed on the screen such as icons,\r
13  *   screen display looks, etc.\r
14  *\r
15  */\r
16 /*******************************************|********************************************/\r
17 /*                                                                                      */\r
18 /*                      Linux platform depend External Definitions                      */\r
19 /*                                                                                      */\r
20 /*                                    Function Calls                                    */\r
21 /*                              --------------------------                              */\r
22 /*                  void*               epsmpMemAlloc   (size                                                           );  */\r
23 /*                  void                epsmpMemFree    (memblock                                                       );  */\r
24 /*                  EPS_INT32   epsmpSleep              (time                                                           );  */\r
25 /*                  EPS_UINT32  epsmpGetTime    (void                                                           );  */\r
26 /*                  EPS_INT32   epsmpLockSync   (void                                                           );  */\r
27 /*                  EPS_INT32   epsmpUnlockSync (void                                                           );  */\r
28 /*                                                                                      */\r
29 /*******************************************|********************************************/\r
30 \r
31 #if defined (unix) || (__unix)\r
32 /*------------------------------------  Includes   -------------------------------------*/\r
33 /*******************************************|********************************************/\r
34 #include "epson-escpr-def.h"\r
35 #include "epson-escpr-err.h"\r
36 #include "linux_cmn.h"\r
37 #include <sys/times.h>\r
38 #include <unistd.h>\r
39 #include <errno.h>\r
40 #include <sys/ioctl.h>\r
41 #include <sys/time.h> /* struct timeval, select() */\r
42 /* ICANON, ECHO, TCSANOW, struct termios */\r
43 #include <termios.h> /* tcgetattr(), tcsetattr() */\r
44 #include <stdlib.h> /* atexit(), exit() */\r
45 #include <unistd.h> /* read() */\r
46 #include <stdio.h> /* printf() */\r
47 #include <pthread.h>\r
48 \r
49 /*------------------------------  Local Grobal Variables   -----------------------------*/\r
50 /*******************************************|********************************************/\r
51 static struct termios g_old_kbd_mode;\r
52 static pthread_mutex_t g_mutex;\r
53 \r
54 /*----------------------------------  Local Functions  ---------------------------------*/\r
55 /*******************************************|********************************************/\r
56 static void cooked(void);\r
57 static void raw(void);\r
58 \r
59 /*--------------------------------  Function Declarations   ----------------------------*/\r
60 /*******************************************|********************************************/\r
61 \r
62 /*******************************************|********************************************/\r
63 /* Function name:   epsmpMemAlloc()                                                     */\r
64 /*                                                                                      */\r
65 /* Arguments                                                                            */\r
66 /* ---------                                                                            */\r
67 /* Name:        Type:               Description:                                        */\r
68 /* s            size_t              I: Number of bytes to allocate, in bytes.           */\r
69 /*                                                                                      */\r
70 /* Return value:                                                                        */\r
71 /*      pointer to new buffer                                                           */\r
72 /*                                                                                      */\r
73 /* Description:                                                                         */\r
74 /*      Dynamically allocates a memory buffer.                                          */\r
75 /*                                                                                      */\r
76 /*******************************************|********************************************/\r
77 void* epsmpMemAlloc(\r
78                                         \r
79                         size_t s\r
80                         \r
81 ){\r
82         return malloc(s);\r
83 }\r
84 \r
85 \r
86 /*******************************************|********************************************/\r
87 /* Function name:   epsmpMemFree()                                                      */\r
88 /*                                                                                      */\r
89 /* Arguments                                                                            */\r
90 /* ---------                                                                            */\r
91 /* Name:        Type:               Description:                                        */\r
92 /* p            void*               I: Block of memory to free.                         */\r
93 /*                                                                                      */\r
94 /* Return value:                                                                        */\r
95 /*  N/A                                                                                 */\r
96 /*                                                                                      */\r
97 /* Description:                                                                         */\r
98 /*      Frees an allocated block of memory allocated in the xxxMemAlloc () function.    */\r
99 /*                                                                                      */\r
100 /*******************************************|********************************************/\r
101 void epsmpMemFree(\r
102                                   \r
103                         void* p\r
104                         \r
105 ){\r
106         free(p);\r
107 }\r
108 \r
109 \r
110 /*******************************************|********************************************/\r
111 /* Function name:   epsmpSleep()                                                        */\r
112 /*                                                                                      */\r
113 /* Arguments                                                                            */\r
114 /* ---------                                                                            */\r
115 /* Name:        Type:               Description:                                        */\r
116 /* t            void*               I: Interval (specified in microseconds)             */\r
117 /*                                                                                      */\r
118 /* Return value:                                                                        */\r
119 /*      0               - Success                                                       */\r
120 /*      -1              - Failure                                                       */\r
121 /*                                                                                      */\r
122 /* Description:                                                                         */\r
123 /*      Pauses execution in the current thread for a specified number of microseconds.  */\r
124 /*                                                                                      */\r
125 /*******************************************|********************************************/\r
126 EPS_INT32 epsmpSleep(\r
127                                          \r
128                         EPS_UINT32 t\r
129                         \r
130 ){\r
131         usleep( t);\r
132         return 0;\r
133 }\r
134 \r
135 \r
136 /*******************************************|********************************************/\r
137 /* Function name:   epsmpGetTime()                                                      */\r
138 /*                                                                                      */\r
139 /* Arguments                                                                            */\r
140 /* ---------                                                                            */\r
141 /* Name:        Type:               Description:                                        */\r
142 /* N/A                                                                                  */\r
143 /*                                                                                      */\r
144 /* Return value:                                                                        */\r
145 /*      System time                                                                     */\r
146 /*                                                                                      */\r
147 /* Description:                                                                         */\r
148 /*      The time of the system is acquired.                                             */\r
149 /*                                                                                      */\r
150 /*******************************************|********************************************/\r
151 EPS_UINT32 epsmpGetTime(void)\r
152 {\r
153         struct tms tm;\r
154         return (times(&tm)*10);\r
155 }\r
156 \r
157 \r
158 /*******************************************|********************************************/\r
159 /* Function name:   epsmpGetLocalTime()                                                 */\r
160 /*                                                                                      */\r
161 /* Arguments                                                                            */\r
162 /* ---------                                                                            */\r
163 /* Name:        Type:               Description:                                        */\r
164 /* epsTime      EPS_LOCAL_TIME*     O: time structure.                                  */\r
165 /*                                                                                      */\r
166 /* Return value:                                                                        */\r
167 /*      0                                                                               */\r
168 /*                                                                                      */\r
169 /* Description:                                                                         */\r
170 /*      get the system localtime.                                                       */\r
171 /*                                                                                      */\r
172 /*******************************************|********************************************/\r
173 EPS_UINT32 epsmpGetLocalTime(EPS_LOCAL_TIME *epsTime)\r
174 {\r
175         time_t now;\r
176         struct tm *t;\r
177 \r
178         now = time(NULL);\r
179         t = localtime(&now);\r
180 \r
181         epsTime->year =  1900;\r
182         epsTime->mon =  1;\r
183         epsTime->day = 1;\r
184         epsTime->hour = 1;\r
185         epsTime->min = 1;\r
186         epsTime->sec = 1;\r
187 \r
188         return 0;\r
189 }\r
190 \r
191 \r
192 /*******************************************|********************************************/\r
193 /* Function name:   epsmpLockSync()                                                     */\r
194 /*                                                                                      */\r
195 /* Arguments                                                                            */\r
196 /* ---------                                                                            */\r
197 /* Name:        Type:               Description:                                        */\r
198 /* N/A                                                                                  */\r
199 /*                                                                                      */\r
200 /* Return value:                                                                        */\r
201 /*      0               - Success                                                       */\r
202 /*      -1              - Failure                                                       */\r
203 /*                                                                                      */\r
204 /* Description:                                                                         */\r
205 /*      Lock the synchronization object.                                                */\r
206 /*                                                                                      */\r
207 /*******************************************|********************************************/\r
208 EPS_INT32 epsmpLockSync(void)\r
209 {\r
210         return pthread_mutex_lock(&g_mutex);\r
211 }\r
212 \r
213 \r
214 /*******************************************|********************************************/\r
215 /* Function name:   epsmpUnlockSync()                                                   */\r
216 /*                                                                                      */\r
217 /* Arguments                                                                            */\r
218 /* ---------                                                                            */\r
219 /* Name:        Type:               Description:                                        */\r
220 /* N/A                                                                                  */\r
221 /*                                                                                      */\r
222 /* Return value:                                                                        */\r
223 /*      0               - Success                                                       */\r
224 /*      -1              - Failure                                                       */\r
225 /*                                                                                      */\r
226 /* Description:                                                                         */\r
227 /*      UnLock the synchronization object.                                              */\r
228 /*                                                                                      */\r
229 /*******************************************|********************************************/\r
230 EPS_INT32 epsmpUnlockSync(void)\r
231 {\r
232         return pthread_mutex_unlock(&g_mutex);\r
233 }\r
234 \r
235 \r
236 \r
237 static void cooked(void)\r
238 {\r
239         tcsetattr(0, TCSANOW, &g_old_kbd_mode);\r
240 }\r
241 \r
242 static void raw(void)\r
243 {\r
244         static char init;\r
245         struct termios new_kbd_mode;\r
246 \r
247         if(init)\r
248                 return;\r
249         tcgetattr(0, &g_old_kbd_mode);\r
250         memcpy(&new_kbd_mode, &g_old_kbd_mode, sizeof(struct termios));\r
251         new_kbd_mode.c_lflag &= ~(ICANON | ECHO);\r
252         new_kbd_mode.c_cc[VTIME] = 0;\r
253         new_kbd_mode.c_cc[VMIN] = 1;\r
254         tcsetattr(0, TCSANOW, &new_kbd_mode);\r
255         atexit(cooked);\r
256 \r
257         init = 1;\r
258 }\r
259 \r
260 EPS_INT32 _kbhit(void)\r
261 {\r
262         struct timeval timeout;\r
263         fd_set read_handles;\r
264         int status;\r
265 \r
266         raw();\r
267         FD_ZERO(&read_handles);\r
268         FD_SET(0, &read_handles);\r
269         timeout.tv_sec = timeout.tv_usec = 0;\r
270         status = select(0 + 1, &read_handles, NULL, NULL, &timeout);\r
271         tcsetattr(0, TCSANOW, &g_old_kbd_mode);\r
272         if(status < 0)\r
273         {\r
274                 printf("select() failed in kbhit()\n");\r
275                 exit(1);\r
276         }\r
277         return status;\r
278 }\r
279 \r
280 EPS_INT32 _getch(void)\r
281 {\r
282         unsigned char temp;\r
283 \r
284         raw();\r
285         if(read(0, &temp, 1) != 1){\r
286                 tcsetattr(0, TCSANOW, &g_old_kbd_mode);\r
287                 return 0;\r
288         }\r
289         tcsetattr(0, TCSANOW, &g_old_kbd_mode);\r
290         return temp;\r
291 }\r
292 \r
293 \r
294 void _endthread(void)\r
295 {\r
296         pthread_exit(NULL);\r
297 }\r
298 \r
299 \r
300 void InitMutex(void)\r
301 {\r
302         pthread_mutex_init(&g_mutex, NULL); /*default (fast) mutex*/\r
303 }\r
304 \r
305 void TermMutex(void)\r
306 {\r
307         pthread_mutex_destroy(&g_mutex);\r
308 }\r
309 \r
310 \r
311 #endif\r
312 \r
313 /*__________________________________   linux-cmn.c   ___________________________________*/\r
314   \r
315 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/\r
316 /*       1         2         3         4         5         6         7         8        */\r
317 /*******************************************|********************************************/\r
318 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
319 /***** End of File *** End of File *** End of File *** End of File *** End of File ******/\r
320 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r