MicroShellというライブラリのバッファ編集機能に惹かれて強引にSerialクラスっぽくラップしたもの
https://www.cubeatsystems.com/microshell/index.html 様に感謝 やっつけすぎて申し訳ないが技量が足りない...
MicroShell.cpp@0:ff53d8f5146a, 2017-10-19 (annotated)
- Committer:
- beingblock
- Date:
- Thu Oct 19 07:39:57 2017 +0000
- Revision:
- 0:ff53d8f5146a
??
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
beingblock | 0:ff53d8f5146a | 1 | #include "MicroShell.h" |
beingblock | 0:ff53d8f5146a | 2 | #include "core/microshell.h" |
beingblock | 0:ff53d8f5146a | 3 | |
beingblock | 0:ff53d8f5146a | 4 | Serial *msh_con = NULL; |
beingblock | 0:ff53d8f5146a | 5 | MICROSHELL msh_struct; |
beingblock | 0:ff53d8f5146a | 6 | MSCORE_ACTION msh_action; |
beingblock | 0:ff53d8f5146a | 7 | |
beingblock | 0:ff53d8f5146a | 8 | void msh_putc(char c) |
beingblock | 0:ff53d8f5146a | 9 | { |
beingblock | 0:ff53d8f5146a | 10 | msh_con -> putc(c); |
beingblock | 0:ff53d8f5146a | 11 | } |
beingblock | 0:ff53d8f5146a | 12 | char msh_getc(void) |
beingblock | 0:ff53d8f5146a | 13 | { |
beingblock | 0:ff53d8f5146a | 14 | return msh_con -> getc(); |
beingblock | 0:ff53d8f5146a | 15 | } |
beingblock | 0:ff53d8f5146a | 16 | void msh_act_hook(MSCORE_ACTION action) |
beingblock | 0:ff53d8f5146a | 17 | { |
beingblock | 0:ff53d8f5146a | 18 | msh_action = action; |
beingblock | 0:ff53d8f5146a | 19 | } |
beingblock | 0:ff53d8f5146a | 20 | |
beingblock | 0:ff53d8f5146a | 21 | MicroShell::MicroShell(PinName tx, PinName rx, int baud) |
beingblock | 0:ff53d8f5146a | 22 | { |
beingblock | 0:ff53d8f5146a | 23 | if(msh_con==NULL) { |
beingblock | 0:ff53d8f5146a | 24 | msh_con = new Serial(tx,rx,baud); |
beingblock | 0:ff53d8f5146a | 25 | microshell_init(&msh_struct, msh_putc, msh_getc, msh_act_hook); |
beingblock | 0:ff53d8f5146a | 26 | } |
beingblock | 0:ff53d8f5146a | 27 | } |
beingblock | 0:ff53d8f5146a | 28 | void MicroShell::putc(int c) |
beingblock | 0:ff53d8f5146a | 29 | { |
beingblock | 0:ff53d8f5146a | 30 | msh_putc(c); |
beingblock | 0:ff53d8f5146a | 31 | } |
beingblock | 0:ff53d8f5146a | 32 | void MicroShell::puts(const char *s) |
beingblock | 0:ff53d8f5146a | 33 | { |
beingblock | 0:ff53d8f5146a | 34 | while (*s) { |
beingblock | 0:ff53d8f5146a | 35 | msh_putc(*s++); |
beingblock | 0:ff53d8f5146a | 36 | } |
beingblock | 0:ff53d8f5146a | 37 | } |
beingblock | 0:ff53d8f5146a | 38 | int MicroShell::getc() |
beingblock | 0:ff53d8f5146a | 39 | { |
beingblock | 0:ff53d8f5146a | 40 | return msh_getc(); |
beingblock | 0:ff53d8f5146a | 41 | } |
beingblock | 0:ff53d8f5146a | 42 | char *MicroShell::gets(char *s, int size) |
beingblock | 0:ff53d8f5146a | 43 | { |
beingblock | 0:ff53d8f5146a | 44 | return microshell_getline(&msh_struct, s, size); |
beingblock | 0:ff53d8f5146a | 45 | } |
beingblock | 0:ff53d8f5146a | 46 | int MicroShell::printf(const char* format, ...) |
beingblock | 0:ff53d8f5146a | 47 | { |
beingblock | 0:ff53d8f5146a | 48 | int ret; |
beingblock | 0:ff53d8f5146a | 49 | va_list args; |
beingblock | 0:ff53d8f5146a | 50 | va_start(args, format); |
beingblock | 0:ff53d8f5146a | 51 | ret = msh_con -> vprintf(format, args); |
beingblock | 0:ff53d8f5146a | 52 | va_end(args); |
beingblock | 0:ff53d8f5146a | 53 | return ret; |
beingblock | 0:ff53d8f5146a | 54 | } |
beingblock | 0:ff53d8f5146a | 55 | int MicroShell::scanf(const char* format, ...) |
beingblock | 0:ff53d8f5146a | 56 | { |
beingblock | 0:ff53d8f5146a | 57 | char buf[256]; |
beingblock | 0:ff53d8f5146a | 58 | microshell_getline(&msh_struct, buf, sizeof(buf)); |
beingblock | 0:ff53d8f5146a | 59 | |
beingblock | 0:ff53d8f5146a | 60 | int ret; |
beingblock | 0:ff53d8f5146a | 61 | va_list args; |
beingblock | 0:ff53d8f5146a | 62 | va_start(args, format); |
beingblock | 0:ff53d8f5146a | 63 | ret = vsscanf(buf, format, args); |
beingblock | 0:ff53d8f5146a | 64 | va_end(args); |
beingblock | 0:ff53d8f5146a | 65 | return ret; |
beingblock | 0:ff53d8f5146a | 66 | } |
beingblock | 0:ff53d8f5146a | 67 | int MicroShell::vprintf(const char* format, std::va_list args) |
beingblock | 0:ff53d8f5146a | 68 | { |
beingblock | 0:ff53d8f5146a | 69 | int ret; |
beingblock | 0:ff53d8f5146a | 70 | ret = msh_con -> vprintf(format, args); |
beingblock | 0:ff53d8f5146a | 71 | return ret; |
beingblock | 0:ff53d8f5146a | 72 | } |
beingblock | 0:ff53d8f5146a | 73 | int MicroShell::vscanf(const char* format, std::va_list args) |
beingblock | 0:ff53d8f5146a | 74 | { |
beingblock | 0:ff53d8f5146a | 75 | char buf[256]; |
beingblock | 0:ff53d8f5146a | 76 | microshell_getline(&msh_struct, buf, sizeof(buf)); |
beingblock | 0:ff53d8f5146a | 77 | |
beingblock | 0:ff53d8f5146a | 78 | int ret; |
beingblock | 0:ff53d8f5146a | 79 | ret = vsscanf(buf, format, args); |
beingblock | 0:ff53d8f5146a | 80 | return ret; |
beingblock | 0:ff53d8f5146a | 81 | } |