#include #include #include #include #include #include #include #include "SiUSBDeviceManager.h" #include "SiUSBLib.h" int show_IOCTL(int IOCTL) { printf(" IOCTL=0x%x %d \n",IOCTL,IOCTL); printf(" _IOC_DIR(nr) =%d\n",_IOC_DIR(IOCTL)); printf(" _IOC_TYPE(nr)=%d\n",_IOC_TYPE(IOCTL)); printf(" _IOC_NR(nr) =%d\n",_IOC_NR(IOCTL)); printf(" _IOC_SIZE(nr)=%d\n",_IOC_SIZE(IOCTL)); return 0; } int HexToInt2(AnsiString hString); void Init(); //void CleanUp(); int sf_find_silab_usb(); int field_cmd(char *msg); TUSBDeviceManager *GetUSBDevMan(),*myUSBDevMan; int cmd_socket; //------------------------------------------ int TCP_CONNECT(const char *HOST, int PORT) { int Socket; struct sockaddr_in Addr; Addr.sin_family = AF_INET; Addr.sin_port = htons(PORT); if (inet_aton(HOST, &Addr.sin_addr) == 0x0) { printf("could not get ip address for %s\n", HOST); exit (101); } if ((Socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf ("Can't open datagram socket"); exit (106); } while(connect(Socket, (struct sockaddr *)&Addr, sizeof(Addr)) < 0) { printf ("Can't connect to %s %d wait 10 sec ...\n",HOST,PORT); sleep(10); } printf ("Connected to %s %d \n",HOST,PORT); return Socket; } //--------------------------------------------- int main() { int MY_PORT=32767; SiUSBDevice *hUSB = new SiUSBDevice(NULL); char *Buffer; int Result, Bytes=1024; std::string hex="0xff"; std::string Text; printf("---------- USBDevice test----------- "); printf(" HEX=%s int=%d\n",hex.c_str(),HexToInt2(hex)); //------------------------------------------------------------------- // TCP connection init //------------------------------------------------------------------- // show_IOCTL(USBTEST_REQUEST); // sf_find_silab_usb(); InitUSB(); hUSB->SetDeviceHandle(GetUSBDevice(-1)); if (hUSB) printf("***> test-main:: Board=%d connected to %s \n",hUSB->GetId(),hUSB->GetName()); else printf("***> test-main:: Board=%d is not connected \n",21); //------------------------------------------------------------------- // TCP connection loop //------------------------------------------------------------------- Buffer = (char *)malloc(Bytes); if (Buffer == 0x0) { printf("could not malloc buffer of byte length %d\n",Bytes); exit (102); } cmd_socket=TCP_CONNECT("127.0.0.1", MY_PORT); while (1) { memset(Buffer, 0, Bytes); if ((Result=recv(cmd_socket, (void *)Buffer, Bytes, 0)) < 0) { perror ("Can't recv"); break; } else if (Result == 0) { printf ("EOF\n"); close(cmd_socket); cmd_socket=TCP_CONNECT("127.0.0.1", MY_PORT); } printf(" get string = %s\n",Buffer); for (int i=0;i>>>>>>>>>>>>>>>>>>>> RCM SETUP assign PARAMETERS: <<<<<<<<<<<<<<<<<<<\n"); sprintf(command," %s "," cmd_SETUP.sh"); printf("field_cmd_2():: SETUP: Execute command = %s \n",command); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); } /*------------------------------------------------------------------------------------------*/ if(STREQ(tk[1],"STATUS")) { /* this is STATUS */ printf(" >>>>>>>>>>>>>>>>>>>>> RCM STATUS <<<<<<<<<<<<<<<<<<<\n"); /* int GetNumberOfBoards() void* GetBoardHandle(int BoardId) int GetBoardID(void* Handle) AnsiString GetBoardName(void* Handle) int GetFWVer(void* Handle) */ sprintf(sndstr,"Number_of_Boards=%d \n",GetNumberOfUSBBoards()); puts(sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); SiUSBDevice tmpDev(NULL); for (id=0;id<99;id++) { if (GetUSBDevice(id) != NULL) { tmpDev.SetDeviceHandle(GetUSBDevice(id)); printf("Connected to %s with ID %d \n" ,tmpDev.GetName(),tmpDev.GetId()); sprintf(sndstr,"BoardID=%d \n",tmpDev.GetId() ); puts(sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); sprintf(sndstr,"BoardName=%s \n",tmpDev.GetName()); puts(sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); sprintf(sndstr,"FW_Version=%d \n",tmpDev.GetFWVersion() ); puts(sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); } } //-------------------------------- for (id=0;id<8;id++) { if (GetUSBDeviceIndexed(id) != NULL) { tmpDev.SetDeviceHandle(GetUSBDeviceIndexed(id)); printf("STATUS:: Name=%s \n",tmpDev.GetName()); sprintf(sndstr,"VendorID=0x%x \n",tmpDev.GetVendorId()); printf("%s",sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); // sprintf(sndstr,"ProductID=0x%x \n",tmpDev->>DeviceList[id].Device->ProductId); // printf("%s",sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); sprintf(sndstr,"DeviceClass=0x%x \n",tmpDev.GetClass()); printf("%s",sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); sprintf(sndstr,"END_STATUS\n"); puts(sndstr); ret=send(cmd_socket, (void *)sndstr, strlen(sndstr), 0); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); } } } } /******************************************************************************** void process_msg (char *buf, char **tk, int *ntk) This new version uses strsep instead of strtok that can't deal correctly with empty strings. ********************************************************************************/ void process_msg (char *buf, char **tk, int *ntk ) { int n = 0; for ( n = 0 ; n < MAX_TOKENS ; n++ ) { tk[n] = NULL; tk[n] = strsep(&buf, " \t\n"); if ( tk[n] == NULL ) break; // if (DEBUG>0) // printf("p_m: tk[%d] = %s\n",n, tk[n]); } *ntk = n; } }