aboutsummaryrefslogtreecommitdiff
path: root/simplemon/simplemon.pde
diff options
context:
space:
mode:
Diffstat (limited to 'simplemon/simplemon.pde')
-rw-r--r--simplemon/simplemon.pde203
1 files changed, 203 insertions, 0 deletions
diff --git a/simplemon/simplemon.pde b/simplemon/simplemon.pde
new file mode 100644
index 0000000..a315c48
--- /dev/null
+++ b/simplemon/simplemon.pde
@@ -0,0 +1,203 @@
+/*-----------------------------------------------------------------simeplemon.pde
+ * This is a sample piece of code to discuss code
+ *
+ * the logger takes info from a monitored device (device) over serial and commands
+ * from a program or a user through a usb console. These commands are formatted
+ * in a mannor described in Monitor.cpp and Monitor.h
+ *
+ * Copyright (c) 2012, Donald Delmar Davis, Suspect Devices
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Suspect Devices nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *-----------------------------------------------------------------------------*/
+
+#ifndef uint8_t
+#define uint8_t uint8
+#define uint16_t uint16
+//#define uint32_t uint32
+#endif
+
+#define ASCII_DELETE '\177'
+#define ASCII_BACKSPACE '\010'
+
+/*---------------------------------------------------------------------TUNABLES
+ *
+ *----------------------------------------------------------------------------*/
+#define LED_ON LOW
+#define LED_OFF HIGH
+
+#include "Monitor.h"
+
+/* Global Variables */
+/*-------------------------------------------------------------GLOBAL VARIABLES
+ *
+ *----------------------------------------------------------------------------*/
+
+time_t epoch=0;
+
+#define MAX_SSN_LENGTH 16
+#define MAX_HWV_LENGTH 8
+#define MAX_SWV_LENGTH 24
+#define MAX_TIME_LENGTH 24
+
+//stuff for the FUTURE!!!!
+char deviceSSN[MAX_SSN_LENGTH]="00000000000";
+char deviceHWV[MAX_HWV_LENGTH]="0";
+char deviceSWV[MAX_SWV_LENGTH]="0.0-000000";
+time_t deviceLastContact=0L;
+bool deviceIsConnected=false;
+
+
+/*-----------------------------------------------------------------------Setup()
+ *
+ *----------------------------------------------------------------------------*/
+
+void setup( void )
+{
+ SerialUSB.begin();
+ // Setup the LED to steady on
+ pinMode(BOARD_LED_PIN, OUTPUT);
+ digitalWrite(BOARD_LED_PIN, HIGH);
+
+ // Setup the button as input
+ pinMode(BOARD_BUTTON_PIN, INPUT);
+ digitalWrite(BOARD_BUTTON_PIN, HIGH);
+ usart_init(USART1);
+ usart_set_baud_rate(USART1, USART_USE_PCLK, 9600);
+ usart_enable(USART1);
+
+ deviceComm.len=0;
+ deviceComm.gotline=false;
+ consoleComm.len=0;
+ consoleComm.gotline=false;
+
+
+}
+
+void loop( void )
+{
+ int ret;
+ if (deviceComm.gotline){
+ handleDeviceInput(&deviceComm);
+ }
+ if (consoleComm.gotline){
+ ret=handleConsoleInput(&consoleComm);
+ if(ret==COMMAND_FORWARDED){ // if the device is not connected we should not wait
+ // if ((xSemaphoreTake(deviceComm.xGotLineSemaphore,DEVICE_RESPONSE_TIMEOUT) != pdTRUE)
+ // && deviceComm.gotline) {
+ // handleDeviceInput(&deviceComm);
+ // } else {
+ // toConsole("NAK:TIMEOUT");
+ // }
+
+ }
+ togglePin(GRN_LED);
+ }
+}
+/*--------------------------------------------------------------------vLedTask()
+ * stubb
+ *----------------------------------------------------------------------------*/
+
+void dasBlinkin(void* pvParameters)
+{
+ }
+// move these to monitor.....
+
+/*-----------------------------------------------------------------vSerialTask()
+ *
+ * Handle (usb/serial) from console and monitored device.
+ * The idea here is to handle the incoming characters as quickly as possible.
+ * All data coming from the console or the datalogger
+ * is delimited by <CR><LF>. Finding an end of line "gives" a semaphore.
+ *
+ * Eventually this should be moved down to the usart interupt handlers imho
+ *
+ * At 9600 baud this needs to be run at least every (uart buffer size * ms)
+ * to insure that the incoming data doesnt overrun the buffers.
+ *
+ */
+void handleSerial()
+{
+ togglePin(YEL_LED);
+ uint32_t rc=0;
+ unsigned char ch;
+
+ if (!deviceComm.gotline) {
+ while (usart_data_available(USART1)
+ && deviceComm.len<(MAX_COMMAND_LINE_LENGTH-1)) {
+ ch=usart_getc(USART1);
+
+ if (ch=='\r') {
+ deviceComm.gotline=true;
+ deviceComm.line[deviceComm.len]='\0';
+ break;
+ } else if (ch!='\n') {
+ deviceComm.line[deviceComm.len++]=ch;
+ }
+ }
+ }
+
+ if (!consoleComm.gotline) {
+ while(SerialUSB.isConnected() && SerialUSB.available()
+ && consoleComm.len<(MAX_COMMAND_LINE_LENGTH-1)) {
+ ch=SerialUSB.read();
+ SerialUSB.write(ch);
+ if (ch=='\r') {
+ consoleComm.gotline=true;
+ consoleComm.line[consoleComm.len]='\0';
+ break;
+ } else if ((ch==ASCII_DELETE) || (ch==ASCII_BACKSPACE)) {
+ if (consoleComm.len) consoleComm.len--;
+ } else if (ch!='\n') {
+ consoleComm.line[consoleComm.len++]=ch;
+ }
+ }
+ }
+}
+/*-------------------------------------------------------------------vMonitorTask()
+ *
+ * The monitor task waits for end of lines from the serial handler and dispatches it.
+ *
+ *
+ *
+ */
+
+static void vMonitorTask(void* pvParameters)
+{
+// Force init to be called *first*, i.e. before static object allocation.
+// Otherwise, statically allocated objects that need libmaple may fail.
+__attribute__((constructor)) void premain() {
+ init();
+}
+
+int main(void) {
+ setup();
+
+ while (true) {
+ loop();
+ }
+
+ return 0;
+
+}