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.
USB_Host/printhex.h@0:b1ce54272580, 2020-01-18 (annotated)
- Committer:
- kotakku
- Date:
- Sat Jan 18 15:06:35 2020 +0000
- Revision:
- 0:b1ce54272580
- Child:
- 1:da31140f2a1c
1.0.0 first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kotakku | 0:b1ce54272580 | 1 | /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved. |
kotakku | 0:b1ce54272580 | 2 | |
kotakku | 0:b1ce54272580 | 3 | This program is free software; you can redistribute it and/or modify |
kotakku | 0:b1ce54272580 | 4 | it under the terms of the GNU General Public License as published by |
kotakku | 0:b1ce54272580 | 5 | the Free Software Foundation; either version 2 of the License, or |
kotakku | 0:b1ce54272580 | 6 | (at your option) any later version. |
kotakku | 0:b1ce54272580 | 7 | |
kotakku | 0:b1ce54272580 | 8 | This program is distributed in the hope that it will be useful, |
kotakku | 0:b1ce54272580 | 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
kotakku | 0:b1ce54272580 | 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
kotakku | 0:b1ce54272580 | 11 | GNU General Public License for more details. |
kotakku | 0:b1ce54272580 | 12 | |
kotakku | 0:b1ce54272580 | 13 | You should have received a copy of the GNU General Public License |
kotakku | 0:b1ce54272580 | 14 | along with this program; if not, write to the Free Software |
kotakku | 0:b1ce54272580 | 15 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
kotakku | 0:b1ce54272580 | 16 | |
kotakku | 0:b1ce54272580 | 17 | Contact information |
kotakku | 0:b1ce54272580 | 18 | ------------------- |
kotakku | 0:b1ce54272580 | 19 | |
kotakku | 0:b1ce54272580 | 20 | Circuits At Home, LTD |
kotakku | 0:b1ce54272580 | 21 | Web : http://www.circuitsathome.com |
kotakku | 0:b1ce54272580 | 22 | e-mail : support@circuitsathome.com |
kotakku | 0:b1ce54272580 | 23 | */ |
kotakku | 0:b1ce54272580 | 24 | |
kotakku | 0:b1ce54272580 | 25 | #if !defined(_usb_h_) || defined(__PRINTHEX_H__) |
kotakku | 0:b1ce54272580 | 26 | #error "Never include printhex.h directly; include Usb.h instead" |
kotakku | 0:b1ce54272580 | 27 | #else |
kotakku | 0:b1ce54272580 | 28 | #define __PRINTHEX_H__ |
kotakku | 0:b1ce54272580 | 29 | |
kotakku | 0:b1ce54272580 | 30 | void E_Notifyc(char c, int lvl); |
kotakku | 0:b1ce54272580 | 31 | |
kotakku | 0:b1ce54272580 | 32 | template <class T> |
kotakku | 0:b1ce54272580 | 33 | void PrintHex(T val, int lvl) { |
kotakku | 0:b1ce54272580 | 34 | int num_nibbles = sizeof (T) * 2; |
kotakku | 0:b1ce54272580 | 35 | |
kotakku | 0:b1ce54272580 | 36 | do { |
kotakku | 0:b1ce54272580 | 37 | char v = 48 + (((val >> (num_nibbles - 1) * 4)) & 0x0f); |
kotakku | 0:b1ce54272580 | 38 | if(v > 57) v += 7; |
kotakku | 0:b1ce54272580 | 39 | E_Notifyc(v, lvl); |
kotakku | 0:b1ce54272580 | 40 | } while(--num_nibbles); |
kotakku | 0:b1ce54272580 | 41 | } |
kotakku | 0:b1ce54272580 | 42 | |
kotakku | 0:b1ce54272580 | 43 | template <class T> |
kotakku | 0:b1ce54272580 | 44 | void PrintBin(T val, int lvl) { |
kotakku | 0:b1ce54272580 | 45 | for(T mask = (((T)1) << ((sizeof (T) << 3) - 1)); mask; mask >>= 1) |
kotakku | 0:b1ce54272580 | 46 | if(val & mask) |
kotakku | 0:b1ce54272580 | 47 | E_Notifyc('1', lvl); |
kotakku | 0:b1ce54272580 | 48 | else |
kotakku | 0:b1ce54272580 | 49 | E_Notifyc('0', lvl); |
kotakku | 0:b1ce54272580 | 50 | } |
kotakku | 0:b1ce54272580 | 51 | |
kotakku | 0:b1ce54272580 | 52 | template <class T> |
kotakku | 0:b1ce54272580 | 53 | void SerialPrintHex(T val) { |
kotakku | 0:b1ce54272580 | 54 | int num_nibbles = sizeof (T) * 2; |
kotakku | 0:b1ce54272580 | 55 | |
kotakku | 0:b1ce54272580 | 56 | do { |
kotakku | 0:b1ce54272580 | 57 | char v = 48 + (((val >> (num_nibbles - 1) * 4)) & 0x0f); |
kotakku | 0:b1ce54272580 | 58 | if(v > 57) v += 7; |
kotakku | 0:b1ce54272580 | 59 | USB_HOST_SERIAL.print(v); |
kotakku | 0:b1ce54272580 | 60 | } while(--num_nibbles); |
kotakku | 0:b1ce54272580 | 61 | } |
kotakku | 0:b1ce54272580 | 62 | |
kotakku | 0:b1ce54272580 | 63 | template <class T> |
kotakku | 0:b1ce54272580 | 64 | void PrintHex2(Print *prn, T val) { |
kotakku | 0:b1ce54272580 | 65 | T mask = (((T)1) << (((sizeof (T) << 1) - 1) << 2)); |
kotakku | 0:b1ce54272580 | 66 | |
kotakku | 0:b1ce54272580 | 67 | while(mask > 1) { |
kotakku | 0:b1ce54272580 | 68 | if(val < mask) |
kotakku | 0:b1ce54272580 | 69 | prn->print("0"); |
kotakku | 0:b1ce54272580 | 70 | |
kotakku | 0:b1ce54272580 | 71 | mask >>= 4; |
kotakku | 0:b1ce54272580 | 72 | } |
kotakku | 0:b1ce54272580 | 73 | prn->print((T)val, HEX); |
kotakku | 0:b1ce54272580 | 74 | } |
kotakku | 0:b1ce54272580 | 75 | |
kotakku | 0:b1ce54272580 | 76 | template <class T> void D_PrintHex(T val __attribute__((unused)), int lvl __attribute__((unused))) { |
kotakku | 0:b1ce54272580 | 77 | #ifdef DEBUG_USB_HOST |
kotakku | 0:b1ce54272580 | 78 | PrintHex<T > (val, lvl); |
kotakku | 0:b1ce54272580 | 79 | #endif |
kotakku | 0:b1ce54272580 | 80 | } |
kotakku | 0:b1ce54272580 | 81 | |
kotakku | 0:b1ce54272580 | 82 | template <class T> |
kotakku | 0:b1ce54272580 | 83 | void D_PrintBin(T val, int lvl) { |
kotakku | 0:b1ce54272580 | 84 | #ifdef DEBUG_USB_HOST |
kotakku | 0:b1ce54272580 | 85 | PrintBin<T > (val, lvl); |
kotakku | 0:b1ce54272580 | 86 | #endif |
kotakku | 0:b1ce54272580 | 87 | } |
kotakku | 0:b1ce54272580 | 88 | |
kotakku | 0:b1ce54272580 | 89 | |
kotakku | 0:b1ce54272580 | 90 | |
kotakku | 0:b1ce54272580 | 91 | #endif // __PRINTHEX_H__ |
kotakku | 0:b1ce54272580 | 92 |