Subversion Repositories chibiosIgnition

Rev

Rev 16 | Rev 19 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/*
2
 ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
3
 2011,2012 Giovanni Di Sirio.
4
 
5
 This file is part of ChibiOS/RT.
6
 
7
 ChibiOS/RT is free software; you can redistribute it and/or modify
8
 it under the terms of the GNU General Public License as published by
9
 the Free Software Foundation; either version 3 of the License, or
10
 (at your option) any later version.
11
 
12
 ChibiOS/RT is distributed in the hope that it will be useful,
13
 but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 GNU General Public License for more details.
16
 
17
 You should have received a copy of the GNU General Public License
18
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
 
20
 ---
21
 
22
 A special exception to the GPL can be applied should you wish to distribute
23
 a combined work that includes ChibiOS/RT, without being obliged to provide
24
 the source code for any proprietary components. See the file exception.txt
25
 for full details of how and when the exception can be applied.
26
 */
27
 
7 mjames 28
#include <stdio.h>
2 mjames 29
#include <string.h>
30
 
31
#include "ch.h"
32
#include "hal.h"
7 mjames 33
//#include "test.h"
2 mjames 34
#include "shell.h"
35
#include "evtimer.h"
36
#include "chprintf.h"
37
 
16 mjames 38
 
39
 
15 mjames 40
#if (HAL_USE_SERIAL_USB == TRUE)
7 mjames 41
#include "usbcfg.h"
15 mjames 42
#endif
2 mjames 43
 
7 mjames 44
 
5 mjames 45
#include "ap_math.h"
2 mjames 46
#include "hardware.h"
6 mjames 47
#include "useAdc.h"
3 mjames 48
#include "spiInterface.h"
49
#include "SSD1306.h"
16 mjames 50
#include "font.h"
2 mjames 51
 
6 mjames 52
#include "timer2.h"
2 mjames 53
 
15 mjames 54
 
16 mjames 55
#include "shellCmds.h"
15 mjames 56
 
57
 
6 mjames 58
static MUTEX_DECL(mutexDisplay);
59
 
2 mjames 60
/*===========================================================================*/
61
/* Command line related.                                                     */
62
/*===========================================================================*/
63
 
7 mjames 64
#define SHELL_WA_SIZE   THD_WORKING_AREA_SIZE(2048)
65
#define TEST_WA_SIZE    THD_WORKING_AREA_SIZE(256)
2 mjames 66
 
67
 
68
 
15 mjames 69
static const ShellConfig shell_cfg1 = {
70
#if (HAL_USE_SERIAL_USB == TRUE)
71
  (BaseSequentialStream *)&SDU1,
72
#else
73
  (BaseSequentialStream *)&SD1,
74
#endif
16 mjames 75
  shellCommands
15 mjames 76
};
77
////////
78
// end of shell stuff
79
 
13 mjames 80
uint16_t sampIndex;
6 mjames 81
 
8 mjames 82
static THD_WORKING_AREA(waThread1, 512);
2 mjames 83
static msg_t Thread1(void *arg) {
84
 
85
        (void) arg;
6 mjames 86
        chRegSetThreadName("PLL ");
2 mjames 87
        while (TRUE) {
18 mjames 88
                chThdSleep(TIME_INFINITE);
11 mjames 89
 
2 mjames 90
        }
91
        return 0;
92
}
93
 
94
/*
15 mjames 95
 * Command Shell Thread
7 mjames 96
 */
8 mjames 97
static THD_WORKING_AREA(waThread2, 512);
7 mjames 98
static msg_t Thread2(void *arg) {
15 mjames 99
        thread_t *shelltp = NULL;
16 mjames 100
 
101
        chRegSetThreadName("Shell ");
102
/*
103
           * in this demo it just performs
15 mjames 104
           * a shell respawn upon its termination.
105
           */
106
          while (true) {
107
            if (!shelltp) {
108
        #if (HAL_USE_SERIAL_USB == TRUE)
109
              if (SDU1.config->usbp->state == USB_ACTIVE) {
110
                /* Spawns a new shell.*/
111
                shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, "shell", NORMALPRIO, shellThread, (void *) &shell_cfg1);
112
              }
113
        #else
114
                shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, "shell", NORMALPRIO, shellThread, (void *) &shell_cfg1);
115
        #endif
116
            }
117
            else {
118
              /* If the previous shell exited.*/
119
              if (chThdTerminatedX(shelltp)) {
120
                /* Recovers memory of the previous shell.*/
121
                chThdRelease(shelltp);
122
                shelltp = NULL;
123
              }
124
            }
125
            chThdSleepMilliseconds(500);
126
          }
7 mjames 127
 
15 mjames 128
        return MSG_OK;
7 mjames 129
}
130
 
131
 
132
 
133
 
134
/*
2 mjames 135
 * Application entry point.
136
 */
