firstTest

Dependencies:   mbed lib_sx9500 SX127x lib_mpl3115a2 lib_mma8451q lib_gps libscpi

Committer:
bongkwan
Date:
Tue Apr 14 02:55:34 2020 +0000
Revision:
1:96123698b488
Parent:
0:1aa6d4a96bf1
first change

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bongkwan 0:1aa6d4a96bf1 1 /*-
bongkwan 0:1aa6d4a96bf1 2 * Copyright (c) 2012-2013 Jan Breuer,
bongkwan 0:1aa6d4a96bf1 3 *
bongkwan 0:1aa6d4a96bf1 4 * All Rights Reserved
bongkwan 0:1aa6d4a96bf1 5 *
bongkwan 0:1aa6d4a96bf1 6 * Redistribution and use in source and binary forms, with or without
bongkwan 0:1aa6d4a96bf1 7 * modification, are permitted provided that the following conditions are
bongkwan 0:1aa6d4a96bf1 8 * met:
bongkwan 0:1aa6d4a96bf1 9 * 1. Redistributions of source code must retain the above copyright notice,
bongkwan 0:1aa6d4a96bf1 10 * this list of conditions and the following disclaimer.
bongkwan 0:1aa6d4a96bf1 11 * 2. Redistributions in binary form must reproduce the above copyright
bongkwan 0:1aa6d4a96bf1 12 * notice, this list of conditions and the following disclaimer in the
bongkwan 0:1aa6d4a96bf1 13 * documentation and/or other materials provided with the distribution.
bongkwan 0:1aa6d4a96bf1 14 *
bongkwan 0:1aa6d4a96bf1 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
bongkwan 0:1aa6d4a96bf1 16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
bongkwan 0:1aa6d4a96bf1 17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bongkwan 0:1aa6d4a96bf1 18 * DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
bongkwan 0:1aa6d4a96bf1 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
bongkwan 0:1aa6d4a96bf1 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
bongkwan 0:1aa6d4a96bf1 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
bongkwan 0:1aa6d4a96bf1 22 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
bongkwan 0:1aa6d4a96bf1 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
bongkwan 0:1aa6d4a96bf1 24 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
bongkwan 0:1aa6d4a96bf1 25 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bongkwan 0:1aa6d4a96bf1 26 */
bongkwan 0:1aa6d4a96bf1 27
bongkwan 0:1aa6d4a96bf1 28 /**
bongkwan 0:1aa6d4a96bf1 29 * @file main.c
bongkwan 0:1aa6d4a96bf1 30 * @date Thu Nov 15 10:58:45 UTC 2012
bongkwan 0:1aa6d4a96bf1 31 *
bongkwan 0:1aa6d4a96bf1 32 * @brief SCPI parser test
bongkwan 0:1aa6d4a96bf1 33 *
bongkwan 0:1aa6d4a96bf1 34 *
bongkwan 0:1aa6d4a96bf1 35 */
bongkwan 0:1aa6d4a96bf1 36
bongkwan 0:1aa6d4a96bf1 37 #include <stdio.h>
bongkwan 0:1aa6d4a96bf1 38 #include <stdlib.h>
bongkwan 0:1aa6d4a96bf1 39 #include <string.h>
bongkwan 0:1aa6d4a96bf1 40 #include "scpi/scpi.h"
bongkwan 0:1aa6d4a96bf1 41 #include "../common/scpi-def.h"
bongkwan 0:1aa6d4a96bf1 42 #include "mbed.h"
bongkwan 0:1aa6d4a96bf1 43 #include "timer.h"
bongkwan 0:1aa6d4a96bf1 44
bongkwan 0:1aa6d4a96bf1 45
bongkwan 0:1aa6d4a96bf1 46
bongkwan 0:1aa6d4a96bf1 47 Serial pc(USBTX, USBRX);
bongkwan 0:1aa6d4a96bf1 48
bongkwan 0:1aa6d4a96bf1 49 #ifdef TARGET_MOTE_L152RC
bongkwan 0:1aa6d4a96bf1 50 #define LED_TIMEOUT 50000 // usec
bongkwan 0:1aa6d4a96bf1 51 DigitalOut RedLed( PB_1 ); // Active Low
bongkwan 0:1aa6d4a96bf1 52 DigitalOut YellowLed( PB_10 ); // Active Low
bongkwan 0:1aa6d4a96bf1 53 DigitalOut UsrLed( PA_5 ); // Active High
bongkwan 0:1aa6d4a96bf1 54 TimerEvent_t RedLedTimer;
bongkwan 0:1aa6d4a96bf1 55 static void OnInputEvent( void );
bongkwan 0:1aa6d4a96bf1 56 #endif /* TARGET_MOTE_L152RC */
bongkwan 0:1aa6d4a96bf1 57
bongkwan 0:1aa6d4a96bf1 58 #ifdef TARGET_MOTE_L152RC
bongkwan 0:1aa6d4a96bf1 59 #endif /* TARGET_MOTE_L152RC */
bongkwan 0:1aa6d4a96bf1 60
bongkwan 0:1aa6d4a96bf1 61
bongkwan 0:1aa6d4a96bf1 62 char smbuffer[64];
bongkwan 0:1aa6d4a96bf1 63
bongkwan 0:1aa6d4a96bf1 64 size_t SCPI_Write(scpi_t * context, const char * data, size_t len) {
bongkwan 0:1aa6d4a96bf1 65 (void) context;
bongkwan 0:1aa6d4a96bf1 66 return fwrite(data, 1, len, stdout);
bongkwan 0:1aa6d4a96bf1 67 }
bongkwan 0:1aa6d4a96bf1 68
bongkwan 0:1aa6d4a96bf1 69 scpi_result_t SCPI_Flush(scpi_t * context) {
bongkwan 0:1aa6d4a96bf1 70 fflush(stdout);
bongkwan 0:1aa6d4a96bf1 71 return SCPI_RES_OK;
bongkwan 0:1aa6d4a96bf1 72 }
bongkwan 0:1aa6d4a96bf1 73
bongkwan 0:1aa6d4a96bf1 74 int SCPI_Error(scpi_t * context, int_fast16_t err) {
bongkwan 0:1aa6d4a96bf1 75 (void) context;
bongkwan 0:1aa6d4a96bf1 76
bongkwan 0:1aa6d4a96bf1 77 printf("**ERROR: %d, \"%s\"\r\n", (int32_t) err, SCPI_ErrorTranslate(err));
bongkwan 0:1aa6d4a96bf1 78 return 0;
bongkwan 0:1aa6d4a96bf1 79 }
bongkwan 0:1aa6d4a96bf1 80
bongkwan 0:1aa6d4a96bf1 81 scpi_result_t SCPI_Control(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val) {
bongkwan 0:1aa6d4a96bf1 82 if (SCPI_CTRL_SRQ == ctrl) {
bongkwan 0:1aa6d4a96bf1 83 printf("**SRQ: 0x%X (%d)\r\n", val, val);
bongkwan 0:1aa6d4a96bf1 84 } else {
bongkwan 0:1aa6d4a96bf1 85 printf("**CTRL %02x: 0x%X (%d)\r\n", ctrl, val, val);
bongkwan 0:1aa6d4a96bf1 86 }
bongkwan 0:1aa6d4a96bf1 87 return SCPI_RES_OK;
bongkwan 0:1aa6d4a96bf1 88 }
bongkwan 0:1aa6d4a96bf1 89
bongkwan 0:1aa6d4a96bf1 90 /**
bongkwan 0:1aa6d4a96bf1 91 * Return 0 as OK and other number as error
bongkwan 0:1aa6d4a96bf1 92 */
bongkwan 0:1aa6d4a96bf1 93 scpi_result_t SCPI_Test(scpi_t * context) {
bongkwan 0:1aa6d4a96bf1 94 printf("**Test\r\n");
bongkwan 0:1aa6d4a96bf1 95 return (scpi_result_t)0;
bongkwan 0:1aa6d4a96bf1 96 }
bongkwan 0:1aa6d4a96bf1 97
bongkwan 0:1aa6d4a96bf1 98
bongkwan 0:1aa6d4a96bf1 99
bongkwan 0:1aa6d4a96bf1 100 scpi_result_t SCPI_SystemCommTcpipControlQ(scpi_t * context) {
bongkwan 0:1aa6d4a96bf1 101 return SCPI_RES_ERR;
bongkwan 0:1aa6d4a96bf1 102 }
bongkwan 0:1aa6d4a96bf1 103 /*
bongkwan 0:1aa6d4a96bf1 104 *
bongkwan 0:1aa6d4a96bf1 105 */
bongkwan 0:1aa6d4a96bf1 106 int get_kbd_str(char* buf, int size)
bongkwan 0:1aa6d4a96bf1 107 {
bongkwan 0:1aa6d4a96bf1 108 char c;
bongkwan 0:1aa6d4a96bf1 109 int i;
bongkwan 0:1aa6d4a96bf1 110 static int prev_len;
bongkwan 0:1aa6d4a96bf1 111
bongkwan 0:1aa6d4a96bf1 112 for (i = 0;;) {
bongkwan 0:1aa6d4a96bf1 113 if (pc.readable()) {
bongkwan 0:1aa6d4a96bf1 114 c = pc.getc();
bongkwan 0:1aa6d4a96bf1 115 if (c == 8) { // backspace
bongkwan 0:1aa6d4a96bf1 116 if (i > 0) {
bongkwan 0:1aa6d4a96bf1 117 pc.putc(8);
bongkwan 0:1aa6d4a96bf1 118 pc.putc(' ');
bongkwan 0:1aa6d4a96bf1 119 pc.putc(8);
bongkwan 0:1aa6d4a96bf1 120 i--;
bongkwan 0:1aa6d4a96bf1 121 }
bongkwan 0:1aa6d4a96bf1 122 } else if (c == '\r') {
bongkwan 0:1aa6d4a96bf1 123 if (i == 0) {
bongkwan 0:1aa6d4a96bf1 124 return prev_len; // repeat previous
bongkwan 0:1aa6d4a96bf1 125 } else {
bongkwan 0:1aa6d4a96bf1 126 buf[i++] = c;
bongkwan 0:1aa6d4a96bf1 127 buf[i] = 0; // null terminate
bongkwan 0:1aa6d4a96bf1 128 prev_len = i;
bongkwan 0:1aa6d4a96bf1 129 pc.putc('\r');
bongkwan 0:1aa6d4a96bf1 130 pc.putc('\n');
bongkwan 0:1aa6d4a96bf1 131 return i;
bongkwan 0:1aa6d4a96bf1 132 }
bongkwan 0:1aa6d4a96bf1 133 } else if (c == 3) {
bongkwan 0:1aa6d4a96bf1 134 // ctrl-C abort
bongkwan 0:1aa6d4a96bf1 135 //abort_key = true;
bongkwan 0:1aa6d4a96bf1 136 return -1;
bongkwan 0:1aa6d4a96bf1 137 } else if (i < size) {
bongkwan 0:1aa6d4a96bf1 138 buf[i++] = c;
bongkwan 0:1aa6d4a96bf1 139 pc.putc(c);
bongkwan 0:1aa6d4a96bf1 140 }
bongkwan 0:1aa6d4a96bf1 141 } else {
bongkwan 0:1aa6d4a96bf1 142 /* service something */
bongkwan 0:1aa6d4a96bf1 143 service_radio();
bongkwan 0:1aa6d4a96bf1 144 }
bongkwan 0:1aa6d4a96bf1 145 } // ...for()
bongkwan 0:1aa6d4a96bf1 146 }
bongkwan 0:1aa6d4a96bf1 147
bongkwan 0:1aa6d4a96bf1 148 int main(int argc, char** argv) {
bongkwan 0:1aa6d4a96bf1 149 (void) argc;
bongkwan 0:1aa6d4a96bf1 150 (void) argv;
bongkwan 0:1aa6d4a96bf1 151 //int result;
bongkwan 0:1aa6d4a96bf1 152
bongkwan 0:1aa6d4a96bf1 153 scpi_def_init();
bongkwan 0:1aa6d4a96bf1 154
bongkwan 0:1aa6d4a96bf1 155 SCPI_Init(&scpi_context);
bongkwan 0:1aa6d4a96bf1 156
bongkwan 0:1aa6d4a96bf1 157 printf("\r\nreset\r\n");
bongkwan 0:1aa6d4a96bf1 158
bongkwan 0:1aa6d4a96bf1 159
bongkwan 0:1aa6d4a96bf1 160 #ifdef TARGET_MOTE_L152RC
bongkwan 0:1aa6d4a96bf1 161 RedLed = 1;
bongkwan 0:1aa6d4a96bf1 162 YellowLed = 1;
bongkwan 0:1aa6d4a96bf1 163 UsrLed = 1;
bongkwan 0:1aa6d4a96bf1 164 TimerInit( &RedLedTimer, OnInputEvent);
bongkwan 0:1aa6d4a96bf1 165 #endif /* TARGET_MOTE_L152RC */
bongkwan 0:1aa6d4a96bf1 166
bongkwan 0:1aa6d4a96bf1 167
bongkwan 0:1aa6d4a96bf1 168
bongkwan 0:1aa6d4a96bf1 169 while (1) {
bongkwan 0:1aa6d4a96bf1 170 //fgets(smbuffer, 10, stdin);
bongkwan 0:1aa6d4a96bf1 171
bongkwan 0:1aa6d4a96bf1 172 int len = get_kbd_str(smbuffer, sizeof(smbuffer));
bongkwan 0:1aa6d4a96bf1 173 if (len > 0) {
bongkwan 0:1aa6d4a96bf1 174 #ifdef TARGET_MOTE_L152RC
bongkwan 0:1aa6d4a96bf1 175 /* Blink Red LED on keyboard entry */
bongkwan 0:1aa6d4a96bf1 176 RedLed = 0;
bongkwan 0:1aa6d4a96bf1 177 TimerSetValue( &RedLedTimer, LED_TIMEOUT ); // set blink LED to 750ms
bongkwan 0:1aa6d4a96bf1 178 TimerStart( &RedLedTimer );
bongkwan 0:1aa6d4a96bf1 179 #endif /* TARGET_MOTE_L152RC */
bongkwan 0:1aa6d4a96bf1 180 /*result =*/ SCPI_Input(&scpi_context, smbuffer, len);
bongkwan 0:1aa6d4a96bf1 181 }
bongkwan 0:1aa6d4a96bf1 182 }
bongkwan 0:1aa6d4a96bf1 183
bongkwan 0:1aa6d4a96bf1 184 //return (EXIT_SUCCESS);
bongkwan 0:1aa6d4a96bf1 185 }
bongkwan 0:1aa6d4a96bf1 186
bongkwan 0:1aa6d4a96bf1 187 #ifdef TARGET_MOTE_L152RC
bongkwan 0:1aa6d4a96bf1 188 static void OnInputEvent( void )
bongkwan 0:1aa6d4a96bf1 189 {
bongkwan 0:1aa6d4a96bf1 190 TimerStop( &RedLedTimer);
bongkwan 0:1aa6d4a96bf1 191
bongkwan 0:1aa6d4a96bf1 192 RedLed = 1;
bongkwan 0:1aa6d4a96bf1 193 }
bongkwan 0:1aa6d4a96bf1 194 #endif /* TARGET_MOTE_L152RC */