Compare commits
45 Commits
master
...
software_d
91 changed files with 17938 additions and 10522 deletions
@ -0,0 +1,4 @@ |
|||
__Previews/ |
|||
History/ |
|||
Project Logs for uppsense/ |
|||
Project Outputs for uppsense |
Binary file not shown.
@ -0,0 +1,234 @@ |
|||
[0709/201852:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201857:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201902:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201907:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201912:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201917:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201922:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201927:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201932:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201937:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201942:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201947:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201952:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/201957:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202002:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202007:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202012:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202017:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202022:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202027:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202032:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202037:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202042:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202047:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202052:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202057:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202102:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202107:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202112:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202117:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202122:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202127:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202132:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202137:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202142:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202147:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202152:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202157:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202202:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202207:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202212:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202217:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202222:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202227:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202232:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202237:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202242:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202247:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202252:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202257:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202302:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202307:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202312:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202317:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202322:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202328:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202333:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202338:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202343:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202348:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202353:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202358:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202403:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202408:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202413:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202418:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202423:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202428:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202433:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202438:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202443:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202448:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202453:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202458:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202503:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202508:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202511:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202513:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202516:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202518:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202521:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202523:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202526:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202528:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202531:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202533:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202536:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202538:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202541:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202543:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202546:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202548:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202551:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202553:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202556:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202558:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202601:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202603:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202606:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202608:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202611:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202613:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202616:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202618:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202621:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202623:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202626:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202628:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202631:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202633:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202636:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202638:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202641:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202643:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202646:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202648:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202651:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202653:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202656:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202658:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202701:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202703:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202706:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202708:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202711:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202713:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202716:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202718:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202721:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202723:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202726:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202728:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202731:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202733:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202736:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202738:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202741:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202743:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202746:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202748:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202751:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202753:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202756:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202758:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202801:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202803:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202806:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202808:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202811:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202813:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202816:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202818:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202821:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202823:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202826:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202828:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202831:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202833:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202836:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202838:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202841:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202843:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202846:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202848:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202851:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202853:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202856:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202858:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202901:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202903:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202906:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202908:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202911:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202913:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202916:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202918:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202921:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202923:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202926:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202928:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202931:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202933:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202936:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202938:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202941:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202943:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202946:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202948:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202951:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202953:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202956:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/202958:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203001:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203003:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203006:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203008:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203011:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203013:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203016:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203018:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203021:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203023:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203026:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203028:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203031:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203033:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203036:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203038:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203041:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203043:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203046:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203048:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203051:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203053:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203056:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203058:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203101:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203103:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203106:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203108:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203111:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203113:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203116:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203118:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203121:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203123:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203126:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203128:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203131:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203133:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203136:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203138:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203141:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
|||
[0709/203142:WARNING:dns_config_service_win.cc(665)] Failed to read DnsConfig. |
@ -0,0 +1,4 @@ |
|||
__Previews/ |
|||
History/ |
|||
Project Logs for uppsense/ |
|||
Project Outputs for uppsense |
@ -0,0 +1,3 @@ |
|||
*.SchDoc.Zip |
|||
*.PcbDoc.Zip |
|||
*.PrjPcb.Zip |
@ -0,0 +1 @@ |
|||
*.LOG |
@ -0,0 +1,344 @@ |
|||
<html> |
|||
<head> |
|||
<META http-equiv="Content-Type" content="text/html"> |
|||
<style type="text/css"> |
|||
h1, h2, h3, h4, h5, h6 { |
|||
font-family : segoe ui; |
|||
color : black; |
|||
background-color : #EDE7D9; |
|||
padding: 0.3em; |
|||
} |
|||
|
|||
h1 { |
|||
font-size: 1.2em; |
|||
} |
|||
|
|||
h2 { |
|||
font-size: 1.2em; |
|||
} |
|||
|
|||
body { |
|||
font-family : segoe ui; |
|||
} |
|||
|
|||
td, th { |
|||
padding: 0.5em; |
|||
text-align : left; |
|||
width: 10em; |
|||
} |
|||
th { |
|||
background-color : #EEEEEE; |
|||
|
|||
} |
|||
th.column1, td.column1 { |
|||
text-align: left; |
|||
width : auto; |
|||
} |
|||
table { |
|||
width : 100%; |
|||
font-size: 0.9em; |
|||
} |
|||
|
|||
.DRC_summary_header { |
|||
padding-bottom : 0.1em; |
|||
border : 0px solid black; |
|||
width: 100%; |
|||
align: left; |
|||
} |
|||
|
|||
.DRC_summary_header_col1, |
|||
.DRC_summary_header_col2, |
|||
.DRC_summary_header_col3 { |
|||
color : black; |
|||
font-size:100%; |
|||
padding : 0em; |
|||
padding-top : 0.2em; |
|||
padding-bottom 0.2em; |
|||
border : 0px solid black; |
|||
vertical-align: top; |
|||
text-align: left; |
|||
} |
|||
|
|||
.DRC_summary_header_col1 { |
|||
font-weight: bold; |
|||
width: 8em; |
|||
} |
|||
|
|||
.DRC_summary_header_col2 { |
|||
width: 0.1em; |
|||
|
|||
} |
|||
|
|||
.DRC_summary_header_col3 { |
|||
width : auto; |
|||
} |
|||
|
|||
.header_holder { |
|||
Width = 100%; |
|||
border = 0px solid green; |
|||
padding = 0; |
|||
} |
|||
|
|||
|
|||
.front_matter, .front_matter_column1, .front_matter_column2, .front_matter_column3 |
|||
{ |
|||
left : 0; |
|||
top : 0; |
|||
padding: 0em; |
|||
padding-top : 0.1em; |
|||
border : 0px solid black; |
|||
width : 100%; |
|||
vertical-align: top; |
|||
text-align: left; |
|||
} |
|||
|
|||
.front_matter_column1 { |
|||
width : 8em; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.front_matter_column2 { |
|||
width: 0.1em; |
|||
} |
|||
|
|||
.front_matter_column3 { |
|||
width : auto; |
|||
} |
|||
|
|||
.total_column1, .total_column { |
|||
font-weight : bold; |
|||
} |
|||
.total_column1 { |
|||
text-align : left; |
|||
} |
|||
.warning, .error { |
|||
color : red; |
|||
font-weight : bold; |
|||
} |
|||
tr.onmouseout_odd { |
|||
background-color : #white; |
|||
} |
|||
tr.onmouseout_even { |
|||
background-color : #FAFAFA; |
|||
} |
|||
tr.onmouseover_odd, tr.onmouseover_even { |
|||
background-color : #EEEEEE; |
|||
} |
|||
a:link, a:visited, .q a:link,.q a:active,.q { |
|||
color: #21489e; |
|||
} |
|||
a:link.callback, a:visited.callback { |
|||
color: #21489e; |
|||
} |
|||
a:link.customize, a:visited.customize { |
|||
color: #C0C0C0; |
|||
position: absolute; |
|||
right: 10px; |
|||
} |
|||
p.contents_level1 { |
|||
font-weight : bold; |
|||
font-size : 110%; |
|||
margin : 0.5em; |
|||
} |
|||
p.contents_level2 { |
|||
position : relative; |
|||
left : 20px; |
|||
margin : 0.5em; |
|||
} |
|||
</style><script type="text/javascript"> |
|||
function coordToMils(coord) { |
|||
var number = coord / 10000; |
|||
|
|||
if (number != number.toFixed(3)) |
|||
number = number.toFixed(3); |
|||
|
|||
return number + 'mil' |
|||
} |
|||
|
|||
function coordToMM(coord) { |
|||
var number = 0.0254 * coord / 10000; |
|||
|
|||
if (number != number.toFixed(4)) |
|||
number = number.toFixed(4); |
|||
|
|||
return number + 'mm' |
|||
} |
|||
|
|||
function convertCoord(coordNode, units) { |
|||
for (var i = 0; i < coordNode.childNodes.length; i++) { |
|||
coordNode.removeChild(coordNode.childNodes[i]); |
|||
} |
|||
|
|||
var coord = coordNode.getAttribute('value'); |
|||
if (coord != null) { |
|||
if (units == 'mm') { |
|||
textNode = document.createTextNode(coordToMM(coord)); |
|||
coordNode.appendChild(textNode); |
|||
} else if (units == 'mil') { |
|||
textNode = document.createTextNode(coordToMils(coord)); |
|||
coordNode.appendChild(textNode); |
|||
} |
|||
} |
|||
} |
|||
|
|||
function convertUnits(unitNode, units) { |
|||
for (var i = 0; i < unitNode.childNodes.length; i++) { |
|||
unitNode.removeChild(unitNode.childNodes[i]); |
|||
} |
|||
|
|||
textNode = document.createTextNode(units); |
|||
unitNode.appendChild(textNode); |
|||
} |
|||
|
|||
function changeUnits(radio_input, units) { |
|||
if (radio_input.checked) { |
|||
|
|||
var elements = document.getElementsByName('coordinate'); |
|||
if (elements) { |
|||
for (var i = 0; i < elements.length; i++) { |
|||
convertCoord(elements[i], units); |
|||
} |
|||
} |
|||
|
|||
var elements = document.getElementsByName('units'); |
|||
if (elements) { |
|||
for (var i = 0; i < elements.length; i++) { |
|||
convertUnits(elements[i], units); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script><title>Design Rule Verification Report</title> |
|||
</head> |
|||
<body onload=""><img ALT="Altium" src=" |
|||
file://C:\Users\Public\Documents\Altium\AD17\Templates\AD_logo.png |
|||
"><h1>Design Rule Verification Report</h1> |
|||
<table class="header_holder"> |
|||
<td class="column1"> |
|||
<table class="front_matter"> |
|||
<tr class="front_matter"> |
|||
<td class="front_matter_column1">Date:</td> |
|||
<td class="front_matter_column2"></td> |
|||
<td class="front_matter_column3">21-Aug-17</td> |
|||
</tr> |
|||
<tr class="front_matter"> |
|||
<td class="front_matter_column1">Time:</td> |
|||
<td class="front_matter_column2"></td> |
|||
<td class="front_matter_column3">11:16:58 AM</td> |
|||
</tr> |
|||
<tr class="front_matter"> |
|||
<td class="front_matter_column1">Elapsed Time:</td> |
|||
<td class="front_matter_column2"></td> |
|||
<td class="front_matter_column3">00:00:02</td> |
|||
</tr> |
|||
<tr class="front_matter"> |
|||
<td class="front_matter_column1">Filename:</td> |
|||
<td class="front_matter_column2"></td> |
|||
<td class="front_matter_column3"><a href="file:///C:\Users\Elmar\Desktop\UU\UppSense\pcbs\digital_board_rev_2\uppsense.PcbDoc" class="file"><acronym title="C:\Users\Elmar\Desktop\UU\UppSense\pcbs\digital_board_rev_2\uppsense.PcbDoc">C:\Users\Elmar\Desktop\UU\UppSense\pcbs\digital_board_rev_2\uppsense.PcbDoc</acronym></a></td> |
|||
</tr> |
|||
</table> |
|||
</td> |
|||
<td class="column2"> |
|||
<table class="DRC_summary_header"> |
|||
<tr> |
|||
<td class="DRC_summary_header_col1">Warnings:</td> |
|||
<td class="DRC_summary_header_col2"></td> |
|||
<td class="DRC_summary_header_col3">0</td></tr> |
|||
<tr> |
|||
<td class="DRC_summary_header_col1">Rule Violations:</td> |
|||
<td class="DRC_summary_header_col2"></td> |
|||
<td class="DRC_summary_header_col3">0</td></tr> |
|||
</table> |
|||
</td> |
|||
</table><a name="IDC5FAHQQWOI5NI05H2TQJIWPBQLP4JTT5KOFTXUOHUDVL0HHW2YLJ"><h2>Summary</h2></a><table> |
|||
<tr> |
|||
<th class="column1">Warnings</th> |
|||
<th class="column2">Count</th> |
|||
</tr> |
|||
<tr> |
|||
<td style="font-weight : bold; text-align : right" class="column1">Total</td> |
|||
<td style="font-weight : bold" class="column2">0</td> |
|||
</tr> |
|||
</table><br><table> |
|||
<tr> |
|||
<th class="column1">Rule Violations</th> |
|||
<th class="column2">Count</th> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#IDVWGDQCNIYQLPB52LKN4YWJ2IGO5SDMJS12ENOBLCZMA3TODWPDMO">Clearance Constraint (Gap=0.2mm) (InPolygon),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDXYEM30BXVASAIGPVF03DMUTGYBOURWJUTGWUPEDXMYYCTOJXSKYM">Clearance Constraint (Gap=0.2mm) (IsTrack AND AsMM(Width) > 0.2),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#IDGG1DLJ0F2X1CKDQV25MQ313NKKJHG3IPRL5MLNI45JH4FVC5GMAG">Clearance Constraint (Gap=0.15mm) (All),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDQFFV10D4XINYFCJG4FHWOQVVWJFPXFI3HQWNRJOLVDUOKSER0H0K">Clearance Constraint (Gap=1.1mm) (HasFootprint('FEDUCIAL')),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#IDSCVJ1NHOUZMZHI0O2YTM1TTHREQONVEB3ZSDUWCFEHOKMFYFXPTH">Clearance Constraint (Gap=0.25mm) (OnLayer('Keep-Out Layer')),(InPolygon)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDNBMTL13XAGC0JCG0DZTN3RLP2DJK5MAZ4AEK3QMWKVXSLUEW2LNF">Clearance Constraint (Gap=0.25mm) (OnLayer('Keep-Out Layer')),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#ID4LTXDNIDI5GVJGOY3TXGARKN3DRXQDAA5PD0YZNF3DYNQAF1OJRN">Short-Circuit Constraint (Allowed=No) (All),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDEI40H30XUNOODBMIF2RZUE3KFIFE1KJKZ1ROJNCS4PPPFG4D3M1P">Un-Routed Net Constraint ( (All) )</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#IDVGOTBRLR40TOO3R5VBM4JWPLIJC5F2YWMNAVSJT2KV34EBCVDCH">Modified Polygon (Allow modified: No), (Allow shelved: No)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDWDFN3QUKTAFQJL1DYNUSPI4VEJZ1ACMVUQMLHPEMP0HWUTAMOS3B">Width Constraint (Min=0.15mm) (Max=100mm) (Preferred=0.2mm) (All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#ID5SJYMANNQTUEJHC2N45PVOX4YO0O1BEW5BEHQLN0PKDL4BJVQKG">Power Plane Connect Rule(Relief Connect )(Expansion=0.508mm) (Conductor Width=0.254mm) (Air Gap=0.254mm) (Entries=4) (All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDBTUVOERWBYOPJUB20BABOVJSR2DXMZMNINC5IP0WQBWPUNSZOQK">Hole Size Constraint (Min=0.025mm) (Max=20mm) (All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#IDN5YTNYCDVMEKM1G4LVAPYWYKXNW3KVSKHCFOUDF3JLMEJTX5L2KC">Hole To Hole Clearance (Gap=0.254mm) (All),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDRWBJL5BKT4TWKYSRQMXMTC22HPNZNS11CNXBFOCD3W5UHXBNR0I">Minimum Solder Mask Sliver (Gap=0mm) (All),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#IDR3FSMK4RXBARM52Q12YC2RNI4FTFKIMVUZ5IZVCWKFHLKKIIRBNN">Silk To Solder Mask (Clearance=0mm) (IsPad),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#IDJGSZDYZF4IYFJB33PTYYTWLRRCISJL5R4KHILGNCPH5440IC0YNL">Silk to Silk (Clearance=0mm) (All),(All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_odd" onmouseover="className = 'onmouseover_odd'" onmouseout="className = 'onmouseout_odd'"> |
|||
<td class="column1"><a href="#ID2F1UGOBU2HKVKGAUM0XH1AVE2IJYZ1EJJXJ3FBEZMDVHSG0324L">Net Antennae (Tolerance=0mm) (All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr class="onmouseout_even" onmouseover="className = 'onmouseover_even'" onmouseout="className = 'onmouseout_even'"> |
|||
<td class="column1"><a href="#ID1DJ2EHNQIMG1LW13YUZ05DTEIFSJNOY5YHPLX0KFS00QSAY04GSE">Height Constraint (Min=0mm) (Max=1000mm) (Prefered=12.7mm) (All)</a></td> |
|||
<td class="column2">0</td> |
|||
</tr> |
|||
<tr> |
|||
<td style="font-weight : bold; text-align : right" class="column1">Total</td> |
|||
<td style="font-weight : bold" class="column2">0</td> |
|||
</tr> |
|||
</table><br></body> |
|||
</html> |
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,557 @@ |
|||
%FSDAX24Y24*% |
|||
%MOIN*% |
|||
%SFA1B1*% |
|||
|
|||
%IPPOS*% |
|||
%ADD19C,0.007900*% |
|||
%ADD26C,0.010000*% |
|||
%LNuppsense-1*% |
|||
%LPD*% |
|||
G54D19* |
|||
X028248Y029646D02* |
|||
X029272D01* |
|||
Y030197* |
|||
X028248D02* |
|||
X029272D01* |
|||
X028248Y029646D02* |
|||
Y030197D01* |
|||
Y030394D02* |
|||
X029272D01* |
|||
Y030945* |
|||
X028248D02* |
|||
X029272D01* |
|||
X028248Y030394D02* |
|||
Y030945D01* |
|||
X028228Y031102D02* |
|||
X029252D01* |
|||
Y031654* |
|||
X028228D02* |
|||
X029252D01* |
|||
X028228Y031102D02* |
|||
Y031654D01* |
|||
X027087Y031870D02* |
|||
Y032894D01* |
|||
X026535D02* |
|||
X027087D01* |
|||
X026535Y031870D02* |
|||
Y032894D01* |
|||
Y031870D02* |
|||
X027087D01* |
|||
X028307Y031850D02* |
|||
Y032874D01* |
|||
X027756D02* |
|||
X028307D01* |
|||
X027756Y031850D02* |
|||
Y032874D01* |
|||
Y031850D02* |
|||
X028307D01* |
|||
X017512Y022598D02* |
|||
Y023583D01* |
|||
X018134Y022598D02* |
|||
Y023583D01* |
|||
X017911Y024585D02* |
|||
Y024785D01* |
|||
X017711Y024585D02* |
|||
Y024785D01* |
|||
Y023585D02* |
|||
Y023785D01* |
|||
X017911Y023585D02* |
|||
Y023785D01* |
|||
Y020315D02* |
|||
Y022598D01* |
|||
X017711Y020315D02* |
|||
Y022585D01* |
|||
Y020315D02* |
|||
X017911D01* |
|||
X016512Y022598D02* |
|||
Y023583D01* |
|||
X017134Y022598D02* |
|||
Y023583D01* |
|||
X016911Y024585D02* |
|||
Y024785D01* |
|||
X016711Y024585D02* |
|||
Y024785D01* |
|||
Y023585D02* |
|||
Y023785D01* |
|||
X016911Y023585D02* |
|||
Y023785D01* |
|||
Y020315D02* |
|||
Y022598D01* |
|||
X016711Y020315D02* |
|||
Y022585D01* |
|||
Y020315D02* |
|||
X016911D01* |
|||
X018311Y022598D02* |
|||
Y023585D01* |
|||
X011291D02* |
|||
X018311D01* |
|||
X011911Y020315D02* |
|||
Y022598D01* |
|||
X011711Y020315D02* |
|||
Y022585D01* |
|||
Y020315D02* |
|||
X011911D01* |
|||
X011711Y023585D02* |
|||
Y023785D01* |
|||
X011911Y023585D02* |
|||
Y023785D01* |
|||
X011488Y022598D02* |
|||
Y023583D01* |
|||
X012118Y022598D02* |
|||
Y023583D01* |
|||
X011291Y022598D02* |
|||
Y023585D01* |
|||
X015711Y020315D02* |
|||
X015911D01* |
|||
X015711D02* |
|||
Y022585D01* |
|||
X015911Y020315D02* |
|||
Y022598D01* |
|||
X014711Y020315D02* |
|||
X014911D01* |
|||
X014711D02* |
|||
Y022585D01* |
|||
X014911Y020315D02* |
|||
Y022598D01* |
|||
X013711Y020315D02* |
|||
X013911D01* |
|||
X013711D02* |
|||
Y022585D01* |
|||
X013911Y020315D02* |
|||
Y022598D01* |
|||
X012711Y020315D02* |
|||
X012911D01* |
|||
X012711D02* |
|||
Y022585D01* |
|||
X012911Y020315D02* |
|||
Y022598D01* |
|||
X015911Y023585D02* |
|||
Y023785D01* |
|||
X015711Y023585D02* |
|||
Y023785D01* |
|||
Y024585D02* |
|||
Y024785D01* |
|||
X015911Y024585D02* |
|||
Y024785D01* |
|||
X014911Y023585D02* |
|||
Y023785D01* |
|||
X014711Y023585D02* |
|||
Y023785D01* |
|||
Y024585D02* |
|||
Y024785D01* |
|||
X014911Y024585D02* |
|||
Y024785D01* |
|||
X013911Y023585D02* |
|||
Y023785D01* |
|||
X013711Y023585D02* |
|||
Y023785D01* |
|||
Y024585D02* |
|||
Y024785D01* |
|||
X013911Y024585D02* |
|||
Y024785D01* |
|||
X012911Y023585D02* |
|||
Y023785D01* |
|||
X012711Y023585D02* |
|||
Y023785D01* |
|||
Y024585D02* |
|||
Y024785D01* |
|||
X012911Y024585D02* |
|||
Y024785D01* |
|||
X011911Y024585D02* |
|||
Y024785D01* |
|||
X011711Y024585D02* |
|||
Y024785D01* |
|||
X013512Y022598D02* |
|||
Y023583D01* |
|||
X016134Y022598D02* |
|||
Y023583D01* |
|||
X015118Y022598D02* |
|||
Y023583D01* |
|||
X015512Y022598D02* |
|||
Y023583D01* |
|||
X014118Y022598D02* |
|||
Y023583D01* |
|||
X014512Y022598D02* |
|||
Y023583D01* |
|||
X013118Y022598D02* |
|||
Y023583D01* |
|||
X012512Y022598D02* |
|||
Y023583D01* |
|||
X011291Y022598D02* |
|||
X018311D01* |
|||
X011112Y025289D02* |
|||
X011212D01* |
|||
Y025089D02* |
|||
Y025289D01* |
|||
X011112Y025089D02* |
|||
X011212D01* |
|||
X011112D02* |
|||
X011212Y025289D01* |
|||
Y025089D02* |
|||
Y025289D01* |
|||
X011112Y025189D02* |
|||
X011212Y025089D01* |
|||
X011112Y025189D02* |
|||
X011312D01* |
|||
X011112Y025389D02* |
|||
X011312Y025189D01* |
|||
X011112Y024989D02* |
|||
Y025389D01* |
|||
Y024989D02* |
|||
X011312Y025189D01* |
|||
X011112D02* |
|||
X011212Y025289D01* |
|||
X011112Y025189D02* |
|||
X011212Y025289D01* |
|||
X009173Y035641D02* |
|||
Y035247D01* |
|||
X009370* |
|||
X009436Y035313* |
|||
Y035444* |
|||
X009370Y035510* |
|||
X009173* |
|||
X009304D02* |
|||
X009436Y035641D01* |
|||
X009829Y035247D02* |
|||
X009567D01* |
|||
Y035641* |
|||
X009829* |
|||
X009567Y035444D02* |
|||
X009698D01* |
|||
X009960Y035247D02* |
|||
Y035510D01* |
|||
X010092Y035641* |
|||
X010223Y035510* |
|||
Y035247* |
|||
X010354Y035707D02* |
|||
X010616D01* |
|||
X011010Y035641D02* |
|||
X010748D01* |
|||
X011010Y035379* |
|||
Y035313* |
|||
X010944Y035247* |
|||
X010813* |
|||
X010748Y035313* |
|||
X009436Y036368D02* |
|||
X009173D01* |
|||
X009436Y036105* |
|||
Y036040* |
|||
X009370Y035974* |
|||
X009239* |
|||
X009173Y036040* |
|||
X009567Y036368D02* |
|||
X009698D01* |
|||
X009632* |
|||
Y035974* |
|||
X009567Y036040* |
|||
X009895Y036171D02* |
|||
X010157D01* |
|||
X010288Y036040D02* |
|||
X010354Y035974D01* |
|||
X010485* |
|||
X010551Y036040* |
|||
Y036302* |
|||
X010485Y036368* |
|||
X010354* |
|||
X010288Y036302* |
|||
Y036040* |
|||
X010682D02* |
|||
X010748Y035974D01* |
|||
X010879* |
|||
X010944Y036040* |
|||
Y036105* |
|||
X010879Y036171* |
|||
X010944Y036237* |
|||
Y036302* |
|||
X010879Y036368* |
|||
X010748* |
|||
X010682Y036302* |
|||
Y036237* |
|||
X010748Y036171* |
|||
X010682Y036105* |
|||
Y036040* |
|||
X010748Y036171D02* |
|||
X010879D01* |
|||
X011076D02* |
|||
X011338D01* |
|||
X011731Y036368D02* |
|||
X011469D01* |
|||
X011731Y036105* |
|||
Y036040* |
|||
X011666Y035974* |
|||
X011535* |
|||
X011469Y036040* |
|||
X011863D02* |
|||
X011928Y035974D01* |
|||
X012059* |
|||
X012125Y036040* |
|||
Y036302* |
|||
X012059Y036368* |
|||
X011928* |
|||
X011863Y036302* |
|||
Y036040* |
|||
X012256Y036368D02* |
|||
X012387D01* |
|||
X012322* |
|||
Y035974* |
|||
X012256Y036040* |
|||
X012584Y035974D02* |
|||
X012847D01* |
|||
Y036040* |
|||
X012584Y036302* |
|||
Y036368* |
|||
X009173Y036636D02* |
|||
Y037029D01* |
|||
X009370* |
|||
X009436Y036964* |
|||
Y036701* |
|||
X009370Y036636* |
|||
X009173* |
|||
X009567Y037029D02* |
|||
X009698D01* |
|||
X009632* |
|||
Y036767* |
|||
X009567* |
|||
X010026Y037160D02* |
|||
X010092D01* |
|||
X010157Y037095* |
|||
Y036767* |
|||
X009960* |
|||
X009895Y036832* |
|||
Y036964* |
|||
X009960Y037029* |
|||
X010157* |
|||
X010288D02* |
|||
X010420D01* |
|||
X010354* |
|||
Y036767* |
|||
X010288* |
|||
X010682D02* |
|||
X010813D01* |
|||
X010879Y036832* |
|||
Y037029* |
|||
X010682* |
|||
X010616Y036964* |
|||
X010682Y036898* |
|||
X010879* |
|||
X011010Y037029D02* |
|||
X011141D01* |
|||
X011076* |
|||
Y036636* |
|||
X011010* |
|||
X011731D02* |
|||
Y037029D01* |
|||
X011928* |
|||
X011994Y036964* |
|||
Y036898* |
|||
Y036832* |
|||
X011928Y036767* |
|||
X011731* |
|||
X012191Y037029D02* |
|||
X012322D01* |
|||
X012387Y036964* |
|||
Y036832* |
|||
X012322Y036767* |
|||
X012191* |
|||
X012125Y036832* |
|||
Y036964* |
|||
X012191Y037029* |
|||
X012584Y036767D02* |
|||
X012715D01* |
|||
X012781Y036832* |
|||
Y037029* |
|||
X012584* |
|||
X012519Y036964* |
|||
X012584Y036898* |
|||
X012781* |
|||
X012912Y036767D02* |
|||
Y037029D01* |
|||
Y036898* |
|||
X012978Y036832* |
|||
X013043Y036767* |
|||
X013109* |
|||
X013568Y036636D02* |
|||
Y037029D01* |
|||
X013371* |
|||
X013306Y036964* |
|||
Y036832* |
|||
X013371Y036767* |
|||
X013568* |
|||
X009173Y037428D02* |
|||
Y037756D01* |
|||
X009239Y037822* |
|||
X009370* |
|||
X009436Y037756* |
|||
Y037428* |
|||
X009567Y037953D02* |
|||
Y037559D01* |
|||
X009764* |
|||
X009829Y037625* |
|||
Y037756* |
|||
X009764Y037822* |
|||
X009567* |
|||
X009960Y037953D02* |
|||
Y037559D01* |
|||
X010157* |
|||
X010223Y037625* |
|||
Y037756* |
|||
X010157Y037822* |
|||
X009960* |
|||
X010616Y037494D02* |
|||
X010551Y037428D01* |
|||
X010420* |
|||
X010354Y037494* |
|||
Y037559* |
|||
X010420Y037625* |
|||
X010551* |
|||
X010616Y037690* |
|||
Y037756* |
|||
X010551Y037822* |
|||
X010420* |
|||
X010354Y037756* |
|||
X010944Y037822D02* |
|||
X010813D01* |
|||
X010748Y037756* |
|||
Y037625* |
|||
X010813Y037559* |
|||
X010944* |
|||
X011010Y037625* |
|||
Y037690* |
|||
X010748* |
|||
X011141Y037822D02* |
|||
Y037559D01* |
|||
X011338* |
|||
X011403Y037625* |
|||
Y037822* |
|||
X011535D02* |
|||
X011731D01* |
|||
X011797Y037756* |
|||
X011731Y037690* |
|||
X011600* |
|||
X011535Y037625* |
|||
X011600Y037559* |
|||
X011797* |
|||
X012125Y037822D02* |
|||
X011994D01* |
|||
X011928Y037756* |
|||
Y037625* |
|||
X011994Y037559* |
|||
X012125* |
|||
X012191Y037625* |
|||
Y037690* |
|||
X011928* |
|||
X027205Y031575D02* |
|||
Y031181D01* |
|||
X027402* |
|||
X027467Y031247* |
|||
Y031378* |
|||
X027402Y031444* |
|||
X027205* |
|||
X027336D02* |
|||
X027467Y031575D01* |
|||
X027598Y031247D02* |
|||
X027664Y031181D01* |
|||
X027795* |
|||
X027861Y031247* |
|||
Y031312* |
|||
X027795Y031378* |
|||
X027861Y031444* |
|||
Y031509* |
|||
X027795Y031575* |
|||
X027664* |
|||
X027598Y031509* |
|||
Y031444* |
|||
X027664Y031378* |
|||
X027598Y031312* |
|||
Y031247* |
|||
X027664Y031378D02* |
|||
X027795D01* |
|||
X027244Y030906D02* |
|||
Y030512D01* |
|||
X027441* |
|||
X027506Y030578* |
|||
Y030709* |
|||
X027441Y030774* |
|||
X027244* |
|||
X027375D02* |
|||
X027506Y030906D01* |
|||
X027638Y030512D02* |
|||
X027900D01* |
|||
Y030578* |
|||
X027638Y030840* |
|||
Y030906* |
|||
X027717Y033583D02* |
|||
Y033189D01* |
|||
X027913* |
|||
X027979Y033255* |
|||
Y033386* |
|||
X027913Y033451* |
|||
X027717* |
|||
X027848D02* |
|||
X027979Y033583D01* |
|||
X028372Y033189D02* |
|||
X028241Y033255D01* |
|||
X028110Y033386* |
|||
Y033517* |
|||
X028176Y033583* |
|||
X028307* |
|||
X028372Y033517* |
|||
Y033451* |
|||
X028307Y033386* |
|||
X028110* |
|||
X026535Y033543D02* |
|||
Y033150D01* |
|||
X026732* |
|||
X026798Y033215* |
|||
Y033347* |
|||
X026732Y033412* |
|||
X026535* |
|||
X026667D02* |
|||
X026798Y033543D01* |
|||
X027191Y033150D02* |
|||
X026929D01* |
|||
Y033347* |
|||
X027060Y033281* |
|||
X027126* |
|||
X027191Y033347* |
|||
Y033478* |
|||
X027126Y033543* |
|||
X026995* |
|||
X026929Y033478* |
|||
X027185Y030118D02* |
|||
Y029725D01* |
|||
X027382* |
|||
X027447Y029790* |
|||
Y029921* |
|||
X027382Y029987* |
|||
X027185* |
|||
X027316D02* |
|||
X027447Y030118D01* |
|||
X027579Y029790D02* |
|||
X027644Y029725D01* |
|||
X027775* |
|||
X027841Y029790* |
|||
Y029856* |
|||
X027775Y029921* |
|||
X027710* |
|||
X027775* |
|||
X027841Y029987* |
|||
Y030053* |
|||
X027775Y030118* |
|||
X027644* |
|||
X027579Y030053* |
|||
G54D26* |
|||
X012441Y025869D02* |
|||
Y026469D01* |
|||
Y026169* |
|||
X012841* |
|||
Y025869* |
|||
Y026469* |
|||
X013441D02* |
|||
X013041D01* |
|||
X013441Y026069* |
|||
Y025969* |
|||
X013341Y025869* |
|||
X013141* |
|||
X013041Y025969* |
|||
M02* |
@ -0,0 +1,69 @@ |
|||
%FSDAX24Y24*% |
|||
%MOIN*% |
|||
%SFA1B1*% |
|||
|
|||
%IPPOS*% |
|||
%AMD28* |
|||
4,1,8,0.005900,0.021700,-0.005900,0.021700,-0.015800,0.011800,-0.015800,-0.011800,-0.005900,-0.021700,0.005900,-0.021700,0.015800,-0.011800,0.015800,0.011800,0.005900,0.021700,0.0* |
|||
1,1,0.019800,0.005900,0.011800* |
|||
1,1,0.019800,-0.005900,0.011800* |
|||
1,1,0.019800,-0.005900,-0.011800* |
|||
1,1,0.019800,0.005900,-0.011800* |
|||
% |
|||
%AMD29* |
|||
4,1,8,0.021700,-0.005900,0.021700,0.005900,0.011800,0.015800,-0.011800,0.015800,-0.021700,0.005900,-0.021700,-0.005900,-0.011800,-0.015800,0.011800,-0.015800,0.021700,-0.005900,0.0* |
|||
1,1,0.019800,0.011800,-0.005900* |
|||
1,1,0.019800,0.011800,0.005900* |
|||
1,1,0.019800,-0.011800,0.005900* |
|||
1,1,0.019800,-0.011800,-0.005900* |
|||
% |
|||
G04~CAMADD=28~8~0.0~0.0~316.0~434.0~99.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~316.0~434.0* |
|||
%ADD28D28*% |
|||
G04~CAMADD=29~8~0.0~0.0~316.0~434.0~99.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~434.0~316.0* |
|||
%ADD29D29*% |
|||
%ADD37C,0.078900*% |
|||
%ADD38R,0.078900X0.078900*% |
|||
%ADD39C,0.047400*% |
|||
%LNuppsense-1*% |
|||
%LPD*% |
|||
G54D28* |
|||
X029055Y029921D03* |
|||
X028465D03* |
|||
X029055Y030669D03* |
|||
X028465D03* |
|||
X029035Y031378D03* |
|||
X028445D03* |
|||
G54D29* |
|||
X026811Y032677D03* |
|||
Y032087D03* |
|||
X028031Y032657D03* |
|||
Y032067D03* |
|||
G54D37* |
|||
X033433Y024185D03* |
|||
Y025185D03* |
|||
X034433Y024185D03* |
|||
Y025185D03* |
|||
X035433Y024185D03* |
|||
X017811Y025185D03* |
|||
Y024185D03* |
|||
X016811Y025185D03* |
|||
Y024185D03* |
|||
X011811D03* |
|||
X012811Y025185D03* |
|||
Y024185D03* |
|||
X013811Y025185D03* |
|||
Y024185D03* |
|||
X014811D03* |
|||
Y025185D03* |
|||
X015811Y024185D03* |
|||
Y025185D03* |
|||
G54D38* |
|||
X035433Y025185D03* |
|||
X011811D03* |
|||
G54D39* |
|||
X022362Y035248D03* |
|||
Y035748D03* |
|||
Y036248D03* |
|||
Y036748D03* |
|||
Y037248D03* |
|||
M02* |
@ -0,0 +1,76 @@ |
|||
%FSDAX24Y24*% |
|||
%MOIN*% |
|||
%SFA1B1*% |
|||
|
|||
%IPPOS*% |
|||
%ADD26C,0.010000*% |
|||
%LNuppsense-1*% |
|||
%LPD*% |
|||
G54D26* |
|||
X039370Y037402D02* |
|||
D01* |
|||
X039365Y037539* |
|||
X039350Y037676* |
|||
X039326Y037811* |
|||
X039293Y037944* |
|||
X039251Y038075* |
|||
X039199Y038202* |
|||
X039139Y038326* |
|||
X039070Y038445* |
|||
X038993Y038559* |
|||
X038909Y038667* |
|||
X038817Y038769* |
|||
X038718Y038865* |
|||
X038613Y038953* |
|||
X038502Y039034* |
|||
X038385Y039107* |
|||
X038264Y039171* |
|||
X038138Y039227* |
|||
X038009Y039274* |
|||
X037877Y039312* |
|||
X037742Y039341* |
|||
X037606Y039360* |
|||
X037469Y039369* |
|||
X037402Y039370* |
|||
X009843D02* |
|||
D01* |
|||
X009705Y039365* |
|||
X009568Y039350* |
|||
X009433Y039326* |
|||
X009300Y039293* |
|||
X009169Y039251* |
|||
X009042Y039199* |
|||
X008918Y039139* |
|||
X008799Y039070* |
|||
X008685Y038993* |
|||
X008577Y038909* |
|||
X008475Y038817* |
|||
X008379Y038718* |
|||
X008291Y038613* |
|||
X008210Y038502* |
|||
X008137Y038385* |
|||
X008073Y038264* |
|||
X008017Y038138* |
|||
X007970Y038009* |
|||
X007932Y037877* |
|||
X007903Y037742* |
|||
X007884Y037606* |
|||
X007875Y037469* |
|||
X007874Y037402* |
|||
Y019685D02* |
|||
X039370D01* |
|||
X023976Y036417D02* |
|||
X030374D01* |
|||
X023976D02* |
|||
Y039370D01* |
|||
X030374Y036417D02* |
|||
Y039370D01* |
|||
X039370Y019685D02* |
|||
Y037402D01* |
|||
X030374Y039370D02* |
|||
X037402D01* |
|||
X007874Y019685D02* |
|||
Y037402D01* |
|||
X009843Y039370D02* |
|||
X023976D01* |
|||
M02* |
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,185 @@ |
|||
%FSDAX24Y24*% |
|||
%MOIN*% |
|||
%SFA1B1*% |
|||
|
|||
%IPPOS*% |
|||
%AMD28* |
|||
4,1,8,0.005900,0.021700,-0.005900,0.021700,-0.015800,0.011800,-0.015800,-0.011800,-0.005900,-0.021700,0.005900,-0.021700,0.015800,-0.011800,0.015800,0.011800,0.005900,0.021700,0.0* |
|||
1,1,0.019800,0.005900,0.011800* |
|||
1,1,0.019800,-0.005900,0.011800* |
|||
1,1,0.019800,-0.005900,-0.011800* |
|||
1,1,0.019800,0.005900,-0.011800* |
|||
% |
|||
%AMD29* |
|||
4,1,8,0.021700,-0.005900,0.021700,0.005900,0.011800,0.015800,-0.011800,0.015800,-0.021700,0.005900,-0.021700,-0.005900,-0.011800,-0.015800,0.011800,-0.015800,0.021700,-0.005900,0.0* |
|||
1,1,0.019800,0.011800,-0.005900* |
|||
1,1,0.019800,0.011800,0.005900* |
|||
1,1,0.019800,-0.011800,0.005900* |
|||
1,1,0.019800,-0.011800,-0.005900* |
|||
% |
|||
G04~CAMADD=28~8~0.0~0.0~316.0~434.0~99.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~316.0~434.0* |
|||
%ADD28D28*% |
|||
G04~CAMADD=29~8~0.0~0.0~316.0~434.0~99.0~0.0~15~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~0.0~0~0.0~0.0~0.0~270.0~434.0~316.0* |
|||
%ADD29D29*% |
|||
%ADD30O,0.025700X0.065100*% |
|||
%ADD31R,0.025700X0.065100*% |
|||
%ADD32R,0.063100X0.090700*% |
|||
%ADD33R,0.108000X0.053000*% |
|||
%ADD34R,0.063000X0.108000*% |
|||
%ADD35R,0.019800X0.065100*% |
|||
%ADD36O,0.019800X0.065100*% |
|||
%ADD37C,0.078900*% |
|||
%ADD38R,0.078900X0.078900*% |
|||
%ADD39C,0.047400*% |
|||
%LNuppsense-1*% |
|||
%LPD*% |
|||
G54D28* |
|||
X029902Y023031D03* |
|||
X029311D03* |
|||
X008665Y029130D03* |
|||
X009255D03* |
|||
X008653Y028428D03* |
|||
X009244D03* |
|||
X008668Y023427D03* |
|||
X009259D03* |
|||
X008668Y022677D03* |
|||
X009259D03* |
|||
X009803Y026378D03* |
|||
X010394D03* |
|||
X009803Y027126D03* |
|||
X010394D03* |
|||
X009818Y020627D03* |
|||
X010409D03* |
|||
X009818Y021327D03* |
|||
X010409D03* |
|||
X033720Y033701D03* |
|||
X033130D03* |
|||
X016240Y034606D03* |
|||
X016831D03* |
|||
X032185Y022098D03* |
|||
X032776D03* |
|||
X032185Y022807D03* |
|||
X032776D03* |
|||
X033858Y027165D03* |
|||
X034449D03* |
|||
G54D29* |
|||
X009213Y033445D03* |
|||
Y034035D03* |
|||
X032598Y024126D03* |
|||
Y024717D03* |
|||
X020748Y035236D03* |
|||
Y034646D03* |
|||
X021417Y034154D03* |
|||
Y033563D03* |
|||
X018543Y034606D03* |
|||
Y035197D03* |
|||
X033425Y026437D03* |
|||
Y025846D03* |
|||
X032598Y026016D03* |
|||
Y025425D03* |
|||
X031535Y022157D03* |
|||
Y021567D03* |
|||
X030787Y022138D03* |
|||
Y021547D03* |
|||
X032677Y027146D03* |
|||
Y027736D03* |
|||
G54D30* |
|||
X009902Y032874D03* |
|||
X010660Y029660D03* |
|||
X010625Y023909D03* |
|||
G54D31* |
|||
X010157Y032874D03* |
|||
X010413D03* |
|||
X010669D03* |
|||
Y034606D03* |
|||
X010413D03* |
|||
X010167D03* |
|||
X009911D03* |
|||
X010404Y029660D03* |
|||
X010148D03* |
|||
X009893D03* |
|||
Y027928D03* |
|||
X010148D03* |
|||
X010404D03* |
|||
X010660D03* |
|||
X010369Y023909D03* |
|||
X010113D03* |
|||
X009857D03* |
|||
Y022177D03* |
|||
X010113D03* |
|||
X010369D03* |
|||
X010625D03* |
|||
G54D32* |
|||
X017696Y038752D03* |
|||
X019468D03* |
|||
Y035170D03* |
|||
X017696D03* |
|||
X033130Y038760D03* |
|||
X034902D03* |
|||
Y035177D03* |
|||
X033130D03* |
|||
G54D33* |
|||
X024096Y035123D03* |
|||
Y034343D03* |
|||
Y033553D03* |
|||
Y032773D03* |
|||
Y031973D03* |
|||
Y031193D03* |
|||
Y030413D03* |
|||
Y029623D03* |
|||
X030246Y029613D03* |
|||
Y030403D03* |
|||
Y031183D03* |
|||
X030236Y031973D03* |
|||
Y032763D03* |
|||
Y033543D03* |
|||
Y035123D03* |
|||
Y034343D03* |
|||
G54D34* |
|||
X025196Y028803D03* |
|||
X025976D03* |
|||
X026756D03* |
|||
X027556D03* |
|||
X028336D03* |
|||
X029136D03* |
|||
G54D35* |
|||
X031136Y025296D03* |
|||
X031333D03* |
|||
X031530D03* |
|||
X031727D03* |
|||
X031924D03* |
|||
Y023563D03* |
|||
X031727D03* |
|||
X031530D03* |
|||
X031333D03* |
|||
G54D36* |
|||
X031136Y023563D03* |
|||
G54D37* |
|||
X033433Y024185D03* |
|||
Y025185D03* |
|||
X034433Y024185D03* |
|||
Y025185D03* |
|||
X035433Y024185D03* |
|||
X017811Y025185D03* |
|||
Y024185D03* |
|||
X016811Y025185D03* |
|||
Y024185D03* |
|||
X011811D03* |
|||
X012811Y025185D03* |
|||
Y024185D03* |
|||
X013811Y025185D03* |
|||
Y024185D03* |
|||
X014811D03* |
|||
Y025185D03* |
|||
X015811Y024185D03* |
|||
Y025185D03* |
|||
G54D38* |
|||
X035433Y025185D03* |
|||
X011811D03* |
|||
G54D39* |
|||
X022362Y035248D03* |
|||
Y035748D03* |
|||
Y036248D03* |
|||
Y036748D03* |
|||
Y037248D03* |
|||
M02* |
@ -0,0 +1,142 @@ |
|||
%FSDAX24Y24*% |
|||
%MOIN*% |
|||
%SFA1B1*% |
|||
|
|||
%IPPOS*% |
|||
%ADD9500C,0.011800*% |
|||
%ADD9501C,0.027600*% |
|||
%ADD9502C,0.028000*% |
|||
%ADD9503C,0.039400*% |
|||
%LNuppsense-1*% |
|||
%LPD*% |
|||
G54D9500* |
|||
X032480Y023622D03* |
|||
X036417D03* |
|||
X038386D03* |
|||
X037402Y021654D03* |
|||
X035433D03* |
|||
X037402Y025591D03* |
|||
X036417Y027559D03* |
|||
X038386D03* |
|||
X037402Y029528D03* |
|||
X035433D03* |
|||
X033465D03* |
|||
X031673Y026756D03* |
|||
X030646D03* |
|||
X030512Y027559D03* |
|||
X028543D03* |
|||
X026575D03* |
|||
X024606D03* |
|||
X022638D03* |
|||
X020827Y027165D03* |
|||
X021654Y025591D03* |
|||
X019685D03* |
|||
X018701Y023622D03* |
|||
X020669D03* |
|||
X022638D03* |
|||
X024606D03* |
|||
X026457Y022756D03* |
|||
X025591Y021654D03* |
|||
X023622D03* |
|||
X021654D03* |
|||
X019685D03* |
|||
X017717D03* |
|||
X015748D03* |
|||
Y029528D03* |
|||
X018701Y027559D03* |
|||
X021654Y029528D03* |
|||
X025118Y029623D03* |
|||
X025591Y029528D03* |
|||
X027559D03* |
|||
X029528D03* |
|||
X029055Y030315D03* |
|||
Y031024D03* |
|||
X029528Y025591D03* |
|||
X028543Y023622D03* |
|||
X030512D03* |
|||
X029528Y021654D03* |
|||
X027559D03* |
|||
X025591Y025591D03* |
|||
X023622D03* |
|||
X014764Y023622D03* |
|||
X012795D03* |
|||
X011811Y021654D03* |
|||
X013780D03* |
|||
X010236Y024488D03* |
|||
X009724Y024528D03* |
|||
X012795Y027559D03* |
|||
X011811Y029528D03* |
|||
X013780D03* |
|||
X012795Y031496D03* |
|||
X014764D03* |
|||
Y035433D03* |
|||
X012795D03* |
|||
X010827D03* |
|||
X009843Y033465D03* |
|||
X009893Y031654D03* |
|||
X010236D03* |
|||
X010748Y032087D03* |
|||
X011811Y037402D03* |
|||
X013780D03* |
|||
X015748D03* |
|||
X017717D03* |
|||
X019685D03* |
|||
X021654D03* |
|||
X023622D03* |
|||
X022638Y034764D03* |
|||
X021890Y034173D03* |
|||
X019685Y033465D03* |
|||
X017717D03* |
|||
X016732Y031496D03* |
|||
Y035433D03* |
|||
X022638Y031496D03* |
|||
X029055Y031890D03* |
|||
X026575Y035433D03* |
|||
X032480D03* |
|||
X031496Y033465D03* |
|||
X032480Y031496D03* |
|||
X034449D03* |
|||
X036417D03* |
|||
X038386D03* |
|||
X037402Y033465D03* |
|||
X035433D03* |
|||
X034528Y033701D03* |
|||
X036417Y035433D03* |
|||
X038386D03* |
|||
X037402Y037402D03* |
|||
X035433D03* |
|||
X033465D03* |
|||
X031496D03* |
|||
G54D9501* |
|||
X022362Y035248D03* |
|||
Y035748D03* |
|||
Y036248D03* |
|||
Y036748D03* |
|||
Y037248D03* |
|||
G54D9502* |
|||
X026181Y034331D03* |
|||
X026220Y035118D03* |
|||
X029213Y033504D03* |
|||
X029134Y032756D03* |
|||
G54D9503* |
|||
X033433Y024185D03* |
|||
Y025185D03* |
|||
X034433D03* |
|||
Y024185D03* |
|||
X035433D03* |
|||
Y025185D03* |
|||
X017811D03* |
|||
Y024185D03* |
|||
X016811D03* |
|||
Y025185D03* |
|||
X015811D03* |
|||
Y024185D03* |
|||
X014811D03* |
|||
X013811D03* |
|||
X012811D03* |
|||
X011811D03* |
|||
Y025185D03* |
|||
X012811D03* |
|||
X013811D03* |
|||
X014811D03* |
|||
M02* |
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1 @@ |
|||
Record=TopLevelDocument|FileName=uppsense.SchDoc |
Binary file not shown.
@ -1,8 +1,30 @@ |
|||
(module BPW34FA (layer F.Cu) (tedit 58FDD900) |
|||
(fp_text reference REF** (at 0 0.5) (layer F.SilkS) |
|||
(module BPW34FA (layer F.Cu) (tedit 58FDDC7C) |
|||
(fp_text reference REF** (at 0 3.81) (layer F.SilkS) |
|||
(effects (font (size 1 1) (thickness 0.15))) |
|||
) |
|||
(fp_text value BPW34FA (at 0 -0.5) (layer F.Fab) |
|||
(fp_text value BPW34FA (at 0 -3.81) (layer F.Fab) |
|||
(effects (font (size 1 1) (thickness 0.15))) |
|||
) |
|||
(fp_line (start -0.8 -1.2) (end -0.6 -1.1) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -0.8 -1.2) (end -0.8 -1.5) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -0.5 -0.8) (end -0.5 -1) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -0.5 -1) (end -0.5 -0.8) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -0.5 -0.8) (end -0.3 -0.7) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -0.5 -0.8) (end 0.3 -1.3) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -0.8 -1.2) (end 0 -1.7) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -1.1 -0.9) (end -1.1 0.9) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -1.1 0) (end 0.6 0.9) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start 0.6 0) (end 0.6 0.9) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start 0.6 -0.9) (end 0.6 0) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -1.1 0) (end 0.6 -0.9) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -1.6 0) (end 1.5 0) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start 1.5 0) (end 1.6 0) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start 2 1) (end 2 2) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start 2 -2) (end 2 -1) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -2 1) (end -2 2) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -2 -2) (end 2 -2) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -2 2) (end 2 2) (layer F.SilkS) (width 0.15)) |
|||
(fp_line (start -2 -2) (end -2 -1) (layer F.SilkS) (width 0.15)) |
|||
(pad 1 thru_hole circle (at -2.5 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) |
|||
(pad 2 thru_hole circle (at 2.5 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) |
|||
) |
|||
|
@ -0,0 +1,42 @@ |
|||
# Created by https://www.gitignore.io/api/c++ |
|||
|
|||
### C++ ### |
|||
# Prerequisites |
|||
*.d |
|||
|
|||
# Compiled Object files |
|||
*.slo |
|||
*.lo |
|||
*.o |
|||
*.obj |
|||
|
|||
# Precompiled Headers |
|||
*.gch |
|||
*.pch |
|||
|
|||
# Compiled Dynamic libraries |
|||
*.so |
|||
*.dylib |
|||
*.dll |
|||
|
|||
# Fortran module files |
|||
*.mod |
|||
*.smod |
|||
|
|||
# Compiled Static libraries |
|||
*.lai |
|||
*.la |
|||
*.a |
|||
*.lib |
|||
|
|||
# Executables |
|||
*.exe |
|||
*.out |
|||
*.app |
|||
out/ |
|||
|
|||
# Individual Setting |
|||
Makefile-user.mk |
|||
documentation/ |
|||
|
|||
# End of https://www.gitignore.io/api/c++ |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
@ -1,10 +0,0 @@ |
|||
Section| Description| Start (hex)| End (hex)|Used space |
|||
------------------------------------------------------------------------------ |
|||
data| Initialized Data (RAM)| 3FFE8000| 3FFE8389| 905 |
|||
rodata| ReadOnly Data (RAM)| 3FFE8390| 3FFE8D6C| 2524 |
|||
bss| Uninitialized Data (RAM)| 3FFE8D70| 3FFEF160| 25584 |
|||
text| Cached Code (IRAM)| 40100000| 401063A8| 25512 |
|||
irom0_text| Uncached Code (SPI)| 4020A000| 4023964C| 194124 |
|||
Total Used RAM : 29013 |
|||
Free RAM : 52907 |
|||
Free IRam : 7274 |
@ -1,10 +0,0 @@ |
|||
Section| Description| Start (hex)| End (hex)|Used space |
|||
------------------------------------------------------------------------------ |
|||
data| Initialized Data (RAM)| 3FFE8000| 3FFE8389| 905 |
|||
rodata| ReadOnly Data (RAM)| 3FFE8390| 3FFE8D50| 2496 |
|||
bss| Uninitialized Data (RAM)| 3FFE8D50| 3FFEF108| 25528 |
|||
text| Cached Code (IRAM)| 40100000| 401063A8| 25512 |
|||
irom0_text| Uncached Code (SPI)| 4020A000| 40239584| 193924 |
|||
Total Used RAM : 28929 |
|||
Free RAM : 52991 |
|||
Free IRam : 7274 |
File diff suppressed because it is too large
@ -0,0 +1,24 @@ |
|||
#####################################################################
|
|||
#### Please don't change this file. Use Makefile-user.mk instead ####
|
|||
#####################################################################
|
|||
# Including user Makefile.
|
|||
# Should be used to set project-specific parameters
|
|||
include ./Makefile-user.mk |
|||
|
|||
# Important parameters check.
|
|||
# We need to make sure SMING_HOME and ESP_HOME variables are set.
|
|||
# You can use Makefile-user.mk in each project or use enviromental variables to set it globally.
|
|||
|
|||
ifndef SMING_HOME |
|||
$(error SMING_HOME is not set. Please configure it in Makefile-user.mk) |
|||
endif |
|||
ifndef ESP_HOME |
|||
$(error ESP_HOME is not set. Please configure it in Makefile-user.mk) |
|||
endif |
|||
|
|||
# Include main Sming Makefile
|
|||
ifeq ($(RBOOT_ENABLED), 1) |
|||
include $(SMING_HOME)/Makefile-rboot.mk |
|||
else |
|||
include $(SMING_HOME)/Makefile-project.mk |
|||
endif |
@ -0,0 +1,184 @@ |
|||
/*
|
|||
* ADS101x.cpp |
|||
* |
|||
* Created on: Jul 20, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#include "ads101x.h" |
|||
#include <SmingCore/Wire.h> |
|||
|
|||
#include <SmingCore/SmingCore.h> |
|||
|
|||
namespace rijnfel { |
|||
|
|||
namespace ads { |
|||
|
|||
static const uint16_t OS_POS = 15; |
|||
static const uint16_t OS_MASK = 1 << OS_POS; |
|||
static const uint16_t MUX_POS = 12; |
|||
static const uint16_t MUX_MASK = 7 << MUX_POS; |
|||
static const uint16_t PGA_POS = 9; |
|||
static const uint16_t PGA_MASK = 7 << PGA_POS; |
|||
static const uint16_t MODE_POS = 8; |
|||
static const uint16_t MODE_MASK = 1 << MODE_POS; |
|||
static const uint16_t DR_POS = 5; |
|||
static const uint16_t DR_MASK = 7 << DR_POS; |
|||
|
|||
#define OS_BIT(val) ((val << OS_POS) & OS_MASK) |
|||
#define MUX_BIT(val) ((val << MUX_POS) & MUX_MASK) |
|||
#define PGA_BIT(val) ((val << PGA_POS) & PGA_MASK) |
|||
#define MODE_BIT(val) ((val << MODE_POS) & MODE_MASK) |
|||
#define DR_BIT(val) ((val << DR_POS) & DR_MASK) |
|||
|
|||
static const uint8_t REGISTER_CONVERSION = 0; |
|||
static const uint8_t REGISTER_CONFIG = 1; |
|||
static const uint8_t REGISTER_LOW_TRESHOLD = 2; |
|||
static const uint8_t REGISTER_HIGH_TRESHOLD = 2; |
|||
|
|||
cADS101x::cADS101x(uint8_t i_address) : |
|||
m_address(i_address), m_readyPin(0) { |
|||
SetDefaults(); |
|||
} |
|||
cADS101x::cADS101x(uint8_t i_readyPin, uint8_t i_address) : |
|||
m_address(i_address), m_readyPin(i_readyPin) { |
|||
SetDefaults(); |
|||
} |
|||
|
|||
void cADS101x::SetOneShot(bool i_oneShot) { |
|||
m_oneShot = i_oneShot; |
|||
} |
|||
|
|||
void cADS101x::SetGain(enum eGainAmplifier i_gain) { |
|||
m_gain = i_gain; |
|||
} |
|||
|
|||
void cADS101x::SetMux(enum eInputMux i_mux) { |
|||
m_mux = i_mux; |
|||
} |
|||
|
|||
void cADS101x::SetSampleSpeed(enum eSampleSpeed i_sampleSpeed) { |
|||
m_sampleSpeed = i_sampleSpeed; |
|||
} |
|||
|
|||
void cADS101x::WaitSample(void) { |
|||
OneShot(); |
|||
uint16 readSettings = 0; |
|||
do { |
|||
readSettings = GetSettings(); |
|||
} while (readSettings & OS_MASK != 1); |
|||
} |
|||
|
|||
bool cADS101x::IsReady(void) { |
|||
return (GetSettings() & OS_MASK); |
|||
} |
|||
|
|||
uint16_t cADS101x::CreateSettings(uint8_t start) { |
|||
return OS_BIT(start) | MUX_BIT(m_mux) | PGA_BIT(m_gain) | MODE_BIT(m_oneShot) | DR_BIT(m_sampleSpeed); |
|||
} |
|||
|
|||
void cADS101x::WriteSettings(uint16_t i_settings) { |
|||
#ifdef DUMMY_ADC |
|||
return; |
|||
#else |
|||
Wire.beginTransmission(m_address); |
|||
Wire.write((uint8_t) REGISTER_CONFIG); |
|||
Wire.write((uint8_t) (i_settings >> 8)); |
|||
Wire.write((uint8_t) (i_settings & 0xFF)); |
|||
int8_t ret = Wire.endTransmission(); |
|||
if (ret) { |
|||
//Serial.printf("Err writing settings ret: %d\n\r", ret);
|
|||
} |
|||
#endif |
|||
} |
|||
|
|||
uint16_t cADS101x::ReadRegister(uint8_t i_register) { |
|||
#ifdef DUMMY_ADC |
|||
return 1; |
|||
#else |
|||
Wire.beginTransmission(m_address); |
|||
Wire.write(i_register); |
|||
Wire.endTransmission(); |
|||
Wire.requestFrom(m_address, static_cast<uint8_t>(2)); |
|||
return ((Wire.read() << 8) | (Wire.read())); |
|||
#endif |
|||
} |
|||
|
|||
void cADS101x::OneShot(void) { |
|||
//if (m_oneShot) {
|
|||
uint16_t settings = CreateSettings(1); |
|||
WriteSettings(settings); |
|||
//}
|
|||
} |
|||
|
|||
uint16_t cADS101x::GetSettings(void) { |
|||
#ifdef DUMMY_ADC |
|||
return CreateSettings(0); |
|||
#else |
|||
return ReadRegister(REGISTER_CONFIG); |
|||
#endif |
|||
} |
|||
ads_voltage_t cADS101x::ConvertSample(ads_sample_t & sample) { |
|||
//Raw sample is in (parts of) millivolts, go to micro to remove fractions
|
|||
ads_voltage_t returnType = (sample.rawSample >> 4); //Multiply for extra precision
|
|||
switch (sample.gain) { |
|||
case eGainAmplifier::FSR_0_256: |
|||
//one lsb is 0.125 mv = 125 uv
|
|||
returnType *= 125; |
|||
break; |
|||
case eGainAmplifier::FSR_0_512: |
|||
//one lsb is 0.25 mv = 250 uv
|
|||
returnType *= 250; |
|||
break; |
|||
case eGainAmplifier::FSR_1_024: |
|||
//one lsb is 0.5 mv = 500 uv
|
|||
returnType *= 500; |
|||
break; |
|||
case eGainAmplifier::FSR_2_048: |
|||
//one lsb is 1 mv = 1000 uv
|
|||
returnType *= 1000; |
|||
break; |
|||
case eGainAmplifier::FSR_4_096: |
|||
//one lsb is 2 mv = 2000 uv
|
|||
returnType *= 2000; |
|||
break; |
|||
case eGainAmplifier::FSR_6_144: |
|||
//one lsb is 3 mv = 3000 uv
|
|||
returnType *= 3000; |
|||
break; |
|||
} |
|||
return returnType / 1000; |
|||
} |
|||
|
|||
ads_sample_t cADS101x::RawSample(void) { |
|||
#ifdef DUMMY_ADC |
|||
ads_sample_t sample; |
|||
sample.gain = m_gain; |
|||
sample.mux = m_mux; |
|||
sample.rawSample = m_counter; |
|||
m_counter += 16; |
|||
return sample; |
|||
#else |
|||
OneShot(); |
|||
ads_sample_t sample; |
|||
sample.rawSample = ReadRegister(REGISTER_CONVERSION); |
|||
sample.gain = m_gain; |
|||
sample.mux = m_mux; |
|||
m_latestSample = sample; |
|||
#endif |
|||
return sample; |
|||
} |
|||
|
|||
void cADS101x::SetDefaults(void) { |
|||
m_mux = eInputMux::AIN_0_1; |
|||
m_gain = eGainAmplifier::FSR_2_048; |
|||
m_sampleSpeed = eSampleSpeed::SPS_1600; |
|||
m_oneShot = true; |
|||
#ifdef DUMMY_ADC |
|||
m_counter = 0; |
|||
#endif |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,76 @@ |
|||
/*
|
|||
* ADS101x.h |
|||
* |
|||
* Created on: Jul 20, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_ADS101X_H_ |
|||
#define APP_ADS101X_H_ |
|||
|
|||
#include <stdint.h> |
|||
#include <hardware.h> |
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
|
|||
namespace rijnfel { |
|||
|
|||
namespace ads { |
|||
|
|||
//Voltage in uV
|
|||
typedef int32_t ads_voltage_t; |
|||
|
|||
enum eInputMux { |
|||
AIN_0_1, AIN_0_3, AIN_1_3, AIN_2_3, AIN_0, AIN_1, AIN_2, AIN_3 |
|||
}; |
|||
enum eGainAmplifier { |
|||
FSR_6_144, FSR_4_096, FSR_2_048, FSR_1_024, FSR_0_512, FSR_0_256 |
|||
}; |
|||
enum eSampleSpeed { |
|||
SPS_128, SPS_250, SPS_490, SPS_920, SPS_1600, SPS_2400, SPS_3300 |
|||
}; |
|||
|
|||
struct ads_sample_t { |
|||
uint16_t rawSample; |
|||
enum eInputMux mux; |
|||
enum eGainAmplifier gain; |
|||
}; |
|||
|
|||
class cADS101x: public cADC<ads_sample_t, ads_voltage_t> { |
|||
public: |
|||
|
|||
cADS101x(uint8_t i_address = 0x48); |
|||
cADS101x(uint8_t i_readyPin, uint8_t i_address = 0x48); |
|||
|
|||
void SetOneShot(bool i_oneShot = true); |
|||
void SetGain(enum eGainAmplifier i_gain); |
|||
void SetMux(enum eInputMux i_mux); |
|||
void SetSampleSpeed(enum eSampleSpeed i_speed); |
|||
virtual void WaitSample(void); |
|||
virtual bool IsReady(void); |
|||
uint16_t GetSettings(void); |
|||
|
|||
virtual ads_sample_t RawSample(void); |
|||
virtual ads_voltage_t ConvertSample(ads_sample_t & sample); |
|||
virtual ~cADS101x() { |
|||
|
|||
} |
|||
private: |
|||
uint16_t CreateSettings(uint8_t i_startSample); |
|||
uint16_t ReadRegister(uint8_t i_register); |
|||
void WriteSettings(uint16_t i_settings); |
|||
void SetDefaults(void); |
|||
void OneShot(void); |
|||
private: |
|||
uint8_t m_address, m_readyPin; |
|||
bool m_oneShot; |
|||
enum eInputMux m_mux; |
|||
enum eGainAmplifier m_gain; |
|||
enum eSampleSpeed m_sampleSpeed; |
|||
private: |
|||
#ifdef DUMMY_ADC |
|||
uint16_t m_counter; |
|||
#endif |
|||
}; |
|||
} |
|||
} |
|||
#endif /* APP_ADS101X_H_ */ |
@ -0,0 +1,42 @@ |
|||
/*
|
|||
* ads_converter.cpp |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#include "ads_converter.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
cAdsConverter::cAdsConverter(cADC<ads::ads_sample_t, int32_t> & i_adc) : |
|||
m_adc(i_adc), m_rawSamples(this) { |
|||
// TODO Auto-generated constructor stub
|
|||
|
|||
} |
|||
|
|||
cAdsConverter::~cAdsConverter() { |
|||
// TODO Auto-generated destructor stub
|
|||
} |
|||
|
|||
void cAdsConverter::ReceiveCallback(void* i_data, cDataReceiver* i_provider) { |
|||
//We dont car for the provider
|
|||
cDoubleBuffer<ads::ads_sample_t> * i_adcBuffer = static_cast<cDoubleBuffer<ads::ads_sample_t>*>(i_data); |
|||
ads::ads_sample_t * buf = &i_adcBuffer->GetReadyBuffer()[0]; |
|||
if (buf != NULL) { |
|||
sSizedArray arr; |
|||
int pos = buf->mux - ads::eInputMux::AIN_0; |
|||
int64_t average = 0; |
|||
int size = i_adcBuffer->GetSize(); |
|||
arr.size = size; |
|||
arr.array = new uint32_t[size]; |
|||
for (int i = 0; i < size; i++) { |
|||
arr.array[i] = m_adc.ConvertSample(buf[i]); |
|||
} |
|||
m_convertedSamples[pos].Push(static_cast<void *>(&arr)); |
|||
delete arr.array; |
|||
} |
|||
} |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
@ -0,0 +1,30 @@ |
|||
/*
|
|||
* ads_converter.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_ADS_CONVERTER_H_ |
|||
#define APP_ADS_CONVERTER_H_ |
|||
|
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
#include "ads101x.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
class cAdsConverter: public cDataSink { |
|||
public: |
|||
cAdsConverter(cADC<ads::ads_sample_t, int32_t> & i_adc); |
|||
virtual void ReceiveCallback(void * i_data, cDataReceiver * i_provider); |
|||
// Every channel has its own provider, after this we can not distinguish anymore
|
|||
cDataProvider m_convertedSamples[4]; |
|||
cDataReceiver m_rawSamples; |
|||
virtual ~cAdsConverter(); |
|||
private: |
|||
cADC<ads::ads_sample_t, int32_t> & m_adc; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_ADS_CONVERTER_H_ */ |
@ -0,0 +1,117 @@ |
|||
#include <user_config.h> |
|||
#include <hardware.h> |
|||
#include <SmingCore/SmingCore.h> |
|||
#include <SmingCore/HardwareSerial.h> |
|||
#include <application.h> |
|||
#include <stdint.h> |
|||
|
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
#include "excitation_light.h" |
|||
#include "ads101x.h" |
|||
#include "ads_converter.h" |
|||
#include "web_interface.h" |
|||
#include "signal_process.h" |
|||
#include "sensor_hub.h" |
|||
|
|||
#include "tests.h" |
|||
|
|||
using namespace rijnfel; |
|||
|
|||
void STADisconnect(String ssid, uint8_t ssid_len, uint8_t bssid[6], uint8_t reason); |
|||
void STAGotIP(IPAddress ip, IPAddress mask, IPAddress gateway); |
|||
|
|||
cAdsConverter * adsConverter; |
|||
|
|||
//We want different signal processing for the channels
|
|||
cSignalProcess signalProcess[2]; |
|||
Timer procTimer; |
|||
Timer rectangleTimer; |
|||
uint8_t channel = 0; |
|||
light::cExcitationLight mylight; |
|||
cSensorHub hub(HUB_PERIOD); |
|||
ads::cADS101x ads1015(0, ADC_ADDRESS); |
|||
|
|||
void ChangeSampleChannel(int channel) { |
|||
if (channel > 0 && channel < 5) { |
|||
hub.Stop(); |
|||
ads1015.SetMux(static_cast<ads::eInputMux>(ads::eInputMux::AIN_0 + channel - 1)); |
|||
hub.Start(); |
|||
} |
|||
} |
|||
|
|||
void updateSensorHub() { |
|||
WDT.alive(); |
|||
hub.Update(); |
|||
} |
|||
|
|||
void updateRectangle(){ |
|||
mylight.RectangleUpdate(); |
|||
} |
|||
|
|||
void ready() { |
|||
WifiAccessPoint.config("Sensus", "", AUTH_OPEN, false, 3); |
|||
hub.Start(); |
|||
} |
|||
|
|||
void init() { |
|||
spiffs_mount(); |
|||
Serial.begin(460800); |
|||
system_update_cpu_freq(SYS_CPU_160MHZ); |
|||
wifi_set_sleep_type(NONE_SLEEP_T); |
|||
|
|||
System.onReady(ready); |
|||
|
|||
WifiAccessPoint.setIP(IPAddress(10, 0, 0, 1)); |
|||
WifiAccessPoint.enable(true); |
|||
|
|||
Wire.pins(4, 5); |
|||
Wire.begin(); |
|||
//SET higher CPU freq & disable wifi sleep
|
|||
|
|||
// Turn off LED for measurements
|
|||
hub.Stop(); |
|||
pinMode(LED_PIN, OUTPUT); |
|||
digitalWrite(LED_PIN, 1); |
|||
ads1015.SetMux(ads::eInputMux::AIN_0); |
|||
ads1015.SetSampleSpeed(ads::eSampleSpeed::SPS_3300); |
|||
ads1015.SetGain(ads::eGainAmplifier::FSR_4_096); |
|||
ads1015.SetOneShot(false); |
|||
hub.SetAdc(&ads1015); |
|||
adsConverter = new cAdsConverter(ads1015); |
|||
|
|||
cSensorSettings<ads::ads_sample_t> * adcSettings; |
|||
adcSettings = new cSensorSettings<ads::ads_sample_t>(ADC_TIMEBASE, ADC_PERIOD); |
|||
adcSettings->m_samplesProvider.Connect(&adsConverter->m_rawSamples); |
|||
hub.SetAdcSettings(adcSettings); |
|||
|
|||
// Channel one and two are getting processed
|
|||
adsConverter->m_convertedSamples[0].Connect(&signalProcess[0].m_incommingData); |
|||
adsConverter->m_convertedSamples[1].Connect(&signalProcess[1].m_incommingData); |
|||
signalProcess[0].m_processedData.Connect(&cWebInterface::GetInstance()->m_adc_0); |
|||
signalProcess[1].m_processedData.Connect(&cWebInterface::GetInstance()->m_adc_1); |
|||
// Channel three and four are not
|
|||
adsConverter->m_convertedSamples[2].Connect(&cWebInterface::GetInstance()->m_adc_2); |
|||
adsConverter->m_convertedSamples[3].Connect(&cWebInterface::GetInstance()->m_adc_3); |
|||
|
|||
WifiEvents.onStationDisconnect(STADisconnect); |
|||
WifiEvents.onStationGotIP(STAGotIP); |
|||
cWebInterface::GetInstance()->StartServer(); |
|||
mylight.SetCurrent(1000); |
|||
mylight.RectangleUpdate(); |
|||
//rectangleTimer.initializeUs(RECT_PERIOD, updateRectangle).start();
|
|||
procTimer.initializeMs(HUB_PERIOD, updateSensorHub).start(); |
|||
} |
|||
|
|||
void STADisconnect(String ssid, uint8_t ssid_len, uint8_t bssid[6], uint8_t reason) { |
|||
if (!WifiAccessPoint.isEnabled()) { |
|||
WifiStation.disconnect(); |
|||
WifiAccessPoint.enable(true); |
|||
WifiStation.connect(); |
|||
} |
|||
} |
|||
|
|||
void STAGotIP(IPAddress ip, IPAddress mask, IPAddress gateway) { |
|||
if (WifiAccessPoint.isEnabled()) { |
|||
WifiAccessPoint.enable(false); |
|||
} |
|||
} |
@ -0,0 +1,137 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: dac101c085.cpp
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 08.08.2017
|
|||
//
|
|||
// Description: Small simple driver for the TI DAC101C085.
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
//-------------------------------------Libraries------------------------------------------------------------------------------
|
|||
#include "dac101c085.h" |
|||
#include <SmingCore/Wire.h> |
|||
#include <SmingCore/SmingCore.h> |
|||
|
|||
//-------------------------------------Namespaces-----------------------------------------------------------------------------
|
|||
namespace rijnfel { |
|||
namespace dac { |
|||
|
|||
//-------------------------------------Constructor----------------------------------------------------------------------------
|
|||
cDAC101C085::cDAC101C085(uint8_t i_number, uint8_t i_address): |
|||
m_dac_number(i_number), m_address(i_address) |
|||
{} |
|||
|
|||
//-------------------------------------Destructor-----------------------------------------------------------------------------
|
|||
cDAC101C085::~cDAC101C085() |
|||
{} |
|||
|
|||
//-------------------------------------checkDev-------------------------------------------------------------------------------
|
|||
uint8_t cDAC101C085::CheckDev() |
|||
{ |
|||
// Vars
|
|||
byte error = 0; |
|||
// Action
|
|||
#if DEBUG_LEVEL == 1 |
|||
Serial.print("DAC: Scanning address 0x"); |
|||
Serial.print(m_address, HEX); |
|||
Serial.println("."); |
|||
#endif |
|||
Wire.beginTransmission(m_address); |
|||
error = Wire.endTransmission(); |
|||
return I2CError(error); // Pass to error parser
|
|||
} |
|||
|
|||
//-------------------------------------changeSettings-------------------------------------------------------------------------
|
|||
uint8_t cDAC101C085::ChangeSettings(enum eOpMode mode, uint16_t val) |
|||
{ |
|||
// Vars
|
|||
uint16_t settings = 0; |
|||
// Action
|
|||
if( val > 1023) |
|||
return 0; // This is illegal
|
|||
settings = val << D_BITS_POS; // First two bits have to be 0
|
|||
switch(mode) |
|||
{ |
|||
case NORMAL: |
|||
settings += (0b00 << PD_BITS_POS); |
|||
break; |
|||
case PULL_DOWN_2K5: |
|||
settings += (0b01 << PD_BITS_POS); |
|||
break; |
|||
case PULL_DOWN_100K: |
|||
settings += (0b10 << PD_BITS_POS); |
|||
break; |
|||
case HIGH_IMPEDANCE: |
|||
settings += (0b11 << PD_BITS_POS); |
|||
break; |
|||
|
|||
} |
|||
return WriteSettings(settings); |
|||
} |
|||
|
|||
//-------------------------------------WriteSettings--------------------------------------------------------------------------
|
|||
uint8_t cDAC101C085::WriteSettings(uint16_t settings) |
|||
{ |
|||
// Vars
|
|||
uint8_t error = 0; |
|||
// Action
|
|||
Wire.beginTransmission(m_address); |
|||
Wire.write( (uint8_t) (settings >> 8) ); // Most significant byte
|
|||
Wire.write( (uint8_t) (settings & 0xFF) ); // Least significant byte
|
|||
error = Wire.endTransmission(); |
|||
return I2CError(error); // Pass to error parser
|
|||
} |
|||
|
|||
//-------------------------------------ReadSettings--------------------------------------------------------------------------
|
|||
uint16_t cDAC101C085::ReadSettings(void) |
|||
{ |
|||
// Vars
|
|||
uint8_t number = 0; |
|||
uint16_t settings = 0; |
|||
|
|||
// Action
|
|||
number = Wire.requestFrom(m_address, (uint8_t) 2); |
|||
if( number != 2) |
|||
{ |
|||
Serial.print("DAC: Trying to read 2 bytes from 0x"); |
|||
Serial.print(m_address, HEX); |
|||
Serial.println(" went wrong."); |
|||
return 0; |
|||
} |
|||
settings = (uint16_t) Wire.read() << 8; // Most significant byte
|
|||
settings += (uint16_t) Wire.read(); // Least significant byte
|
|||
return settings; |
|||
} |
|||
|
|||
//-------------------------------------I2CError-------------------------------------------------------------------------------
|
|||
uint8_t cDAC101C085::I2CError(uint8_t error) |
|||
{ |
|||
switch(error) |
|||
{ |
|||
case 0: |
|||
#if DEBUG_LEVEL == 1 |
|||
Serial.println("DAC: I2C device found. Transmission successful."); |
|||
#endif |
|||
break; |
|||
case 2: |
|||
Serial.print("DAC: Received NACK after address from 0x."); |
|||
Serial.print(m_address, HEX); |
|||
Serial.println("."); |
|||
break; |
|||
case 3: |
|||
Serial.print("DAC: Received NACK after data from 0x."); |
|||
Serial.print(m_address, HEX); |
|||
Serial.println("."); |
|||
break; |
|||
case 4: |
|||
Serial.print("DAC: Unknow error at 0x."); |
|||
Serial.print(m_address, HEX); |
|||
Serial.println("."); |
|||
break; |
|||
} |
|||
return ( (error == 0) ? 1 : 0 ); |
|||
} |
|||
|
|||
} |
|||
} |
@ -0,0 +1,72 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: dac101c085.h
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 08.08.2017
|
|||
//
|
|||
// Description: Small simple driver for the TI DAC101C085.
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
#ifndef APP_DAC101C085_H_ |
|||
#define APP_DAC101C085_H_ |
|||
|
|||
//-------------------------------------Libraries------------------------------------------------------------------------------
|
|||
#include <stdint.h> |
|||
#include <defines.h> |
|||
|
|||
//-------------------------------------Defines--------------------------------------------------------------------------------
|
|||
#define PD_BITS_POS 13 // Position of power down bits
|
|||
#define D_BITS_POS 2 // Position of data bits
|
|||
|
|||
//-------------------------------------Namespaces-----------------------------------------------------------------------------
|
|||
namespace rijnfel { |
|||
namespace dac { |
|||
|
|||
//-------------------------------------Enums----------------------------------------------------------------------------------
|
|||
/** Represents the operational mode of the DAC.
|
|||
*/ |
|||
enum eOpMode {NORMAL, PULL_DOWN_2K5, PULL_DOWN_100K, HIGH_IMPEDANCE}; |
|||
|
|||
//-------------------------------------cDAC101085-----------------------------------------------------------------------------
|
|||
/** Small simple driver for the TI DAC101C085.
|
|||
*/ |
|||
class cDAC101C085 |
|||
{ |
|||
public: |
|||
/** @brief Instantiate DAC, assign a number and an address.
|
|||
* @param i_dac_number Number of the DAC. |
|||
* @param i_address I2C address of this DAC. |
|||
*/ |
|||
cDAC101C085(uint8_t i_dac_number, uint8_t i_address); // Constructor
|
|||
|
|||
/** @brief Free DAC, is currently doing nothing.
|
|||
*/ |
|||
~cDAC101C085(); // Destructor
|
|||
|
|||
/** @brief Check if the device is answering on the bus.
|
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t CheckDev(); // Check if device is available and alive
|
|||
|
|||
/** @brief Read out 16 bit register of the DAC.
|
|||
* @retval uint16_t 16 bit read from the DAC. |
|||
*/ |
|||
uint16_t ReadSettings(void); |
|||
|
|||
/** @brief Write new setting to DAC register.
|
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t ChangeSettings(enum eOpMode mode, uint16_t val); |
|||
|
|||
private: |
|||
uint8_t m_dac_number; // Which of the dacs is it?
|
|||
uint8_t m_address; |
|||
uint8_t WriteSettings(uint16_t settings); |
|||
uint8_t I2CError(uint8_t error); |
|||
}; |
|||
|
|||
} |
|||
} |
|||
|
|||
#endif /* APP_DAC101C085_H_ */ |
@ -0,0 +1,65 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: excitation_light.cpp
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 09.08.2017
|
|||
//
|
|||
// Description:
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
//-------------------------------------Libraries------------------------------------------------------------------------------
|
|||
#include "excitation_light.h" |
|||
#include <defines.h> |
|||
#include <SmingCore/SmingCore.h> |
|||
|
|||
//-------------------------------------Namespaces-----------------------------------------------------------------------------
|
|||
namespace rijnfel { |
|||
namespace light { |
|||
|
|||
//-------------------------------------Constructor----------------------------------------------------------------------------
|
|||
cExcitationLight::cExcitationLight(): |
|||
m_rectangleStatus(0), m_DACRectHigh(0) |
|||
{ |
|||
m_DAC = new dac::cDAC101C085(1, 0xE); |
|||
} |
|||
|
|||
//-------------------------------------Destructor-----------------------------------------------------------------------------
|
|||
cExcitationLight::~cExcitationLight() |
|||
{ |
|||
delete m_DAC; |
|||
} |
|||
|
|||
//-------------------------------------setCurrent-----------------------------------------------------------------------------
|
|||
uint8_t cExcitationLight::SetCurrent(uint16_t microamp) |
|||
{ |
|||
uint32_t new_DACRectHigh = 0; |
|||
if(microamp < CURR_MAX_UAMP) |
|||
{ |
|||
new_DACRectHigh = ( (microamp*R_SENSE*RESOLUTION_DAC)/VREF_DAC ) / 1000; |
|||
#if DEBUG_LEVEL == 1 |
|||
Serial.print("DAC value: "); |
|||
Serial.println(new_DACRectHigh); |
|||
#endif |
|||
m_DACRectHigh = new_DACRectHigh; |
|||
return 1; |
|||
} |
|||
else |
|||
return 0; |
|||
} |
|||
|
|||
//-------------------------------------rectangleUpdate------------------------------------------------------------------------
|
|||
uint8_t cExcitationLight::RectangleUpdate() |
|||
{ |
|||
m_rectangleStatus ? m_DAC->ChangeSettings(dac::eOpMode::NORMAL, 0) : m_DAC->ChangeSettings(dac::eOpMode::NORMAL, m_DACRectHigh); |
|||
m_rectangleStatus ^= 0xFF; |
|||
} |
|||
|
|||
//-------------------------------------DeactivateLED--------------------------------------------------------------------------
|
|||
uint8_t cExcitationLight::DeactivateLED() |
|||
{ |
|||
return m_DAC->ChangeSettings(dac::eOpMode::PULL_DOWN_2K5, 0); |
|||
} |
|||
|
|||
} |
|||
} |
@ -0,0 +1,64 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: excitation_light.h
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 09.08.2017
|
|||
//
|
|||
// Description: Class to use the excitation light in an advanced way with the help of a DAC.
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
#ifndef APP_EXCITATION_LIGHT_H_ |
|||
#define APP_EXCITATION_LIGHT_H_ |
|||
|
|||
//-------------------------------------Libraries------------------------------------------------------------------------------
|
|||
#include <stdint.h> |
|||
#include "dac101c085.h" |
|||
#include "hardware.h" |
|||
|
|||
//-------------------------------------Defines--------------------------------------------------------------------------------
|
|||
|
|||
//-------------------------------------Namespaces-----------------------------------------------------------------------------
|
|||
namespace rijnfel { |
|||
namespace light { |
|||
|
|||
//-------------------------------------Enums----------------------------------------------------------------------------------
|
|||
|
|||
//-------------------------------------cExcitationLight-----------------------------------------------------------------------
|
|||
/** Class to use the excitation light in an advanced way with the help of a DAC.
|
|||
*/ |
|||
class cExcitationLight |
|||
{ |
|||
public: |
|||
/** Construct object, allocate space for DAC.
|
|||
*/ |
|||
cExcitationLight(); // Constructor
|
|||
|
|||
/** Destruct object, free space for DAC.
|
|||
*/ |
|||
~cExcitationLight(); // Destructor
|
|||
|
|||
/** Set the desired current through excitation light.
|
|||
* @param microamp Current in uA. |
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t SetCurrent(uint16_t microamp); |
|||
|
|||
/** Function to be hooked up to a timer to generate rectangular signal.
|
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t RectangleUpdate(); |
|||
|
|||
/** Use 2K5 pull-down resistor to turn LED completely off.
|
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t DeactivateLED(); |
|||
private: |
|||
dac::cDAC101C085 *m_DAC; |
|||
uint8_t m_rectangleStatus; |
|||
uint16_t m_DACRectHigh; |
|||
}; |
|||
|
|||
} |
|||
} |
|||
#endif /* APP_EXCITATION_LIGHT_H_ */ |
@ -0,0 +1,72 @@ |
|||
/*
|
|||
* sensor_hub.cpp |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#include "sensor_hub.h" |
|||
#include <stdint.h> |
|||
|
|||
namespace rijnfel { |
|||
|
|||
cSensorHub::cSensorHub(uint32_t i_updatePeriod) : |
|||
m_updatePeriod(i_updatePeriod) { |
|||
m_adc = new ads::cADS101x(); |
|||
m_adcSettings = NULL; |
|||
m_tempSettings = NULL; |
|||
m_running = false; |
|||
} |
|||
|
|||
void cSensorHub::Update() { |
|||
if (!m_running) |
|||
return; |
|||
if (m_adcSettings) { |
|||
if (m_adcSettings->ShouldSample(m_updatePeriod)) { |
|||
if (m_adcSettings->m_buffer.AddValue(m_adc->RawSample())) { |
|||
//m_adcSettings->m_callback(m_adcSettings->m_buffer);
|
|||
m_adcSettings->m_samplesProvider.Push(static_cast<void*>(&m_adcSettings->m_buffer)); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
void cSensorHub::SetAdc(ads::cADS101x* i_adc) { |
|||
if (m_adc != NULL) { |
|||
delete m_adc; |
|||
} |
|||
m_adc = i_adc; |
|||
} |
|||
|
|||
void cSensorHub::SetAdcSettings(cSensorSettings<ads::ads_sample_t> * i_adcSettings) { |
|||
m_adcSettings = i_adcSettings; |
|||
} |
|||
|
|||
void cSensorHub::SetTempSettings(cSensorSettings<uint32_t> * i_tempSettings) { |
|||
m_tempSettings = i_tempSettings; |
|||
} |
|||
|
|||
void cSensorHub::Stop() { |
|||
if (m_running) { |
|||
m_running = false; |
|||
//if (m_adcSettings) {
|
|||
// m_adcSettings->m_samplesProvider.Push(static_cast<void*>(&m_adcSettings->m_buffer));
|
|||
m_adcSettings->Reset(); |
|||
//}
|
|||
} |
|||
} |
|||
|
|||
void cSensorHub::Start() { |
|||
m_running = true; |
|||
} |
|||
|
|||
cSensorHub::~cSensorHub() { |
|||
if (m_adcSettings) |
|||
delete m_adcSettings; |
|||
if (m_tempSettings) |
|||
delete m_tempSettings; |
|||
delete m_adc; |
|||
} |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
@ -0,0 +1,39 @@ |
|||
/*
|
|||
* sensor_hub.h |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_SENSOR_HUB_H_ |
|||
#define APP_SENSOR_HUB_H_ |
|||
|
|||
#include <rijnfel_core/sensor_settings.h> |
|||
#include "ads101x.h" |
|||
|
|||
|
|||
namespace rijnfel { |
|||
|
|||
class cSensorHub { |
|||
public: |
|||
//in milliseconds
|
|||
cSensorHub(uint32_t i_updatePeriod); |
|||
void SetAdc(ads::cADS101x * i_adc); |
|||
void SetAdcSettings(cSensorSettings<ads::ads_sample_t> * i_adcSettings); |
|||
void Stop(); |
|||
void Start(); |
|||
void SetTempSettings(cSensorSettings<uint32_t> * i_tempSettings); |
|||
void Update(); |
|||
virtual ~cSensorHub(); |
|||
|
|||
private: |
|||
uint32_t m_updatePeriod; |
|||
cSensorSettings<ads::ads_sample_t> * m_adcSettings; |
|||
cSensorSettings<uint32_t> * m_tempSettings; |
|||
ads::cADS101x * m_adc; |
|||
bool m_running; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_SENSOR_HUB_H_ */ |
@ -0,0 +1,39 @@ |
|||
/*
|
|||
* signal_process.cpp |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#include "signal_process.h" |
|||
#include <stddef.h> |
|||
|
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
//TODO remove this
|
|||
|
|||
namespace rijnfel { |
|||
|
|||
cSignalProcess::cSignalProcess() : |
|||
m_incommingData(this) { |
|||
m_currentIndex = 0; |
|||
m_currentMaxIndex = 0; |
|||
m_currentBuffer = NULL; |
|||
// TODO Auto-generated constructor stub
|
|||
|
|||
} |
|||
|
|||
cSignalProcess::~cSignalProcess() { |
|||
// TODO Auto-generated destructor stub
|
|||
} |
|||
|
|||
void cSignalProcess::ReceiveCallback(void* i_data, cDataReceiver* i_provider) { |
|||
sSizedArray * arr = static_cast<sSizedArray*>(i_data); |
|||
process(arr->array, arr->size); |
|||
m_processedData.Push(i_data); |
|||
} |
|||
|
|||
void cSignalProcess::process(uint32_t* io_array, size_t size) { |
|||
//Do whatever here really
|
|||
} |
|||
|
|||
} /* namespace rijnfel */ |
@ -0,0 +1,29 @@ |
|||
/*
|
|||
* signal_process.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_SIGNAL_PROCESS_H_ |
|||
#define APP_SIGNAL_PROCESS_H_ |
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
namespace rijnfel { |
|||
|
|||
class cSignalProcess: public cDataSink { |
|||
public: |
|||
cSignalProcess(); |
|||
virtual ~cSignalProcess(); |
|||
void ReceiveCallback(void * i_data, cDataReceiver * i_provider); |
|||
cDataReceiver m_incommingData; |
|||
cDataProvider m_processedData; |
|||
protected: |
|||
void process(uint32_t * io_array, size_t size); |
|||
uint32_t * m_currentBuffer; |
|||
uint32_t m_currentIndex; |
|||
uint32_t m_currentMaxIndex; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_SIGNAL_PROCESS_H_ */ |
@ -0,0 +1,28 @@ |
|||
/*
|
|||
* temperature.h |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_TEMPERATURE_H_ |
|||
#define APP_TEMPERATURE_H_ |
|||
|
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
|
|||
namespace rijnfel { |
|||
template<typename Sample, typename Temperature> |
|||
class cTemperatureSensor: cSensor<Sample> { |
|||
public: |
|||
cTemperatureSensor() { |
|||
|
|||
} |
|||
virtual Temperature ConvertSample(Sample sample) = 0; |
|||
virtual ~cTemperatureSensor() { |
|||
|
|||
} |
|||
}; |
|||
|
|||
} |
|||
|
|||
#endif /* APP_TEMPERATURE_H_ */ |
@ -0,0 +1,24 @@ |
|||
/*
|
|||
* test.cpp |
|||
* |
|||
* Created on: Aug 23, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#include <SmingCore/HardwareSerial.h> |
|||
#include "tests.h" |
|||
|
|||
void SettingsTest(rijnfel::ads::cADS101x * ads1015) { |
|||
for (int channel = 0; channel < 4; channel++) { |
|||
ads1015->SetMux(static_cast<rijnfel::ads::eInputMux>(rijnfel::ads::eInputMux::AIN_0 + channel)); |
|||
Serial.printf("Settings: %d\n\r", ads1015->GetSettings()); |
|||
} |
|||
} |
|||
|
|||
void AdcTest(rijnfel::ads::cADS101x * ads1015) { |
|||
for (int channel = 0; channel < 4; channel++) { |
|||
ads1015->SetMux(static_cast<rijnfel::ads::eInputMux>(rijnfel::ads::eInputMux::AIN_0 + channel)); |
|||
rijnfel::ads::ads_sample_t sample = ads1015->RawSample(); |
|||
Serial.printf("converted: %d channel: %d\n\r", ads1015->ConvertSample(sample), sample.mux); |
|||
} |
|||
} |
@ -0,0 +1,17 @@ |
|||
/*
|
|||
* tests.h |
|||
* |
|||
* Created on: Aug 23, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_TESTS_H_ |
|||
#define APP_TESTS_H_ |
|||
|
|||
#include "ads101x.h" |
|||
#include "dac101c085.h" |
|||
|
|||
void SettingsTest(rijnfel::ads::cADS101x ads1015); |
|||
void AdcTest(rijnfel::ads::cADS101x * ads1015); |
|||
|
|||
#endif /* APP_TESTS_H_ */ |
@ -0,0 +1,246 @@ |
|||
/*
|
|||
* web_interface.cpp |
|||
* |
|||
* Created on: Aug 6, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#include "web_interface.h" |
|||
#include <application.h> |
|||
#include <SmingCore/SmingCore.h> |
|||
#include <SmingCore/Network/WebConstants.h> |
|||
#include <SmingCore/FileSystem.h> |
|||
#include <third-party/http-parser/http_parser.h> |
|||
#include <SmingCore/Network/Http/Websocket/WebsocketResource.h> |
|||
|
|||
namespace rijnfel { |
|||
|
|||
cWebInterface *cWebInterface::s_instance = 0; |
|||
|
|||
static void onIndex(HttpRequest & i_request, HttpResponse & i_response) { |
|||
cWebInterface::GetInstance()->OnIndex(i_request, i_response); |
|||
} |
|||
|
|||
static void onRefresh(HttpRequest & i_request, HttpResponse & i_response) { |
|||
cWebInterface::GetInstance()->OnRefresh(i_request, i_response); |
|||
} |
|||
|
|||
static void onConfiguration(HttpRequest &request, HttpResponse &response) { |
|||
cWebInterface::GetInstance()->OnConfiguration(request, response); |
|||
} |
|||
|
|||
static void onConfiguration_json(HttpRequest &request, HttpResponse &response) { |
|||
cWebInterface::GetInstance()->OnConfiguration_json(request, response); |
|||
} |
|||
|
|||
void wsConnected(WebSocketConnection& socket) { |
|||
cWebInterface::GetInstance()->m_connectedUser = &socket; |
|||
Serial.printf("Connection!"); |
|||
} |
|||
|
|||
void wsMessageReceived(WebSocketConnection& socket, const String& message) { |
|||
if (message.equals("start")) { |
|||
cWebInterface::GetInstance()->m_sendWebsocket = true; |
|||
} else { |
|||
cWebInterface::GetInstance()->m_sendWebsocket = false; |
|||
} |
|||
if (message.equals("ch1")) { |
|||
ChangeSampleChannel(1); |
|||
} else if (message.equals("ch2")) { |
|||
ChangeSampleChannel(2); |
|||
} else if (message.equals("ch3")) { |
|||
ChangeSampleChannel(3); |
|||
} else if (message.equals("ch4")) { |
|||
ChangeSampleChannel(4); |
|||
} |
|||
} |
|||
|
|||
void wsDisconnected(WebSocketConnection& socket) { |
|||
cWebInterface::GetInstance()->m_connectedUser = NULL; |
|||
} |
|||
|
|||
cWebInterface::cWebInterface() : |
|||
m_serverStarted(false), m_adc_0(this), m_adc_1(this), m_adc_2(this), m_adc_3(this), m_connectedUser(NULL), m_sendWebsocket( |
|||
false) { |
|||
for (int i = 0; i < 4; i++) { |
|||
m_adc_value_average[i] = 0; |
|||
} |
|||
// Integer requires 8 digits, and one for the comma
|
|||
// m_jsonBuffer = new char[1];
|
|||
// if (m_jsonBuffer == NULL) {
|
|||
// Serial.print("Not enough ram");
|
|||
//}
|
|||
// TODO Auto-generated constructor stub
|
|||
|
|||
} |
|||
|
|||
void onFile(HttpRequest & i_request, HttpResponse & i_response) { |
|||
String file = i_request.getPath(); |
|||
if (file[0] == '/') |
|||
file = file.substring(1); |
|||
|
|||
if (file[0] == '.') |
|||
i_response.forbidden(); |
|||
else { |
|||
i_response.setCache(86400, true); // It's important to use cache for better performance.
|
|||
i_response.sendFile(file); |
|||
} |
|||
} |
|||
|
|||
static void onChannel(HttpRequest & i_request, HttpResponse & i_response) { |
|||
//cWebInterface::GetInstance()->OnFile(i_request, i_response);
|
|||
} |
|||
|
|||
void cWebInterface::StartServer() { |
|||
if (m_serverStarted) |
|||
return; |
|||
WebsocketResource* wsResource = new WebsocketResource(); |
|||
wsResource->setConnectionHandler(wsConnected); |
|||
wsResource->setMessageHandler(wsMessageReceived); |
|||
wsResource->setDisconnectionHandler(wsDisconnected); |
|||
m_server.addPath("/", onIndex); |
|||
m_server.addPath("/channel", onChannel); |
|||
m_server.addPath("/state", onRefresh); |
|||
m_server.addPath("/config", onConfiguration); |
|||
m_server.addPath("/config.json", onConfiguration_json); |
|||
m_server.addPath("/ws", wsResource); |
|||
m_server.setDefaultHandler(onFile); |
|||
m_server.listen(80); |
|||
|
|||
} |
|||
|
|||
void cWebInterface::StopServer() { |
|||
if (!m_serverStarted) |
|||
return; |
|||
m_serverStarted = false; |
|||
} |
|||
|
|||
void cWebInterface::OnIndex(HttpRequest &i_request, HttpResponse & i_response) { |
|||
i_response.setCache(86400, true); // It's important to use cache for better performance.
|
|||
i_response.sendFile("index.html"); |
|||
} |
|||
|
|||
void cWebInterface::OnRefresh(HttpRequest & i_request, HttpResponse & i_response) { |
|||
JsonObjectStream* stream = new JsonObjectStream(); |
|||
JsonObject& json = stream->getRoot(); |
|||
|
|||
json["adc_1"] = m_adc_value_average[0]; |
|||
json["adc_2"] = m_adc_value_average[1]; |
|||
#ifdef REV_1 |
|||
json["adc_3"] = m_adc_value_average[3]; |
|||
json["adc_4"] = m_adc_value_average[2]; |
|||
#else |
|||
json["adc_3"] = m_adc_value_average[2]; |
|||
json["adc_4"] = m_adc_value_average[3]; |
|||
#endif |
|||
i_response.sendJsonObject(stream); |
|||
} |
|||
|
|||
void cWebInterface::OnRawUpdate(HttpRequest& i_request, HttpResponse& i_response) { |
|||
} |
|||
|
|||
void cWebInterface::ReceiveCallback(void* i_data, cDataReceiver* i_receiver) { |
|||
int64_t average = 0; |
|||
sSizedArray * arr = static_cast<sSizedArray *>(i_data); |
|||
char buf[12]; |
|||
for (int i = 0; i < arr->size; i++) { |
|||
average += arr->array[i]; |
|||
if (m_connectedUser != NULL && m_sendWebsocket) { |
|||
sprintf(buf, "%d,", arr->array[i]); |
|||
const String send(buf); |
|||
m_connectedUser->sendString(send); |
|||
} |
|||
} |
|||
average /= arr->size; |
|||
if (i_receiver == &m_adc_0) { |
|||
m_adc_value_average[0] = static_cast<int32_t>(average); |
|||
} else if (i_receiver == &m_adc_1) { |
|||
m_adc_value_average[1] = static_cast<int32_t>(average); |
|||
} else if (i_receiver == &m_adc_2) { |
|||
m_adc_value_average[2] = static_cast<int32_t>(average); |
|||
} else if (i_receiver == &m_adc_3) { |
|||
m_adc_value_average[3] = static_cast<int32_t>(average); |
|||
} |
|||
} |
|||
|
|||
void cWebInterface::PrintValues() { |
|||
Serial.printf("c[0]: %d c[1]: %d c[2]: %d c[3]: %d\n\r", m_adc_value_average[0], m_adc_value_average[1], |
|||
m_adc_value_average[2], m_adc_value_average[3]); |
|||
} |
|||
|
|||
cWebInterface::~cWebInterface() { |
|||
// TODO Auto-generated destructor stub
|
|||
} |
|||
|
|||
void cWebInterface::ResetRawValues() { |
|||
/*
|
|||
for (int channel = 0; channel < 4; channel++) { |
|||
for (int sample = 0; sample < 1000; sample++) { |
|||
m_adc_values_raw[channel][sample] = 0; |
|||
} |
|||
} |
|||
*/ |
|||
} |
|||
|
|||
void cWebInterface::OnConfiguration(HttpRequest &request, HttpResponse &response) { |
|||
|
|||
if (request.method == http_method::HTTP_POST) { |
|||
//debugf("Update config");
|
|||
// Update config
|
|||
if (request.getBody() == NULL) { |
|||
Serial.println(request.getPostParameter("StaSSID")); |
|||
//debugf("NULL bodyBuf");
|
|||
return; |
|||
} else { |
|||
StaticJsonBuffer<200> jsonBuffer; |
|||
JsonObject& root = jsonBuffer.parseObject(request.getBody()); |
|||
//root.prettyPrintTo(Serial); //Uncomment it for debuging
|
|||
|
|||
/* if (root["StaSSID"].success()) // Settings
|
|||
{ |
|||
uint8_t PrevStaEnable = ActiveConfig.StaEnable; |
|||
|
|||
ActiveConfig.StaSSID = String((const char *)root["StaSSID"]); |
|||
ActiveConfig.StaPassword = String((const char *)root["StaPassword"]); |
|||
ActiveConfig.StaEnable = root["StaEnable"]; |
|||
|
|||
if (PrevStaEnable && ActiveConfig.StaEnable) |
|||
{ |
|||
WifiStation.enable(true); |
|||
WifiAccessPoint.enable(false); |
|||
WifiStation.config(ActiveConfig.StaSSID, ActiveConfig.StaPassword); |
|||
} |
|||
else if (ActiveConfig.StaEnable) |
|||
{ |
|||
WifiStation.enable(true, true); |
|||
WifiAccessPoint.enable(false, true); |
|||
WifiStation.config(ActiveConfig.StaSSID, ActiveConfig.StaPassword); |
|||
} |
|||
else |
|||
{ |
|||
WifiStation.enable(false, true); |
|||
WifiAccessPoint.enable(true, true); |
|||
WifiAccessPoint.config("TyTherm", "ENTERYOURPASSWD", AUTH_WPA2_PSK); |
|||
} |
|||
}*/ |
|||
} |
|||
//saveConfig(ActiveConfig);
|
|||
} else { |
|||
response.setCache(86400, true); // It's important to use cache for better performance.
|
|||
response.sendFile("config.html"); |
|||
} |
|||
} |
|||
|
|||
void cWebInterface::OnConfiguration_json(HttpRequest &request, HttpResponse &response) { |
|||
JsonObjectStream* stream = new JsonObjectStream(); |
|||
JsonObject& json = stream->getRoot(); |
|||
|
|||
json["StaSSID"] = 22; |
|||
json["StaPassword"] = 23; |
|||
json["StaEnable"] = 24; |
|||
|
|||
response.sendJsonObject(stream); |
|||
} |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
@ -0,0 +1,127 @@ |
|||
/*
|
|||
* web_interface.h |
|||
* |
|||
* Created on: Aug 6, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_WEB_INTERFACE_H_ |
|||
#define APP_WEB_INTERFACE_H_ |
|||
|
|||
//TODO remove this
|
|||
#include "ads101x.h" |
|||
|
|||
#include <SmingCore/SmingCore.h> |
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
|
|||
namespace rijnfel { |
|||
#define RAW_CHANNEL 1 |
|||
#define RAW_SAMPLES 1000 |
|||
class cWebInterface: public cDataSink { |
|||
public: |
|||
/**
|
|||
* Returns the global cWebInterface instance. |
|||
* Only one webserver should ever be running |
|||
* @return global cWebInterface instance |
|||
*/ |
|||
static cWebInterface *GetInstance() { |
|||
if (cWebInterface::s_instance == NULL) |
|||
cWebInterface::s_instance = new cWebInterface(); |
|||
return cWebInterface::s_instance; |
|||
} |
|||
|
|||
/// Singleton instance
|
|||
static cWebInterface *s_instance; |
|||
|
|||
public: |
|||
/**
|
|||
* Should not be used because it's a singleton |
|||
* @param delete |
|||
*/ |
|||
cWebInterface(cWebInterface const&) = delete; |
|||
|
|||
/**
|
|||
* Should not be used because it's a singleton |
|||
* @param delete |
|||
* @return delete |
|||
*/ |
|||
cWebInterface& operator=(cWebInterface const&) = delete; |
|||
|
|||
/**
|
|||
* Registers the paths and starts the server |
|||
*/ |
|||
void StartServer(); |
|||
|
|||
/**
|
|||
* Stops the server |
|||
*/ |
|||
void StopServer(); |
|||
|
|||
/**
|
|||
* This is a debug function that prints out the average values |
|||
* @todo remove this |
|||
*/ |
|||
void PrintValues(); |
|||
|
|||
/**
|
|||
* Destructor |
|||
*/ |
|||
virtual ~cWebInterface(); |
|||
|
|||
// This is what the future will look like
|
|||
// cDataReceiver m_sensorVal[2];
|
|||
// cDataReceiver m_battery;
|
|||
// cDataReceiver m_ledLife;
|
|||
// cDataReceiver m_temp;
|
|||
// But for now...
|
|||
cDataReceiver m_adc_0; |
|||
cDataReceiver m_adc_1; |
|||
cDataReceiver m_adc_2; |
|||
cDataReceiver m_adc_3; |
|||
|
|||
virtual void ReceiveCallback(void * i_data, cDataReceiver * i_receiver); |
|||
public: |
|||
/**
|
|||
* |
|||
* @param i_request |
|||
* @param i_response Response to the client, index.html |
|||
*/ |
|||
void OnIndex(HttpRequest & i_request, HttpResponse & i_response); |
|||
|
|||
/**
|
|||
* Function gets called from the mobile to refresh the average values |
|||
* @param i_request Request from the client |
|||
* @param i_response Response to the client, contains JSON with averages |
|||
*/ |
|||
void OnRefresh(HttpRequest & i_request, HttpResponse & i_response); |
|||
|
|||
/**
|
|||
* |
|||
* @param i_request |
|||
* @param i_response |
|||
*/ |
|||
void OnRawUpdate(HttpRequest& i_request, HttpResponse& i_response); |
|||
void OnConfiguration_json(HttpRequest &request, HttpResponse &response); |
|||
void OnConfiguration(HttpRequest &request, HttpResponse &response); |
|||
|
|||
//TODO migrate this
|
|||
WebSocketConnection * m_connectedUser; |
|||
bool m_sendWebsocket; |
|||
protected: |
|||
/**
|
|||
* Initializes the variables |
|||
*/ |
|||
cWebInterface(); |
|||
private: |
|||
void ResetRawValues(); |
|||
/// Whether the server has started or not
|
|||
bool m_serverStarted; |
|||
/// Holds the average for all the channels
|
|||
int32_t m_adc_value_average[4]; |
|||
/// Server instance
|
|||
HttpServer m_server; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_WEB_INTERFACE_H_ */ |
Binary file not shown.
@ -0,0 +1,69 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
|
|||
<title>TyTherm configuration</title> |
|||
|
|||
<!-- Bootstrap core --> |
|||
<link href="bootstrap.min.css" rel="stylesheet"> |
|||
<script src="jquery-2.1.4.min.js"></script> |
|||
<style> |
|||
.main { font-size: 63px; } |
|||
</style> |
|||
|
|||
</head> |
|||
<script src="config.js"></script> |
|||
<body> |
|||
|
|||
<div class="container"> |
|||
<div class="header"> |
|||
<nav> |
|||
<ul class="nav nav-pills pull-right"> |
|||
<li role="presentation"><a href="/">Status</a></li> |
|||
<li role="presentation" class="active"><a href="/config">Configuration</a></li> |
|||
</ul> |
|||
</nav> |
|||
<h3 class="text-muted">TyTherm</h3> |
|||
</div> |
|||
|
|||
<div class="row"> |
|||
<h2> </h2> |
|||
<div class="col-xs-offset-2 col-xs-8"> |
|||
<!-- Network config --> |
|||
<div> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<h3 class="panel-title">Network</h3> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<form id="form_netcfg" method="POST"> |
|||
<div class="form-group"> |
|||
<label for="StaSSID">Name</label> |
|||
<input type="text" id="StaSSID" name="StaSSID" class="form-control" placeholder="Enter SSID" value="{StaSSID}"> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label for="Password">Password</label> |
|||
<input type="password" id="StaPassword" name="StaPassword" class="form-control" placeholder="Password"> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label for="StaEnable">Enable WIFI Client</label> |
|||
<input type="checkbox" id="StaEnable" name="StaEnable" class="form-control"> |
|||
</div> |
|||
<button type="submit" class="btn btn-success">Save network</button> |
|||
<button type="button" id="netcfg_cancel" class="btn btn-link">Cancel</button> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- TyTherm adjustment config --> |
|||
|
|||
</div> <!-- /col --> |
|||
</div> <!-- /row --> |
|||
|
|||
</div> <!-- /container --> |
|||
</body> |
|||
</html> |
@ -0,0 +1,38 @@ |
|||
function get_config() { |
|||
$.getJSON('/config.json', |
|||
function(data) { |
|||
$.each(data, function(key, value){ |
|||
document.getElementById(key).value = value; |
|||
if (data.StaEnable == 1) { |
|||
document.getElementById('StaEnable').checked = true; |
|||
} |
|||
else |
|||
document.getElementById('StaEnable').checked = false; |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
|
|||
function post_netcfg(event) { |
|||
event.preventDefault(); |
|||
var formData = { |
|||
'StaSSID' : document.getElementById('StaSSID').value, |
|||
'StaPassword' : document.getElementById('StaPassword').value, |
|||
'StaEnable' : (document.getElementById('StaEnable').checked ? 1 : 0) |
|||
}; |
|||
$.ajax({ |
|||
type : 'POST', |
|||
url : '/config', |
|||
contentType : 'application/json; charset=utf-8', |
|||
data : JSON.stringify(formData), |
|||
dataType : 'json' |
|||
}) |
|||
} |
|||
|
|||
|
|||
$( document ).ready(function() { |
|||
get_config(); |
|||
|
|||
document.getElementById('form_netcfg').addEventListener('submit', post_netcfg); |
|||
document.getElementById('netcfg_cancel').addEventListener('click', get_config); |
|||
}); |
@ -0,0 +1,114 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
|
|||
<title>TyTherm Status</title> |
|||
|
|||
<!-- Bootstrap core --> |
|||
<link href="bootstrap.min.css" rel="stylesheet"> |
|||
<script src="jquery-2.1.4.min.js"></script> |
|||
<style> |
|||
.main { font-size: 63px; } |
|||
</style> |
|||
|
|||
</head> |
|||
<script src="index.js"></script> |
|||
<body> |
|||
|
|||
<div class="container"> |
|||
<div class="header"> |
|||
<nav> |
|||
<ul class="nav nav-pills pull-right"> |
|||
<li role="presentation" class="active"><a href="/">Status</a></li> |
|||
<li role="presentation"><a href="/config">Configuration</a></li> |
|||
</ul> |
|||
</nav> |
|||
<h3 class="text-muted">TyTherm</h3> |
|||
</div> |
|||
|
|||
<div class="row"> |
|||
<h2> </h2> |
|||
<div class="col-xs-offset-2"> |
|||
<div class="col-xs-10"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<h3 class="panel-title">Raw samples</h3> |
|||
|
|||
</div> |
|||
<div class="panel-body"> |
|||
<textarea id="raw_samples" rows="4" cols="50" style="width:100%;"> |
|||
|
|||
</textarea> |
|||
<button onclick="buttonStartCallback()">Start</button> |
|||
<button onclick="buttonStopCallback()">Stop</button> |
|||
<button onclick="cleanCallback()">Clean</button> |
|||
<button onclick="ch1()">ch1</button> |
|||
<button onclick="ch2()">ch2</button> |
|||
<button onclick="ch3()">ch3</button> |
|||
<button onclick="ch4()">ch4</button> |
|||
<div id="channel_id">Channel 1</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> <!-- /col --> |
|||
</div> <!-- /row --> |
|||
|
|||
<div class="row"> |
|||
<div class="col-xs-offset-2"> |
|||
<div class="col-xs-10 col-md-5"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<h3 class="panel-title">ADC 1</h3> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<h1 id="adc_1" class="text-center main">{adc_1}</h1> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> <!-- /col --> |
|||
<div class="col-xs-offset-2"> |
|||
<div class="col-xs-10 col-md-5"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<h3 class="panel-title">ADC 2</h3> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<h1 id="adc_2" class="text-center main">{adc_2}</h1> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> <!-- /col --> |
|||
</div> <!-- /row --> |
|||
<div class="row"> |
|||
<div class="col-xs-offset-2"> |
|||
<div class="col-xs-10 col-md-5"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<h3 class="panel-title">ADC 3</h3> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<h1 id="adc_3" class="text-center main">{adc_3}</h1> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> <!-- /col --> |
|||
<div class="col-xs-offset-2"> |
|||
<div class="col-xs-10 col-md-5"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<h3 class="panel-title">ADC 4</h3> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<h1 id="adc_4" class="text-center main">{adc_4}</h1> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> <!-- /col --> |
|||
</div> <!-- /row --> |
|||
|
|||
</div> <!-- /container --> |
|||
</body> |
|||
</html> |
@ -0,0 +1,114 @@ |
|||
$( document ).ready(function() { |
|||
|
|||
(function worker() { |
|||
$.getJSON('/state', function(data) { |
|||
document.getElementById('adc_1').textContent = data.adc_1; |
|||
document.getElementById('adc_2').textContent = data.adc_2; |
|||
document.getElementById('adc_3').textContent = data.adc_3; |
|||
document.getElementById('adc_4').textContent = data.adc_4; |
|||
|
|||
//var text = document.getElementById('raw_adc');
|
|||
//text.value += data.raw_adc;
|
|||
|
|||
setTimeout(worker, 500); |
|||
}); |
|||
})(); |
|||
|
|||
var wsUri = "ws://" + location.host + "/ws"; |
|||
websocket = new WebSocket(wsUri); |
|||
websocket.onopen = function(evt) { onOpen(evt) }; |
|||
websocket.onclose = function(evt) { onClose(evt) }; |
|||
websocket.onmessage = function(evt) { onMessage(evt) }; |
|||
websocket.onerror = function(evt) { onError(evt) }; |
|||
}); |
|||
|
|||
function buttonStartCallback(){ |
|||
websocket.send("start"); |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val(""); |
|||
} |
|||
|
|||
function cleanCallback() { |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val(""); |
|||
} |
|||
|
|||
function ch1() { |
|||
document.getElementById("channel_id").innerHTML = "Channel 1" |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val("Stopped"); |
|||
websocket.send("ch1"); |
|||
} |
|||
|
|||
function ch2() { |
|||
document.getElementById("channel_id").innerHTML = "Channel 2" |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val("Stopped"); |
|||
websocket.send("ch2"); |
|||
} |
|||
|
|||
function ch3() { |
|||
document.getElementById("channel_id").innerHTML = "Channel 3" |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val("Stopped"); |
|||
websocket.send("ch3"); |
|||
} |
|||
|
|||
function ch4() { |
|||
document.getElementById("channel_id").innerHTML = "Channel 4" |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val("Stopped"); |
|||
websocket.send("ch4"); |
|||
} |
|||
|
|||
|
|||
|
|||
function buttonStopCallback(){ |
|||
websocket.send("stop"); |
|||
saveTextAsFile(); |
|||
} |
|||
|
|||
// https://stackoverflow.com/questions/21479107/saving-html5-textarea-contents-to-file
|
|||
function saveTextAsFile() { |
|||
var textToWrite = document.getElementById('raw_samples').value; |
|||
var textFileAsBlob = new Blob([ textToWrite ], { type: 'text/plain' }); |
|||
var fileNameToSaveAs = "samples.csv"; |
|||
|
|||
var downloadLink = document.createElement("a"); |
|||
downloadLink.download = fileNameToSaveAs; |
|||
downloadLink.innerHTML = "Download File"; |
|||
if (window.webkitURL != null) { |
|||
// Chrome allows the link to be clicked without actually adding it to the DOM.
|
|||
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); |
|||
} else { |
|||
// Firefox requires the link to be added to the DOM before it can be clicked.
|
|||
downloadLink.href = window.URL.createObjectURL(textFileAsBlob); |
|||
downloadLink.onclick = destroyClickedElement; |
|||
downloadLink.style.display = "none"; |
|||
document.body.appendChild(downloadLink); |
|||
} |
|||
|
|||
downloadLink.click(); |
|||
} |
|||
|
|||
function destroyClickedElement(event) { |
|||
// remove the link from the DOM
|
|||
document.body.removeChild(event.target); |
|||
} |
|||
|
|||
function onOpen(evt) { |
|||
console.log("CONNECTED"); |
|||
} |
|||
|
|||
function onClose(evt) { |
|||
console.log("close"); |
|||
} |
|||
|
|||
function onMessage(evt) { |
|||
var myTextArea = $('#raw_samples'); |
|||
myTextArea.val(myTextArea.val() + evt.data); |
|||
} |
|||
|
|||
function onError(evt){ |
|||
console.log("error: " + evt.data); |
|||
} |
Binary file not shown.
@ -0,0 +1,14 @@ |
|||
/*
|
|||
* application.h |
|||
* |
|||
* Created on: Aug 23, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef INCLUDE_APPLICATION_H_ |
|||
#define INCLUDE_APPLICATION_H_ |
|||
|
|||
//Disgusting
|
|||
void ChangeSampleChannel(int channel); |
|||
|
|||
#endif /* INCLUDE_APPLICATION_H_ */ |
@ -0,0 +1,18 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: hardware.h
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 09.08.2017
|
|||
//
|
|||
// Description:
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
#ifndef APP_DEFINES_H_ |
|||
#define APP_DEFINES_H_ |
|||
|
|||
#include "hardware.h" |
|||
|
|||
#define DEBUG_LEVEL 0 |
|||
|
|||
#endif /* APP_HARDWARE_H_ */ |
@ -0,0 +1,32 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: hardware.h
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 09.08.2017
|
|||
//
|
|||
// Description:
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
#ifndef APP_HARDWARE_H_ |
|||
#define APP_HARDWARE_H_ |
|||
|
|||
#define REV_1 |
|||
|
|||
//-------------------------------------I2C ADRESSES---------------------------------------------------------------------------
|
|||
static const uint8_t ADC_ADDRESS = 0x49; |
|||
static const uint8_t DAC1_ADDRESS = 0xE; |
|||
|
|||
static const uint16_t R_SENSE = 100; // 100 Ohm sensing resistor
|
|||
static const uint16_t CURR_MAX_UAMP = 10000; // 10 mA max.
|
|||
static const uint16_t VREF_DAC = 3300; // in mV
|
|||
static const uint16_t RESOLUTION_DAC = 1024; |
|||
|
|||
static const int HUB_PERIOD = 5; |
|||
static const int ADC_TIMEBASE = 250; |
|||
static const int ADC_PERIOD = 5; |
|||
static const int RECT_PERIOD = 2500; // in us
|
|||
|
|||
#define LED_PIN 2 // GPIO2
|
|||
|
|||
#endif /* APP_HARDWARE_H_ */ |
@ -0,0 +1,44 @@ |
|||
/*
|
|||
* adc.h |
|||
* |
|||
* Created on: Jul 20, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_ADC_H_ |
|||
#define APP_ADC_H_ |
|||
|
|||
#include "../rijnfel_core/sensor.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
/**
|
|||
* Abstract interface for Analog to Digital converters. |
|||
* Template holds sample type and voltage type |
|||
*/ |
|||
template<typename Sample, typename Voltage> |
|||
class cADC: public cSensor<Sample> { |
|||
public: |
|||
/**
|
|||
* Default constructor |
|||
*/ |
|||
cADC() { |
|||
|
|||
} |
|||
|
|||
/**
|
|||
* This virtual function should be implemented to convert a sample to a voltage |
|||
* @param i_sample the raw sample that should be converted |
|||
* @return a voltage in mili-volt |
|||
*/ |
|||
virtual Voltage ConvertSample(Sample & i_sample) = 0; |
|||
|
|||
/**
|
|||
* Default destructor |
|||
*/ |
|||
virtual ~cADC() { |
|||
|
|||
} |
|||
}; |
|||
} |
|||
#endif /* APP_ADC_H_ */ |
@ -0,0 +1,44 @@ |
|||
/*
|
|||
* data_provider.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_DATA_PROVIDER_H_ |
|||
#define APP_DATA_PROVIDER_H_ |
|||
|
|||
#include <vector> |
|||
#include <stddef.h> |
|||
|
|||
#include "data_receiver.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
class cDataProvider { |
|||
public: |
|||
void Connect(cDataReceiver * i_receiver) { |
|||
m_receivers.push_back(i_receiver); |
|||
} |
|||
void Push(void * i_data) { |
|||
typedef std::vector<cDataReceiver*>::iterator Iterator; |
|||
for (Iterator it = m_receivers.begin(), it_e = m_receivers.end(); it != it_e; ++it) { |
|||
(*it)->Receive(i_data); |
|||
} |
|||
} |
|||
~cDataProvider() { |
|||
//
|
|||
//typedef std::vector<cDataReceiver>::iterator Iterator;
|
|||
//for (Iterator it = receivers.begin(), it_e = receivers.end(); it != it_e; ++it) {
|
|||
// if ((*it) != NULL) {
|
|||
// delete (*it);
|
|||
// }
|
|||
//}
|
|||
} |
|||
private: |
|||
std::vector<cDataReceiver*> m_receivers; |
|||
}; |
|||
|
|||
} |
|||
|
|||
#endif /* APP_DATA_PROVIDER_H_ */ |
@ -0,0 +1,29 @@ |
|||
/*
|
|||
* data_receiver.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_DATA_RECEIVER_H_ |
|||
#define APP_DATA_RECEIVER_H_ |
|||
|
|||
#include "data_sink.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
class cDataReceiver { |
|||
public: |
|||
cDataReceiver(cDataSink * i_sink) { |
|||
m_sink = i_sink; |
|||
} |
|||
void Receive(void * i_data) { |
|||
m_sink->ReceiveCallback(i_data, this); |
|||
} |
|||
private: |
|||
cDataSink * m_sink; |
|||
}; |
|||
|
|||
} |
|||
|
|||
#endif /* APP_DATA_RECEIVER_H_ */ |
@ -0,0 +1,25 @@ |
|||
/*
|
|||
* data_sink.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_DATA_SINK_H_ |
|||
#define APP_DATA_SINK_H_ |
|||
|
|||
namespace rijnfel { |
|||
|
|||
class cDataReceiver; |
|||
|
|||
class cDataSink { |
|||
public: |
|||
cDataSink() { |
|||
} |
|||
virtual ~cDataSink() { |
|||
} |
|||
virtual void ReceiveCallback(void * i_data, cDataReceiver * i_receiver) = 0; |
|||
}; |
|||
} |
|||
|
|||
#endif /* APP_DATA_SINK_H_ */ |
@ -0,0 +1,76 @@ |
|||
/*
|
|||
* double_buffer.h |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_DOUBLE_BUFFER_H_ |
|||
#define APP_DOUBLE_BUFFER_H_ |
|||
|
|||
#include <stdint.h> |
|||
|
|||
namespace rijnfel { |
|||
|
|||
template<typename BufferType> |
|||
class cDoubleBuffer { |
|||
public: |
|||
cDoubleBuffer(int i_size) : |
|||
m_size(i_size) { |
|||
m_writeIndex = 0; |
|||
m_bufferIndex = 0; |
|||
m_buf = new BufferType*[2]; |
|||
m_buf[0] = new BufferType[m_size]; |
|||
m_buf[1] = new BufferType[m_size]; |
|||
} |
|||
|
|||
void Resize(int i_newSize) { |
|||
m_size = i_newSize; |
|||
delete m_buf[0]; |
|||
delete m_buf[1]; |
|||
m_buf[0] = new BufferType[m_size]; |
|||
m_buf[1] = new BufferType[m_size]; |
|||
} |
|||
|
|||
void Reset() { |
|||
m_bufferIndex = !m_bufferIndex; |
|||
m_writeIndex = 0; |
|||
} |
|||
|
|||
bool AddValue(BufferType i_val) { |
|||
m_buf[m_bufferIndex][m_writeIndex] = i_val; |
|||
m_writeIndex++; |
|||
if (m_writeIndex >= m_size) { |
|||
Reset(); |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
BufferType * GetReadyBuffer() { |
|||
return m_buf[(m_bufferIndex == 0) ? 1 : 0]; |
|||
} |
|||
|
|||
BufferType * GetBuffer(int i_index) { |
|||
return m_buf[i_index]; |
|||
} |
|||
|
|||
int GetSize() { |
|||
return m_size; |
|||
} |
|||
|
|||
virtual ~cDoubleBuffer() { |
|||
delete[] m_buf[0]; |
|||
delete[] m_buf[1]; |
|||
delete[] m_buf; |
|||
} |
|||
private: |
|||
int m_size; |
|||
int m_writeIndex; |
|||
int m_bufferIndex; |
|||
BufferType ** m_buf; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_DOUBLE_BUFFER_H_ */ |
@ -0,0 +1,22 @@ |
|||
/*
|
|||
* helper_structs.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_HELPER_STRUCTS_H_ |
|||
#define APP_HELPER_STRUCTS_H_ |
|||
|
|||
namespace rijnfel{ |
|||
|
|||
struct sSizedArray{ |
|||
size_t size; |
|||
uint32_t * array; |
|||
}; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
#endif /* APP_HELPER_STRUCTS_H_ */ |
@ -0,0 +1,21 @@ |
|||
/*
|
|||
* core.h |
|||
* |
|||
* Created on: Aug 23, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_CORE_CORE_H_ |
|||
#define APP_CORE_CORE_H_ |
|||
|
|||
#include "adc.h" |
|||
#include "data_provider.h" |
|||
#include "data_receiver.h" |
|||
#include "data_sink.h" |
|||
#include "double_buffer.h" |
|||
#include "helper_structs.h" |
|||
#include "sensor_settings.h" |
|||
|
|||
|
|||
|
|||
#endif /* APP_CORE_CORE_H_ */ |
@ -0,0 +1,38 @@ |
|||
/*
|
|||
* sensor.h |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_SENSOR_H_ |
|||
#define APP_SENSOR_H_ |
|||
|
|||
#include <stddef.h> |
|||
|
|||
namespace rijnfel { |
|||
template<typename Sample> |
|||
class cSensor { |
|||
public: |
|||
cSensor() { |
|||
m_callback = NULL; |
|||
} |
|||
Sample GetLatestSample(void) { |
|||
return m_latestSample; |
|||
} |
|||
void SetOnSampleCallBack(void (*i_callback)(Sample & o_sample)) { |
|||
m_callback = i_callback; |
|||
} |
|||
virtual void WaitSample(void) = 0; |
|||
virtual bool IsReady(void) = 0; |
|||
virtual Sample RawSample(void) = 0; |
|||
virtual ~cSensor() { |
|||
|
|||
} |
|||
protected: |
|||
Sample m_latestSample; |
|||
void (*m_callback)(Sample & o_sample); |
|||
}; |
|||
} |
|||
|
|||
#endif /* APP_SENSOR_H_ */ |
@ -0,0 +1,48 @@ |
|||
/*
|
|||
* sensor_settings.h |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_SENSOR_SETTINGS_H_ |
|||
#define APP_SENSOR_SETTINGS_H_ |
|||
|
|||
#include "data_provider.h" |
|||
#include "double_buffer.h" |
|||
|
|||
namespace rijnfel { |
|||
//timebase, in miliseconds.
|
|||
//Example, period = 10 (ms) timebase = 250(ms)
|
|||
//Callback will be called after 250/10 = 25 samples
|
|||
template<typename BufferType> |
|||
class cSensorSettings { |
|||
public: |
|||
cSensorSettings(uint32_t i_timeBase, uint32_t i_period) : |
|||
m_periodTimer(0), m_period(i_period), m_buffer(0) { |
|||
m_buffer.Resize((int) (i_timeBase / m_period)); |
|||
} |
|||
|
|||
void Reset() { |
|||
m_periodTimer = 0; |
|||
m_buffer.Reset(); |
|||
} |
|||
|
|||
bool ShouldSample(uint32_t i_updatePeriod) { |
|||
m_periodTimer += i_updatePeriod; |
|||
if (m_periodTimer >= m_period) { |
|||
m_periodTimer -= m_period; |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
cDataProvider m_samplesProvider; |
|||
cDoubleBuffer<BufferType> m_buffer; |
|||
private: |
|||
uint32_t m_periodTimer; |
|||
uint32_t m_period; |
|||
}; |
|||
|
|||
} |
|||
|
|||
#endif /* APP_SENSOR_SETTINGS_H_ */ |
@ -0,0 +1,45 @@ |
|||
#ifndef __USER_CONFIG_H__ |
|||
#define __USER_CONFIG_H__ |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
// UART config
|
|||
#define SERIAL_BAUD_RATE COM_SPEED_SERIAL |
|||
|
|||
// ESP SDK config
|
|||
#define LWIP_OPEN_SRC |
|||
#define USE_US_TIMER |
|||
|
|||
// Default types
|
|||
#define __CORRECT_ISO_CPP_STDLIB_H_PROTO |
|||
#include <limits.h> |
|||
#include <stdint.h> |
|||
|
|||
// Override c_types.h include and remove buggy espconn
|
|||
#define _C_TYPES_H_ |
|||
#define _NO_ESPCON_ |
|||
|
|||
// Updated, compatible version of c_types.h
|
|||
// Just removed types declared in <stdint.h>
|
|||
#include <espinc/c_types_compatible.h> |
|||
|
|||
// System API declarations
|
|||
#include <esp_systemapi.h> |
|||
|
|||
// C++ Support
|
|||
#include <esp_cplusplus.h> |
|||
// Extended string conversion for compatibility
|
|||
#include <stringconversion.h> |
|||
// Network base API
|
|||
#include <espinc/lwip_includes.h> |
|||
|
|||
// Beta boards
|
|||
#define BOARD_ESP01 |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif |
Loading…
Reference in new issue