com.c (2049B)
1 /* 2 * MySmartUSB MK3 Interface 3 * 4 * @copyright: Copyright (c) 2012, Dominik Schmidt 5 * @author: Dominik Schmidt <das1993@hotmail.com> 6 * @version: 0.0.0 7 * @license: CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/) 8 * 9 */ 10 #include <com.h> 11 #include <log.h> 12 #include <stdlib.h> 13 #include <cmd.h> 14 #include <string.h> 15 #include <stdio.h> 16 #include <unistd.h> 17 char *readString(int fd, unsigned int length){ 18 unsigned int size=10; 19 char *str=malloc(size); 20 21 char termstr[]=RECEIVE_TERM_STR; 22 char *tp=termstr; 23 24 unsigned int i=0; 25 char c; 26 int ret; 27 while((ret=read(fd,&c,sizeof(char)))){ 28 if(ret<=0){ 29 do_log("readString","Read Error",LOG_LEVEL_ERROR,LOG_TYPE_SIGNAL); 30 free(str); 31 return NULL; 32 } 33 if(i+1>=size){ 34 size+=10; 35 str=realloc((void *)str,size); 36 } 37 if(length!=0&&i>=length){ 38 str[i]='\0'; 39 break; 40 } 41 if(c==*tp){ 42 str[i]='\0'; 43 break; 44 } 45 else if(c==0){ 46 continue; 47 } 48 else{ 49 str[i]=c; 50 } 51 i++; 52 } 53 return str; 54 } 55 char readMagicPacket(int fd){ 56 int ret; 57 char c,r; 58 char termstr[]=RECEIVE_TERM_STR; 59 char *tp=termstr; 60 r=0; 61 while((ret=read(fd,&c,sizeof(char)))){ 62 if(ret<=0){ 63 do_log("readString","Read Error",LOG_LEVEL_ERROR,LOG_TYPE_SIGNAL); 64 return 0; 65 } 66 if(c==*tp){ 67 if(*(tp+1)=='\0'){ 68 break; 69 } 70 else{ 71 tp+=1; 72 continue; 73 } 74 } 75 else if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||c=='+'||c=='-'){ 76 r=c; 77 } 78 } 79 return r; 80 } 81 int sendRawString(int fd, const char *str){ 82 return write(fd,str,strlen(str)); 83 } 84 int sendString(int fd, const char *str){ 85 unsigned int length=strlen(str); 86 char *newstr=malloc(length+1); 87 strcpy(newstr,str); 88 newstr[length]=0xA; 89 return write(fd,newstr,length+1); 90 } 91 int sendMagicPacket(int fd, char c){ 92 char magic[]={0xE6,0xB5,0xBA,0xB9,0xB2,0xB3,0xA9,c}; 93 return sendRawString(fd,magic); 94 } 95 char parseMagicPacket(char *str){ 96 unsigned int i=0; 97 for(i=0; i<strlen(str);i++){ 98 if((str[i]>='a'&&str[i]<='z')||str[i]=='+'||str[i]=='-'){ 99 return str[i]; 100 } 101 } 102 return 0; 103 } 104 int checkIfOk(char *str){ 105 return (str[0]=='o'&&str[1]=='k'); 106 }