void SYS_DEBUG_Print(const char *format, ...) { size_t len = 0; size_t padding = 0; va_list args; va_start( args, format ); len = vsnprintf(tmpBuf, DEBUG_PRINT_BUFFER_SIZE, format, args); va_end( args ); if (len > 0 && len < DEBUG_PRINT_BUFFER_SIZE) { tmpBuf[len] = '\0'; if (len + sysDebugInstance.prtBufPtr >= DEBUG_PRINT_BUFFER_SIZE) { sysDebugInstance.prtBufPtr = 0; } strcpy(&printBuffer[sysDebugInstance.prtBufPtr], tmpBuf); SYS_CONSOLE_Write(sysDebugInstance.debugConsole, STDOUT_FILENO, &printBuffer[sysDebugInstance.prtBufPtr], len); padding = len % 4; if (padding > 0 ) { padding = 4 - padding; } sysDebugInstance.prtBufPtr += len + padding; } }
// ignore the console handle for now, we support a single system console static void SendCommandMessage(const void* cmdIoParam, const char* message) { int consoleIndex = 0; for (consoleIndex = 0; consoleIndex < SYS_CONSOLE_DEVICE_MAX_INSTANCES; ++consoleIndex) { SYS_CONSOLE_Write(consoleIndex, STDOUT_FILENO, message, strlen(message)); } }
static void SendCommandCharacter(const void* cmdIoParam, char c) { int consoleIndex = 0; for (consoleIndex = 0; consoleIndex < SYS_CONSOLE_DEVICE_MAX_INSTANCES; ++consoleIndex) { if (SYS_CONSOLE_Status((SYS_MODULE_OBJ)consoleIndex) != SYS_STATUS_READY) continue; SYS_CONSOLE_Write(consoleIndex, STDOUT_FILENO, (const char*)&c, 1); } }
void SYS_DEBUG_Message(const char *message) { SYS_CONSOLE_Write(sysDebugInstance.debugConsole, STDOUT_FILENO, message, strlen(message)); }
void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { SYS_CONSOLE_Flush( SYS_CONSOLE_INDEX_0 ); //ssize_t nr; //char myBuffer[] = "\r\npic-CAN-mon"; //nr = SYS_CONSOLE_Write( SYS_CONSOLE_INDEX_0, STDOUT_FILENO, myBuffer, strlen(myBuffer) ); //if (nr != strlen(myBuffer)) //{ // // Handle error //} SYS_PRINT("\r\npicCANmon"); appData.state = APP_STATE_IDLE; break; } case APP_STATE_IDLE: { PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_G, PORTS_BIT_POS_14); /* CAN_CHANNEL_EVENT channelEvent; channelEvent = PLIB_CAN_ChannelEventGet(CAN_ID_1, CAN_CHANNEL1); if((channelEvent & (CAN_RX_CHANNEL_NOT_EMPTY | CAN_RX_CHANNEL_FULL)) != 0) { SYS_MESSAGE("\r\nCAN RX\r\n"); PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_G, PORTS_BIT_POS_12); } */ CAN232_Tasks(); ssize_t nr = 0; do { nr = SYS_CONSOLE_ReadX( SYS_CONSOLE_INDEX_0, STDIN_FILENO, &cmdBuffer[cmdTail], 0 ); if (nr > 0) { cmdTail += nr; if (cmdTail >= sizeof(cmdBuffer)) cmdTail = 0; //cmdBuffer[cmdTail] = 0; appData.state = APP_STATE_INPUT; PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_G, PORTS_BIT_POS_15); } } while (nr > 0); break; } case APP_STATE_INPUT: { appData.state = APP_STATE_IDLE; if (cmdTail > 0) { PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_G, PORTS_BIT_POS_13); char ch = cmdBuffer[cmdTail-1]; if (ch < ' ') { if (ch == '\r' || ch == '\n') { cmdBuffer[cmdTail] = 0; appData.state = APP_STATE_COMMAND; } cmdTail = 0; } else { // echo back if (echoInput) SYS_CONSOLE_Write( SYS_CONSOLE_INDEX_0, STDOUT_FILENO, &cmdBuffer[cmdTail-1], 1); } } break; } case APP_STATE_COMMAND: { //SYS_PRINT("\r\nCMD:%s", cmdBuffer); CAN232_Command(cmdBuffer); cmdBuffer[0] = 0; // Reset command buffer cmdTail = 0; appData.state = APP_STATE_IDLE; break; } /* TODO: implement your application state machine.*/ /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } }