o: ActiveSupport::Cache::Entry :@compressedF: @value"D±">±
main.c
21 21
#include "gpt.h"
22 22
#include <string.h>
23 23
#include "keil/GPS_dekoduj.h"
24
#include <../../os/various/chprintf.h>
25
#include <chstreams.h.>
24 26

  
25 27
/*MAX delka prikazu, ktery uzivatel muze zadat*/
26 28
#define MAX_DELKA_PRIKAZU				10
27 29

  
28 30
/*Velikost GPS bufferu*/
29 31
#define GPS_BUFFER							500
32
#define PWM_PERIODA_NORMAL			20000
33
#define PWM_SIRKA_NORMAL				PWM_PERIODA_NORMAL/2
30 34

  
31 35
extern NMEA_GPGGA GPGGA_informace;
32 36
Thread *tp_odpal = NULL;
33 37
uint8_t uvitaci_zprava[] = "\r\n\r\n* * * * * * * * * * * * * * * * * * * * * * * * * *\r\nVita vas Automaticky Vypoustec Meteobalonu 1.1\r\nZapojeni vyvodu:\r\n\tGPIOB10 - ventil\r\n\tGPIOB11 - lis\r\n\tGPIOB12 - zataveni balonu\r\n\tGPIOB13 - otevreni krytu\r\nPrikazy:\r\n\t<odpal> zahajeni sekvence vypousteni\n\r\t<zrus> zruseni vypousteni\n\r\t<help> napoveda\r\n* * * * * * * * * * * * * * * * * * * * * * * * * *\r\n\r\n";
34 38

  
39
static PWMConfig pwmcfg = {
40
  10000,                                    /* 10kHz PWM clock frequency.   */
41
  PWM_PERIODA_NORMAL,                                    /* PWM period 1S (in ticks).    */
42
  NULL,
43
  {
44
    {PWM_OUTPUT_ACTIVE_HIGH, NULL},
45
    {PWM_OUTPUT_ACTIVE_HIGH, NULL},
46
    {PWM_OUTPUT_DISABLED, NULL},
47
    {PWM_OUTPUT_DISABLED, NULL}
48
  },
49
  /* HW dependent part.*/
50
  0
51
};
52

  
35 53
/*
36 54
 * Konfigurace USART2
37 55
 */
......
48 66
  0
49 67
};
50 68

  
51
/*
52
* GPT2 callback.
53
*/
69

  
70
 /*
71
	* GPT2 callback.
72
	*/
