Changeset 5924:1488a53c9a47 in roaraudio
- Timestamp:
- 09/11/13 12:47:46 (11 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroarlight/roardmx.h
r5921 r5924 111 111 112 112 // Data/high level: 113 // * *: 114 int roar_roardmx_message_numchannels(struct roar_roardmx_message * mes); 115 int roar_roardmx_message_add_chanval(struct roar_roardmx_message * mes, uint16_t channel, unsigned char val); 116 int roar_roardmx_message_get_chanval(struct roar_roardmx_message * mes, uint16_t * channel, unsigned char * val, int index); 117 113 118 // * SSET: 114 119 int roar_roardmx_message_new_sset (struct roar_roardmx_message * mes); 115 int roar_roardmx_message_add_chanval(struct roar_roardmx_message * mes, uint16_t channel, unsigned char val);116 int roar_roardmx_message_get_chanval(struct roar_roardmx_message * mes, uint16_t * channel, unsigned char * val, int index);117 int roar_roardmx_message_numchannels(struct roar_roardmx_message * mes);118 120 121 // * IPO1: 122 // Not yet supported. 123 // * IPO4: 124 // Not yet supported. 125 // * INC8S: 126 // Not yet supported. 127 // * RANGESET: 128 // Not yet supported. 129 // * EVENT: 130 // Not yet supported. 131 // * CONTROL: 132 // Not yet supported. 119 133 120 134 #endif -
libroarlight/roardmx.c
r5823 r5924 27 27 28 28 // base(ic) check 29 #define BCHK(x) if ( (x) == NULL ) return -129 #define BCHK(x) if ( (x) == NULL ) { roar_err_set(ROAR_ERROR_FAULT); return -1; } 30 30 31 31 int roar_roardmx_message_new (struct roar_roardmx_message * mes) { … … 44 44 //int roar_roardmx_message_get_data(struct roar_roardmx_message * mes, unsigned char ** data); 45 45 46 // m dium level:46 // medium level: 47 47 int roar_roardmx_message_set_type(struct roar_roardmx_message * mes, unsigned char type) { 48 48 BCHK(mes); 49 49 50 if ( (type | ROAR_ROARDMX_MASK_TYPE) - ROAR_ROARDMX_MASK_TYPE ) 51 return -1; 50 // check if type contains non-type bits. 51 if ( (type | ROAR_ROARDMX_MASK_TYPE) - ROAR_ROARDMX_MASK_TYPE ) { 52 roar_err_set(ROAR_ERROR_INVAL); 53 return -1; 54 } 52 55 53 56 mes->type = type; … … 86 89 BCHK(vio); 87 90 88 if ( mes->length > ROAR_ROARDMX_DATA_LENGTH ) // this is very fatal! 89 return -1; 91 if ( mes->length > ROAR_ROARDMX_DATA_LENGTH ) { // this is very fatal! 92 roar_panic(ROAR_FATAL_ERROR_MEMORY_CORRUPTION, NULL); 93 roar_err_set(ROAR_ERROR_FAULT); 94 return -1; 95 } 90 96 91 97 mes->data[0] = mes->version; … … 110 116 mes->version = mes->data[0]; 111 117 112 if ( mes->version != 0 ) 113 return -1; 118 if ( mes->version != ROAR_ROARDMX_VERSION ) { 119 roar_err_set(ROAR_ERROR_NSVERSION); 120 return -1; 121 } 114 122 115 123 mes->flags = mes->data[1] & ROAR_ROARDMX_MASK_FLAGS; … … 125 133 126 134 // Data/high level: 127 // * SSET: 128 int roar_roardmx_message_new_sset (struct roar_roardmx_message * mes) { 129 if ( roar_roardmx_message_new(mes) == -1 ) 130 return -1; 131 132 mes->type = ROAR_ROARDMX_TYPE_SSET; 133 134 return 0; 135 } 136 135 // * *: 137 136 int roar_roardmx_message_add_chanval(struct roar_roardmx_message * mes, uint16_t channel, unsigned char val) { 138 137 register uint16_t * chan; … … 140 139 BCHK(mes); 141 140 142 if ( (mes->length + 3) > ROAR_ROARDMX_DATA_LENGTH ) // message would be to long 143 return -1; 141 switch (mes->type) { 142 case ROAR_ROARDMX_TYPE_SSET: 143 case ROAR_ROARDMX_TYPE_INC8S: 144 break; 145 default: 146 roar_err_set(ROAR_ERROR_TYPEMM); 147 return -1; 148 break; 149 } 150 151 if ( (mes->length + 3) > ROAR_ROARDMX_DATA_LENGTH ) { // message would be to long 152 roar_err_set(ROAR_ERROR_NOSPC); 153 return -1; 154 } 144 155 145 156 chan = (uint16_t *) &(mes->data[mes->length + 3]); … … 159 170 BCHK(mes); 160 171 161 if ( index < 0 ) 162 return -1; 163 164 if ( mes->version != 0 ) 165 return -1; 172 if ( index < 0 ) { 173 roar_err_set(ROAR_ERROR_INVAL); 174 return -1; 175 } 176 177 if ( mes->version != ROAR_ROARDMX_VERSION ) { 178 roar_err_set(ROAR_ERROR_NSVERSION); 179 return -1; 180 } 166 181 167 182 switch (mes->type) { … … 178 193 } 179 194 195 roar_err_set(ROAR_ERROR_NSTYPE); 180 196 return -1; 181 197 } … … 184 200 BCHK(mes); 185 201 186 if ( mes->version != 0 ) 187 return -1; 202 if ( mes->version != ROAR_ROARDMX_VERSION ) { 203 roar_err_set(ROAR_ERROR_NSVERSION); 204 return -1; 205 } 188 206 189 207 switch (mes->type) { … … 198 216 return mes->length / 12; 199 217 break; 200 } 201 218 case ROAR_ROARDMX_TYPE_RANGESET: 219 return mes->length / 5; 220 break; 221 case ROAR_ROARDMX_TYPE_EVENT: 222 case ROAR_ROARDMX_TYPE_CONTROL: 223 return 0; 224 break; 225 } 226 227 roar_err_set(ROAR_ERROR_NSTYPE); 202 228 return -1; 203 229 } 204 230 231 // * SSET: 232 int roar_roardmx_message_new_sset (struct roar_roardmx_message * mes) { 233 if ( roar_roardmx_message_new(mes) == -1 ) 234 return -1; 235 236 mes->type = ROAR_ROARDMX_TYPE_SSET; 237 238 return 0; 239 } 240 205 241 //ll
Note: See TracChangeset
for help on using the changeset viewer.