MySmartUSB-MK3-Interface

git clone git://xatko.vsos.ethz.ch/MySmartUSB-MK3-Interface.git
Log | Files | Refs

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 }