20200716 read Status Register each second

Dependencies:   SDFileSystem mbed-os-example-ble-GattServer max32630fthr

Committer:
aureliocarella
Date:
Thu Jul 16 14:59:04 2020 +0000
Revision:
21:51e162c130a9
20200716

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aureliocarella 21:51e162c130a9 1 /*******************************************************************************
aureliocarella 21:51e162c130a9 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
aureliocarella 21:51e162c130a9 3 *
aureliocarella 21:51e162c130a9 4 * Permission is hereby granted, free of charge, to any person obtaining a
aureliocarella 21:51e162c130a9 5 * copy of this software and associated documentation files (the "Software"),
aureliocarella 21:51e162c130a9 6 * to deal in the Software without restriction, including without limitation
aureliocarella 21:51e162c130a9 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
aureliocarella 21:51e162c130a9 8 * and/or sell copies of the Software, and to permit persons to whom the
aureliocarella 21:51e162c130a9 9 * Software is furnished to do so, subject to the following conditions:
aureliocarella 21:51e162c130a9 10 *
aureliocarella 21:51e162c130a9 11 * The above copyright notice and this permission notice shall be included
aureliocarella 21:51e162c130a9 12 * in all copies or substantial portions of the Software.
aureliocarella 21:51e162c130a9 13 *
aureliocarella 21:51e162c130a9 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
aureliocarella 21:51e162c130a9 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
aureliocarella 21:51e162c130a9 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
aureliocarella 21:51e162c130a9 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
aureliocarella 21:51e162c130a9 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
aureliocarella 21:51e162c130a9 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
aureliocarella 21:51e162c130a9 20 * OTHER DEALINGS IN THE SOFTWARE.
aureliocarella 21:51e162c130a9 21 *
aureliocarella 21:51e162c130a9 22 * Except as contained in this notice, the name of Maxim Integrated
aureliocarella 21:51e162c130a9 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
aureliocarella 21:51e162c130a9 24 * Products, Inc. Branding Policy.
aureliocarella 21:51e162c130a9 25 *
aureliocarella 21:51e162c130a9 26 * The mere transfer of this software does not imply any licenses
aureliocarella 21:51e162c130a9 27 * of trade secrets, proprietary technology, copyrights, patents,
aureliocarella 21:51e162c130a9 28 * trademarks, maskwork rights, or any other form of intellectual
aureliocarella 21:51e162c130a9 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
aureliocarella 21:51e162c130a9 30 * ownership rights.
aureliocarella 21:51e162c130a9 31 *******************************************************************************
aureliocarella 21:51e162c130a9 32 */
aureliocarella 21:51e162c130a9 33 #include "mbed.h"
aureliocarella 21:51e162c130a9 34 //#include "USBSerial.h"
aureliocarella 21:51e162c130a9 35 #include "RpcFifo.h"
aureliocarella 21:51e162c130a9 36 #include "RpcServer.h"
aureliocarella 21:51e162c130a9 37 #include "StringInOut.h"
aureliocarella 21:51e162c130a9 38 #include "Peripherals.h"
aureliocarella 21:51e162c130a9 39
aureliocarella 21:51e162c130a9 40 /// a running index that keeps track of where an incoming string has been
aureliocarella 21:51e162c130a9 41 /// buffered to
aureliocarella 21:51e162c130a9 42 static int lineBuffer_index = 0;
aureliocarella 21:51e162c130a9 43 /// a flag that keeps track of the state of accumulating a string
aureliocarella 21:51e162c130a9 44 static int getLine_State = GETLINE_WAITING;
aureliocarella 21:51e162c130a9 45
aureliocarella 21:51e162c130a9 46 /**
aureliocarella 21:51e162c130a9 47 * @brief Place incoming USB characters into a fifo
aureliocarella 21:51e162c130a9 48 * @param data_IN buffer of characters
aureliocarella 21:51e162c130a9 49 * @param len length of data
aureliocarella 21:51e162c130a9 50 */
aureliocarella 21:51e162c130a9 51 int fifoIncomingChars(uint8_t data_IN[], unsigned int len) {
aureliocarella 21:51e162c130a9 52 int i;
aureliocarella 21:51e162c130a9 53 for (i = 0; i < len; i++) {
aureliocarella 21:51e162c130a9 54 fifo_put8(GetUSBIncomingFifo(), data_IN[i]);
aureliocarella 21:51e162c130a9 55 }
aureliocarella 21:51e162c130a9 56 return 0;
aureliocarella 21:51e162c130a9 57 }
aureliocarella 21:51e162c130a9 58
aureliocarella 21:51e162c130a9 59 /**
aureliocarella 21:51e162c130a9 60 * @brief Check the USB incoming fifo to see if there is data to be read
aureliocarella 21:51e162c130a9 61 * @return 1 if there is data to be read, 0 if data is not available
aureliocarella 21:51e162c130a9 62 */
aureliocarella 21:51e162c130a9 63 int isReadReady(void) {
aureliocarella 21:51e162c130a9 64 if (fifo_empty(GetUSBIncomingFifo()) == 0)
aureliocarella 21:51e162c130a9 65 return 1;
aureliocarella 21:51e162c130a9 66 return 0;
aureliocarella 21:51e162c130a9 67 }
aureliocarella 21:51e162c130a9 68
aureliocarella 21:51e162c130a9 69 /**
aureliocarella 21:51e162c130a9 70 * @brief Clear the incoming USB read fifo
aureliocarella 21:51e162c130a9 71 */
aureliocarella 21:51e162c130a9 72 void clearOutReadFifo(void) { fifo_clear(GetUSBIncomingFifo()); }
aureliocarella 21:51e162c130a9 73
aureliocarella 21:51e162c130a9 74 /**
aureliocarella 21:51e162c130a9 75 * @brief Block until a character can be read from the USB
aureliocarella 21:51e162c130a9 76 * @return the character read
aureliocarella 21:51e162c130a9 77 */
aureliocarella 21:51e162c130a9 78 char getch(void) {
aureliocarella 21:51e162c130a9 79 uint8_t ch;
aureliocarella 21:51e162c130a9 80 // block until char is ready
aureliocarella 21:51e162c130a9 81 while (isReadReady() == 0) {
aureliocarella 21:51e162c130a9 82 }
aureliocarella 21:51e162c130a9 83 // read a char from buffer
aureliocarella 21:51e162c130a9 84 fifo_get8(GetUSBIncomingFifo(), &ch);
aureliocarella 21:51e162c130a9 85 return ch;
aureliocarella 21:51e162c130a9 86 }
aureliocarella 21:51e162c130a9 87
aureliocarella 21:51e162c130a9 88 /**
aureliocarella 21:51e162c130a9 89 * @brief Place incoming USB characters into a fifo
aureliocarella 21:51e162c130a9 90 * @param lineBuffer buffer to place the incoming characters
aureliocarella 21:51e162c130a9 91 * @param bufferLength length of buffer
aureliocarella 21:51e162c130a9 92 * @return GETLINE_WAITING if still waiting for a CRLF, GETLINE_DONE
aureliocarella 21:51e162c130a9 93 */
aureliocarella 21:51e162c130a9 94 int getLine(char *lineBuffer, int bufferLength) {
aureliocarella 21:51e162c130a9 95 uint8_t ch;
aureliocarella 21:51e162c130a9 96
aureliocarella 21:51e162c130a9 97 //USBSerial *serial = Peripherals::usbSerial();
aureliocarella 21:51e162c130a9 98 if (getLine_State == GETLINE_DONE) {
aureliocarella 21:51e162c130a9 99 getLine_State = GETLINE_WAITING;
aureliocarella 21:51e162c130a9 100 }
aureliocarella 21:51e162c130a9 101 // if (serial->available() != 0) {
aureliocarella 21:51e162c130a9 102 // ch = serial->_getc();
aureliocarella 21:51e162c130a9 103 if (1) {
aureliocarella 21:51e162c130a9 104 ch = 1;
aureliocarella 21:51e162c130a9 105 if (ch != 0x0A && ch != 0x0D) {
aureliocarella 21:51e162c130a9 106 lineBuffer[lineBuffer_index++] = ch;
aureliocarella 21:51e162c130a9 107 }
aureliocarella 21:51e162c130a9 108 if (ch == 0x0D) {
aureliocarella 21:51e162c130a9 109 lineBuffer[lineBuffer_index++] = 0;
aureliocarella 21:51e162c130a9 110 lineBuffer_index = 0;
aureliocarella 21:51e162c130a9 111 getLine_State = GETLINE_DONE;
aureliocarella 21:51e162c130a9 112 }
aureliocarella 21:51e162c130a9 113 if (lineBuffer_index > bufferLength) {
aureliocarella 21:51e162c130a9 114 lineBuffer[bufferLength - 1] = 0;
aureliocarella 21:51e162c130a9 115 getLine_State = GETLINE_DONE;
aureliocarella 21:51e162c130a9 116 }
aureliocarella 21:51e162c130a9 117 }
aureliocarella 21:51e162c130a9 118 return getLine_State;
aureliocarella 21:51e162c130a9 119 }
aureliocarella 21:51e162c130a9 120
aureliocarella 21:51e162c130a9 121 /**
aureliocarella 21:51e162c130a9 122 * @brief Block until a fixed number of characters has been accumulated from the
aureliocarella 21:51e162c130a9 123 * incoming USB
aureliocarella 21:51e162c130a9 124 * @param lineBuffer buffer to place the incoming characters
aureliocarella 21:51e162c130a9 125 * @param maxLength length of buffer
aureliocarella 21:51e162c130a9 126 */
aureliocarella 21:51e162c130a9 127 void getStringFixedLength(uint8_t *lineBuffer, int maxLength) {
aureliocarella 21:51e162c130a9 128 uint8_t ch;
aureliocarella 21:51e162c130a9 129 int index = 0;
aureliocarella 21:51e162c130a9 130 // block until maxLength is captured
aureliocarella 21:51e162c130a9 131 while (1) {
aureliocarella 21:51e162c130a9 132 ch = getch();
aureliocarella 21:51e162c130a9 133 lineBuffer[index++] = ch;
aureliocarella 21:51e162c130a9 134 if (index == maxLength)
aureliocarella 21:51e162c130a9 135 return;
aureliocarella 21:51e162c130a9 136 }
aureliocarella 21:51e162c130a9 137 }
aureliocarella 21:51e162c130a9 138
aureliocarella 21:51e162c130a9 139 /**
aureliocarella 21:51e162c130a9 140 * @brief Output a string out the USB serial port
aureliocarella 21:51e162c130a9 141 * @param str output this str the USB channel
aureliocarella 21:51e162c130a9 142 */
aureliocarella 21:51e162c130a9 143 int putStr(const char *str) {
aureliocarella 21:51e162c130a9 144 //Peripherals::usbSerial()->printf("%s", str); // fflush(stdout);
aureliocarella 21:51e162c130a9 145
aureliocarella 21:51e162c130a9 146 // uint8_t *ptr;
aureliocarella 21:51e162c130a9 147 // uint8_t buffer[256];
aureliocarella 21:51e162c130a9 148 // int index = 0;
aureliocarella 21:51e162c130a9 149 /* int length;
aureliocarella 21:51e162c130a9 150 ptr = (uint8_t *)str;
aureliocarella 21:51e162c130a9 151 length = strlen(str);
aureliocarella 21:51e162c130a9 152
aureliocarella 21:51e162c130a9 153 Peripherals::usbSerial()->writeBlock(ptr,length); */
aureliocarella 21:51e162c130a9 154 return 0;
aureliocarella 21:51e162c130a9 155 }
aureliocarella 21:51e162c130a9 156
aureliocarella 21:51e162c130a9 157 /**
aureliocarella 21:51e162c130a9 158 * @brief Outut an array of bytes out the USB serial port
aureliocarella 21:51e162c130a9 159 * @param data buffer to output
aureliocarella 21:51e162c130a9 160 * @param length length of buffer
aureliocarella 21:51e162c130a9 161 */
aureliocarella 21:51e162c130a9 162 int putBytes(uint8_t *data, uint32_t length) {
aureliocarella 21:51e162c130a9 163 int sendThis = 64;
aureliocarella 21:51e162c130a9 164 int sent = 0;
aureliocarella 21:51e162c130a9 165 int thisLeft;
aureliocarella 21:51e162c130a9 166 uint8_t *ptr = data;
aureliocarella 21:51e162c130a9 167 if (length < 64)
aureliocarella 21:51e162c130a9 168 sendThis = length;
aureliocarella 21:51e162c130a9 169 do {
aureliocarella 21:51e162c130a9 170 //Peripherals::usbSerial()->writeBlock(ptr, sendThis);
aureliocarella 21:51e162c130a9 171 sent += sendThis;
aureliocarella 21:51e162c130a9 172 ptr += sendThis;
aureliocarella 21:51e162c130a9 173 thisLeft = length - sent;
aureliocarella 21:51e162c130a9 174 sendThis = 64;
aureliocarella 21:51e162c130a9 175 if (thisLeft < 64)
aureliocarella 21:51e162c130a9 176 sendThis = thisLeft;
aureliocarella 21:51e162c130a9 177 } while (sent != length);
aureliocarella 21:51e162c130a9 178 return 0;
aureliocarella 21:51e162c130a9 179 }
aureliocarella 21:51e162c130a9 180
aureliocarella 21:51e162c130a9 181 /**
aureliocarella 21:51e162c130a9 182 * @brief Outut 256 byte blocks out the USB serial using writeBlock bulk
aureliocarella 21:51e162c130a9 183 * transfers
aureliocarella 21:51e162c130a9 184 * @param data buffer of blocks to output
aureliocarella 21:51e162c130a9 185 * @param length length of 256-byte blocks
aureliocarella 21:51e162c130a9 186 */
aureliocarella 21:51e162c130a9 187 int putBytes256Block(uint8_t *data, int numberBlocks) {
aureliocarella 21:51e162c130a9 188 int i;
aureliocarella 21:51e162c130a9 189 uint8_t *ptr;
aureliocarella 21:51e162c130a9 190 ptr = data;
aureliocarella 21:51e162c130a9 191 const int BLOCK_SIZE = 32;
aureliocarella 21:51e162c130a9 192 const int FLASH_PAGE_SIZE = 256;
aureliocarella 21:51e162c130a9 193 for (i = 0; i < numberBlocks * (FLASH_PAGE_SIZE / BLOCK_SIZE); i++) {
aureliocarella 21:51e162c130a9 194 //Peripherals::usbSerial()->writeBlock(ptr, BLOCK_SIZE);
aureliocarella 21:51e162c130a9 195 ptr += BLOCK_SIZE;
aureliocarella 21:51e162c130a9 196 }
aureliocarella 21:51e162c130a9 197 return 0;
aureliocarella 21:51e162c130a9 198 }
aureliocarella 21:51e162c130a9 199