USB to I2C voa command line interface.

Dependencies:   CommandProcessor mbed

Committer:
ericebert
Date:
Tue Nov 22 13:03:47 2016 +0000
Revision:
0:a39767890be8
USB2I2C erlaub es per Kommando-Interpreter Befehle an den I2C zu senden.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ericebert 0:a39767890be8 1
ericebert 0:a39767890be8 2 #ifdef WIN32
ericebert 0:a39767890be8 3 #include "stdio.h"
ericebert 0:a39767890be8 4 #include "conio.h"
ericebert 0:a39767890be8 5 #include "string.h"
ericebert 0:a39767890be8 6 #include "assert.h"
ericebert 0:a39767890be8 7 #else
ericebert 0:a39767890be8 8 #include "mbed.h"
ericebert 0:a39767890be8 9 #endif
ericebert 0:a39767890be8 10
ericebert 0:a39767890be8 11 extern "C" {
ericebert 0:a39767890be8 12 #include "CommandProcessor.h"
ericebert 0:a39767890be8 13 }
ericebert 0:a39767890be8 14
ericebert 0:a39767890be8 15 #ifdef WIN32
ericebert 0:a39767890be8 16 #else
ericebert 0:a39767890be8 17 I2C i2c(PTE0, PTE1);
ericebert 0:a39767890be8 18 const int addr = 0x30;
ericebert 0:a39767890be8 19 DigitalOut red(LED1);
ericebert 0:a39767890be8 20 DigitalOut green(LED2);
ericebert 0:a39767890be8 21 DigitalOut blue(LED3);
ericebert 0:a39767890be8 22 Ticker flipper;
ericebert 0:a39767890be8 23 char cmd[2];
ericebert 0:a39767890be8 24 #endif
ericebert 0:a39767890be8 25
ericebert 0:a39767890be8 26 void flip() {
ericebert 0:a39767890be8 27 blue = !blue;
ericebert 0:a39767890be8 28 }
ericebert 0:a39767890be8 29
ericebert 0:a39767890be8 30 RUNRESULT_T Send(char *p);
ericebert 0:a39767890be8 31 const CMD_T SendCmd = {
ericebert 0:a39767890be8 32 "send",
ericebert 0:a39767890be8 33 "Send bytes to I2C",
ericebert 0:a39767890be8 34 Send,
ericebert 0:a39767890be8 35 visible
ericebert 0:a39767890be8 36 };
ericebert 0:a39767890be8 37
ericebert 0:a39767890be8 38 RUNRESULT_T Read(char *p);
ericebert 0:a39767890be8 39 const CMD_T ReadCmd = {
ericebert 0:a39767890be8 40 "read",
ericebert 0:a39767890be8 41 "Read bytes from I2C",
ericebert 0:a39767890be8 42 Read,
ericebert 0:a39767890be8 43 visible
ericebert 0:a39767890be8 44 };
ericebert 0:a39767890be8 45
ericebert 0:a39767890be8 46 RUNRESULT_T Who(char *p);
ericebert 0:a39767890be8 47 const CMD_T WhoCmd = {
ericebert 0:a39767890be8 48 "who",
ericebert 0:a39767890be8 49 "Shows who is logged on, or 'who id' for specifics",
ericebert 0:a39767890be8 50 Who,
ericebert 0:a39767890be8 51 visible
ericebert 0:a39767890be8 52 };
ericebert 0:a39767890be8 53
ericebert 0:a39767890be8 54 RUNRESULT_T SignOnBanner(char *p);
ericebert 0:a39767890be8 55 const CMD_T SignOnBannerCmd = {
ericebert 0:a39767890be8 56 "About",
ericebert 0:a39767890be8 57 "About this program",
ericebert 0:a39767890be8 58 SignOnBanner,
ericebert 0:a39767890be8 59 invisible
ericebert 0:a39767890be8 60 };
ericebert 0:a39767890be8 61
ericebert 0:a39767890be8 62 RUNRESULT_T SignOnBanner(char *p)
ericebert 0:a39767890be8 63 {
ericebert 0:a39767890be8 64 puts("\r\nThis program was built " __DATE__ " " __TIME__ ".\r\n");
ericebert 0:a39767890be8 65 return runok;
ericebert 0:a39767890be8 66 }
ericebert 0:a39767890be8 67
ericebert 0:a39767890be8 68 RUNRESULT_T Who(char *p) {
ericebert 0:a39767890be8 69 printf("\r\nwho...\r\n");
ericebert 0:a39767890be8 70 if (*p)
ericebert 0:a39767890be8 71 printf(" Sorry, no help for [%s]\r\n", p);
ericebert 0:a39767890be8 72 return runok;
ericebert 0:a39767890be8 73 }
ericebert 0:a39767890be8 74
ericebert 0:a39767890be8 75 RUNRESULT_T Send(char *p) {
ericebert 0:a39767890be8 76 printf("\r\nSending bytes...\r\n");
ericebert 0:a39767890be8 77 if (*p)
ericebert 0:a39767890be8 78 {
ericebert 0:a39767890be8 79 red = 0;
ericebert 0:a39767890be8 80 printf("[%s]\r\n", p);
ericebert 0:a39767890be8 81 cmd[0] = p[0];
ericebert 0:a39767890be8 82 cmd[1] = p[1];
ericebert 0:a39767890be8 83 i2c.write(addr, cmd, 2);
ericebert 0:a39767890be8 84 red = 1;
ericebert 0:a39767890be8 85 }
ericebert 0:a39767890be8 86
ericebert 0:a39767890be8 87 return runok;
ericebert 0:a39767890be8 88 }
ericebert 0:a39767890be8 89 RUNRESULT_T Read(char *p) {
ericebert 0:a39767890be8 90 printf("\r\nRead...\r\n");
ericebert 0:a39767890be8 91 if (*p)
ericebert 0:a39767890be8 92 {
ericebert 0:a39767890be8 93 green=0;
ericebert 0:a39767890be8 94 Send(p);
ericebert 0:a39767890be8 95 i2c.read(addr, cmd, 2);
ericebert 0:a39767890be8 96 float tmp = (float((cmd[0]<<8)|cmd[1]) / 256.0);
ericebert 0:a39767890be8 97 printf("Temp = %.2f\n", tmp);
ericebert 0:a39767890be8 98 green=1;
ericebert 0:a39767890be8 99 }
ericebert 0:a39767890be8 100 return runok;
ericebert 0:a39767890be8 101 }
ericebert 0:a39767890be8 102 // Provide the serial interface methods for the command processor
ericebert 0:a39767890be8 103 #ifdef WIN32
ericebert 0:a39767890be8 104 int mReadable() { return _kbhit(); }
ericebert 0:a39767890be8 105 int mGetCh() { return _getch(); }
ericebert 0:a39767890be8 106 int mPutCh(int a) { return _putch(a); }
ericebert 0:a39767890be8 107 int mPutS(const char * s) { return printf("%s\r\n", s); }
ericebert 0:a39767890be8 108 #else
ericebert 0:a39767890be8 109 Serial pc(USBTX, USBRX);
ericebert 0:a39767890be8 110 int mReadable() { return pc.readable(); }
ericebert 0:a39767890be8 111 int mGetCh() { return pc.getc(); }
ericebert 0:a39767890be8 112 int mPutCh(int a) { return pc.putc(a); }
ericebert 0:a39767890be8 113 int mPutS(const char * s) { return pc.printf("%s\r\n", s); }
ericebert 0:a39767890be8 114 #endif
ericebert 0:a39767890be8 115
ericebert 0:a39767890be8 116 int main(int argc, char* argv[])
ericebert 0:a39767890be8 117 {
ericebert 0:a39767890be8 118 CMDP_T * cp = GetCommandProcessor();
ericebert 0:a39767890be8 119 #ifdef WIN32
ericebert 0:a39767890be8 120 // nothing special for Win32
ericebert 0:a39767890be8 121 #else
ericebert 0:a39767890be8 122 pc.baud(921600);
ericebert 0:a39767890be8 123 #endif
ericebert 0:a39767890be8 124 cp->Init(
ericebert 0:a39767890be8 125 &SignOnBannerCmd,
ericebert 0:a39767890be8 126 CFG_ENABLE_TERMINATE | CFG_ENABLE_SYSTEM
ericebert 0:a39767890be8 127 | CFG_ECHO_ON | CFG_CASE_INSENSITIVE, // options
ericebert 0:a39767890be8 128 50, // Command Buffer length
ericebert 0:a39767890be8 129 5, // History depth # of commands
ericebert 0:a39767890be8 130 mReadable, // User provided API (kbhit())
ericebert 0:a39767890be8 131 mGetCh, // User provided API
ericebert 0:a39767890be8 132 mPutCh, // User provided API
ericebert 0:a39767890be8 133 mPutS); // User provided API
ericebert 0:a39767890be8 134
ericebert 0:a39767890be8 135 // Start adding custom commands now
ericebert 0:a39767890be8 136 cp->Add(&WhoCmd);
ericebert 0:a39767890be8 137 cp->Add(&SendCmd);
ericebert 0:a39767890be8 138 cp->Add(&ReadCmd);
ericebert 0:a39767890be8 139
ericebert 0:a39767890be8 140 //alive signal
ericebert 0:a39767890be8 141 red = 1;
ericebert 0:a39767890be8 142 green=1;
ericebert 0:a39767890be8 143 blue=1;
ericebert 0:a39767890be8 144 flipper.attach(&flip, 0.5);
ericebert 0:a39767890be8 145
ericebert 0:a39767890be8 146 // Should never "wait" in here
ericebert 0:a39767890be8 147 while (cp->Run() == runok) // run this timeslice
ericebert 0:a39767890be8 148 {
ericebert 0:a39767890be8 149
ericebert 0:a39767890be8 150 }
ericebert 0:a39767890be8 151 cp->End(); // cleanup
ericebert 0:a39767890be8 152 return 0;
ericebert 0:a39767890be8 153 }