From e08603e57d81927cd03b0fbffab20f97e1f1f08e Mon Sep 17 00:00:00 2001 From: Simon Newton Date: Tue, 9 Jun 2015 09:56:13 -0700 Subject: [PATCH] Handle characters in the parser. This means I can do things like 'a', 'b', 'c' Also fix my misunderstanding of js regexs. This didn't cause a bug because we match the entire line anyway. --- app.yaml | 4 ++-- js_src/rdm.js | 16 +++++++++++----- static/js/rdm.js | 2 +- static/js/rdm.js.map | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app.yaml b/app.yaml index 81179a72..726cc0c3 100644 --- a/app.yaml +++ b/app.yaml @@ -1,5 +1,5 @@ -application: "olp-rdm-staging" -#application: "rdmprotocol-hrd" +#application: "olp-rdm-staging" +application: "rdmprotocol-hrd" version: 1 runtime: python27 api_version: 1 diff --git a/js_src/rdm.js b/js_src/rdm.js index 34e551d0..dfe46e2c 100644 --- a/js_src/rdm.js +++ b/js_src/rdm.js @@ -340,20 +340,26 @@ angular.module('rdmApp', []) var token = tokens[j]; var hex_suffix_match = token.match(/^([\da-fA-F]{1,2})h$/); if (hex_suffix_match) { - binary_data.push(parseInt(hex_suffix_match[0], 16)); + binary_data.push(parseInt(hex_suffix_match[1], 16)); continue; } var hex_prefix_match = token.match(/^0x([\da-fA-F]{1,2})$/); if (hex_prefix_match) { - binary_data.push(parseInt(hex_prefix_match[0], 16)); + binary_data.push(parseInt(hex_prefix_match[1], 16)); + continue; + } + + var char_match = token.match(/^'(.)'$/); + if (char_match) { + binary_data.push(char_match[1].charCodeAt()); continue; } if (as_hex) { var hex_match = token.match(/^([\da-fA-F]{1,2})$/); if (hex_match) { - binary_data.push(parseInt(hex_match[0], 16)); + binary_data.push(parseInt(hex_match[1], 16)); continue; } else { error = 'Invalid byte: ' + token; @@ -362,8 +368,8 @@ angular.module('rdmApp', []) } else { var decimal_match = token.match(/^(\d{1,3})$/); if (decimal_match) { - if (decimal_match[0] <= 255) { - binary_data.push(parseInt(decimal_match[0], 10)); + if (decimal_match[1] <= 255) { + binary_data.push(parseInt(decimal_match[1], 10)); continue; } else { error = 'Invalid byte: ' + token; diff --git a/static/js/rdm.js b/static/js/rdm.js index af34b3de..4438ff05 100644 --- a/static/js/rdm.js +++ b/static/js/rdm.js @@ -1,2 +1,2 @@ -angular.module("rdmApp",[]).config(["$interpolateProvider",function(a){"use strict";a.startSymbol("{[{"),a.endSymbol("}]}")}]).constant("RDM",{COMMAND_CLASS:{DISCOVERY_COMMAND:16,DISCOVERY_COMMAND_RESPONSE:17,GET_COMMAND:32,GET_COMMAND_RESPONSE:33,SET_COMMAND:48,SET_COMMAND_RESPONSE:49},EUID_SIZE:16,NACK_REASON:{NR_UNKNOWN_PID:0,NR_FORMAT_ERROR:1,NR_HARDWARE_FAULT:2,NR_PROXY_REJECT:3,NR_WRITE_PROTECT:4,NR_UNSUPPORTED_COMMAND_CLASS:5,NR_DATA_OUT_OF_RANGE:6,NR_BUFFER_FULL:7,NR_PACKET_SIZE_UNSUPPORTED:8,NR_SUB_DEVICE_OUT_OF_RANGE:9,NR_PROXY_BUFFER_FULL:16,NR_ACTION_NOT_SUPPORTED:17},PIDS:{DISC_UNIQUE_BRANCH:1,DISC_MUTE:2,DISC_UN_MUTE:3,PROXIED_DEVICES:16,PROXIED_DEVICE_COUNT:17,COMMS_STATUS:21,QUEUED_MESSAGE:32,STATUS_MESSAGES:48,STATUS_ID_DESCRIPTION:49,CLEAR_STATUS_ID:50,SUB_DEVICE_STATUS_REPORT_THRESHOLD:51,SUPPORTED_PARAMETERS:80,PARAMETER_DESCRIPTION:81,DEVICE_INFO:96,PRODUCT_DETAIL_ID_LIST:112,DEVICE_MODEL_DESCRIPTION:128,MANUFACTURER_LABEL:129,DEVICE_LABEL:130,FACTORY_DEFAULTS:144,LANGUAGE_CAPABILITIES:160,LANGUAGE:176,SOFTWARE_VERSION_LABEL:192,BOOT_SOFTWARE_VERSION_ID:193,BOOT_SOFTWARE_VERSION_LABEL:194,DMX_PERSONALITY:224,DMX_PERSONALITY_DESCRIPTION:225,DMX_START_ADDRESS:240,SLOT_INFO:288,SLOT_DESCRIPTION:289,DEFAULT_SLOT_VALUE:290,SENSOR_DEFINITION:512,SENSOR_VALUE:513,RECORD_SENSORS:514,DEVICE_HOURS:1024,LAMP_HOURS:1025,LAMP_STRIKES:1026,LAMP_STATE:1027,LAMP_ON_MODE:1028,DEVICE_POWER_CYCLES:1029,DISPLAY_INVERT:1280,DISPLAY_LEVEL:1281,PAN_INVERT:1536,TILT_INVERT:1537,PAN_TILT_SWAP:1538,REAL_TIME_CLOCK:1539,IDENTIFY_DEVICE:4096,RESET_DEVICE:4097,POWER_STATE:4112,PERFORM_SELFTEST:4128,SELF_TEST_DESCRIPTION:4129,CAPTURE_PRESET:4144,PRESET_PLAYBACK:4145,DMX_BLOCK_ADDRESS:320,DMX_FAIL_MODE:321,DMX_STARTUP_MODE:322,DIMMER_INFO:832,MINIMUM_LEVEL:833,MAXIMUM_LEVEL:834,CURVE:835,CURVE_DESCRIPTION:836,OUTPUT_RESPONSE_TIME:837,OUTPUT_RESPONSE_TIME_DESCRIPTION:838,MODULATION_FREQUENCY:839,MODULATION_FREQUENCY_DESCRIPTION:840,BURN_IN:1088,LOCK_PIN:1600,LOCK_STATE:1601,LOCK_STATE_DESCRIPTION:1602,IDENTIFY_MODE:4160,PRESET_INFO:4161,PRESET_STATUS:4162,PRESET_MERGEMODE:4163,POWER_ON_SELF_TEST:4164,LIST_INTERFACES:1792,INTERFACE_LABEL:1793,INTERFACE_HARDWARE_ADDRESS_TYPE1:1794,IPV4_DHCP_MODE:1795,IPV4_ZEROCONF_MODE:1796,IPV4_CURRENT_ADDRESS:1797,IPV4_STATIC_ADDRESS:1798,INTERFACE_RENEW_DHCP:1799,INTERFACE_RELEASE_DHCP:1800,INTERFACE_APPLY_CONFIGURATION:1801,IPV4_DEFAULT_ROUTE:1802,DNS_NAME_SERVER:1803,DNS_HOSTNAME:1804,DNS_DOMAIN_NAME:1805},RESPONSE_TYPE:{ACK:0,ACK_TIMER:1,NACK:2,ACK_OVERFLOW:3},START_CODE:204,SUB_DEVICE:{ROOT_DEVICE:0,ALL_SUB_DEVICES:65535},UID_SIZE:6}).constant("OUTPUT_FORMAT",{C_ARRAY:{label:"C Array",value:0},C_STRING:{label:"C String",value:1},RAW_HEX:{label:"Raw Hex",value:2}}).service("checksumService",function(){"use strict";var a=function(a){var b=a.reduce(function(a,b,c,d){return a+b});return b};this.checksumAsArray=function(b){var c=a(b);return[c>>8,255&c]},this.checksumAsValue=a}).service("rdmHelperService",["RDM",function(a){"use strict";this.isRequest=function(b){return b===a.COMMAND_CLASS.DISCOVERY_COMMAND||b===a.COMMAND_CLASS.GET_COMMAND||b===a.COMMAND_CLASS.SET_COMMAND},this.isResponse=function(b){return b===a.COMMAND_CLASS.DISCOVERY_COMMAND_RESPONSE||b===a.COMMAND_CLASS.GET_COMMAND_RESPONSE||b===a.COMMAND_CLASS.SET_COMMAND_RESPONSE},this.isGetSet=function(b){return b===a.COMMAND_CLASS.GET_COMMAND||b===a.COMMAND_CLASS.GET_COMMAND_RESPONSE||b===a.COMMAND_CLASS.SET_COMMAND||b===a.COMMAND_CLASS.SET_COMMAND_RESPONSE}}]).service("formatService",["RDM",function(a){"use strict";var b=function(a){return new Array(a+1).join(" ")},c=function(a,b,c,d){var e=a.toString(16),f=b-e.length+1;return(c?c:"")+new Array(+(f>0&&f)).join("0")+e+(d?d:"")};this.toHex=c,this.reverseLookup=function(a,b){var c="";return angular.forEach(a,function(a,d){a===b&&(c=d)}),c},this.arrayToUID=function(b){return b.length!==a.UID_SIZE?"":c(b[0],2)+c(b[1],2)+":"+c(b[2],2)+c(b[3],2)+c(b[4],2)+c(b[5],2)},this.arrayToHex=function(a,b,d){return a.map(function(a){return c(a,2,b,d)})},this.dataAsArray=function(a,d){for(var e=2,f="const uint8_t packet[] = {",g=[f],h=b(2),i=0;i=d?(h+=",",g.push(h),h=b(e)):h.length!==e&&(h+=", "),h+=j}return h&&g.push(h),g.push("};"),g.join("\n")},this.dataAsString=function(a,d){for(var e=[],f='const char packet[] = "',g=f,h=0;h=d&&(g+='"',e.push(g),g=b(f.length-1)+'"'),g+=i}return g&&(g+='";',e.push(g)),e.join("\n")},this.dataAsRawHex=function(a,b){for(var d=[],e="",f=0;f=b&&(d.push(e),e=""),e+=g,f+1!==a.length&&(e+=" ")}return e&&d.push(e),d.join("\n")}}]).service("parserService",["$log","RDM",function(a,b){"use strict";var c=function(a){for(var b=0;bb.value?1:-1}),a.OUTPUT_FORMAT={},angular.forEach(g,function(a,b){this[a.label]=a.value},a.OUTPUT_FORMAT),a.output="",a.error="";var i=function(b,c){var e=d.uidToBytes(b);return e[0]?(a.error="Invalid "+c+" UID:"+e[0],""):e[1]},j=function(){a.properties.show_param_data=f.isGetSet(a.packet.command_class)&&(a.packet.response_type===h.RESPONSE_TYPE.ACK||a.packet.response_type===h.RESPONSE_TYPE.ACK_OVERFLOW)},k=function(b,c,d){a.packet.command_class=b,a.properties.is_request=f.isRequest(b),j();var g=["DISC_UNIQUE_BRANCH","DISC_MUTE","DISC_UN_MUTE"],i=[];b===h.COMMAND_CLASS.DISCOVERY_COMMAND?i=g:b===h.COMMAND_CLASS.DISCOVERY_COMMAND_RESPONSE?i=["DISC_MUTE","DISC_UN_MUTE"]:angular.forEach(h.PIDS,function(a,b){-1===g.indexOf(b)&&this.push(b)},i);var k=!1,l=[];angular.forEach(i,function(b,c){k|=a.packet.param_id===h.PIDS[b];var d=b+" ("+e.toHex(h.PIDS[b],4,"0x")+")";this.push({label:d,value:h.PIDS[b]})},l),l.sort(function(a,b){return a.label===b.label?0:a.label>b.label?1:-1}),k||(a.packet.param_id=l[0].value),a.properties.pids=l},l=function(b,c,d){a.packet.response_type=b,j()};a.$watch("packet.response_type",l),a.$watch("packet.command_class",k),a.buildPacket=function(){a.error="";var b=i(a.packet.dest_uid,"destination");if(b){var j=i(a.packet.src_uid,"source");if(j){var k=[];if(a.packet.command_class===h.COMMAND_CLASS.DISCOVERY_COMMAND&&a.packet.param_id===h.PIDS.DISC_UNIQUE_BRANCH){var l=i(a.packet.lower_uid,"lower");if(!l)return;var m=i(a.packet.upper_uid,"upper");if(!m)return;k=l.concat(m)}else if(f.isGetSet(a.packet.command_class))if(a.packet.response_type===h.RESPONSE_TYPE.ACK||a.packet.response_type===h.RESPONSE_TYPE.ACK_OVERFLOW){var n=d.textToBytes(a.packet.param_data);if(n[0])return void(a.error="Invalid parameter data: "+n[0]);k=n[1]}else a.packet.response_type===h.RESPONSE_TYPE.NACK?k=[a.packet.nack_reason>>8,255&a.packet.nack_reason]:a.packet.response_type===h.RESPONSE_TYPE.ACK_TIMER&&(k=[a.packet.ack_timer>>8,255&a.packet.ack_timer]);var o=[a.packet.start_code,a.packet.sub_start_code,k.length+24];o=o.concat(b),o=o.concat(j),o.push(a.packet.transaction_number),f.isRequest(a.packet.command_class)?(o.push(a.packet.port_id),o.push(0)):(o.push(a.packet.response_type),o.push(a.packet.message_count)),o.push(a.packet.sub_device>>8),o.push(255&a.packet.sub_device),o.push(a.packet.command_class),o.push(a.packet.param_id>>8),o.push(255&a.packet.param_id),o.push(k.length),o=o.concat(k),o=o.concat(c.checksumAsArray(o)),a.settings.output_format===g.C_ARRAY.value?a.output=e.dataAsArray(o,a.settings.wrap):a.settings.output_format===g.C_STRING.value?a.output=e.dataAsString(o,a.settings.wrap):a.settings.output_format===g.RAW_HEX.value&&(a.output=e.dataAsRawHex(o,a.settings.wrap))}}}}]).controller("RDMPacketParser",["$scope","$log","checksumService","parserService","formatService","rdmHelperService","RDM",function(a,b,c,d,e,f,g){"use strict";a.packet_data="",a.show_output=!1;var h=function(){a.packet={start_code:"",sub_start_code:"",message_length:"",dest_uid:"",src_uid:"",transaction_number:"",port_id:"",message_count:"",sub_device:"",command_class:"",param_id:"",response_type:"",nack_reason:"",ack_timer:"",param_data_length:"",param_data:"",checksum:"",actual_size:"",calculated_checksum:"",nack_reason_error:"",ack_timer_error:""}};h(),a.reset=function(){h(),a.error="",a.packet_data="",a.show_output=!1},a.parsePacket=function(){h(),a.error="";var b=d.textToBytes(a.packet_data);if(b[0])return void(a.error="Invalid packet data: "+b[0]);var i=b[1],j=i.slice();if(a.packet.actual_size=i.length,!(i.length>=1))return void(a.error="Insufficient data for start code");if(a.packet.start_code=e.toHex(i.shift(),2,"0x"),a.show_output=!0,!(i.length>=1))return void(a.error="Insufficient data for sub start code");if(a.packet.sub_start_code=e.toHex(i.shift(),2,"0x"),!(i.length>=1))return void(a.error="Insufficient data for message length");if(a.packet.message_length=i.shift(),!(i.length>=g.UID_SIZE))return void(a.error="Insufficient data for destination UID");var k=i.slice(0,g.UID_SIZE);if(i=i.slice(g.UID_SIZE),a.packet.dest_uid=e.arrayToUID(k),!(i.length>=g.UID_SIZE))return void(a.error="Insufficient data for source UID");var l=i.slice(0,g.UID_SIZE);if(i=i.slice(g.UID_SIZE),a.packet.src_uid=e.arrayToUID(l),!(i.length>=1))return void(a.error="Insufficient data for transaction number");a.packet.transaction_number=i.shift();var m;if(!(i.length>=1))return void(a.error="Insufficient data for port ID / response type");if(m=i.shift(),!(i.length>=1))return void(a.error="Insufficient data for message count");a.packet.message_count=i.shift();var n,o;if(!(i.length>=2))return void(a.error="Insufficient data for sub device");var p=(i.shift()<<8)+i.shift();n=e.reverseLookup(g.SUB_DEVICE,p),n?a.packet.sub_device=n+" ("+e.toHex(p,4,"0x")+")":a.packet.sub_device=p;var q;if(!(i.length>=1))return void(a.error="Insufficient data for command class");if(q=i.shift(),n=e.reverseLookup(g.COMMAND_CLASS,q),o=e.toHex(q,2,"0x"),n?a.packet.command_class=n+" ("+o+")":a.packet.command_class=o,f.isResponse(q)?(n=e.reverseLookup(g.RESPONSE_TYPE,m),o=e.toHex(m,4,"0x"),n?a.packet.response_type=n+" ("+o+")":a.packet.response_type=o):a.packet.port_id=m,!(i.length>=2))return void(a.error="Insufficient data for parameter ID");var r=(i.shift()<<8)+i.shift();n=e.reverseLookup(g.PIDS,r),o=e.toHex(r,4,"0x"),n?a.packet.param_id=n+" ("+o+")":a.packet.param_id=o;var s;if(!(i.length>=1))return void(a.error="Insufficient data for parameter data length");if(s=i.shift(),a.packet.param_data_length=s,!(i.length>=s))return void(a.error="Insufficient data for parameter data");var t=i.slice(0,s);if(i=i.slice(s),f.isResponse(q)&&m===g.RESPONSE_TYPE.NACK)if(2===s){var u=(t[0]<<8)+t[1];n=e.reverseLookup(g.NACK_REASON,u),o=e.toHex(u,4,"0x"),n?a.packet.nack_reason=n+" ("+o+")":a.packet.nack_reason="Unknown: "+o}else a.packet.nack_reason_error="Parameter data length should be 2";else if(f.isResponse(q)&&m===g.RESPONSE_TYPE.ACK_TIMER)if(2===s){var v=(t[0]<<8)+t[1];a.packet.ack_timer=v}else a.packet.ack_timer_error="Parameter data length should be 2";else a.packet.param_data=e.arrayToHex(t,"0x");if(!(i.length>=2))return i.length&&(j=j.slice(0,-1)),a.packet.calculated_checksum=e.toHex(c.checksumAsValue(j),4,"0x"),void(i=[]);var w=(i.shift()<<8)+i.shift();a.packet.checksum=e.toHex(w,4,"0x"),a.packet.calculated_checksum=e.toHex(c.checksumAsValue(j.slice(0,-2)),4,"0x"),0!==i.length&&(a.error="Extra data after checksum")}}]); +angular.module("rdmApp",[]).config(["$interpolateProvider",function(a){"use strict";a.startSymbol("{[{"),a.endSymbol("}]}")}]).constant("RDM",{COMMAND_CLASS:{DISCOVERY_COMMAND:16,DISCOVERY_COMMAND_RESPONSE:17,GET_COMMAND:32,GET_COMMAND_RESPONSE:33,SET_COMMAND:48,SET_COMMAND_RESPONSE:49},EUID_SIZE:16,NACK_REASON:{NR_UNKNOWN_PID:0,NR_FORMAT_ERROR:1,NR_HARDWARE_FAULT:2,NR_PROXY_REJECT:3,NR_WRITE_PROTECT:4,NR_UNSUPPORTED_COMMAND_CLASS:5,NR_DATA_OUT_OF_RANGE:6,NR_BUFFER_FULL:7,NR_PACKET_SIZE_UNSUPPORTED:8,NR_SUB_DEVICE_OUT_OF_RANGE:9,NR_PROXY_BUFFER_FULL:16,NR_ACTION_NOT_SUPPORTED:17},PIDS:{DISC_UNIQUE_BRANCH:1,DISC_MUTE:2,DISC_UN_MUTE:3,PROXIED_DEVICES:16,PROXIED_DEVICE_COUNT:17,COMMS_STATUS:21,QUEUED_MESSAGE:32,STATUS_MESSAGES:48,STATUS_ID_DESCRIPTION:49,CLEAR_STATUS_ID:50,SUB_DEVICE_STATUS_REPORT_THRESHOLD:51,SUPPORTED_PARAMETERS:80,PARAMETER_DESCRIPTION:81,DEVICE_INFO:96,PRODUCT_DETAIL_ID_LIST:112,DEVICE_MODEL_DESCRIPTION:128,MANUFACTURER_LABEL:129,DEVICE_LABEL:130,FACTORY_DEFAULTS:144,LANGUAGE_CAPABILITIES:160,LANGUAGE:176,SOFTWARE_VERSION_LABEL:192,BOOT_SOFTWARE_VERSION_ID:193,BOOT_SOFTWARE_VERSION_LABEL:194,DMX_PERSONALITY:224,DMX_PERSONALITY_DESCRIPTION:225,DMX_START_ADDRESS:240,SLOT_INFO:288,SLOT_DESCRIPTION:289,DEFAULT_SLOT_VALUE:290,SENSOR_DEFINITION:512,SENSOR_VALUE:513,RECORD_SENSORS:514,DEVICE_HOURS:1024,LAMP_HOURS:1025,LAMP_STRIKES:1026,LAMP_STATE:1027,LAMP_ON_MODE:1028,DEVICE_POWER_CYCLES:1029,DISPLAY_INVERT:1280,DISPLAY_LEVEL:1281,PAN_INVERT:1536,TILT_INVERT:1537,PAN_TILT_SWAP:1538,REAL_TIME_CLOCK:1539,IDENTIFY_DEVICE:4096,RESET_DEVICE:4097,POWER_STATE:4112,PERFORM_SELFTEST:4128,SELF_TEST_DESCRIPTION:4129,CAPTURE_PRESET:4144,PRESET_PLAYBACK:4145,DMX_BLOCK_ADDRESS:320,DMX_FAIL_MODE:321,DMX_STARTUP_MODE:322,DIMMER_INFO:832,MINIMUM_LEVEL:833,MAXIMUM_LEVEL:834,CURVE:835,CURVE_DESCRIPTION:836,OUTPUT_RESPONSE_TIME:837,OUTPUT_RESPONSE_TIME_DESCRIPTION:838,MODULATION_FREQUENCY:839,MODULATION_FREQUENCY_DESCRIPTION:840,BURN_IN:1088,LOCK_PIN:1600,LOCK_STATE:1601,LOCK_STATE_DESCRIPTION:1602,IDENTIFY_MODE:4160,PRESET_INFO:4161,PRESET_STATUS:4162,PRESET_MERGEMODE:4163,POWER_ON_SELF_TEST:4164,LIST_INTERFACES:1792,INTERFACE_LABEL:1793,INTERFACE_HARDWARE_ADDRESS_TYPE1:1794,IPV4_DHCP_MODE:1795,IPV4_ZEROCONF_MODE:1796,IPV4_CURRENT_ADDRESS:1797,IPV4_STATIC_ADDRESS:1798,INTERFACE_RENEW_DHCP:1799,INTERFACE_RELEASE_DHCP:1800,INTERFACE_APPLY_CONFIGURATION:1801,IPV4_DEFAULT_ROUTE:1802,DNS_NAME_SERVER:1803,DNS_HOSTNAME:1804,DNS_DOMAIN_NAME:1805},RESPONSE_TYPE:{ACK:0,ACK_TIMER:1,NACK:2,ACK_OVERFLOW:3},START_CODE:204,SUB_DEVICE:{ROOT_DEVICE:0,ALL_SUB_DEVICES:65535},UID_SIZE:6}).constant("OUTPUT_FORMAT",{C_ARRAY:{label:"C Array",value:0},C_STRING:{label:"C String",value:1},RAW_HEX:{label:"Raw Hex",value:2}}).service("checksumService",function(){"use strict";var a=function(a){var b=a.reduce(function(a,b,c,d){return a+b});return b};this.checksumAsArray=function(b){var c=a(b);return[c>>8,255&c]},this.checksumAsValue=a}).service("rdmHelperService",["RDM",function(a){"use strict";this.isRequest=function(b){return b===a.COMMAND_CLASS.DISCOVERY_COMMAND||b===a.COMMAND_CLASS.GET_COMMAND||b===a.COMMAND_CLASS.SET_COMMAND},this.isResponse=function(b){return b===a.COMMAND_CLASS.DISCOVERY_COMMAND_RESPONSE||b===a.COMMAND_CLASS.GET_COMMAND_RESPONSE||b===a.COMMAND_CLASS.SET_COMMAND_RESPONSE},this.isGetSet=function(b){return b===a.COMMAND_CLASS.GET_COMMAND||b===a.COMMAND_CLASS.GET_COMMAND_RESPONSE||b===a.COMMAND_CLASS.SET_COMMAND||b===a.COMMAND_CLASS.SET_COMMAND_RESPONSE}}]).service("formatService",["RDM",function(a){"use strict";var b=function(a){return new Array(a+1).join(" ")},c=function(a,b,c,d){var e=a.toString(16),f=b-e.length+1;return(c?c:"")+new Array(+(f>0&&f)).join("0")+e+(d?d:"")};this.toHex=c,this.reverseLookup=function(a,b){var c="";return angular.forEach(a,function(a,d){a===b&&(c=d)}),c},this.arrayToUID=function(b){return b.length!==a.UID_SIZE?"":c(b[0],2)+c(b[1],2)+":"+c(b[2],2)+c(b[3],2)+c(b[4],2)+c(b[5],2)},this.arrayToHex=function(a,b,d){return a.map(function(a){return c(a,2,b,d)})},this.dataAsArray=function(a,d){for(var e=2,f="const uint8_t packet[] = {",g=[f],h=b(2),i=0;i=d?(h+=",",g.push(h),h=b(e)):h.length!==e&&(h+=", "),h+=j}return h&&g.push(h),g.push("};"),g.join("\n")},this.dataAsString=function(a,d){for(var e=[],f='const char packet[] = "',g=f,h=0;h=d&&(g+='"',e.push(g),g=b(f.length-1)+'"'),g+=i}return g&&(g+='";',e.push(g)),e.join("\n")},this.dataAsRawHex=function(a,b){for(var d=[],e="",f=0;f=b&&(d.push(e),e=""),e+=g,f+1!==a.length&&(e+=" ")}return e&&d.push(e),d.join("\n")}}]).service("parserService",["$log","RDM",function(a,b){"use strict";var c=function(a){for(var b=0;bb.value?1:-1}),a.OUTPUT_FORMAT={},angular.forEach(g,function(a,b){this[a.label]=a.value},a.OUTPUT_FORMAT),a.output="",a.error="";var i=function(b,c){var e=d.uidToBytes(b);return e[0]?(a.error="Invalid "+c+" UID:"+e[0],""):e[1]},j=function(){a.properties.show_param_data=f.isGetSet(a.packet.command_class)&&(a.packet.response_type===h.RESPONSE_TYPE.ACK||a.packet.response_type===h.RESPONSE_TYPE.ACK_OVERFLOW)},k=function(b,c,d){a.packet.command_class=b,a.properties.is_request=f.isRequest(b),j();var g=["DISC_UNIQUE_BRANCH","DISC_MUTE","DISC_UN_MUTE"],i=[];b===h.COMMAND_CLASS.DISCOVERY_COMMAND?i=g:b===h.COMMAND_CLASS.DISCOVERY_COMMAND_RESPONSE?i=["DISC_MUTE","DISC_UN_MUTE"]:angular.forEach(h.PIDS,function(a,b){-1===g.indexOf(b)&&this.push(b)},i);var k=!1,l=[];angular.forEach(i,function(b,c){k|=a.packet.param_id===h.PIDS[b];var d=b+" ("+e.toHex(h.PIDS[b],4,"0x")+")";this.push({label:d,value:h.PIDS[b]})},l),l.sort(function(a,b){return a.label===b.label?0:a.label>b.label?1:-1}),k||(a.packet.param_id=l[0].value),a.properties.pids=l},l=function(b,c,d){a.packet.response_type=b,j()};a.$watch("packet.response_type",l),a.$watch("packet.command_class",k),a.buildPacket=function(){a.error="";var b=i(a.packet.dest_uid,"destination");if(b){var j=i(a.packet.src_uid,"source");if(j){var k=[];if(a.packet.command_class===h.COMMAND_CLASS.DISCOVERY_COMMAND&&a.packet.param_id===h.PIDS.DISC_UNIQUE_BRANCH){var l=i(a.packet.lower_uid,"lower");if(!l)return;var m=i(a.packet.upper_uid,"upper");if(!m)return;k=l.concat(m)}else if(f.isGetSet(a.packet.command_class))if(a.packet.response_type===h.RESPONSE_TYPE.ACK||a.packet.response_type===h.RESPONSE_TYPE.ACK_OVERFLOW){var n=d.textToBytes(a.packet.param_data);if(n[0])return void(a.error="Invalid parameter data: "+n[0]);k=n[1]}else a.packet.response_type===h.RESPONSE_TYPE.NACK?k=[a.packet.nack_reason>>8,255&a.packet.nack_reason]:a.packet.response_type===h.RESPONSE_TYPE.ACK_TIMER&&(k=[a.packet.ack_timer>>8,255&a.packet.ack_timer]);var o=[a.packet.start_code,a.packet.sub_start_code,k.length+24];o=o.concat(b),o=o.concat(j),o.push(a.packet.transaction_number),f.isRequest(a.packet.command_class)?(o.push(a.packet.port_id),o.push(0)):(o.push(a.packet.response_type),o.push(a.packet.message_count)),o.push(a.packet.sub_device>>8),o.push(255&a.packet.sub_device),o.push(a.packet.command_class),o.push(a.packet.param_id>>8),o.push(255&a.packet.param_id),o.push(k.length),o=o.concat(k),o=o.concat(c.checksumAsArray(o)),a.settings.output_format===g.C_ARRAY.value?a.output=e.dataAsArray(o,a.settings.wrap):a.settings.output_format===g.C_STRING.value?a.output=e.dataAsString(o,a.settings.wrap):a.settings.output_format===g.RAW_HEX.value&&(a.output=e.dataAsRawHex(o,a.settings.wrap))}}}}]).controller("RDMPacketParser",["$scope","$log","checksumService","parserService","formatService","rdmHelperService","RDM",function(a,b,c,d,e,f,g){"use strict";a.packet_data="",a.show_output=!1;var h=function(){a.packet={start_code:"",sub_start_code:"",message_length:"",dest_uid:"",src_uid:"",transaction_number:"",port_id:"",message_count:"",sub_device:"",command_class:"",param_id:"",response_type:"",nack_reason:"",ack_timer:"",param_data_length:"",param_data:"",checksum:"",actual_size:"",calculated_checksum:"",nack_reason_error:"",ack_timer_error:""}};h(),a.reset=function(){h(),a.error="",a.packet_data="",a.show_output=!1},a.parsePacket=function(){h(),a.error="";var b=d.textToBytes(a.packet_data);if(b[0])return void(a.error="Invalid packet data: "+b[0]);var i=b[1],j=i.slice();if(a.packet.actual_size=i.length,!(i.length>=1))return void(a.error="Insufficient data for start code");if(a.packet.start_code=e.toHex(i.shift(),2,"0x"),a.show_output=!0,!(i.length>=1))return void(a.error="Insufficient data for sub start code");if(a.packet.sub_start_code=e.toHex(i.shift(),2,"0x"),!(i.length>=1))return void(a.error="Insufficient data for message length");if(a.packet.message_length=i.shift(),!(i.length>=g.UID_SIZE))return void(a.error="Insufficient data for destination UID");var k=i.slice(0,g.UID_SIZE);if(i=i.slice(g.UID_SIZE),a.packet.dest_uid=e.arrayToUID(k),!(i.length>=g.UID_SIZE))return void(a.error="Insufficient data for source UID");var l=i.slice(0,g.UID_SIZE);if(i=i.slice(g.UID_SIZE),a.packet.src_uid=e.arrayToUID(l),!(i.length>=1))return void(a.error="Insufficient data for transaction number");a.packet.transaction_number=i.shift();var m;if(!(i.length>=1))return void(a.error="Insufficient data for port ID / response type");if(m=i.shift(),!(i.length>=1))return void(a.error="Insufficient data for message count");a.packet.message_count=i.shift();var n,o;if(!(i.length>=2))return void(a.error="Insufficient data for sub device");var p=(i.shift()<<8)+i.shift();n=e.reverseLookup(g.SUB_DEVICE,p),n?a.packet.sub_device=n+" ("+e.toHex(p,4,"0x")+")":a.packet.sub_device=p;var q;if(!(i.length>=1))return void(a.error="Insufficient data for command class");if(q=i.shift(),n=e.reverseLookup(g.COMMAND_CLASS,q),o=e.toHex(q,2,"0x"),n?a.packet.command_class=n+" ("+o+")":a.packet.command_class=o,f.isResponse(q)?(n=e.reverseLookup(g.RESPONSE_TYPE,m),o=e.toHex(m,4,"0x"),n?a.packet.response_type=n+" ("+o+")":a.packet.response_type=o):a.packet.port_id=m,!(i.length>=2))return void(a.error="Insufficient data for parameter ID");var r=(i.shift()<<8)+i.shift();n=e.reverseLookup(g.PIDS,r),o=e.toHex(r,4,"0x"),n?a.packet.param_id=n+" ("+o+")":a.packet.param_id=o;var s;if(!(i.length>=1))return void(a.error="Insufficient data for parameter data length");if(s=i.shift(),a.packet.param_data_length=s,!(i.length>=s))return void(a.error="Insufficient data for parameter data");var t=i.slice(0,s);if(i=i.slice(s),f.isResponse(q)&&m===g.RESPONSE_TYPE.NACK)if(2===s){var u=(t[0]<<8)+t[1];n=e.reverseLookup(g.NACK_REASON,u),o=e.toHex(u,4,"0x"),n?a.packet.nack_reason=n+" ("+o+")":a.packet.nack_reason="Unknown: "+o}else a.packet.nack_reason_error="Parameter data length should be 2";else if(f.isResponse(q)&&m===g.RESPONSE_TYPE.ACK_TIMER)if(2===s){var v=(t[0]<<8)+t[1];a.packet.ack_timer=v}else a.packet.ack_timer_error="Parameter data length should be 2";else a.packet.param_data=e.arrayToHex(t,"0x");if(!(i.length>=2))return i.length&&(j=j.slice(0,-1)),a.packet.calculated_checksum=e.toHex(c.checksumAsValue(j),4,"0x"),void(i=[]);var w=(i.shift()<<8)+i.shift();a.packet.checksum=e.toHex(w,4,"0x"),a.packet.calculated_checksum=e.toHex(c.checksumAsValue(j.slice(0,-2)),4,"0x"),0!==i.length&&(a.error="Extra data after checksum")}}]); //# sourceMappingURL=rdm.js.map \ No newline at end of file diff --git a/static/js/rdm.js.map b/static/js/rdm.js.map index c856fa4a..e04d7db0 100644 --- a/static/js/rdm.js.map +++ b/static/js/rdm.js.map @@ -1 +1 @@ -{"version":3,"file":"rdm.js","sources":["../../js_src/rdm.js"],"names":["angular","module","config","$interpolateProvider","startSymbol","endSymbol","constant","COMMAND_CLASS","DISCOVERY_COMMAND","DISCOVERY_COMMAND_RESPONSE","GET_COMMAND","GET_COMMAND_RESPONSE","SET_COMMAND","SET_COMMAND_RESPONSE","EUID_SIZE","NACK_REASON","NR_UNKNOWN_PID","NR_FORMAT_ERROR","NR_HARDWARE_FAULT","NR_PROXY_REJECT","NR_WRITE_PROTECT","NR_UNSUPPORTED_COMMAND_CLASS","NR_DATA_OUT_OF_RANGE","NR_BUFFER_FULL","NR_PACKET_SIZE_UNSUPPORTED","NR_SUB_DEVICE_OUT_OF_RANGE","NR_PROXY_BUFFER_FULL","NR_ACTION_NOT_SUPPORTED","PIDS","DISC_UNIQUE_BRANCH","DISC_MUTE","DISC_UN_MUTE","PROXIED_DEVICES","PROXIED_DEVICE_COUNT","COMMS_STATUS","QUEUED_MESSAGE","STATUS_MESSAGES","STATUS_ID_DESCRIPTION","CLEAR_STATUS_ID","SUB_DEVICE_STATUS_REPORT_THRESHOLD","SUPPORTED_PARAMETERS","PARAMETER_DESCRIPTION","DEVICE_INFO","PRODUCT_DETAIL_ID_LIST","DEVICE_MODEL_DESCRIPTION","MANUFACTURER_LABEL","DEVICE_LABEL","FACTORY_DEFAULTS","LANGUAGE_CAPABILITIES","LANGUAGE","SOFTWARE_VERSION_LABEL","BOOT_SOFTWARE_VERSION_ID","BOOT_SOFTWARE_VERSION_LABEL","DMX_PERSONALITY","DMX_PERSONALITY_DESCRIPTION","DMX_START_ADDRESS","SLOT_INFO","SLOT_DESCRIPTION","DEFAULT_SLOT_VALUE","SENSOR_DEFINITION","SENSOR_VALUE","RECORD_SENSORS","DEVICE_HOURS","LAMP_HOURS","LAMP_STRIKES","LAMP_STATE","LAMP_ON_MODE","DEVICE_POWER_CYCLES","DISPLAY_INVERT","DISPLAY_LEVEL","PAN_INVERT","TILT_INVERT","PAN_TILT_SWAP","REAL_TIME_CLOCK","IDENTIFY_DEVICE","RESET_DEVICE","POWER_STATE","PERFORM_SELFTEST","SELF_TEST_DESCRIPTION","CAPTURE_PRESET","PRESET_PLAYBACK","DMX_BLOCK_ADDRESS","DMX_FAIL_MODE","DMX_STARTUP_MODE","DIMMER_INFO","MINIMUM_LEVEL","MAXIMUM_LEVEL","CURVE","CURVE_DESCRIPTION","OUTPUT_RESPONSE_TIME","OUTPUT_RESPONSE_TIME_DESCRIPTION","MODULATION_FREQUENCY","MODULATION_FREQUENCY_DESCRIPTION","BURN_IN","LOCK_PIN","LOCK_STATE","LOCK_STATE_DESCRIPTION","IDENTIFY_MODE","PRESET_INFO","PRESET_STATUS","PRESET_MERGEMODE","POWER_ON_SELF_TEST","LIST_INTERFACES","INTERFACE_LABEL","INTERFACE_HARDWARE_ADDRESS_TYPE1","IPV4_DHCP_MODE","IPV4_ZEROCONF_MODE","IPV4_CURRENT_ADDRESS","IPV4_STATIC_ADDRESS","INTERFACE_RENEW_DHCP","INTERFACE_RELEASE_DHCP","INTERFACE_APPLY_CONFIGURATION","IPV4_DEFAULT_ROUTE","DNS_NAME_SERVER","DNS_HOSTNAME","DNS_DOMAIN_NAME","RESPONSE_TYPE","ACK","ACK_TIMER","NACK","ACK_OVERFLOW","START_CODE","SUB_DEVICE","ROOT_DEVICE","ALL_SUB_DEVICES","UID_SIZE","C_ARRAY","label","value","C_STRING","RAW_HEX","service","checksum","input","sum","reduce","previousValue","currentValue","index","array","this","checksumAsArray","checksumAsValue","RDM","isRequest","command_class","isResponse","isGetSet","pad","length","Array","join","toHex","num","places","prefix","suffix","str","toString","zero","reverseLookup","dictionary","needle","item","forEach","key","arrayToUID","data","arrayToHex","map","i","dataAsArray","wrap","indent","lines","current_line","push","dataAsString","dataAsRawHex","$log","guessDataFormat","tokens","j","token","match","parseLines","as_hex","error","binary_data","line","replace","trim","concat","split","undefined","hex_suffix_match","parseInt","hex_prefix_match","hex_match","decimal_match","textToBytes","text","uidToBytes","clean_uid","uid_bytes","octet","slice","isNaN","controller","$scope","checksumService","formatService","parserService","OUTPUT_FORMATS","HEX_SUFFIX","HEX_PREFIX","HEX_PAIRS","DECIMAL_PAIRS","invalid_input_message","uid","euid","format","convertToEUID","return_data","euid_bytes","INPUT_FORMATS","DECIMAL","HEX","convertToUID","uid_array","recovered_checksum","calculated_checksum","rdmHelperService","OUTPUT_FORMAT","packet","start_code","sub_start_code","dest_uid","src_uid","transaction_number","port_id","message_count","sub_device","param_id","response_type","nack_reason","ack_timer","param_data","lower_uid","upper_uid","properties","is_request","show_param_data","pids","settings","output_format","command_classes","sort","a","b","output","parseUIDOrSetError","uid_name","parse_return","showHideParamData","commandClassChanged","new_value","old_value","scope","discovery_pids","pid_names","indexOf","found_selected","responseTypeChanged","newValue","oldValue","$watch","buildPacket","packet_data","show_output","resetPacket","message_length","param_data_length","actual_size","nack_reason_error","ack_timer_error","reset","parsePacket","original_packet_data","shift","dst_uid_data","src_uid_data","hex_value"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"rdm.js","sources":["../../js_src/rdm.js"],"names":["angular","module","config","$interpolateProvider","startSymbol","endSymbol","constant","COMMAND_CLASS","DISCOVERY_COMMAND","DISCOVERY_COMMAND_RESPONSE","GET_COMMAND","GET_COMMAND_RESPONSE","SET_COMMAND","SET_COMMAND_RESPONSE","EUID_SIZE","NACK_REASON","NR_UNKNOWN_PID","NR_FORMAT_ERROR","NR_HARDWARE_FAULT","NR_PROXY_REJECT","NR_WRITE_PROTECT","NR_UNSUPPORTED_COMMAND_CLASS","NR_DATA_OUT_OF_RANGE","NR_BUFFER_FULL","NR_PACKET_SIZE_UNSUPPORTED","NR_SUB_DEVICE_OUT_OF_RANGE","NR_PROXY_BUFFER_FULL","NR_ACTION_NOT_SUPPORTED","PIDS","DISC_UNIQUE_BRANCH","DISC_MUTE","DISC_UN_MUTE","PROXIED_DEVICES","PROXIED_DEVICE_COUNT","COMMS_STATUS","QUEUED_MESSAGE","STATUS_MESSAGES","STATUS_ID_DESCRIPTION","CLEAR_STATUS_ID","SUB_DEVICE_STATUS_REPORT_THRESHOLD","SUPPORTED_PARAMETERS","PARAMETER_DESCRIPTION","DEVICE_INFO","PRODUCT_DETAIL_ID_LIST","DEVICE_MODEL_DESCRIPTION","MANUFACTURER_LABEL","DEVICE_LABEL","FACTORY_DEFAULTS","LANGUAGE_CAPABILITIES","LANGUAGE","SOFTWARE_VERSION_LABEL","BOOT_SOFTWARE_VERSION_ID","BOOT_SOFTWARE_VERSION_LABEL","DMX_PERSONALITY","DMX_PERSONALITY_DESCRIPTION","DMX_START_ADDRESS","SLOT_INFO","SLOT_DESCRIPTION","DEFAULT_SLOT_VALUE","SENSOR_DEFINITION","SENSOR_VALUE","RECORD_SENSORS","DEVICE_HOURS","LAMP_HOURS","LAMP_STRIKES","LAMP_STATE","LAMP_ON_MODE","DEVICE_POWER_CYCLES","DISPLAY_INVERT","DISPLAY_LEVEL","PAN_INVERT","TILT_INVERT","PAN_TILT_SWAP","REAL_TIME_CLOCK","IDENTIFY_DEVICE","RESET_DEVICE","POWER_STATE","PERFORM_SELFTEST","SELF_TEST_DESCRIPTION","CAPTURE_PRESET","PRESET_PLAYBACK","DMX_BLOCK_ADDRESS","DMX_FAIL_MODE","DMX_STARTUP_MODE","DIMMER_INFO","MINIMUM_LEVEL","MAXIMUM_LEVEL","CURVE","CURVE_DESCRIPTION","OUTPUT_RESPONSE_TIME","OUTPUT_RESPONSE_TIME_DESCRIPTION","MODULATION_FREQUENCY","MODULATION_FREQUENCY_DESCRIPTION","BURN_IN","LOCK_PIN","LOCK_STATE","LOCK_STATE_DESCRIPTION","IDENTIFY_MODE","PRESET_INFO","PRESET_STATUS","PRESET_MERGEMODE","POWER_ON_SELF_TEST","LIST_INTERFACES","INTERFACE_LABEL","INTERFACE_HARDWARE_ADDRESS_TYPE1","IPV4_DHCP_MODE","IPV4_ZEROCONF_MODE","IPV4_CURRENT_ADDRESS","IPV4_STATIC_ADDRESS","INTERFACE_RENEW_DHCP","INTERFACE_RELEASE_DHCP","INTERFACE_APPLY_CONFIGURATION","IPV4_DEFAULT_ROUTE","DNS_NAME_SERVER","DNS_HOSTNAME","DNS_DOMAIN_NAME","RESPONSE_TYPE","ACK","ACK_TIMER","NACK","ACK_OVERFLOW","START_CODE","SUB_DEVICE","ROOT_DEVICE","ALL_SUB_DEVICES","UID_SIZE","C_ARRAY","label","value","C_STRING","RAW_HEX","service","checksum","input","sum","reduce","previousValue","currentValue","index","array","this","checksumAsArray","checksumAsValue","RDM","isRequest","command_class","isResponse","isGetSet","pad","length","Array","join","toHex","num","places","prefix","suffix","str","toString","zero","reverseLookup","dictionary","needle","item","forEach","key","arrayToUID","data","arrayToHex","map","i","dataAsArray","wrap","indent","lines","current_line","push","dataAsString","dataAsRawHex","$log","guessDataFormat","tokens","j","token","match","parseLines","as_hex","error","binary_data","line","replace","trim","concat","split","undefined","hex_suffix_match","parseInt","hex_prefix_match","char_match","charCodeAt","hex_match","decimal_match","textToBytes","text","uidToBytes","clean_uid","uid_bytes","octet","slice","isNaN","controller","$scope","checksumService","formatService","parserService","OUTPUT_FORMATS","HEX_SUFFIX","HEX_PREFIX","HEX_PAIRS","DECIMAL_PAIRS","invalid_input_message","uid","euid","format","convertToEUID","return_data","euid_bytes","INPUT_FORMATS","DECIMAL","HEX","convertToUID","uid_array","recovered_checksum","calculated_checksum","rdmHelperService","OUTPUT_FORMAT","packet","start_code","sub_start_code","dest_uid","src_uid","transaction_number","port_id","message_count","sub_device","param_id","response_type","nack_reason","ack_timer","param_data","lower_uid","upper_uid","properties","is_request","show_param_data","pids","settings","output_format","command_classes","sort","a","b","output","parseUIDOrSetError","uid_name","parse_return","showHideParamData","commandClassChanged","new_value","old_value","scope","discovery_pids","pid_names","indexOf","found_selected","responseTypeChanged","newValue","oldValue","$watch","buildPacket","packet_data","show_output","resetPacket","message_length","param_data_length","actual_size","nack_reason_error","ack_timer_error","reset","parsePacket","original_packet_data","shift","dst_uid_data","src_uid_data","hex_value"],"mappings":"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"} \ No newline at end of file