Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MODSERIAL by
ChangeLog.c@22:c11ea36f17f9, 2012-04-19 (annotated)
- Committer:
- AjK
- Date:
- Thu Apr 19 20:47:46 2012 +0000
- Revision:
- 22:c11ea36f17f9
- Parent:
- 21:af2af4c61c2f
- Child:
- 23:5c45c21f36b7
1.22 Buffer pointer fix by Anthony Wieser
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AjK | 1:b7e435fbfe8e | 1 | /* $Id:$ |
AjK | 2:b936b4acbd92 | 2 | |
AjK | 22:c11ea36f17f9 | 3 | 1.22 19th April 2012 |
AjK | 22:c11ea36f17f9 | 4 | |
AjK | 22:c11ea36f17f9 | 5 | * http://mbed.org/forum/bugs-suggestions/topic/2936/ |
AjK | 22:c11ea36f17f9 | 6 | * Bug fix, protect important buffer pointers from IRQ corruption. |
AjK | 22:c11ea36f17f9 | 7 | Credits: |
AjK | 22:c11ea36f17f9 | 8 | Anthony Wieser http://mbed.org/users/WieserSoftwareLtd/ for the fix. |
AjK | 22:c11ea36f17f9 | 9 | BlazeX http://mbed.org/users/BlazeX/ for the alert that a fix was needed! |
AjK | 22:c11ea36f17f9 | 10 | |
AjK | 21:af2af4c61c2f | 11 | 1.21 10 May 2011 |
AjK | 21:af2af4c61c2f | 12 | |
AjK | 21:af2af4c61c2f | 13 | * http://mbed.org/forum/mbed/topic/2264 |
AjK | 21:af2af4c61c2f | 14 | |
AjK | 20:59c74aaedda2 | 15 | 1.20 26 April 2011 |
AjK | 20:59c74aaedda2 | 16 | |
AjK | 20:59c74aaedda2 | 17 | * Bug fix, not blocking on transmit |
AjK | 20:59c74aaedda2 | 18 | by Erik Petrich, http://mbed.org/forum/bugs-suggestions/topic/2200 |
AjK | 20:59c74aaedda2 | 19 | |
AjK | 20:59c74aaedda2 | 20 | 1.19 20 April 2011 |
AjK | 20:59c74aaedda2 | 21 | |
AjK | 20:59c74aaedda2 | 22 | * Fixed some doxygen comment bugs. |
AjK | 20:59c74aaedda2 | 23 | |
AjK | 18:21ef26402365 | 24 | 1.18 20 April 2011 |
AjK | 18:21ef26402365 | 25 | |
AjK | 18:21ef26402365 | 26 | * All callbacks now use MODSERIAL_callback (rather than Mbed's FunctionPointer[1] type) |
AjK | 18:21ef26402365 | 27 | to store and invoke it's callbacks. This allows MODSERIAL to pass a parameter |
AjK | 18:21ef26402365 | 28 | to callbacks. The function prototype is now void func(MODSERIAL_IRQ_INFO *q). |
AjK | 18:21ef26402365 | 29 | * Callbacks now pass a pointer to a MODSERIAL_IRQ_INFO class type. |
AjK | 18:21ef26402365 | 30 | This class holds a pointer to the MODSERIAL object that invoked the callback |
AjK | 18:21ef26402365 | 31 | thus freeing callbacks need to use the global variable of the original |
AjK | 18:21ef26402365 | 32 | MODSERIAL instance. |
AjK | 18:21ef26402365 | 33 | * MODSERIAL_IRQ_INFO also declares public functions that are protected within MODSERIAL |
AjK | 18:21ef26402365 | 34 | thus allowing certain functions to be restricted to callback context only. |
AjK | 18:21ef26402365 | 35 | * New function MODSERIAL_IRQ_INFO::rxDiscardLastChar() allows an rxCallback function |
AjK | 18:21ef26402365 | 36 | to remove the character that was just placed into the RX buffer. |
AjK | 18:21ef26402365 | 37 | |
AjK | 18:21ef26402365 | 38 | [1] http://mbed.org/users/AjK/libraries/FPointer/latest/docs/ |
AjK | 18:21ef26402365 | 39 | |
AjK | 17:6c9b57c14868 | 40 | 1.17 08/Mar/2011 |
AjK | 17:6c9b57c14868 | 41 | Fixed a memory leak in the DMA code. |
AjK | 17:6c9b57c14868 | 42 | |
AjK | 16:8b1dbf4cce4e | 43 | 1.16 - 12 Feb 2011 |
AjK | 16:8b1dbf4cce4e | 44 | |
AjK | 16:8b1dbf4cce4e | 45 | * Missed one, doh! |
AjK | 16:8b1dbf4cce4e | 46 | |
AjK | 15:a1d9e745d71e | 47 | 1.15 - 12 Feb 2011 |
AjK | 15:a1d9e745d71e | 48 | |
AjK | 15:a1d9e745d71e | 49 | * Fixed some typos. |
AjK | 15:a1d9e745d71e | 50 | |
AjK | 14:3c3b87617bfe | 51 | 1.14 - 7 Feb 2011 |
AjK | 14:3c3b87617bfe | 52 | |
AjK | 14:3c3b87617bfe | 53 | * Fixed a bug in __putc() that caused the output buffer pointer to |
AjK | 14:3c3b87617bfe | 54 | become corrupted. |
AjK | 14:3c3b87617bfe | 55 | |
AjK | 13:70bb7c1769fa | 56 | 1.13 - 20/01/2011 |
AjK | 13:70bb7c1769fa | 57 | |
AjK | 13:70bb7c1769fa | 58 | * Added extra documentation. |
AjK | 13:70bb7c1769fa | 59 | * Fixed some typos. |
AjK | 13:70bb7c1769fa | 60 | |
AjK | 12:8c7394e2ae7f | 61 | 1.12 - 20/01/2011 |
AjK | 12:8c7394e2ae7f | 62 | |
AjK | 12:8c7394e2ae7f | 63 | * Added new "autoDetectChar()" function. To use:- |
AjK | 12:8c7394e2ae7f | 64 | 1st: Add a callback to invoke when the char is detected:- |
AjK | 12:8c7394e2ae7f | 65 | .attach(&detectedChar, MODSERIAL::RxAutoDetect); |
AjK | 12:8c7394e2ae7f | 66 | 2nd: Send the char to detect. |
AjK | 12:8c7394e2ae7f | 67 | .autoDectectChar('\n'); |
AjK | 12:8c7394e2ae7f | 68 | Whenever that char goes into the RX buffer your callback will be invoked. |
AjK | 12:8c7394e2ae7f | 69 | Added example2.cpp to demo a simple messaging system using this auto feature. |
AjK | 12:8c7394e2ae7f | 70 | |
AjK | 12:8c7394e2ae7f | 71 | |
AjK | 11:a93a62eeeb9d | 72 | 1.11 - 23/11/2010 |
AjK | 11:a93a62eeeb9d | 73 | |
AjK | 11:a93a62eeeb9d | 74 | * Fixed a minor issue with 1.10 missed an alteration of name change. |
AjK | 11:a93a62eeeb9d | 75 | |
AjK | 10:725fe81aa9ff | 76 | 1.10 - 23/11/2010 |
AjK | 10:725fe81aa9ff | 77 | |
AjK | 18:21ef26402365 | 78 | * Rename the DMA callback from attach_dma_complete() to attach_dmaSendComplete() |
AjK | 10:725fe81aa9ff | 79 | |
AjK | 9:b3cdae80e7a9 | 80 | 1.9 - 23/11/2010 |
AjK | 9:b3cdae80e7a9 | 81 | |
AjK | 9:b3cdae80e7a9 | 82 | * Added support for DMA sending of characters. Required is |
AjK | 9:b3cdae80e7a9 | 83 | the MODDMA library module:- |
AjK | 9:b3cdae80e7a9 | 84 | http://mbed.org/users/AjK/libraries/MODDMA/latest |
AjK | 9:b3cdae80e7a9 | 85 | See example_dma.cpp for more information. |
AjK | 9:b3cdae80e7a9 | 86 | |
AjK | 8:775f860e94d3 | 87 | 1.8 - 22/11/2010 |
AjK | 8:775f860e94d3 | 88 | |
AjK | 8:775f860e94d3 | 89 | * Added code so that if a buffer is set to zero length then |
AjK | 8:775f860e94d3 | 90 | MODSERIAL defaults to just using the FIFO for that stream |
AjK | 8:775f860e94d3 | 91 | thus making the library "fall back" to teh same operation |
AjK | 8:775f860e94d3 | 92 | that the Mbed Serial library performs. |
AjK | 8:775f860e94d3 | 93 | * Removed dmaSend() function that should have been removed |
AjK | 8:775f860e94d3 | 94 | at 1.7 |
AjK | 8:775f860e94d3 | 95 | |
AjK | 7:ffa4a7cb7f8d | 96 | 1.7 - 21/11/2010 |
AjK | 7:ffa4a7cb7f8d | 97 | |
AjK | 7:ffa4a7cb7f8d | 98 | * Remove the DMA enum from MODSERIAL.h as it's not currently |
AjK | 7:ffa4a7cb7f8d | 99 | ready for release. |
AjK | 7:ffa4a7cb7f8d | 100 | * Added page doxygen comments. |
AjK | 7:ffa4a7cb7f8d | 101 | |
AjK | 6:c8f77fe1cc10 | 102 | 1.6 - 21/11/2010 |
AjK | 6:c8f77fe1cc10 | 103 | |
AjK | 6:c8f77fe1cc10 | 104 | * Version 1.5 solved a blocking problem on putc() when called |
AjK | 6:c8f77fe1cc10 | 105 | from another ISR. However, isr_tx() invokes a callback of it's |
AjK | 6:c8f77fe1cc10 | 106 | own when a byte is tranferred from TX buffer to TX FIFO. User |
AjK | 6:c8f77fe1cc10 | 107 | programs may interpret that as an IRQ callback. That's an ISR |
AjK | 6:c8f77fe1cc10 | 108 | call from within an existing ISR which is not good. So the |
AjK | 6:c8f77fe1cc10 | 109 | TxIrq callback from isr_tx is now conditional. It will only |
AjK | 6:c8f77fe1cc10 | 110 | be called when isr_tx() is actually within it's own ISR and |
AjK | 6:c8f77fe1cc10 | 111 | not when called from alternate ISR handlers. |
AjK | 6:c8f77fe1cc10 | 112 | |
AjK | 5:8365c4cf8f33 | 113 | 1.5 - 21/11/2010 |
AjK | 5:8365c4cf8f33 | 114 | |
AjK | 5:8365c4cf8f33 | 115 | * Calling putc() (or any derived function that uses it like |
AjK | 5:8365c4cf8f33 | 116 | printf()) while inside an interrupt service routine can |
AjK | 5:8365c4cf8f33 | 117 | cause the system to lock up if the TX buffer is full. This |
AjK | 5:8365c4cf8f33 | 118 | is because bytes are only transferred from the TX buffer to |
AjK | 5:8365c4cf8f33 | 119 | the TX FIFO via the TX ISR. If we are, say in an RX ISR already, |
AjK | 5:8365c4cf8f33 | 120 | then the TX ISR will never trigger. The TX buffer stays full and |
AjK | 5:8365c4cf8f33 | 121 | there is never space to putc() the byte. So, while putc() blocks |
AjK | 5:8365c4cf8f33 | 122 | waiting for space it calls isr_tx() to ensure if TX FIFO space |
AjK | 5:8365c4cf8f33 | 123 | becomes available it will move bytes from the TX buffer to TX |
AjK | 5:8365c4cf8f33 | 124 | FIFO thus removing the blocking condition within putc(). |
AjK | 5:8365c4cf8f33 | 125 | |
AjK | 4:28de979b77cf | 126 | 1.4 - 21/11/2010 |
AjK | 4:28de979b77cf | 127 | |
AjK | 4:28de979b77cf | 128 | * Removed all the new DMA code. I wish mbed.org had proper SVN |
AjK | 4:28de979b77cf | 129 | versioning, I'm use to working in HEAD and BRANCHES after I've |
AjK | 4:28de979b77cf | 130 | released a project. Getting bug reports in current releases |
AjK | 4:28de979b77cf | 131 | while trying to dev new code is hard to manage without source |
AjK | 4:28de979b77cf | 132 | control of some type! |
AjK | 4:28de979b77cf | 133 | |
AjK | 2:b936b4acbd92 | 134 | 1.3 - 21/11/2010 |
AjK | 2:b936b4acbd92 | 135 | |
AjK | 2:b936b4acbd92 | 136 | * Fixed a macro problem with txIsBusy() |
AjK | 2:b936b4acbd92 | 137 | * Started adding code to use "block data" sending using DMA |
AjK | 3:0f10f536456e | 138 | * Removed #include "IOMACROS.h" |
AjK | 1:b7e435fbfe8e | 139 | |
AjK | 2:b936b4acbd92 | 140 | 1.2 - 21/11/2010 |
AjK | 2:b936b4acbd92 | 141 | |
AjK | 2:b936b4acbd92 | 142 | * Removed unsed variables from flushBuffer() |
AjK | 2:b936b4acbd92 | 143 | * Fixed a bug where both RX AND TX fifos are cleared/reset |
AjK | 2:b936b4acbd92 | 144 | when just TX OR RX should be cleared. |
AjK | 2:b936b4acbd92 | 145 | * Fixed a bug that cleared IIR when in fact it should be left |
AjK | 2:b936b4acbd92 | 146 | alone so that any pending interrupt after flush is handled. |
AjK | 2:b936b4acbd92 | 147 | * Merged setBase() into init() as it wasn't required anywhere else. |
AjK | 2:b936b4acbd92 | 148 | * Changed init() to enforce _uidx is set by Serial to define the _base |
AjK | 2:b936b4acbd92 | 149 | address of the Uart in use. |
AjK | 2:b936b4acbd92 | 150 | |
AjK | 1:b7e435fbfe8e | 151 | 1.1 - 20/11/2010 |
AjK | 1:b7e435fbfe8e | 152 | |
AjK | 1:b7e435fbfe8e | 153 | * Added this file |
AjK | 1:b7e435fbfe8e | 154 | * Removed cruft from GETC.cpp |
AjK | 1:b7e435fbfe8e | 155 | * "teh" should be "the", why do my fingers do that? |
AjK | 1:b7e435fbfe8e | 156 | |
AjK | 1:b7e435fbfe8e | 157 | 1.0 - 20/11/2010 |
AjK | 1:b7e435fbfe8e | 158 | |
AjK | 1:b7e435fbfe8e | 159 | * First release. |
AjK | 1:b7e435fbfe8e | 160 | |
AjK | 1:b7e435fbfe8e | 161 | */ |