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.
CommHandler.cpp@9:1a76d4848462, 2013-05-22 (annotated)
- Committer:
- sam_grove
- Date:
- Wed May 22 19:37:22 2013 +0000
- Revision:
- 9:1a76d4848462
- Parent:
- 4:5d54100399b1
Removed an un-necessary cast. Important to note that this currently should be used in global scope. Objects that are added to the underlying linked list do not have a mechanism to be deleted. Therefore a memory leak would occur if used in local scope
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| sam_grove | 0:cd84204f23d8 | 1 | /** |
| sam_grove | 0:cd84204f23d8 | 2 | * @file CommHandler.cpp |
| sam_grove | 0:cd84204f23d8 | 3 | * @brief Core Utility - Manage ASCII communication between devices |
| sam_grove | 0:cd84204f23d8 | 4 | * @author sam grove |
| sam_grove | 0:cd84204f23d8 | 5 | * @version 1.0 |
| sam_grove | 0:cd84204f23d8 | 6 | * @see |
| sam_grove | 0:cd84204f23d8 | 7 | * |
| sam_grove | 0:cd84204f23d8 | 8 | * Copyright (c) 2013 |
| sam_grove | 0:cd84204f23d8 | 9 | * |
| sam_grove | 0:cd84204f23d8 | 10 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| sam_grove | 0:cd84204f23d8 | 11 | * you may not use this file except in compliance with the License. |
| sam_grove | 0:cd84204f23d8 | 12 | * You may obtain a copy of the License at |
| sam_grove | 0:cd84204f23d8 | 13 | * |
| sam_grove | 0:cd84204f23d8 | 14 | * http://www.apache.org/licenses/LICENSE-2.0 |
| sam_grove | 0:cd84204f23d8 | 15 | * |
| sam_grove | 0:cd84204f23d8 | 16 | * Unless required by applicable law or agreed to in writing, software |
| sam_grove | 0:cd84204f23d8 | 17 | * distributed under the License is distributed on an "AS IS" BASIS, |
| sam_grove | 0:cd84204f23d8 | 18 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| sam_grove | 0:cd84204f23d8 | 19 | * See the License for the specific language governing permissions and |
| sam_grove | 0:cd84204f23d8 | 20 | * limitations under the License. |
| sam_grove | 0:cd84204f23d8 | 21 | */ |
| sam_grove | 0:cd84204f23d8 | 22 | |
| sam_grove | 0:cd84204f23d8 | 23 | #include "CommHandler.h" |
| sam_grove | 0:cd84204f23d8 | 24 | #include <string.h> |
| sam_grove | 0:cd84204f23d8 | 25 | |
| sam_grove | 0:cd84204f23d8 | 26 | CommHandler::CommHandler( void ) |
| sam_grove | 0:cd84204f23d8 | 27 | { |
| sam_grove | 0:cd84204f23d8 | 28 | return; |
| sam_grove | 0:cd84204f23d8 | 29 | } |
| sam_grove | 0:cd84204f23d8 | 30 | |
| sam_grove | 0:cd84204f23d8 | 31 | void CommHandler::attachMsg( char *string, char *(*function)(char *) ) |
| sam_grove | 0:cd84204f23d8 | 32 | { |
| sam_grove | 0:cd84204f23d8 | 33 | MsgObj *new_node = new MsgObj [1]; |
| sam_grove | 0:cd84204f23d8 | 34 | // make sure the new object was allocated |
| sam_grove | 0:cd84204f23d8 | 35 | if (0 == new_node) |
| sam_grove | 0:cd84204f23d8 | 36 | { |
| sam_grove | 0:cd84204f23d8 | 37 | ERROR("Memory Allocation Failed\n"); |
| sam_grove | 0:cd84204f23d8 | 38 | } |
| sam_grove | 0:cd84204f23d8 | 39 | // store the user parameters |
| sam_grove | 0:cd84204f23d8 | 40 | new_node->string = string; |
| sam_grove | 0:cd84204f23d8 | 41 | new_node->handler.attach( function ); |
| sam_grove | 0:cd84204f23d8 | 42 | // and insert them into the list |
| sam_grove | 9:1a76d4848462 | 43 | _list.append(new_node); |
| sam_grove | 0:cd84204f23d8 | 44 | |
| sam_grove | 0:cd84204f23d8 | 45 | return; |
| sam_grove | 0:cd84204f23d8 | 46 | } |
| sam_grove | 0:cd84204f23d8 | 47 | |
| sam_grove | 0:cd84204f23d8 | 48 | char *CommHandler::serviceMessage( char* buffer ) |
| sam_grove | 0:cd84204f23d8 | 49 | { |
| sam_grove | 0:cd84204f23d8 | 50 | uint32_t cnt = _list.length(); |
| sam_grove | 0:cd84204f23d8 | 51 | node *item; |
| sam_grove | 0:cd84204f23d8 | 52 | MsgObj *tmp_data; |
| sam_grove | 0:cd84204f23d8 | 53 | |
| sam_grove | 0:cd84204f23d8 | 54 | for(uint32_t i=1; i<=cnt; ++i) |
| sam_grove | 0:cd84204f23d8 | 55 | { |
| sam_grove | 0:cd84204f23d8 | 56 | item = _list.pop(i); |
| sam_grove | 0:cd84204f23d8 | 57 | tmp_data = (MsgObj *)item->data; |
| sam_grove | 0:cd84204f23d8 | 58 | // Test the input against the stored record |
| sam_grove | 0:cd84204f23d8 | 59 | if( 0 == memcmp( buffer, tmp_data->string, strlen(tmp_data->string) ) ) |
| sam_grove | 0:cd84204f23d8 | 60 | { |
| sam_grove | 0:cd84204f23d8 | 61 | return tmp_data->handler( buffer ); |
| sam_grove | 0:cd84204f23d8 | 62 | } |
| sam_grove | 0:cd84204f23d8 | 63 | } |
| sam_grove | 0:cd84204f23d8 | 64 | |
| sam_grove | 0:cd84204f23d8 | 65 | return 0; |
| sam_grove | 0:cd84204f23d8 | 66 | } |
| sam_grove | 0:cd84204f23d8 | 67 | |
| sam_grove | 0:cd84204f23d8 | 68 | char *CommHandler::messageLookup( uint32_t const loc ) |
| sam_grove | 0:cd84204f23d8 | 69 | { |
| sam_grove | 0:cd84204f23d8 | 70 | node *tmp_item = _list.pop( loc ); |
| sam_grove | 0:cd84204f23d8 | 71 | |
| sam_grove | 0:cd84204f23d8 | 72 | if(0 == tmp_item) |
| sam_grove | 0:cd84204f23d8 | 73 | { |
| sam_grove | 0:cd84204f23d8 | 74 | return 0; |
| sam_grove | 0:cd84204f23d8 | 75 | } |
| sam_grove | 0:cd84204f23d8 | 76 | |
| sam_grove | 0:cd84204f23d8 | 77 | MsgObj *tmp_data = (MsgObj *)tmp_item->data; |
| sam_grove | 0:cd84204f23d8 | 78 | |
| sam_grove | 0:cd84204f23d8 | 79 | return tmp_data->string; |
| sam_grove | 0:cd84204f23d8 | 80 | } |
| sam_grove | 0:cd84204f23d8 | 81 |