← Back to dashboard

File view

plc_keyboard_4711.lib

1
//$Id: ism_keyboard.lib,v 1.5 2008-09-05 11:45:22 charlie Exp $
2
/*
3
   $Log: ism_keyboard.lib,v $
4
5
*/
6
7
/*** BeginHeader */
8
9
#ifndef	__ISM_KEYBOARD_4711_
10
#define	__ISM_KEYBOARD_4711_
11
12
/*** EndHeader */
13
14
/*** BeginHeader
15
16
InitializeKbd,
17
KeyboardScan,
18
SetKeysource,
19
GetKeyCode,
20
GetKeyEdgeFlag,
21
GetFastFlag,
22
TestChord,
23
KbdOff,
24
KbdOn,
25
StdioScan
26
27
*/
28
29
// Global constants for keyboard scanner ************************************************
30
31
#define CONSOLE_KEYS 1
32
#define AUTOPAK_KEYS 2
33
#define KEY_LAG 		300
34
#define KEYSOURCE_CONSOLE CONSOLE_KEYS
35
#define KEYSOURCE_AUTOPAK AUTOPAK_KEYS
36
#define KEYSOURCE_BOTH (CONSOLE_KEYS | AUTOPAK_KEYS)
37
38
void     InitializeKbd(int mask);               		//initialization function
39
void		KeyboardScan ();							//signal program to presence of active key
40
int      GetKeyCode();
41
int      GetKeyEdgeFlag();
42
int		GetFastFlag();
43
void     TestChord(int *clearFlag);
44
void     KbdOff();
45
void     KbdOn();
46
void		StdioScan();
47
48
/*** EndHeader */
49
50
//Local constants for keyboard scanner **************************************************
51
/*
52
#define	PB1	1
53
#define	PB2	3
54
#define	PB3	5
55
#define	PB4	7
56
#define	PB5	6
57
#define	PB6	0
58
#define	PB7	2
59
#define	PB8	4
60
*/
61
//Function prototypes *******************************************************************
62
63
void		KbdScan ();									//scan keyboard for active key
64
65
//Local keyboard handler variables ******************************************************
66
67
int		keyCode;										//current active key
68
int		keyEdgeFlag;								//first detection of active key
69
int      kbdOn;
70
Ms			Lag;
71
int		fastFlag;
72
73
74
//Scan keyboard for active key **********************************************************
75
76
void KbdScan ()
77
{
78
	int result;
79
   int mask;
80
   int i;
81
82
	result = 0;
83
84
	result = ~RdPortI(PADR)& 0xff;
85
86
	if (result > 0)
87
	{
88
	   MsDelay (20);
89
	   if (result != (~RdPortI(PADR)& 0xff))
90
	      result = 0;
91
	}
92
	if (result > 0 && !keyEdgeFlag)
93
	{
94
   	mask = 1;
95
   	for (i = 1 ; i <= N_PB ; i++)
96
      {
97
      	if (result & mask)
98
         {
99
            if (MS_TIMER - Lag > KEY_LAG)
100
            {
101
            	keyEdgeFlag = 1;
102
               Lag = MS_TIMER;
103
               if ((keyCode == UPPB || keyCode == DOWNPB) && i == keyCode)
104
               	fastFlag = 10;
105
               else
106
               	fastFlag = 1;
107
               keyCode = i;
108
            }
109
            else
110
               keyEdgeFlag = 0;
111
				//printf("Push Button - %d\n",keyCode);
112
         }
113
      mask <<= 1;
114
      }
115
116
	}
117
   else
118
   {
119
	   keyCode = NONEPB;
120
      fastFlag = 1;
121
   }
122
}
123
124
// Test chord *****************************************************************
125
126
void TestChord(int *clearFlag)
127
{
128
	int result;
129
	result = 0;
130
   *clearFlag = 0;
131
	result = ~RdPortI(PADR)& 0xff;
132
   if (result & 0x80 && result & 0x04)
133
   	*clearFlag = 1;
134
}
135
136
void KbdOff() {kbdOn = 0;}
137
void KbdOn() {kbdOn = 1;}
138
139
//Signal program to presence of active key **********************************************
140
141
void	KeyboardScan ()
142
{
143
	KbdScan ();
144
}
145
146
void InitializeKbd(int mask)
147
{
148
	WrPortI(SPCR, NULL, 0x80); // port a input
149
	//SetKeysource(mask);
150
	kbdOn = 1;
151
   keyCode = NONEPB;										//current active key
152
	keyEdgeFlag = 0;								//first detection of active key
153
	Lag = MS_TIMER;
154
	fastFlag = 1;
155
}
156
157
int GetFastFlag() {return fastFlag;}
158
int GetKeyCode() {return keyCode;}
159
int GetKeyEdgeFlag()
160
{
161
	int result;
162
163
   result = keyEdgeFlag;
164
   keyEdgeFlag = 0;
165
	return result;
166
}
167
168
// Stdio key scan for simulation ***********************************************
169
void StdioScan()
170
{
171
	char keyboard[8];
172
   char temp[8];
173
   char Action;
174
   int  chnl;
175
   int  value;
176
177
   if (kbhit())
178
   {
179
   	// Command Structure
180
      // [Command Code][LDN Channel][Pressure]
181
      // Command Code: P, S, M
182
      // LDN Channel: 1-4
183
      // Pressure: PSI * 100, eg 22.00 * 100 = 2200
184
185
      // Parse command
186
      gets(keyboard);
187
      Action = keyboard[0];
188
      strncpy(temp, &keyboard[1], 1);
189
      chnl = atoi(temp) - 1;
190
      strncpy(temp, &keyboard[2], 5);
191
      value = atoi(temp);
192
193
      
194
   }
195
}
196
//End of keyboard handler ***************************************************************
197
198
/*** BeginHeader */
199
200
#endif
201
202
/*** EndHeader */