source: azure_iot_hub_f767zi/trunk/asp_baseplatform/OBJ/STM32F767NUCLEO144_GCC/LCD/lcdshield.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 16.3 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2012 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2015-2016 by TOPPERS PROJECT Educational Working Group.
11 *
12 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * の無保証規定を掲載すること.
22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * と.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * 報告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33 * 免責すること.
34 *
35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39 * の責任を負わない.
40 *
41 * $Id$
42 */
43
44/*
45 * LCDシールド制御プログラムの本体
46 */
47
48#include <kernel.h>
49#include <t_syslog.h>
50#include <t_stdlib.h>
51#include <stdio.h>
52#include <string.h>
53#include <target_syssvc.h>
54#include "syssvc/serial.h"
55#include "syssvc/syslog.h"
56#include "kernel_cfg.h"
57#include "device.h"
58#include "spi.h"
59#include "pinmode.h"
60#include "adafruit_st7735.h"
61#ifdef USE_MSC_FILE
62#include "storagedevice.h"
63#include "mscdiskio.h"
64#endif
65#include "lcdshield.h"
66#include "adc.h"
67#include "topamelogo.h"
68
69/*
70 * サービスコールのエラーのログ出力
71 */
72Inline void
73svc_perror(const char *file, int_t line, const char *expr, ER ercd)
74{
75 if (ercd < 0) {
76 t_perror(LOG_ERROR, file, line, expr, ercd);
77 }
78}
79
80#define SVC_PERROR(expr) svc_perror(__FILE__, __LINE__, #expr, (expr))
81#define ABS(X) ((X) > 0 ? (X) : -(X))
82
83
84/*
85 * 使用する変数の定義
86 */
87static const Point testPolygon[7] = {
88 {0, 0},
89 {127, 159},
90 {64, 0},
91 {64, 159},
92 {127, 0},
93 {0, 159},
94 {0, 0}
95};
96
97static const uint32_t pos_tbl[NUM_JSPOSITION-1][2] = {
98 { 500, JS_DOWN },
99 { 1000, JS_RIGHT },
100 { 1500, JS_ON },
101 { 2500, JS_UP },
102 { 3800, JS_LEFT }
103};
104static const char *pos_str[NUM_JSPOSITION-1] = {
105 " ON ",
106 " UP ",
107 " DOWN ",
108 " LEFT ",
109 " RIGHT "
110};
111
112
113LCD_Handler_t LcdHandle;
114LCD_DrawProp_t DrawProp;
115uint8_t msc_state;
116
117#define NUM_ADCBUF 1 /* 96:1ms */
118volatile uint32_t uhADCxConvertedValue;
119
120#ifndef USE_MSC_FILE
121uint32_t sdbuffer[514/4];
122#endif
123
124/* Buffer used for transmission */
125uint8_t aTxBuffer[BUFFERSIZE];
126
127/* Buffer used for reception */
128uint8_t aRxBuffer[BUFFERSIZE];
129
130static uint32_t heap_area[2*1024];
131
132uint32_t heap_param[2] = {
133 (uint32_t)heap_area,
134 (2*4*1024)
135};
136
137#ifdef USE_MSC_FILE
138/*
139 * 時刻の取出し
140 */
141static uint32_t get_fat_time(void)
142{
143 int reqtime = 0;
144 struct tm2 timedate;
145
146 rtc_get_time(&timedate);
147 reqtime = ((timedate.tm_year-10)<<25)+(timedate.tm_mon<<21)+(timedate.tm_mday<<16);
148 reqtime += (timedate.tm_hour<<11)+(timedate.tm_min<<5)+(timedate.tm_sec/2);
149 return reqtime;
150}
151#endif
152
153/*
154 * SW1割込み
155 */
156void sw_int(void)
157{
158 syslog_0(LOG_NOTICE, "## sw_int() ##");
159}
160
161/*
162 * GPIO設定関数
163 */
164static void
165pinMode(uint8_t no, uint32_t mode)
166{
167 Arduino_PortControlBlock *pgcb = getGpioTable(DIGITAL_PIN, no);
168 GPIO_Init_t GPIO_Init_Data;
169
170 if(pgcb == NULL)
171 return;
172 pinClock(no);
173 GPIO_Init_Data.mode = mode;
174 GPIO_Init_Data.pull = GPIO_PULLMODE;
175 GPIO_Init_Data.otype = GPIO_OTYPE;
176 GPIO_Init_Data.speed = GPIO_SPEED_FAST;
177 gpio_setup(pgcb->giobase, &GPIO_Init_Data, pgcb->giopin);
178}
179
180
181/*
182 * グラフィック表示テスト
183 */
184void
185grapics_test(LCD_Handler_t *hlcd)
186{
187 uint16_t x, y;
188 int i;
189
190 DrawProp.BackColor = ST7735_BLACK;
191 lcd_fillScreen(&DrawProp);
192 dly_tsk(1000);
193 lcd_drawPixel(hlcd, hlcd->_width/2, hlcd->_height/2, ST7735_GREEN);
194 dly_tsk(1000);
195
196 lcd_fillScreen(&DrawProp);
197 for(y=0; y < hlcd->_height; y+=5) {
198 lcd_drawFastHLine(hlcd, 0, y, hlcd->_width, ST7735_RED);
199 }
200 for (x=0; x < hlcd->_width; x+=5) {
201 lcd_drawFastVLine(hlcd, x, 0, hlcd->_height, ST7735_BLUE);
202 }
203 dly_tsk(1000);
204
205 lcd_fillScreen(&DrawProp);
206 DrawProp.TextColor = ST7735_GREEN;
207 lcd_drawPolygon(&DrawProp, (Point *)testPolygon, sizeof(testPolygon)/sizeof(Point));
208 dly_tsk(1000);
209
210 lcd_fillScreen(&DrawProp);
211 DrawProp.TextColor = ST7735_GREEN;
212 for (x=0; x < hlcd->_width; x+=6) {
213 lcd_drawRect(&DrawProp, hlcd->_width/2 -x/2, hlcd->_height/2 -x/2 , x, x);
214 }
215 for(i = 0 ; i < 3 ; i++){
216 lcd_invertDisplay(hlcd, true);
217 dly_tsk(500);
218 lcd_invertDisplay(hlcd, false);
219 dly_tsk(500);
220 }
221 lcd_fillScreen(&DrawProp);
222 lcd_drawBitmap(hlcd, 33, 48, (uint8_t *)topamelogo);
223 dly_tsk(1000);
224}
225
226/*
227 * USB HOST INFORMATION CALLBACK
228 * parameter1: Host Handler
229 * parameter2: Device Handler
230 * parameter3: Host state ID.
231 */
232static void USBH_UserProcess(USBH_HandleTypeDef *phost, TUSBH_Device_t *pdevice, uint8_t id)
233{
234 msc_state = id;
235 if(pdevice->pClass != NULL){
236 syslog_3(LOG_NOTICE, "## CLASS[%s](%d)(%d) ##", pdevice->pClass->Name, pdevice->type, id);
237 }
238}
239
240/*
241 * メインタスク
242 */
243void
244main_task(intptr_t exinf)
245{
246#ifdef USE_MSC_FILE
247 StorageDevice_t *psdev;
248#else
249 TUSBH_ERCODE status = TUSBH_E_OK;
250 char pdrv = 0;
251#endif
252 SPI_Init_t spi_initd;
253 USB_OTG_Init_t USB_Data_Init;
254 LCD_Handler_t *hlcd;
255 SPI_Handle_t *hspi;
256 USB_OTG_Handle_t *husb;
257 USBH_HandleTypeDef *husbh;
258 FLGPTN flgptn;
259 ER_UINT ercd;
260 int sens = 1000;
261 int i;
262
263 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
264 syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);
265
266 /*
267 * シリアルポートの初期化
268 *
269 * システムログタスクと同じシリアルポートを使う場合など,シリアル
270 * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
271 * ない.
272 */
273 ercd = serial_opn_por(TASK_PORTID);
274 if (ercd < 0 && MERCD(ercd) != E_OBJ) {
275 syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
276 itron_strerror(ercd), SERCD(ercd));
277 }
278 SVC_PERROR(serial_ctl_por(TASK_PORTID,
279 (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
280
281 syslog_0(LOG_NOTICE, "## START ##");
282 /*
283 * CS PORT(D10-PB6)
284 */
285 pinMode(CS_PORT, GPIO_MODE_OUTPUT);
286 /*
287 * RS PORT(D8-PA9)
288 */
289 pinMode(RS_PORT, GPIO_MODE_OUTPUT);
290 /*
291 * RST PORT(D9-PC7)
292 */
293 pinMode(RST_PORT, GPIO_MODE_OUTPUT);
294
295 spi_initd.Prescaler = SPI_BAUDRATEPRESCALER_64;
296 spi_initd.Direction = SPI_DIRECTION_2LINES;
297 spi_initd.CLKPhase = SPI_PHASE_1EDGE;
298 spi_initd.CLKPolarity = SPI_POLARITY_LOW;
299 spi_initd.CRC = SPI_CRC_DISABLE;
300 spi_initd.CRCPolynomial = 7;
301 spi_initd.DataSize = SPI_DATASIZE_8BIT;
302 spi_initd.SignBit = SPI_DATA_MSB;
303 spi_initd.NSS = SPI_NSS_SOFT;
304 spi_initd.TIMode = SPI_TIMODE_DISABLE;
305 spi_initd.Mode = SPI_MODE_MASTER;
306 spi_initd.semid = SPI1DMA_SEM;
307 spi_initd.semlock = 0;
308 if((hspi = spi_init(SPI1_PORTID, &spi_initd)) == NULL){
309 syslog_0(LOG_ERROR, "spi_start initialize error !");
310 }
311
312 /* Init USB OTG Hard */
313 /* Set the LL Driver parameters */
314 USB_Data_Init.usb_otg_mode = USB_OTG_MODE_HOST;
315 USB_Data_Init.host_channels = 11; /* HOST */
316 USB_Data_Init.dma_enable = 0;
317 USB_Data_Init.low_power_enable = 0;
318 USB_Data_Init.phy_itface = USB_PHY_EMBEDDED;
319 USB_Data_Init.sof_enable = 0;
320 USB_Data_Init.speed = USB_SPEED_FULL;
321 USB_Data_Init.vbus_sensing_enable = 0; /* HOST */
322 USB_Data_Init.lpm_enable = 0;
323 USB_Data_Init.use_external_vbus = 0;
324 husb = usbo_init(USB1_PORTID, &USB_Data_Init);
325
326 /*
327 * USB HOSTミドルウェア設定
328 */
329 husbh = (USBH_HandleTypeDef *)malloc(sizeof(USBH_HandleTypeDef));
330 husbh->pSysData = husb;
331 tusbhInit(husbh, USBH_UserProcess, 0);
332#ifdef USE_MSC_FILE
333 psdev = SDMGetStorageDevice(MSC_DEVNO);
334 psdev->_sdev_local[1] = husbh;
335 SDeviceHead._get_datetime = get_fat_time;
336#endif
337
338 /*
339 * USB HOSTスタート
340 */
341 tusbhStart(husbh);
342
343 i = 0;
344 while(msc_state != HOST_USER_CLASS_ACTIVE && i < 15){
345 syslog_2(LOG_NOTICE, " WAIT MSC READY(%d)(%d) !", msc_state, i);
346 dly_tsk(1000);
347 i++;
348 }
349 if(msc_state != HOST_USER_CLASS_ACTIVE)
350 syslog_0(LOG_NOTICE, "MSC INITIAL ERROR !");
351
352#ifndef USE_MSC_FILE
353 if(msc_state == HOST_USER_CLASS_ACTIVE && tusbhMscUnitIsReady(husbh, pdrv)){
354 unsigned char *p;
355 int j, bpb;
356 int SecPerCls, Rsv, NumFat, Fsize, RootDirC, RootSec, tsect;
357 p = (unsigned char *)sdbuffer;
358 for(i = 0 ; i < 1 ; i++){
359 status = tusbhMscRead(husbh, pdrv, i, (uint8_t *)sdbuffer, 1);
360 syslog_3(LOG_NOTICE, "## status(%d) i(%d) sdbuffer[%08x] ##", status, i, sdbuffer);
361 dly_tsk(300);
362 if(i == 0){
363 if(p[0x36] == 'F' && p[0x37] == 'A' && p[0x38] == 'T')
364 bpb = 0;
365 else{
366 bpb = p[0x1c6];
367 bpb |= p[0x1c7]<<8;
368 bpb |= p[0x1c8]<<16;
369 bpb |= p[0x1c9]<<24;
370 }
371 }
372 printf("\nsec(%d) ", i);
373 for(j = 0 ; j < 512 ; j++){
374 if((j % 16) == 0)
375 printf("\n%03x ", j);
376 printf("%02x ", p[j]);
377 }
378 printf("\n");
379 }
380 syslog_1(LOG_NOTICE, "## bpb(%08x) ##", bpb);
381 if(bpb != 0){
382 status = tusbhMscRead(husbh, pdrv, bpb, (uint8_t *)sdbuffer, 1);
383 syslog_3(LOG_NOTICE, "## status(%d) i(%d) sdbuffer[%08x] ##", status, bpb, sdbuffer);
384 dly_tsk(300);
385 printf("\nsec(%d) ", bpb);
386 for(j = 0 ; j < 512 ; j++){
387 if((j % 16) == 0)
388 printf("\n%03x ", j);
389 printf("%02x ", p[j]);
390 }
391 printf("\n");
392 }
393 SecPerCls = p[13];
394 Rsv = p[14] + (p[15] << 8);
395 NumFat = p[16];
396 RootDirC = p[17] + (p[18]<<8);
397 Fsize = p[22] + (p[23] << 8);
398 if(Fsize == 0){
399 Fsize = p[36] + (p[37] << 8);
400 RootSec = p[44] + (p[45] << 8) + (p[46] << 16) + (p[47] << 24);
401 }
402 else
403 RootSec = bpb + Rsv + (NumFat * Fsize);
404 tsect = p[32] + (p[33] << 8) + (p[34] << 16) + (p[35] << 24);
405 if(tsect == 0)
406 tsect = p[19] + (p[20] << 8) + (p[21] << 16) + (p[22] << 24);
407 syslog_4(LOG_NOTICE, "## SecPerCls(%d) Rsv(%d) NumFat(%d) RootDirC(%d) ##", SecPerCls, Rsv, NumFat, RootDirC);
408 syslog_3(LOG_NOTICE, "## Fsize(%d) RootSec(%d) totalsec(%d) ##", Fsize, RootSec, tsect);
409
410 for(i = 0 ; i < 2 ; i++){
411 status = tusbhMscRead(husbh, pdrv, (i+RootSec), (uint8_t *)sdbuffer, 1);
412 syslog_3(LOG_NOTICE, "## status(%d) i(%d) sdbuffer[%08x] ##", status, (i+RootSec), sdbuffer);
413 dly_tsk(300);
414 p = (unsigned char *)sdbuffer;
415 printf("\nsec(%d) ", (i+RootSec));
416 for(j = 0 ; j < 512 ; j++){
417 if((j % 16) == 0)
418 printf("\n%03x ", j);
419 printf("%02x ", p[j]);
420 }
421 printf("\n");
422 }
423 }
424#endif
425 hlcd = &LcdHandle;
426 hlcd->hspi = hspi;
427 hlcd->spi_lock= 0;
428 hlcd->cs_pin = CS_PORT;
429 hlcd->rs_pin = RS_PORT;
430 hlcd->rst_pin = RST_PORT;
431 hlcd->cs2_pin = CS2_PORT;
432 DrawProp.hlcd = hlcd;
433 lcd_initR(hlcd, INITR_BLACKTAB);
434 DrawProp.BackColor = ST7735_BLACK;
435 DrawProp.TextColor = ST7735_WHITE;
436 grapics_test(hlcd);
437#if 1 /* LOCAL DEFINE */
438 DrawProp.TextColor = ST7735_BLACK;
439 DrawProp.BackColor = ST7735_WHITE;
440 lcd_fillScreen(&DrawProp);
441 lcd_fillRect(hlcd, 0, 0, hlcd->_width, hlcd->_height/3, ST7735_BLUE);
442 DrawProp.TextColor = ST7735_WHITE;
443 DrawProp.BackColor = ST7735_BLUE;
444 DrawProp.pFont = &Font20;
445 lcd_DisplayStringAt(&DrawProp, 0, 20, "TBP TEST", CENTER_MODE);
446
447 DrawProp.TextColor = ST7735_BLACK;
448 DrawProp.BackColor = ST7735_WHITE;
449 DrawProp.pFont = &Font8;
450 lcd_DisplayStringAt(&DrawProp, 0, 80, (uint8_t *)"Helle World !", CENTER_MODE);
451 DrawProp.pFont = &Font12;
452 lcd_DisplayStringAt(&DrawProp, 0, 100, (uint8_t *)"Helle World !", CENTER_MODE);
453 DrawProp.pFont = &Font16;
454 lcd_DisplayStringAt(&DrawProp, 0, 120, (uint8_t *)"Helle World !", CENTER_MODE);
455
456 DrawProp.TextColor = ST7735_RED;
457 for(i = 20 ; i < 40 ; i++){
458 lcd_DrawCircle(&DrawProp, hlcd->_width/2, hlcd->_height/2+30, i);
459 if(i == 25)
460 i += 10;
461 }
462#endif /* LOCAL DEFINE */
463 syslog_0(LOG_NOTICE, "LCD TEST END");
464 while(sens > 0){
465 wai_flg(SW_FLG, JS_MASK, TWF_ORW, &flgptn);
466 syslog_1(LOG_NOTICE, "## JS EVENT[%04x] ##", flgptn);
467 for(i = 0 ; i < NUM_JSPOSITION ; i++){
468 if(flgptn & (1<<i))
469 break;
470 }
471 if(i == NUM_JSPOSITION)
472 i = 0;
473#if 1 /* LOCAL DEFINE */
474 DrawProp.pFont = &Font12;
475 if(i == 0 || i == NUM_JSPOSITION)
476 lcd_DisplayStringAt(&DrawProp, 0, 100, (uint8_t *)"Helle World !", CENTER_MODE);
477 else
478 lcd_DisplayStringAt(&DrawProp, 0, 100, (uint8_t *)pos_str[i-1], CENTER_MODE);
479#else /* LOCAL DEFINE */
480 syslog_1(LOG_NOTICE, "## event(%d) ##", i);
481#endif /* LOCAL DEFINE */
482 sens--;
483 }
484#ifdef USE_MSC_FILE
485 syslog_0(LOG_NOTICE, "## STOP ##");
486 slp_tsk();
487#endif
488 spi_deinit(hspi);
489
490 syslog(LOG_NOTICE, "Sample program ends.");
491// SVC_PERROR(ext_ker());
492}
493
494
495/*
496 * ADC転送終了コールバック関数
497 */
498static void HAL_ADC_ConvCpltCallback2(ADC_Handle_t* hadc)
499{
500 isig_sem(ADCDMA_SEM);
501}
502
503/*
504 * ジョイスティック監視タスク
505 */
506void stick_task(intptr_t exinf)
507{
508 ADC_Init_t aInit;
509 ADC_ChannelConf_t sConfig;
510 ADC_Handle_t *hadc;
511 uint32_t event = 0;
512 int i;
513
514 /*
515 * ADC3初期化
516 */
517 aInit.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
518 aInit.Resolution = ADC_RESOLUTION_12B;
519 aInit.ScanConvMode = ADC_SCANMODE_DISABLE;
520// aInit.ContinuousConvMode = ADC_CONTINUOUS_ENABLE;
521 aInit.ContinuousConvMode = ADC_CONTINUOUS_DISABLE;
522 aInit.DiscontinuousConvMode = ADC_DISCONTINUOUS_DISABLE;
523 aInit.NumDiscConversion = 0;
524 aInit.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
525 aInit.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
526 aInit.DataAlign = ADC_DATAALIGN_RIGHT;
527 aInit.NumConversion = 1;
528 aInit.DMAContinuousRequests = ADC_DMACONTINUOUS_ENABLE;
529 aInit.EOCSelection = ADC_EOC_SEQ_DISABLE;
530
531 if((hadc = adc_init(ADC3_PORTID, &aInit)) == NULL){
532 /* Initialization Error */
533 syslog_0(LOG_NOTICE, "## adc_init ERROR ##");
534 }
535 hadc->xfercallback = HAL_ADC_ConvCpltCallback2;
536
537 /*
538 * ADCチャネル設定
539 */
540 sConfig.Channel = ADCx_CHANNEL;
541 sConfig.Rank = 1;
542// sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
543 sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
544 sConfig.GpioBase = ADCx_CHANNEL_GPIO_PORT;
545 sConfig.GpioPin = ADCx_CHANNEL_PINNO;
546 if(adc_setupchannel(hadc, &sConfig) != E_OK){
547 /* Channel Configuration Error */
548 syslog_0(LOG_NOTICE, "## adc_setupchannel ERROR ##");
549 }
550
551 for(;;){
552 uhADCxConvertedValue = 0;
553 /*
554 * ADC DMAスタート
555 */
556 if(adc_start_dma(hadc, (uint32_t*)&uhADCxConvertedValue, 1) != E_OK){
557 /* Start Conversation Error */
558 syslog_0(LOG_NOTICE, "## adc_start_dma ERROR ##");
559 }
560 while(hadc->status == ADC_STATUS_BUSY){
561 twai_sem(ADCDMA_SEM, 10);
562 }
563 adc_end_dma(hadc);
564 for(i = 0 ; i < (NUM_JSPOSITION-1) ; i++){
565 if(uhADCxConvertedValue < pos_tbl[i][0]){
566 event = pos_tbl[i][1];
567 set_flg(SW_FLG, event);
568 break;
569 }
570 }
571 if(i == 5 && event != JS_OFF){
572 event = JS_OFF;
573 set_flg(SW_FLG, JS_OFF);
574 }
575 dly_tsk(50);
576 }
577 syslog_2(LOG_NOTICE, "## STOP[%08x] (%d) ##", &uhADCxConvertedValue, hadc->status);
578 slp_tsk();
579}
580
Note: See TracBrowser for help on using the repository browser.