USB to I2C voa command line interface.
Dependencies: CommandProcessor mbed
main.cpp
- Committer:
- ericebert
- Date:
- 2016-11-22
- Revision:
- 0:a39767890be8
File content as of revision 0:a39767890be8:
#ifdef WIN32 #include "stdio.h" #include "conio.h" #include "string.h" #include "assert.h" #else #include "mbed.h" #endif extern "C" { #include "CommandProcessor.h" } #ifdef WIN32 #else I2C i2c(PTE0, PTE1); const int addr = 0x30; DigitalOut red(LED1); DigitalOut green(LED2); DigitalOut blue(LED3); Ticker flipper; char cmd[2]; #endif void flip() { blue = !blue; } RUNRESULT_T Send(char *p); const CMD_T SendCmd = { "send", "Send bytes to I2C", Send, visible }; RUNRESULT_T Read(char *p); const CMD_T ReadCmd = { "read", "Read bytes from I2C", Read, visible }; RUNRESULT_T Who(char *p); const CMD_T WhoCmd = { "who", "Shows who is logged on, or 'who id' for specifics", Who, visible }; RUNRESULT_T SignOnBanner(char *p); const CMD_T SignOnBannerCmd = { "About", "About this program", SignOnBanner, invisible }; RUNRESULT_T SignOnBanner(char *p) { puts("\r\nThis program was built " __DATE__ " " __TIME__ ".\r\n"); return runok; } RUNRESULT_T Who(char *p) { printf("\r\nwho...\r\n"); if (*p) printf(" Sorry, no help for [%s]\r\n", p); return runok; } RUNRESULT_T Send(char *p) { printf("\r\nSending bytes...\r\n"); if (*p) { red = 0; printf("[%s]\r\n", p); cmd[0] = p[0]; cmd[1] = p[1]; i2c.write(addr, cmd, 2); red = 1; } return runok; } RUNRESULT_T Read(char *p) { printf("\r\nRead...\r\n"); if (*p) { green=0; Send(p); i2c.read(addr, cmd, 2); float tmp = (float((cmd[0]<<8)|cmd[1]) / 256.0); printf("Temp = %.2f\n", tmp); green=1; } return runok; } // Provide the serial interface methods for the command processor #ifdef WIN32 int mReadable() { return _kbhit(); } int mGetCh() { return _getch(); } int mPutCh(int a) { return _putch(a); } int mPutS(const char * s) { return printf("%s\r\n", s); } #else Serial pc(USBTX, USBRX); int mReadable() { return pc.readable(); } int mGetCh() { return pc.getc(); } int mPutCh(int a) { return pc.putc(a); } int mPutS(const char * s) { return pc.printf("%s\r\n", s); } #endif int main(int argc, char* argv[]) { CMDP_T * cp = GetCommandProcessor(); #ifdef WIN32 // nothing special for Win32 #else pc.baud(921600); #endif cp->Init( &SignOnBannerCmd, CFG_ENABLE_TERMINATE | CFG_ENABLE_SYSTEM | CFG_ECHO_ON | CFG_CASE_INSENSITIVE, // options 50, // Command Buffer length 5, // History depth # of commands mReadable, // User provided API (kbhit()) mGetCh, // User provided API mPutCh, // User provided API mPutS); // User provided API // Start adding custom commands now cp->Add(&WhoCmd); cp->Add(&SendCmd); cp->Add(&ReadCmd); //alive signal red = 1; green=1; blue=1; flipper.attach(&flip, 0.5); // Should never "wait" in here while (cp->Run() == runok) // run this timeslice { } cp->End(); // cleanup return 0; }