Changeset 5975:d856dad45320 in roaraudio for libroarlight/roardmx.c


Ignore:
Timestamp:
01/27/14 16:22:27 (10 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added support for rangeset to libroarlight.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroarlight/roardmx.c

    r5972 r5975  
    427427// Not yet supported. 
    428428// * RANGESET: 
    429 // Not yet supported. 
     429int roar_roardmx_message_new_rangeset(struct roar_roardmx_message * mes) { 
     430 BCHK(mes); 
     431 
     432 if ( roar_roardmx_message_new(mes) == -1 ) 
     433  return -1; 
     434 
     435 mes->type = ROAR_ROARDMX_TYPE_SSET; 
     436 
     437 return 0; 
     438} 
     439 
     440int roar_roardmx_message_add_rangeval(struct roar_roardmx_message * mes, uint16_t   start, uint16_t   end, unsigned char   val) { 
     441 register uint8_t * p; 
     442 
     443 BCHK(mes); 
     444 
     445 if ( mes->type != ROAR_ROARDMX_TYPE_RANGESET ) { 
     446  roar_err_set(ROAR_ERROR_TYPEMM); 
     447  return -1; 
     448 } 
     449 
     450 if ( (mes->length + 5) > ROAR_ROARDMX_DATA_LENGTH ) { // message would be to long 
     451  roar_err_set(ROAR_ERROR_NOSPC); 
     452  return -1; 
     453 } 
     454 
     455 p = mes->data + 3 + mes->length; 
     456 
     457 p[0] = (start & 0xFF00) >> 8; 
     458 p[1] = (start & 0x00FF); 
     459 p[2] = (end   & 0xFF00) >> 8; 
     460 p[3] = (end   & 0x00FF); 
     461 p[4] = val; 
     462 
     463 mes->length += 5; 
     464 
     465 return 0; 
     466} 
     467 
     468int roar_roardmx_message_get_rangeval(struct roar_roardmx_message * mes, uint16_t * start, uint16_t * end, unsigned char * val, int index) { 
     469 register uint8_t * p; 
     470 register uint16_t v; 
     471 
     472 BCHK(mes); 
     473 
     474 if ( index < 0 ) { 
     475  roar_err_set(ROAR_ERROR_INVAL); 
     476  return -1; 
     477 } 
     478 
     479 if ( mes->version != ROAR_ROARDMX_VERSION ) { 
     480  roar_err_set(ROAR_ERROR_NSVERSION); 
     481  return -1; 
     482 } 
     483 
     484 if ( mes->type != ROAR_ROARDMX_TYPE_RANGESET ) { 
     485  roar_err_set(ROAR_ERROR_TYPEMM); 
     486  return -1; 
     487 } 
     488 
     489 if ( (((size_t)index + 1) * 5) > (mes->length - 3) ) { 
     490  roar_err_set(ROAR_ERROR_NOENT); 
     491  return -1; 
     492 } 
     493 
     494 p = mes->data + 3 + index * 5;  
     495 
     496 v   = *(p++); 
     497 v <<= 8; 
     498 v  += *(p++); 
     499 *start = v; 
     500 
     501 v   = *(p++); 
     502 v <<= 8; 
     503 v  += *(p++); 
     504 *end = v; 
     505 
     506 *val = *p; 
     507 
     508 return 0; 
     509} 
     510 
    430511// * EVENT: 
    431512int roar_roardmx_message_new_event(struct roar_roardmx_message * mes) { 
Note: See TracChangeset for help on using the changeset viewer.