137
int main(void) {
138
//  struct EventListener el0, el1;
139
 
140
        /*
141
         * System initializations.
142
         * - HAL initialization, this also initializes the configured device drivers
143
         *   and performs the board-specific initializations.
144
         * - Kernel initialization, the main() function becomes a thread and the
145
         *   RTOS is active.
146
         */
147
        halInit();
148
        chSysInit();
149
 
6 mjames 150
 
7 mjames 151
 
15 mjames 152
#if (HAL_USE_SERIAL_USB == TRUE)
153
  /*
154
   * Initializes a serial-over-USB CDC driver.
155
   */
156
  sduObjectInit(&SDU1);
157
  sduStart(&SDU1, &serusbcfg);
158
 
18 mjames 159
#if  HAL_USE_USB_DUAL_CDC == TRUE
160
  sduObjectInit(&SDU2);
161
  sduStart(&SDU2, &serusbcfg2);
162
#endif
163
 
15 mjames 164
  /*
165
   * Activates the USB driver and then the USB bus pull-up on D+.
166
   * Note, a delay is inserted in order to not have to disconnect the cable
167
   * after a reset.
168
   */
169
  usbDisconnectBus(serusbcfg.usbp);
170
  chThdSleepMilliseconds(1000);
171
  usbStart(serusbcfg.usbp, &usbcfg);
18 mjames 172
#if HAL_USE_USB_DUAL_CDC == TRUE
173
  usbStart(serusbcfg2.usbp, &usbcfg);
174
#endif
15 mjames 175
  usbConnectBus(serusbcfg.usbp);
176
#else
177
  /*
178
   * Initializes serial port.
179
   */
180
  sdStart(&SD2, NULL);
181
#endif /* HAL_USE_SERIAL_USB */
182
 
7 mjames 183
          // Ignition timing code
6 mjames 184
        initTimer2();
185
 
8 mjames 186
   useAdc();
6 mjames 187
 
2 mjames 188
        /*
189
         * Activates the serial driver 2 using the driver default configuration.
190
         */
8 mjames 191
//      sdStart(&SD2, NULL);
2 mjames 192
 
193
        /*
194
         * Shell manager initialization.
195
         */
196
        shellInit();
197
 
5 mjames 198
        ap_init();
3 mjames 199
 
5 mjames 200
 
201
         /*
6 mjames 202
         * Creates the PLL thread
5 mjames 203
         */
204
        chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
205
 
15 mjames 206
 
207
 
208
        chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL);
209
 
3 mjames 210
        /* start the SPI hardware for display */
211
        ssd1306spiInit();
212
 
213
        ssd1306_begin( SSD1306_SWITCHCAPVCC, 0) ;
6 mjames 214
        int spd  = 800;
3 mjames 215
 
6 mjames 216
    int adv = 0;
217
        setRPM(spd);
10 mjames 218
    int avgSmp = 0;
6 mjames 219
        while(1)
3 mjames 220
{
14 mjames 221
 
222
        // read the dial
10 mjames 223
        adcSample();
224
    int smp =  getAdc(0) ;
225
    avgSmp += (smp-avgSmp)/4;
226
        adv = avgSmp * 1200 / 4096 - 300;
6 mjames 227
 
228
 
3 mjames 229
        /* initialise the display */
6 mjames 230
        chMtxLock(&mutexDisplay);
3 mjames 231
        clearDisplay();
232
 
5 mjames 233
    font_gotoxy(0,0);
3 mjames 234
 
6 mjames 235
    print_digits(64, 16, 4, 1, adv);
3 mjames 236
 
11 mjames 237
    print_digits(64, 33, 4,-1, getRPM());
9 mjames 238
    print_scaled_string("RPM:",0,33,4,256);
239
    print_scaled_string("ADV:",0,16,4,256);
3 mjames 240
 
9 mjames 241
    font_gotoxy(0,0);
242
    font_puts("count:");
13 mjames 243
    font_sig_digits(64, 0,1,-1,  getCount());
3 mjames 244
 
11 mjames 245
    font_sig_digits(64,52,4,-1,  getDelta());
6 mjames 246
 
11 mjames 247
 
3 mjames 248
         display();
6 mjames 249
 
7 mjames 250
         chMtxUnlock(&mutexDisplay);
6 mjames 251
         //
5 mjames 252
//       invertDisplay(x & 32);
3 mjames 253
 
7 mjames 254
         chThdSleep(chTimeMS2I(10));
3 mjames 255
 
256
}
257
 
7 mjames 258
 // shell thread  code . dead at present
259
//        /*
260
//         * Normal main() thread activity, spawning shells.
261
//         */
262
//        while (true) {
263
//          if (SDU1.config->usbp->state == USB_ACTIVE) {
8 mjames 264
//o           thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE,
7 mjames 265
//                                                    "shell", NORMALPRIO + 1,
266
//                                                    shellThread, (void *)&shell_cfg1);
267
//            chThdWait(shelltp);               /* Waiting termination.             */
268
//          }
269
//          chThdSleepMilliseconds(1000);
270
//        }
271
 
2 mjames 272
}