Subversion Repositories chibiosIgnition

Rev

Rev 18 | Rev 20 | 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) {
19 mjames 88
                processPhase ();
89
                chThdSleep(10);
11 mjames 90
 
2 mjames 91
        }
92
        return 0;
93
}
94
 
95
/*
15 mjames 96
 * Command Shell Thread
7 mjames 97
 */
8 mjames 98
static THD_WORKING_AREA(waThread2, 512);
7 mjames 99
static msg_t Thread2(void *arg) {
15 mjames 100
        thread_t *shelltp = NULL;
16 mjames 101
 
102
        chRegSetThreadName("Shell ");
103
/*
104
           * in this demo it just performs
15 mjames 105
           * a shell respawn upon its termination.
106
           */
107
          while (true) {
108
            if (!shelltp) {
109
        #if (HAL_USE_SERIAL_USB == TRUE)
110
              if (SDU1.config->usbp->state == USB_ACTIVE) {
111
                /* Spawns a new shell.*/
112
                shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, "shell", NORMALPRIO, shellThread, (void *) &shell_cfg1);
113
              }
114
        #else
115
                shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, "shell", NORMALPRIO, shellThread, (void *) &shell_cfg1);
116
        #endif
117
            }
118
            else {
119
              /* If the previous shell exited.*/
120
              if (chThdTerminatedX(shelltp)) {
121
                /* Recovers memory of the previous shell.*/
122
                chThdRelease(shelltp);
123
                shelltp = NULL;
124
              }
125
            }
126
            chThdSleepMilliseconds(500);
127
          }
7 mjames 128
 
15 mjames 129
        return MSG_OK;
7 mjames 130
}
131
 
132
 
133
 
134
 
135
/*
2 mjames 136
 * Application entry point.
137
 */
138
int main(void) {
139
//  struct EventListener el0, el1;
140
 
141
        /*
142
         * System initializations.
143
         * - HAL initialization, this also initializes the configured device drivers
144
         *   and performs the board-specific initializations.
145
         * - Kernel initialization, the main() function becomes a thread and the
146
         *   RTOS is active.
147
         */
148
        halInit();
149
        chSysInit();
150
 
6 mjames 151
 
7 mjames 152
 
15 mjames 153
#if (HAL_USE_SERIAL_USB == TRUE)
154
  /*
155
   * Initializes a serial-over-USB CDC driver.
156
   */
157
  sduObjectInit(&SDU1);
158
  sduStart(&SDU1, &serusbcfg);
159
 
18 mjames 160
#if  HAL_USE_USB_DUAL_CDC == TRUE
161
  sduObjectInit(&SDU2);
162
  sduStart(&SDU2, &serusbcfg2);
163
#endif
164
 
15 mjames 165
  /*
166
   * Activates the USB driver and then the USB bus pull-up on D+.
167
   * Note, a delay is inserted in order to not have to disconnect the cable
168
   * after a reset.
169
   */
170
  usbDisconnectBus(serusbcfg.usbp);
171
  chThdSleepMilliseconds(1000);
172
  usbStart(serusbcfg.usbp, &usbcfg);
173
  usbConnectBus(serusbcfg.usbp);
174
#else
175
  /*
176
   * Initializes serial port.
177
   */
178
  sdStart(&SD2, NULL);
179
#endif /* HAL_USE_SERIAL_USB */
180
 
7 mjames 181
          // Ignition timing code
6 mjames 182
        initTimer2();
183
 
8 mjames 184
   useAdc();
6 mjames 185
 
2 mjames 186
        /*
187
         * Activates the serial driver 2 using the driver default configuration.
188
         */
8 mjames 189
//      sdStart(&SD2, NULL);
2 mjames 190
 
191
        /*
192
         * Shell manager initialization.
193
         */
194
        shellInit();
195
 
5 mjames 196
        ap_init();
3 mjames 197
 
5 mjames 198
 
199
         /*
6 mjames 200
         * Creates the PLL thread
5 mjames 201
         */
202
        chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
203
 
15 mjames 204
 
205
 
206
        chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL);
207
 
3 mjames 208
        /* start the SPI hardware for display */
209
        ssd1306spiInit();
210
 
211
        ssd1306_begin( SSD1306_SWITCHCAPVCC, 0) ;
6 mjames 212
        int spd  = 800;
3 mjames 213
 
6 mjames 214
    int adv = 0;
215
        setRPM(spd);
10 mjames 216
    int avgSmp = 0;
6 mjames 217
        while(1)
3 mjames 218
{
14 mjames 219
 
220
        // read the dial
10 mjames 221
        adcSample();
222
    int smp =  getAdc(0) ;
223
    avgSmp += (smp-avgSmp)/4;
224
        adv = avgSmp * 1200 / 4096 - 300;
6 mjames 225
 
226
 
3 mjames 227
        /* initialise the display */
6 mjames 228
        chMtxLock(&mutexDisplay);
3 mjames 229
        clearDisplay();
230
 
5 mjames 231
    font_gotoxy(0,0);
3 mjames 232
 
6 mjames 233
    print_digits(64, 16, 4, 1, adv);
3 mjames 234
 
11 mjames 235
    print_digits(64, 33, 4,-1, getRPM());
9 mjames 236
    print_scaled_string("RPM:",0,33,4,256);
237
    print_scaled_string("ADV:",0,16,4,256);
3 mjames 238
 
9 mjames 239
    font_gotoxy(0,0);
240
    font_puts("count:");
13 mjames 241
    font_sig_digits(64, 0,1,-1,  getCount());
3 mjames 242
 
11 mjames 243
    font_sig_digits(64,52,4,-1,  getDelta());
6 mjames 244
 
11 mjames 245
 
3 mjames 246
         display();
6 mjames 247
 
7 mjames 248
         chMtxUnlock(&mutexDisplay);
6 mjames 249
         //
5 mjames 250
//       invertDisplay(x & 32);
3 mjames 251
 
7 mjames 252
         chThdSleep(chTimeMS2I(10));
3 mjames 253
 
254
}
255
 
7 mjames 256
 // shell thread  code . dead at present
257
//        /*
258
//         * Normal main() thread activity, spawning shells.
259
//         */
260
//        while (true) {
261
//          if (SDU1.config->usbp->state == USB_ACTIVE) {
8 mjames 262
//o           thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE,
7 mjames 263
//                                                    "shell", NORMALPRIO + 1,
264
//                                                    shellThread, (void *)&shell_cfg1);
265
//            chThdWait(shelltp);               /* Waiting termination.             */
266
//          }
267
//          chThdSleepMilliseconds(1000);
268
//        }
269
 
2 mjames 270
}