//------------------------------------------------- void led_clearSequencerLeds1_8() { for(int i=0;i<8;i++) { led_setValue(0,LED_STEP1 + i); } };
//------------------------------------------------- void led_setMode2(uint8_t status) { led_setValue(0,LED_MODE1); led_setValue(0,LED_MODE2); led_setValue(0,LED_MODE3); led_setValue(0,LED_MODE4); led_setBlinkLed(LED_MODE1,0); led_setBlinkLed(LED_MODE2,0); led_setBlinkLed(LED_MODE3,0); led_setBlinkLed(LED_MODE4,0); switch(status) { case 0: led_setValue(1,LED_MODE1); break; case 1: led_setValue(1,LED_MODE2); break; case 2: led_setValue(1,LED_MODE3); break; case 3: led_setValue(1,LED_MODE4); break; case 4: led_setValue(1,LED_MODE4); break; case 5: led_setBlinkLed(LED_MODE2,1); break; case 6: break; case 7: led_setBlinkLed(LED_MODE4,1); break; default: break; } };
//-------------------------------------------- void led_initPerformanceLeds() { led_setValue(1,menu_playedPattern + LED_PART_SELECT1); // a blinking LED shows the viewed pattern if different from the played pattern if(menu_playedPattern != menu_getViewedPattern()) { led_setBlinkLed(LED_PART_SELECT1 + menu_getViewedPattern() ,1); } };
int main(void) { //this code emulates the RSI process... puts("RSI-BLE POC 1..."); led_setValue(GREEN, 0); led_setValue(RED, 0); led_setValue(BLUE, 0); int rsi_fd = rsiOpen(); int reqLength, respLength, count, status; int running = 1; char rsiRequestFrame[RSI_MAX_FRAME_SIZE]; char rsiResponseFrame[RSI_MAX_FRAME_SIZE]; // ======================= SET UP SOCKET ========================== // socket will be ./demo_socket // socket vars struct sockaddr_un address; int socket_fd, connection_fd, writeToLeet; socklen_t address_length; pid_t child; address_length = 0; writeToLeet = 1; int counter = 0; char ctrString[ 4 ]; // ignore the SIGCHLD signal to prevent zombie processes signal( SIGCHLD, SIG_IGN ); printf( "Starting socket...\n" ); socket_fd = socket(PF_UNIX, SOCK_STREAM, 0); if(socket_fd < 0) { printf( "socket() failed\n" ); return 1; } unlink("./demo_socket"); /* start with a clean address structure */ memset(&address, 0, sizeof(struct sockaddr_un)); address.sun_family = AF_UNIX; snprintf(address.sun_path, UNIX_PATH_MAX, "./demo_socket"); if(bind(socket_fd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)) != 0) { printf( "bind() failed\n" ); return 1; } if(listen(socket_fd, 5) != 0) { printf( "listen() failed\n" ); return 1; } // ======================= MAIN LOOP ========================== while (running) { //emulate RSI process //---- listen for RS485 command from ACP (master) memset(rsiRequestFrame, 0, sizeof(rsiRequestFrame)); memset(rsiResponseFrame, 0, sizeof(rsiResponseFrame)); reqLength = rsiRead(rsi_fd, rsiRequestFrame); //process the command, generate immediate response status = rsiHandler(rsiRequestFrame, rsiResponseFrame, &reqLength); //send immediate response back to ACP if (status == STATUS_SUCCESS) { //printf("need to send %d bytes back...\n", reqLength); rsiWrite(rsi_fd, rsiResponseFrame, reqLength); // =================== SOCKET HANDLING ======================== // send/receive socket messages // NOTE: accept() is blocking in this usage connection_fd = accept( socket_fd, (struct sockaddr *) &address, &address_length ); // accept() returns a nonnegative integer that is a descriptor for the accepted socket if( connection_fd != -1) { child = fork(); if(child == 0) { // always send the 0x01 command for now return connection_handler(connection_fd, 1, writeToLeet); } else { close(connection_fd); } // if child } else { printf( "Error accepting message.\n" ); perror( "accept" ); } // if connection_fd /* if( writeToLeet == 1) { writeToLeet = 0; } else { writeToLeet = 1; } // if writeToLeet */ } // if status == STATUS_SUCCESS //are we done? set the flag... //running = 0; } //while running printf( "Closing socket...\n" ); close(socket_fd); unlink("./demo_socket"); printf("done...\n"); //----- close the UART, release the GPIOs, etc ----- rsiClose(rsi_fd); return 0; }