54 73
static void gpt2cb(GPTDriver *gptp)
55 74
{
56 75
  (void)gptp;
57
		palTogglePad(GPIOB, GPIOB_LED4);
58 76
	 /* Wakes up the thread.*/
59 77
  chSysLockFromIsr();
60 78
  if (tp_odpal != NULL) {
......
65 83
  chSysUnlockFromIsr();
66 84
}	
67 85

  
86

  
68 87
 /*
69 88
  *Konfigurace casovace 2
70 89
  */
......
82 101
	static msg_t Thread_odpal(void *arg) {
83 102
	uint8_t stav = 0; // rika, ve ktere fazi je odpalovani
84 103
	uint8_t odpal_povolen = 0;
85
	uint8_t msg_zrusen[] = "Odpal zrusen uzivatelem.\r\n";
86 104
	uint8_t odpal_pomocna = 0;
105
	uint8_t pocet_opakovani = 1;
106
	uint16_t perioda_casovace = 500;
87 107
	(void)arg;
88 108
  chRegSetThreadName("Odpal_vlakno");
89 109
		
......
103 123
		{
104 124
				odpal_povolen = 1;
105 125
				odpal_pomocna++;
126
				stav = 0;
127
				pocet_opakovani = 1;
106 128
		}
107
		else if (msg == 2) //Pokud se ma odpal zrusit v prubehu
129
		else if (msg == 2) //Pokud se ma odpal zrusit v prubehu vypousteni
108 130
		{
109 131
			/*
110 132
			 * Pro jistotu se vypnou vsechny vystupy pri zruseni odpalu
......
114 136
			palClearPad(GPIOB, GPIOB_PIN12);
115 137
			palClearPad(GPIOB, GPIOB_PIN13);
116 138
			
139
			if(odpal_povolen == 1)
140
				chprintf((BaseSequentialStream *)&SD1,"\r\nOdpal zrusen uzivatelem.\r\n");
141
			else
142
				chprintf((BaseSequentialStream *)&SD1,"Odpal nebyl aktivovan.\r\n");
143
			
117 144
			odpal_povolen = 0;
118 145
			odpal_pomocna = 0;
119 146
			stav = 0;
120
			sdWrite(&SD1, msg_zrusen, sizeof(msg_zrusen)/sizeof(uint8_t));
147
			pocet_opakovani = 1;
121 148
		}
122 149
		else if (msg == 50 && odpal_povolen == 1) // preruseni od GPT
123 150
		{
......
129 156
			switch (stav)
130 157
			{
131 158
				case 0:
132
					sdWrite(&SD1,"Vypousteni zahajeno!\r\n",sizeof("Vypousteni zahajeno!\r\n")/sizeof(char));
133
					sdWrite(&SD1,"(1/4)\tVentil otevren -> nafukovani balonu\r\n",sizeof("1/4)\tVentil otevren -> nafukovani balonu\r\n")/sizeof(char));
134
					palSetPad(GPIOB, GPIOB_PIN10);
135
					gptStartOneShot(&GPTD2,10000);
159
					if (pocet_opakovani == 1)
160
						chprintf((BaseSequentialStream *)&SD1,"Vypousteni zahajeno!\r\n");
161
					
162
					if (pocet_opakovani <= 20)
163
					{	
164
						//sdWrite(&SD1,,sizeof("1/4)\tVentil otevren -> nafukovani balonu\r\n")/sizeof(char));
165
						chprintf((BaseSequentialStream *)&SD1,"(1/4)\tVentil otevren -> nafukovani balonu %d%%\r",pocet_opakovani*5);
166
						palSetPad(GPIOB, GPIOB_PIN10);
167
						gptStartOneShot(&GPTD2,perioda_casovace);
168
						pocet_opakovani++;
169
						if (pocet_opakovani == 21)
170
						{
171
							chprintf((BaseSequentialStream *)&SD1,"\r\n");
172
							stav++;
173
							pocet_opakovani = 1;
174
						}
175
					}
136 176
				break;			
137 177
				case 1:
138
					palClearPad(GPIOB, GPIOB_PIN10);
139
					palSetPad(GPIOB, GPIOB_PIN11);
140
					sdWrite(&SD1,"(2/4)\tPrepalovani lisu...\r\n",sizeof("(2/4)\tPrepalovani lisu...\r\n")/sizeof(char));
141
					gptStartOneShot(&GPTD2,5000);
178
					if (pocet_opakovani <= 10)
179
					{	
180
						palClearPad(GPIOB, GPIOB_PIN10);
181
						palSetPad(GPIOB, GPIOB_PIN11);
182
						chprintf((BaseSequentialStream *)&SD1,"(2/4)\tPrepalovani lisu... %d%%\r",pocet_opakovani*10);
183
						gptStartOneShot(&GPTD2,perioda_casovace);
184
						pocet_opakovani++;
185
						if (pocet_opakovani == 11)
186
						{
187
							chprintf((BaseSequentialStream *)&SD1,"\r\n");
188
							stav++;
189
							pocet_opakovani = 1;
190
						}
191
					}
142 192
				break;
143 193
				case 2: 
144
					palClearPad(GPIOB, GPIOB_PIN11);
145
					palSetPad(GPIOB, GPIOB_PIN12);
146
					sdWrite(&SD1,"(3/4)\tZatavovani balonu...\r\n",sizeof("(3/4)\tZatavovani balonu...\r\n")/sizeof(char));
147
					gptStartOneShot(&GPTD2,5000);
194
					if (pocet_opakovani <= 10)
195
					{						
196
						palClearPad(GPIOB, GPIOB_PIN11);
197
						palSetPad(GPIOB, GPIOB_PIN12);
198
						chprintf((BaseSequentialStream *)&SD1,"(3/4)\tZatavovani balonu... %d%%\r",pocet_opakovani*10);
199
						gptStartOneShot(&GPTD2,perioda_casovace);
200
						pocet_opakovani++;
201
						if (pocet_opakovani == 11)
202
						{
203
							chprintf((BaseSequentialStream *)&SD1,"\r\n");
204
							stav++;
205
							pocet_opakovani = 1;
206
						}
207
					}
148 208
				break;
149 209
				case 3:
150
					palClearPad(GPIOB, GPIOB_PIN12);
151
					palSetPad(GPIOB, GPIOB_PIN13);
152
					sdWrite(&SD1,"(4/4)\tOtevirani vika...\r\n",sizeof("(4/4)\tOtevirani vika...\r\n")/sizeof(char));
153
					gptStartOneShot(&GPTD2,3000);
210
					if (pocet_opakovani <= 20)
211
					{						
212
						palClearPad(GPIOB, GPIOB_PIN12);
213
						palSetPad(GPIOB, GPIOB_PIN13);
214
						chprintf((BaseSequentialStream *)&SD1,"(4/4)\tOtevirani vika... %d%%\r",pocet_opakovani*5);
215
						gptStartOneShot(&GPTD2,perioda_casovace);
216
						pocet_opakovani++;
217
						if (pocet_opakovani == 21)
218
						{
219
							chprintf((BaseSequentialStream *)&SD1,"\r\n");
220
							stav++;
221
							pocet_opakovani = 1;
222
						}
223
					}
154 224
				break;
155 225
				case 4: 
156 226
					palClearPad(GPIOB, GPIOB_PIN13);
157
					sdWrite(&SD1,"Vypousteni ukonceno!\r\n",sizeof("Vypousteni ukonceno!\r\n")/sizeof(char));
227
					chprintf((BaseSequentialStream *)&SD1,"Vypousteni ukonceno!\r\n");
158 228
					odpal_povolen = 0;
159 229
					odpal_pomocna = 0;
160 230
					stav = 0;
......
162 232
				default: 
163 233
				break;
164 234
			}
165
			stav++;
166 235
		}	
167 236
	}
168 237
}
......
245 314
			chSchReadyI(tp_odpal);
246 315
			tp_odpal = NULL;
247 316
		}
248
		chSysUnlockFromIsr();		
249
		palTogglePad(GPIOB, GPIOB_LED4);
317
		chSysUnlockFromIsr();
318

  
250 319
	}
251 320
	else if (strcmp(prikaz,"zrus") == 0)
252 321
	{
......
257 326
			chSchReadyI(tp_odpal);
258 327
			tp_odpal = NULL;
259 328
		}
260
		chSysUnlockFromIsr();		
329
		chSysUnlockFromIsr();
261 330
	}
262 331
	else if (strcmp(prikaz,"help") == 0)
263 332
	{
......
265 334
	}
266 335
	else 
267 336
	{
268
		uint8_t zp_neplatny[] = "Neplatny prikaz, napiste <odpal> pro zahajeni sekvence\n\r ci <zrus> pro zruseni vypousteni\n\r";
337
		uint8_t zp_neplatny[] = "Neplatny prikaz!\r\n\t<odpal> pro zahajeni sekvence\n\r\t<zrus> pro zruseni vypousteni\n\r";
269 338
		sdWrite(&SD1,zp_neplatny,sizeof(zp_neplatny)/sizeof(uint8_t));
270 339
		palTogglePad(GPIOB, GPIOB_LED3);
271 340
	}
......
311 380
	/*
312 381
	 * LED na vyvojove desce
313 382
	 */
314
	palSetPadMode(GPIOB, GPIOB_LED4, PAL_MODE_OUTPUT_PUSHPULL);
315 383
	palSetPadMode(GPIOB, GPIOB_LED3, PAL_MODE_OUTPUT_PUSHPULL);
316 384
	
317
	/*
318
	 * Porty pro vypousteci sekvenci
319
	 */
320
	palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
321
	palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL);	
322
	palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL);
323
	palSetPadMode(GPIOB, 13, PAL_MODE_OUTPUT_PUSHPULL);
385
  /*
386
   * Initializes the PWM driver 4, routes the TIM4 outputs to the board LEDs.
387
   */
388
  pwmStart(&PWMD4, &pwmcfg);
389
  palSetPadMode(GPIOB, GPIOB_LED4, PAL_MODE_ALTERNATE(2));
390
	pwmEnableChannel(&PWMD4,0,PWM_SIRKA_NORMAL);
391

  
392
	
324 393
 /*
325
	* Aktivuje timer2 a prejde tak do aktivniho stavu
394
	* Porty pro vypousteci sekvenci
326 395
	*/
327
	gptStart(&GPTD2,&gpt2cfg);
328

  
329

  
396
	palSetPadMode(GPIOB, GPIOB_PIN10, PAL_MODE_OUTPUT_PUSHPULL);
397
	palClearPad(GPIOB, GPIOB_PIN10);
398
	palSetPadMode(GPIOB, GPIOB_PIN11, PAL_MODE_OUTPUT_PUSHPULL);	
399
	palClearPad(GPIOB, GPIOB_PIN11);
400
	palSetPadMode(GPIOB, GPIOB_PIN12, PAL_MODE_OUTPUT_PUSHPULL);
401
	palClearPad(GPIOB, GPIOB_PIN12);
402
	palSetPadMode(GPIOB, GPIOB_PIN13, PAL_MODE_OUTPUT_PUSHPULL);
403
	palClearPad(GPIOB, GPIOB_PIN13);
404
 /*
405
	* Aktivuje timer2 a timer3 prejde tak do aktivniho stavu
406
	*/
407
	gptStart(&GPTD2,&gpt2cfg);	
330 408
	/*
331 409
   * Vytvori vlakno pro prijem dat z GPS modulu
332 410
   */
......
344 422
   * pressed the test procedure is launched with output on the serial
345 423
   * driver 1.
346 424
   */
425

  
347 426
  while (TRUE) {
427

  
348 428
			sdRead(&SD1,znaky,1);
349 429
		/*Kdyz uzivatel stiskne enter -> dekoduj a vykonej prikaz, nebo pokud je prikaz delsi, nez by mel byt,
350 430
		 *prestane ukladat a upozorni uzivatele
:@created_atf1456353671.2245581_):@expires_in0