Man, this stuff is kinda hard when the standards are ill-specified
This commit is contained in:
		
							parent
							
								
									fac432cdb4
								
							
						
					
					
						commit
						17dd963f97
					
				
					 1 changed files with 16 additions and 6 deletions
				
			
		
							
								
								
									
										22
									
								
								src/kiss.c
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								src/kiss.c
									
										
									
									
									
								
							| 
						 | 
					@ -6,13 +6,13 @@ enum kiss_flags {
 | 
				
			||||||
    KISS_ESCAPE = 0x02
 | 
					    KISS_ESCAPE = 0x02
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int patty_kiss_read(int fd, void *buf, size_t *len, int *channel) {
 | 
					ssize_t patty_kiss_read(int fd, void *buf, size_t len, int *port) {
 | 
				
			||||||
    int flags = KISS_NONE;
 | 
					    int flags = KISS_NONE;
 | 
				
			||||||
    size_t i, b = 0;
 | 
					    size_t i, b = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    *channel = 0;
 | 
					    *port = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i=0; i<PATTY_KISS_BUFLEN; i++) {
 | 
					    for (i=0; i<len; i++) {
 | 
				
			||||||
        unsigned char c = ((char *)buf)[i];
 | 
					        unsigned char c = ((char *)buf)[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (flags & KISS_FRAME == 0) {
 | 
					        if (flags & KISS_FRAME == 0) {
 | 
				
			||||||
| 
						 | 
					@ -48,13 +48,23 @@ int patty_kiss_read(int fd, void *buf, size_t *len, int *channel) {
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * Not all KISS TNCs will emit a type byte at the start of a frame
 | 
				
			||||||
 | 
					             * to the host; if the low nybble has a value of zero, then presume
 | 
				
			||||||
 | 
					             * the high nybble to be the radio port number from which the
 | 
				
			||||||
 | 
					             * packet originated.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            if (c & 0x0f == 0) {
 | 
				
			||||||
 | 
					                *port = (c & 0xf0) >> 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ((char *)buf)[b++] = c;
 | 
					            ((char *)buf)[b++] = c;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    *len = b + 1;
 | 
					    return b + 1;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
error_io:
 | 
					error_io:
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue