ACKme / Mbed 2 deprecated wiconnect-test-console

Dependencies:   WiConnect mbed

Committer:
dan_ackme
Date:
Thu Nov 27 10:26:58 2014 +0000
Revision:
25:c8ca04ebbb96
Parent:
12:3dd3a1be40c1
updated for latest wiconnect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 12:3dd3a1be40c1 1 /**
dan_ackme 12:3dd3a1be40c1 2 * ACKme WiConnect Host Library is licensed under the BSD licence:
dan_ackme 12:3dd3a1be40c1 3 *
dan_ackme 12:3dd3a1be40c1 4 * Copyright (c)2014 ACKme Networks.
dan_ackme 12:3dd3a1be40c1 5 * All rights reserved.
dan_ackme 12:3dd3a1be40c1 6 *
dan_ackme 12:3dd3a1be40c1 7 * Redistribution and use in source and binary forms, with or without modification,
dan_ackme 12:3dd3a1be40c1 8 * are permitted provided that the following conditions are met:
dan_ackme 12:3dd3a1be40c1 9 *
dan_ackme 12:3dd3a1be40c1 10 * 1. Redistributions of source code must retain the above copyright notice,
dan_ackme 12:3dd3a1be40c1 11 * this list of conditions and the following disclaimer.
dan_ackme 12:3dd3a1be40c1 12 * 2. Redistributions in binary form must reproduce the above copyright notice,
dan_ackme 12:3dd3a1be40c1 13 * this list of conditions and the following disclaimer in the documentation
dan_ackme 12:3dd3a1be40c1 14 * and/or other materials provided with the distribution.
dan_ackme 12:3dd3a1be40c1 15 * 3. The name of the author may not be used to endorse or promote products
dan_ackme 12:3dd3a1be40c1 16 * derived from this software without specific prior written permission.
dan_ackme 12:3dd3a1be40c1 17 *
dan_ackme 12:3dd3a1be40c1 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED
dan_ackme 12:3dd3a1be40c1 19 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
dan_ackme 12:3dd3a1be40c1 20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
dan_ackme 12:3dd3a1be40c1 21 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
dan_ackme 12:3dd3a1be40c1 22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
dan_ackme 12:3dd3a1be40c1 23 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
dan_ackme 12:3dd3a1be40c1 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
dan_ackme 12:3dd3a1be40c1 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
dan_ackme 12:3dd3a1be40c1 26 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
dan_ackme 12:3dd3a1be40c1 27 * OF SUCH DAMAGE.
dan_ackme 0:836c9a6383e0 28 */
dan_ackme 0:836c9a6383e0 29 #include "tests/Tests.h"
dan_ackme 0:836c9a6383e0 30 #include "Wiconnect.h"
dan_ackme 0:836c9a6383e0 31
dan_ackme 0:836c9a6383e0 32
dan_ackme 0:836c9a6383e0 33 typedef struct
dan_ackme 0:836c9a6383e0 34 {
dan_ackme 0:836c9a6383e0 35 uint32_t bytesRemaining;
dan_ackme 0:836c9a6383e0 36 } fileInfo_t;
dan_ackme 0:836c9a6383e0 37
dan_ackme 0:836c9a6383e0 38
dan_ackme 0:836c9a6383e0 39 static WiconnectResult fileReadCallback(void *user, void *data, int maxReadSize, int *bytesRead);
dan_ackme 0:836c9a6383e0 40
dan_ackme 0:836c9a6383e0 41
dan_ackme 0:836c9a6383e0 42
dan_ackme 0:836c9a6383e0 43
dan_ackme 0:836c9a6383e0 44
dan_ackme 0:836c9a6383e0 45 /*************************************************************************************************/
dan_ackme 0:836c9a6383e0 46 WiconnectResult fileCreateCommand(int argc, char **argv)
dan_ackme 0:836c9a6383e0 47 {
dan_ackme 0:836c9a6383e0 48 WiconnectResult result;
dan_ackme 0:836c9a6383e0 49 Wiconnect *wiconnect = Wiconnect::getInstance();
dan_ackme 0:836c9a6383e0 50 const char *name;
dan_ackme 0:836c9a6383e0 51 uint32_t size;
dan_ackme 0:836c9a6383e0 52 uint32_t version = 0;
dan_ackme 0:836c9a6383e0 53 uint32_t type = FILE_TYPE_ANY;
dan_ackme 0:836c9a6383e0 54 const int savedTimeOut = wiconnect->getCommandDefaultTimeout();
dan_ackme 0:836c9a6383e0 55 fileInfo_t fileInfo;
dan_ackme 0:836c9a6383e0 56
dan_ackme 0:836c9a6383e0 57
dan_ackme 0:836c9a6383e0 58 if(argc < 2)
dan_ackme 0:836c9a6383e0 59 {
dan_ackme 0:836c9a6383e0 60 LOG_ERROR("must specify file name and size");
dan_ackme 0:836c9a6383e0 61 return WICONNECT_BAD_ARG;
dan_ackme 0:836c9a6383e0 62 }
dan_ackme 0:836c9a6383e0 63
dan_ackme 0:836c9a6383e0 64 name = argv[0];
dan_ackme 0:836c9a6383e0 65 if(!StringUtil::strToUint32(argv[1], &size))
dan_ackme 0:836c9a6383e0 66 {
dan_ackme 0:836c9a6383e0 67 LOG_ERROR("invalid file size");
dan_ackme 0:836c9a6383e0 68 return WICONNECT_BAD_ARG;
dan_ackme 0:836c9a6383e0 69 }
dan_ackme 0:836c9a6383e0 70
dan_ackme 0:836c9a6383e0 71 if(argc > 2)
dan_ackme 0:836c9a6383e0 72 {
dan_ackme 0:836c9a6383e0 73 if(!Wiconnect::fileVersionStrToInt(argv[2], &version))
dan_ackme 0:836c9a6383e0 74 {
dan_ackme 0:836c9a6383e0 75 LOG_ERROR("invalid file version");
dan_ackme 0:836c9a6383e0 76 return WICONNECT_BAD_ARG;
dan_ackme 0:836c9a6383e0 77 }
dan_ackme 0:836c9a6383e0 78 }
dan_ackme 0:836c9a6383e0 79 if(argc > 3)
dan_ackme 0:836c9a6383e0 80 {
dan_ackme 0:836c9a6383e0 81 if(!StringUtil::strHexToUint32(argv[3], &type))
dan_ackme 0:836c9a6383e0 82 {
dan_ackme 0:836c9a6383e0 83 LOG_ERROR("invalid file type");
dan_ackme 0:836c9a6383e0 84 return WICONNECT_BAD_ARG;
dan_ackme 0:836c9a6383e0 85 }
dan_ackme 0:836c9a6383e0 86 }
dan_ackme 0:836c9a6383e0 87
dan_ackme 0:836c9a6383e0 88 fileInfo.bytesRemaining = size;
dan_ackme 0:836c9a6383e0 89 wiconnect->setCommandDefaultTimeout(30000); // increase the timeout so the user can enter data
dan_ackme 0:836c9a6383e0 90
dan_ackme 0:836c9a6383e0 91 if(!WICONNECT_FAILED(result, wiconnect->createFile(ReaderFunc(fileReadCallback), &fileInfo, name, size, version, (FileType)type)))
dan_ackme 0:836c9a6383e0 92 {
dan_ackme 0:836c9a6383e0 93 LOG_INFO("File created");
dan_ackme 0:836c9a6383e0 94 }
dan_ackme 0:836c9a6383e0 95 wiconnect->setCommandDefaultTimeout(savedTimeOut);
dan_ackme 0:836c9a6383e0 96
dan_ackme 0:836c9a6383e0 97 return result;
dan_ackme 0:836c9a6383e0 98 }
dan_ackme 0:836c9a6383e0 99
dan_ackme 0:836c9a6383e0 100 /*************************************************************************************************/
dan_ackme 0:836c9a6383e0 101 static WiconnectResult fileReadCallback(void *user, void *data, int maxReadSize, int *bytesReadPtr)
dan_ackme 0:836c9a6383e0 102 {
dan_ackme 0:836c9a6383e0 103 fileInfo_t *info = (fileInfo_t*)user;
dan_ackme 0:836c9a6383e0 104 int bytesToRead = MIN(maxReadSize, info->bytesRemaining);
dan_ackme 0:836c9a6383e0 105
dan_ackme 0:836c9a6383e0 106 if(info->bytesRemaining == 0)
dan_ackme 0:836c9a6383e0 107 {
dan_ackme 0:836c9a6383e0 108 LOG_INFO("All data written");
dan_ackme 0:836c9a6383e0 109 *bytesReadPtr = EOF;
dan_ackme 0:836c9a6383e0 110 return WICONNECT_SUCCESS;
dan_ackme 0:836c9a6383e0 111 }
dan_ackme 0:836c9a6383e0 112
dan_ackme 0:836c9a6383e0 113 LOG_INFO("Enter up to %d bytes (%d bytes remaining,\r\n Issue $$$ terminate current write):", bytesToRead, info->bytesRemaining);
dan_ackme 0:836c9a6383e0 114
dan_ackme 0:836c9a6383e0 115 uint8_t *ptr = (uint8_t*)data;
dan_ackme 0:836c9a6383e0 116 int bytesRead = 0;
dan_ackme 0:836c9a6383e0 117 int terminateCount = 0;
dan_ackme 0:836c9a6383e0 118
dan_ackme 0:836c9a6383e0 119 while(bytesToRead > 0)
dan_ackme 0:836c9a6383e0 120 {
dan_ackme 0:836c9a6383e0 121 int c = consoleSerial.getc();
dan_ackme 0:836c9a6383e0 122 consoleSerial.putc(c);
dan_ackme 0:836c9a6383e0 123 terminateCount = (c == '$') ? terminateCount+1 : 0;
dan_ackme 0:836c9a6383e0 124 if(terminateCount >= 3)
dan_ackme 0:836c9a6383e0 125 {
dan_ackme 0:836c9a6383e0 126 break;
dan_ackme 0:836c9a6383e0 127 }
dan_ackme 0:836c9a6383e0 128 *ptr++ = (uint8_t)c;
dan_ackme 0:836c9a6383e0 129 ++bytesRead;
dan_ackme 0:836c9a6383e0 130 --bytesToRead;
dan_ackme 0:836c9a6383e0 131 }
dan_ackme 0:836c9a6383e0 132
dan_ackme 0:836c9a6383e0 133 // remove '$$' from data if we terminated
dan_ackme 0:836c9a6383e0 134 if(terminateCount == 3)
dan_ackme 0:836c9a6383e0 135 {
dan_ackme 0:836c9a6383e0 136 bytesRead -= 2;
dan_ackme 0:836c9a6383e0 137 }
dan_ackme 0:836c9a6383e0 138
dan_ackme 0:836c9a6383e0 139 info->bytesRemaining -= bytesRead;
dan_ackme 0:836c9a6383e0 140 *bytesReadPtr = bytesRead;
dan_ackme 0:836c9a6383e0 141 consoleSerial.write("\r\n");
dan_ackme 0:836c9a6383e0 142
dan_ackme 0:836c9a6383e0 143 return WICONNECT_SUCCESS;
dan_ackme 0:836c9a6383e0 144 }