Changeset 2722:d751d98911be in roaraudio


Ignore:
Timestamp:
09/15/09 01:51:32 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

very basic code for RDS

Location:
roard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • roard/include/rdtcs.h

    r2721 r2722  
    4141#define RDTCS_RDS_BLOCK_D     5 
    4242 
     43#define RDTCS_RDS_GROUP_LEN   ((4*(16+10))/8) 
     44 
    4345struct { 
    4446 int inited; 
     
    5860int rdtcs_send_stream   (int id); 
    5961 
     62int rdtcs_send_stream_rds        (int id, struct roar_stream_server *  ss); 
     63int rdtcs_send_stream_rds_group  (int id, struct roar_stream_server *  ss); 
     64 
     65uint16_t rdtcs_rds_crc_calc      (uint16_t data); 
     66 
    6067#endif 
    6168 
  • roard/rdtcs.c

    r2721 r2722  
    5252 
    5353int rdtcs_send_stream   (int id) { 
    54  return -1; 
     54 struct roar_stream        *   s; 
     55 struct roar_stream_server *  ss; 
     56 
     57 if ( g_streams[id] == NULL ) 
     58  return -1; 
     59 
     60 ROAR_DBG("rdtcs_send_stream(id=%i) = ?", id); 
     61 
     62 s = ROAR_STREAM(ss = g_streams[id]); 
     63 
     64 switch (s->info.codec) { 
     65  case ROAR_CODEC_RDS: 
     66    return rdtcs_send_stream_rds(id, ss); 
     67   break; 
     68  default: 
     69    streams_delete(id); 
     70    return -1; 
     71 } 
     72 
     73 return 0; 
     74} 
     75 
     76int rdtcs_send_stream_rds  (int id, struct roar_stream_server *  ss) { 
     77 struct roar_stream        *   s; 
     78 
     79 s = ROAR_STREAM(ss); 
     80 
     81 
     82 return rdtcs_send_stream_rds_group(id, ss); 
     83} 
     84 
     85int rdtcs_send_stream_rds_group  (int id, struct roar_stream_server *  ss) { 
     86 char out[RDTCS_RDS_GROUP_LEN]; 
     87 char * c; 
     88 uint16_t data[4]; 
     89 uint16_t crc; 
     90 register uint32_t s; 
     91 int i, fill; 
     92 
     93 // TODO: think about byte order! 
     94 
     95 for (i = 0; i < 4; i++) data[i] = 0; 
     96 
     97 data[0] = g_rdtcs.rds.pi; 
     98 
     99 memset(out, 0, sizeof(out)); 
     100 
     101 c    = out; 
     102 s    = 0; 
     103 fill = 0; 
     104 for (i = 0; i < 4; i++) { 
     105  s |= data[i] << fill; 
     106  fill += 16; 
     107 
     108  crc = rdtcs_rds_crc_calc(data[i]); 
     109 
     110  s |= crc << fill; 
     111  fill += 10; 
     112 
     113  while (fill >= 8) { 
     114   *c     = s & 0xFF; 
     115    c++; 
     116    s   >>= 8; 
     117    fill -= 8; 
     118  } 
     119 } 
     120 
     121 return stream_vio_s_write(ss, out, RDTCS_RDS_GROUP_LEN) == RDTCS_RDS_GROUP_LEN ? 0 : -1; 
     122} 
     123 
     124uint16_t rdtcs_rds_crc_calc      (uint16_t data) { 
     125 return 0xAAAA; 
    55126} 
    56127 
Note: See TracChangeset for help on using the changeset viewer.