commit 8cb2432c773fb688c6d790156b62c0d92440a414 Author: karthikmv Date: Tue Jul 12 01:08:04 2022 +0530 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..188ee3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +PMU +iPDC/iPDC +DBServer/DBServer +.vscode/ \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100755 index 0000000..10926e8 --- /dev/null +++ b/COPYING @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/DBServer/ANALOG_MEASUREMENTS.txt b/DBServer/ANALOG_MEASUREMENTS.txt new file mode 100644 index 0000000..7dfdc5a --- /dev/null +++ b/DBServer/ANALOG_MEASUREMENTS.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,880000,"B ",0.006000 + 1,1,1657041650,920000,"B ",0.006000 + 1,1,1657041650,960000,"B ",0.006000 + 1,1,1657041651,0,"B ",0.006000 + 1,1,1657041651,40000,"B ",0.006000 + 1,1,1657041651,80000,"B ",0.006000 + 1,1,1657041651,120000,"B ",0.006000 + 1,1,1657041651,160000,"B ",0.006000 + 1,1,1657041651,200000,"B ",0.006000 + 1,1,1657041651,240000,"B ",0.006000 + 1,1,1657041651,280000,"B ",0.006000 + 1,1,1657041651,320000,"B ",0.006000 + 1,1,1657041651,360000,"B ",0.006000 + 1,1,1657041651,400000,"B ",0.006000 + 1,1,1657041651,440000,"B ",0.006000 + 1,1,1657041651,480000,"B ",0.006000 + 1,1,1657041651,520000,"B ",0.006000 + 1,1,1657041651,560000,"B ",0.006000 + 1,1,1657041651,600000,"B ",0.006000 + 1,1,1657041651,640000,"B ",0.006000 + 1,1,1657041651,680000,"B ",0.006000 + 1,1,1657041651,720000,"B ",0.006000 + 1,1,1657041651,760000,"B ",0.006000 + 1,1,1657041651,800000,"B ",0.006000 + 1,1,1657041651,840000,"B ",0.006000 + 1,1,1657041651,880000,"B ",0.006000 + 1,1,1657041651,920000,"B ",0.006000 + 1,1,1657041651,960000,"B ",0.006000 + 1,1,1657041652,0,"B ",0.006000 + 1,1,1657041652,40000,"B ",0.006000 + 1,1,1657041652,80000,"B ",0.006000 + 1,1,1657041652,120000,"B ",0.006000 + 1,1,1657041652,160000,"B ",0.006000 + 1,1,1657041652,200000,"B ",0.006000 + 1,1,1657041652,240000,"B ",0.006000 + 1,1,1657041652,280000,"B ",0.006000 + 1,1,1657041652,320000,"B ",0.006000 + 1,1,1657041652,360000,"B ",0.006000 + 1,1,1657041652,400000,"B ",0.006000 + 1,1,1657041652,440000,"B ",0.006000 + 1,1,1657041652,480000,"B ",0.006000 + 1,1,1657041652,520000,"B ",0.006000 + 1,1,1657041652,560000,"B ",0.006000 + 1,1,1657041652,600000,"B ",0.006000 + 1,1,1657041652,640000,"B ",0.006000 + 1,1,1657041652,680000,"B ",0.006000 + 1,1,1657041652,720000,"B ",0.006000 + 1,1,1657041652,760000,"B ",0.006000 + 1,1,1657041652,800000,"B ",0.006000 + 1,1,1657041652,840000,"B ",0.006000 + 1,1,1657041652,880000,"B ",0.006000 + 1,1,1657041652,920000,"B ",0.006000 + 1,1,1657041652,960000,"B ",0.006000 + 1,1,1657041653,0,"B ",0.006000 + 1,1,1657041653,40000,"B ",0.006000 + 1,1,1657041653,80000,"B ",0.006000 + 1,1,1657041653,120000,"B ",0.006000 + 1,1,1657041653,160000,"B ",0.006000 + 1,1,1657041653,200000,"B ",0.006000 + 1,1,1657041653,240000,"B ",0.006000 + 1,1,1657041653,280000,"B ",0.006000 + 1,1,1657041653,320000,"B ",0.006000 + 1,1,1657041653,360000,"B ",0.006000 + 1,1,1657041653,400000,"B ",0.006000 + 1,1,1657041653,440000,"B ",0.006000 + 1,1,1657041653,480000,"B ",0.006000 + 1,1,1657041653,520000,"B ",0.006000 + 1,1,1657041653,560000,"B ",0.006000 + 1,1,1657041653,600000,"B ",0.006000 + 1,1,1657041653,640000,"B ",0.006000 + 1,1,1657041653,680000,"B ",0.006000 + 1,1,1657041653,720000,"B ",0.006000 + 1,1,1657041653,760000,"B ",0.006000 + 1,1,1657041653,800000,"B ",0.006000 + 1,1,1657041653,840000,"B ",0.006000 + 1,1,1657041653,880000,"B ",0.006000 + 1,1,1657041653,920000,"B ",0.006000 + 1,1,1657041653,960000,"B ",0.006000 + 1,1,1657041654,0,"B ",0.006000 + 1,1,1657041654,40000,"B ",0.006000 + 1,1,1657041654,80000,"B ",0.006000 + 1,1,1657041654,120000,"B ",0.006000 + 1,1,1657041654,160000,"B ",0.006000 + 1,1,1657041654,200000,"B ",0.006000 + 1,1,1657041654,240000,"B ",0.006000 + 1,1,1657041654,280000,"B ",0.006000 + 1,1,1657041654,320000,"B ",0.006000 + 1,1,1657041654,360000,"B ",0.006000 + 1,1,1657041654,400000,"B ",0.006000 + 1,1,1657041654,440000,"B ",0.006000 + 1,1,1657041654,480000,"B ",0.006000 + 1,1,1657041654,520000,"B ",0.006000 + 1,1,1657041654,560000,"B ",0.006000 + 1,1,1657041654,600000,"B ",0.006000 + 1,1,1657041654,640000,"B ",0.006000 + 1,1,1657041654,680000,"B ",0.006000 + 1,1,1657041654,720000,"B ",0.006000 + 1,1,1657041654,760000,"B ",0.006000 + 1,1,1657041654,800000,"B ",0.006000 + 1,1,1657041654,840000,"B ",0.006000 + 1,1,1657041654,880000,"B ",0.006000 + 1,1,1657041654,920000,"B ",0.006000 + 1,1,1657041654,960000,"B ",0.006000 + 1,1,1657041655,0,"B ",0.006000 + 1,1,1657041655,40000,"B ",0.006000 + 1,1,1657041655,80000,"B ",0.006000 + 1,1,1657041655,120000,"B ",0.006000 + 1,1,1657041655,160000,"B ",0.006000 + 1,1,1657041655,200000,"B ",0.006000 + 1,1,1657041655,240000,"B ",0.006000 + 1,1,1657041655,280000,"B ",0.006000 + 1,1,1657041655,320000,"B ",0.006000 + 1,1,1657041655,360000,"B ",0.006000 + 1,1,1657041655,400000,"B ",0.006000 + 1,1,1657041655,440000,"B ",0.006000 + 1,1,1657041655,480000,"B ",0.006000 + 1,1,1657041655,520000,"B ",0.006000 + 1,1,1657041655,560000,"B ",0.006000 + 1,1,1657041655,600000,"B ",0.006000 + 1,1,1657041655,640000,"B ",0.006000 + 1,1,1657041655,680000,"B ",0.006000 + 1,1,1657041655,720000,"B ",0.006000 + 1,1,1657041655,760000,"B ",0.006000 + 1,1,1657041655,800000,"B ",0.006000 + 1,1,1657041655,840000,"B ",0.006000 + 1,1,1657041655,880000,"B ",0.006000 + 1,1,1657041655,920000,"B ",0.006000 + 1,1,1657041655,960000,"B ",0.006000 + 1,1,1657041656,0,"B ",0.006000 + 1,1,1657041656,40000,"B ",0.006000 + 1,1,1657041656,80000,"B ",0.006000 + 1,1,1657041656,120000,"B ",0.006000 + 1,1,1657041656,160000,"B ",0.006000 + 1,1,1657041656,200000,"B ",0.006000 + 1,1,1657041656,240000,"B ",0.006000 + 1,1,1657041656,280000,"B ",0.006000 + 1,1,1657041656,320000,"B ",0.006000 + 1,1,1657041656,360000,"B ",0.006000 + 1,1,1657041656,400000,"B ",0.006000 + 1,1,1657041656,440000,"B ",0.006000 + 1,1,1657041656,480000,"B ",0.006000 + 1,1,1657041656,520000,"B ",0.006000 + 1,1,1657041656,560000,"B ",0.006000 + 1,1,1657041656,600000,"B ",0.006000 + 1,1,1657041656,640000,"B ",0.006000 + 1,1,1657041656,680000,"B ",0.006000 + 1,1,1657041656,720000,"B ",0.006000 + 1,1,1657041656,760000,"B ",0.006000 + 1,1,1657041656,800000,"B ",0.006000 + 1,1,1657041656,840000,"B ",0.006000 + 1,1,1657041656,880000,"B ",0.006000 + 1,1,1657041656,920000,"B ",0.006000 + 1,1,1657041656,960000,"B ",0.006000 + 1,1,1657041657,0,"B ",0.006000 + 1,1,1657041657,40000,"B ",0.006000 + 1,1,1657041657,80000,"B ",0.006000 + 1,1,1657041657,120000,"B ",0.006000 + 1,1,1657041657,160000,"B ",0.006000 + 1,1,1657041657,200000,"B ",0.006000 + 1,1,1657041657,240000,"B ",0.006000 + 1,1,1657041657,280000,"B ",0.006000 + 1,1,1657041657,320000,"B ",0.006000 + 1,1,1657041657,360000,"B ",0.006000 + 1,1,1657041657,400000,"B ",0.006000 + 1,1,1657041657,440000,"B ",0.006000 + 1,1,1657041657,480000,"B ",0.006000 + 1,1,1657041657,520000,"B ",0.006000 + 1,1,1657041657,560000,"B ",0.006000 + 1,1,1657041657,600000,"B ",0.006000 + 1,1,1657041657,640000,"B ",0.006000 + 1,1,1657041657,680000,"B ",0.006000 + 1,1,1657041657,720000,"B ",0.006000 + 1,1,1657041657,760000,"B ",0.006000 + 1,1,1657041657,800000,"B ",0.006000 + 1,1,1657041657,840000,"B ",0.006000 + 1,1,1657041657,880000,"B ",0.006000 + 1,1,1657041657,920000,"B ",0.006000 + 1,1,1657041657,960000,"B ",0.006000 + 1,1,1657041658,0,"B ",0.006000 + 1,1,1657041658,40000,"B ",0.006000 + 1,1,1657041658,80000,"B ",0.006000 + 1,1,1657041658,120000,"B ",0.006000 + 1,1,1657041658,160000,"B ",0.006000 + 1,1,1657041658,200000,"B ",0.006000 + 1,1,1657041658,240000,"B ",0.006000 + 1,1,1657041658,280000,"B ",0.006000 + 1,1,1657041658,320000,"B ",0.006000 + 1,1,1657041658,360000,"B ",0.006000 + 1,1,1657041658,400000,"B ",0.006000 + 1,1,1657041658,440000,"B ",0.006000 + 1,1,1657041658,480000,"B ",0.006000 + 1,1,1657041658,520000,"B ",0.006000 + 1,1,1657041658,560000,"B ",0.006000 + 1,1,1657041658,600000,"B ",0.006000 + 1,1,1657041658,640000,"B ",0.006000 + 1,1,1657041658,680000,"B ",0.006000 + 1,1,1657041658,720000,"B ",0.006000 + 1,1,1657041658,760000,"B ",0.006000 + 1,1,1657041658,800000,"B ",0.006000 + 1,1,1657041658,840000,"B ",0.006000 + 1,1,1657041658,880000,"B ",0.006000 + 1,1,1657041658,920000,"B ",0.006000 + 1,1,1657041658,960000,"B ",0.006000 + 1,1,1657041659,0,"B ",0.006000 + 1,1,1657041659,40000,"B ",0.006000 + 1,1,1657041659,80000,"B ",0.006000 + 1,1,1657041659,120000,"B ",0.006000 + 1,1,1657041659,160000,"B ",0.006000 + 1,1,1657041659,200000,"B ",0.006000 + 1,1,1657041659,240000,"B ",0.006000 + 1,1,1657041659,280000,"B ",0.006000 + 1,1,1657041659,320000,"B ",0.006000 + 1,1,1657041659,360000,"B ",0.006000 + 1,1,1657041659,400000,"B ",0.006000 + 1,1,1657041659,440000,"B ",0.006000 + 1,1,1657041659,480000,"B ",0.006000 + 1,1,1657041659,520000,"B ",0.006000 + 1,1,1657041659,560000,"B ",0.006000 + 1,1,1657041659,600000,"B ",0.006000 + 1,1,1657041659,640000,"B ",0.006000 + 1,1,1657041659,680000,"B ",0.006000 + 1,1,1657041659,720000,"B ",0.006000 + 1,1,1657041659,760000,"B ",0.006000 + 1,1,1657041659,800000,"B ",0.006000 + 1,1,1657041659,840000,"B ",0.006000 + 1,1,1657041659,880000,"B ",0.006000 + 1,1,1657041659,920000,"B ",0.006000 + 1,1,1657041659,960000,"B ",0.006000 + 1,1,1657041660,0,"B ",0.006000 + 1,1,1657041660,40000,"B ",0.006000 + 1,1,1657041660,80000,"B ",0.006000 + 1,1,1657041660,120000,"B ",0.006000 + 1,1,1657041660,160000,"B ",0.006000 + 1,1,1657041660,200000,"B ",0.006000 + 1,1,1657041660,240000,"B ",0.006000 + 1,1,1657041660,280000,"B ",0.006000 + 1,1,1657041660,320000,"B ",0.006000 + 1,1,1657041660,360000,"B ",0.006000 + 1,1,1657041660,400000,"B ",0.006000 + 1,1,1657041660,440000,"B ",0.006000 + 1,1,1657041660,480000,"B ",0.006000 + 1,1,1657041660,520000,"B ",0.006000 + 1,1,1657041660,560000,"B ",0.006000 + 1,1,1657041660,600000,"B ",0.006000 + 1,1,1657041660,640000,"B ",0.006000 + 1,1,1657041660,680000,"B ",0.006000 + 1,1,1657041660,720000,"B ",0.006000 + 1,1,1657041660,760000,"B ",0.006000 + 1,1,1657041660,800000,"B ",0.006000 + 1,1,1657041660,840000,"B ",0.006000 + 1,1,1657041660,880000,"B ",0.006000 + 1,1,1657041660,920000,"B ",0.006000 + 1,1,1657041660,960000,"B ",0.006000 + 1,1,1657041661,0,"B ",0.006000 + 1,1,1657041661,40000,"B ",0.006000 + 1,1,1657041661,80000,"B ",0.006000 + 1,1,1657041661,120000,"B ",0.006000 + 1,1,1657041661,160000,"B ",0.006000 + 1,1,1657041661,200000,"B ",0.006000 + 1,1,1657041661,240000,"B ",0.006000 + 1,1,1657041661,280000,"B ",0.006000 + 1,1,1657041661,320000,"B ",0.006000 + 1,1,1657041661,360000,"B ",0.006000 + 1,1,1657041661,400000,"B ",0.006000 + 1,1,1657041661,440000,"B ",0.006000 + 1,1,1657041661,480000,"B ",0.006000 + 1,1,1657041661,520000,"B ",0.006000 + 1,1,1657041661,560000,"B ",0.006000 + 1,1,1657041661,600000,"B ",0.006000 + 1,1,1657041661,640000,"B ",0.006000 + 1,1,1657041661,680000,"B ",0.006000 + 1,1,1657041661,720000,"B ",0.006000 + 1,1,1657041661,760000,"B ",0.006000 + 1,1,1657041661,800000,"B ",0.006000 + 1,1,1657041661,840000,"B ",0.006000 + 1,1,1657041661,880000,"B ",0.006000 + 1,1,1657041661,920000,"B ",0.006000 + 1,1,1657041661,960000,"B ",0.006000 + 1,1,1657041662,0,"B ",0.006000 + 1,1,1657041662,40000,"B ",0.006000 + 1,1,1657041662,80000,"B ",0.006000 + 1,1,1657041662,120000,"B ",0.006000 + 1,1,1657041662,160000,"B ",0.006000 + 1,1,1657041662,200000,"B ",0.006000 + 1,1,1657041662,240000,"B ",0.006000 + 1,1,1657041662,280000,"B ",0.006000 + 1,1,1657041662,320000,"B ",0.006000 + 1,1,1657041662,360000,"B ",0.006000 + 1,1,1657041662,400000,"B ",0.006000 + 1,1,1657041662,440000,"B ",0.006000 + 1,1,1657041662,480000,"B ",0.006000 + 1,1,1657041662,520000,"B ",0.006000 + 1,1,1657041662,560000,"B ",0.006000 + 1,1,1657041662,600000,"B ",0.006000 + 1,1,1657041662,640000,"B ",0.006000 + 1,1,1657041662,680000,"B ",0.006000 + 1,1,1657041662,720000,"B ",0.006000 + 1,1,1657041662,760000,"B ",0.006000 + 1,1,1657041662,800000,"B ",0.006000 + 1,1,1657041662,840000,"B ",0.006000 + 1,1,1657041662,880000,"B ",0.006000 + 1,1,1657041662,920000,"B ",0.006000 + 1,1,1657041662,960000,"B ",0.006000 + 1,1,1657041663,0,"B ",0.006000 + 1,1,1657041663,40000,"B ",0.006000 + 1,1,1657041663,80000,"B ",0.006000 + 1,1,1657041663,120000,"B ",0.006000 + 1,1,1657041663,160000,"B ",0.006000 + 1,1,1657041663,200000,"B ",0.006000 + 1,1,1657041663,240000,"B ",0.006000 + 1,1,1657041663,280000,"B ",0.006000 + 1,1,1657041663,320000,"B ",0.006000 + 1,1,1657041663,360000,"B ",0.006000 + 1,1,1657041663,400000,"B ",0.006000 + 1,1,1657041663,440000,"B ",0.006000 + 1,1,1657041663,480000,"B ",0.006000 + 1,1,1657041663,520000,"B ",0.006000 + 1,1,1657041663,560000,"B ",0.006000 + 1,1,1657041663,600000,"B ",0.006000 + 1,1,1657041663,640000,"B ",0.006000 + 1,1,1657041663,680000,"B ",0.006000 + 1,1,1657041663,720000,"B ",0.006000 + 1,1,1657041663,760000,"B ",0.006000 + 1,1,1657041663,800000,"B ",0.006000 + 1,1,1657041663,840000,"B ",0.006000 + 1,1,1657041663,880000,"B ",0.006000 + 1,1,1657041663,920000,"B ",0.006000 + 1,1,1657041663,960000,"B ",0.006000 + 1,1,1657041664,0,"B ",0.006000 + 1,1,1657041664,40000,"B ",0.006000 + 1,1,1657041664,80000,"B ",0.006000 + 1,1,1657041664,120000,"B ",0.006000 + 1,1,1657041664,160000,"B ",0.006000 + 1,1,1657041664,200000,"B ",0.006000 + 1,1,1657041664,240000,"B ",0.006000 + 1,1,1657041664,280000,"B ",0.006000 + 1,1,1657041664,320000,"B ",0.006000 + 1,1,1657041664,360000,"B ",0.006000 + 1,1,1657041664,400000,"B ",0.006000 + 1,1,1657041664,440000,"B ",0.006000 + 1,1,1657041664,480000,"B ",0.006000 + 1,1,1657041664,520000,"B ",0.006000 + 1,1,1657041664,560000,"B ",0.006000 + 1,1,1657041664,600000,"B ",0.006000 + 1,1,1657041664,640000,"B ",0.006000 + 1,1,1657041664,680000,"B ",0.006000 + 1,1,1657041664,720000,"B ",0.006000 + 1,1,1657041664,760000,"B ",0.006000 + 1,1,1657041664,800000,"B ",0.006000 + 1,1,1657041664,840000,"B ",0.006000 + 1,1,1657041664,880000,"B ",0.006000 + 1,1,1657041664,920000,"B ",0.006000 + 1,1,1657041664,960000,"B ",0.006000 + 1,1,1657041665,0,"B ",0.006000 + 1,1,1657041665,40000,"B ",0.006000 + 1,1,1657041665,80000,"B ",0.006000 + 1,1,1657041665,120000,"B ",0.006000 + 1,1,1657041665,160000,"B ",0.006000 + 1,1,1657041665,200000,"B ",0.006000 + 1,1,1657041665,240000,"B ",0.006000 + 1,1,1657041665,280000,"B ",0.006000 + 1,1,1657041665,320000,"B ",0.006000 + 1,1,1657041665,360000,"B ",0.006000 + 1,1,1657041665,400000,"B ",0.006000 + 1,1,1657041665,440000,"B ",0.006000 + 1,1,1657041665,480000,"B ",0.006000 + 1,1,1657041665,520000,"B ",0.006000 + 1,1,1657041665,560000,"B ",0.006000 + 1,1,1657041665,600000,"B ",0.006000 + 1,1,1657041665,640000,"B ",0.006000 + 1,1,1657041665,680000,"B ",0.006000 + 1,1,1657041665,720000,"B ",0.006000 + 1,1,1657041665,760000,"B ",0.006000 + 1,1,1657041665,800000,"B ",0.006000 + 1,1,1657041665,840000,"B ",0.006000 + 1,1,1657041665,880000,"B ",0.006000 + 1,1,1657041665,920000,"B ",0.006000 + 1,1,1657041665,960000,"B ",0.006000 + 1,1,1657041666,0,"B ",0.006000 + 1,1,1657041666,40000,"B ",0.006000 + 1,1,1657041666,80000,"B ",0.006000 + 1,1,1657041666,120000,"B ",0.006000 + 1,1,1657041666,160000,"B ",0.006000 + 1,1,1657041666,200000,"B ",0.006000 + 1,1,1657041666,240000,"B ",0.006000 + 1,1,1657041666,280000,"B ",0.006000 + 1,1,1657041666,320000,"B ",0.006000 + 1,1,1657041666,360000,"B ",0.006000 + 1,1,1657041666,400000,"B ",0.006000 + 1,1,1657041666,440000,"B ",0.006000 + 1,1,1657041666,480000,"B ",0.006000 + 1,1,1657041666,520000,"B ",0.006000 + 1,1,1657041666,560000,"B ",0.006000 + 1,1,1657041666,600000,"B ",0.006000 + 1,1,1657041666,640000,"B ",0.006000 + 1,1,1657041666,680000,"B ",0.006000 + 1,1,1657041666,720000,"B ",0.006000 + 1,1,1657041666,760000,"B ",0.006000 diff --git a/DBServer/DIGITAL_MEASUREMENTS.txt b/DBServer/DIGITAL_MEASUREMENTS.txt new file mode 100644 index 0000000..e69de29 diff --git a/DBServer/Db.sql b/DBServer/Db.sql new file mode 100755 index 0000000..ba6f386 --- /dev/null +++ b/DBServer/Db.sql @@ -0,0 +1,214 @@ +-- ============================================================================= +-- Db.sql (iPDC Data Structures for MySQL ) +-- +-- iPDC - Phasor Data Concentrator +-- +-- Copyright (C) 2011 Nitesh Pandit +-- Copyright (C) 2011 Kedar V. Khandeparkar +-- +-- This program is free software; you can redistribute it and/or +-- modify it under the terms of the GNU General Public License +-- as published by the Free Software Foundation; either version 2 +-- of the License, or (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +-- +-- Authors: +-- Kedar V. Khandeparkar +-- Nitesh Pandit +-- +-- ============================================================================= + + +-- First execute the following from the command prompt to create database: +-- mysql -uroot -p <"Db.sql" + +-- The following statements are used to create a user with access to the database. +-- Be sure to change the username and password. +-- CREATE USER NewUser IDENTIFIED BY 'MyPassword'; +-- GRANT SELECT, UPDATE, INSERT, DELETE ON iPDC.* TO NewUser; + +SET default_storage_engine=INNODB; +CREATE DATABASE iPDC; +USE iPDC; + + +-- ============================================================================================ +-- This creates Main Configuration Table, +-- This table stores MAIN CONFIGURATION details Like PDC_ID, SOC, TIME BASE, NO. OF PMU, +-- DATA Rate in iPDC Database + +CREATE TABLE MAIN_CFG_TABLE( + PDC_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + TIMEBASE DECIMAL(10) NOT NULL, + NUM_OF_PMU INT NOT NULL, + DATA_RATE INT DEFAULT 0, + PRIMARY KEY (PDC_ID ASC) +); + + +-- ============================================================================================ +-- This creates Sub Configuration Table, +-- This table stores Sub Configuration details Like PDC_ID, PMU_ID, SOC,Fraction of Second, +-- Station Name, No. of Analog channels, No. of Phasor channels in iPDC Database + +CREATE TABLE SUB_CFG_TABLE( + + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + STN VARCHAR(40) NOT NULL, + PHNMR INT DEFAULT 0, + ANNMR INT DEFAULT 0, + DGNMR INT DEFAULT 0, + FNOM INT DEFAULT 0, + PRIMARY KEY (PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID) +); + +-- ============================================================================================ +-- This creates Phasor channel information Table +-- This table stores details about phasor Configuration like PDC_ID, Phasor name, Phasor type, +-- Phasor units in iPDC Database + +CREATE TABLE PHASOR ( + + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + PHASOR_NAMES VARCHAR(32) NOT NULL, + PHASOR_TYPE VARCHAR(3) NOT NULL, + PHUNITS FLOAT(20,6) DEFAULT 1.0, + PRIMARY KEY(PHASOR_NAMES,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) +); + +-- ============================================================================================ +-- This creates ANALOG channel information Table +-- This table stores details about Analog Configuration like PDC_ID, Analog name, Analog type, +-- Analog units in iPDC Database + +CREATE TABLE ANALOG ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + ANALOG_NAMES VARCHAR(32) NOT NULL, + ANALOG_TYPE VARCHAR(6) NOT NULL, + ANUNITS FLOAT(20,6) DEFAULT 1.0, + PRIMARY KEY(ANALOG_NAMES,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + + +-- ============================================================================================ +-- This creates Digital information Table +-- this table stores details about Digital channel Configuration like Digital Status word etc.. +-- in iPDC Database + +CREATE TABLE DIGITAL ( + + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + DIGITAL_NAMES VARCHAR(32) NOT NULL, + DIGITAL_WORD BIGINT NOT NULL, + PRIMARY KEY(DIGITAL_NAMES,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) +); + +-- ============================================================================================ +-- This creates Phasor Data Table +-- this table stores measurements received from phasor data channel(s) in iPDC Database. + +CREATE TABLE PHASOR_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + PHASOR_NAME VARCHAR(32) NOT NULL, + PHASOR_AMPLITUDE REAL NOT NULL, + PHASOR_ANGLE REAL NOT NULL, + CONSTRAINT FOREIGN KEY (PHASOR_NAME) REFERENCES PHASOR (PHASOR_NAMES), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) +); + +-- ============================================================================================ +-- This creates Analog Data Table in iPDC database, +-- this table stores measurements received from Analog data channel(s) in iPDC Database. + +CREATE TABLE ANALOG_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + ANALOG_NAME VARCHAR(32) NOT NULL, + ANALOG_VALUE REAL NOT NULL, + CONSTRAINT FOREIGN KEY (ANALOG_NAME) REFERENCES ANALOG (ANALOG_NAMES), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + +-- ============================================================================================ +-- This creates "Digital Measurements" Table +-- this table stores measurements received from Digital data channel in iPDC Database. + +CREATE TABLE DIGITAL_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + DIGITAL_WORD INT NOT NULL, + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + +-- ============================================================================================ +-- This creates "Frequency Measurements" Table +-- This table stores Frequency measurements received from frequency data channel in iPDC +-- Database. + +CREATE TABLE FREQUENCY_MEASUREMENTS ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + SOC DECIMAL(10) NOT NULL, + FRACSEC DECIMAL(10) NOT NULL, + FREQ FLOAT (10, 8) NOT NULL, + DFREQ FLOAT (10, 8) NOT NULL, + PRIMARY KEY(SOC,FRACSEC,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); + +-- ============================================================================================ +-- This creates Received frame Time Table +-- This table stores REceived frame time log in iPDC Database. + +CREATE TABLE RECEIVED_FRAME_TIME ( + PDC_ID INT NOT NULL, + PMU_ID INT NOT NULL, + FRAME_SOC DECIMAL(10) NOT NULL, + FRAME_FRACSEC DECIMAL(10) NOT NULL, + RECEIVE_SOC DECIMAL(10) NOT NULL, + RECEIVE_FRACSEC DECIMAL(10) NOT NULL, + TIME_DIFF DECIMAL(10) NOT NULL, + PRIMARY KEY(FRAME_SOC,FRAME_FRACSEC,PDC_ID,PMU_ID), + CONSTRAINT FOREIGN KEY (PDC_ID) REFERENCES MAIN_CFG_TABLE (PDC_ID), + CONSTRAINT FOREIGN KEY (PMU_ID) REFERENCES SUB_CFG_TABLE (PMU_ID) + +); +-- ============================================================================================ diff --git a/DBServer/Doxyfile b/DBServer/Doxyfile new file mode 100755 index 0000000..80b247d --- /dev/null +++ b/DBServer/Doxyfile @@ -0,0 +1,1285 @@ + # ----------------------------------------------------------------------------- + # Doxyfile for documentation of DBServer + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = DBServer + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /usr/local/bin/dot + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/DBServer/FREQUENCY_MEASUREMENTS.txt b/DBServer/FREQUENCY_MEASUREMENTS.txt new file mode 100644 index 0000000..f79a713 --- /dev/null +++ b/DBServer/FREQUENCY_MEASUREMENTS.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,880000,50.400002,0.000000 + 1,1,1657041650,920000,50.099998,0.000000 + 1,1,1657041650,960000,50.099998,0.000000 + 1,1,1657041651,0,50.400002,0.000000 + 1,1,1657041651,40000,50.400002,0.000000 + 1,1,1657041651,80000,50.200001,0.000000 + 1,1,1657041651,120000,50.500000,0.000000 + 1,1,1657041651,160000,50.400002,0.000000 + 1,1,1657041651,200000,50.500000,0.000000 + 1,1,1657041651,240000,50.299999,0.000000 + 1,1,1657041651,280000,50.299999,0.000000 + 1,1,1657041651,320000,50.099998,0.000000 + 1,1,1657041651,360000,50.500000,0.000000 + 1,1,1657041651,400000,50.200001,0.000000 + 1,1,1657041651,440000,50.500000,0.000000 + 1,1,1657041651,480000,50.099998,0.000000 + 1,1,1657041651,520000,50.500000,0.000000 + 1,1,1657041651,560000,50.500000,0.000000 + 1,1,1657041651,600000,50.200001,0.000000 + 1,1,1657041651,640000,50.099998,0.000000 + 1,1,1657041651,680000,50.500000,0.000000 + 1,1,1657041651,720000,50.200001,0.000000 + 1,1,1657041651,760000,50.500000,0.000000 + 1,1,1657041651,800000,50.200001,0.000000 + 1,1,1657041651,840000,50.500000,0.000000 + 1,1,1657041651,880000,50.200001,0.000000 + 1,1,1657041651,920000,50.299999,0.000000 + 1,1,1657041651,960000,50.500000,0.000000 + 1,1,1657041652,0,50.099998,0.000000 + 1,1,1657041652,40000,50.299999,0.000000 + 1,1,1657041652,80000,50.400002,0.000000 + 1,1,1657041652,120000,50.200001,0.000000 + 1,1,1657041652,160000,50.200001,0.000000 + 1,1,1657041652,200000,50.299999,0.000000 + 1,1,1657041652,240000,50.500000,0.000000 + 1,1,1657041652,280000,50.400002,0.000000 + 1,1,1657041652,320000,50.200001,0.000000 + 1,1,1657041652,360000,50.299999,0.000000 + 1,1,1657041652,400000,50.099998,0.000000 + 1,1,1657041652,440000,50.200001,0.000000 + 1,1,1657041652,480000,50.099998,0.000000 + 1,1,1657041652,520000,50.299999,0.000000 + 1,1,1657041652,560000,50.299999,0.000000 + 1,1,1657041652,600000,50.299999,0.000000 + 1,1,1657041652,640000,50.299999,0.000000 + 1,1,1657041652,680000,50.200001,0.000000 + 1,1,1657041652,720000,50.299999,0.000000 + 1,1,1657041652,760000,50.400002,0.000000 + 1,1,1657041652,800000,50.500000,0.000000 + 1,1,1657041652,840000,50.099998,0.000000 + 1,1,1657041652,880000,50.099998,0.000000 + 1,1,1657041652,920000,50.200001,0.000000 + 1,1,1657041652,960000,50.299999,0.000000 + 1,1,1657041653,0,50.500000,0.000000 + 1,1,1657041653,40000,50.200001,0.000000 + 1,1,1657041653,80000,50.099998,0.000000 + 1,1,1657041653,120000,50.500000,0.000000 + 1,1,1657041653,160000,50.400002,0.000000 + 1,1,1657041653,200000,50.299999,0.000000 + 1,1,1657041653,240000,50.099998,0.000000 + 1,1,1657041653,280000,50.400002,0.000000 + 1,1,1657041653,320000,50.299999,0.000000 + 1,1,1657041653,360000,50.400002,0.000000 + 1,1,1657041653,400000,50.400002,0.000000 + 1,1,1657041653,440000,50.400002,0.000000 + 1,1,1657041653,480000,50.200001,0.000000 + 1,1,1657041653,520000,50.500000,0.000000 + 1,1,1657041653,560000,50.099998,0.000000 + 1,1,1657041653,600000,50.099998,0.000000 + 1,1,1657041653,640000,50.200001,0.000000 + 1,1,1657041653,680000,50.200001,0.000000 + 1,1,1657041653,720000,50.200001,0.000000 + 1,1,1657041653,760000,50.200001,0.000000 + 1,1,1657041653,800000,50.200001,0.000000 + 1,1,1657041653,840000,50.299999,0.000000 + 1,1,1657041653,880000,50.099998,0.000000 + 1,1,1657041653,920000,50.400002,0.000000 + 1,1,1657041653,960000,50.500000,0.000000 + 1,1,1657041654,0,50.200001,0.000000 + 1,1,1657041654,40000,50.400002,0.000000 + 1,1,1657041654,80000,50.200001,0.000000 + 1,1,1657041654,120000,50.500000,0.000000 + 1,1,1657041654,160000,50.299999,0.000000 + 1,1,1657041654,200000,50.200001,0.000000 + 1,1,1657041654,240000,50.299999,0.000000 + 1,1,1657041654,280000,50.400002,0.000000 + 1,1,1657041654,320000,50.400002,0.000000 + 1,1,1657041654,360000,50.400002,0.000000 + 1,1,1657041654,400000,50.500000,0.000000 + 1,1,1657041654,440000,50.500000,0.000000 + 1,1,1657041654,480000,50.099998,0.000000 + 1,1,1657041654,520000,50.099998,0.000000 + 1,1,1657041654,560000,50.400002,0.000000 + 1,1,1657041654,600000,50.299999,0.000000 + 1,1,1657041654,640000,50.099998,0.000000 + 1,1,1657041654,680000,50.299999,0.000000 + 1,1,1657041654,720000,50.400002,0.000000 + 1,1,1657041654,760000,50.299999,0.000000 + 1,1,1657041654,800000,50.200001,0.000000 + 1,1,1657041654,840000,50.099998,0.000000 + 1,1,1657041654,880000,50.099998,0.000000 + 1,1,1657041654,920000,50.400002,0.000000 + 1,1,1657041654,960000,50.200001,0.000000 + 1,1,1657041655,0,50.200001,0.000000 + 1,1,1657041655,40000,50.500000,0.000000 + 1,1,1657041655,80000,50.299999,0.000000 + 1,1,1657041655,120000,50.299999,0.000000 + 1,1,1657041655,160000,50.500000,0.000000 + 1,1,1657041655,200000,50.200001,0.000000 + 1,1,1657041655,240000,50.299999,0.000000 + 1,1,1657041655,280000,50.200001,0.000000 + 1,1,1657041655,320000,50.500000,0.000000 + 1,1,1657041655,360000,50.299999,0.000000 + 1,1,1657041655,400000,50.200001,0.000000 + 1,1,1657041655,440000,50.200001,0.000000 + 1,1,1657041655,480000,50.299999,0.000000 + 1,1,1657041655,520000,50.400002,0.000000 + 1,1,1657041655,560000,50.099998,0.000000 + 1,1,1657041655,600000,50.500000,0.000000 + 1,1,1657041655,640000,50.099998,0.000000 + 1,1,1657041655,680000,50.500000,0.000000 + 1,1,1657041655,720000,50.500000,0.000000 + 1,1,1657041655,760000,50.099998,0.000000 + 1,1,1657041655,800000,50.200001,0.000000 + 1,1,1657041655,840000,50.099998,0.000000 + 1,1,1657041655,880000,50.400002,0.000000 + 1,1,1657041655,920000,50.099998,0.000000 + 1,1,1657041655,960000,50.299999,0.000000 + 1,1,1657041656,0,50.500000,0.000000 + 1,1,1657041656,40000,50.500000,0.000000 + 1,1,1657041656,80000,50.400002,0.000000 + 1,1,1657041656,120000,50.200001,0.000000 + 1,1,1657041656,160000,50.099998,0.000000 + 1,1,1657041656,200000,50.500000,0.000000 + 1,1,1657041656,240000,50.200001,0.000000 + 1,1,1657041656,280000,50.400002,0.000000 + 1,1,1657041656,320000,50.099998,0.000000 + 1,1,1657041656,360000,50.500000,0.000000 + 1,1,1657041656,400000,50.299999,0.000000 + 1,1,1657041656,440000,50.299999,0.000000 + 1,1,1657041656,480000,50.200001,0.000000 + 1,1,1657041656,520000,50.500000,0.000000 + 1,1,1657041656,560000,50.400002,0.000000 + 1,1,1657041656,600000,50.299999,0.000000 + 1,1,1657041656,640000,50.299999,0.000000 + 1,1,1657041656,680000,50.500000,0.000000 + 1,1,1657041656,720000,50.200001,0.000000 + 1,1,1657041656,760000,50.099998,0.000000 + 1,1,1657041656,800000,50.500000,0.000000 + 1,1,1657041656,840000,50.500000,0.000000 + 1,1,1657041656,880000,50.099998,0.000000 + 1,1,1657041656,920000,50.299999,0.000000 + 1,1,1657041656,960000,50.200001,0.000000 + 1,1,1657041657,0,50.200001,0.000000 + 1,1,1657041657,40000,50.099998,0.000000 + 1,1,1657041657,80000,50.200001,0.000000 + 1,1,1657041657,120000,50.400002,0.000000 + 1,1,1657041657,160000,50.400002,0.000000 + 1,1,1657041657,200000,50.099998,0.000000 + 1,1,1657041657,240000,50.400002,0.000000 + 1,1,1657041657,280000,50.400002,0.000000 + 1,1,1657041657,320000,50.400002,0.000000 + 1,1,1657041657,360000,50.200001,0.000000 + 1,1,1657041657,400000,50.099998,0.000000 + 1,1,1657041657,440000,50.099998,0.000000 + 1,1,1657041657,480000,50.400002,0.000000 + 1,1,1657041657,520000,50.500000,0.000000 + 1,1,1657041657,560000,50.400002,0.000000 + 1,1,1657041657,600000,50.099998,0.000000 + 1,1,1657041657,640000,50.500000,0.000000 + 1,1,1657041657,680000,50.400002,0.000000 + 1,1,1657041657,720000,50.299999,0.000000 + 1,1,1657041657,760000,50.400002,0.000000 + 1,1,1657041657,800000,50.500000,0.000000 + 1,1,1657041657,840000,50.099998,0.000000 + 1,1,1657041657,880000,50.400002,0.000000 + 1,1,1657041657,920000,50.500000,0.000000 + 1,1,1657041657,960000,50.400002,0.000000 + 1,1,1657041658,0,50.500000,0.000000 + 1,1,1657041658,40000,50.400002,0.000000 + 1,1,1657041658,80000,50.400002,0.000000 + 1,1,1657041658,120000,50.200001,0.000000 + 1,1,1657041658,160000,50.500000,0.000000 + 1,1,1657041658,200000,50.400002,0.000000 + 1,1,1657041658,240000,50.200001,0.000000 + 1,1,1657041658,280000,50.099998,0.000000 + 1,1,1657041658,320000,50.200001,0.000000 + 1,1,1657041658,360000,50.500000,0.000000 + 1,1,1657041658,400000,50.500000,0.000000 + 1,1,1657041658,440000,50.400002,0.000000 + 1,1,1657041658,480000,50.099998,0.000000 + 1,1,1657041658,520000,50.099998,0.000000 + 1,1,1657041658,560000,50.200001,0.000000 + 1,1,1657041658,600000,50.099998,0.000000 + 1,1,1657041658,640000,50.099998,0.000000 + 1,1,1657041658,680000,50.200001,0.000000 + 1,1,1657041658,720000,50.099998,0.000000 + 1,1,1657041658,760000,50.500000,0.000000 + 1,1,1657041658,800000,50.099998,0.000000 + 1,1,1657041658,840000,50.299999,0.000000 + 1,1,1657041658,880000,50.299999,0.000000 + 1,1,1657041658,920000,50.099998,0.000000 + 1,1,1657041658,960000,50.400002,0.000000 + 1,1,1657041659,0,50.200001,0.000000 + 1,1,1657041659,40000,50.099998,0.000000 + 1,1,1657041659,80000,50.200001,0.000000 + 1,1,1657041659,120000,50.400002,0.000000 + 1,1,1657041659,160000,50.400002,0.000000 + 1,1,1657041659,200000,50.500000,0.000000 + 1,1,1657041659,240000,50.099998,0.000000 + 1,1,1657041659,280000,50.200001,0.000000 + 1,1,1657041659,320000,50.200001,0.000000 + 1,1,1657041659,360000,50.400002,0.000000 + 1,1,1657041659,400000,50.299999,0.000000 + 1,1,1657041659,440000,50.299999,0.000000 + 1,1,1657041659,480000,50.200001,0.000000 + 1,1,1657041659,520000,50.200001,0.000000 + 1,1,1657041659,560000,50.299999,0.000000 + 1,1,1657041659,600000,50.099998,0.000000 + 1,1,1657041659,640000,50.299999,0.000000 + 1,1,1657041659,680000,50.099998,0.000000 + 1,1,1657041659,720000,50.299999,0.000000 + 1,1,1657041659,760000,50.400002,0.000000 + 1,1,1657041659,800000,50.200001,0.000000 + 1,1,1657041659,840000,50.400002,0.000000 + 1,1,1657041659,880000,50.200001,0.000000 + 1,1,1657041659,920000,50.400002,0.000000 + 1,1,1657041659,960000,50.299999,0.000000 + 1,1,1657041660,0,50.200001,0.000000 + 1,1,1657041660,40000,50.299999,0.000000 + 1,1,1657041660,80000,50.500000,0.000000 + 1,1,1657041660,120000,50.200001,0.000000 + 1,1,1657041660,160000,50.500000,0.000000 + 1,1,1657041660,200000,50.200001,0.000000 + 1,1,1657041660,240000,50.099998,0.000000 + 1,1,1657041660,280000,50.299999,0.000000 + 1,1,1657041660,320000,50.200001,0.000000 + 1,1,1657041660,360000,50.299999,0.000000 + 1,1,1657041660,400000,50.500000,0.000000 + 1,1,1657041660,440000,50.400002,0.000000 + 1,1,1657041660,480000,50.200001,0.000000 + 1,1,1657041660,520000,50.200001,0.000000 + 1,1,1657041660,560000,50.299999,0.000000 + 1,1,1657041660,600000,50.500000,0.000000 + 1,1,1657041660,640000,50.200001,0.000000 + 1,1,1657041660,680000,50.200001,0.000000 + 1,1,1657041660,720000,50.099998,0.000000 + 1,1,1657041660,760000,50.099998,0.000000 + 1,1,1657041660,800000,50.099998,0.000000 + 1,1,1657041660,840000,50.400002,0.000000 + 1,1,1657041660,880000,50.299999,0.000000 + 1,1,1657041660,920000,50.400002,0.000000 + 1,1,1657041660,960000,50.299999,0.000000 + 1,1,1657041661,0,50.200001,0.000000 + 1,1,1657041661,40000,50.500000,0.000000 + 1,1,1657041661,80000,50.299999,0.000000 + 1,1,1657041661,120000,50.500000,0.000000 + 1,1,1657041661,160000,50.200001,0.000000 + 1,1,1657041661,200000,50.200001,0.000000 + 1,1,1657041661,240000,50.200001,0.000000 + 1,1,1657041661,280000,50.400002,0.000000 + 1,1,1657041661,320000,50.200001,0.000000 + 1,1,1657041661,360000,50.200001,0.000000 + 1,1,1657041661,400000,50.500000,0.000000 + 1,1,1657041661,440000,50.400002,0.000000 + 1,1,1657041661,480000,50.200001,0.000000 + 1,1,1657041661,520000,50.099998,0.000000 + 1,1,1657041661,560000,50.299999,0.000000 + 1,1,1657041661,600000,50.299999,0.000000 + 1,1,1657041661,640000,50.500000,0.000000 + 1,1,1657041661,680000,50.400002,0.000000 + 1,1,1657041661,720000,50.400002,0.000000 + 1,1,1657041661,760000,50.500000,0.000000 + 1,1,1657041661,800000,50.099998,0.000000 + 1,1,1657041661,840000,50.500000,0.000000 + 1,1,1657041661,880000,50.099998,0.000000 + 1,1,1657041661,920000,50.400002,0.000000 + 1,1,1657041661,960000,50.400002,0.000000 + 1,1,1657041662,0,50.500000,0.000000 + 1,1,1657041662,40000,50.400002,0.000000 + 1,1,1657041662,80000,50.099998,0.000000 + 1,1,1657041662,120000,50.299999,0.000000 + 1,1,1657041662,160000,50.500000,0.000000 + 1,1,1657041662,200000,50.200001,0.000000 + 1,1,1657041662,240000,50.200001,0.000000 + 1,1,1657041662,280000,50.099998,0.000000 + 1,1,1657041662,320000,50.099998,0.000000 + 1,1,1657041662,360000,50.400002,0.000000 + 1,1,1657041662,400000,50.500000,0.000000 + 1,1,1657041662,440000,50.500000,0.000000 + 1,1,1657041662,480000,50.099998,0.000000 + 1,1,1657041662,520000,50.400002,0.000000 + 1,1,1657041662,560000,50.200001,0.000000 + 1,1,1657041662,600000,50.299999,0.000000 + 1,1,1657041662,640000,50.200001,0.000000 + 1,1,1657041662,680000,50.099998,0.000000 + 1,1,1657041662,720000,50.500000,0.000000 + 1,1,1657041662,760000,50.500000,0.000000 + 1,1,1657041662,800000,50.200001,0.000000 + 1,1,1657041662,840000,50.099998,0.000000 + 1,1,1657041662,880000,50.299999,0.000000 + 1,1,1657041662,920000,50.099998,0.000000 + 1,1,1657041662,960000,50.099998,0.000000 + 1,1,1657041663,0,50.200001,0.000000 + 1,1,1657041663,40000,50.500000,0.000000 + 1,1,1657041663,80000,50.099998,0.000000 + 1,1,1657041663,120000,50.400002,0.000000 + 1,1,1657041663,160000,50.400002,0.000000 + 1,1,1657041663,200000,50.500000,0.000000 + 1,1,1657041663,240000,50.400002,0.000000 + 1,1,1657041663,280000,50.200001,0.000000 + 1,1,1657041663,320000,50.099998,0.000000 + 1,1,1657041663,360000,50.099998,0.000000 + 1,1,1657041663,400000,50.200001,0.000000 + 1,1,1657041663,440000,50.099998,0.000000 + 1,1,1657041663,480000,50.099998,0.000000 + 1,1,1657041663,520000,50.400002,0.000000 + 1,1,1657041663,560000,50.099998,0.000000 + 1,1,1657041663,600000,50.099998,0.000000 + 1,1,1657041663,640000,50.500000,0.000000 + 1,1,1657041663,680000,50.099998,0.000000 + 1,1,1657041663,720000,50.299999,0.000000 + 1,1,1657041663,760000,50.400002,0.000000 + 1,1,1657041663,800000,50.500000,0.000000 + 1,1,1657041663,840000,50.200001,0.000000 + 1,1,1657041663,880000,50.400002,0.000000 + 1,1,1657041663,920000,50.099998,0.000000 + 1,1,1657041663,960000,50.400002,0.000000 + 1,1,1657041664,0,50.500000,0.000000 + 1,1,1657041664,40000,50.500000,0.000000 + 1,1,1657041664,80000,50.200001,0.000000 + 1,1,1657041664,120000,50.200001,0.000000 + 1,1,1657041664,160000,50.400002,0.000000 + 1,1,1657041664,200000,50.299999,0.000000 + 1,1,1657041664,240000,50.500000,0.000000 + 1,1,1657041664,280000,50.099998,0.000000 + 1,1,1657041664,320000,50.299999,0.000000 + 1,1,1657041664,360000,50.099998,0.000000 + 1,1,1657041664,400000,50.500000,0.000000 + 1,1,1657041664,440000,50.099998,0.000000 + 1,1,1657041664,480000,50.400002,0.000000 + 1,1,1657041664,520000,50.200001,0.000000 + 1,1,1657041664,560000,50.299999,0.000000 + 1,1,1657041664,600000,50.400002,0.000000 + 1,1,1657041664,640000,50.299999,0.000000 + 1,1,1657041664,680000,50.400002,0.000000 + 1,1,1657041664,720000,50.400002,0.000000 + 1,1,1657041664,760000,50.500000,0.000000 + 1,1,1657041664,800000,50.400002,0.000000 + 1,1,1657041664,840000,50.400002,0.000000 + 1,1,1657041664,880000,50.200001,0.000000 + 1,1,1657041664,920000,50.299999,0.000000 + 1,1,1657041664,960000,50.099998,0.000000 + 1,1,1657041665,0,50.500000,0.000000 + 1,1,1657041665,40000,50.200001,0.000000 + 1,1,1657041665,80000,50.200001,0.000000 + 1,1,1657041665,120000,50.500000,0.000000 + 1,1,1657041665,160000,50.099998,0.000000 + 1,1,1657041665,200000,50.099998,0.000000 + 1,1,1657041665,240000,50.200001,0.000000 + 1,1,1657041665,280000,50.299999,0.000000 + 1,1,1657041665,320000,50.400002,0.000000 + 1,1,1657041665,360000,50.500000,0.000000 + 1,1,1657041665,400000,50.500000,0.000000 + 1,1,1657041665,440000,50.400002,0.000000 + 1,1,1657041665,480000,50.500000,0.000000 + 1,1,1657041665,520000,50.500000,0.000000 + 1,1,1657041665,560000,50.099998,0.000000 + 1,1,1657041665,600000,50.400002,0.000000 + 1,1,1657041665,640000,50.400002,0.000000 + 1,1,1657041665,680000,50.299999,0.000000 + 1,1,1657041665,720000,50.200001,0.000000 + 1,1,1657041665,760000,50.299999,0.000000 + 1,1,1657041665,800000,50.400002,0.000000 + 1,1,1657041665,840000,50.299999,0.000000 + 1,1,1657041665,880000,50.200001,0.000000 + 1,1,1657041665,920000,50.200001,0.000000 + 1,1,1657041665,960000,50.099998,0.000000 + 1,1,1657041666,0,50.299999,0.000000 + 1,1,1657041666,40000,50.500000,0.000000 + 1,1,1657041666,80000,50.200001,0.000000 + 1,1,1657041666,120000,50.099998,0.000000 + 1,1,1657041666,160000,50.299999,0.000000 + 1,1,1657041666,200000,50.299999,0.000000 + 1,1,1657041666,240000,50.500000,0.000000 + 1,1,1657041666,280000,50.200001,0.000000 + 1,1,1657041666,320000,50.099998,0.000000 + 1,1,1657041666,360000,50.299999,0.000000 + 1,1,1657041666,400000,50.299999,0.000000 + 1,1,1657041666,440000,50.500000,0.000000 + 1,1,1657041666,480000,50.299999,0.000000 + 1,1,1657041666,520000,50.500000,0.000000 + 1,1,1657041666,560000,50.200001,0.000000 + 1,1,1657041666,600000,50.299999,0.000000 + 1,1,1657041666,640000,50.099998,0.000000 + 1,1,1657041666,680000,50.500000,0.000000 + 1,1,1657041666,720000,50.099998,0.000000 + 1,1,1657041666,760000,50.099998,0.000000 diff --git a/DBServer/Makefile b/DBServer/Makefile new file mode 100755 index 0000000..a5faa34 --- /dev/null +++ b/DBServer/Makefile @@ -0,0 +1,70 @@ + # ----------------------------------------------------------------------------- + # Makefile for building DBServer + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + + +SHELL = /bin/sh +prefix = /usr/local +includedir = /usr/src/include + +INSTALL = /usr/bin/install -c +INSTALL_PREFIX = /usr/local + +CC = gcc +LIBS = -lpthread -lm +LDLIBS=`mysql_config --cflags --libs` +CFLAGS=-Wall -g -fcommon `mysql_config --cflags --libs` + +SOURCES = \ + dbserver.c \ + recreate.c recreate.h \ + connections.c connections.h \ + parser.c parser.h \ + dallocate.c dallocate.h + +OBJECTS = dbserver.c recreate.o connections.o parser.o dallocate.o + +CLEAN_OBJECTS = recreate.o connections.o new_pmu_or_pdc.o parser.o dallocate.o cfg.bin + +PROGRAM = DBServer + +COMPILE = $(CC) + +$(PROGRAM): $(OBJECTS) + $(CC) $(OBJECTS) $(LDLIBS) $(LIBS) -o $@ + +%.o: %.c + $(COMPILE) $(CFLAGS) -c -w $< + +clean: + rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +install: $(PROGRAM) + cp -f $(PROGRAM) $(INSTALL_PREFIX)/bin/$(PROGRAM) + +uninstall: + rm -f $(INSTALL_PREFIX)/bin/$(PROGRAM) diff --git a/DBServer/PHASOR_MEASUREMENTS.txt b/DBServer/PHASOR_MEASUREMENTS.txt new file mode 100644 index 0000000..9e25a64 --- /dev/null +++ b/DBServer/PHASOR_MEASUREMENTS.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,840000,"P1 ",3995.759521,0.001298 + 1,1,1657041650,880000,"P1 ",3996.003906,0.001375 + 1,1,1657041650,920000,"P1 ",3995.575928,0.001222 + 1,1,1657041650,960000,"P1 ",3994.415283,0.000901 + 1,1,1657041651,0,"P1 ",3994.110107,0.000917 + 1,1,1657041651,40000,"P1 ",3994.354492,0.000978 + 1,1,1657041651,80000,"P1 ",3994.231689,0.000795 + 1,1,1657041651,120000,"P1 ",3995.453857,0.001191 + 1,1,1657041651,160000,"P1 ",3994.109619,0.000795 + 1,1,1657041651,200000,"P1 ",3994.293213,0.000947 + 1,1,1657041651,240000,"P1 ",3994.781982,0.001039 + 1,1,1657041651,280000,"P1 ",3996.126221,0.001390 + 1,1,1657041651,320000,"P1 ",3994.232178,0.000932 + 1,1,1657041651,360000,"P1 ",3995.026367,0.001130 + 1,1,1657041651,400000,"P1 ",3995.209473,0.001100 + 1,1,1657041651,440000,"P1 ",3994.048828,0.000886 + 1,1,1657041651,480000,"P1 ",3994.170654,0.000779 + 1,1,1657041651,520000,"P1 ",3994.292969,0.000825 + 1,1,1657041651,560000,"P1 ",3995.454102,0.001268 + 1,1,1657041651,600000,"P1 ",3994.170654,0.000810 + 1,1,1657041651,640000,"P1 ",3994.292969,0.000856 + 1,1,1657041651,680000,"P1 ",3994.354004,0.000871 + 1,1,1657041651,720000,"P1 ",3995.454346,0.001314 + 1,1,1657041651,760000,"P1 ",3994.537354,0.000947 + 1,1,1657041651,800000,"P1 ",3995.209473,0.001100 + 1,1,1657041651,840000,"P1 ",3995.026855,0.001207 + 1,1,1657041651,880000,"P1 ",3994.476562,0.000993 + 1,1,1657041651,920000,"P1 ",3995.209473,0.001130 + 1,1,1657041651,960000,"P1 ",3994.598877,0.001039 + 1,1,1657041652,0,"P1 ",3994.904541,0.001161 + 1,1,1657041652,40000,"P1 ",3994.170654,0.000779 + 1,1,1657041652,80000,"P1 ",3995.820557,0.001329 + 1,1,1657041652,120000,"P1 ",3994.049072,0.000932 + 1,1,1657041652,160000,"P1 ",3994.048828,0.000856 + 1,1,1657041652,200000,"P1 ",3995.270752,0.001161 + 1,1,1657041652,240000,"P1 ",3994.721191,0.001085 + 1,1,1657041652,280000,"P1 ",3995.881348,0.001268 + 1,1,1657041652,320000,"P1 ",3994.721191,0.001131 + 1,1,1657041652,360000,"P1 ",3995.332031,0.001268 + 1,1,1657041652,400000,"P1 ",3995.759521,0.001314 + 1,1,1657041652,440000,"P1 ",3994.904053,0.001039 + 1,1,1657041652,480000,"P1 ",3995.698730,0.001344 + 1,1,1657041652,520000,"P1 ",3995.148926,0.001222 + 1,1,1657041652,560000,"P1 ",3994.293457,0.000993 + 1,1,1657041652,600000,"P1 ",3996.126221,0.001390 + 1,1,1657041652,640000,"P1 ",3995.942627,0.001298 + 1,1,1657041652,680000,"P1 ",3995.881348,0.001268 + 1,1,1657041652,720000,"P1 ",3995.514893,0.001207 + 1,1,1657041652,760000,"P1 ",3993.926514,0.000810 + 1,1,1657041652,800000,"P1 ",3993.926758,0.000840 + 1,1,1657041652,840000,"P1 ",3995.331299,0.001130 + 1,1,1657041652,880000,"P1 ",3995.209717,0.001161 + 1,1,1657041652,920000,"P1 ",3995.271240,0.001283 + 1,1,1657041652,960000,"P1 ",3994.354492,0.000978 + 1,1,1657041653,0,"P1 ",3994.843262,0.001115 + 1,1,1657041653,40000,"P1 ",3995.331787,0.001222 + 1,1,1657041653,80000,"P1 ",3996.125977,0.001375 + 1,1,1657041653,120000,"P1 ",3994.599121,0.001115 + 1,1,1657041653,160000,"P1 ",3995.209961,0.001207 + 1,1,1657041653,200000,"P1 ",3995.697998,0.001207 + 1,1,1657041653,240000,"P1 ",3995.820312,0.001237 + 1,1,1657041653,280000,"P1 ",3995.942627,0.001329 + 1,1,1657041653,320000,"P1 ",3994.598877,0.001069 + 1,1,1657041653,360000,"P1 ",3993.926514,0.000810 + 1,1,1657041653,400000,"P1 ",3993.926758,0.000871 + 1,1,1657041653,440000,"P1 ",3996.125977,0.001344 + 1,1,1657041653,480000,"P1 ",3994.415527,0.001008 + 1,1,1657041653,520000,"P1 ",3994.904785,0.001207 + 1,1,1657041653,560000,"P1 ",3996.003662,0.001329 + 1,1,1657041653,600000,"P1 ",3994.537598,0.001008 + 1,1,1657041653,640000,"P1 ",3995.453613,0.001176 + 1,1,1657041653,680000,"P1 ",3995.331787,0.001222 + 1,1,1657041653,720000,"P1 ",3996.064697,0.001313 + 1,1,1657041653,760000,"P1 ",3995.942383,0.001252 + 1,1,1657041653,800000,"P1 ",3994.965332,0.001100 + 1,1,1657041653,840000,"P1 ",3995.576416,0.001329 + 1,1,1657041653,880000,"P1 ",3994.537354,0.000917 + 1,1,1657041653,920000,"P1 ",3995.270996,0.001191 + 1,1,1657041653,960000,"P1 ",3995.637207,0.001252 + 1,1,1657041654,0,"P1 ",3995.942627,0.001298 + 1,1,1657041654,40000,"P1 ",3995.759033,0.001222 + 1,1,1657041654,80000,"P1 ",3994.720703,0.000978 + 1,1,1657041654,120000,"P1 ",3995.271240,0.001283 + 1,1,1657041654,160000,"P1 ",3994.048828,0.000856 + 1,1,1657041654,200000,"P1 ",3995.087646,0.001161 + 1,1,1657041654,240000,"P1 ",3994.720703,0.000978 + 1,1,1657041654,280000,"P1 ",3995.026855,0.001207 + 1,1,1657041654,320000,"P1 ",3994.170898,0.000840 + 1,1,1657041654,360000,"P1 ",3994.904541,0.001161 + 1,1,1657041654,400000,"P1 ",3995.637695,0.001344 + 1,1,1657041654,440000,"P1 ",3995.698242,0.001237 + 1,1,1657041654,480000,"P1 ",3994.721191,0.001085 + 1,1,1657041654,520000,"P1 ",3994.781982,0.001039 + 1,1,1657041654,560000,"P1 ",3994.599121,0.001115 + 1,1,1657041654,600000,"P1 ",3995.515381,0.001298 + 1,1,1657041654,640000,"P1 ",3994.904541,0.001161 + 1,1,1657041654,680000,"P1 ",3995.148926,0.001222 + 1,1,1657041654,720000,"P1 ",3995.454102,0.001237 + 1,1,1657041654,760000,"P1 ",3994.415527,0.001008 + 1,1,1657041654,800000,"P1 ",3994.354736,0.001054 + 1,1,1657041654,840000,"P1 ",3994.231934,0.000825 + 1,1,1657041654,880000,"P1 ",3995.698486,0.001329 + 1,1,1657041654,920000,"P1 ",3995.575928,0.001191 + 1,1,1657041654,960000,"P1 ",3994.354004,0.000886 + 1,1,1657041655,0,"P1 ",3995.270508,0.001115 + 1,1,1657041655,40000,"P1 ",3995.821045,0.001390 + 1,1,1657041655,80000,"P1 ",3995.698242,0.001283 + 1,1,1657041655,120000,"P1 ",3994.232422,0.001008 + 1,1,1657041655,160000,"P1 ",3994.415283,0.000901 + 1,1,1657041655,200000,"P1 ",3995.087891,0.001207 + 1,1,1657041655,240000,"P1 ",3994.110107,0.000947 + 1,1,1657041655,280000,"P1 ",3996.186768,0.001298 + 1,1,1657041655,320000,"P1 ",3995.026611,0.001176 + 1,1,1657041655,360000,"P1 ",3995.453857,0.001222 + 1,1,1657041655,400000,"P1 ",3995.209473,0.001100 + 1,1,1657041655,440000,"P1 ",3995.698486,0.001329 + 1,1,1657041655,480000,"P1 ",3994.476562,0.000963 + 1,1,1657041655,520000,"P1 ",3994.720703,0.001008 + 1,1,1657041655,560000,"P1 ",3995.209473,0.001130 + 1,1,1657041655,600000,"P1 ",3994.049072,0.000932 + 1,1,1657041655,640000,"P1 ",3995.698242,0.001237 + 1,1,1657041655,680000,"P1 ",3995.943115,0.001390 + 1,1,1657041655,720000,"P1 ",3995.332031,0.001268 + 1,1,1657041655,760000,"P1 ",3995.942383,0.001252 + 1,1,1657041655,800000,"P1 ",3994.781982,0.001039 + 1,1,1657041655,840000,"P1 ",3995.759521,0.001298 + 1,1,1657041655,880000,"P1 ",3994.598633,0.000978 + 1,1,1657041655,920000,"P1 ",3995.453613,0.001146 + 1,1,1657041655,960000,"P1 ",3995.148682,0.001176 + 1,1,1657041656,0,"P1 ",3995.576416,0.001329 + 1,1,1657041656,40000,"P1 ",3995.820312,0.001283 + 1,1,1657041656,80000,"P1 ",3995.637451,0.001314 + 1,1,1657041656,120000,"P1 ",3995.942383,0.001252 + 1,1,1657041656,160000,"P1 ",3994.538086,0.001100 + 1,1,1657041656,200000,"P1 ",3994.782227,0.001115 + 1,1,1657041656,240000,"P1 ",3994.659668,0.000963 + 1,1,1657041656,280000,"P1 ",3994.170898,0.000871 + 1,1,1657041656,320000,"P1 ",3995.454346,0.001314 + 1,1,1657041656,360000,"P1 ",3995.698242,0.001237 + 1,1,1657041656,400000,"P1 ",3994.598633,0.001008 + 1,1,1657041656,440000,"P1 ",3995.759033,0.001222 + 1,1,1657041656,480000,"P1 ",3994.109863,0.000886 + 1,1,1657041656,520000,"P1 ",3995.698242,0.001283 + 1,1,1657041656,560000,"P1 ",3994.171387,0.000978 + 1,1,1657041656,600000,"P1 ",3995.820312,0.001252 + 1,1,1657041656,640000,"P1 ",3994.231934,0.000871 + 1,1,1657041656,680000,"P1 ",3994.293213,0.000947 + 1,1,1657041656,720000,"P1 ",3996.065186,0.001405 + 1,1,1657041656,760000,"P1 ",3994.354248,0.000947 + 1,1,1657041656,800000,"P1 ",3994.659668,0.000993 + 1,1,1657041656,840000,"P1 ",3995.942627,0.001329 + 1,1,1657041656,880000,"P1 ",3994.476562,0.000993 + 1,1,1657041656,920000,"P1 ",3995.454102,0.001268 + 1,1,1657041656,960000,"P1 ",3994.781982,0.001039 + 1,1,1657041657,0,"P1 ",3995.514648,0.001161 + 1,1,1657041657,40000,"P1 ",3996.065186,0.001405 + 1,1,1657041657,80000,"P1 ",3994.232178,0.000932 + 1,1,1657041657,120000,"P1 ",3995.942627,0.001298 + 1,1,1657041657,160000,"P1 ",3995.270996,0.001191 + 1,1,1657041657,200000,"P1 ",3994.781982,0.001069 + 1,1,1657041657,240000,"P1 ",3995.575928,0.001222 + 1,1,1657041657,280000,"P1 ",3995.454346,0.001314 + 1,1,1657041657,320000,"P1 ",3994.659424,0.000947 + 1,1,1657041657,360000,"P1 ",3994.415283,0.000932 + 1,1,1657041657,400000,"P1 ",3994.110107,0.000947 + 1,1,1657041657,440000,"P1 ",3996.308838,0.001313 + 1,1,1657041657,480000,"P1 ",3995.881836,0.001375 + 1,1,1657041657,520000,"P1 ",3995.088135,0.001237 + 1,1,1657041657,560000,"P1 ",3995.210205,0.001253 + 1,1,1657041657,600000,"P1 ",3995.087891,0.001207 + 1,1,1657041657,640000,"P1 ",3995.209473,0.001100 + 1,1,1657041657,680000,"P1 ",3994.110107,0.000947 + 1,1,1657041657,720000,"P1 ",3994.537354,0.000947 + 1,1,1657041657,760000,"P1 ",3995.026855,0.001207 + 1,1,1657041657,800000,"P1 ",3995.576172,0.001237 + 1,1,1657041657,840000,"P1 ",3995.697998,0.001207 + 1,1,1657041657,880000,"P1 ",3994.660400,0.001146 + 1,1,1657041657,920000,"P1 ",3995.393066,0.001237 + 1,1,1657041657,960000,"P1 ",3994.171143,0.000947 + 1,1,1657041658,0,"P1 ",3996.003906,0.001359 + 1,1,1657041658,40000,"P1 ",3995.698242,0.001283 + 1,1,1657041658,80000,"P1 ",3995.881836,0.001375 + 1,1,1657041658,120000,"P1 ",3994.048828,0.000886 + 1,1,1657041658,160000,"P1 ",3994.232422,0.000978 + 1,1,1657041658,200000,"P1 ",3994.720703,0.001008 + 1,1,1657041658,240000,"P1 ",3995.515137,0.001253 + 1,1,1657041658,280000,"P1 ",3995.209961,0.001207 + 1,1,1657041658,320000,"P1 ",3993.926514,0.000810 + 1,1,1657041658,360000,"P1 ",3994.598633,0.000978 + 1,1,1657041658,400000,"P1 ",3995.881348,0.001268 + 1,1,1657041658,440000,"P1 ",3995.392822,0.001207 + 1,1,1657041658,480000,"P1 ",3994.415283,0.000932 + 1,1,1657041658,520000,"P1 ",3994.170898,0.000871 + 1,1,1657041658,560000,"P1 ",3993.927002,0.000917 + 1,1,1657041658,600000,"P1 ",3994.598389,0.000932 + 1,1,1657041658,640000,"P1 ",3994.476318,0.000932 + 1,1,1657041658,680000,"P1 ",3995.698486,0.001329 + 1,1,1657041658,720000,"P1 ",3995.575928,0.001191 + 1,1,1657041658,760000,"P1 ",3994.965332,0.001100 + 1,1,1657041658,800000,"P1 ",3994.660156,0.001100 + 1,1,1657041658,840000,"P1 ",3995.881348,0.001268 + 1,1,1657041658,880000,"P1 ",3995.087646,0.001161 + 1,1,1657041658,920000,"P1 ",3993.865723,0.000825 + 1,1,1657041658,960000,"P1 ",3994.537354,0.000947 + 1,1,1657041659,0,"P1 ",3994.109863,0.000886 + 1,1,1657041659,40000,"P1 ",3994.354248,0.000947 + 1,1,1657041659,80000,"P1 ",3995.393311,0.001298 + 1,1,1657041659,120000,"P1 ",3994.965088,0.001039 + 1,1,1657041659,160000,"P1 ",3994.476318,0.000917 + 1,1,1657041659,200000,"P1 ",3994.537842,0.001054 + 1,1,1657041659,240000,"P1 ",3995.759277,0.001268 + 1,1,1657041659,280000,"P1 ",3995.942627,0.001298 + 1,1,1657041659,320000,"P1 ",3996.248047,0.001344 + 1,1,1657041659,360000,"P1 ",3994.598877,0.001039 + 1,1,1657041659,400000,"P1 ",3994.781982,0.001039 + 1,1,1657041659,440000,"P1 ",3993.987549,0.000810 + 1,1,1657041659,480000,"P1 ",3995.026367,0.001100 + 1,1,1657041659,520000,"P1 ",3996.247803,0.001329 + 1,1,1657041659,560000,"P1 ",3995.515381,0.001298 + 1,1,1657041659,600000,"P1 ",3994.904053,0.001039 + 1,1,1657041659,640000,"P1 ",3993.865723,0.000886 + 1,1,1657041659,680000,"P1 ",3995.881836,0.001375 + 1,1,1657041659,720000,"P1 ",3995.881836,0.001375 + 1,1,1657041659,760000,"P1 ",3996.125732,0.001329 + 1,1,1657041659,800000,"P1 ",3994.781982,0.001039 + 1,1,1657041659,840000,"P1 ",3995.759521,0.001314 + 1,1,1657041659,880000,"P1 ",3995.026367,0.001130 + 1,1,1657041659,920000,"P1 ",3994.476562,0.000963 + 1,1,1657041659,960000,"P1 ",3993.987793,0.000871 + 1,1,1657041660,0,"P1 ",3995.515137,0.001253 + 1,1,1657041660,40000,"P1 ",3995.576172,0.001237 + 1,1,1657041660,80000,"P1 ",3994.171143,0.000902 + 1,1,1657041660,120000,"P1 ",3995.881592,0.001313 + 1,1,1657041660,160000,"P1 ",3996.125732,0.001329 + 1,1,1657041660,200000,"P1 ",3995.759521,0.001314 + 1,1,1657041660,240000,"P1 ",3994.843506,0.001146 + 1,1,1657041660,280000,"P1 ",3995.453613,0.001146 + 1,1,1657041660,320000,"P1 ",3994.170898,0.000840 + 1,1,1657041660,360000,"P1 ",3995.943115,0.001405 + 1,1,1657041660,400000,"P1 ",3993.865723,0.000825 + 1,1,1657041660,440000,"P1 ",3994.599121,0.001115 + 1,1,1657041660,480000,"P1 ",3995.087402,0.001115 + 1,1,1657041660,520000,"P1 ",3995.943115,0.001390 + 1,1,1657041660,560000,"P1 ",3996.125977,0.001344 + 1,1,1657041660,600000,"P1 ",3994.110107,0.000947 + 1,1,1657041660,640000,"P1 ",3994.170654,0.000779 + 1,1,1657041660,680000,"P1 ",3994.782471,0.001146 + 1,1,1657041660,720000,"P1 ",3994.599121,0.001115 + 1,1,1657041660,760000,"P1 ",3995.698242,0.001237 + 1,1,1657041660,800000,"P1 ",3995.026855,0.001222 + 1,1,1657041660,840000,"P1 ",3994.415771,0.001039 + 1,1,1657041660,880000,"P1 ",3994.415771,0.001070 + 1,1,1657041660,920000,"P1 ",3995.759766,0.001375 + 1,1,1657041660,960000,"P1 ",3994.965576,0.001146 + 1,1,1657041661,0,"P1 ",3995.759033,0.001222 + 1,1,1657041661,40000,"P1 ",3995.637451,0.001298 + 1,1,1657041661,80000,"P1 ",3995.332031,0.001268 + 1,1,1657041661,120000,"P1 ",3994.476807,0.001039 + 1,1,1657041661,160000,"P1 ",3996.003906,0.001375 + 1,1,1657041661,200000,"P1 ",3994.537598,0.001008 + 1,1,1657041661,240000,"P1 ",3995.881348,0.001283 + 1,1,1657041661,280000,"P1 ",3995.392578,0.001161 + 1,1,1657041661,320000,"P1 ",3994.599121,0.001115 + 1,1,1657041661,360000,"P1 ",3994.292969,0.000886 + 1,1,1657041661,400000,"P1 ",3995.636963,0.001222 + 1,1,1657041661,440000,"P1 ",3994.659668,0.000993 + 1,1,1657041661,480000,"P1 ",3995.332031,0.001253 + 1,1,1657041661,520000,"P1 ",3994.782471,0.001146 + 1,1,1657041661,560000,"P1 ",3994.048828,0.000856 + 1,1,1657041661,600000,"P1 ",3995.392822,0.001207 + 1,1,1657041661,640000,"P1 ",3994.659668,0.000993 + 1,1,1657041661,680000,"P1 ",3994.965332,0.001100 + 1,1,1657041661,720000,"P1 ",3994.354492,0.000978 + 1,1,1657041661,760000,"P1 ",3995.270508,0.001115 + 1,1,1657041661,800000,"P1 ",3994.781982,0.001069 + 1,1,1657041661,840000,"P1 ",3994.109619,0.000795 + 1,1,1657041661,880000,"P1 ",3995.149170,0.001237 + 1,1,1657041661,920000,"P1 ",3995.576416,0.001329 + 1,1,1657041661,960000,"P1 ",3996.126221,0.001390 + 1,1,1657041662,0,"P1 ",3995.575928,0.001191 + 1,1,1657041662,40000,"P1 ",3994.170898,0.000840 + 1,1,1657041662,80000,"P1 ",3995.515137,0.001253 + 1,1,1657041662,120000,"P1 ",3995.209473,0.001130 + 1,1,1657041662,160000,"P1 ",3994.476074,0.000886 + 1,1,1657041662,200000,"P1 ",3995.393311,0.001298 + 1,1,1657041662,240000,"P1 ",3996.125977,0.001344 + 1,1,1657041662,280000,"P1 ",3994.843018,0.001024 + 1,1,1657041662,320000,"P1 ",3994.415771,0.001070 + 1,1,1657041662,360000,"P1 ",3994.415039,0.000871 + 1,1,1657041662,400000,"P1 ",3995.454102,0.001268 + 1,1,1657041662,440000,"P1 ",3993.926514,0.000810 + 1,1,1657041662,480000,"P1 ",3995.209473,0.001100 + 1,1,1657041662,520000,"P1 ",3994.598389,0.000932 + 1,1,1657041662,560000,"P1 ",3995.209473,0.001130 + 1,1,1657041662,600000,"P1 ",3996.004395,0.001420 + 1,1,1657041662,640000,"P1 ",3994.415283,0.000901 + 1,1,1657041662,680000,"P1 ",3995.087891,0.001207 + 1,1,1657041662,720000,"P1 ",3995.087891,0.001207 + 1,1,1657041662,760000,"P1 ",3994.537354,0.000947 + 1,1,1657041662,800000,"P1 ",3995.270996,0.001191 + 1,1,1657041662,840000,"P1 ",3994.660400,0.001146 + 1,1,1657041662,880000,"P1 ",3994.231934,0.000825 + 1,1,1657041662,920000,"P1 ",3994.476318,0.000932 + 1,1,1657041662,960000,"P1 ",3994.171143,0.000947 + 1,1,1657041663,0,"P1 ",3994.231934,0.000871 + 1,1,1657041663,40000,"P1 ",3994.232178,0.000901 + 1,1,1657041663,80000,"P1 ",3994.659668,0.000993 + 1,1,1657041663,120000,"P1 ",3994.537598,0.001008 + 1,1,1657041663,160000,"P1 ",3994.293457,0.000993 + 1,1,1657041663,200000,"P1 ",3994.415771,0.001039 + 1,1,1657041663,240000,"P1 ",3994.476807,0.001039 + 1,1,1657041663,280000,"P1 ",3994.659424,0.000947 + 1,1,1657041663,320000,"P1 ",3994.415527,0.001008 + 1,1,1657041663,360000,"P1 ",3995.270752,0.001161 + 1,1,1657041663,400000,"P1 ",3994.598389,0.000932 + 1,1,1657041663,440000,"P1 ",3994.109619,0.000795 + 1,1,1657041663,480000,"P1 ",3995.576416,0.001329 + 1,1,1657041663,520000,"P1 ",3995.209717,0.001161 + 1,1,1657041663,560000,"P1 ",3994.904541,0.001161 + 1,1,1657041663,600000,"P1 ",3996.125977,0.001375 + 1,1,1657041663,640000,"P1 ",3996.065186,0.001405 + 1,1,1657041663,680000,"P1 ",3995.026367,0.001130 + 1,1,1657041663,720000,"P1 ",3995.576172,0.001268 + 1,1,1657041663,760000,"P1 ",3995.271240,0.001237 + 1,1,1657041663,800000,"P1 ",3994.659912,0.001024 + 1,1,1657041663,840000,"P1 ",3995.942383,0.001252 + 1,1,1657041663,880000,"P1 ",3994.965820,0.001192 + 1,1,1657041663,920000,"P1 ",3994.049072,0.000932 + 1,1,1657041663,960000,"P1 ",3995.881836,0.001375 + 1,1,1657041664,0,"P1 ",3994.415527,0.000963 + 1,1,1657041664,40000,"P1 ",3995.087402,0.001085 + 1,1,1657041664,80000,"P1 ",3994.354248,0.000917 + 1,1,1657041664,120000,"P1 ",3994.110352,0.000963 + 1,1,1657041664,160000,"P1 ",3994.843262,0.001100 + 1,1,1657041664,200000,"P1 ",3994.904541,0.001176 + 1,1,1657041664,240000,"P1 ",3994.843506,0.001146 + 1,1,1657041664,280000,"P1 ",3995.820312,0.001237 + 1,1,1657041664,320000,"P1 ",3995.698242,0.001237 + 1,1,1657041664,360000,"P1 ",3993.804688,0.000825 + 1,1,1657041664,400000,"P1 ",3995.942383,0.001252 + 1,1,1657041664,440000,"P1 ",3995.576416,0.001329 + 1,1,1657041664,480000,"P1 ",3995.942383,0.001252 + 1,1,1657041664,520000,"P1 ",3996.247803,0.001329 + 1,1,1657041664,560000,"P1 ",3995.515381,0.001298 + 1,1,1657041664,600000,"P1 ",3995.637695,0.001344 + 1,1,1657041664,640000,"P1 ",3993.865723,0.000856 + 1,1,1657041664,680000,"P1 ",3994.292969,0.000856 + 1,1,1657041664,720000,"P1 ",3994.354004,0.000886 + 1,1,1657041664,760000,"P1 ",3993.743652,0.000840 + 1,1,1657041664,800000,"P1 ",3996.247803,0.001329 + 1,1,1657041664,840000,"P1 ",3994.415527,0.001008 + 1,1,1657041664,880000,"P1 ",3994.232422,0.001008 + 1,1,1657041664,920000,"P1 ",3994.476807,0.001070 + 1,1,1657041664,960000,"P1 ",3995.454102,0.001268 + 1,1,1657041665,0,"P1 ",3994.109619,0.000795 + 1,1,1657041665,40000,"P1 ",3994.232178,0.000932 + 1,1,1657041665,80000,"P1 ",3994.048828,0.000825 + 1,1,1657041665,120000,"P1 ",3994.721191,0.001131 + 1,1,1657041665,160000,"P1 ",3995.209473,0.001130 + 1,1,1657041665,200000,"P1 ",3995.270752,0.001161 + 1,1,1657041665,240000,"P1 ",3995.637451,0.001314 + 1,1,1657041665,280000,"P1 ",3995.514893,0.001207 + 1,1,1657041665,320000,"P1 ",3995.698242,0.001237 + 1,1,1657041665,360000,"P1 ",3995.332031,0.001268 + 1,1,1657041665,400000,"P1 ",3994.782471,0.001161 + 1,1,1657041665,440000,"P1 ",3995.942627,0.001329 + 1,1,1657041665,480000,"P1 ",3993.865723,0.000886 + 1,1,1657041665,520000,"P1 ",3995.026367,0.001100 + 1,1,1657041665,560000,"P1 ",3994.843506,0.001146 + 1,1,1657041665,600000,"P1 ",3995.942383,0.001252 + 1,1,1657041665,640000,"P1 ",3995.088135,0.001237 + 1,1,1657041665,680000,"P1 ",3995.576172,0.001237 + 1,1,1657041665,720000,"P1 ",3995.148682,0.001146 + 1,1,1657041665,760000,"P1 ",3995.087158,0.001069 + 1,1,1657041665,800000,"P1 ",3995.942627,0.001329 + 1,1,1657041665,840000,"P1 ",3995.943115,0.001405 + 1,1,1657041665,880000,"P1 ",3995.148926,0.001222 + 1,1,1657041665,920000,"P1 ",3995.820312,0.001283 + 1,1,1657041665,960000,"P1 ",3995.331543,0.001146 + 1,1,1657041666,0,"P1 ",3995.148926,0.001192 + 1,1,1657041666,40000,"P1 ",3994.354004,0.000840 + 1,1,1657041666,80000,"P1 ",3994.660400,0.001146 + 1,1,1657041666,120000,"P1 ",3994.354004,0.000871 + 1,1,1657041666,160000,"P1 ",3995.209717,0.001161 + 1,1,1657041666,200000,"P1 ",3994.170898,0.000840 + 1,1,1657041666,240000,"P1 ",3994.781738,0.001008 + 1,1,1657041666,280000,"P1 ",3995.148926,0.001222 + 1,1,1657041666,320000,"P1 ",3994.110352,0.000963 + 1,1,1657041666,360000,"P1 ",3995.576416,0.001329 + 1,1,1657041666,400000,"P1 ",3995.698242,0.001283 + 1,1,1657041666,440000,"P1 ",3994.720703,0.000978 + 1,1,1657041666,480000,"P1 ",3995.821045,0.001390 + 1,1,1657041666,520000,"P1 ",3995.148682,0.001176 + 1,1,1657041666,560000,"P1 ",3994.660156,0.001100 + 1,1,1657041666,600000,"P1 ",3995.881348,0.001283 + 1,1,1657041666,640000,"P1 ",3994.476074,0.000886 + 1,1,1657041666,680000,"P1 ",3995.698242,0.001283 + 1,1,1657041666,720000,"P1 ",3994.659912,0.001024 diff --git a/DBServer/RECEIVED_FRAME_TIME.txt b/DBServer/RECEIVED_FRAME_TIME.txt new file mode 100644 index 0000000..253f7be --- /dev/null +++ b/DBServer/RECEIVED_FRAME_TIME.txt @@ -0,0 +1,398 @@ + 1,1,1657041650,880000,1657041650,880385,385 + 1,1,1657041650,920000,1657041650,920803,803 + 1,1,1657041650,960000,1657041650,961026,1026 + 1,1,1657041651,0,1657041651,1038,1038 + 1,1,1657041651,40000,1657041651,40772,772 + 1,1,1657041651,80000,1657041651,80650,650 + 1,1,1657041651,120000,1657041651,120590,590 + 1,1,1657041651,160000,1657041651,160639,639 + 1,1,1657041651,200000,1657041651,200644,644 + 1,1,1657041651,240000,1657041651,240673,673 + 1,1,1657041651,280000,1657041651,280682,682 + 1,1,1657041651,320000,1657041651,320720,720 + 1,1,1657041651,360000,1657041651,360638,638 + 1,1,1657041651,400000,1657041651,400630,630 + 1,1,1657041651,440000,1657041651,440695,695 + 1,1,1657041651,480000,1657041651,480704,704 + 1,1,1657041651,520000,1657041651,520670,670 + 1,1,1657041651,560000,1657041651,561026,1026 + 1,1,1657041651,600000,1657041651,601031,1031 + 1,1,1657041651,640000,1657041651,640596,596 + 1,1,1657041651,680000,1657041651,680637,637 + 1,1,1657041651,720000,1657041651,720672,672 + 1,1,1657041651,760000,1657041651,760687,687 + 1,1,1657041651,800000,1657041651,800702,702 + 1,1,1657041651,840000,1657041651,840667,667 + 1,1,1657041651,880000,1657041651,880593,593 + 1,1,1657041651,920000,1657041651,920727,727 + 1,1,1657041651,960000,1657041651,960833,833 + 1,1,1657041652,0,1657041652,652,652 + 1,1,1657041652,40000,1657041652,40957,957 + 1,1,1657041652,80000,1657041652,81033,1033 + 1,1,1657041652,120000,1657041652,121162,1162 + 1,1,1657041652,160000,1657041652,161194,1194 + 1,1,1657041652,200000,1657041652,200802,802 + 1,1,1657041652,240000,1657041652,240728,728 + 1,1,1657041652,280000,1657041652,280980,980 + 1,1,1657041652,320000,1657041652,321182,1182 + 1,1,1657041652,360000,1657041652,360960,960 + 1,1,1657041652,400000,1657041652,401137,1137 + 1,1,1657041652,440000,1657041652,440841,841 + 1,1,1657041652,480000,1657041652,481201,1201 + 1,1,1657041652,520000,1657041652,520792,792 + 1,1,1657041652,560000,1657041652,560853,853 + 1,1,1657041652,600000,1657041652,600959,959 + 1,1,1657041652,640000,1657041652,641064,1064 + 1,1,1657041652,680000,1657041652,680774,774 + 1,1,1657041652,720000,1657041652,720885,885 + 1,1,1657041652,760000,1657041652,760959,959 + 1,1,1657041652,800000,1657041652,800960,960 + 1,1,1657041652,840000,1657041652,841134,1134 + 1,1,1657041652,880000,1657041652,880842,842 + 1,1,1657041652,920000,1657041652,920964,964 + 1,1,1657041652,960000,1657041652,960970,970 + 1,1,1657041653,0,1657041653,1038,1038 + 1,1,1657041653,40000,1657041653,40969,969 + 1,1,1657041653,80000,1657041653,80964,964 + 1,1,1657041653,120000,1657041653,121187,1187 + 1,1,1657041653,160000,1657041653,160868,868 + 1,1,1657041653,200000,1657041653,200809,809 + 1,1,1657041653,240000,1657041653,240864,864 + 1,1,1657041653,280000,1657041653,280839,839 + 1,1,1657041653,320000,1657041653,320952,952 + 1,1,1657041653,360000,1657041653,361174,1174 + 1,1,1657041653,400000,1657041653,401188,1188 + 1,1,1657041653,440000,1657041653,440963,963 + 1,1,1657041653,480000,1657041653,481136,1136 + 1,1,1657041653,520000,1657041653,521185,1185 + 1,1,1657041653,560000,1657041653,560974,974 + 1,1,1657041653,600000,1657041653,601049,1049 + 1,1,1657041653,640000,1657041653,640935,935 + 1,1,1657041653,680000,1657041653,680718,718 + 1,1,1657041653,720000,1657041653,720961,961 + 1,1,1657041653,760000,1657041653,761141,1141 + 1,1,1657041653,800000,1657041653,801150,1150 + 1,1,1657041653,840000,1657041653,840964,964 + 1,1,1657041653,880000,1657041653,881141,1141 + 1,1,1657041653,920000,1657041653,921137,1137 + 1,1,1657041653,960000,1657041653,961005,1005 + 1,1,1657041654,0,1657041654,977,977 + 1,1,1657041654,40000,1657041654,40984,984 + 1,1,1657041654,80000,1657041654,81131,1131 + 1,1,1657041654,120000,1657041654,121132,1132 + 1,1,1657041654,160000,1657041654,161108,1108 + 1,1,1657041654,200000,1657041654,200798,798 + 1,1,1657041654,240000,1657041654,240944,944 + 1,1,1657041654,280000,1657041654,280989,989 + 1,1,1657041654,320000,1657041654,321120,1120 + 1,1,1657041654,360000,1657041654,360972,972 + 1,1,1657041654,400000,1657041654,401186,1186 + 1,1,1657041654,440000,1657041654,440974,974 + 1,1,1657041654,480000,1657041654,481186,1186 + 1,1,1657041654,520000,1657041654,521150,1150 + 1,1,1657041654,560000,1657041654,560986,986 + 1,1,1657041654,600000,1657041654,600965,965 + 1,1,1657041654,640000,1657041654,640962,962 + 1,1,1657041654,680000,1657041654,680721,721 + 1,1,1657041654,720000,1657041654,721120,1120 + 1,1,1657041654,760000,1657041654,761143,1143 + 1,1,1657041654,800000,1657041654,800993,993 + 1,1,1657041654,840000,1657041654,840810,810 + 1,1,1657041654,880000,1657041654,881183,1183 + 1,1,1657041654,920000,1657041654,921149,1149 + 1,1,1657041654,960000,1657041654,961146,1146 + 1,1,1657041655,0,1657041655,1048,1048 + 1,1,1657041655,40000,1657041655,40746,746 + 1,1,1657041655,80000,1657041655,81134,1134 + 1,1,1657041655,120000,1657041655,120852,852 + 1,1,1657041655,160000,1657041655,160962,962 + 1,1,1657041655,200000,1657041655,200753,753 + 1,1,1657041655,240000,1657041655,240639,639 + 1,1,1657041655,280000,1657041655,281009,1009 + 1,1,1657041655,320000,1657041655,321146,1146 + 1,1,1657041655,360000,1657041655,361160,1160 + 1,1,1657041655,400000,1657041655,400766,766 + 1,1,1657041655,440000,1657041655,440653,653 + 1,1,1657041655,480000,1657041655,480615,615 + 1,1,1657041655,520000,1657041655,520699,699 + 1,1,1657041655,560000,1657041655,560692,692 + 1,1,1657041655,600000,1657041655,600677,677 + 1,1,1657041655,640000,1657041655,640642,642 + 1,1,1657041655,680000,1657041655,680635,635 + 1,1,1657041655,720000,1657041655,720664,664 + 1,1,1657041655,760000,1657041655,760956,956 + 1,1,1657041655,800000,1657041655,800962,962 + 1,1,1657041655,840000,1657041655,840810,810 + 1,1,1657041655,880000,1657041655,880904,904 + 1,1,1657041655,920000,1657041655,920825,825 + 1,1,1657041655,960000,1657041655,960958,958 + 1,1,1657041656,0,1657041656,1191,1191 + 1,1,1657041656,40000,1657041656,40931,931 + 1,1,1657041656,80000,1657041656,81052,1052 + 1,1,1657041656,120000,1657041656,121131,1131 + 1,1,1657041656,160000,1657041656,161208,1208 + 1,1,1657041656,200000,1657041656,200836,836 + 1,1,1657041656,240000,1657041656,240958,958 + 1,1,1657041656,280000,1657041656,280826,826 + 1,1,1657041656,320000,1657041656,320648,648 + 1,1,1657041656,360000,1657041656,360705,705 + 1,1,1657041656,400000,1657041656,400408,408 + 1,1,1657041656,440000,1657041656,440656,656 + 1,1,1657041656,480000,1657041656,480798,798 + 1,1,1657041656,520000,1657041656,521136,1136 + 1,1,1657041656,560000,1657041656,560936,936 + 1,1,1657041656,600000,1657041656,601144,1144 + 1,1,1657041656,640000,1657041656,640966,966 + 1,1,1657041656,680000,1657041656,680963,963 + 1,1,1657041656,720000,1657041656,721128,1128 + 1,1,1657041656,760000,1657041656,761148,1148 + 1,1,1657041656,800000,1657041656,800389,389 + 1,1,1657041656,840000,1657041656,840651,651 + 1,1,1657041656,880000,1657041656,880275,275 + 1,1,1657041656,920000,1657041656,920389,389 + 1,1,1657041656,960000,1657041656,960738,738 + 1,1,1657041657,0,1657041657,659,659 + 1,1,1657041657,40000,1657041657,40883,883 + 1,1,1657041657,80000,1657041657,80839,839 + 1,1,1657041657,120000,1657041657,121165,1165 + 1,1,1657041657,160000,1657041657,161154,1154 + 1,1,1657041657,200000,1657041657,200870,870 + 1,1,1657041657,240000,1657041657,240973,973 + 1,1,1657041657,280000,1657041657,280995,995 + 1,1,1657041657,320000,1657041657,321192,1192 + 1,1,1657041657,360000,1657041657,360991,991 + 1,1,1657041657,400000,1657041657,401144,1144 + 1,1,1657041657,440000,1657041657,441147,1147 + 1,1,1657041657,480000,1657041657,480838,838 + 1,1,1657041657,520000,1657041657,520786,786 + 1,1,1657041657,560000,1657041657,560806,806 + 1,1,1657041657,600000,1657041657,600789,789 + 1,1,1657041657,640000,1657041657,640775,775 + 1,1,1657041657,680000,1657041657,680696,696 + 1,1,1657041657,720000,1657041657,720840,840 + 1,1,1657041657,760000,1657041657,761080,1080 + 1,1,1657041657,800000,1657041657,800828,828 + 1,1,1657041657,840000,1657041657,841151,1151 + 1,1,1657041657,880000,1657041657,881149,1149 + 1,1,1657041657,920000,1657041657,921155,1155 + 1,1,1657041657,960000,1657041657,961143,1143 + 1,1,1657041658,0,1657041658,868,868 + 1,1,1657041658,40000,1657041658,40971,971 + 1,1,1657041658,80000,1657041658,81149,1149 + 1,1,1657041658,120000,1657041658,120856,856 + 1,1,1657041658,160000,1657041658,161162,1162 + 1,1,1657041658,200000,1657041658,200834,834 + 1,1,1657041658,240000,1657041658,240826,826 + 1,1,1657041658,280000,1657041658,280912,912 + 1,1,1657041658,320000,1657041658,321145,1145 + 1,1,1657041658,360000,1657041658,360844,844 + 1,1,1657041658,400000,1657041658,401149,1149 + 1,1,1657041658,440000,1657041658,441051,1051 + 1,1,1657041658,480000,1657041658,481204,1204 + 1,1,1657041658,520000,1657041658,521216,1216 + 1,1,1657041658,560000,1657041658,560808,808 + 1,1,1657041658,600000,1657041658,600804,804 + 1,1,1657041658,640000,1657041658,640370,370 + 1,1,1657041658,680000,1657041658,680646,646 + 1,1,1657041658,720000,1657041658,720546,546 + 1,1,1657041658,760000,1657041658,761027,1027 + 1,1,1657041658,800000,1657041658,800822,822 + 1,1,1657041658,840000,1657041658,841063,1063 + 1,1,1657041658,880000,1657041658,880979,979 + 1,1,1657041658,920000,1657041658,921140,1140 + 1,1,1657041658,960000,1657041658,961202,1202 + 1,1,1657041659,0,1657041659,820,820 + 1,1,1657041659,40000,1657041659,40704,704 + 1,1,1657041659,80000,1657041659,80883,883 + 1,1,1657041659,120000,1657041659,121132,1132 + 1,1,1657041659,160000,1657041659,161143,1143 + 1,1,1657041659,200000,1657041659,200780,780 + 1,1,1657041659,240000,1657041659,240976,976 + 1,1,1657041659,280000,1657041659,280807,807 + 1,1,1657041659,320000,1657041659,320951,951 + 1,1,1657041659,360000,1657041659,360856,856 + 1,1,1657041659,400000,1657041659,401203,1203 + 1,1,1657041659,440000,1657041659,441135,1135 + 1,1,1657041659,480000,1657041659,481162,1162 + 1,1,1657041659,520000,1657041659,521209,1209 + 1,1,1657041659,560000,1657041659,561206,1206 + 1,1,1657041659,600000,1657041659,601136,1136 + 1,1,1657041659,640000,1657041659,641151,1151 + 1,1,1657041659,680000,1657041659,680730,730 + 1,1,1657041659,720000,1657041659,720970,970 + 1,1,1657041659,760000,1657041659,760306,306 + 1,1,1657041659,800000,1657041659,800855,855 + 1,1,1657041659,840000,1657041659,841151,1151 + 1,1,1657041659,880000,1657041659,880984,984 + 1,1,1657041659,920000,1657041659,920387,387 + 1,1,1657041659,960000,1657041659,960683,683 + 1,1,1657041660,0,1657041660,743,743 + 1,1,1657041660,40000,1657041660,40747,747 + 1,1,1657041660,80000,1657041660,80827,827 + 1,1,1657041660,120000,1657041660,121158,1158 + 1,1,1657041660,160000,1657041660,161145,1145 + 1,1,1657041660,200000,1657041660,201156,1156 + 1,1,1657041660,240000,1657041660,240961,961 + 1,1,1657041660,280000,1657041660,280958,958 + 1,1,1657041660,320000,1657041660,321198,1198 + 1,1,1657041660,360000,1657041660,360963,963 + 1,1,1657041660,400000,1657041660,401186,1186 + 1,1,1657041660,440000,1657041660,440918,918 + 1,1,1657041660,480000,1657041660,481146,1146 + 1,1,1657041660,520000,1657041660,521191,1191 + 1,1,1657041660,560000,1657041660,561198,1198 + 1,1,1657041660,600000,1657041660,601194,1194 + 1,1,1657041660,640000,1657041660,641145,1145 + 1,1,1657041660,680000,1657041660,680684,684 + 1,1,1657041660,720000,1657041660,720986,986 + 1,1,1657041660,760000,1657041660,761144,1144 + 1,1,1657041660,800000,1657041660,801119,1119 + 1,1,1657041660,840000,1657041660,841151,1151 + 1,1,1657041660,880000,1657041660,881195,1195 + 1,1,1657041660,920000,1657041660,920763,763 + 1,1,1657041660,960000,1657041660,960735,735 + 1,1,1657041661,0,1657041661,664,664 + 1,1,1657041661,40000,1657041661,40638,638 + 1,1,1657041661,80000,1657041661,80728,728 + 1,1,1657041661,120000,1657041661,120825,825 + 1,1,1657041661,160000,1657041661,160890,890 + 1,1,1657041661,200000,1657041661,200878,878 + 1,1,1657041661,240000,1657041661,240803,803 + 1,1,1657041661,280000,1657041661,280803,803 + 1,1,1657041661,320000,1657041661,320821,821 + 1,1,1657041661,360000,1657041661,360838,838 + 1,1,1657041661,400000,1657041661,400890,890 + 1,1,1657041661,440000,1657041661,440881,881 + 1,1,1657041661,480000,1657041661,480866,866 + 1,1,1657041661,520000,1657041661,520843,843 + 1,1,1657041661,560000,1657041661,560996,996 + 1,1,1657041661,600000,1657041661,601163,1163 + 1,1,1657041661,640000,1657041661,641142,1142 + 1,1,1657041661,680000,1657041661,680666,666 + 1,1,1657041661,720000,1657041661,720995,995 + 1,1,1657041661,760000,1657041661,760998,998 + 1,1,1657041661,800000,1657041661,801157,1157 + 1,1,1657041661,840000,1657041661,841040,1040 + 1,1,1657041661,880000,1657041661,880983,983 + 1,1,1657041661,920000,1657041661,921031,1031 + 1,1,1657041661,960000,1657041661,960990,990 + 1,1,1657041662,0,1657041662,1143,1143 + 1,1,1657041662,40000,1657041662,40984,984 + 1,1,1657041662,80000,1657041662,81164,1164 + 1,1,1657041662,120000,1657041662,121214,1214 + 1,1,1657041662,160000,1657041662,160973,973 + 1,1,1657041662,200000,1657041662,200972,972 + 1,1,1657041662,240000,1657041662,240862,862 + 1,1,1657041662,280000,1657041662,280817,817 + 1,1,1657041662,320000,1657041662,320714,714 + 1,1,1657041662,360000,1657041662,360821,821 + 1,1,1657041662,400000,1657041662,401095,1095 + 1,1,1657041662,440000,1657041662,440818,818 + 1,1,1657041662,480000,1657041662,480686,686 + 1,1,1657041662,520000,1657041662,520701,701 + 1,1,1657041662,560000,1657041662,560681,681 + 1,1,1657041662,600000,1657041662,600722,722 + 1,1,1657041662,640000,1657041662,640665,665 + 1,1,1657041662,680000,1657041662,680683,683 + 1,1,1657041662,720000,1657041662,720939,939 + 1,1,1657041662,760000,1657041662,760830,830 + 1,1,1657041662,800000,1657041662,800991,991 + 1,1,1657041662,840000,1657041662,840978,978 + 1,1,1657041662,880000,1657041662,881002,1002 + 1,1,1657041662,920000,1657041662,921038,1038 + 1,1,1657041662,960000,1657041662,960898,898 + 1,1,1657041663,0,1657041663,357,357 + 1,1,1657041663,40000,1657041663,40703,703 + 1,1,1657041663,80000,1657041663,80270,270 + 1,1,1657041663,120000,1657041663,120535,535 + 1,1,1657041663,160000,1657041663,160692,692 + 1,1,1657041663,200000,1657041663,200764,764 + 1,1,1657041663,240000,1657041663,240976,976 + 1,1,1657041663,280000,1657041663,280938,938 + 1,1,1657041663,320000,1657041663,321126,1126 + 1,1,1657041663,360000,1657041663,360980,980 + 1,1,1657041663,400000,1657041663,400765,765 + 1,1,1657041663,440000,1657041663,440449,449 + 1,1,1657041663,480000,1657041663,480648,648 + 1,1,1657041663,520000,1657041663,520824,824 + 1,1,1657041663,560000,1657041663,560659,659 + 1,1,1657041663,600000,1657041663,600698,698 + 1,1,1657041663,640000,1657041663,640802,802 + 1,1,1657041663,680000,1657041663,680732,732 + 1,1,1657041663,720000,1657041663,720797,797 + 1,1,1657041663,760000,1657041663,760823,823 + 1,1,1657041663,800000,1657041663,800808,808 + 1,1,1657041663,840000,1657041663,840800,800 + 1,1,1657041663,880000,1657041663,880789,789 + 1,1,1657041663,920000,1657041663,920802,802 + 1,1,1657041663,960000,1657041663,960792,792 + 1,1,1657041664,0,1657041664,1150,1150 + 1,1,1657041664,40000,1657041664,40801,801 + 1,1,1657041664,80000,1657041664,80816,816 + 1,1,1657041664,120000,1657041664,120789,789 + 1,1,1657041664,160000,1657041664,160779,779 + 1,1,1657041664,200000,1657041664,200699,699 + 1,1,1657041664,240000,1657041664,240710,710 + 1,1,1657041664,280000,1657041664,280730,730 + 1,1,1657041664,320000,1657041664,320831,831 + 1,1,1657041664,360000,1657041664,360776,776 + 1,1,1657041664,400000,1657041664,401208,1208 + 1,1,1657041664,440000,1657041664,440926,926 + 1,1,1657041664,480000,1657041664,480795,795 + 1,1,1657041664,520000,1657041664,520811,811 + 1,1,1657041664,560000,1657041664,560791,791 + 1,1,1657041664,600000,1657041664,600811,811 + 1,1,1657041664,640000,1657041664,640777,777 + 1,1,1657041664,680000,1657041664,680699,699 + 1,1,1657041664,720000,1657041664,720779,779 + 1,1,1657041664,760000,1657041664,760778,778 + 1,1,1657041664,800000,1657041664,801143,1143 + 1,1,1657041664,840000,1657041664,840846,846 + 1,1,1657041664,880000,1657041664,880913,913 + 1,1,1657041664,920000,1657041664,920986,986 + 1,1,1657041664,960000,1657041664,961161,1161 + 1,1,1657041665,0,1657041665,1208,1208 + 1,1,1657041665,40000,1657041665,40982,982 + 1,1,1657041665,80000,1657041665,81198,1198 + 1,1,1657041665,120000,1657041665,121147,1147 + 1,1,1657041665,160000,1657041665,160979,979 + 1,1,1657041665,200000,1657041665,201050,1050 + 1,1,1657041665,240000,1657041665,240989,989 + 1,1,1657041665,280000,1657041665,280970,970 + 1,1,1657041665,320000,1657041665,321213,1213 + 1,1,1657041665,360000,1657041665,361003,1003 + 1,1,1657041665,400000,1657041665,401137,1137 + 1,1,1657041665,440000,1657041665,441223,1223 + 1,1,1657041665,480000,1657041665,481222,1222 + 1,1,1657041665,520000,1657041665,521041,1041 + 1,1,1657041665,560000,1657041665,560964,964 + 1,1,1657041665,600000,1657041665,601208,1208 + 1,1,1657041665,640000,1657041665,641233,1233 + 1,1,1657041665,680000,1657041665,680716,716 + 1,1,1657041665,720000,1657041665,721169,1169 + 1,1,1657041665,760000,1657041665,761209,1209 + 1,1,1657041665,800000,1657041665,801031,1031 + 1,1,1657041665,840000,1657041665,840763,763 + 1,1,1657041665,880000,1657041665,880750,750 + 1,1,1657041665,920000,1657041665,920792,792 + 1,1,1657041665,960000,1657041665,960816,816 + 1,1,1657041666,0,1657041666,812,812 + 1,1,1657041666,40000,1657041666,40789,789 + 1,1,1657041666,80000,1657041666,80805,805 + 1,1,1657041666,120000,1657041666,121155,1155 + 1,1,1657041666,160000,1657041666,161160,1160 + 1,1,1657041666,200000,1657041666,201032,1032 + 1,1,1657041666,240000,1657041666,241004,1004 + 1,1,1657041666,280000,1657041666,280989,989 + 1,1,1657041666,320000,1657041666,320897,897 + 1,1,1657041666,360000,1657041666,360310,310 + 1,1,1657041666,400000,1657041666,400688,688 + 1,1,1657041666,440000,1657041666,441162,1162 + 1,1,1657041666,480000,1657041666,481150,1150 + 1,1,1657041666,520000,1657041666,521148,1148 + 1,1,1657041666,560000,1657041666,560984,984 + 1,1,1657041666,600000,1657041666,601148,1148 + 1,1,1657041666,640000,1657041666,641182,1182 + 1,1,1657041666,680000,1657041666,680739,739 + 1,1,1657041666,720000,1657041666,720966,966 + 1,1,1657041666,760000,1657041666,761309,1309 diff --git a/DBServer/Sample DBConnect.c b/DBServer/Sample DBConnect.c new file mode 100755 index 0000000..e995d0a --- /dev/null +++ b/DBServer/Sample DBConnect.c @@ -0,0 +1,145 @@ +/* ----------------------------------------------------------------------------- + * db.c & iPDC_DB_Queries + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Kedar V. Khandeparkar + * Nitesh Pandit + * + * ----------------------------------------------------------------------------- */ + + +/**************************************** Begin of db.c *******************************************************/ + +#include +#include + +main() { /* Simple C program that connects to MySQL Database server*/ + + MYSQL *conn; + MYSQL_RES *res; + MYSQL_ROW row; + + char *server = "localhost"; + char *user = "root"; + char *password = "root"; /* set me first */ + char *database = "test"; + + conn = mysql_init(NULL); + + /* Connect to database */ + if (!mysql_real_connect(conn, server, + user, password, database, 0, NULL, 0)) { + fprintf(stderr, "%s\n", mysql_error(conn)); + exit(1); + } + + char cmd[40]; + int i=2; + sprintf(cmd, "select * from student"); + + /* send SQL query */ + if (mysql_query(conn, cmd)) { + fprintf(stderr, "%s\n", mysql_error(conn)); + exit(1); + } + + res = mysql_use_result(conn); + + /* output table name */ + printf("Data in student:\n"); + while ((row = mysql_fetch_row(res)) != NULL) + printf("%s \n", row[0]); + /* close connection */ + mysql_free_result(res); + mysql_close(conn); +} + + +/**************************************** Begins of iPDC_DB_Queries *******************************************************/ + +/* + + ANALOG + ANALOG_MEASUREMENTS + DIGITAL + DIGITAL_MEASUREMENTS + FREQUENCY_MEASUREMENTS + MAIN_CFG_TABLE + PHASOR + PHASOR_MEASUREMENTS + REVEIVED_FRAME_TIME + SUB_CFG_TABLE + + +----CFG + +SELECT * FROM MAIN_CFG_TABLE; +SELECT * FROM SUB_CFG_TABLE; +SELECT * FROM PHASOR; +SELECT * FROM ANALOG; +SELECT * FROM DIGITAL; + +SELECT * from PHASOR_MEASUREMENTS WHERE SOC = (SELECT MAX(SOC) FROM PHASOR_MEASUREMENTS); + +delete from MAIN_CFG_TABLE; +delete from SUB_CFG_TABLE; +delete from PHASOR; +delete from ANALOG; +delete from DIGITAL; +delete from PHASOR_MEASUREMENTS; +delete from FREQUENCY_MEASUREMENTS; +delete from ANALOG_MEASUREMENTS; +delete from DIGITAL_MEASUREMENTS; +delete from REVEIVED_FRAME_TIME; + +----DATA + +SELECT * FROM PHASOR_MEASUREMENTS ; +SELECT * FROM FREQUENCY_MEASUREMENTS; +SELECT * FROM ANALOG_MEASUREMENTS; +SELECT * FROM DIGITAL_MEASUREMENTS; +SELECT * FROM REVEIVED_FRAME_TIME; + +SELECT COUNT(*) FROM PHASOR_MEASUREMENTS ; +SELECT COUNT(*) FROM FREQUENCY_MEASUREMENTS; +SELECT COUNT(*) FROM ANALOG_MEASUREMENTS; +SELECT COUNT(*) FROM DIGITAL_MEASUREMENTS; + +// To verify the number of frames received per second from PMU Simulator. +SELECT COUNT(*) from PHASOR_MEASUREMENTS WHERE SOC = (SELECT MAX(SOC)-n FROM PHASOR_MEASUREMENTS); +SELECT COUNT(*) from ANALOG_MEASUREMENTS WHERE SOC = (SELECT MAX(SOC)-n FROM ANALOG_MEASUREMENTS); + +----DROP TABLE + +drop table MAIN_CFG_TABLE; +drop table SUB_CFG_TABLE; +drop table PHASOR; +drop table ANALOG; +drop table DIGITAL; +drop table PHASOR_MEASUREMENTS; +drop table FREQUENCY_MEASUREMENTS; +drop table ANALOG_MEASUREMENTS; +drop table DIGITAL_MEASUREMENTS; +drop table REVEIVED_FRAME_TIME; +*/ + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/cfg.bin b/DBServer/cfg.bin new file mode 100644 index 0000000..54a4732 Binary files /dev/null and b/DBServer/cfg.bin differ diff --git a/DBServer/connections.c b/DBServer/connections.c new file mode 100755 index 0000000..1209f3b --- /dev/null +++ b/DBServer/connections.c @@ -0,0 +1,271 @@ +/* ----------------------------------------------------------------------------- + * connections.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* Functions defined in connections.c */ +/* -----------------------------------------------------------------------------*/ + +/* 1. void setup() */ +/* 2. void* DB_udp() */ +/* 3. void* DB_udphandler(void * udp_BUF) */ +/* 4. void DB_process_UDP(char* udp_BUF) */ + +/* ---------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "connections.h" +#include "parser.h" +#include "global.h" + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +pthread_mutex_t mutex_on_buffer; + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION setup(): */ +/* ---------------------------------------------------------------------------- */ + +void setup(){ + + printf("Entering DBServer setup()\n"); + + /* MySQL data base parameters */ + server = "localhost"; + user = "root"; + password = "root"; /* Change this password value, if not the same in your case? */ + database = "iPDC"; + + /* MySQL data base connection */ + conn_data = mysql_init(NULL); + conn_cfg = mysql_init(NULL); + + if(conn_data == NULL) { + + printf("No sufficient memory\n"); + exit(1); + } + + if(conn_cfg == NULL) { + + printf("No sufficient memory\n"); + exit(1); + } + + /* Connect to database */ + if (!mysql_real_connect(conn_data, server, + user, password, database, 0, NULL, 0)) { + + fprintf(stderr, "%s\n", mysql_error(conn_data)); + exit(1); + } + + if (!mysql_real_connect(conn_cfg, server, + user, password, database, 0, NULL, 0)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + + /* Create UDP socket and bind to port */ + int yes; + if ((DB_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("DB Socket:Sucessfully created\n"); + + } + + if (setsockopt(DB_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + DB_server_addr.sin_family = AF_INET; // host byte order + DB_server_addr.sin_port = htons(DBPORT); // short, network byte order + DB_server_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(DB_server_addr.sin_zero),'\0', 8); // zero the rest of the struct + + if (bind(DB_sockfd, (struct sockaddr *)&DB_server_addr, + sizeof(DB_server_addr)) == -1) { + perror("bind"); + exit(1); + + } else { + + printf("DB Socket Bind :Sucessfull\n"); + } + + printf("\nDB Server Listening on port %d\n",DBPORT); + + DB_addr_len = sizeof(struct sockaddr); + + DB_udp(); + mysql_close(conn_cfg); + mysql_close(conn_data); + +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION udp(): */ +/* It creates a Pthread for each received UDP data. */ +/* ---------------------------------------------------------------------------- */ + + +void DB_udp(){ + + // UDP threads are created for each received UDP message in 'detached' mode. Thus allowing any number of threads to be created. + int err; + pthread_attr_t attr; + pthread_attr_init(&attr); + + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { // In the detached state, the thread resources are + // immediately freed when it terminates, but + perror(strerror(err)); // pthread_join(3) cannot be used to synchronize + exit(1); // on the thread termination. + + } + + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { // Shed policy = SCHED_FIFO (realtime, first-in first-out) + + perror(strerror(err)); + exit(1); + } + + + /* UDP data Received */ + while(1) { + + if ((numbytes = recvfrom(DB_sockfd,buffer, MAXBUFLEN-1, 0,(struct sockaddr *)&their_addr, (socklen_t *)&DB_addr_len)) == -1) { + // Main if + perror("recvfrom"); + exit(1); + + } else { /* New datagram has been received */ + + pthread_t t; + int tt; + unsigned char *udp_BUF; + udp_BUF = malloc(MAXBUFLEN*sizeof(unsigned char)); + + if(!udp_BUF) { + + printf("No space for udp_BUF\n"); + exit(1); + } + + printf("UDP Server got packet from %s\n",inet_ntoa(their_addr.sin_addr)); + printf("packet is %d bytes long.\n",numbytes); + buffer[numbytes] = '\0'; + + /* Copy the udp_buf data to a local variable */ + pthread_mutex_lock(&mutex_on_buffer); + copy_cbyc(udp_BUF,buffer,MAXBUFLEN); + memset(buffer, '\0', MAXBUFLEN); + pthread_mutex_unlock(&mutex_on_buffer); + + /* Creates a new thread for each received UDP message */ + if((tt = pthread_create(&t,&attr,DB_udphandler,(void *)udp_BUF))) { + + perror(strerror(tt)); + exit(1); + } + + } // Main if ends + + } // while ends + + pthread_attr_destroy(&attr); +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION udphandler(): */ +/* It internally calls process_UDP(). */ +/* ---------------------------------------------------------------------------- */ + +void* DB_udphandler(void * udp_BUF) { + + DB_process_UDP((unsigned char*)udp_BUF); + + free((unsigned char*)udp_BUF); + + pthread_exit(NULL); /* Exit the thread once the task is done. */ + +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION process_UDP(): */ +/* This function Processes the frames as per their type(command, data, config). */ +/* ---------------------------------------------------------------------------- */ + +void DB_process_UDP(unsigned char* udp_BUF){ + + int stat_status,i; + unsigned char c = udp_BUF[1]; + c <<= 1; + c >>= 5; + if(c == 0x00){ /* If data frame */ + + printf("\nData frame reveived\n"); + stat_status = dataparser(udp_BUF); + printf("Return from Data Parser\n"); + + } else if(c == 0x03) { /* If configuration frame */ + + printf("\nConfiguration frame reveived\n"); + cfgparser(udp_BUF); + printf("Return from CFG\n"); + + + } else { + + printf("Erroneous frame\n"); + + } + fflush(stdout); +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/connections.h b/DBServer/connections.h new file mode 100755 index 0000000..3ec106a --- /dev/null +++ b/DBServer/connections.h @@ -0,0 +1,57 @@ +/* ----------------------------------------------------------------------------- + * connections.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include + +/* ---------------------------------------------------------------- */ +/* global variable */ +/* ---------------------------------------------------------------- */ + +#define DBPORT 9000 +#define MAXBUFLEN 2000 + +int DB_sockfd; //socket descriptor +struct sockaddr_in DB_server_addr,their_addr; +int DB_addr_len,numbytes; +unsigned char buffer[MAXBUFLEN]; + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void setup(); + +void DB_udp(); + +void* DB_udphandler(void * udp_BUF); + +void DB_process_UDP(unsigned char* udp_BUF); + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/dallocate.c b/DBServer/dallocate.c new file mode 100755 index 0000000..64cdf0b --- /dev/null +++ b/DBServer/dallocate.c @@ -0,0 +1,112 @@ +/* ----------------------------------------------------------------------------- + * dallocate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include "parser.h" +#include "dallocate.h" +#include "global.h" + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in dallocate.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. void free_cfgframe_object(struct cfg_frame *cfg) */ +/* 2. void free_2darray(char** array, int x) */ + +/* ------------------------------------------------------------------------------------ */ + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_cfgframe_object(): */ +/* It frees memory allocated to cfg objects. */ +/* ------------------------------------------------------------ */ + +void free_cfgframe_object(struct cfg_frame *cfg) { + + int j = 0; + struct dgnames *t_dgnames,*r_dgnames; + printf("Inside free_cfgframe_object()\n"); + + while(jnum_pmu) { + + if(cfg->pmu[j]->phnmr != 0) + free_2darray(cfg->pmu[j]->cnext->phnames,cfg->pmu[j]->phnmr); + if(cfg->pmu[j]->annmr != 0) + free_2darray(cfg->pmu[j]->cnext->angnames,cfg->pmu[j]->annmr); + + if(cfg->pmu[j]->dgnmr != 0) { + + t_dgnames = cfg->pmu[j]->cnext->first; + while(t_dgnames != NULL) { + + r_dgnames = t_dgnames->dg_next; + free_2darray(t_dgnames->dgn,16); + t_dgnames = r_dgnames; + + } + } + + if(cfg->pmu[j]->dgnmr != 0) + free_2darray(cfg->pmu[j]->dgunit,cfg->pmu[j]->dgnmr); + + j++; + } // End of While + + free(cfg); +} + +/* -------------------------------------------------------------*/ +/* FUNCTION free_2darray: */ +/* It frees memory allocated to 2D Arrays. */ +/* -------------------------------------------------------------*/ + +void free_2darray_l(long int **array, int x){ + + int i; + for(i=0; i + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +void free_cfgframe_object(struct cfg_frame *cfg); // Frees memory allocated to cfg objects + +void free_2darray_l(long int** array, int x); // frees memory allocated to 2D arrays + +void free_2darray(unsigned char** array, int x); // frees memory allocated to 2D arrays + +/**************************************** End of File *******************************************************/ + diff --git a/DBServer/dbserver.c b/DBServer/dbserver.c new file mode 100755 index 0000000..e55608d --- /dev/null +++ b/DBServer/dbserver.c @@ -0,0 +1,52 @@ +/* ----------------------------------------------------------------------------- + * dbserver.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include "connections.h" +#include "parser.h" +#include "recreate.h" + +/* ---------------------------------------------------------------- */ +/* main program starts here */ +/* ---------------------------------------------------------------- */ + +int main(void) { + + system("clear"); + recreate_cfg_objects() ; + setup(); + return 0; +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/global.h b/DBServer/global.h new file mode 100755 index 0000000..86063c5 --- /dev/null +++ b/DBServer/global.h @@ -0,0 +1,59 @@ +/* ----------------------------------------------------------------------------- + * global.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include + + +/* ---------------------------------------------------------------- */ +/* Database variables */ +/* ---------------------------------------------------------------- */ + +char *server; +char *user; +char *password ; +char *database ; +int BUFF_LEN; + +MYSQL *conn_data; // Connection to database for data insertion +MYSQL *conn_cfg; // Connection to database for cfg insertion + +pthread_mutex_t mutex_cfg; // To lock cfg objects +pthread_mutex_t mutex_file; // To lock cfg.txt +pthread_mutex_t mutex_MYSQL_CONN_ON_DATA; // To lock 'conn_data' connection for DATA insertion +pthread_mutex_t mutex_MYSQL_CONN_ON_CFG; // To lock 'conn_cfg' connection for CFG insertion + +pthread_mutex_t mutex_phasor_buffer; +char *phasorBuff; +char *frequencyBuff; +char *digitalBuff; +char *analogBuff; +char *delayBuff; + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/parser.c b/DBServer/parser.c new file mode 100755 index 0000000..515e15f --- /dev/null +++ b/DBServer/parser.c @@ -0,0 +1,1837 @@ +/* ----------------------------------------------------------------------------- + * parser.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* Functions defined in parser.c */ +/* -----------------------------------------------------------------------------*/ + +/* 1. void cfgparser(char []) */ +/* 2. int remove_old_cfg(char[]) */ +/* 3. void cfginsert(struct cfg_frame *) */ +/* 4. void dataparser(char[]) */ +/* 5. int check_statword(char stat[]) */ +/* 6. void hexTobin(char []) */ +/* 7. void hexToAscii(char []) */ + +/* ---------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "dallocate.h" +#include "connections.h" + +const int PI = 3.14; + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfgparser(): */ +/* It creates configuration objects for the received configuration frames. */ +/* Configuration frame is also written in the file `cfg.bin`. */ +/* If the object is already present, it will replace in cfg_frame LL and */ +/* also in the file `cfg.bin` by calling remove_old_cfg(). */ +/* ---------------------------------------------------------------------------- */ + +void cfgparser(unsigned char st[]){ + + FILE *fp; + unsigned char *s; + int match = 0,dgchannels,i,j, phtype, antype; + struct cfg_frame *cfg; + struct channel_names *cn; + unsigned long int l_phunit,l_anunit; + + unsigned char *sync,*frame_size,*idcode_h,*soc,*fracsec,*time_base,*num_pmu,*stn,*idcode_l,*format,*phnmr,*annmr,*dgnmr; + unsigned char *fnom,*cfg_cnt,*data_rate,*buf; + + sync = malloc(3*sizeof(unsigned char)); + frame_size = malloc(3*sizeof(unsigned char)); + idcode_h= malloc(3*sizeof(unsigned char)); + soc = malloc(5*sizeof(unsigned char)); + fracsec = malloc(5*sizeof(unsigned char)); + time_base = malloc(5*sizeof(unsigned char)); + num_pmu = malloc(3*sizeof(unsigned char)); + stn = malloc(17*sizeof(unsigned char)); + idcode_l = malloc(3*sizeof(unsigned char)); + format = malloc(5*sizeof(unsigned char)); + phnmr = malloc(3*sizeof(unsigned char)); + annmr = malloc(3*sizeof(unsigned char)); + dgnmr = malloc(3*sizeof(unsigned char)); + + fnom = malloc(3*sizeof(unsigned char)); + cfg_cnt = malloc(3*sizeof(unsigned char)); + data_rate = malloc(3*sizeof(unsigned char)); + buf = malloc(9*sizeof(unsigned char)); + + memset(sync,'\0',3); + memset(frame_size,'\0',3); + memset(idcode_h,'\0',3); + memset(soc,'\0',3); + memset(fracsec,'\0',5); + memset(time_base,'\0',5); + memset(num_pmu,'\0',3); + memset(stn,'\0',17); + memset(idcode_l,'\0',3); + memset(format,'\0',3); + memset(phnmr,'\0',3); + memset(annmr,'\0',3); + memset(dgnmr,'\0',3); + + memset(fnom,'\0',3); + memset(cfg_cnt ,'\0',3); + memset(data_rate,'\0',3); + memset(buf,'\0',9); + + /******************** PARSING BEGINGS *******************/ + + pthread_mutex_lock(&mutex_file); + + fp = fopen("cfg.bin","ab"); //Store configuration in a file + + if (fp == NULL) + printf("File doesn't exist\n"); + + cfg = malloc(sizeof(struct cfg_frame)); + if(!cfg) { + printf("No enough memory for cfg\n"); + } + + printf("Inside cfgparser()\n"); + s = st; + + //Copy sync word to file + copy_cbyc (sync,(unsigned char *)s,2); + sync[2] = '\0'; + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc (frame_size,(unsigned char *)s,2); + frame_size[2]='\0'; + cfg->framesize = to_intconvertor(frame_size); + printf("FRAME SIZE %d\n",cfg->framesize); + s = s + 2; + + size_t result; + + result = fwrite(st, sizeof(unsigned char),cfg->framesize, fp); + printf("No of bytes written %ld, into the cfg file.\n",(long int)result); + + unsigned long fileLen; + fseek(fp, 0, SEEK_END); + fileLen = ftell(fp); + fseek(fp, 0, SEEK_SET); + printf("FILE LENGTH %ld\n",fileLen); + + + //SEPARATE IDCODE + copy_cbyc (idcode_h,(unsigned char *)s,2); + idcode_h[2] = '\0'; + cfg->idcode = to_intconvertor(idcode_h); + printf("ID Code %d\n",cfg->idcode); + s = s + 2; + + //SEPARATE SOC + copy_cbyc (soc,(unsigned char *)s,4); + soc[4] = '\0'; + cfg->soc = to_long_int_convertor(soc); + printf("SOC %ld\n",cfg->soc); + s =s + 4; + + //SEPARATE FRACSEC + copy_cbyc (fracsec,(unsigned char *)s,4); + fracsec[4] = '\0'; + cfg->fracsec = to_long_int_convertor(fracsec); + printf("FracSec %ld\n",cfg->fracsec); + s = s + 4; + + //SEPARATE TIMEBASE + copy_cbyc (time_base,(unsigned char *)s,4); + time_base[4]='\0'; + cfg->time_base = to_long_int_convertor(time_base); + printf("Time Base %ld\n",cfg->time_base); + s = s + 4; + + //SEPARATE PMU NUM + copy_cbyc (num_pmu,(unsigned char *)s,2); + num_pmu[2] = '\0'; + cfg->num_pmu = to_intconvertor(num_pmu); + printf("Number of PMU's %d\n",cfg->num_pmu); + s = s + 2; + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(cfg->num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory pmu[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->num_pmu; i++) { + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jnum_pmu) { + + //SEPARATE STATION NAME + memset(cfg->pmu[j]->stn,'\0',17); + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16] = '\0'; + + printf("STATION NAME %s\n",cfg->pmu[j]->stn); + s = s + 16; + + //SEPARATE IDCODE + copy_cbyc (idcode_l,(unsigned char *)s,2); + idcode_l[2]='\0'; + cfg->pmu[j]->idcode = to_intconvertor(idcode_l); + printf("ID Code %d\n",cfg->pmu[j]->idcode); + s = s + 2; + + //SEPARATE DATA FORMAT + copy_cbyc ((unsigned char *)cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + //printf("PMU format %s\n",cfg->pmu[j]->data_format); + s = s + 2; + + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = 1; else cfg->pmu[j]->fmt->freq = 0; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = 1; else cfg->pmu[j]->fmt->analog = 0; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = 1; else cfg->pmu[j]->fmt->phasor = 0; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = 1; else cfg->pmu[j]->fmt->polar = 0; + + //SEPARATE PHASORS + copy_cbyc (phnmr,(unsigned char *)s,2); + phnmr[2]='\0'; + cfg->pmu[j]->phnmr = to_intconvertor(phnmr); + printf("Phasors %d\n",cfg->pmu[j]->phnmr); + s = s + 2; + + //SEPARATE ANALOGS + copy_cbyc (annmr,(unsigned char *)s,2); + annmr[2]='\0'; + cfg->pmu[j]->annmr = to_intconvertor(annmr); + printf("Analogs %d\n",cfg->pmu[j]->annmr); + s = s + 2; + + //SEPARATE DIGITALS + copy_cbyc (dgnmr,(unsigned char *)s,2); + dgnmr[2]='\0'; + cfg->pmu[j]->dgnmr = to_intconvertor(dgnmr); + printf("Digitals %d\n",cfg->pmu[j]->dgnmr); + s = s + 2; + + cn = malloc(sizeof(struct channel_names)); + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(cfg->pmu[j]->phnmr != 0){ + cn->phtypes = malloc((cfg->pmu[j]->phnmr) * sizeof(unsigned char*)); + cn->phnames = malloc((cfg->pmu[j]->phnmr) * sizeof(unsigned char*)); + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + + cn->phnames[i] = malloc(17*sizeof(unsigned char)); + memset(cn->phnames[i],'\0',17); + cn->phtypes[i] = malloc(2*sizeof(unsigned char)); + memset(cn->phtypes[i],'\0',2); + + } + + cfg->pmu[j]->phunit = malloc(cfg->pmu[j]->phnmr*sizeof(float*)); + if(!cfg->pmu[j]->phunit) { + printf("Not enough memory cfg.pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + cfg->pmu[j]->phunit[i] = malloc(sizeof(float)); + } + + + i = 0;//Index for PHNAMES + while(ipmu[j]->phnmr){ + + copy_cbyc (cn->phnames[i],(unsigned char *)s,16); + cn->phnames[i][16] = '\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(cfg->pmu[j]->annmr != 0){ + cn->antypes = malloc((cfg->pmu[j]->annmr)*sizeof(unsigned char*)); + cn->angnames = malloc((cfg->pmu[j]->annmr)*sizeof(unsigned char*)); + if(!cn->angnames) { + + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + + cn->angnames[i] = malloc(17*sizeof(unsigned char)); + memset(cn->angnames[i],'\0',17); + cn->antypes[i] = malloc(5*sizeof(unsigned char)); + memset(cn->antypes[i],'\0',5); + } + + cfg->pmu[j]->anunit = malloc(cfg->pmu[j]->annmr*sizeof(float*)); + if(!cfg->pmu[j]->anunit) { + printf("Not enough memory cfg.pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + cfg->pmu[j]->anunit[i] = malloc(sizeof(float)); + } + + i = 0;//Index for ANGNAMES + + while(ipmu[j]->annmr){ + copy_cbyc (cn->angnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s = s + 16; + i++; + } + } + + + if(cfg->pmu[j]->dgnmr != 0){ + + cfg->pmu[j]->dgunit = malloc(cfg->pmu[j]->dgnmr*sizeof(unsigned char*)); + if(!cfg->pmu[j]->dgunit) { + + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->dgnmr; i++) { + + cfg->pmu[j]->dgunit[i] = malloc(5); + } + } + + i = 0; + int di;//Index for number of dgwords + + struct dgnames *q; + + while(i < cfg->pmu[j]->dgnmr) { + + struct dgnames *temp1 = malloc(sizeof(struct dgnames)); + temp1->dgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (di = 0; di < 16; di++) { + + temp1->dgn[di] = malloc(17*sizeof(unsigned char)); + + } + + temp1->dg_next = NULL; + + for(dgchannels = 0;dgchannels < 16;dgchannels++){ + + memset(temp1->dgn[dgchannels],'\0',16); + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16] = '\0'; + s += 16; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + cn->first = q = temp1; + + } else { + + while(q->dg_next!=NULL){ + q = q->dg_next; + } + q->dg_next = temp1; + } + + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(cfg->pmu[j]->phnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->phnmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + phtype = to_intconvertor1(buf); + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + l_phunit = to_long_int_convertor1(buf); + + if (phtype == 0) + { + cfg->pmu[j]->cnext->phtypes[i] = "V"; + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else if (phtype == 1) + { + cfg->pmu[j]->cnext->phtypes[i] = "I"; + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else + { + perror("Invalid first byte in PHUNIT - probably error in PMU"); + } + + printf("Phasor Factor %d = %f\n",i,*cfg->pmu[j]->phunit[i]); + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(cfg->pmu[j]->annmr != 0){ + + i=0; + while(ipmu[j]->annmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + + antype = to_intconvertor1(buf); + switch(antype) + { + case 0 : cfg->pmu[j]->cnext->antypes[i] = "POW"; + break; + case 1 : cfg->pmu[j]->cnext->antypes[i] = "RMS"; + break; + case 2 : cfg->pmu[j]->cnext->antypes[i] = "PEAK"; + break; + default: perror("Invalid first byte in ANUNIT?"); + break; + } + + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + l_anunit = to_long_int_convertor1(buf); + + if (cfg->pmu[j]->fmt->analog == 0) + { + *cfg->pmu[j]->anunit[i] = l_anunit * 1e-5; // Assumed factor of 1e5 in iPDC + } + else + { + *cfg->pmu[j]->anunit[i] = 1; + } + + printf("Analog Factor %d = %f\n",i,*cfg->pmu[j]->anunit[i]); + i++; + } + + } // if for ANALOG FActtors ends + + ///DIGITAL FACTORS + if(cfg->pmu[j]->dgnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->dgnmr ){ //Separate the Digital conversion factors + + copy_cbyc(cfg->pmu[j]->dgunit[i],(unsigned char *)s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + printf("DGWORD %s\n",cfg->pmu[j]->dgunit[i]); + s += 4; + i++; + } + } //if for Digital Words FActtors ends + + copy_cbyc (fnom,(unsigned char *)s,2); + fnom[2]='\0'; + cfg->pmu[j]->fnom = to_intconvertor(fnom); + printf("FREQUENCY %d\n",cfg->pmu[j]->fnom); + s = s + 2; + + copy_cbyc (cfg_cnt,(unsigned char *)s,2); + cfg_cnt[2] = '\0'; + cfg->pmu[j]->cfg_cnt = to_intconvertor(cfg_cnt); + printf("CFG CHANGE COUNT %d\n",cfg->pmu[j]->cfg_cnt); + s = s + 2; + j++; + }//While for PMU number ends + + copy_cbyc (data_rate,(unsigned char *)s,2); + data_rate[2] = '\0'; + cfg->data_rate = to_intconvertor(data_rate); + printf("Data Rate %d\n",cfg->data_rate); + s += 2; + cfg->cfgnext = NULL; + + // Adjust the configuration object pointers + + // Lock the mutex_cfg + pthread_mutex_lock(&mutex_cfg); + + // Index is kept to replace the cfgfirst if it matches + int index = 0; + + if (cfgfirst == NULL) { // Main if + printf("1\n"); + cfgfirst = cfg; + fclose(fp); + + } else { + + struct cfg_frame *temp_cfg = cfgfirst,*tprev_cfg; + tprev_cfg = temp_cfg; + + //Check if the configuration frame already exists + while(temp_cfg!=NULL){ + + if(cfg->idcode == temp_cfg->idcode) { + + printf("CFG PRESENT NEED TO REPLACE\n"); + match = 1; + break; + + } else { + + index++; + tprev_cfg = temp_cfg; + temp_cfg = temp_cfg->cfgnext; + + } + }// While ends + + if(match) { + + if(!index) { + + // Replace the cfgfirst + cfg->cfgnext = cfgfirst->cfgnext; + free_cfgframe_object(cfgfirst); + cfgfirst = cfg; + + // Get the new value of the CFG frame + fclose(fp); + remove_old_cfg(cfg->idcode,st); + + } else { + + // Replace in between cfg + tprev_cfg->cfgnext = cfg; + cfg->cfgnext = temp_cfg->cfgnext; + free_cfgframe_object(temp_cfg); + fclose(fp); + remove_old_cfg(cfg->idcode,st); + } + + } else { // No match and not first cfg + + tprev_cfg->cfgnext = cfg; + fclose(fp); + } + + } //Main if + + cfginsert(cfg); // DATABASE INSERTION + pthread_mutex_unlock(&mutex_cfg); + pthread_mutex_unlock(&mutex_file); + + free(sync); + free(frame_size); + free(idcode_h); + free(soc); + free(fracsec); + free(time_base); + free(num_pmu); + free(stn); + free(idcode_l); + free(format); + free(phnmr); + free(annmr); + free(dgnmr); + free(fnom); + free(cfg_cnt); + free(data_rate); + free(buf); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_old_cfg(): */ +/* It removes the old configuration frame from the file `cfg.bin` and replaces */ +/* it with new configuration frame at same position in the file. */ +/* ---------------------------------------------------------------------------- */ + +void remove_old_cfg(int idcode,unsigned char frame[]) { // Begins + + FILE *file,*newfile; + int result; + unsigned int idCODE,framesize; + unsigned char *s,id[3],*line,frame_len[2]; + unsigned long fileLen; + + file = fopen("cfg.bin","rb"); + newfile = fopen("ncfg.bin","wb"); + if (file != NULL) { + + //Get file length + fseek(file, 0, SEEK_END); + fileLen = ftell(file); + fseek(file, 0, SEEK_SET); + printf("BEFORE REMOVAL OF OLDFRAME FILE LEN %ld\n",fileLen); + + while (fileLen != 0) /* Till the EOF */{ + + fseek (file,2 ,SEEK_CUR); + fread(frame_len, sizeof(unsigned char),2, file); + fseek (file,-4 ,SEEK_CUR); + + framesize = to_intconvertor(frame_len); + line = malloc(framesize*sizeof(unsigned char)); + memset(line,'\0',sizeof(line)); + fread(line, sizeof(unsigned char),framesize,file); + s = line; + s += 4; + //match IDCODE in cfg.bin file + copy_cbyc (id,s,2); + id[2] = '\0'; + idCODE = to_intconvertor(id); + + if(idCODE == idcode) { + + printf("MATCH the new cfg with old cfg in file cfg.bin?\n"); + break; + + } else { + + //Place rest of lines in the new file + fwrite(line, sizeof(unsigned char),framesize,newfile); + free(line); + fileLen -= framesize; + } + }//While ends + + // The new cfg is copied in the ncfg.bin file + unsigned int len; + unsigned char *p = frame; + p += 2; + copy_cbyc (frame_len,p,2); + len = to_intconvertor(frame_len); + fwrite(frame, sizeof(unsigned char),len,newfile); + + // If cfg.bin file still contains data copy it to ncfg.bin + while (fileLen != 0) /* Till the EOF */{ + + fseek (file,2 ,SEEK_CUR); + fread(frame_len, sizeof(unsigned char),2, file); + fseek (file,-4 ,SEEK_CUR); + + framesize = to_intconvertor(frame_len); + line = malloc(framesize*sizeof(unsigned char)); + memset(line,'\0',sizeof(line)); + fread(line, sizeof(unsigned char),framesize,file); + + if(!ncmp_cbyc(line,frame,framesize)) { + + //This skips the last line of the file that contains already added cfg + //hence we dont copy this line to ncfg.bin + break; + + } else { + + fwrite(frame, sizeof(unsigned char),framesize,newfile); + free(line); + fileLen -= framesize; + } + + } + + //File renaming + fclose (file); + fclose(newfile); + + if( remove( "cfg.bin" ) != 0 ) + perror( "Error deleting file" ); + result= rename("ncfg.bin","cfg.bin"); + if ( result == 0 ) + fputs ("File successfully renamed",stdout); + else + perror( "Error renaming file" ); + + } else { + + perror ("cfg.bin"); /* why didn't the file open? */ + + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfginsert(): */ +/* It inserts/updates the configuration frames in the configuration tables. */ +/* ---------------------------------------------------------------------------- */ + +void cfginsert(struct cfg_frame *cfg){ + + int i,j,k; + char *cmd,*cmd2; + MYSQL_RES *res1,*res2,*res3,*res4; + + printf("INSIDE CFG INSERT\n"); + + cmd = malloc(1000); + cmd2 = malloc(500); + memset(cmd,'\0',1000); //For update queries + memset(cmd2,'\0',500); //For insert queries + + pthread_mutex_lock(&mutex_MYSQL_CONN_ON_CFG); + + sprintf(cmd2, "SELECT * FROM MAIN_CFG_TABLE WHERE PDC_ID = %d",cfg->idcode); + + + if (mysql_query(conn_cfg,cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + + res1 = mysql_use_result(conn_cfg); + if(mysql_fetch_row(res1)== NULL) { + + mysql_free_result(res1); + printf("No Entry Make Insert into table\n"); + memset(cmd,'\0',1000); + sprintf(cmd, "INSERT INTO MAIN_CFG_TABLE VALUES(%d,%ld,%ld,%ld,%d,%d)",cfg->idcode,cfg->soc,cfg->fracsec, + cfg->time_base,cfg->num_pmu,cfg->data_rate); + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + j = 0; + while(j < cfg->num_pmu){ + + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO SUB_CFG_TABLE(PDC_ID,PMU_ID,SOC,FRACSEC,STN,PHNMR,ANNMR,DGNMR,FNOM) VALUES(%d,%d,%ld,%ld,\"%s\",%d,%d,%d,%d)",cfg->idcode,cfg->pmu[j]->idcode,cfg->soc,cfg->fracsec,cfg->pmu[j]->stn,cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,(cfg->pmu[j]->fnom > 0) ? 50 : 60); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + if(cfg->pmu[j]->phnmr != 0){ + for(i = 0;ipmu[j]->phnmr;i++) { + + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO PHASOR(PDC_ID,PMU_ID,PHASOR_NAMES,PHASOR_TYPE,PHUNITS) VALUES (%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i],cfg->pmu[j]->cnext->phtypes[i],*cfg->pmu[j]->phunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + } + } + + if(cfg->pmu[j]->annmr != 0){ + for(i = 0;ipmu[j]->annmr;i++) { + + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO ANALOG(PDC_ID,PMU_ID,ANALOG_NAMES,ANALOG_TYPE,ANUNITS) VALUES(%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i],cfg->pmu[j]->cnext->antypes[i],*cfg->pmu[j]->anunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + } + } + + if(cfg->pmu[j]->dgnmr != 0){ + + unsigned long int dunit; + struct dgnames *temp_dnames = cfg->pmu[j]->cnext->first; + for(i = 0;ipmu[j]->dgnmr;i++) { + + for(k = 0;k<16;k++) { + + dunit = to_long_int_convertor(cfg->pmu[j]->dgunit[i]); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO DIGITAL(PDC_ID,PMU_ID,DIGITAL_NAMES,DIGITAL_WORD) VALUES(%d,%d,\"%s\",%u)",cfg->idcode,cfg->pmu[j]->idcode,temp_dnames->dgn[k],(unsigned int)dunit); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + } + + temp_dnames = temp_dnames->dg_next; + } + } + + j++; + } + + } else { + + // update + mysql_free_result(res1); + + printf("Update the existing entry in table\n"); + memset(cmd,'\0',1000); + + sprintf(cmd, "UPDATE MAIN_CFG_TABLE SET SOC = %ld,FRACSEC = %ld,TIMEBASE = %ld,NUM_OF_PMU = %d,DATA_RATE = %d WHERE PDC_ID = %d",cfg->soc,cfg->fracsec,cfg->time_base,cfg->num_pmu,cfg->data_rate,cfg->idcode); + + if (mysql_query(conn_cfg,cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + + int j = 0; + while(j < cfg->num_pmu){ + + memset(cmd2,'\0',500); + + sprintf(cmd2, "SELECT * FROM SUB_CFG_TABLE WHERE PDC_ID = %d AND PMU_ID = %d AND STN = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->stn); + + if (mysql_query(conn_cfg, cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + res2 = mysql_use_result(conn_cfg); + printf("%s\n",cmd2); + + if(mysql_fetch_row(res2)== NULL) { + + mysql_free_result(res2); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO SUB_CFG_TABLE(PDC_ID,PMU_ID,SOC,FRACSEC,STN,PHNMR,ANNMR,DGNMR,FNOM) VALUES(%d,%d,%ld,%ld,\"%s\",%d,%d,%d,%d)",cfg->idcode,cfg->pmu[j]->idcode,cfg->soc,cfg->fracsec,cfg->pmu[j]->stn,cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,(cfg->pmu[j]->fnom > 0) ? 50 : 60); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + } else { + + mysql_free_result(res2); + memset(cmd,'\0',1000); + + sprintf(cmd, "UPDATE SUB_CFG_TABLE SET PHNMR = %d,ANNMR = %d,DGNMR = %d,FNOM = %d WHERE PDC_ID = %d AND PMU_ID = %d AND STN = \"%s\"",cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,(cfg->pmu[j]->fnom > 0) ? 50 : 60,cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->stn); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + } + + if(cfg->pmu[j]->phnmr !=0){ + for(i = 0;ipmu[j]->phnmr;i++) { + + memset(cmd2,'\0',500); + + sprintf(cmd2, "SELECT * FROM PHASOR WHERE PDC_ID = %d AND PMU_ID = %d AND PHASOR_NAMES = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i]); + + if (mysql_query(conn_cfg, cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd2); + + res3 = mysql_use_result(conn_cfg); + if(mysql_fetch_row(res3)== NULL) { + + mysql_free_result(res3); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO PHASOR(PDC_ID,PMU_ID,PHASOR_NAMES,PHASOR_TYPE,PHUNITS) VALUES (%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i],cfg->pmu[j]->cnext->phtypes[i],*cfg->pmu[j]->phunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + } else { + + mysql_free_result(res3); + memset(cmd,'\0',1000); + sprintf(cmd,"UPDATE PHASOR SET PHUNITS = %f, PHASOR_TYPE = \"%s\" WHERE PDC_ID = %d AND PMU_ID = %d AND PHASOR_NAMES = \"%s\"",*cfg->pmu[j]->phunit[i],cfg->pmu[j]->cnext->phtypes[i],cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + + } + } + } // Phasors + + if(cfg->pmu[j]->annmr !=0){ + + for(i = 0;ipmu[j]->annmr;i++) { + + memset(cmd2,'\0',500); + + sprintf(cmd2, "SELECT * FROM ANALOG WHERE PDC_ID = %d AND PMU_ID = %d AND ANALOG_NAMES = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i]); + + if (mysql_query(conn_cfg, cmd2)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd2); + + res4 = mysql_use_result(conn_cfg); + if(mysql_fetch_row(res4)== NULL) { + + mysql_free_result(res4); + memset(cmd,'\0',1000); + + sprintf(cmd,"INSERT INTO ANALOG(PDC_ID,PMU_ID,ANALOG_NAMES,ANALOG_TYPE,ANUNITS) VALUES(%d,%d,\"%s\",\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i],cfg->pmu[j]->cnext->antypes[i],*cfg->pmu[j]->anunit[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + printf("%s\n",cmd); + + } else { + + mysql_free_result(res4); + memset(cmd,'\0',1000); + + sprintf(cmd,"UPDATE ANALOG SET ANUNITS = %f, ANALOG_TYPE = \"%s\" WHERE PDC_ID = %d AND PMU_ID = %d AND ANALOG_NAMES = \"%s\"",*cfg->pmu[j]->anunit[i],cfg->pmu[j]->cnext->antypes[i],cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i]); + + if (mysql_query(conn_cfg, cmd)) { + + fprintf(stderr, "%s\n", mysql_error(conn_cfg)); + exit(1); + } + mysql_query(conn_cfg, "COMMIT"); + printf("%s\n",cmd); + } + } + } // Analog + j++; + + } // while ends + + } // Update else ends + + pthread_mutex_unlock(&mutex_MYSQL_CONN_ON_CFG); + free(cmd); + free(cmd2); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dataparser(): */ +/* Parses the data frames. It searches for configuration objects that matches */ +/* with the IDCODE and then inserts into data tables. */ +/* ---------------------------------------------------------------------------- */ + +int dataparser(unsigned char data[]) { + + struct cfg_frame *temp_cfg; + int match = 0,i,j = 0; + int stat_status,config_change = 0; + unsigned int t_id,num_pmu,phnmr,annmr,dgnmr; + float fp_r,fp_i,fp_real,fp_imaginary,fp_analogs; + long int f_r,f_i,f_analogs,f_freq,f_dfreq,l_soc,l_fracsec; + short int s_analogs, s_freq, s_dfreq; + float fp_freq,fp_dfreq; + + unsigned char *sync,*framesize,*idcode,*soc,*fracsec,*timequality,*stat,*phasors,*analogs,*digital,*freq,*dfreq,*d; + unsigned char *fp_left,*fp_right; + unsigned char *f_left,*f_right; + char *cmd; + + cmd = malloc(500); + sync = malloc(3*sizeof(unsigned char)); + framesize = malloc(3*sizeof(unsigned char)); + idcode = malloc(3*sizeof(unsigned char)); + soc = malloc(5*sizeof(unsigned char)); + fracsec = malloc(5*sizeof(unsigned char)); + timequality = malloc(2*sizeof(unsigned char)); + stat = malloc(3*sizeof(unsigned char)); + phasors = malloc(9*sizeof(unsigned char)); + analogs = malloc(5*sizeof(unsigned char)); + digital = malloc(3*sizeof(unsigned char)); + freq = malloc(5*sizeof(unsigned char)); + dfreq = malloc(5*sizeof(unsigned char)); + + memset(cmd,'\0',500); + memset(sync,'\0',3); + memset(framesize,'\0',3); + memset(idcode,'\0',3); + memset(soc,'\0',5); + memset(fracsec,'\0',5); + memset(timequality,'\0',2); + memset(stat,'\0',3); + memset(phasors,'\0',9); + memset(analogs,'\0',5); + memset(digital,'\0',3); + memset(freq,'\0',5); + memset(dfreq,'\0',5); + + fp_left = malloc(5); + fp_right = malloc(5); + f_left = malloc(3); + f_right = malloc(3); + + memset(fp_left,'\0',5); + memset(fp_right,'\0',5); + memset(f_left,'\0',3); + memset(f_right,'\0',3); + + d = data; + + //Skip SYN + d += 2; + + //SEPARATE FRAMESIZE + copy_cbyc (framesize,d,2); + framesize[2] = '\0'; + d += 2; + + //SEPARATE IDCODE + copy_cbyc (idcode,d,2); + idcode[2] ='\0'; + d += 2; + + pthread_mutex_lock(&mutex_cfg); + // Check for the IDCODE in Configuration Frame + temp_cfg = cfgfirst; + t_id = to_intconvertor(idcode); + printf("ID Code %d\n",t_id); + + while(temp_cfg != NULL){ + + if(t_id == temp_cfg->idcode) { + + match = 1; + break; + + } else { + + temp_cfg = temp_cfg->cfgnext; + + } + } + pthread_mutex_unlock(&mutex_cfg); + + pthread_mutex_lock(&mutex_MYSQL_CONN_ON_DATA); + + if(match){ // idcode matches with cfg idcode + + printf("Inside DATAPARSER, data frame and matched with CFG.\n"); + + // Allocate Memeory For Each PMU + num_pmu = temp_cfg->num_pmu; + + //Copy SOC + copy_cbyc (soc,d,4); + soc[4] = '\0'; + l_soc = to_long_int_convertor(soc); + d += 4; + + //Copy FRACSEC + //First seprate the first Byte of Time Quality Flags + copy_cbyc (timequality,d,1); + timequality[1] = '\0'; + d += 1; + + //First seprate the next 3-Byte of Actual Fraction of Seconds + copy_cbyc (fracsec,d,3); + fracsec[3] = '\0'; + l_fracsec = to_long_int_convertor1(fracsec); + l_fracsec = roundf((l_fracsec*1e6)/(temp_cfg->time_base)); + d += 3; + + // Separate the data for each PMU + while(j < num_pmu) { + + copy_cbyc (stat,d,2); + stat[2] = '\0'; + d += 2; + + // Check Stat Word for each data block + stat_status = check_statword(stat); + + + // If the data has not arrived + if(stat_status == 16) { + + memset(stat,'\0',3); + j++; + continue; + + } else if((stat_status == 14)||(stat_status == 10)) { + + memset(stat,'\0',3); + config_change = stat_status; + j++; + continue; + } + + // Extract PHNMR, DGNMR, ANNMR + phnmr = temp_cfg->pmu[j]->phnmr; + annmr = temp_cfg->pmu[j]->annmr; + dgnmr = temp_cfg->pmu[j]->dgnmr; + + pthread_mutex_lock(&mutex_phasor_buffer); + + //Phasors + if(phnmr != 0) { + + if(temp_cfg->pmu[j]->fmt->phasor == 1) { // Floating + + for(i = 0;ipmu[j]->fmt->polar == 1) { // POLAR + + /*fp_real = fp_r*cos(f_i); + fp_imaginary = fp_r*sin(f_i); + + Commented by Gopal on 8th Aug 2012. + We want to store polar values in the table */ + + fp_real = fp_r; + fp_imaginary = fp_i; + } + else // RECTANGULAR + { + fp_real = hypotf(fp_r,fp_i); + fp_imaginary = atan2f(fp_i, fp_r); + } + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f,%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary); + + dataCollectInBuffer(cmd, phasorBuff, 1); + } + } + else { // Fixed point + + for(i = 0;i < phnmr; i++){ + + memset(f_left,'\0',3); + memset(f_right,'\0',3); + copy_cbyc (f_left,d,2); + f_left[2] = '\0'; + d += 2; + + copy_cbyc(f_right,d,2); + f_right[2] = '\0'; + d += 2; + + f_r = to_intconvertor(f_left); + f_i = to_intconvertor(f_right); + + if(temp_cfg->pmu[j]->fmt->polar == 1) { // POLAR + + fp_real = *temp_cfg->pmu[j]->phunit[i] *f_r; + fp_imaginary = f_i*1e-4; // Angle is in 10^4 radians + } + else // RACTANGULAR + { + fp_r = *temp_cfg->pmu[j]->phunit[i] *f_r; + fp_i = *temp_cfg->pmu[j]->phunit[i] *f_i; + + fp_real = hypotf(fp_r,fp_i); + fp_imaginary = atan2f(fp_i, fp_r); + } + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f,%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary); + + dataCollectInBuffer(cmd, phasorBuff,1); + } + } + }// Phasors Insertion ends + + //Freq + if(temp_cfg->pmu[j]->fmt->freq == 1) { // FLOATING + + memset(freq,'\0',5); + copy_cbyc (freq,d,4); + freq[4] = '\0'; + d += 4; + + memset(dfreq,'\0',5); + copy_cbyc (dfreq,d,4); + dfreq[4] = '\0'; + d += 4; + + fp_freq = decode_ieee_single(freq); + fp_dfreq = decode_ieee_single(dfreq); + + } else { // FIXED + + memset(freq,'\0',5); + copy_cbyc (freq,d,2); + freq[2] = '\0'; + d += 2; + + memset(dfreq,'\0',5); + copy_cbyc (dfreq,d,2); + dfreq[2] = '\0'; + d += 2; + s_freq = to_intconvertor(freq); + s_dfreq = to_intconvertor(dfreq); + + fp_freq = s_freq*1e-3; // freq is in mHz deviation from nominal + if (temp_cfg->pmu[j]->fnom == 0) + fp_freq = 60 + fp_freq; + else + fp_freq = 50 + fp_freq; + fp_dfreq = s_dfreq*1e-2; // dfreq is 100 times hz/sec + } + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,%f,%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,fp_freq,fp_dfreq); + + dataCollectInBuffer(cmd, frequencyBuff,2); // Freq Insert Ends + + //Analogs + if(annmr != 0) { + + if(temp_cfg->pmu[j]->fmt->analog == 1) { // FLOATING + + for(i = 0; i < annmr; i++){ + + memset(analogs,'\0',5); + copy_cbyc(analogs,d,4); + d += 4; + analogs[4] = '\0'; + + fp_analogs = decode_ieee_single(analogs); + fp_analogs = *temp_cfg->pmu[j]->anunit[i]*fp_analogs;; + memset(cmd,'\0',500); + + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->angnames[i],fp_analogs); + + dataCollectInBuffer(cmd, analogBuff,3); + } + + } else { // FIXED + + for(i = 0; i < annmr; i++){ + + memset(analogs,'\0',5); + copy_cbyc (analogs,d,2); + d += 2; + + analogs[2] = '\0'; + s_analogs = to_intconvertor(analogs); + fp_analogs = *temp_cfg->pmu[j]->anunit[i]*s_analogs ; + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,\"%s\",%f\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->angnames[i],fp_analogs); + + dataCollectInBuffer(cmd, analogBuff,3); + } + } + } // Insertion for Analog done here. + + // Digital + if(dgnmr != 0) { + + unsigned int dgword; + + for(i = 0; iidcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,dgword); + + dataCollectInBuffer(cmd, digitalBuff,4); + } + } // Insertion for Digital done here. + + struct timeval tv; + long local_soc, local_fsec,ms_diff,s_diff; + + /* Obtain the time of day, and convert it to a tm struct. */ + gettimeofday (&tv, NULL); + + local_soc = tv.tv_sec; + local_fsec = tv.tv_usec; + s_diff = (tv.tv_sec - l_soc); + ms_diff = (tv.tv_usec - l_fracsec); + + // Formula to calculate the exact delay in micro between data frame inside-time and + // system receive time at which that data frame received. + ms_diff = ((s_diff == 0) ? ((ms_diff > 0) ? ms_diff : -1*ms_diff) : ((s_diff == 1) ? (1000000-l_fracsec+tv.tv_usec) : ((1000000*(s_diff-1))+(1000000-l_fracsec+tv.tv_usec)))); + + memset(cmd,'\0',500); + sprintf(cmd," %d,%d,%ld,%ld,%ld,%ld,%ld\n",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,local_soc,local_fsec,ms_diff); + dataCollectInBuffer(cmd, delayBuff,5); + + pthread_mutex_unlock(&mutex_phasor_buffer); + j++; + } //While ends + + } else { + + printf("NO CFG for data frames\n"); + } + + pthread_mutex_unlock(&mutex_MYSQL_CONN_ON_DATA); + + free(cmd); + free(sync); + free(framesize); + free(idcode); + free(soc); + free(fracsec); + free(timequality); + free(stat); + free(phasors); + free(analogs); + free(digital); + free(freq); + free(dfreq); + + free(fp_left); + free(fp_right); + free(f_left); + free(f_right); + + if((config_change == 14) ||(config_change == 10)) + return config_change; + else return stat_status; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION check_statword(): */ +/* Check the STAT word of the data frames for any change in the data block. */ +/* Some of the prime errors are handled. */ +/* ---------------------------------------------------------------------------- */ + +int check_statword(unsigned char stat[]) { + + int ret = 0; + + if(stat[0] == 0x0f) { + + // DEVELOPERS has used these bits as an indication for PMU data that has not arrived/missing data frames + ret = 16; + return ret; + + } else if ((stat[0] & 0x04) == 0x04) { + + printf("Configuration Change error\n"); + ret = 10; + return ret; + + } else if ((stat[0] & 0x40) == 0x40) { + + printf("PMU error including configuration error\n"); + ret = 14; + return ret; + + } else if((stat[0] & 0x80) == 0x80) { + + printf("Data invalid\n"); + ret = 15; + return ret; + + } else if ((stat[0] & 0x20) == 0x20) { + + printf("PMU Sync error\n"); + ret = 13; + return ret; + + } else if ((stat[0] & 0x10) == 0x10) { + + printf("Data sorting error\n"); + ret = 12; + return ret; + + } else if ((stat[0] & 0x08) == 0x08) { + + printf("PMU Trigger error\n"); + ret = 11; + return ret; + + } + + printf("Return from STAT Word checking %d.\n",ret); + return ret; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_intconvertor(): */ +/* ---------------------------------------------------------------------------- */ + +unsigned int to_intconvertor(unsigned char array[]) { + + unsigned int n; + n = array[0]; + n <<= 8; + n |= array[1]; + return n; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_intconvertor1(): */ +/* Written by Gopal to convert just 1 byte to int */ +/* ---------------------------------------------------------------------------- */ + +unsigned int to_intconvertor1(unsigned char array[]) { + + unsigned int n; + n = array[0]; + return n; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_long_int_convertor(): */ +/* ---------------------------------------------------------------------------- */ + +unsigned long int to_long_int_convertor(unsigned char array[]) { + + unsigned long int n; + n = array[0]; + n <<= 8; + n |= array[1]; + n <<= 8; + n |= array[2]; + n <<= 8; + n |= array[3]; + return n; + +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_long_int_convertor1(): */ +/* Written by Gopal to convert just 3 bytes to long int */ +/* ---------------------------------------------------------------------------- */ + +unsigned long int to_long_int_convertor1(unsigned char array[]) { + + unsigned long int n; + n = array[0]; + n <<= 8; + n |= array[1]; + n <<= 8; + n |= array[2]; + return n; + +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION decode_ieee_single(): */ +/* ---------------------------------------------------------------------------- */ + +float decode_ieee_single(const void *v) { + + const unsigned char *data = v; + int s, e; + unsigned long src; + long f; + float value; + + src = ((unsigned long)data[0] << 24) | + ((unsigned long)data[1] << 16) | + ((unsigned long)data[2] << 8) | + ((unsigned long)data[3]); + + s = (src & 0x80000000UL) >> 31; + e = (src & 0x7F800000UL) >> 23; + f = (src & 0x007FFFFFUL); + + if (e == 255 && f != 0) { + /* NaN (Not a Number) */ + value = DBL_MAX; + + } else if (e == 255 && f == 0 && s == 1) { + /* Negative infinity */ + value = -DBL_MAX; + } else if (e == 255 && f == 0 && s == 0) { + /* Positive infinity */ + value = DBL_MAX; + } else if (e > 0 && e < 255) { + /* Normal number */ + f += 0x00800000UL; + if (s) f = -f; + value = ldexp(f, e - 150); + } else if (e == 0 && f != 0) { + /* Denormal number */ + if (s) f = -f; + value = ldexp(f, -149); + } else if (e == 0 && f == 0 && s == 1) { + /* Negative zero */ + value = 0; + } else if (e == 0 && f == 0 && s == 0) { + /* Positive zero */ + value = 0; + } else { + /* Never happens */ + printf("s = %d, e = %d, f = %lu\n", s, e, f); + assert(!"Woops, unhandled case in decode_ieee_single()"); + } + + return value; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION copy_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size) { + + int i; + for(i = 0; i< size; i++) + dst[i] = *(s + i); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ncmp_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size) { + + int i,flag = 0; + for(i = 0; i< size; i++) { + + if(dst[i] != src[i]) { + + flag = 1; + break; + } + } + return flag; +} + + + +void dataCollectInBuffer(char *cmd, char *buffer, int type) +{ + + int err; + if((BUFF_LEN - strlen(buffer)) < strlen(cmd)) { + + char *ttt; + ttt = malloc((BUFF_LEN+1)*sizeof(unsigned char)); + memset(ttt,'\0',BUFF_LEN+1); + strncpy(ttt,buffer,BUFF_LEN+1); + memset(buffer,'\0',BUFF_LEN); + strncpy(buffer,cmd,strlen(cmd)); + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_t thread1; + + + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { // In the detached state, the thread resources are + // immediately freed when it terminates, but + perror(strerror(err)); // pthread_join(3) cannot be used to synchronize + exit(1); // on the thread termination. + } + + //int er; + struct DataBuff *buf=malloc(sizeof(struct DataBuff)); + buf->data = ttt; + buf->type = type; + if((err = pthread_create(&thread1,&attr,dataWriteInFile,(void *)buf))) { + + perror(strerror(err)); + exit(1); + } + + } else { + strcat(buffer,cmd); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dataWriteInFile(): */ +/* */ +/* ---------------------------------------------------------------------------- */ + +void* dataWriteInFile(void * temp_buff) { + + FILE *p,*f,*a,*d,*e; + + struct DataBuff *buf = (struct DataBuff*)temp_buff; + char *phasorFile = "PHASOR_MEASUREMENTS.txt"; + char *freqFile = "FREQUENCY_MEASUREMENTS.txt"; + char *analogFile = "ANALOG_MEASUREMENTS.txt"; + char *digitalFile = "DIGITAL_MEASUREMENTS.txt"; + char *frameDelay = "RECEIVED_FRAME_TIME.txt"; + + if(buf->type == 1) { + + p = fopen(phasorFile,"w"); + fprintf(p,buf->data); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + a = fopen(analogFile,"w"); + fprintf(a,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(a); + + d = fopen(digitalFile,"w"); + fprintf(d,digitalBuff); + memset(digitalBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 2) { + + f = fopen(freqFile,"w"); + fprintf(f,buf->data); + fclose(f); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + a = fopen(analogFile,"w"); + fprintf(a,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(a); + + d = fopen(digitalFile,"w"); + fprintf(d,digitalBuff); + memset(digitalBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 3) { + + a = fopen(analogFile,"w"); + fprintf(a,buf->data); + fclose(a); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + d = fopen(digitalFile,"w"); + fprintf(d,digitalBuff); + memset(digitalBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 4) { + + d = fopen(digitalFile,"w"); + fprintf(d,buf->data); + fclose(d); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + a = fopen(analogFile,"w"); + fprintf(d,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + + } else if(buf->type == 5) { + + d = fopen(digitalFile,"w"); + fprintf(d,buf->data); + fclose(d); + + p = fopen(phasorFile,"w"); + fprintf(p,phasorBuff); + memset(phasorBuff,'\0',BUFF_LEN); + fclose(p); + + f = fopen(freqFile,"w"); + fprintf(f,frequencyBuff); + memset(frequencyBuff,'\0',BUFF_LEN); + fclose(f); + + a = fopen(analogFile,"w"); + fprintf(d,analogBuff); + memset(analogBuff,'\0',BUFF_LEN); + fclose(d); + + e = fopen(frameDelay,"w"); + fprintf(e,delayBuff); + memset(delayBuff,'\0',BUFF_LEN); + fclose(e); + } + + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC PHASOR_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC FREQUENCY_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC ANALOG_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC DIGITAL_MEASUREMENTS.txt"); + system("mysqlimport --local --fields-terminated-by=\, --fields-enclosed-by=\\\" -uroot -proot iPDC RECEIVED_FRAME_TIME.txt"); + +// system("./upDateTable.sh"); + printf("wrote to database\n"); + + free((unsigned char*)temp_buff); + + pthread_exit(NULL); /* Exit the thread once the task is done. */ + +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/parser.h b/DBServer/parser.h new file mode 100755 index 0000000..ce1cc19 --- /dev/null +++ b/DBServer/parser.h @@ -0,0 +1,137 @@ +/* ----------------------------------------------------------------------------- + * parser.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#define MAXBUFLEN 2000 + + +/* ---------------------------------------------------------------- */ +/* Data Structure prototypes */ +/* ---------------------------------------------------------------- */ + +/* ---------------------------------------------------------------- */ +/* Configuartion Frame Data Structure */ +/* ---------------------------------------------------------------- */ + +struct cfg_frame { + + unsigned int framesize; + unsigned int idcode; + unsigned long int soc; + unsigned long int fracsec; + unsigned long int time_base; + unsigned int num_pmu; + struct for_each_pmu **pmu; + unsigned int data_rate; + struct cfg_frame *cfgnext; + +}*cfgfirst; + + +struct for_each_pmu{ + + unsigned char stn[17]; + unsigned int idcode; + char data_format[3]; + struct format *fmt; + unsigned int phnmr; + unsigned int annmr; + unsigned int dgnmr; + struct channel_names *cnext; + float **phunit; + float **anunit; + unsigned char **dgunit; + unsigned int fnom; + unsigned int cfg_cnt; +}; + +struct channel_names { + + unsigned char **phnames; + unsigned char **angnames; + unsigned char **phtypes; + unsigned char **antypes; + struct dgnames *first; +}; + +struct dgnames { + + unsigned char **dgn; // Stores 16 digital names for each word + struct dgnames *dg_next; +}; + +// This struct is added to help find out whether the measurements are floating/fixed, polar/rectangular . +struct format{ + + unsigned int freq; + unsigned int analog; + unsigned char phasor; + unsigned char polar; +}; + +struct DataBuff{ + + unsigned char *data; + unsigned int type; +}; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + + +void cfgparser(unsigned char []); + +void cfginsert(struct cfg_frame *); + +int dataparser(unsigned char data[]); + +char* hexTobin(char s); + +int check_statword(unsigned char stat[]); + +void remove_old_cfg(int idcode,unsigned char frame[]); + +unsigned int to_intconvertor(unsigned char array[]); + +unsigned int to_intconvertor1(unsigned char array[]); //Added by gopal -- to_intconvertor1 + +unsigned long int to_long_int_convertor(unsigned char * array); + +unsigned long int to_long_int_convertor1(unsigned char * array); //Added by gopal -- to_long_int_convertor1 + +float decode_ieee_single(const void *v); + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size); + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size); + +void* dataWriteInFile(void * temp_buff); + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/recreate.c b/DBServer/recreate.c new file mode 100755 index 0000000..97bde7c --- /dev/null +++ b/DBServer/recreate.c @@ -0,0 +1,645 @@ +/* ----------------------------------------------------------------------------- + * recreate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "recreate.h" + + +/* ---------------------------------------------------------------------*/ +/* Functions defined in recreate.c */ +/* ---------------------------------------------------------------------*/ + +/* 1. recreate_cfg_objects() */ +/* 2. void init_cfgparser() */ + +/* -------------------------------------------------------------------- */ + + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_cfg_objects(): */ +/* It re-creates Configuration Objects from file cfg.bin if the ./server */ +/* program is stopped abruptly. It internally calls init_cfgparser() */ +/* ---------------------------------------------------------------------------- */ + +void recreate_cfg_objects(){ + + /* ---------------------------------------------------------------- */ + /* Initialize Global Mutex Variable from global.h */ + /* ---------------------------------------------------------------- */ + + pthread_mutex_init(&mutex_file, NULL); + pthread_mutex_init(&mutex_cfg, NULL); + pthread_mutex_init(&mutex_MYSQL_CONN_ON_DATA, NULL); + pthread_mutex_init(&mutex_MYSQL_CONN_ON_CFG, NULL); + pthread_mutex_init(&mutex_phasor_buffer,NULL); + + BUFF_LEN = 25000; + phasorBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + frequencyBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + analogBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + digitalBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + delayBuff = malloc(BUFF_LEN*sizeof(unsigned char)); + + memset(phasorBuff,'\0',BUFF_LEN); + memset(frequencyBuff,'\0',BUFF_LEN); + memset(analogBuff,'\0',BUFF_LEN); + memset(digitalBuff,'\0',BUFF_LEN); + memset(delayBuff,'\0',BUFF_LEN); + + static const char filename[] = "cfg.bin"; + + FILE *file = fopen (filename,"rb"); + unsigned char *line,frame_len[2]; + unsigned int framesize; + unsigned long fileLen; + + if (file != NULL) { + + //Get file length + fseek(file, 0, SEEK_END); + fileLen = ftell(file); + fseek(file, 0, SEEK_SET); + printf("FILE LEN LEFT %ld\n",fileLen); + printf("Creating objects for entries in cfg.bin\n"); + + while (fileLen != 0) /* Till the EOF */{ + + fseek (file,2 ,SEEK_CUR); + fread(frame_len, sizeof(unsigned char),2, file); + fseek (file,-4 ,SEEK_CUR); + + framesize = to_intconvertor(frame_len); + line = malloc(framesize*sizeof(unsigned char)); + memset(line,'\0',sizeof(line)); + fread(line, sizeof(unsigned char),framesize,file); + init_cfgparser(line); + free(line); + fileLen -= framesize; + } + fclose (file); + + } else { + perror (filename); /* why didn't the file open? */ + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION init_cfgparser(): */ +/* It is called by recreate_cfg_object() to read the file `cfg.bin` */ +/* and create cfg objects in the memory */ +/* ---------------------------------------------------------------------------- */ + +void init_cfgparser(unsigned char st[]){ + + unsigned char *s; + int cfglen = 0; + int i,j,k,dgchannels, phtype, antype; + struct cfg_frame *cfg; + struct channel_names *cn; + unsigned long int l_phunit,l_anunit; + + unsigned char *sync,*frame_size,*idcode_h,*soc,*fracsec,*time_base,*num_pmu,*stn,*idcode_l,*format,*phnmr,*annmr,*dgnmr; + unsigned char *fnom,*cfg_cnt,*data_rate,*buf; + + sync = malloc(3*sizeof(unsigned char)); + frame_size = malloc(3*sizeof(unsigned char)); + idcode_h= malloc(3*sizeof(unsigned char)); + soc = malloc(5*sizeof(unsigned char)); + fracsec = malloc(5*sizeof(unsigned char)); + time_base = malloc(5*sizeof(unsigned char)); + num_pmu = malloc(3*sizeof(unsigned char)); + stn = malloc(17*sizeof(unsigned char)); + idcode_l = malloc(3*sizeof(unsigned char)); + format = malloc(5*sizeof(unsigned char)); + phnmr = malloc(3*sizeof(unsigned char)); + annmr = malloc(3*sizeof(unsigned char)); + dgnmr = malloc(3*sizeof(unsigned char)); + + fnom = malloc(3*sizeof(unsigned char)); + cfg_cnt = malloc(3*sizeof(unsigned char)); + data_rate = malloc(3*sizeof(unsigned char)); + buf = malloc(9*sizeof(unsigned char)); + + memset(sync,'\0',3); + memset(frame_size,'\0',3); + memset(idcode_h,'\0',3); + memset(soc,'\0',3); + memset(fracsec,'\0',5); + memset(time_base,'\0',5); + memset(num_pmu,'\0',3); + memset(stn,'\0',17); + memset(idcode_l,'\0',3); + memset(format,'\0',3); + memset(phnmr,'\0',3); + memset(annmr,'\0',3); + memset(dgnmr,'\0',3); + + memset(fnom,'\0',3); + memset(cfg_cnt ,'\0',3); + memset(data_rate,'\0',3); + memset(buf,'\0',9); + + + /******************** PARSING BEGINGS *******************/ + + pthread_mutex_lock(&mutex_file); + + cfg = malloc(sizeof(struct cfg_frame)); + if(!cfg) { + printf("No enough memory for cfg\n"); + } + + printf("Inside INIT cfgparser()\n"); + s = st; + + //Copy sync word to file + copy_cbyc (sync,s,2); + sync[2] = '\0'; + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc (frame_size,(unsigned char *)s,2); + frame_size[2]='\0'; + cfg->framesize = to_intconvertor(frame_size); + printf("FRAME SIZE %d\n",cfg->framesize); + s = s + 2; + cfglen += 2; + + //SEPARATE IDCODE + copy_cbyc (idcode_h,(unsigned char *)s,2); + idcode_h[2] = '\0'; + cfg->idcode = to_intconvertor(idcode_h); + printf("ID Code %d\n",cfg->idcode); + s = s + 2; + cfglen += 2; + + //SEPARATE SOC + copy_cbyc (soc,(unsigned char *)s,4); + soc[4] = '\0'; + sscanf((unsigned int *)soc,"%x", (unsigned int *)&cfg->soc); + printf("SOC %ld\n",cfg->soc); + s =s + 4; + cfglen += 4; + + //SEPARATE FRACSEC + copy_cbyc (fracsec,(unsigned char *)s,4); + fracsec[4] = '\0'; + cfg->fracsec = to_long_int_convertor(fracsec); + printf("FracSec %ld\n",cfg->fracsec); + s = s + 4; + cfglen += 4; + + //SEPARATE TIMEBASE + copy_cbyc (time_base,(unsigned char *)s,4); + time_base[4]='\0'; + cfg->time_base = to_long_int_convertor(time_base); + printf("Time Base %ld\n",cfg->time_base); + s = s + 4; + cfglen += 4; + + //SEPARATE PMU NUM + copy_cbyc (num_pmu,(unsigned char *)s,2); + num_pmu[2] = '\0'; + cfg->num_pmu = to_intconvertor(num_pmu); + printf("Number of PMU's %d\n",cfg->num_pmu); + s = s + 2; + cfglen += 2; + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(cfg->num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory pmu[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->num_pmu; i++) { + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jnum_pmu) { + + //SEPARATE STATION NAME + memset(cfg->pmu[j]->stn,'\0',17); + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16] = '\0'; + + printf("STATION NAME %s\n",cfg->pmu[j]->stn); + s = s + 16; + cfglen += 16; + + //SEPARATE IDCODE + copy_cbyc (idcode_l,(unsigned char *)s,2); + idcode_l[2]='\0'; + cfg->pmu[j]->idcode = to_intconvertor(idcode_l); + printf("ID Code %d\n",cfg->pmu[j]->idcode); + s = s + 2; + cfglen += 2; + + //SEPARATE DATA FORMAT + copy_cbyc ((unsigned char *)cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + s = s + 2; + cfglen += 2; + + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = 1; else cfg->pmu[j]->fmt->freq = 0; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = 1; else cfg->pmu[j]->fmt->analog = 0; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = 1; else cfg->pmu[j]->fmt->phasor = 0; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = 1; else cfg->pmu[j]->fmt->polar = 0; + + //SEPARATE PHASORS + copy_cbyc (phnmr,(unsigned char *)s,2); + phnmr[2]='\0'; + cfg->pmu[j]->phnmr = to_intconvertor(phnmr); + printf("Phasors %d\n",cfg->pmu[j]->phnmr); + s = s + 2; + cfglen += 2; + + //SEPARATE ANALOGS + copy_cbyc (annmr,(unsigned char *)s,2); + annmr[2]='\0'; + cfg->pmu[j]->annmr = to_intconvertor(annmr); + printf("Analogs %d\n",cfg->pmu[j]->annmr); + s = s + 2; + cfglen += 2; + + //SEPARATE DIGITALS + copy_cbyc (dgnmr,(unsigned char *)s,2); + dgnmr[2]='\0'; + cfg->pmu[j]->dgnmr = to_intconvertor(dgnmr); + printf("Digitals %d\n",cfg->pmu[j]->dgnmr); + s = s + 2; + cfglen += 2; + + cn = malloc(sizeof(struct channel_names)); + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(cfg->pmu[j]->phnmr != 0){ + cn->phtypes = malloc((cfg->pmu[j]->phnmr) * sizeof(unsigned char*)); + cn->phnames = malloc((cfg->pmu[j]->phnmr) * sizeof(char*)); + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + + cn->phnames[i] = malloc(17*sizeof(char)); + memset(cn->phnames[i],'\0',17); + cn->phtypes[i] = malloc(2*sizeof(unsigned char)); + memset(cn->phtypes[i],'\0',2); + + } + + cfg->pmu[j]->phunit = malloc(cfg->pmu[j]->phnmr*sizeof(float*)); + if(!cfg->pmu[j]->phunit) { + printf("Not enough memory cfg.pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->phnmr; i++) { + cfg->pmu[j]->phunit[i] = malloc(sizeof(float)); + } + + + i = 0;//Index for PHNAMES + while(ipmu[j]->phnmr){ + + copy_cbyc (cn->phnames[i],(unsigned char *)s,16); + cn->phnames[i][16] = '\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + cfglen += 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(cfg->pmu[j]->annmr != 0){ + cn->antypes = malloc((cfg->pmu[j]->annmr)*sizeof(unsigned char*)); + cn->angnames = malloc((cfg->pmu[j]->annmr)*sizeof(char*)); + if(!cn->angnames) { + + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + + cn->angnames[i] = malloc(17*sizeof(char)); + memset(cn->angnames[i],'\0',17); + cn->antypes[i] = malloc(5*sizeof(unsigned char)); + memset(cn->antypes[i],'\0',5); + } + + cfg->pmu[j]->anunit = malloc(cfg->pmu[j]->annmr*sizeof(float*)); + if(!cfg->pmu[j]->anunit) { + printf("Not enough memory cfg.pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->annmr; i++) { + cfg->pmu[j]->anunit[i] = malloc(sizeof(float)); + } + + i = 0;//Index for ANGNAMES + + while(ipmu[j]->annmr){ + copy_cbyc (cn->angnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s = s + 16; + cfglen += 16; + i++; + } + } + + + if(cfg->pmu[j]->dgnmr != 0){ + + cfg->pmu[j]->dgunit = malloc(cfg->pmu[j]->dgnmr*sizeof(char*)); + if(!cfg->pmu[j]->dgunit) { + + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < cfg->pmu[j]->dgnmr; i++) { + + cfg->pmu[j]->dgunit[i] = malloc(5); + } + } + + int di; //Index for number of dgwords + struct dgnames *q; + i = 0; + + while(i < cfg->pmu[j]->dgnmr) { + + struct dgnames *temp1 = malloc(sizeof(struct dgnames)); + temp1->dgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (di = 0; di < 16; di++) { + + temp1->dgn[di] = malloc(17*sizeof(unsigned char)); + + } + + temp1->dg_next = NULL; + + for(dgchannels = 0;dgchannels < 16;dgchannels++){ + + memset(temp1->dgn[dgchannels],'\0',16); + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16] = '\0'; + s += 16; + cfglen += 16; + k = 0; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + cn->first = q = temp1; + + } else { + + while(q->dg_next!=NULL){ + q = q->dg_next; + } + q->dg_next = temp1; + } + + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(cfg->pmu[j]->phnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->phnmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + cfglen += 1; + phtype = to_intconvertor1(buf); + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + cfglen += 3; + l_phunit = to_long_int_convertor1(buf); + + if (phtype == 0) + { + cfg->pmu[j]->cnext->phtypes[i] = "V"; + + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else if (phtype == 1) + { + cfg->pmu[j]->cnext->phtypes[i] = "I"; + + if (cfg->pmu[j]->fmt->phasor == 0) + { + *cfg->pmu[j]->phunit[i] = l_phunit * 1e-5; + } + else + { + *cfg->pmu[j]->phunit[i] = 1; + } + } + else + { + perror("Invalid first byte in PHUNIT - probably error in PMU"); + } + + printf("Phasor Factor %d = %f\n",i,*cfg->pmu[j]->phunit[i]); + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(cfg->pmu[j]->annmr != 0){ + + i=0; + while(ipmu[j]->annmr){ //Separate the Phasor conversion factors + + memset(buf,'\0',9); + copy_cbyc (buf,(unsigned char *)s,1); + buf[1] = '\0'; + s = s + 1; + cfglen += 1; + + antype = to_intconvertor1(buf); + switch(antype) + { + case 0 : cfg->pmu[j]->cnext->antypes[i] = "POW"; + break; + case 1 : cfg->pmu[j]->cnext->antypes[i] = "RMS"; + break; + case 2 : cfg->pmu[j]->cnext->antypes[i] = "PEAK"; + break; + default: perror("Invalid first byte in ANUNIT?"); + break; + } + copy_cbyc (buf,(unsigned char *)s,3); + buf[3] = '\0'; + s = s + 3; + cfglen += 3; + l_anunit = to_long_int_convertor1(buf); + + if (cfg->pmu[j]->fmt->analog == 0) + { + *cfg->pmu[j]->anunit[i] = l_anunit * 1e-5; // Assumed factor of 1e5 in iPDC + } + else + { + *cfg->pmu[j]->anunit[i] = 1; + } + + printf("Analog Factor %d = %f\n",i,*cfg->pmu[j]->anunit[i]); + i++; + } + + } // if for ANALOG FActtors ends + + ///INCOMPLETE + if(cfg->pmu[j]->dgnmr != 0){ + + i = 0; + while(i < cfg->pmu[j]->dgnmr ){ //Separate the Phasor conversion factors + + copy_cbyc(cfg->pmu[j]->dgunit[i],s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + printf("DGWORD %s\n",cfg->pmu[j]->dgunit[i]); + s += 4; + cfglen += 4; + i++; + } + } //if for Digital Words FActtors ends + + copy_cbyc (fnom,(unsigned char *)s,2); + fnom[2]='\0'; + cfg->pmu[j]->fnom = to_intconvertor(fnom); + printf("FREQUENCY %d\n",cfg->pmu[j]->fnom); + s = s + 2; + cfglen += 2; + + copy_cbyc (cfg_cnt,(unsigned char *)s,2); + cfg_cnt[2] = '\0'; + cfg->pmu[j]->cfg_cnt = to_intconvertor(cfg_cnt); + printf("CFG CHANGE COUNT %d\n",cfg->pmu[j]->cfg_cnt); + s = s + 2; + cfglen += 2; + j++; + }//While for PMU number ends + + copy_cbyc (data_rate,(unsigned char *)s,2); + data_rate[2] = '\0'; + cfg->data_rate = to_intconvertor(data_rate); + printf("Data Rate %d\n",cfg->data_rate); + s += 2; + cfglen += 2; + cfg->cfgnext = NULL; + + // Adjust the configuration object pointers + // Lock the mutex_cfg + pthread_mutex_lock(&mutex_cfg); + + if (cfgfirst == NULL) { // Main if + + cfgfirst = cfg; + + } else { + + struct cfg_frame *temp_cfg = cfgfirst; + + //Check if the configuration frame already exists + while(temp_cfg->cfgnext != NULL){ + + temp_cfg = temp_cfg->cfgnext; + + }// While ends + temp_cfg->cfgnext = cfg; + + } //Main if + + pthread_mutex_unlock(&mutex_cfg); + pthread_mutex_unlock(&mutex_file); + + free(sync); + free(frame_size); + free(idcode_h); + free(soc); + free(fracsec); + free(time_base); + free(num_pmu); + free(stn); + free(idcode_l); + free(format); + free(phnmr); + free(annmr); + free(dgnmr); + free(fnom); + free(cfg_cnt); + free(data_rate); + free(buf); +} + +/**************************************** End of File *******************************************************/ diff --git a/DBServer/recreate.h b/DBServer/recreate.h new file mode 100755 index 0000000..763cd99 --- /dev/null +++ b/DBServer/recreate.h @@ -0,0 +1,38 @@ +/* ----------------------------------------------------------------------------- + * recreate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void recreate_cfg_objects(); + +void init_cfgparser(unsigned char []); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/CfgFunction.c b/PMUSimulator/CfgFunction.c new file mode 100755 index 0000000..2e99b67 --- /dev/null +++ b/PMUSimulator/CfgFunction.c @@ -0,0 +1,1252 @@ +/* ----------------------------------------------------------------------------- + * CfgFunction.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "CfgFunction.h" +#include "function.h" +#include "PmuGui.h" +#include "ShearedMemoryStructure.h" + +#define max_data_rate 200 +#define MAX_STRING_SIZE 5000 + + +/*----------------------------------------------------------------------------------------*/ +/* Functions in CfgFunction.c */ +/*----------------------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------*/ +/* */ +/* 1. void header_frm_gen(int len); */ +/* 2. void reconfig_cfg_CC(); */ +/* 3. int create_cfg(); */ +/* 4. void show_pmu_details (GtkWidget *widget, gpointer udata); */ +/* */ +/*--------------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ */ +/* global variables */ +/* ------------------------------------------------------------------ */ + +double t1; +int frmt, fdf, af, pf, pn, phnmr, annmr, dgnmr, num_pmu = 1; +int cfg2_frm_size, data_frm_size = 18, data_rate, cfgcnt = 0; +int i, j, n, pmu_id, indx = 0, global_data_frm_size=0, hdrFrmSize=0; +long int soc, fracsec = 0; +long int phunit = 915527, anunit = 1, digunit = 0; + +const long int TB = 16777215; // roundf(powf(2,24) - 1); + +char temp_5[16]; +unsigned char temp[2], temp_1[4], temp_6[16]; +unsigned char cfg2_frm[MAX_STRING_SIZE]; +unsigned char header[MAX_STRING_SIZE]; + +struct timeval tim; +uint16_t chk; + + +/* ------------------------------------------------------------------------*/ +/* FUNCTION header_frm_gen(int len) */ +/* It generates the Header Frame from user given information about PMU and */ +/* store in a PMU Setup File. */ +/* ------------------------------------------------------------------------*/ + +void header_frm_gen(int len) +{ + /* local variables */ + int i, indx = 0; + FILE *fp1; + + memset(header, '\0', sizeof(header)); + + /* Insert the fields in Header Frame: sync word */ + header[indx++] = 0xAA; + header[indx++] = 0x001; + + /* Insert frame size in Header Frame */ + i2c(0, temp); + B_copy(header, temp, indx, 2); + indx = indx + 2; + + /* Insert user given PMU ID in Header Frame */ + i2c(pmu_id, temp); + B_copy(header, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in Header Frame */ + //time_t tm = time(NULL); + gettimeofday(&tim, NULL); + soc = (long) tim.tv_sec; + li2c(soc, temp_1); + B_copy(header, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the time quality fields & fraction of second value in Header Frame */ + //gettimeofday(&tim, NULL); + //t1=tim.tv_sec+(tim.tv_usec/1000000.0); + //fracsec = (t1-soc)*TB; + fracsec = (long) (tim.tv_usec*TB/1e6); + li2c(fracsec, temp_1); + B_copy(header, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the PMU Information given by user in Header Frame */ + for (i = 0; i < len; i++) + { + header[indx+i] = hdr_frame[i]; + } + indx = indx + i; + + /* Calculation & insert the checksum VALUE of Header frame (up to now) */ + chk = compute_CRC(header,indx); + header[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte */ + header[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte */ + + /* Insert frame size in Header Frame */ + header[2] = indx>>8;; + header[3] = indx; + + /* Open the PMU Setup File */ + fp1 = fopen(pmuFilePath,"ab"); + + if (fp1 != NULL) + { + hdrFrmSize = indx; + + char buff[15]; + sprintf(buff, "%d", indx); + + /* Write the size of Header Frame & then Header Frame into file */ + fputs("HdrFrame 1 ", fp1); + fputs(buff, fp1); + + fwrite(header, sizeof(unsigned char), indx, fp1); + fputc('\n', fp1); + + fclose(fp1); + + printf("\n-> Size of Header frame is %d Bytes.", indx); + validation_result (" Headre Frame successfully generated."); + } +}; /* end of header_frm_gen() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION reconfig_cfg_CC() */ +/* This function allows user to easy modify the existing Configuration Frame. */ +/* In terms of modification user can add new phasor channels or remove. */ +/* It also provide the option for change Data Rate. Finally replace the new */ +/* Configuration frame with old CFG in PMU Setup File and gives signal to PMU */ +/* serverchange to change the appropriate bit of STAT Word while sending */ +/* Data Frames to connected PDC. */ +/* ---------------------------------------------------------------------------- */ + +void reconfig_cfg_CC() +{ + /* local Variables*/ + unsigned char stn[16]; + int old_data_rate, indx=2; + int j, global_frmt, tmp_k; + FILE *fp1; + + /* Get the Station name from CFG FRM */ + memset(stn, '\0', 16); + strncpy((char *)stn, cfg_info->cfg_STNname, 16); + + /* Get the FORMAT word from CFG FRM */ + global_frmt = frmt; + + /* Ask user's choice what type of modification he wants? */ + if(new_cfg_info->add_remove_choice == 1) /* Add more Phasor/Analog channels in existing CFG as per user's wish */ + { + phnmr = cfg_info->cfg_phnmr_val + new_cfg_info->new_cfg_phnmr_val; + annmr = cfg_info->cfg_annmr_val + new_cfg_info->new_cfg_annmr_val; + } + else if(new_cfg_info->add_remove_choice == 2) /* Remove Phasor/Analog channels from existing CFG as per user's wish */ + { + phnmr = cfg_info->cfg_phnmr_val - new_cfg_info->new_cfg_phnmr_val; + annmr = cfg_info->cfg_annmr_val - new_cfg_info->new_cfg_annmr_val; + } + + /* Calculate the size of new CFG Frame */ + cfg2_frm_size = 0; + cfg2_frm_size = 54 + (16*phnmr) + (16*annmr) + (256*dgnmr) + (4*phnmr) + (4*annmr) + (4*dgnmr); + + /* Calculate the corresponding data frame size */ + global_data_frm_size = data_frm_size; + data_frm_size = 0; + data_frm_size = 18; + + /* Calculate 4/8 bytes for each PHNMR */ + if (cfg_info->cfg_pf == 0) + { + data_frm_size = data_frm_size + (4*phnmr); + } + else + { + data_frm_size = data_frm_size + (8*phnmr); + } + + /* Calculate 2/4 bytes for each ANNMR */ + if (cfg_info->cfg_af == 0) + { + data_frm_size = data_frm_size + (2*annmr); + } + else + { + data_frm_size = data_frm_size + (4*annmr); + } + + /* Calculate 2/4 bytes for both (FREQ + DFREQ) */ + if (cfg_info->cfg_fdf == 0) + { + data_frm_size = data_frm_size + 4; + } + else + { + data_frm_size = data_frm_size + 8; + } + + /* Calculate 2 bytes for each DGNMR */ + data_frm_size = data_frm_size + (2*dgnmr); + printf("\nCFG = %d, Data Frame = %d\n", cfg2_frm_size, data_frm_size); + + /* Insert the fields in new CFG Frame: sync word */ + memset(cfg2_frm,'\0',sizeof(cfg2_frm)); + indx = 0; + cfg2_frm[indx++] = 0xAA; + cfg2_frm[indx++] = 0x31; + + /* Insert frame size in new CFG Frame */ + i2c(cfg2_frm_size, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert user given PMU ID in new CFG Frame */ + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in new CFG Frame */ + soc = 0; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the time quality fields & fraction of second value in new CFG Frame, here it is static "00000000" */ + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert Time Base for calculating fraction of second in new CFG Frame, here it is static 1000000μs */ + li2c(TB, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert number of PMU in new CFG Frame: static "0001" */ + i2c(num_pmu, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert the station name or PMU name in new CFG Frame */ + B_copy(cfg2_frm, stn, indx, 16); + indx = indx + 16; + + /* Insert again pmu id in new CFG Frame */ + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert format word in new CFG Frame */ + i2c(global_frmt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of phasor or PHNMR in new CFG Frame */ + i2c(phnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of analog or ANNMR in new CFG Frame */ + i2c(annmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of Digital status word or DGNMR in new CFG Frame */ + i2c(dgnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert NEW Phasor channel Names (if any) in new CFG frame */ + if (new_cfg_info->add_remove_choice == 1) + { + /* First Insert old Phasor channels in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, cfg_info->cfg_phnmr_val*16); + indx = indx + (cfg_info->cfg_phnmr_val*16); + + if (new_cfg_info->new_cfg_phnmr_val > 0) + { + /* Insert New Phasor channels (if any) in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)new_cfg_info->new_cfg_phasor_channels, indx, (new_cfg_info->new_cfg_phnmr_val*16)); + indx = indx + (new_cfg_info->new_cfg_phnmr_val*16); + free(new_cfg_info->new_cfg_phasor_channels); + } + cfg_info->cfg_phnmr_val = cfg_info->cfg_phnmr_val + new_cfg_info->new_cfg_phnmr_val; + + /* First Insert old Analog channels in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, cfg_info->cfg_annmr_val*16); + indx = indx + (cfg_info->cfg_annmr_val*16); + if (new_cfg_info->new_cfg_annmr_val > 0) + { + /* Insert New Analog channels (if any) in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)new_cfg_info->new_cfg_analog_channels, indx, (new_cfg_info->new_cfg_annmr_val*16)); + indx = indx + (new_cfg_info->new_cfg_annmr_val*16); + free(new_cfg_info->new_cfg_analog_channels); + } + cfg_info->cfg_annmr_val = cfg_info->cfg_annmr_val + new_cfg_info->new_cfg_annmr_val; + } + + /* Remove channel Names (from availables) from new CFG frame */ + else if (new_cfg_info->add_remove_choice == 2) + { + /* Remove Phasor channels (if any) in new CFG frame */ + cfg_info->cfg_phnmr_val = cfg_info->cfg_phnmr_val - new_cfg_info->new_cfg_phnmr_val; + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, cfg_info->cfg_phnmr_val*16); + indx = indx + (cfg_info->cfg_phnmr_val*16); + + /* Remove Analog channels (if any) in new CFG frame */ + cfg_info->cfg_annmr_val = cfg_info->cfg_annmr_val - new_cfg_info->new_cfg_annmr_val; + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, cfg_info->cfg_annmr_val*16); + indx = indx + (cfg_info->cfg_annmr_val*16); + } + + /* Insert Digital channel Names in new CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_digital_channels, indx, (cfg_info->cfg_dgnmr_val*256)); + indx = indx + (cfg_info->cfg_dgnmr_val*256); + + /* Insert FACTOR VALUES for Phasor, Analog and Digital in new CFG frame */ + for(j=0, tmp_k=0; jcfg_phnmr_val; j++) /* FACTOR VALUES for Phasor */ + { + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + cfg2_frm[indx++] = phunit_final_val[tmp_k++]; + } + for(j=0, tmp_k=0; jcfg_annmr_val; j++) /* FACTOR VALUES for Phasor */ + { + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + cfg2_frm[indx++] = anunit_final_val[tmp_k++]; + } + + for(j=0; jcfg_dgnmr_val; j++) /* FACTOR VALUES for Digital */ + { + li2c(digunit, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + } + + /* Insert normal frequency or fnom VALUE in new CFG frame */ + i2c(cfg_info->cfg_fnom, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Data rate change? option for user */ + old_data_rate = data_rate; + if (new_cfg_info->data_rate_choice == 1) + { + data_rate = new_cfg_info->new_data_rate; + cfg_info->cfg_dataRate = new_cfg_info->new_data_rate; + printf("\n-> New Data Rate = %d\n", data_rate); + } + + /* Insert configuration count or cfgcnt VALUE in new CFG frame is any of addition or removal of channel happened??? */ + if ((global_data_frm_size != data_frm_size) || (old_data_rate != data_rate)) + { + cfgcnt = cfgcnt + 1; + printf("\n-> CFG COUNT incremented = %d\n", cfgcnt); + i2c(cfgcnt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + } + else + { + i2c(cfgcnt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + } + + /* Insert Data Rate VALUE in new CFG frame */ + i2c(data_rate, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in new CFG Frame */ + gettimeofday(&tim, NULL); + soc = (long) tim.tv_sec; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, 6, 4); + + /* Insert the time quality fields & fraction of second value in new CFG Frame */ + //gettimeofday(&tim, NULL); + //t1=tim.tv_sec+(tim.tv_usec/1000000.0); + //fracsec = (t1-soc)*TB; + fracsec = (long) (tim.tv_usec*TB/1e6); + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, 10, 4); + + /* Calculation & insert the checksum VALUE of new CFG frame (up to now) */ + chk = compute_CRC(cfg2_frm,indx); + cfg2_frm[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte */ + cfg2_frm[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte */ + + /* Open the PMU Setup File and replace new CFG frame with old CFG if and only if + when last two calculated data frame are not equal or data rate changed */ + if ((global_data_frm_size != data_frm_size) || (old_data_rate != data_rate)) + { + /* Delete the old PMU Setup File and create new PMU Setup File with new CFG frame */ + if (remove(pmuFilePath) == -1) + perror("Error in deleting a file"); + + fp1 = fopen (pmuFilePath,"wb"); + + char buff[50]; + + sprintf(buff, "%d", PMU_uport); + fputs(buff, fp1); + fputc('\n', fp1); + + sprintf(buff, "%d", PMU_tport); + fputs(buff, fp1); + fputc('\n', fp1); + + fputs("CFG 1 ", fp1); + sprintf(buff, "%d", indx); + fputs(buff, fp1); + fputc('\n', fp1); + + fwrite(cfg2_frm, sizeof(unsigned char),indx,fp1); + fputc('\n', fp1); + + if(hdrFrmSize > 0) + { + fputs("HDR 1 ", fp1); + sprintf(buff, "%d", hdrFrmSize); + fputs(buff, fp1); + fputc('\n', fp1); + + fwrite(header, sizeof(unsigned char),hdrFrmSize,fp1); + fputc('\n', fp1); + } + else + { + fputs("HDR 0 0", fp1); + fputc('\n', fp1); + } + + fclose (fp1); + free(new_cfg_info); + validation_result ("Modification in Configuration frame has been successfully updated."); + + /* Give signal to PMU Server for change in configuration frame */ + ShmPTR->cfg_bit_change_info = 1; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR2); + printf("Configuration frame modification signal sent to PMU Server.\n"); + + /* Set raw data selection as configuration has been changed */ + strcpy(ShmPTR->filePath, "nil"); + ShmPTR->dataFileVar = 0; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR1); + printf("Set Raw Measurements in Data Frames because configuration of PMU has been changed.\n"); + + } + else /* If CFG is not modified */ + { + validation_result ("No modification has been done in Configuration frame."); + } + + printf("\n-> New configuration frame has been generated of size %d Bytes.\nAnd the new data frame size would be %d Bytes.\n\n[", cfg2_frm_size, data_frm_size); + +} /* end of reconfig_cfg_CC() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_cfg() */ +/* It generate the Configuration Frame as per user entered information. */ +/* It write in the file PMU Setup File. */ +/* It will also reload the saved PMU Setup File give by user. */ +/* ---------------------------------------------------------------------------- */ + +int create_cfg() +{ + /* local Variables*/ + int j, a, x1, tmp_k; + int tempi, indx = 0; + char stn[17],*rline = NULL, *d1; + unsigned char cline[MAX_STRING_SIZE]; + + size_t len = 0; + ssize_t read; + FILE *fp1; + + /* Open the saved PMU Setup File and read the CFG frame if any? */ + fp1 = fopen (pmuFilePath,"rb"); + + if (fp1 != NULL) + { + tempi = 1; + while(tempi < 4) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + tempi = atoi(d1); + + if (tempi == 1) + { + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + /* Copy the full Configuration Frame into 'cline' array */ + memset(cline,'\0',sizeof(cline)); + fread(cline, sizeof(unsigned char), tempi, fp1); + fclose(fp1); + + /* Allocate the memory for ConfigurationFrame object */ + cfg_info = malloc(sizeof(struct ConfigurationFrame)); + cfg_info->cfg_STNname = malloc(17); + + /* Get the CFG size & store globaly */ + temp[0] = cline[2]; + temp[1] = cline[3]; + cfg2_frm_size = c2i(temp); + + /* Get the PMU ID from CFG FRM & store globally */ + temp[0] = cline[4]; + temp[1] = cline[5]; + pmu_id = c2i(temp); + cfg_info->cfg_pmuID = pmu_id; + + /* Get the PMU ID from CFG FRM & store globally */ + temp_1[0] = cline[14]; + temp_1[1] = cline[15]; + temp_1[2] = cline[16]; + temp_1[3] = cline[17]; + //TB = c2li(temp_1); + + /* Get the Station name from CFG FRM & store globally */ + for(a=0; a<16; a++) + { + stn[a] = cline[20+a]; + } + stn[16] = '\0'; + strcpy(cfg_info->cfg_STNname, stn); + + /* Get the FORMAT word from CFG FRM */ + temp[0] = cline[38]; + temp[1] = cline[39]; + frmt = c2i(temp); + + /* Initialize the frmt bits as in his appropriate global variable */ + if(frmt == 15) + { + fdf=1, af=1, pf=1, pn=1; + } + else if(frmt == 14) + { + fdf=1, af=1, pf=1, pn=0; + } + else if(frmt == 13) + { + fdf=1, af=1, pf=0, pn=1; + } + else if(frmt == 12) + { + fdf=1, af=1, pf=0, pn=0; + } + else if(frmt == 11) + { + fdf=1, af=0, pf=1, pn=1; + } + else if(frmt == 10) + { + fdf=1, af=0, pf=1, pn=0; + } + else if(frmt == 9) + { + fdf=1, af=0, pf=0, pn=1; + } + else if(frmt == 8) + { + fdf=1, af=0, pf=0, pn=0; + } + else if(frmt == 7) + { + fdf=0, af=1, pf=1, pn=1; + } + else if(frmt == 6) + { + fdf=0, af=1, pf=1, pn=0; + } + else if(frmt == 5) + { + fdf=0, af=1, pf=0, pn=1; + } + else if(frmt == 4) + { + fdf=0, af=1, pf=0, pn=0; + } + else if(frmt == 3) + { + fdf=0, af=0, pf=1, pn=1; + } + else if(frmt == 2) + { + fdf=0, af=0, pf=1, pn=0; + } + else if(frmt == 1) + { + fdf=0, af=0, pf=0, pn=1; + } + else + { + fdf=0, af=0, pf=0, pn=0; + } + + /* Store FORMAT in global data structure */ + cfg_info->cfg_fdf = fdf; + cfg_info->cfg_af = af; + cfg_info->cfg_pf = pf; + cfg_info->cfg_pn = pn; + + /* Get the PHNMR from CFG FRM & store globally */ + temp[0] = cline[40]; + temp[1] = cline[41]; + phnmr = c2i(temp); + cfg_info->cfg_phnmr_val = phnmr; + + /* Get the ANNMR from CFG FRM & store in globally */ + temp[0] = cline[42]; + temp[1] = cline[43]; + annmr = c2i(temp); + cfg_info->cfg_annmr_val = annmr; + + /* Get the DGNMR from CFG FRM & store globally */ + temp[0] = cline[44]; + temp[1] = cline[45]; + dgnmr = c2i(temp); + cfg_info->cfg_dgnmr_val = dgnmr; + + /* To escape the some of fields in cfg frame */ + indx = 46 + (16*phnmr) + (16*annmr) + (256*dgnmr) + (4*phnmr) + (4*annmr) + (4*dgnmr) + 2; + temp[0] = cline[indx++]; + temp[1] = cline[indx++]; + cfgcnt = c2i(temp); + + /* Get the Data Rate from CFG FRM & store globally */ + temp[0] = cline[indx++]; + temp[1] = cline[indx++]; + data_rate = c2i(temp); + cfg_info->cfg_dataRate = data_rate; + + /* Seprate the Phasor Channels from CFG FRM & store globally */ + cfg_info->cfg_phasor_channels = (char *)malloc((phnmr*16) * sizeof(char)); + + for(x1=0, indx=46; x1< (phnmr*16); x1++,indx++) + { + cfg_info->cfg_phasor_channels[x1] = cline[indx]; + } + + /* Seprate the Analog Channels from CFG FRM & store globally */ + cfg_info->cfg_analog_channels = (char *)malloc((annmr*16) * sizeof(char)); + + for(x1=0, indx; x1< (annmr*16); x1++,indx++) + { + cfg_info->cfg_analog_channels[x1] = cline[indx]; + } + + /* Seprate the Digital Channels from CFG FRM & store globally */ + cfg_info->cfg_digital_channels = (char *)malloc((dgnmr*16*16) * sizeof(char)); + + for(x1=0, indx; x1< (dgnmr*16*16); x1++,indx++) + { + cfg_info->cfg_digital_channels[x1] = cline[indx]; + } + + /* Insert FACTOR VALUES for Phasor, Analog and Digital in new CFG frame */ + for(j=0, tmp_k=0; jcfg_phnmr_val; j++)/* FACTOR VALUES for Phasor */ + { + phunit_final_val[tmp_k++] = cline[indx++]; + phunit_final_val[tmp_k++] = cline[indx++]; + phunit_final_val[tmp_k++] = cline[indx++]; + phunit_final_val[tmp_k++] = cline[indx++]; + } + for(j=0, tmp_k=0; jcfg_annmr_val; j++)/* FACTOR VALUES for Analog */ + { + anunit_final_val[tmp_k++] = cline[indx++]; + anunit_final_val[tmp_k++] = cline[indx++]; + anunit_final_val[tmp_k++] = cline[indx++]; + anunit_final_val[tmp_k++] = cline[indx++]; + } + } + } + } + else /* At the time of creating new PMU Setup File */ + { + /* Store FORMAT bits from global data structure */ + fdf = cfg_info->cfg_fdf; + af = cfg_info->cfg_af; + pf = cfg_info->cfg_pf; + pn = cfg_info->cfg_pn; + + if(fdf==1 && af==1 && pf==1 && pn==1) + { + frmt = 15; + } + else if(fdf==1 && af==1 && pf==1 && pn==0) + { + frmt = 14; + } + else if(fdf==1 && af==1 && pf==0 && pn==1) + { + frmt = 13; + } + else if(fdf==1 && af==1 && pf==0 && pn==0) + { + frmt = 12; + } + else if(fdf==1 && af==0 && pf==1 && pn==1) + { + frmt = 11; + } + else if(fdf==1 && af==0 && pf==1 && pn==0) + { + frmt = 10; + } + else if(fdf==1 && af==0 && pf==0 && pn==1) + { + frmt = 9; + } + else if(fdf==1 && af==0 && pf==0 && pn==0) + { + frmt = 8; + } + else if(fdf==0 && af==1 && pf==1 && pn==1) + { + frmt = 7; + } + else if(fdf==0 && af==1 && pf==1 && pn==0) + { + frmt = 6; + } + else if(fdf==0 && af==1 && pf==0 && pn==1) + { + frmt = 5; + } + else if(fdf==0 && af==1 && pf==0 && pn==0) + { + frmt = 4; + } + else if(fdf==0 && af==0 && pf==1 && pn==1) + { + frmt = 3; + } + else if(fdf==0 && af==0 && pf==1 && pn==0) + { + frmt = 2; + } + else if(fdf==0 && af==0 && pf==0 && pn==1) + { + frmt = 1; + } + else + { + frmt = 0; + } + + /* Accept Number of Phasor values in PHNMR */ + phnmr = cfg_info->cfg_phnmr_val; + + /* Accept Number of Phasor values in ANNMR */ + annmr = cfg_info->cfg_annmr_val; + + /* Accept Number of Phasor values in DGNMR */ + dgnmr = cfg_info->cfg_dgnmr_val; + + /* Calculate the total size of CFG Frame */ + cfg2_frm_size = 54 + (16*phnmr) + (16*annmr) + (4*phnmr) + (4*annmr) + (4*dgnmr) + (256*dgnmr); + + /* Calculate 4/8 bytes for each PHNMR & store globally */ + if (pf == 0) + { + data_frm_size = data_frm_size + (4*phnmr); + } + else + { + data_frm_size = data_frm_size + (8*phnmr); + } + + /* Calculate 2/4 bytes for each ANNMR & store globally */ + if (af == 0) + { + data_frm_size = data_frm_size + (2*annmr); + } + else + { + data_frm_size = data_frm_size + (4*annmr); + } + + /* Calculate 2/4 bytes for both (FREQ + DFREQ) & store globally */ + if (fdf == 0) + { + data_frm_size = data_frm_size + 4; + } + else + { + data_frm_size = data_frm_size + 8; + } + + /* Calculate 2 bytes for each DGNMR & store globally */ + data_frm_size = data_frm_size + (2*dgnmr); + + /* Insert the fields in CFG Frame: sync word */ + memset(cfg2_frm,'\0',sizeof(cfg2_frm)); + cfg2_frm[indx++] = 0xAA; + cfg2_frm[indx++] = 0x31; + + /* Insert frame size in CFG Frame */ + i2c(cfg2_frm_size, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert user given PMU ID in CFG Frame */ + pmu_id = cfg_info->cfg_pmuID; + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert SOC value in CFG Frame */ + soc = 0; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert the time quality fields & fraction of second value in CFG Frame, right now it is '00000000' */ + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert Time Base for calculating fraction of second in CFG Frame, here it is static 1000000μs */ + li2c(TB, temp_1); + B_copy(cfg2_frm, temp_1, indx, 4); + indx = indx + 4; + + /* Insert number of PMU in CFG Frame: Static "0001" */ + i2c(num_pmu, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert the station name or PMU name in CFG Frame */ + strncpy(temp_5, (const char *)cfg_info->cfg_STNname, 16); + B_copy(cfg2_frm, (unsigned char *)temp_5, indx, 16); + indx = indx + 16; + + /* Again insert pmu id in CFG Frame */ + i2c(pmu_id, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert format word in CFG Frame */ + i2c(frmt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of phasor or PHNMR in CFG Frame */ + i2c(phnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of analog or ANNMR in CFG Frame */ + i2c(annmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert number of Digital status word or DGNMR in CFG Frame */ + i2c(dgnmr, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* All channel names or CHNAM fields in CFG frame. */ + /* Insert phasor channel names in CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, 16*phnmr); + indx = indx + 16*phnmr; + + /* Insert Digital channel names in CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, 16*annmr); + indx = indx + 16*annmr; + + /* Insert Digital channel names in CFG frame */ + B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_digital_channels, indx, 16*16*dgnmr); + indx = indx + 16*16*dgnmr; + + /* Insert FACTOR VALUES for Phasor, Analog and Digital in CFG frame */ + for(j=0, tmp_k=0; jcfg_fnom, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert configuration count or cfgcnt VALUE in CFG frame */ + i2c(cfgcnt, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert Data Rate in CFG frame */ + data_rate = cfg_info->cfg_dataRate; + i2c(data_rate, temp); + B_copy(cfg2_frm, temp, indx, 2); + indx = indx + 2; + + /* Insert current SOC value in CFG Frame */ + gettimeofday(&tim, NULL); + soc = (long) tim.tv_sec; + li2c(soc, temp_1); + B_copy(cfg2_frm, temp_1, 6, 4); + + /* Insert the time quality fields & fraction of second value in CFG Frame */ + // gettimeofday(&tim, NULL); + // t1=tim.tv_sec+(tim.tv_usec/1000000.0); + // fracsec = (t1-soc)*TB; + fracsec = (long) (tim.tv_usec*TB/1e6); + li2c(fracsec, temp_1); + B_copy(cfg2_frm, temp_1, 10, 4); + + /* Calculation & insert the checksum VALUE of new CFG frame (up to now) */ + chk = compute_CRC(cfg2_frm,indx); + + cfg2_frm[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte */ + cfg2_frm[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte */ + + char buff[50]; + + /* Create a new PMU Setup File and save the info with 'pmuPMU-ID.txt' name */ + memset(pmuFilePath, '\0', 200); + strcpy(pmuFilePath, pmuFolderPath); + strcat(pmuFilePath, "/"); + strcat(pmuFilePath, "pmu"); + sprintf(buff, "%d", pmu_id); + strcat(pmuFilePath, buff); + strcat(pmuFilePath, ".bin"); + pmuFilePath[strlen(pmuFilePath)] = '\0'; + + fp1 = fopen (pmuFilePath,"wb"); + + sprintf(buff, "%d", PMU_uport); + fputs(buff, fp1); + fputc('\n', fp1); + + sprintf(buff, "%d", PMU_tport); + fputs(buff, fp1); + fputc('\n', fp1); + + fputs("CFG 1 ", fp1); + sprintf(buff, "%d", indx); + fputs(buff, fp1); + fputc('\n', fp1); + + fwrite(cfg2_frm, sizeof(unsigned char),indx,fp1); + fputc('\n', fp1); + + fclose (fp1); + + printf("\nCFG Frame size = %d-Bytes, ", cfg2_frm_size); + printf("& Data Frame size = %d-Bytes.\n", data_frm_size); + } + + /* Now send a signal for CFG file path to PMU Server process*/ + strcpy(ShmPTR->cfgPath, pmuFilePath); + ShmPTR->dataFileVar = 2; + + p1.pid = ShmPTR->pid; + kill(p1.pid, SIGUSR1); + printf("\nConfiguration file path has been sent to PMU Server through signal.\n"); + + return 0; +} /* end of function() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION show_pmu_details (GtkWidget *widget, gpointer udata) */ +/* It display the details of PMU Server and Configuartion details. */ +/* ---------------------------------------------------------------------------- */ + +void show_pmu_details (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + char tmpBuffer[30]; + GtkWidget *label, *table, *close_but; + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "PMU Properties"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a table of 14 by 2 squares. */ + table = gtk_table_new (16, 2, FALSE); + + /* Set the spacing to 35 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 5); + + /* Pack the table into the scrolled window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "OK" button to the bottom of the dialog */ + close_but = gtk_button_new_with_label ("OK"); + + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window */ + label = gtk_label_new (" "); + markup1 = g_markup_printf_escaped ("PMU Server Details"); + gtk_label_set_markup (GTK_LABEL (label), markup1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup1); + + label = gtk_label_new ("UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + /* We have the global variables to hold the port & protocol values */ + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",PMU_uport); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",PMU_tport); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window */ + label = gtk_label_new (" "); + markup1 = g_markup_printf_escaped ("PMU Configuration Details"); + gtk_label_set_markup (GTK_LABEL (label), markup1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 4, 5); + gtk_widget_show (label); + g_free (markup1); + + label = gtk_label_new ("PMU ID"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + label = gtk_label_new ("Station Name"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 6, 7); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Phasors"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Analog "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9); + gtk_widget_show (label); + + label = gtk_label_new ("Digital Status Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10); + gtk_widget_show (label); + + label = gtk_label_new ("Data Rate"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11); + gtk_widget_show (label); + + label = gtk_label_new ("Format Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12); + gtk_widget_show (label); + + label = gtk_label_new ("Configuration Count "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 12, 13); + gtk_widget_show (label); + + label = gtk_label_new ("CFG Frame Size"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 13, 14); + gtk_widget_show (label); + + /* Printing the appropriate values from CFG objects */ + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_pmuID); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + label = gtk_label_new (cfg_info->cfg_STNname); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 6, 7); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_phnmr_val); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 7, 8); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_annmr_val); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 8, 9); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_dgnmr_val); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 9, 10); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg_info->cfg_dataRate); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 10, 11); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",frmt); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 11, 12); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfgcnt); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 12, 13); + gtk_widget_show (label); + + memset(tmpBuffer,'\0',30); + sprintf(tmpBuffer,"%d",cfg2_frm_size); + label = gtk_label_new (tmpBuffer); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 13, 14); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Configuration and Server info of running PMU."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 15, 16); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for OK-button on dialog Window */ + g_signal_connect_swapped (close_but, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (close_but, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_but, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_but); + gtk_widget_show (close_but); + + /* Finally show the PMU Detailed window or new_window */ + gtk_widget_show (new_window); +}; + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/CfgFunction.h b/PMUSimulator/CfgFunction.h new file mode 100755 index 0000000..8563172 --- /dev/null +++ b/PMUSimulator/CfgFunction.h @@ -0,0 +1,91 @@ +/* ----------------------------------------------------------------------------- + * CfgFunction.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int PMU_uport; +int PMU_tport; +char *hdr_frame, *markup1; +unsigned char phunit_final_val[500]; +unsigned char anunit_final_val[500]; + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +struct ConfigurationFrame +{ + int cfg_pmuID; + int cfg_fdf; + int cfg_af; + int cfg_pf; + int cfg_pn; + int cfg_phnmr_val; + int cfg_annmr_val; + int cfg_dgnmr_val; + int cfg_fnom; + int cfg_dataRate; + char *cfg_STNname; + char *cfg_phasor_channels; + char *cfg_analog_channels; + char *cfg_digital_channels; +}; +struct ConfigurationFrame *cfg_info; + +struct ConfigurationChange +{ + int add_remove_choice; + int new_cfg_phnmr_val; + int new_cfg_annmr_val; + int data_rate_choice; + int new_data_rate; + char *new_cfg_phasor_channels; + char *new_cfg_analog_channels; +}; +struct ConfigurationChange *new_cfg_info; + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void header_frm_gen(int len); + +void reconfig_cfg_CC(); + +void show_pmu_details (GtkWidget *widget, gpointer udata); + +int create_cfg(); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/CfgGuiFunctions.c b/PMUSimulator/CfgGuiFunctions.c new file mode 100755 index 0000000..05d910d --- /dev/null +++ b/PMUSimulator/CfgGuiFunctions.c @@ -0,0 +1,2864 @@ +/* ----------------------------------------------------------------------------- + * CfgGuiFunctions.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include "PmuGui.h" +#include "CfgFunction.h" +#include "CfgGuiFunctions.h" +#include "ShearedMemoryStructure.h" + +#define PHUNIT_VOLTAGE (float)1000*100000/32768 +#define PHUNIT_CURRENT (float)100000/32768 +#define ANUNIT_EACH (float)100000/32768 + +/* -------------------------------------------------------------------------------------- */ +/* Functions in CfgGuiFunctions.c */ +/* -------------------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* */ +/* 1. int validation_cfg_create (); */ +/* 2. int validation_phasor_names(GtkWidget *widget, gpointer udata); */ +/* 3. int validation_analog_names(GtkWidget *widget, gpointer udata); */ +/* 4. int validation_digital_names(GtkWidget *widget, gpointer udata); */ +/* 5. int validation_ph_an_num (GtkButton *but, gpointer udata); */ +/* 6. int validation_new_phasor_names(); */ +/* 7. int validation_new_analog_names(GtkWidget *widget, gpointer udata); */ +/* 8. int validation_new_data_rate (GtkButton *but, gpointer udata); */ +/* 9. int validation_remove_ph_an_num (GtkButton *but, gpointer udata); */ +/* 10. void validation_hdr_frm (GtkWidget *widget, gpointer udata); */ +/* 11. int validation_setup_file_name (GtkWidget *widget, gpointer udata); */ + +/* 12. void cfg_create_function (GtkWidget *widget, gpointer udata); */ +/* 13. void channel_names_for_phasor (); */ +/* 14. void channel_names_for_analog (); */ +/* 15. void channel_names_for_digital (); */ +/* 16. void final_cfg_create (); */ +/* 17. void cfg_create_call(); */ +/* 18. void checkbox_function(GtkWidget *widget, gpointer data); */ + +/* 19. void stat_chng_options(GtkWidget *widget, gpointer udata); */ +/* 20. void cfg_STAT_change (GtkWidget *widget, gpointer udata); */ +/* 21. void Change_pmu_configuration(GtkWidget *widget, gpointer udata); */ +/* 22. void new_phasor_num(GtkWidget *widget, gpointer udata); */ +/* 23. void new_channel_names_for_phasor (); */ +/* 24. void new_channel_names_for_analog (); */ +/* 25. void change_data_rate_option(); */ +/* 26. void enter_new_data_rate(GtkWidget *widget, gpointer udata); */ +/* 27. void remove_phasor_num (GtkWidget *widget, gpointer udata); */ +/* 28. int final_cfg_update_call (GtkButton *but, gpointer udata); */ +/* 29. void hdr_create_function (GtkWidget *widget, gpointer udata); */ +/* */ +/* ---------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_cfg_create () */ +/* It Validates the user enterd details for PMU Simulator Configuration. It */ +/* gives the successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_cfg_create () +{ + /* local variables */ + int i, j; + const char *text, *text1, *text2, *text3, *text4; + const char *text5, *text6, *text7, *text8, *text9, *text10; + char *display_msg, stn[16], c = ' '; + + /* Get the text entries and combo box values filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_stn)); + text2 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_ff)); + text3 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_af)); + text4 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_pf)); + text5 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_pn)); + text6 = gtk_entry_get_text(GTK_ENTRY(p_phNumber)); + text7 = gtk_entry_get_text(GTK_ENTRY(p_anNumber)); + text8 = gtk_entry_get_text(GTK_ENTRY(p_dgNumber)); + text9 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_drate)); + text10 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_frequency)); + + if(!isNumber((char *)text) || !atoi(text) > 0) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid PMU ID number! Try again "; + validation_result (display_msg); /* Show the unsuccess message to user */ + return 0; + } + else if(strlen(text1) == 0) /* Check text_box entry should not be NULL */ + { + display_msg = " Please enter a PMU Station name! "; + validation_result (display_msg); + return 0; + } + else if(!isNumber((char *)text6) || !atoi(text6) > 0) /* Check text_box entry for valid integer or not? and greater than 1 */ + { + display_msg = " Not a valid Phasor number! Try again "; + validation_result (display_msg); + return 0; + } + else if(!isNumber((char *)text7)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Analog number! Try again "; + validation_result (display_msg); + return 0; + } + else if(!isNumber((char *)text8)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Digital number! Try again "; + validation_result (display_msg); + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* Allocate the memory for the ConfigurationFrame object and assigned couple of fields */ + cfg_info = malloc(sizeof(struct ConfigurationFrame)); + cfg_info->cfg_STNname = malloc(16); + memset(cfg_info->cfg_STNname,'\0',16); + + memset(stn, '\0', 16); + strcpy(stn, text1); + j = strlen(stn); + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + + cfg_info->cfg_pmuID = atoi(text); + strcpy(cfg_info->cfg_STNname, stn); + cfg_info->cfg_phnmr_val = atoi(text6); + cfg_info->cfg_annmr_val = atoi(text7); + cfg_info->cfg_dgnmr_val = atoi(text8); + cfg_info->cfg_dataRate = atoi(text9); + + if(!strcmp(text2, "Fix Point")) + cfg_info->cfg_fdf = 0; + else + cfg_info->cfg_fdf = 1; + + if(!strcmp(text3, "Fix Point")) + cfg_info->cfg_af = 0; + else + cfg_info->cfg_af = 1; + + if(!strcmp(text4, "Fix Point")) + cfg_info->cfg_pf = 0; + else + cfg_info->cfg_pf = 1; + + if(!strcmp(text5, "Rectangular")) + cfg_info->cfg_pn = 0; + else + cfg_info->cfg_pn = 1; + + if(atoi(text10) == 50) + cfg_info->cfg_fnom = 1; + else + cfg_info->cfg_fnom = 0; + + /* Close/destroy the cfg_setup_window */ + gtk_widget_destroy(cfg_setup_window); + + cfg_setup_window = NULL; + + /* Next call for Enter Phasor channels */ + channel_names_for_phasor (); + + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_phasor_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the user enterd Phasor channel names. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_phasor_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0; + int k, vtr; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20]; + const char *text1; + + /* First get how many Phasor channel we have? */ + vtr = cfg_info->cfg_phnmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for Phasor channel names */ + cfg_info->cfg_phasor_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(cfg_info->cfg_phasor_channels, '\0', sizeof(cfg_info->cfg_phasor_channels)); + + for (ia=1; iacfg_phasor_channels); + display_msg = " Please enter Phasor channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all phasor name in an array */ + cfg_info->cfg_phasor_channels[ia1] = stn[i]; + } + } + + /* Get the Pahsor maximum values at text entry filled by user */ + for(i=1, k=0; icfg_pf == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; // 0- Indicating Voltage + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + else + { + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; // 1- Indicating Current + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Phasor maximum value! Try again "; + validation_result (display_msg); + return 0; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + li = li*PHUNIT_VOLTAGE; + + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + else + { + li = li*PHUNIT_CURRENT; + + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + } + } + } + + /* Close/destroy the PhasorChWin */ + gtk_widget_destroy(PhasorChWin); + + /* Next call for Enter Analog channels */ + channel_names_for_analog (); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_analog_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the user enterd Analog channel names. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_analog_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0, vtr, k; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20], *text1; + + /* First get how many Analog channel we have? */ + vtr = cfg_info->cfg_annmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for Analog channel names */ + cfg_info->cfg_analog_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(cfg_info->cfg_analog_channels, '\0', sizeof(cfg_info->cfg_analog_channels)); + + for (ia=1; iacfg_analog_channels); + display_msg = " Please enter Analog channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all phasor name in an array */ + cfg_info->cfg_analog_channels[ia1] = stn[i]; + } + } + + /* Get the Pahsor maximum values at text entry filled by user */ + for(i=1, k=0; icfg_af == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "PMO")) + { + /* Fill the analog factor values for PMO */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else if(!strcmp(text1, "RMS")) + { + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else + { + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid analog maximum value! Try again "; + validation_result (display_msg); + return 0; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "POW")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for PMO */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + else if(!strcmp(text1, "RMS")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + else + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + } + } + } + + /* Close/destroy the AnalogChWin */ + gtk_widget_destroy(AnalogChWin); + + /* Next call for Enter Digital channels */ + channel_names_for_digital (); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_digital_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the user enterd Digital channel names. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_digital_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0, vtr; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20]; + + /* First get how many Digital channel we have? */ + vtr = cfg_info->cfg_dgnmr_val*16+1; + memset(stn, '\0', 16); + + /* Allocate the memory for Digital channel names */ + cfg_info->cfg_digital_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(cfg_info->cfg_digital_channels, '\0', sizeof(cfg_info->cfg_digital_channels)); + + for (ia=1; iacfg_digital_channels); + display_msg = " Please enter Digital channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all digital name in an array */ + cfg_info->cfg_digital_channels[ia1] = stn[i]; + } + } + + /* Close/destroy the AnalogChWin */ + gtk_widget_destroy(AnalogChWin); + + /* Next call for finaly create Configuration Frame */ + final_cfg_create (); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_ph_an_num (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd number of phasors (PHNMR) and number of */ +/* analogs (ANNMR) for new CFG. It will go ahead with entered data if all */ +/* entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_ph_an_num (GtkButton *but, gpointer udata) +{ + /* local variables */ + const char *text, *text1; + + /* Get the text entry value filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(phtext)); + text1 = gtk_entry_get_text(GTK_ENTRY(angtext)); + + if(!isNumber((char *)text) || !(atoi(text) >= 0)) + { + validation_result (" Not a valid Phasor number! Try again "); + return 1; + } + if(!isNumber((char *)text1) || !(atoi(text1) >= 0)) + { + validation_result (" Not a valid Analog number! Try again "); + return 1; + } + else + { + /* Next call for Enter New Analog channels */ + new_cfg_info->new_cfg_annmr_val = atoi(text1); + + /* Next call for Enter New Phasor channels */ + new_cfg_info->new_cfg_phnmr_val = atoi(text); + new_channel_names_for_phasor (); + return 0; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_new_phasor_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the New Phasor channel names. It willgo ahead with */ +/* entered data if all entries were right, else it shows the validation */ +/* error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_new_phasor_names() +{ + /* local variables */ + int ia, i, j, ia1 = 0, vtr; + int old_ph_count, k; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20], *text1; + + /* First get how many New Phasor channel he wants to add? */ + vtr = new_cfg_info->new_cfg_phnmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for New Phasor channel names */ + new_cfg_info->new_cfg_phasor_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(new_cfg_info->new_cfg_phasor_channels, '\0', sizeof(new_cfg_info->new_cfg_phasor_channels)); + + for (ia=1; ianew_cfg_phasor_channels); + display_msg = " Please enter new Phasor channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; ((i< 16) && (i< vtr*16)); i++, ia1++) + { + /* Copy all phasor name in an array */ + new_cfg_info->new_cfg_phasor_channels[ia1] = stn[i]; + } + } + + /* Get the Pahsor maximum values at text entry filled by user */ + old_ph_count = cfg_info->cfg_phnmr_val; + + for(i=1, k=old_ph_count*4; icfg_pf == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + else + { + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 0; + phunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Phasor maximum value! Try again "; + validation_result (display_msg); + return 1; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "Voltage")) + { + li = li*PHUNIT_VOLTAGE; + + /* Fill the phasor factor values for voltage */ + phunit_final_val[k++] = 0; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + else + { + li = li*PHUNIT_CURRENT; + + /* Fill the phasor factor values for current */ + phunit_final_val[k++] = 1; + phunit_final_val[k++] = li>>16; + phunit_final_val[k++] = li>>8; + phunit_final_val[k++] = li; + } + } + } + } + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validate_func(GtkWidget *widget, gpointer udata) */ +/* It will validate the new phasor and analog names. */ +/* ---------------------------------------------------------------------------- */ + +int validate_func(GtkWidget *widget, gpointer udata) +{ + if(!validation_new_phasor_names()) + { + /* Close/destroy the PhasorChWin */ + gtk_widget_destroy(PhasorChWin); + + /* Next call for Enter New Phasor channels */ + new_channel_names_for_analog (); + return 0; + } + return 1; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_new_analog_names(GtkWidget *widget, gpointer udata) */ +/* It Validates the New Analog channel names. It gives the successful message */ +/* and go ahead with entered data if all entries were right, */ +/* else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_new_analog_names(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int ia, i, j, ia1 = 0; + int k, vtr, old_an_count; + long int li; + char stn[16], c = ' '; + char *display_msg; + const char *aa[20], *text1; + + /* First get how many New Analog channel he wants to add? */ + vtr = new_cfg_info->new_cfg_annmr_val+1; + memset(stn, '\0', 16); + + /* Allocate the memory for New Analog channel names */ + new_cfg_info->new_cfg_analog_channels = (char *)malloc((vtr*16) * sizeof(char)); + memset(new_cfg_info->new_cfg_analog_channels, '\0', sizeof(new_cfg_info->new_cfg_analog_channels)); + + for (ia=1; ianew_cfg_analog_channels); + display_msg = " Please enter new Analog channel names! "; + validation_result (display_msg); + return 1; + } + else + { + memset(stn, '\0', 16); + strcpy(stn, aa[ia]); + j = strlen(stn); + if(j < 17) + { + for(i = j; i < 16 ; i++) + { + stn[i] = c; + } + } + } + + for (i=0; i< 16 && i< vtr*16; i++, ia1++) + { + /* Copy all Analog name in an array */ + new_cfg_info->new_cfg_analog_channels[ia1] = stn[i]; + } + } + + /* Get the Analog maximum values at text entry filled by user */ + old_an_count = cfg_info->cfg_annmr_val; + + for(i=1, k=old_an_count*4; icfg_af == 1) + { + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "POW")) + { + /* Fill the analog factor values for POW */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else if(!strcmp(text1, "RMS")) + { + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + else + { + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 0; + anunit_final_val[k++] = 1; + } + } + else + { + text1 = gtk_entry_get_text(GTK_ENTRY(num_text1[i])); + + if(!isNumber((char *)text1)) /* Check text_box entry for valid integer or not? */ + { + display_msg = " Not a valid Analog maximum value! Try again "; + validation_result (display_msg); + return 0; + } + else + { + li = atol(text1); + + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(num_combo[i])); + + if(!strcmp(text1, "POW")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for POW */ + anunit_final_val[k++] = 0; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + if(!strcmp(text1, "RMS")) + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for RMS */ + anunit_final_val[k++] = 1; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + else + { + li = li*ANUNIT_EACH; + + /* Fill the analog factor values for PEAK */ + anunit_final_val[k++] = 2; + anunit_final_val[k++] = li>>16; + anunit_final_val[k++] = li>>8; + anunit_final_val[k++] = li; + } + } + } + } + + /* Close/destroy the PhasorChWin */ + gtk_widget_destroy(AnalogChWin); + + /* Next call for Data Rate change option? */ + change_data_rate_option(); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_new_data_rate (GtkButton *but, gpointer udata) */ +/* It checks whether user have changed the old data rate or continue with it. */ +/* ---------------------------------------------------------------------------- */ + +int validation_new_data_rate (GtkButton *but, gpointer udata) +{ + /* Get the combo box value selected by user */ + const char *text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_drate)); + + new_cfg_info->data_rate_choice = 1; + new_cfg_info->new_data_rate = atoi(text); + + /* Close/destroy the CCWin */ + gtk_widget_destroy(CCWin); + + /* Final call to recreate configuration frame */ + reconfig_cfg_CC(); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_remove_ph_an_num (GtkButton *but, gpointer udata) */ +/* It Validates the number of phasor and analog channels for removal in new */ +/* CFG. It gives the successful message and go ahead with entered data if all */ +/* entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_remove_ph_an_num (GtkButton *but, gpointer udata) +{ + /* local variables */ + const char *text, *text1; + + /* Get the text entry value filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(phtext)); + text1 = gtk_entry_get_text(GTK_ENTRY(angtext)); + + /* Atleast one phasor should be present there in CFG Frame */ + if(!isNumber((char *)text) || !(atoi(text) < cfg_info->cfg_phnmr_val)) + { + validation_result (" Not a valid Phasor number within range! Try again "); + return 1; + } + if(!isNumber((char *)text1) || !(atoi(text1) <= cfg_info->cfg_annmr_val)) + { + validation_result (" Not a valid Analog within range! Try again "); + return 1; + } + else + { + /* If Phasor & Analog removal? */ + new_cfg_info->new_cfg_phnmr_val = atoi(text); + new_cfg_info->new_cfg_annmr_val = atoi(text1); + + /* Close/destroy the CCWin */ + gtk_widget_destroy(CCWin); + + change_data_rate_option(); + + return 0; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_hdr_frm (GtkWidget *widget, gpointer udata) */ +/* It Validates the Header frame entered by user. It gives the successful */ +/* message and go ahead with entered data if all entries were right, */ +/* else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +void validation_hdr_frm (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + int i, j; + const char *text; + GtkTextBuffer *buffer; + GtkTextIter start; + GtkTextIter end; + GtkTextIter iter; + + /* Obtain iters for the start and end of points of the buffer */ + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (HdrFrm)); + gtk_text_buffer_get_start_iter (buffer, &start); + gtk_text_buffer_get_end_iter (buffer, &end); + + /* Get the text entry value filled by user */ + text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); + //text = gtk_entry_get_text(GTK_ENTRY(HdrFrm)); + i = strlen(text); + + if(i > 0) + { + hdr_frame = (char *)malloc(i * sizeof(char)); + memset(hdr_frame, '\0', sizeof(hdr_frame)); + + for (j=0; jheader_frm_button), FALSE); + } + else + { + validation_result (" Pleas enter proper Header Frame! "); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_setup_file_name (GtkWidget *widget, gpointer udata) */ +/* Validates the setup file name based on check boxes. */ +/* ---------------------------------------------------------------------------- */ + +int validation_setup_file_name (GtkWidget *widget, gpointer udata) +{ + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn1)) == TRUE) + { + gtk_widget_destroy(CCWin); + + memset(pmuFilePath,'\0', 200); + cfg_create_call(); + + return 1; + } + else + { + const char *text = gtk_entry_get_text(GTK_ENTRY(p_id)); + + if(!isNumber((char *)text) || !(atoi(text) > 0) || (cfg_info->cfg_pmuID == atoi(text))) + { + validation_result (" Not a valid PMU ID number! Try again "); + return 0; + } + + cfg_info->cfg_pmuID = atoi(text); + gtk_widget_destroy(CCWin); + final_cfg_create (); + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfg_create_function (GtkWidget *widget, gpointer udata) */ +/* It shows the configuration window to user with diffrent attributes like, */ +/* PMU ID Code, data rate, Station name, PHNMR, FREQ, etc. */ +/* ---------------------------------------------------------------------------- */ + +void cfg_create_function (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *label, *cancel_button; + GtkWidget *valdbutton, *help_button; + + /* Create a new dialog window for the PMU Configuration Setup window */ + cfg_setup_window = gtk_dialog_new (); + g_signal_connect (cfg_setup_window, "destroy", G_CALLBACK (gtk_widget_destroy), cfg_setup_window); + gtk_window_set_title (GTK_WINDOW (cfg_setup_window), "PMU Configuration Setup"); + gtk_container_set_border_width (GTK_CONTAINER (cfg_setup_window), 10); + //gtk_widget_set_size_request (cfg_setup_window, 350, 600); + + /* Create a table of 11 by 2 squares. */ + table = gtk_table_new (12, 2, FALSE); + + /* Set the spacing to 10 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 10); + gtk_table_set_col_spacings (GTK_TABLE (table), 25); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(cfg_setup_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Next"); + help_button = gtk_button_new_with_label ("Help"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Setup PMU Configuration"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("PMU ID"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Station Name"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Frequency Format"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Analog Format"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new ("Phasor Format"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + label = gtk_label_new ("Phasor Notation"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 6, 7); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Phasors"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8); + gtk_widget_show (label); + + label = gtk_label_new ("Number of Analog"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9); + gtk_widget_show (label); + + label = gtk_label_new ("Digital Status Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10); + gtk_widget_show (label); + + label = gtk_label_new ("Frequency"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11); + gtk_widget_show (label); + + label = gtk_label_new ("Data Rate"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 1, 2); + gtk_widget_show (p_id); + + p_stn = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_stn, 16); + gtk_table_attach_defaults (GTK_TABLE (table), p_stn, 1, 2, 2, 3); + gtk_widget_show (p_stn); + + p_ff = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_ff), "Fix Point"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_ff), "Floating Point"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_ff), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_ff, 1, 2, 3, 4); + gtk_widget_show (p_ff); + + p_af = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_af), "Fix Point"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_af), "Floating Point"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_af), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_af, 1, 2, 4, 5); + gtk_widget_show (p_af); + + p_pf = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pf), "Fix Point"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pf), "Floating Point"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_pf), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_pf, 1, 2, 5, 6); + gtk_widget_show (p_pf); + + p_pn = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pn), "Rectangular"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_pn), "Polar"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_pn), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_pn, 1, 2, 6, 7); + gtk_widget_show (p_pn); + + p_phNumber = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_phNumber, 2); + gtk_table_attach_defaults (GTK_TABLE (table), p_phNumber, 1, 2, 7, 8); + gtk_widget_show (p_phNumber); + + p_anNumber = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_anNumber, 2); + gtk_table_attach_defaults (GTK_TABLE (table), p_anNumber, 1, 2, 8, 9); + gtk_widget_show (p_anNumber); + + p_dgNumber = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_dgNumber, 1); + gtk_table_attach_defaults (GTK_TABLE (table), p_dgNumber, 1, 2, 9, 10); + gtk_widget_show (p_dgNumber); + + p_frequency = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_frequency), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_frequency), "60"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_frequency), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_frequency, 1, 2, 10, 11); + gtk_widget_show (p_frequency); + + p_drate = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 1); + gtk_table_attach_defaults (GTK_TABLE (table), p_drate, 1, 2, 11, 12); + gtk_widget_show (p_drate); + + /* Signal handling for buttons on CFG Setuo Window */ + //g_signal_connect (p_frequency, "changed", G_CALLBACK (freq_val), NULL); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL); + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_cfg_create), valdbutton); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), cfg_setup_window); + g_signal_connect_swapped (cfg_setup_window, "destroy", G_CALLBACK (gtk_widget_destroy), cfg_setup_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_setup_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_setup_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_setup_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the cfg_setup_window */ + gtk_widget_show (cfg_setup_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION freq_val() */ +/* Call at nominal frequency changes, from 50 to 60 or vice versa */ +/* ---------------------------------------------------------------------------- */ +/* +void freq_val() +{ + int i; + const char *tx = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_frequency)); + + if(!strcmp(tx, "50")) + { + for (i=0; i<10; i++) + { + gtk_combo_box_remove_text(GTK_COMBO_BOX(p_drate), i); + } + + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 2); + } + else + { + for (i=0; i<10; i++) + { + gtk_combo_box_remove_text(GTK_COMBO_BOX(p_drate), i); + } + + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "12"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "15"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 4); + } +}; +*/ + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION channel_names_for_phasor () */ +/* It shows the window for phasor channel names as per PHNMR entred by user. */ +/* ---------------------------------------------------------------------------- */ + +void channel_names_for_phasor () +{ + /* local variables */ + int i, j, jj, temp_local, table_rows = 10; + char line[20]; + GtkWidget *table, *label, *next_button; + GtkWidget *scrolled_window, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + PhasorChWin = gtk_dialog_new (); + g_signal_connect (PhasorChWin, "destroy", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + gtk_window_set_title (GTK_WINDOW (PhasorChWin), "Phasor Channels"); + gtk_window_set_resizable (GTK_WINDOW (PhasorChWin), FALSE); + gtk_container_set_border_width (GTK_CONTAINER (PhasorChWin), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(PhasorChWin)->vbox), scrolled_window, TRUE, FALSE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. */ + temp_local = cfg_info->cfg_phnmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + if(cfg_info->cfg_pf == 0) + table = gtk_table_new (table_rows+1, 6, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Phasor Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Phasor Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Voltage"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Current"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + if(cfg_info->cfg_pf == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Limit %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i, i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_pf == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + + memset(line,'\0',sizeof(line)); + sprintf(line, "(kV or Amp)"); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 5, 6, i, i+1); + gtk_widget_show (label); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for buttons on CFG Setuo Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_phasor_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + g_signal_connect_swapped (PhasorChWin, "destroy", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the PhasorChWin */ + gtk_widget_show (PhasorChWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION channel_names_for_analog () */ +/* It shows the window for analog channel names as per ANNMR entred by user. */ +/* ---------------------------------------------------------------------------- */ + +void channel_names_for_analog () +{ + /* Analog is not Mandatory component in CFG, it could be zero */ + if (cfg_info->cfg_annmr_val == 0) + { + /* Next call to digital channel names */ + channel_names_for_digital (); + } + else /* if ANNMR > 0 */ + { + /* local variables */ + int i,temp_local,j,jj,table_rows = 9; + char line[30]; + GtkWidget *table, *scrolled_window; + GtkWidget *label, *next_button, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + AnalogChWin = gtk_dialog_new (); + g_signal_connect (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + gtk_window_set_title (GTK_WINDOW (AnalogChWin), "Analog Channels"); + gtk_container_set_border_width (GTK_CONTAINER (AnalogChWin), 10); + gtk_window_set_resizable (GTK_WINDOW (AnalogChWin), FALSE); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(AnalogChWin)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table as per phasor numbers and phasor type */ + temp_local = cfg_info->cfg_annmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + + if(cfg_info->cfg_af == 0) + table = gtk_table_new (table_rows+1, 5, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Analog Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Analog Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "RMS"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "POW"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Peak"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + /* Add only in case of phasors are in fix point format */ + if(cfg_info->cfg_af == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Value %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i , i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i , i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_af == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_analog_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + g_signal_connect_swapped (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the AnalogChWin */ + gtk_widget_show (AnalogChWin); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION channel_names_for_digital () */ +/* It shows the window for digital channel names as per DGNMR entred by user. */ +/* ---------------------------------------------------------------------------- */ + +void channel_names_for_digital () +{ + /* Analog is not Mandatory component in CFG, it could be zero */ + if (cfg_info->cfg_dgnmr_val == 0) + { + /* Next call to 'final_cfg_create ()' */ + final_cfg_create (); + } + else /* if DGNMR > 0 */ + { + /* local variables */ + int i; + char line[30]; + GtkWidget *table, *scrolled_window; + GtkWidget *label, *next_button, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + AnalogChWin = gtk_dialog_new (); + g_signal_connect (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + gtk_window_set_title (GTK_WINDOW (AnalogChWin), "Digital Channels"); + gtk_container_set_border_width (GTK_CONTAINER (AnalogChWin), 10); + gtk_window_set_resizable (GTK_WINDOW (AnalogChWin), FALSE); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 550); + + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(AnalogChWin)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. */ + table = gtk_table_new (cfg_info->cfg_dgnmr_val*16+1, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Digital Channels Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1; icfg_dgnmr_val*16+1; i++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Digital Ch %d : ", i); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + } + + for(i=1; icfg_dgnmr_val*16+1; i++) + { + num_text[i] = gtk_entry_new (); + //gtk_entry_set_max_length (GtkEntry *entry, gint max); + gtk_entry_set_max_length ((GtkEntry *)num_text[i], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[i], 1, 2, i, i+1); + gtk_widget_show (num_text[i]); + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_digital_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + g_signal_connect_swapped (AnalogChWin, "response", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the AnalogChWin */ + gtk_widget_show (AnalogChWin); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION final_cfg_create () */ +/* It call the final function for generate configuration frame. */ +/* ---------------------------------------------------------------------------- */ + +void final_cfg_create () +{ + /* local variables */ + char buff[50], tbuff[200]; + FILE *fp1; + + strcpy(pmuFilePath, pmuFolderPath); + strcat(pmuFilePath, "/"); + strcat(pmuFilePath, "pmu"); + sprintf(buff, "%d", cfg_info->cfg_pmuID); + strcat(pmuFilePath, buff); + strcat(pmuFilePath, ".bin"); + pmuFilePath[strlen(pmuFilePath)] = '\0'; + + /* Check whether any PMU Setup File already exist with the same name? */ + fp1 = fopen (pmuFilePath,"rb"); + + if (fp1 != NULL) + { + /* Close the open PMU Setup File */ + fclose(fp1); + + /* local variables */ + GtkWidget *table, *label, *ok; + + /* Create a new dialog window for PMU Server Setup */ + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Setup Warning!"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (9, 2, FALSE); + + /* Set the spacing to 50 on x and 5 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + ok = gtk_button_new_with_label ("OK"); + + /* This simply creates a grid of toggle buttons on the table */ + memset(tbuff, '\0', 200); + strcat(tbuff, "Setup File with PMU ID - "); + sprintf(buff, "%d", cfg_info->cfg_pmuID); + strcat(tbuff, buff); + strcat(tbuff, " is already present in system!"); + label = gtk_label_new (tbuff); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 1, 2); + gtk_widget_show (label); + + chkBtn1 = gtk_check_button_new_with_label("Overwrite with new PMU setup"); + gtk_table_attach_defaults (GTK_TABLE (table), chkBtn1, 0, 2, 3, 4); + gtk_widget_show (chkBtn1); + + chkBtn2 = gtk_check_button_new_with_label("Change the PMU ID Code"); + gtk_table_attach_defaults (GTK_TABLE (table), chkBtn2, 0, 2, 4, 5); + gtk_widget_show (chkBtn2); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("New PMU ID"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 5, 6); + gtk_widget_show (p_id); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Please give a new PMU ID to save the old PMU Configuration."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 7, 8); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 8, 9); + gtk_widget_show (label); + + /* Signal handling for buttons on Setup Warning Window */ + g_signal_connect_swapped (ok, "clicked", G_CALLBACK (validation_setup_file_name), NULL); + g_signal_connect (chkBtn1, "toggled", G_CALLBACK (checkbox_function), "1"); + g_signal_connect (chkBtn2, "toggled", G_CALLBACK (checkbox_function), "2"); + g_signal_connect (CCWin, "destroy", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn2),TRUE); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (ok, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), ok, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (ok); + gtk_widget_show (ok); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); + } + else + { + /* If not matched, call final call to create a new CFG */ + cfg_create_call(); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkbox_function(GtkWidget *widget, gpointer data) */ +/* This is called when checkboxes are selected, and do the appropriate */ +/* changes in the other checkbox or widget? */ +/* ---------------------------------------------------------------------------- */ + +void checkbox_function(GtkWidget *widget, gpointer data) +{ + char t[2]; + strcpy(t, (char *) data); + + if(!strcmp(t, "1")) + { + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn1)) == TRUE) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn2),FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), FALSE); + } + else + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn2),TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), TRUE); + gtk_entry_set_text(GTK_ENTRY(p_id), " "); + } + } + else + { + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn2)) == TRUE) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn1),FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), TRUE); + gtk_entry_set_text(GTK_ENTRY(p_id), " "); + } + else + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (chkBtn1),TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), FALSE); + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfg_create_call() */ +/* This is final call for configuration creation. It will call the create_cfg() */ +/* function in CfgFunction.c file and make the setup file also. */ +/* ---------------------------------------------------------------------------- */ + +void cfg_create_call() +{ + /* local variables */ + int ret_val; + + /* To create CFG call 'create_cfg()' */ + ret_val = create_cfg(); + + if(ret_val == 0) + { + /* Enable rest of the buttons on PMU Simulator Window */ + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->manage_data_source), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->header_frm_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->stat_modification_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->cfg_modification_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->pmu_details_button), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->pmu_properties), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_data_source), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_header_frm), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_cfg_modify), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_stat_modify), TRUE); + + /* Disable create CFG buttons on PMU Simulator Window */ + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_setup_cfg), FALSE); + } + else + { + validation_result (" PMU Simulator Setup has failed! Try again "); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION stat_chng_options(GtkWidget *widget, gpointer udata) */ +/* It provides multiple options to user regarding STAT Word change. User can */ +/* introduce error bit, Configuration modification, etc. */ +/* ---------------------------------------------------------------------------- */ + +void stat_chng_options(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *label; + GtkWidget *ID_butn, *PE_butn, *DS_butn, *chk_butn; + GtkWidget *PT_butn, *CC_butn, *close_butn; + + /* Create a new dialog window for the Configration Modification */ + CCOptionWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCOptionWin), "STAT Word Modification"); + gtk_container_set_border_width (GTK_CONTAINER (CCOptionWin), 10); + + /* Create a table of 7 by 3 squares */ + table = gtk_table_new (10, 3, FALSE); + + /* Set the spacing to 15 on x and 60 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCOptionWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Modification of bits in STAT Word"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + ID_butn = gtk_button_new_with_label ("Set Invalid Data bit (Bit-15)"); + gtk_table_attach_defaults (GTK_TABLE (table), ID_butn, 1, 2, 2, 3); + gtk_widget_show (ID_butn); + + PE_butn = gtk_button_new_with_label ("Set PMU Error bit (Bit-14)"); + gtk_table_attach_defaults (GTK_TABLE (table), PE_butn, 1, 2, 3, 4); + gtk_widget_show (PE_butn); + + DS_butn = gtk_button_new_with_label ("Set Data Sorting bit (Bit-12)"); + gtk_table_attach_defaults (GTK_TABLE (table), DS_butn, 1, 2, 4, 5); + gtk_widget_show (DS_butn); + + PT_butn = gtk_button_new_with_label ("Set PMU Trigger bit (Bit-11)"); + gtk_table_attach_defaults (GTK_TABLE (table), PT_butn, 1, 2, 5, 6); + gtk_widget_show (PT_butn); + + chk_butn = gtk_button_new_with_label ("CheckSum Error in Data Frame"); + gtk_table_attach_defaults (GTK_TABLE (table), chk_butn, 1, 2, 6, 7); + gtk_widget_show (chk_butn); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : The Synchronization Error (Bit-13) handled\ninternaly. CheckSum Error will not change\nany bit in STAT Word."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 9, 10); + gtk_widget_show (label); + g_free (markup); + + /* Add a "close" button to the bottom of the dialog */ + close_butn = gtk_button_new_with_label ("close"); + + /* Signal handling for all buttons on Window */ + g_signal_connect (ID_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "a"); + g_signal_connect (PE_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "b"); + g_signal_connect (DS_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "c"); + g_signal_connect (PT_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "d"); + g_signal_connect (chk_butn, "clicked", G_CALLBACK (cfg_STAT_change), (gpointer) "e"); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), CCOptionWin); + g_signal_connect_swapped (CCOptionWin, "response", G_CALLBACK (gtk_widget_destroy), CCOptionWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCOptionWin)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the CCOptionWin */ + gtk_widget_show (CCOptionWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfg_STAT_change (GtkWidget *widget, gpointer udata) */ +/* This function change the STAT Word bits according to user's wish. It also */ +/* has option to do CheckSum invalid for next data frame, and its not a STAT */ +/* Word error. */ +/* ---------------------------------------------------------------------------- */ + +void cfg_STAT_change (GtkWidget *widget, gpointer udata) +{ + /* Local variables */ + char find_butn[2]; + + /* For identifing singnal came from which button? */ + strcpy(find_butn,(char *) udata); + + if(!strcmp(find_butn, "a")) + { + validation_result(" STAT WORD CHANGED\nBit 15 of Stat word has been set to 1 for Invalid Data."); + ShmPTR->cfg_bit_change_info = 2; + } + else if(!strcmp(find_butn, "b")) + { + validation_result("STAT WORD CHANGED\nBit 14 of Stat word has been set to 1 for PMU Error."); + ShmPTR->cfg_bit_change_info = 3; + } + else if(!strcmp(find_butn, "c")) + { + validation_result("STAT WORD CHANGED\nBit 12 of Stat word has been set to 1 for Data Sorting."); + ShmPTR->cfg_bit_change_info = 4; + } + else if(!strcmp(find_butn, "d")) + { + validation_result("STAT WORD CHANGED\nBit 11 of Stat word has been set to 1 for PMU Trigger Detected."); + + ShmPTR->cfg_bit_change_info = 5; + } + else if(!strcmp(find_butn, "e")) + { + validation_result("CHECKSUM ERROR\nA data frame with invalid CRC would be sent."); + + ShmPTR->cfg_bit_change_info = 6; + } + + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR2); + printf("STAT word bit changed signal sent to PMU Server Process.\n"); + + /* Close/destroy the CCOptionWin */ + gtk_widget_destroy(CCOptionWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION Change_pmu_configuration(GtkWidget *widget, gpointer udata) */ +/* By this function user have option window to choose Add New Channels or */ +/* Remove Channels?. */ +/* ---------------------------------------------------------------------------- */ + +void Change_pmu_configuration(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table; + GtkWidget *close_butn, *label; + GtkWidget *Addbutton, *Removebutton; + GSList *group; + int ch = 0; + + /* Create a new dialog window for the Option Window */ + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Operation"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 4 by 2 squares */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Channel Operation"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Add few radio buttons on the dialog window */ + Addbutton = gtk_radio_button_new_with_label (NULL, "Add New Channels"); + gtk_table_attach_defaults (GTK_TABLE (table), Addbutton, 0, 1, 2, 3); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Addbutton), TRUE); + gtk_widget_show (Addbutton); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (Addbutton)); + Removebutton = gtk_radio_button_new_with_label (NULL, "Remove Channels"); + gtk_table_attach_defaults (GTK_TABLE (table), Removebutton, 0, 1, 3, 4); + gtk_widget_show (Removebutton); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Both Phasor and Analog channels could be add.\nYou will get the change Data Rate option at the end.\nIt will change the bit-10 from 0 to 1 in STAT Word in data frames."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Add 'Close' buttons on the dialog window */ + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Option Window */ + g_signal_connect_swapped (Addbutton, "clicked", G_CALLBACK (new_phasor_num), NULL); + g_signal_connect_swapped (Removebutton, "clicked", G_CALLBACK (remove_phasor_num), NULL); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_phasor_num(GtkWidget *widget, gpointer udata) */ +/* It will ask user to number of new phasor channels that he wants to add? */ +/* ---------------------------------------------------------------------------- */ + +void new_phasor_num(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *help_button; + GtkWidget *next_butn, *label, *cancel_button; + + /* Allocate the memory for the ConfigurationChange object */ + new_cfg_info = malloc(sizeof(struct ConfigurationChange)); + new_cfg_info->add_remove_choice = 1; + + /* Create a new dialog window for New Phasor Channels */ + gtk_widget_destroy(CCWin); + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Add New Phasors"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + //gtk_widget_set_size_request (CCWin, 350, 300); + + /* Create a table of 3 by 3 squares. */ + table = gtk_table_new (3, 3, FALSE); + + /* Set the spacing to 25 on x and 40 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + next_butn = gtk_button_new_with_label ("Next"); + help_button = gtk_button_new_with_label ("Help"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new ("New Phasors"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); + gtk_widget_show (label); + + label = gtk_label_new ("New Analogs"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + phtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), phtext, 1, 2, 0, 1); + gtk_widget_show (phtext); + + angtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), angtext, 1, 2, 1, 2); + gtk_widget_show (angtext); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : New channels will be added to existing configuration frame."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on Window */ + g_signal_connect (next_butn, "clicked", G_CALLBACK (validation_ph_an_num), NULL); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_butn, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), next_butn, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_butn); + gtk_widget_show (next_butn); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_channel_names_for_phasor () */ +/* It shows the window to enter new phasor channel names. */ +/* ---------------------------------------------------------------------------- */ + +void new_channel_names_for_phasor () +{ + /* new_phasor number could be zero? */ + if(new_cfg_info->new_cfg_phnmr_val > 0) + { + /* local variables */ + int i, j, jj, temp_local, table_rows = 10; + char line[20]; + GtkWidget *table, *scrolled_window, *cancel_button; + GtkWidget *label, *next_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + gtk_widget_destroy(CCWin); + PhasorChWin = gtk_dialog_new (); + g_signal_connect (PhasorChWin, "destroy", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + gtk_window_set_title (GTK_WINDOW (PhasorChWin), "New Phasor Channels"); + gtk_window_set_resizable (GTK_WINDOW (PhasorChWin), FALSE); + gtk_container_set_border_width (GTK_CONTAINER (PhasorChWin), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(PhasorChWin)->vbox), scrolled_window, TRUE, FALSE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. Based on phasor numbers and phasor type */ + temp_local = new_cfg_info->new_cfg_phnmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + if(cfg_info->cfg_pf == 0) + table = gtk_table_new (table_rows+1, 6, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Phasor Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Phasor Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Voltage"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Current"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + /* Add only in case of phasors are in fix point format */ + if(cfg_info->cfg_pf == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Limit %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i, i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_pf == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + + memset(line,'\0',sizeof(line)); + sprintf(line, "(kV or Amp)"); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 5, 6, i, i+1); + gtk_widget_show (label); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 6, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validate_func), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + g_signal_connect_swapped (PhasorChWin, "response", G_CALLBACK (gtk_widget_destroy), PhasorChWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (PhasorChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the PhasorChWin */ + gtk_widget_show (PhasorChWin); + } + else /* In case of number of new phasors are zero */ + { + gtk_widget_destroy(CCWin); + + new_channel_names_for_analog (); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_channel_names_for_analog () */ +/* It shows the window to enter new analog channel names. */ +/* ---------------------------------------------------------------------------- */ + +void new_channel_names_for_analog () +{ + /* new_analog number could be zero? */ + if(new_cfg_info->new_cfg_annmr_val > 0) + { + /* local variables */ + int i,temp_local,j,jj,table_rows = 9; + char line[30]; + GtkWidget *table, *scrolled_window; + GtkWidget *label, *next_button, *cancel_button; + + /* Create a new dialog window for the scrolled window to be packed into */ + AnalogChWin = gtk_dialog_new (); + g_signal_connect (AnalogChWin, "destroy", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + gtk_window_set_title (GTK_WINDOW (AnalogChWin), "New Analog Channels"); + gtk_container_set_border_width (GTK_CONTAINER (AnalogChWin), 10); + gtk_window_set_resizable (GTK_WINDOW (AnalogChWin), FALSE); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 400); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS.*/ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(AnalogChWin)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares. Based on analog numbers and analog types */ + temp_local = new_cfg_info->new_cfg_annmr_val; + if (temp_local >= table_rows) + { + table_rows = temp_local; + } + + if(cfg_info->cfg_af == 0) + table = gtk_table_new (table_rows+1, 5, FALSE); + else + table = gtk_table_new (table_rows+1, 3, FALSE); + + next_button = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Analog Channel Name"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "Next" button to the bottom of the dialog */ + next_button = gtk_button_new_with_label ("Next"); + + /* This simply creates a grid of Lables with text on the table to demonstrate the scrolled window. */ + for(i=1, j=1; i<=temp_local; j++) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Analog Ch %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + num_text[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text[j], 1, 2, i, i+1); + gtk_widget_show (num_text[j]); + + num_combo[j] = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "RMS"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "POW"); + gtk_combo_box_append_text(GTK_COMBO_BOX(num_combo[j]), "Peak"); + gtk_combo_box_set_active(GTK_COMBO_BOX(num_combo[j]), 0); + gtk_table_attach_defaults (GTK_TABLE (table), num_combo[j], 2, 3, i, i+1); + gtk_widget_show (num_combo[j]); + + /* Add only in case of analogs are in fix point format */ + if(cfg_info->cfg_af == 0) + { + memset(line,'\0',sizeof(line)); + sprintf(line, "Max Value %d : ", j); + label = gtk_label_new (line); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i , i+1); + gtk_widget_show (label); + + num_text1[j] = gtk_entry_new (); + gtk_entry_set_max_length ((GtkEntry *)num_text1[j], 16); + gtk_table_attach_defaults (GTK_TABLE (table), num_text1[j], 4, 5, i , i+1); + gtk_widget_show (num_text1[j]); + if(cfg_info->cfg_af == 1) gtk_widget_set_sensitive(GTK_WIDGET(num_text1[j]), FALSE); + } + i = i+1; + } + + if (temp_local < table_rows) + { + for (jj = i; jj < table_rows; jj++) + { + label = gtk_label_new ("-- "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Signal handling for Next button on Window */ + g_signal_connect_swapped (next_button, "clicked", G_CALLBACK (validation_new_analog_names), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + g_signal_connect_swapped (AnalogChWin, "response", G_CALLBACK (gtk_widget_destroy), AnalogChWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), next_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AnalogChWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_button); + gtk_widget_show (next_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the AnalogChWin */ + gtk_widget_show (AnalogChWin); + } + else /* if new_phasor < 0 */ + { + /* Next call to data rate change option? */ + change_data_rate_option(); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION change_data_rate_option() */ +/* It will ask user to choose wether he wants to change data rate or not? */ +/* ---------------------------------------------------------------------------- */ + +void change_data_rate_option() +{ + /* local variables */ + GtkWidget *table; + GtkWidget *Addbutton, *Removebutton; + GtkWidget *close_butn, *label; + GSList *group; + + /* Create a new dialog window for PMU Data Rate */ + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "PMU Data Rate "); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 4 by 2 squares */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new ("Do you want to change data rate?"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + + /* Add few radio buttons on the dialog window */ + Addbutton = gtk_radio_button_new_with_label (NULL, "YES"); + gtk_table_attach_defaults (GTK_TABLE (table), Addbutton, 0, 1, 2, 3); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Addbutton), TRUE); + gtk_widget_show (Addbutton); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (Addbutton)); + Removebutton = gtk_radio_button_new_with_label (NULL, "NO"); + gtk_table_attach_defaults (GTK_TABLE (table), Removebutton, 0, 1, 3, 4); + gtk_widget_show (Removebutton); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Changed data rate will be mentioned in the new CFG\nand will be informed to communicating PDCs."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Add a "close" button to the bottom of the dialog */ + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Data rate Window */ + g_signal_connect_swapped (Addbutton, "clicked", G_CALLBACK (enter_new_data_rate), NULL); + g_signal_connect_swapped (Removebutton, "clicked", G_CALLBACK (final_cfg_update_call), NULL); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION enter_new_data_rate(GtkWidget *widget, gpointer udata) */ +/* If user wants to change data rate then it will show him a window for */ +/* entring new data rate. */ +/* ---------------------------------------------------------------------------- */ + +void enter_new_data_rate(GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *cancel_button; + GtkWidget *next_butn, *label; + + /* Create a new dialog window for the New Data Rate */ + gtk_widget_destroy(CCWin); + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "New Frame Rate"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 3 by 3 squares */ + table = gtk_table_new (5, 2, FALSE); + + /* Set the spacing to 25 on x and 40 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 10); + gtk_table_set_col_spacings (GTK_TABLE (table), 5); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "next" button to the bottom of the dialog */ + next_butn = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + label = gtk_label_new ("Select New Data Rate"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); + gtk_widget_show (label); + + /* Create combo boxe for user with some fixed values */ + p_drate = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 3); + gtk_table_attach_defaults (GTK_TABLE (table), p_drate, 1, 2, 0, 1); + gtk_widget_show (p_drate); +/* + if(cfg_info->cfg_fnom == 1) + { + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "25"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "50"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "100"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 2); + } + else + { + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "10"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "12"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "15"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "30"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "60"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_drate), "120"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_drate), 4); + } +*/ + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Frames would be send as per the new data rate."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 4, 5); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on Data Rate Window */ + g_signal_connect (next_butn, "clicked", G_CALLBACK (validation_new_data_rate), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_butn, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), next_butn, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_butn); + gtk_widget_show (next_butn); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_phasor_num (GtkWidget *widget, gpointer udata) */ +/* If wish to remove some of phasor channels from CFG then it provides this */ +/* option, but it should be lessthan maximum phasor numbers. */ +/* ---------------------------------------------------------------------------- */ + +void remove_phasor_num (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + char line[50], buff[10]; + GtkWidget *table, *label; + GtkWidget *next_butn, *cancel_button; + + /* Allocate the memory for the ConfigurationChange object */ + new_cfg_info = malloc(sizeof(struct ConfigurationChange)); + new_cfg_info->add_remove_choice = 2; + + /* Create a new dialog window for the Remove Phasor */ + gtk_widget_destroy(CCWin); + CCWin = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (CCWin), "Phasor Removal"); + gtk_container_set_border_width (GTK_CONTAINER (CCWin), 10); + + /* Create a table of 5 by 3 squares */ + table = gtk_table_new (3, 3, FALSE); + + /* Set the spacing to 5 on x and 40 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table),8); + gtk_table_set_col_spacings (GTK_TABLE (table),2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(CCWin)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "next" button to the bottom of the dialog */ + next_butn = gtk_button_new_with_label ("Next"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + /* Create text boxes for user to enter appropriate values */ + label = gtk_label_new ("Phasors to be remove"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); + gtk_widget_show (label); + + label = gtk_label_new ("Analogs to be remove"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + phtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), phtext, 1, 2, 0, 1); + gtk_widget_show (phtext); + + angtext = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), angtext, 1, 2, 1, 2); + gtk_widget_show (angtext); + + memset(line, '\0', 50); + memset(buff, '\0', 10); + strcat(line, "< "); + sprintf(buff,"%d",cfg_info->cfg_phnmr_val); + strcat(line, buff); + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 0, 1); + gtk_widget_show (label); + + memset(line, '\0', 50); + memset(buff, '\0', 10); + strcat(line, "<= "); + sprintf(buff,"%d",cfg_info->cfg_annmr_val); + strcat(line, buff); + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : New channels will be added to existing configuration frame."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on Window */ + g_signal_connect (next_butn, "clicked", G_CALLBACK (validation_remove_ph_an_num), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), CCWin); + g_signal_connect_swapped (CCWin, "response", G_CALLBACK (gtk_widget_destroy), CCWin); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (next_butn, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), next_butn, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (CCWin)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (next_butn); + gtk_widget_show (next_butn); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the CCWin */ + gtk_widget_show (CCWin); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION final_cfg_update_call (GtkButton *but, gpointer udata) */ +/* It finally call the 'reconfig_cfg_CC()' for recreate configuration frame. */ +/* ---------------------------------------------------------------------------- */ + +int final_cfg_update_call (GtkButton *but, gpointer udata) +{ + new_cfg_info->data_rate_choice = 0; + new_cfg_info->new_data_rate = 0; + + /* Close/destroy the CCWin */ + gtk_widget_destroy(CCWin); + + /* Final call to recreate configuration frame */ + reconfig_cfg_CC(); + + return 0; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION hdr_create_function (GtkWidget *widget, gpointer udata) */ +/* It will take the PMU information and make Header Frame. */ +/* ---------------------------------------------------------------------------- */ + +void hdr_create_function (GtkWidget *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *table, *label; + GtkWidget *close_butn, *vald_butn; + + /* Create a new dialog window for the Header Frame Window */ + hdr_frame_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (hdr_frame_window), "Header Frame"); + gtk_container_set_border_width (GTK_CONTAINER (hdr_frame_window), 10); + + /* Create a table of 3 by 2 squares */ + table = gtk_table_new (3, 2, FALSE); + + /* Set the spacing to 30 on x */ + gtk_table_set_row_spacings (GTK_TABLE (table), 10); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(hdr_frame_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter Header Frame Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Create text boxes for user to enter appropriate values */ + HdrFrm = gtk_text_view_new ();//gtk_entry_new(); + gtk_table_attach_defaults (GTK_TABLE (table), HdrFrm, 0, 1, 1, 2); + gtk_widget_show (HdrFrm); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Header frame includes the information about the PMU, the data sources,\nscaling, algorithms, filtering, or other related information."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + /* Add few buttons at the bottom of the dialog */ + vald_butn = gtk_button_new_with_label ("Create"); + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Window */ + g_signal_connect (vald_butn, "clicked", G_CALLBACK (validation_hdr_frm), (gpointer) "2"); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), hdr_frame_window); + g_signal_connect_swapped (hdr_frame_window, "response", G_CALLBACK (gtk_widget_destroy), hdr_frame_window); + + /* This makes it so the button is the default */ + gtk_widget_set_can_default (vald_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (hdr_frame_window)->action_area), vald_butn, TRUE, TRUE, 0); + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (hdr_frame_window)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (vald_butn); + gtk_widget_show (vald_butn); + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the hdr_frame_window */ + gtk_widget_show (hdr_frame_window); +}; + +/*************************************** End of Program ***********************************************/ diff --git a/PMUSimulator/CfgGuiFunctions.h b/PMUSimulator/CfgGuiFunctions.h new file mode 100755 index 0000000..3e2d2f9 --- /dev/null +++ b/PMUSimulator/CfgGuiFunctions.h @@ -0,0 +1,105 @@ +/* ----------------------------------------------------------------------------- + * CfgGuiFunctions.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +GtkWidget *cfg_setup_window; +GtkWidget *cfg_name; +GtkWidget *setup_close_button; +GtkWidget *p_stn, *p_id, *p_ff; +GtkWidget *p_af, *p_pf, *p_pn; +GtkWidget *p_phNumber; +GtkWidget *p_anNumber; +GtkWidget *p_dgNumber; +GtkWidget *p_drate; +GtkWidget *num_text[50], *num_text1[50]; +GtkWidget *num_combo[50]; +GtkWidget *PhasorChWin; +GtkWidget *AnalogChWin; +GtkWidget *CCWin; +GtkWidget *CCOptionWin; +GtkWidget *phtext, *angtext, *HdrFrm; +GtkWidget *p_frequency; +GtkWidget *hdr_frame_window; +GtkWidget *remove_cfg_window; +GtkWidget *chkBtn1, *chkBtn2; + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void cfg_create_function (GtkWidget *widget, gpointer udata); +//void freq_val(); +int validation_cfg_create (); + +void channel_names_for_phasor (); +int validation_phasor_names(GtkWidget *widget, gpointer udata); + +void channel_names_for_analog (); +int validation_analog_names(GtkWidget *widget, gpointer udata); + +void channel_names_for_digital (); +int validation_digital_names(GtkWidget *widget, gpointer udata); + +void final_cfg_create (); +void cfg_create_call(); +void checkbox_function(GtkWidget *widget, gpointer data); +int validation_setup_file_name (GtkWidget *widget, gpointer udata); + +void cfg_STAT_change (GtkWidget *widget, gpointer udata); +void stat_chng_options(GtkWidget *widget, gpointer udata); + +void Change_pmu_configuration(GtkWidget *widget, gpointer udata); +void new_phasor_num(GtkWidget *widget, gpointer udata); +int validation_ph_an_num (GtkButton *but, gpointer udata); + +void new_channel_names_for_phasor (); +int validation_new_phasor_names(); +int validate_func(GtkWidget *widget, gpointer udata); + +void new_channel_names_for_analog (); +int validation_new_analog_names(GtkWidget *widget, gpointer udata); + +void remove_phasor_num (GtkWidget *widget, gpointer udata); +int validation_remove_ph_an_num (GtkButton *but, gpointer udata); + +void change_data_rate_option(); +void enter_new_data_rate(GtkWidget *widget, gpointer udata); +int validation_new_data_rate (GtkButton *but, gpointer udata); +int final_cfg_update_call (GtkButton *but, gpointer udata); + +void hdr_create_function (GtkWidget *widget, gpointer udata); +void validation_hdr_frm (GtkWidget *widget, gpointer udata); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..bb21bc1 --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Floating Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,712 @@ +2011-11-29 20:18:29.233,134.8224334717,-169.5159651613,0.1450927705,144.6345149207,202.337310791,70.3263802607,50.0033760071,-7.63032585382462E-05,11.794052124,108.9102172852 +2011-11-29 20:18:29.266,134.8015441895,-169.4483189678,0.0693023801,0.1610450551,202.3217163086,70.3646429804,50.0033760071,2.79396772384644E-08,11.7860412598,108.922706604 +2011-11-29 20:18:29.300,134.78465271,-169.3850440953,0.0458044522,-74.8878606262,202.2794799805,70.4249330602,50.0033836365,0.0005086139,11.7531280518,108.9005584717 +2011-11-29 20:18:29.333,134.7117156982,-169.367558811,0.1078804955,174.3555230185,202.0138702393,70.4346797402,50.0033950806,0.0001780316,11.7698898315,108.9214553833 +2011-11-29 20:18:29.366,134.6603393555,-169.3241324683,0.0502309091,-135.409565805,201.8742523193,70.4780514414,50.00340271,0.00027976,11.7637023926,108.913482666 +2011-11-29 20:18:29.400,134.7460327148,-169.2591910297,0.1367013007,-93.1392803904,202.0541381836,70.5406228044,50.0034065247,0.0001017423,11.7791213989,108.9110870361 +2011-11-29 20:18:29.433,134.7694091797,-169.2105874035,0.1303349286,-94.847551683,202.1423950195,70.5799373732,50.0033950806,-0.0005594781,11.770866394,108.9143066406 +2011-11-29 20:18:29.466,134.7488708496,-169.1920366097,0.0251683109,-49.7269087994,202.1364746094,70.6069166205,50.0033874512,-0.0003051711,11.7586517334,108.9025115967 +2011-11-29 20:18:29.500,134.7640838623,-169.1789636277,0.0830653459,110.7198184838,202.1180877686,70.6408694908,50.0033874512,0.0003051711,11.7677078247,108.8883361816 +2011-11-29 20:18:29.533,134.7208251953,-169.1402774362,0.0719386414,100.8485490576,201.9964599609,70.6924784002,50.0033912659,7.62892886996269E-05,11.7568969727,108.9006271362 +2011-11-29 20:18:29.566,134.7014465332,-169.0792428658,0.0182955861,18.3640769044,202.0995178223,70.749626593,50.0033950806,2.54390761256218E-05,11.7456588745,108.8836669922 +2011-11-29 20:18:29.600,134.7675933838,-168.9990427845,0.1057253778,-109.8865968768,202.2347106934,70.807143616,50.00340271,0.0002288818,11.7769165039,108.9103851318 +2011-11-29 20:18:29.633,134.8114624023,-168.9500293471,0.1741364002,-135.6230365373,202.1170043945,70.8475441849,50.0034103394,0.0002543069,11.7724533081,108.9046630859 +2011-11-29 20:18:29.666,134.7888031006,-168.9464093468,0.1465153247,-155.4737246052,202.0650787354,70.8824669422,50.0034179688,0.000279774,11.8003234863,108.9321670532 +2011-11-29 20:18:29.700,134.7734222412,-168.9167526654,0.1618448496,-179.0984883404,202.1455230713,70.9278398888,50.0034103394,-0.000279732,11.7928085327,108.9172515869 +2011-11-29 20:18:29.733,134.6933288574,-168.863190322,0.07745222,-119.1842875071,202.050567627,70.9634729857,50.0033988953,-0.0004577637,11.7753677368,108.9127655029 +2011-11-29 20:18:29.766,134.6704559326,-168.818384281,0.126095891,-81.0482472952,201.987487793,70.9934643464,50.0033950806,0.0001017144,11.7696075439,108.8991699219 +2011-11-29 20:18:29.800,134.678604126,-168.7711603531,0.108848311,-103.0472279325,202.0768127441,71.0504554448,50.0033988953,-0.0001525925,11.7740325928,108.9075622559 +2011-11-29 20:18:29.833,134.7520904541,-168.7525412574,0.1251616776,-156.9304946721,202.1476135254,71.0946877499,50.0033798218,-0.0005340669,11.7756729126,108.9163131714 +2011-11-29 20:18:29.866,134.7929229736,-168.7290727274,0.1713201255,-142.0740409254,202.2034454346,71.1279780919,50.0033798218,0.0003305962,11.7931900024,108.933807373 +2011-11-29 20:18:29.900,134.6959838867,-168.6730241951,0.1111529693,-62.5422185693,202.2106323242,71.1479632254,50.0033912659,0.0003814744,11.7515258789,108.9044342041 +2011-11-29 20:18:29.933,134.6150970459,-168.6361411736,0.1139465198,30.0007794764,202.0644836426,71.1756459821,50.0033874512,-0.0003814884,11.7733078003,108.9192047119 +2011-11-29 20:18:29.966,134.6213684082,-168.5966626802,0.1800202578,124.1126651442,201.9098052979,71.2584893465,50.0033721924,-0.000534053,11.7767791748,108.9049835205 +2011-11-29 20:18:30.000,134.6870117188,-168.5288525621,0.2006438076,168.9980319165,201.9216461182,71.3419064469,50.0033798218,0.0004069135,11.7890701294,108.9200668335 +2011-11-29 20:18:30.033,134.6818237305,-168.4630368592,0.1549095362,-64.5752107154,201.9330444336,71.3637972032,50.0033912659,0.0004832027,11.7713012695,108.9197845459 +2011-11-29 20:18:30.066,134.6237030029,-168.4238315734,0.2399064302,-25.4937459639,201.948135376,71.3883380728,50.0033874512,-0.0004832167,11.7793045044,108.9100265503 +2011-11-29 20:18:30.100,134.6981811523,-168.4289951964,0.0758340806,64.7152842349,202.085067749,71.3974153942,50.0033836365,0.0002288818,11.7855072021,108.9133453369 +2011-11-29 20:18:30.133,134.7296447754,-168.3838749668,0.0666584298,125.1205141978,202.1620025635,71.4213756979,50.00340271,0.0005849171,11.7632980347,108.921005249 +2011-11-29 20:18:30.166,134.7190704346,-168.3001231872,0.066609405,-121.4367472916,202.2138214111,71.5091982702,50.0033950806,-0.0007629348,11.7996673584,108.9293212891 +2011-11-29 20:18:30.200,134.8034820557,-168.2203329173,0.2367471904,-148.5384051635,202.3042449951,71.6099230699,50.0033721924,-0.0007120706,11.7717208862,108.9134674072 +2011-11-29 20:18:30.233,134.8206634521,-168.2139398602,0.226904124,-169.3587068859,202.2487945557,71.6174294478,50.0033721924,0.0004577637,11.7743301392,108.919921875 +2011-11-29 20:18:30.266,134.7584991455,-168.2660268828,0.1117278636,159.3766039799,202.0735778809,71.5556025754,50.0033950806,0.0005849171,11.7784500122,108.9136886597 +2011-11-29 20:18:30.300,134.7873687744,-168.2091723882,0.0597603396,-106.502019577,202.1817321777,71.6104353341,50.0033874512,-0.0003560493,11.7743301392,108.9007797241 +2011-11-29 20:18:30.333,134.7945861816,-168.1141644568,0.1495974064,-62.1187946521,202.4531555176,71.696256661,50.0033988953,0.0006612204,11.7691955566,108.9086456299 +2011-11-29 20:18:30.366,134.8035736084,-168.0930591723,0.096420832,171.811578081,202.3246765137,71.7291986634,50.0034217834,0.000534053,11.7803955078,108.9164123535 +2011-11-29 20:18:30.400,134.8062286377,-168.079835926,0.2849707007,150.6752141865,202.0523681641,71.7627007412,50.0034141541,-0.0003814604,11.7672576904,108.9037399292 +2011-11-29 20:18:30.433,134.728515625,-168.0440867159,0.1319861859,148.8217214102,202.1294403076,71.7697494965,50.0033912659,-0.0007374957,11.7591705322,108.8994903564 +2011-11-29 20:18:30.466,134.6993560791,-168.0027367507,0.0599027015,169.1915584965,202.2049713135,71.7973502909,50.0033988953,0.0003560493,11.7801132202,108.9189376831 +2011-11-29 20:18:30.500,134.7456359863,-167.9492290487,0.1175718755,173.4509327648,202.1370849609,71.9225271678,50.0033798218,-0.0009918446,11.7780609131,108.9150085449 +2011-11-29 20:18:30.533,134.7556304932,-167.9005707811,0.0389445201,82.44644849,202.1036682129,71.9703180014,50.0033607483,-0.0003814744,11.7730331421,108.9063491821 +2011-11-29 20:18:30.566,134.7534332275,-167.8605458726,0.0232568569,-58.5460114897,202.1315307617,71.9305594703,50.0033721924,0.0007120706,11.7905578613,108.9191055298 +2011-11-29 20:18:30.600,134.781036377,-167.8150158315,0.1436795145,-135.767522359,202.1632537842,71.9648880011,50.00340271,0.0010681059,11.785118103,108.9164505005 +2011-11-29 20:18:30.633,134.7587280273,-167.7896348486,0.0994106531,-151.6603070481,202.1341247559,72.0262640809,50.0034103394,-5.08641824126244E-05,11.7581481934,108.9181213379 +2011-11-29 20:18:30.666,134.6957092285,-167.7810151499,0.0991883427,138.6410102636,202.0322418213,72.0757146505,50.0034103394,1.39698386192322E-08,11.7942276001,108.9186935425 +2011-11-29 20:18:30.700,134.6871948242,-167.7184642774,0.083424814,112.3871291319,202.075012207,72.1456626178,50.0034103394,-5.08641824126244E-05,11.7826690674,108.9184265137 +2011-11-29 20:18:30.733,134.7311401367,-167.6461598949,0.0603959188,59.2860215051,202.0905609131,72.1868691491,50.0034065247,-0.0002288818,11.7780838013,108.9258651733 +2011-11-29 20:18:30.766,134.7288513184,-167.6102330999,0.0666521117,140.921159635,201.9429016113,72.2306438315,50.0034065247,0,11.7804946899,108.9035797119 +2011-11-29 20:18:30.800,134.7057189941,-167.5554686431,0.1903870851,-147.0027737324,201.9218139648,72.2891307413,50.0034065247,0.0001271535,11.7651519775,108.9016189575 +2011-11-29 20:18:30.833,134.7625579834,-167.5144738477,0.1911585331,-113.1810976418,202.0932769775,72.288468213,50.0034065247,0,11.790184021,108.9146728516 +2011-11-29 20:18:30.866,134.7877807617,-167.498381922,0.0497270934,-97.5609058025,202.2779541016,72.3078454597,50.0034103394,0.0003051851,11.783241272,108.9332809448 +2011-11-29 20:18:30.900,134.719543457,-167.4414181443,0.0959455147,135.544311777,202.2464752197,72.3816798046,50.0034141541,-0.0002288818,11.7758407593,108.9098815918 +2011-11-29 20:18:30.933,134.6839752197,-167.3783618379,0.0350519009,128.5353492356,202.0845336914,72.4507944888,50.0033798218,-0.0008901022,11.7990570068,108.9278869629 +2011-11-29 20:18:30.966,134.6943511963,-167.3387877219,0.1081242189,-88.1916757708,201.9718017578,72.491673171,50.0033683777,-0.0002543209,11.7816390991,108.914932251 +2011-11-29 20:18:31.000,134.7009124756,-167.3141717201,0.0082966676,-175.4406761531,201.9728546143,72.5127852857,50.0033760071,0.0002288818,11.7679290771,108.9032211304 +2011-11-29 20:18:31.033,134.6902160645,-167.2848838689,0.0977809727,25.8015672218,202.0949249268,72.5215415882,50.0033760071,-2.54390761256218E-05,11.7752609253,108.9061660767 +2011-11-29 20:18:31.066,134.7153778076,-167.2337940539,0.0955304205,-64.7005515168,202.2023925781,72.578580498,50.0033760071,-2.79396772384644E-08,11.7786941528,108.9007720947 +2011-11-29 20:18:31.100,134.7046966553,-167.1974437872,0.1050107405,-92.6661122055,202.1512908936,72.6228128031,50.0033874512,0.0002543349,11.7736358643,108.9249420166 +2011-11-29 20:18:31.133,134.6782989502,-167.1698498229,0.0768977627,-11.9338883716,202.0171813965,72.6216585011,50.0033836365,-0.000279732,11.7939682007,108.9260406494 +2011-11-29 20:18:31.166,134.7247009277,-167.1614623506,0.1715258956,91.2748573131,202.0719451904,72.6636709947,50.0033836365,0.0001780177,11.7806625366,108.9173583984 +2011-11-29 20:18:31.200,134.7617034912,-167.1086649883,0.2102522403,129.3795469566,202.2709503174,72.755789756,50.0033912659,7.62892886996269E-05,11.7805557251,108.9205780029 +2011-11-29 20:18:31.233,134.7189331055,-167.0413193231,0.0248604342,-168.0532118487,202.2695617676,72.7813551541,50.0033836365,-0.0002288818,11.7999649048,108.9226608276 +2011-11-29 20:18:31.266,134.6730804443,-167.0016222637,0.0362494811,-26.5984914961,202.1249084473,72.8092018353,50.0033836365,0.0001017004,11.7742843628,108.9201889038 +2011-11-29 20:18:31.300,134.7223358154,-166.9603269399,0.1349045485,139.6828326781,202.1561584473,72.8501898005,50.0033950806,0.0002543069,11.7782974243,108.9056549072 +2011-11-29 20:18:31.333,134.8051300049,-166.9278152395,0.1664902717,138.9865905149,202.2486724854,72.8554558764,50.0033950806,-5.08781522512436E-05,11.7762527466,108.9155273438 +2011-11-29 20:18:31.366,134.8708343506,-166.8810557644,0.0942825526,176.2316120589,202.2861480713,72.9062724838,50.0033760071,-0.0006866455,11.7629623413,108.9013900757 +2011-11-29 20:18:31.400,134.8437652588,-166.8443503278,0.1503423601,162.1740308979,202.1686706543,72.9923260371,50.0033760071,0.0003051851,11.787902832,108.9233932495 +2011-11-29 20:18:31.433,134.7200775146,-166.8283130437,0.1823710799,129.163644677,201.948928833,73.029004153,50.0033798218,0,11.7675247192,108.9170761108 +2011-11-29 20:18:31.466,134.6050567627,-166.7654616429,0.130270496,0.5457648249,201.9873199463,73.0529234755,50.0033950806,0.000534053,11.7709121704,108.90234375 +2011-11-29 20:18:31.500,134.6272277832,-166.7088803558,0.3081825972,-16.3638833267,202.140411377,73.1114513665,50.00340271,0.0003306102,11.7889862061,108.91796875 +2011-11-29 20:18:31.533,134.7216644287,-166.6597029938,0.1359220892,-47.4541018814,202.0629730225,73.1682990309,50.0034141541,0.0004323525,11.7646865845,108.8986206055 +2011-11-29 20:18:31.566,134.7438964844,-166.6152384623,0.1055927128,-152.1283389308,202.0192108154,73.199028052,50.0034332275,0.0003051851,11.7787017822,108.9136047363 +2011-11-29 20:18:31.600,134.7142791748,-166.5635612511,0.0949059576,-154.825362068,202.0703735352,73.2484786216,50.0034065247,-0.0009663915,11.7951202393,108.9265670776 +2011-11-29 20:18:31.633,134.817276001,-166.4982373218,0.2221906185,-124.7820100225,202.2247924805,73.3291568161,50.0033760071,-0.0006866455,11.7474517822,108.9035949707 +2011-11-29 20:18:31.666,134.884979248,-166.4681981499,0.2723530531,-133.6475819048,202.2952728271,73.3692636869,50.0033760071,0.0001780316,11.793258667,108.9327392578 +2011-11-29 20:18:31.700,134.7557220459,-166.4568600358,0.0874619931,-121.635888287,202.2000274658,73.3760460647,50.0033798218,-0.0001525925,11.7782669067,108.9287796021 +2011-11-29 20:18:31.733,134.6260375977,-166.4203321842,0.1133208722,9.4597795571,202.1197052002,73.4283926345,50.0033798218,0,11.7778930664,108.9112243652 +2011-11-29 20:18:31.766,134.7039031982,-166.372739426,0.0676515698,94.8038179817,202.1496734619,73.4693464488,50.0033836365,0.0002034288,11.7976379395,108.9184112549 +2011-11-29 20:18:31.800,134.8201293945,-166.3255564792,0.2120327652,-174.9573992881,202.1255645752,73.4906976201,50.0033912659,0.0003306102,11.7724075317,108.9098892212 +2011-11-29 20:18:31.833,134.7403869629,-166.2756004757,0.2075133771,-142.5582876772,202.1139831543,73.5290423021,50.0033950806,0,11.7647781372,108.8980407715 +2011-11-29 20:18:31.866,134.5975646973,-166.2256308117,0.1797547489,-80.1426939849,202.1083068848,73.5746543054,50.0033950806,-2.54111364483833E-05,11.7855987549,108.9058074951 +2011-11-29 20:18:31.900,134.6386260986,-166.1799505065,0.1479940861,-69.1760124799,202.2281341553,73.6189207614,50.0033912659,-0.0002543069,11.7895126343,108.928894043 +2011-11-29 20:18:31.933,134.7091522217,-166.1387371451,0.0489395112,-61.9942734733,202.204498291,73.6780565392,50.0033760071,-0.0006612344,11.7737960815,108.9143981934 +2011-11-29 20:18:31.966,134.6456298828,-166.109162426,0.1335384101,30.6746664305,202.0961914063,73.7477176386,50.0033607483,0,11.7469787598,108.8932800293 +2011-11-29 20:18:32.000,134.6671905518,-166.0859397828,0.0623375848,45.4995988542,202.0775146484,73.7559343562,50.003364563,0.0003051711,11.7669372559,108.9108581543 +2011-11-29 20:18:32.033,134.7414855957,-166.0628127622,0.0508997552,-129.79596993,202.050994873,73.7501901671,50.0033912659,0.0003306102,11.7669219971,108.9158325195 +2011-11-29 20:18:32.066,134.7391204834,-166.0135807587,0.1144944206,-100.4569333313,202.046661377,73.8040462087,50.0033912659,0.0002034567,11.782119751,108.9234771729 +2011-11-29 20:18:32.100,134.7500762939,-165.9906313231,0.0357705615,-58.9408032539,202.1491699219,73.8518848536,50.0034179688,0.0007883878,11.756401062,108.9061813354 +2011-11-29 20:18:32.133,134.82081604,-165.9479836219,0.1116574705,67.8054120795,202.3647613525,73.8868007807,50.0034370422,0.0004832167,11.7687149048,108.9043045044 +2011-11-29 20:18:32.166,134.8270568848,-165.8511998414,0.0978476554,161.1638869008,202.3099975586,73.973721768,50.0034294128,-0.0003814604,11.7715988159,108.9138870239 +2011-11-29 20:18:32.200,134.7667541504,-165.7968861771,0.2567587197,-148.4723299134,202.1715698242,74.0638666047,50.0034141541,-0.0003051991,11.7677841187,108.9048461914 +2011-11-29 20:18:32.233,134.7483520508,-165.792911007,0.2051653415,-125.5847075142,202.1719207764,74.0470438488,50.0034065247,-0.0003051851,11.7776947021,108.9069213867 +2011-11-29 20:18:32.266,134.7303466797,-165.7594704008,0.1532536,-71.5523923865,202.2077026367,74.0367302631,50.0033798218,-0.0009409664,11.7617263794,108.8991775513 +2011-11-29 20:18:32.300,134.688949585,-165.7224234548,0.0293897931,-107.6627965661,202.1138153076,74.0829569834,50.0033493042,-0.0007629488,11.7846755981,108.9178390503 +2011-11-29 20:18:32.333,134.6743927002,-165.7024793024,0.0897390097,124.7442117557,202.0773010254,74.1285894773,50.0033493042,0,11.7896194458,108.9227600098 +2011-11-29 20:18:32.366,134.6895294189,-165.6595857144,0.0458155908,-159.6815172849,202.1174316406,74.1490937052,50.0033721924,0.0009663915,11.7593688965,108.9072952271 +2011-11-29 20:18:32.400,134.6852111816,-165.5918985397,0.1096128747,-111.8864079639,202.0882110596,74.211118653,50.0033836365,0.000279732,11.7767715454,108.9169082642 +2011-11-29 20:18:32.433,134.7213134766,-165.5628019339,0.054535985,-79.6505583646,202.154586792,74.2437191459,50.00340271,0.0007629627,11.7818374634,108.9169311523 +2011-11-29 20:18:32.466,134.7651977539,-165.5492098574,0.1286593974,-174.6766921736,202.1805725098,74.2617166944,50.0034217834,0.000534053,11.7805938721,108.9138793945 +2011-11-29 20:18:32.500,134.7492523193,-165.4953196649,0.2289061546,-161.4176147681,202.1427307129,74.3477702477,50.0034141541,-0.0004577637,11.7642974854,108.9009094238 +2011-11-29 20:18:32.533,134.7688140869,-165.4549669073,0.131089583,-167.9339157646,202.2225799561,74.3969066286,50.0033988953,-0.0004068995,11.7806243896,108.9117889404 +2011-11-29 20:18:32.566,134.7589263916,-165.4231792069,0.0948160142,123.3637622225,202.2283172607,74.435626971,50.00340271,0.0002288679,11.7765731812,108.913848877 +2011-11-29 20:18:32.600,134.7152862549,-165.3821570907,0.1120574027,146.3185390417,202.2238311768,74.4714581434,50.0033798218,-0.0009918166,11.7603149414,108.9041671753 +2011-11-29 20:18:32.633,134.7539978027,-165.2968070468,0.188980639,-134.2053351524,202.1230926514,74.5237159208,50.0033683777,-0.0001780177,11.7878723145,108.9258575439 +2011-11-29 20:18:32.666,134.8057556152,-165.2369199482,0.1806704849,-126.7916292613,202.1176147461,74.5889920387,50.0033836365,0.0007883739,11.7643890381,108.9097671509 +2011-11-29 20:18:32.700,134.7784881592,-165.2223306641,0.0301558599,163.8141095818,202.2628479004,74.5928647559,50.0033874512,-0.0003305962,11.7604751587,108.9105987549 +2011-11-29 20:18:32.733,134.6609344482,-165.1897779825,0.0625008196,62.138397295,202.196105957,74.6077272476,50.003364563,-0.0006612064,11.7515945435,108.8908004761 +2011-11-29 20:18:32.766,134.6501464844,-165.1390023562,0.0032847053,-83.0411735516,202.1112518311,74.6657565347,50.0033760071,0.0008392381,11.7850570679,108.9185180664 +2011-11-29 20:18:32.800,134.779083252,-165.10231058,0.1332431585,-179.1212055496,202.125579834,74.7059180471,50.0033950806,0.0005594781,11.7792129517,108.9228591919 +2011-11-29 20:18:32.833,134.8428497314,-165.0791562387,0.1221353561,177.3503287431,202.231262207,74.7275151052,50.0033988953,-0.0004068995,11.76512146,108.9092102051 +2011-11-29 20:18:32.866,134.8453521729,-165.0392952547,0.1134274676,167.85431674,202.3348083496,74.7950656761,50.0033798218,-0.0004577637,11.7680358887,108.9015960693 +2011-11-29 20:18:32.900,134.848236084,-164.9791486089,0.18787314,161.5034565856,202.2967376709,74.8628211527,50.0033988953,0.0009918306,11.7611694336,108.9047164917 +2011-11-29 20:18:32.933,134.7936248779,-164.9522103428,0.1112930328,159.7579744224,202.19871521,74.866659719,50.0034217834,0.0001017144,11.7634124756,108.904838562 +2011-11-29 20:18:32.966,134.7298736572,-164.9396837759,0.0496879742,128.0910590905,202.1852874756,74.8938575323,50.0033988953,-0.0005849171,11.7817459106,108.9066390991 +2011-11-29 20:18:33.000,134.7444763184,-164.9036340374,0.1254227459,157.9576048591,202.2581939697,74.972090519,50.0033760071,-0.0004831888,11.7902755737,108.9223937988 +2011-11-29 20:18:33.033,134.7482452393,-164.8470254296,0.2068149447,-174.4236609856,202.2681274414,75.0059272762,50.0033988953,0.000813785,11.7630233765,108.9197921753 +2011-11-29 20:18:33.066,134.7265930176,-164.7819610476,0.2179476768,-152.4457241612,202.2308197021,75.0381725992,50.0034179688,0.000279732,11.7756347656,108.9063262939 +2011-11-29 20:18:33.100,134.8150482178,-164.726049119,0.2098569125,-129.2039291327,202.320602417,75.0913046408,50.00340271,-0.0006103422,11.7699890137,108.9146575928 +2011-11-29 20:18:33.133,134.8708343506,-164.6809562101,0.1772757769,-105.271847866,202.3301086426,75.1451948333,50.0033950806,-0.0001017004,11.8055496216,108.935508728 +2011-11-29 20:18:33.166,134.768737793,-164.6612169634,0.0632076338,156.8134252297,202.0765228271,75.2040642338,50.0034065247,0.0003306242,11.7782669067,108.9094924927 +2011-11-29 20:18:33.200,134.6920013428,-164.6235553003,0.1796914637,136.9721491626,202.0647888184,75.2294110658,50.0033950806,-0.0006866455,11.7698287964,108.9141921997 +2011-11-29 20:18:33.233,134.6973419189,-164.5946089586,0.1668328643,125.4736076571,202.1951293945,75.2385088778,50.0033798218,-0.0001271535,11.7836303711,108.9251861572 +2011-11-29 20:18:33.266,134.6754455566,-164.540677785,0.1221094579,78.20181377,202.2401428223,75.3161612985,50.0033874512,0.0003306102,11.7813949585,108.9153747559 +2011-11-29 20:18:33.300,134.6802520752,-164.4882492529,0.0849476531,50.457715135,202.2150878906,75.3557149239,50.00340271,0.0005086139,11.7857437134,108.9223480225 +2011-11-29 20:18:33.333,134.7559509277,-164.467745025,0.0371315889,159.7477974406,202.1168518066,75.3320005071,50.0033950806,-0.0004577497,11.7882385254,108.9227600098 +2011-11-29 20:18:33.366,134.7503662109,-164.417269927,0.1461791247,-114.7582976042,202.1208648682,75.3526345086,50.0033988953,0.0003814744,11.768447876,108.8964691162 +2011-11-29 20:18:33.400,134.6984100342,-164.3649233572,0.1945338994,-112.1854336457,202.0830535889,75.429699533,50.0034179688,0.0003814744,11.7840118408,108.9081573486 +2011-11-29 20:18:33.433,134.7460784912,-164.3746358862,0.1197025478,145.6389898608,202.1585540771,75.4726819135,50.0034103394,-0.0006103702,11.7366714478,108.9043731689 +2011-11-29 20:18:33.466,134.7147827148,-164.36719098,0.2006149143,98.0487315734,202.2359466553,75.4747992721,50.0033874512,-0.0006866455,11.7754821777,108.9074859619 +2011-11-29 20:18:33.500,134.7143096924,-164.2923321067,0.1159531549,59.5055574454,202.2961425781,75.5207459547,50.0033607483,-0.0003560493,11.7578735352,108.9059677124 +2011-11-29 20:18:33.533,134.7562561035,-164.2088945158,0.0198720824,-20.7373763957,202.2211151123,75.5880301482,50.003364563,5.08502125740051E-05,11.7658157349,108.9020767212 +2011-11-29 20:18:33.566,134.7349700928,-164.1760139852,0.0175287537,-99.670027237,202.1244506836,75.6122568292,50.003364563,0,11.7922668457,108.9155731201 +2011-11-29 20:18:33.600,134.6799163818,-164.1552911912,0.0296518002,9.7003465036,202.1844329834,75.6424530955,50.0033836365,0.0009918306,11.7694015503,108.9142990112 +2011-11-29 20:18:33.633,134.695892334,-164.096141753,0.0686378479,-5.9337870325,202.3030548096,75.7055025717,50.0034332275,0.0009918166,11.7821350098,108.9119873047 +2011-11-29 20:18:33.666,134.7987823486,-164.0667309584,0.0397295207,147.5365393556,202.3248138428,75.7455274803,50.0034332275,-2.79396772384644E-08,11.7738037109,108.9206390381 +2011-11-29 20:18:33.700,134.8126678467,-164.0374021262,0.1011244953,167.2430694508,202.296585083,75.7961186914,50.0034255981,-0.0003560213,11.7863464355,108.9205169678 +2011-11-29 20:18:33.733,134.759185791,-164.0189059739,0.1059787869,143.8537013551,202.2293243408,75.8239926934,50.0034179688,-2.54390761256218E-05,11.7775878906,108.9146957397 +2011-11-29 20:18:33.766,134.7437286377,-163.9863942734,0.1550430655,132.2346753127,202.1365356445,75.8602678281,50.0034103394,-0.0004323386,11.8264770508,108.9302597046 +2011-11-29 20:18:33.800,134.706817627,-163.8983394747,0.0685942397,130.2544395478,202.0716705322,75.957966854,50.0033760071,-0.0009409525,11.7464752197,108.8960113525 +2011-11-29 20:18:33.833,134.6802520752,-163.8248876203,0.0733544976,-14.0976965696,202.1639099121,76.0041389328,50.0033760071,0.0005086418,11.7760314941,108.9214782715 +2011-11-29 20:18:33.866,134.7329711914,-163.8283983375,0.1022025347,-85.076884113,202.2783966064,75.9629528921,50.0034141541,0.0010681199,11.7982711792,108.9394226074 +2011-11-29 20:18:33.900,134.7387695313,-163.8175519971,0.0756518617,-117.9051706605,202.3426513672,75.9898091959,50.0034255981,-0.0001780177,11.7732620239,108.9139404297 +2011-11-29 20:18:33.933,134.7136535645,-163.736668897,0.0210026484,35.4538249248,202.2837219238,76.0859441085,50.0033760071,-0.0015767198,11.7626800537,108.9135894775 +2011-11-29 20:18:33.966,134.7252807617,-163.6539553061,0.0488383248,104.8914882915,202.1305389404,76.1811910965,50.0033721924,0.0004831888,11.7481842041,108.8981933594 +2011-11-29 20:18:34.000,134.7636566162,-163.6283557571,0.0358877219,161.9342639373,202.106842041,76.2128626836,50.00340271,0.0006357953,11.7913589478,108.9102859497 +2011-11-29 20:18:34.033,134.7949676514,-163.5788095649,0.1125329658,-56.6989575834,202.2606964111,76.2285789489,50.0033798218,-0.0008392381,11.7852020264,108.9181671143 +2011-11-29 20:18:34.066,134.7140960693,-163.5316129577,0.0828156695,-68.4467053709,202.199005127,76.2866287267,50.0033493042,-0.0007120846,11.7867431641,108.9157180786 +2011-11-29 20:18:34.100,134.6399841309,-163.5370361279,0.1269385666,127.3450794897,202.1083526611,76.3335589565,50.0033683777,0.0009409525,11.7792739868,108.9228591919 +2011-11-29 20:18:34.133,134.6613616943,-163.5189907681,0.1049878374,134.7563948147,202.0841674805,76.3343171075,50.0033988953,0.0007120846,11.7503356934,108.8929595947 +2011-11-29 20:18:34.166,134.735458374,-163.460961481,0.0939195231,179.3661088125,202.0900421143,76.3639464681,50.0033988953,-0.0001017423,11.7975006104,108.9252624512 +2011-11-29 20:18:34.200,134.7007751465,-163.4276301578,0.1151335984,121.3637052486,202.1410980225,76.3960483572,50.0033950806,0.0001017144,11.7823257446,108.917388916 +2011-11-29 20:18:34.233,134.651184082,-163.4046397411,0.1276842207,105.8167671881,202.0353851318,76.4363669639,50.0033988953,0.0002034428,11.7592544556,108.9166564941 +2011-11-29 20:18:34.266,134.6968383789,-163.3698877386,0.1406074017,143.6472657177,202.1134033203,76.4844378352,50.0034065247,7.62892886996269E-05,11.7868118286,108.9137115479 +2011-11-29 20:18:34.300,134.7418670654,-163.317909999,0.059841767,142.0797782843,202.3025360107,76.5256511967,50.0034065247,0.0001017423,11.7790756226,108.9201049805 +2011-11-29 20:18:34.333,134.7531433105,-163.2855349023,0.1122234166,48.66631361,202.2786102295,76.5258492722,50.0034179688,0.0002288818,11.7952651978,108.9225311279 +2011-11-29 20:18:34.366,134.7572937012,-163.2314124833,0.0817365199,138.451431533,202.1609039307,76.5656214637,50.0034179688,0,11.7892684937,108.9206542969 +2011-11-29 20:18:34.400,134.7566833496,-163.1506386662,0.2066543102,-169.2542186519,202.1748046875,76.670410226,50.0034141541,-0.0001525786,11.7960128784,108.9314956665 +2011-11-29 20:18:34.433,134.7145233154,-163.0937978319,0.1403826326,-152.0971659475,202.1581115723,76.7436981558,50.0033912659,-0.0008392381,11.7707366943,108.9166564941 +2011-11-29 20:18:34.466,134.6585235596,-163.0870769258,0.0856863111,-112.8696341855,202.0853729248,76.7256254752,50.0033683777,-0.0003560493,11.7463684082,108.8980255127 +2011-11-29 20:18:34.500,134.7442932129,-163.0662585092,0.1240338758,-147.4618580672,202.2496185303,76.7407133631,50.0033683777,0,11.7565917969,108.9018707275 +2011-11-29 20:18:34.533,134.8587493896,-162.9751437857,0.2169630229,-148.9071124352,202.3663330078,76.8537256731,50.003364563,-2.79396772384644E-08,11.7757492065,108.9208831787 +2011-11-29 20:18:34.566,134.8060150146,-162.9142731398,0.2065442204,-161.1047238022,202.2419128418,76.9128819415,50.003364563,0.0001525646,11.7730865479,108.8979949951 +2011-11-29 20:18:34.600,134.7059020996,-162.9231114046,0.1493121237,150.0243654604,202.1651916504,76.8880883548,50.0033874512,0.0009155553,11.7918548584,108.9437332153 +2011-11-29 20:18:34.633,134.6365966797,-162.9167593286,0.1368422806,103.3235364052,202.0907592773,76.9116661678,50.0033988953,-0.0002034428,11.7642440796,108.9123153687 +2011-11-29 20:18:34.666,134.5773773193,-162.8680737402,0.1241775826,59.4443521203,202.0487670898,76.9809106256,50.0033721924,-0.0007120846,11.770904541,108.9137496948 +2011-11-29 20:18:34.700,134.5954437256,-162.7951136595,0.0131280441,-111.2218032369,202.1301727295,77.0286126668,50.0033836365,0.0008646771,11.764503479,108.91822052 +2011-11-29 20:18:34.733,134.7041931152,-162.7663449027,0.1801652163,-165.2506213077,202.1792755127,77.0520197251,50.0034141541,0.0006357953,11.7809295654,108.9195861816 +2011-11-29 20:18:34.766,134.7378845215,-162.7454035428,0.188690424,174.3628859624,202.1072540283,77.0845177651,50.0033950806,-0.0007120986,11.7545013428,108.8906707764 +2011-11-29 20:18:34.800,134.6867980957,-162.7251725224,0.1166008264,129.5163010042,202.138168335,77.1081433895,50.0033912659,0.0003814884,11.8030548096,108.928604126 +2011-11-29 20:18:34.833,134.6901855469,-162.682552142,0.0441596881,78.7631801876,202.2227783203,77.1197068997,50.0034065247,0,11.7925796509,108.9210357666 +2011-11-29 20:18:34.866,134.7968597412,-162.598062702,0.0608316101,-171.5508424396,202.3348236084,77.1855772441,50.0033988953,-0.0003560213,11.7862701416,108.9172515869 +2011-11-29 20:18:34.900,134.8657684326,-162.5360582447,0.1744561493,-156.1394494832,202.4206390381,77.2692743822,50.0033683777,-0.0009155273,11.7575683594,108.9031066895 +2011-11-29 20:18:34.933,134.7811584473,-162.5179719038,0.1408860087,-158.9023293044,202.3192749023,77.2828527983,50.0033683777,0.0003306242,11.7829666138,108.9094009399 +2011-11-29 20:18:34.966,134.716293335,-162.4898725055,0.0829108506,-164.80588037,202.2449035645,77.3255483108,50.0033798218,0.0001271535,11.7385406494,108.8974761963 +2011-11-29 20:18:35.000,134.7002563477,-162.4524703896,0.0555278771,131.888753552,202.1312103271,77.3966300895,50.0033950806,0.0007120706,11.7943954468,108.9192504883 +2011-11-29 20:18:35.033,134.7080993652,-162.4157103115,0.0682803169,34.1839971355,202.1895446777,77.3787554844,50.0034294128,0.0010172417,11.7832641602,108.9266662598 +2011-11-29 20:18:35.066,134.6999359131,-162.3754668369,0.049672313,-85.4425861015,202.2559814453,77.3712900876,50.0034332275,0,11.7675094604,108.9106750488 +2011-11-29 20:18:35.100,134.680267334,-162.3332289471,0.1187935993,-144.7068329636,202.1940002441,77.4402818284,50.0034255981,-0.0004068995,11.7794723511,108.9192276001 +2011-11-29 20:18:35.133,134.760925293,-162.2900211704,0.1141022891,-136.8065034148,202.2197265625,77.523562325,50.0033950806,-0.0010426668,11.7835769653,108.9260559082 +2011-11-29 20:18:35.166,134.8073425293,-162.2378931667,0.1400380731,-146.7045540128,202.2675018311,77.5985373115,50.0033721924,-0.0003814744,11.770614624,108.9145965576 +2011-11-29 20:18:35.200,134.7281036377,-162.1781699926,0.1549102217,-174.4885477828,202.1491241455,77.6698239959,50.0033721924,0,11.7702331543,108.9203109741 +2011-11-29 20:18:35.233,134.6944274902,-162.1402078012,0.0769574717,-169.9065426988,202.0553436279,77.7084418854,50.0033874512,0.0005594781,11.7734298706,108.9285736084 +2011-11-29 20:18:35.266,134.7548980713,-162.0916997977,0.15074417,-136.4375912374,202.1979980469,77.7297520757,50.00340271,0.0006357813,11.7644958496,108.9062576294 +2011-11-29 20:18:35.300,134.7930297852,-162.0462517189,0.1985771805,-170.4440512657,202.321105957,77.7757055884,50.0034179688,-2.79396772384644E-08,11.76902771,108.8959197998 +2011-11-29 20:18:35.333,134.8242340088,-162.0082622068,0.1733834893,153.9689656291,202.3746643066,77.8403874798,50.0034179688,-7.62892886996269E-05,11.7728729248,108.9195556641 +2011-11-29 20:18:35.366,134.7969970703,-161.9698765436,0.034623675,112.9225066798,202.2707366943,77.8689718215,50.0033874512,-0.0007120706,11.7464599609,108.9064483643 +2011-11-29 20:18:35.400,134.7587280273,-161.9503831837,0.0381100737,-126.9583541789,202.1031494141,77.8837455207,50.0033874512,0,11.7730941772,108.919883728 +2011-11-29 20:18:35.433,134.7606048584,-161.9021347274,0.0290505309,-114.0169010603,202.2265777588,77.9076102016,50.0033874512,5.08502125740051E-05,11.7838745117,108.9103546143 +2011-11-29 20:18:35.466,134.784286499,-161.8386276285,0.0898261145,167.5172469045,202.3139343262,77.9707416401,50.0033721924,-0.0004068855,11.7765960693,108.9187011719 +2011-11-29 20:18:35.500,134.7738342285,-161.7737544918,0.2114211768,-170.1364468663,202.1834869385,78.0877154599,50.0033721924,0.0001017144,11.7941589355,108.9271850586 +2011-11-29 20:18:35.533,134.675567627,-161.7371993194,0.0617153235,-148.1613650609,202.1043395996,78.113390141,50.0033950806,0.000534039,11.7529754639,108.9014892578 +2011-11-29 20:18:35.566,134.6022491455,-161.7528404526,0.1211414114,41.6951493355,202.0643310547,78.0698818359,50.0033874512,-0.0003814884,11.752243042,108.9142684937 +2011-11-29 20:18:35.600,134.6011505127,-161.7330055832,0.1315233558,57.1132392924,201.9939727783,78.0990467437,50.0033874512,0.0001271674,11.7611236572,108.908493042 +2011-11-29 20:18:35.633,134.6655883789,-161.6682553899,0.0381600745,50.9399367356,202.0675506592,78.1500204455,50.0034179688,0.001093545,11.7743530273,108.9119644165 +2011-11-29 20:18:35.666,134.7576293945,-161.6131221029,0.1193244159,-173.9403704603,202.2328796387,78.2123664122,50.0034255981,0,11.7710342407,108.9120025635 +2011-11-29 20:18:35.700,134.8315582275,-161.5887383276,0.3148454726,-174.5512079382,202.313079834,78.2375219989,50.0034103394,-0.0006103562,11.7580108643,108.9149398804 +2011-11-29 20:18:35.733,134.8184509277,-161.5512679098,0.2707233131,-154.2418453468,202.290222168,78.2436759994,50.0034141541,0.0003051711,11.776008606,108.9127578735 +2011-11-29 20:18:35.766,134.7516326904,-161.4886350751,0.1379662901,-117.1735617777,202.3079071045,78.3088906456,50.0034065247,-0.0005849311,11.7791824341,108.9274902344 +2011-11-29 20:18:35.800,134.6771087646,-161.4416023925,0.1267182976,104.2117888464,202.2276153564,78.414082389,50.0033912659,-0.0005086279,11.7609481812,108.9148101807 +2011-11-29 20:18:35.833,134.6946868896,-161.3781635955,0.1721171439,105.8723854185,202.21434021,78.4656366568,50.0033874512,0.0003560493,11.7744445801,108.9101715088 +2011-11-29 20:18:35.866,134.7263793945,-161.3349148376,0.1033174619,-156.1084404244,202.1803894043,78.4508971086,50.0034065247,0.0004577637,11.7823257446,108.9126281738 +2011-11-29 20:18:35.900,134.7148895264,-161.3152165721,0.1289021969,-130.6590462939,202.1926727295,78.4818242052,50.0034103394,-0.0001525925,11.7649230957,108.9052734375 +2011-11-29 20:18:35.933,134.6376800537,-161.2716672859,0.0537871681,-52.6509161982,202.1445007324,78.5819342878,50.0033950806,-0.0004068995,11.7714538574,108.9084854126 +2011-11-29 20:18:35.966,134.6202087402,-161.2129413194,0.1639854312,-18.3951269444,202.1566925049,78.6424019526,50.0033760071,-0.0006103562,11.7739105225,108.9050979614 +2011-11-29 20:18:36.000,134.691696167,-161.1561687871,0.1217822731,-47.5995370994,202.1675415039,78.6706925961,50.0033760071,-1.39698386192322E-08,11.7781524658,108.9181137085 +2011-11-29 20:18:36.033,134.7517700195,-161.121362143,0.0968797579,-111.7964065612,202.1486206055,78.6921052391,50.0033683777,-2.54390761256218E-05,11.775062561,108.9193115234 +2011-11-29 20:18:36.066,134.7429656982,-161.0764331587,0.1024669558,-94.6050663071,202.1840209961,78.7500320735,50.0033607483,-0.0002288818,11.7828521729,108.9166870117 +2011-11-29 20:18:36.100,134.7108764648,-161.0253570041,0.0646226332,-26.4052193407,202.2999572754,78.8328959285,50.0033874512,0.0010426808,11.7905044556,108.91381073 +2011-11-29 20:18:36.133,134.6978607178,-150.9955363982,0.1483157873,17.9617104604,202.2986297607,78.8383600798,50.0033988953,0.0001780037,11.7728271484,108.9080352783 +2011-11-29 20:18:36.166,134.7162475586,-150.9918754168,0.143864572,3.3657900107,202.2518615723,78.8089083041,50.0033988953,2.54251062870026E-05,11.7731018066,108.9122772217 +2011-11-29 20:18:36.200,134.7219390869,-150.9461131493,0.1135220826,-57.6719521816,202.2559967041,78.8311747208,50.0033950806,-7.62753188610077E-05,11.7768554688,108.9065322876 +2011-11-29 20:18:36.233,134.775390625,-150.8925508058,0.1018223539,-120.5725097955,202.3141174316,78.8847165737,50.00340271,0.0001271395,11.7682952881,108.9102249146 +2011-11-29 20:18:36.266,134.8208770752,-150.8726476346,0.1153751165,171.502512021,202.4161529541,78.9515089936,50.0034065247,2.54251062870026E-05,11.7555847168,108.9004974365 +2011-11-29 20:18:36.300,134.7667694092,-150.8499987273,0.160578236,174.0318266933,202.3248291016,78.9968272988,50.00340271,-0.0001017144,11.7701187134,108.9157104492 +2011-11-29 20:18:36.333,134.7205200195,-150.795971931,0.136921823,-129.1945854339,202.0892028809,78.9893892228,50.0034065247,0.0001780316,11.7804946899,108.9165420532 +2011-11-29 20:18:36.366,134.7395935059,-150.7307982659,0.1769560426,-99.1697500313,202.0307006836,79.0225497912,50.0034141541,0.0002288958,11.7788696289,108.9142150879 +2011-11-29 20:18:36.400,134.737411499,-150.6698046766,0.1233531609,-94.5592972094,202.1538391113,79.1081388917,50.0034065247,-0.0005086279,11.7685317993,108.9146118164 +2011-11-29 20:18:36.433,134.69090271,-150.6249439942,0.111702852,-27.7860240437,202.2061309814,79.1686407073,50.0033874512,-0.0005340669,11.7828903198,108.9197311401 +2011-11-29 20:18:36.466,134.7082519531,-150.6041665587,0.0622628257,-4.8175966646,202.1891326904,79.2036932382,50.0033760071,-0.0003051851,11.7657546997,108.919303894 +2011-11-29 20:18:36.500,134.748916626,-150.5705073865,0.1749843806,-120.9841516364,202.1865234375,79.2256113152,50.0033721924,-7.63032585382462E-05,11.7713088989,108.9196929932 +2011-11-29 20:18:36.533,134.7115020752,-150.5528581777,0.1519946456,-125.5559797385,202.1789398193,79.2574741477,50.0033721924,0,11.7867431641,108.9214630127 +2011-11-29 20:18:36.566,134.7803955078,-150.5355231576,0.0509760492,174.1212885111,202.3546447754,79.3138505291,50.0033760071,0.0003814604,11.7683029175,108.9243927002 +2011-11-29 20:18:36.600,134.8391571045,-150.4715516058,0.077448085,-107.0988005255,202.5014190674,79.3423255878,50.00340271,0.0008901022,11.7685623169,108.9199295044 +2011-11-29 20:18:36.633,134.7234954834,-150.3688938626,0.1580817103,-72.7647987755,202.2940216064,79.4358786888,50.0034103394,0,11.8068847656,108.9297637939 +2011-11-29 20:18:36.666,134.6461029053,-150.2950458573,0.1944588274,-65.9260103973,202.1041717529,79.5124382792,50.0034103394,-7.63032585382462E-05,11.7704544067,108.9225692749 +2011-11-29 20:18:36.700,134.6596221924,-150.2987614802,0.0875200406,-92.5495550273,202.1480712891,79.5082103921,50.0033950806,-0.0004831888,11.7606811523,108.9115753174 +2011-11-29 20:18:36.733,134.7589569092,-150.3438270683,0.109084934,-170.3765689967,202.1987457275,79.4805822769,50.0033988953,0.0001780177,11.7691879272,108.9108276367 +2011-11-29 20:18:36.766,134.8256988525,-150.3106186886,0.0789236948,-163.2455646353,202.2766876221,79.5403259416,50.0033950806,-0.0001780177,11.7783584595,108.92137146 +2011-11-29 20:18:36.800,134.7864227295,-150.2267439656,0.1562705189,166.7734119831,202.2233886719,79.6346918352,50.0033874512,-0.0002543209,11.7833251953,108.9214401245 +2011-11-29 20:18:36.833,134.7356262207,-150.169602603,0.1916223019,166.4542235828,202.1785888672,79.6717729322,50.0033950806,0.0003051711,11.7919616699,108.9260253906 +2011-11-29 20:18:36.866,134.6631317139,-150.1155348255,0.0775945485,-150.750935662,202.1928405762,79.7121530106,50.0033988953,5.08641824126244E-05,11.7776107788,108.904335022 +2011-11-29 20:18:36.900,134.6146697998,-150.0667809352,0.07820566,-35.6995034142,202.157043457,79.7413862202,50.0033912659,-0.0003560353,11.7724227905,108.9131622314 +2011-11-29 20:18:36.933,134.7396240234,-150.0417141409,0.1143516004,-44.8481593168,202.2801818848,79.7381692011,50.0033798218,-0.000279732,11.7727355957,108.9136047363 +2011-11-29 20:18:36.966,134.7952575684,-150.0249665171,0.0408340804,15.9196427005,202.4622192383,79.7953515448,50.0033760071,-7.63032585382462E-05,11.7807693481,108.9220352173 +2011-11-29 20:18:37.000,134.7595825195,-159.9965529301,0.1501219273,111.1084220966,202.4285430908,79.8810909095,50.0033721924,0,11.7744445801,108.9234695435 +2011-11-29 20:18:37.033,134.7493438721,-159.9480449267,0.1500513256,92.3830350153,202.3400421143,79.9461962727,50.0033798218,0.0004323386,11.7976379395,108.914642334 +2011-11-29 20:18:37.066,134.7560272217,-159.8791146576,0.0710950792,-15.320281648,202.3115997314,79.9858182,50.0033950806,0.0002288539,11.7722244263,108.9122619629 +2011-11-29 20:18:37.100,134.7656555176,-159.8171921625,0.1608465165,-94.5479317747,202.3856506348,79.9993283142,50.0034065247,0.0004069135,11.7701339722,108.9093856812 +2011-11-29 20:18:37.133,134.6812896729,-159.7753231029,0.0893111452,-29.2806623869,202.3395843506,79.9981603519,50.0034179688,0.0003560213,11.7878189087,108.9186401367 +2011-11-29 20:18:37.166,134.6441040039,-159.7399563834,0.145976454,28.5758859023,202.1477813721,80.0676575267,50.0034103394,-0.0004323386,11.7732086182,108.9188995361 +2011-11-29 20:18:37.200,134.6740570068,-159.6982922295,0.099530071,33.136037796,202.1912841797,80.1199631153,50.0033988953,-0.0001779897,11.7464828491,108.902305603 +2011-11-29 20:18:37.233,134.6808624268,-159.6868721532,0.0574505441,62.3430297625,202.2279205322,80.1012142461,50.0033950806,-0.0001271674,11.7772750854,108.9098052979 +2011-11-29 20:18:37.266,134.6808166504,-159.6704660388,0.0623938516,108.7509549839,202.2336273193,80.1180916435,50.0033836365,-0.0004831888,11.7641830444,108.9032287598 +2011-11-29 20:18:37.300,134.7102355957,-159.5885720706,0.0882130042,-76.3186554837,202.3133087158,80.2262886701,50.0033798218,-5.08781522512436E-05,11.7593841553,108.9036407471 +2011-11-29 20:18:37.333,134.7139434814,-159.515325122,0.2824039161,-50.5407067651,202.2900085449,80.3054983739,50.0033874512,0.0004323246,11.7756271362,108.9103088379 +2011-11-29 20:18:37.366,134.7419433594,-159.4977442151,0.2006050795,-55.5479989913,202.3203735352,80.3033468644,50.0033988953,0.00027976,11.7751083374,108.9130554199 +2011-11-29 20:18:37.400,134.7505950928,-159.5181938014,0.0473733544,102.7836509325,202.3843994141,80.2943515052,50.0033950806,-0.0001525786,11.7630233765,108.9026565552 +2011-11-29 20:18:37.433,134.68309021,-159.4739341756,0.125001654,76.330724428,202.2720794678,80.3492184148,50.0033950806,-2.5453045964241E-05,11.7725753784,108.9065246582 +2011-11-29 20:18:37.466,134.692565918,-159.3879284336,0.1253381819,-5.8748173136,202.2184143066,80.4303132508,50.0033874512,-0.0002034428,11.7545166016,108.9058532715 +2011-11-29 20:18:37.500,134.7101593018,-159.3577663182,0.1691512465,-53.059556171,202.2173461914,80.4616774795,50.0033950806,7.62892886996269E-05,11.7729797363,108.9157104492 +2011-11-29 20:18:37.533,134.6652069092,-159.3660445075,0.0715622306,-9.4208363797,202.1908416748,80.4571354037,50.0033912659,-0.0001525786,11.7705917358,108.9088287354 +2011-11-29 20:18:37.566,134.7009124756,-159.3275768821,0.0336652063,-32.8383610765,202.2059173584,80.4896744249,50.0033836365,0,11.7841186523,108.9185333252 +2011-11-29 20:18:37.600,134.772277832,-159.2610508396,0.1639339775,-116.0894331715,202.3365325928,80.5723743554,50.0033760071,-0.0003560493,11.7776107788,108.9149017334 +2011-11-29 20:18:37.633,134.8306121826,-159.2266540069,0.2428865582,-127.2831979758,202.4151153564,80.6133623206,50.0033760071,0,11.7585601807,108.9130630493 +2011-11-29 20:18:37.666,134.7405090332,-159.1824080415,0.1089276671,-134.9217127134,202.1821594238,80.6715008908,50.0033721924,0,11.761428833,108.9050140381 +2011-11-29 20:18:37.700,134.650100708,-159.1131089421,0.0590605699,138.2746252562,202.0925750732,80.720288932,50.0033683777,-0.0001271674,11.7725296021,108.9109115601 +2011-11-29 20:18:37.733,134.628692627,-159.0514733151,0.0676034763,18.4066938697,202.1913299561,80.731442631,50.0033874512,0.0008392381,11.7725067139,108.9236450195 +2011-11-29 20:18:37.766,134.6715545654,-159.0046591985,0.1007048339,-54.5512285046,202.2430419922,80.7881946728,50.00340271,0.0003051711,11.7372665405,108.8796157837 +2011-11-29 20:18:37.800,134.72265625,-158.9824884045,0.0652759075,-150.5314133821,202.2202758789,80.869262188,50.0034103394,0.0002034567,11.7655715942,108.9155883789 +2011-11-29 20:18:37.833,134.7367095947,-158.9654948938,0.0941890255,126.293175716,202.139541626,80.9269909469,50.0034065247,-0.0002034567,11.7664413452,108.9113464355 +2011-11-29 20:18:37.866,134.6955566406,-158.8959089265,0.0290705077,-117.6435880757,202.1318969727,80.9903682722,50.00340271,-0.0002288958,11.7673721313,108.9281463623 +2011-11-29 20:18:37.900,134.7431030273,-158.82887745,0.182022512,-98.2686841552,202.3955383301,80.9798975922,50.0033988953,5.08502125740051E-05,11.7591552734,108.9013061523 +2011-11-29 20:18:37.933,134.7813415527,-158.7861341262,0.2146588415,-111.3263461123,202.4386291504,80.9822130263,50.00340271,7.63032585382462E-05,11.7832489014,108.9240570068 +2011-11-29 20:18:37.966,134.7178497314,-158.7483358593,0.1565297693,-123.1326696021,202.2177276611,81.0364515585,50.0033950806,-0.0003306242,11.774269104,108.9103469849 +2011-11-29 20:18:38.000,134.7046508789,-158.7357819716,0.1204173937,-152.4012049882,202.074005127,81.0763945048,50.0033912659,0,11.7748794556,108.9128570557 +2011-11-29 20:18:38.033,134.728515625,-158.7267661219,0.0827944055,-156.4432562975,202.0936279297,81.1311179804,50.0033950806,0.0001017144,11.7731628418,108.9204559326 +2011-11-29 20:18:38.066,134.7312316895,-158.6765778919,0.0359580554,-120.4416843522,202.1300506592,81.2006902873,50.0034065247,2.54390761256218E-05,11.7844161987,108.9239044189 +2011-11-29 20:18:38.100,134.7095947266,-158.6169776612,0.0839281008,-122.7589489715,202.1022644043,81.2320681764,50.0033988953,-0.0004323386,11.7828521729,108.9276885986 +2011-11-29 20:18:38.133,134.6962127686,-158.5820753945,0.1227663979,-149.6268914303,202.0832977295,81.2369585918,50.0033836365,-0.0005340669,11.7168655396,108.8934249878 +2011-11-29 20:18:38.166,134.743637085,-158.5575823362,0.093999818,-173.0224203567,202.1764221191,81.2556391592,50.0033760071,0.000279746,11.7818908691,108.9241714478 +2011-11-29 20:18:38.200,134.7323303223,-158.5067793891,0.0411538556,33.8391477145,202.2415008545,81.300008068,50.0033950806,0.0002543349,11.7730102539,108.9110412598 +2011-11-29 20:18:38.233,134.7108154297,-158.4602248198,0.0644780174,92.9500909806,202.2968597412,81.346043543,50.0033836365,-0.0003560353,11.7816619873,108.9165725708 +2011-11-29 20:18:38.266,134.6897583008,-158.4359639878,0.1382803619,104.1747897117,202.3964538574,81.3940392823,50.0033874512,0.0004323386,11.7863998413,108.9233779907 +2011-11-29 20:18:38.300,134.7026672363,-158.3887263995,0.1475995779,82.8690732751,202.4562683105,81.4379505685,50.0033950806,1.39698386192322E-08,11.7680892944,108.9129638672 +2011-11-29 20:18:38.333,134.73046875,-158.3208206588,0.087883763,-8.6038048824,202.3672790527,81.4631812873,50.0033950806,7.63172283768654E-05,11.7674026489,108.9094085693 +2011-11-29 20:18:38.366,134.7516937256,-158.2729546931,0.1744945198,-67.4064607301,202.3070831299,81.4721493257,50.0033950806,0,11.7838592529,108.9206008911 +2011-11-29 20:18:38.400,134.7576904297,-158.2378885019,0.2177632004,-96.7351495922,202.2839508057,81.5253291786,50.0033988953,0.0001525925,11.7718276978,108.9054412842 +2011-11-29 20:18:38.433,134.7113037109,-158.205144575,0.1205437854,-103.9325092414,202.2230682373,81.6069840901,50.00340271,2.54251062870026E-05,11.7805633545,108.9156646729 +2011-11-29 20:18:38.466,134.6243438721,-158.1599970246,0.0149959587,40.7574360795,202.1462097168,81.6647948112,50.0034065247,0,11.7702484131,108.9123001099 +2011-11-29 20:18:38.500,134.6171722412,-158.1220211728,0.0637553558,69.9287744585,202.1313476563,81.7290737215,50.00340271,-0.0002288539,11.7621154785,108.9034576416 +2011-11-29 20:18:38.533,134.7271881104,-158.1178137763,0.0565765575,100.9877209921,202.222076416,81.7378231938,50.0033912659,-0.0002034567,11.7664794922,108.9010925293 +2011-11-29 20:18:38.566,134.7572021484,-158.0876106798,0.0471885093,21.0792546844,202.2964477539,81.7408899488,50.0033950806,2.54251062870026E-05,11.7771377563,108.8993301392 +2011-11-29 20:18:38.600,134.7246856689,-158.0210163354,0.0784630924,-90.352706643,202.2476501465,81.7857506312,50.0033950806,0,11.7776412964,108.9073562622 +2011-11-29 20:18:38.633,134.7450561523,-157.9572906704,0.1652958095,-112.8724823743,202.1917266846,81.8580003723,50.0033912659,0,11.7563247681,108.9095840454 +2011-11-29 20:18:38.666,134.7016601563,-157.9374694614,0.0402029455,-108.1286564486,202.2358093262,81.9104767157,50.0033836365,-0.0004323106,11.7742919922,108.9198532104 +2011-11-29 20:18:38.700,134.5825042725,-157.9276886305,0.2119918466,33.4225574015,202.2510986328,81.9337335098,50.0033912659,0.0002543069,11.7663116455,108.9172363281 +2011-11-29 20:18:38.733,134.5727081299,-157.9142468183,0.1915941983,41.4770306595,202.1038360596,81.9480837372,50.0033912659,5.08781522512436E-05,11.7563323975,108.8990478516 +2011-11-29 20:18:38.766,134.6298980713,-157.8750551928,0.0654268712,115.5541649067,202.0010681152,81.9685128331,50.0033988953,0.0001780037,11.7688598633,108.9119567871 +2011-11-29 20:18:38.800,134.6527252197,-157.814116245,0.0863623098,108.5584665927,202.1622161865,82.0295132525,50.0034141541,0.000559492,11.7751083374,108.9134750366 +2011-11-29 20:18:38.833,134.6612243652,-157.7449127684,0.1515554488,44.9151498122,202.3025054932,82.0915655211,50.0034141541,0,11.7694702148,108.9157485962 +2011-11-29 20:18:38.866,134.6530303955,-157.6909406135,0.1743898243,13.4230582947,202.3125457764,82.1475525818,50.0034103394,-0.0003814744,11.7750473022,108.9157714844 +2011-11-29 20:18:38.900,134.674911499,-157.6383481569,0.1927174181,3.3674721582,202.4317779541,82.1814166597,50.0033912659,-0.0005086139,11.7637405396,108.8886947632 +2011-11-29 20:18:38.933,134.7459869385,-157.5915340404,0.0571935177,27.1515336207,202.4242706299,82.2226641721,50.003364563,-0.0009663776,11.7910690308,108.9139709473 +2011-11-29 20:18:38.966,134.7545928955,-157.5647596988,0.0960649326,-135.0578110628,202.3026123047,82.254868514,50.003364563,0,11.7750473022,108.9122009277 +2011-11-29 20:18:39.000,134.7261657715,-157.5515637733,0.0560979135,-131.9567549154,202.2404632568,82.2638775335,50.0033912659,0.001373291,11.7956161499,108.9255752563 +2011-11-29 20:18:39.033,134.674118042,-157.5040666378,0.0551699549,-29.2821855191,202.152633667,82.3139291598,50.0033912659,-0.0004831888,11.7804641724,108.9166183472 +2011-11-29 20:18:39.066,134.6964111328,-157.435833048,0.0900994614,-116.394728967,202.1481781006,82.3764663718,50.0033912659,0.0004069135,11.7779846191,108.911239624 +2011-11-29 20:18:39.100,134.7173309326,-157.3651132694,0.1511427164,-86.2146911759,202.2864837646,82.4174270163,50.0034217834,0.0010426668,11.7788238525,108.9156494141 +2011-11-29 20:18:39.133,134.7283935547,-157.3729406662,0.0786082298,-25.4200909114,202.4187774658,82.4066284872,50.0034179688,-0.0007629488,11.7831420898,108.9188766479 +2011-11-29 20:18:39.166,134.7352294922,-157.3929804412,0.1845038235,91.167404777,202.4317016602,82.4202069032,50.0033912659,-0.0009409664,11.7730026245,108.9121246338 +2011-11-29 20:18:39.200,134.6986999512,-157.3280526629,0.171293065,123.1363442439,202.277053833,82.4871769081,50.0033760071,-0.0001525925,11.7850646973,108.9112167358 +2011-11-29 20:18:39.233,134.6657409668,-157.2376346187,0.0727209374,-116.7709631073,202.0845947266,82.5439835914,50.0033912659,0.0006612064,11.7610549927,108.9106903076 +2011-11-29 20:18:39.266,134.6753692627,-157.2030602011,0.0426415615,-134.678380394,202.0566253662,82.5890901607,50.0033874512,-0.000559506,11.7677612305,108.9033889771 +2011-11-29 20:18:39.300,134.7642364502,-157.1834985393,0.2124240398,142.1624918751,202.23387146,82.624559333,50.0033683777,-0.000559492,11.7911682129,108.9246673584 +2011-11-29 20:18:39.333,134.7706298828,-157.136151668,0.1887208372,127.0139519187,202.279083252,82.6907985076,50.0033721924,0.000559506,11.7480697632,108.903137207 +2011-11-29 20:18:39.366,134.7398071289,-157.100443439,0.1037463397,128.0675085982,202.2068023682,82.7639771544,50.0033950806,0.0006612064,11.7503585815,108.9021148682 +2011-11-29 20:18:39.400,134.8003845215,-157.0600633607,0.0911201984,177.6355847636,202.2670135498,82.8036468931,50.00340271,-0.0001017423,11.7537765503,108.9038696289 +2011-11-29 20:18:39.433,134.8237762451,-157.0155305273,0.1137414277,178.264604205,202.2506866455,82.8393141409,50.0034103394,0.0004323386,11.76537323,108.9154434204 +2011-11-29 20:18:39.466,134.7436218262,-156.9849859213,0.1817761362,125.3056259847,202.2383117676,82.8590738782,50.0034179688,0,11.7873687744,108.9196929932 +2011-11-29 20:18:39.500,134.6875915527,-156.9540998059,0.2754449844,98.6791921847,202.3603210449,82.8837376913,50.00340271,-0.000813799,11.8016204834,108.9375610352 +2011-11-29 20:18:39.533,134.7150268555,-156.907094444,0.1875057966,94.6058312882,202.3509063721,82.939041733,50.0033874512,-0.0001017144,11.7657699585,108.92578125 +2011-11-29 20:18:39.566,134.7206115723,-156.8527261382,0.0496733226,130.5454192668,202.1530151367,83.0002265676,50.0033912659,-5.08502125740051E-05,11.7868423462,108.9227752686 +2011-11-29 20:18:39.600,134.6899261475,-156.7805310387,0.0800142661,-157.2343151468,202.146774292,83.0648811382,50.0033836365,-0.0001525925,11.7833862305,108.9223937988 +2011-11-29 20:18:39.633,134.6804656982,-156.7481422816,0.0436520539,-167.1708880117,202.2189941406,83.0811028375,50.0033912659,0.0005849171,11.7750091553,108.9070129395 +2011-11-29 20:18:39.666,134.6875,-156.7390854508,0.0469127484,150.3639508041,202.1802215576,83.1013270277,50.00340271,0.0001780177,11.7559661865,108.9021759033 +2011-11-29 20:18:39.700,134.7135009766,-156.6800316352,0.0156053193,9.037426272,202.2780303955,83.1421305778,50.0034103394,0.0002034567,11.7828598022,108.9216537476 +2011-11-29 20:18:39.733,134.7740783691,-156.6181228006,0.0978960171,-29.6287083364,202.3872833252,83.1847987695,50.0034141541,-1.39698386192322E-08,11.7762451172,108.9254455566 +2011-11-29 20:18:39.766,134.7691497803,-156.5744369107,0.0548111536,-85.9410806279,202.3369903564,83.2500475666,50.0033988953,-0.0008392241,11.7494049072,108.9102630615 +2011-11-29 20:18:39.800,134.7658996582,-156.5336333606,0.1665652096,-121.7189980289,202.3106536865,83.2827095313,50.0033912659,0.0003306102,11.7788467407,108.927116394 +2011-11-29 20:18:39.833,134.7778930664,-156.4981027165,0.1322962046,-120.7963760758,202.3412322998,83.338375573,50.0034065247,0.0003814604,11.7773361206,108.914855957 +2011-11-29 20:18:39.866,134.7375030518,-156.4679952426,0.0602958016,149.0470630113,202.2129669189,83.3999224076,50.0034217834,0.0004831888,11.7903671265,108.9311981201 +2011-11-29 20:18:39.900,134.7284088135,-156.4727353939,0.1376226693,121.414412573,202.1714019775,83.3771232362,50.0034332275,0.0004577637,11.7649993896,108.9094924927 +2011-11-29 20:18:39.933,134.6734924316,-156.4476822601,0.1248818338,90.5577694125,202.1211090088,83.3786053872,50.0034332275,0,11.7777404785,108.9141235352 +2011-11-29 20:18:39.966,134.6500091553,-156.3704601413,0.0978360698,66.8289818962,202.090713501,83.4726502619,50.0034065247,-0.0010681059,11.7799835205,108.9339141846 +2011-11-29 20:18:40.000,134.6811218262,-156.2952734189,0.0485065766,-65.8217338993,202.097946167,83.5451595501,50.0033760071,-0.0008392381,11.7743148804,108.9165725708 +2011-11-29 20:18:40.033,134.6671142578,-156.2548933405,0.0945940614,-85.9574525914,201.9947357178,83.5786889487,50.0033760071,0,11.7837295532,108.9153594971 +2011-11-29 20:18:40.066,134.6767272949,-156.2264114517,0.0760143772,-122.9851238557,202.0511779785,83.6182630648,50.0033721924,7.62892886996269E-05,11.7677993774,108.921081543 +2011-11-29 20:18:40.100,134.7007293701,-156.1886131848,0.0964606404,-177.6168700453,202.2456207275,83.6621197095,50.0033836365,7.63032585382462E-05,11.7396697998,108.8919754028 +2011-11-29 20:18:40.133,134.7051696777,-156.1577953713,0.1002500206,137.3080032244,202.2971954346,83.6709443139,50.0033874512,0.0001525786,11.7814102173,108.915184021 +2011-11-29 20:18:40.166,134.723815918,-156.1213768026,0.0971610099,107.7021999274,202.2568206787,83.7135305433,50.0033912659,7.62892886996269E-05,11.7785263062,108.905960083 +2011-11-29 20:18:40.200,134.7310180664,-156.055315213,0.0983870849,101.9259772482,202.2744445801,83.8033611913,50.0033874512,-0.0002034567,11.7856521606,108.915687561 +2011-11-29 20:18:40.233,134.7640838623,-155.9978050202,0.029127432,65.4048464731,202.3522796631,83.8383112693,50.0033836365,0.0001271674,11.7587432861,108.91355896 +2011-11-29 20:18:40.266,134.7327728271,-155.9704979239,0.0970433131,52.886646517,202.3075714111,83.8396431562,50.0033874512,7.62892886996269E-05,11.7740020752,108.9220581055 +2011-11-29 20:18:40.300,134.6737060547,-155.9431088653,0.132908076,124.801885873,202.0939178467,83.8827962914,50.0034065247,0.0007883599,11.7727966309,108.9197692871 +2011-11-29 20:18:40.333,134.7059783936,-155.9017998812,0.1692603081,-174.098393717,202.0995483398,83.9541239569,50.0034179688,0.0001780316,11.7861633301,108.9252319336 +2011-11-29 20:18:40.366,134.7266235352,-155.8705312752,0.0645465702,176.7844748911,202.229309082,83.981028072,50.0034065247,-0.0003814884,11.7903442383,108.9161376953 +2011-11-29 20:18:40.400,134.7720947266,-155.8154526297,0.0320686214,128.8237608035,202.3261871338,84.0177608294,50.00340271,2.54251062870026E-05,11.7646179199,108.907081604 +2011-11-29 20:18:40.433,134.8078613281,-155.7493363986,0.0544594228,-102.8403688233,202.3780212402,84.0738844938,50.00340271,0,11.7628326416,108.9018707275 +2011-11-29 20:18:40.466,134.8226623535,-155.692522885,0.1777125746,-119.8518428758,202.4632263184,84.1079944585,50.0033836365,-0.0008646632,11.7680435181,108.9225158691 +2011-11-29 20:18:40.500,134.868270874,-155.6822776013,0.2303971797,-149.2662711025,202.4543457031,84.1157877043,50.0033836365,0,11.7668991089,108.9110183716 +2011-11-29 20:18:40.533,134.7557678223,-155.7142975281,0.0791226104,134.8319640277,202.2174224854,84.119496497,50.0033721924,-0.0005086139,11.7692565918,108.9091186523 +2011-11-29 20:18:40.566,134.687789917,-155.6771549594,0.0825629681,87.5782223305,202.2333984375,84.1719455197,50.0033569336,-0.0005340669,11.765411377,108.9067840576 +2011-11-29 20:18:40.600,134.6926422119,-155.5887040097,0.0735448301,-165.2445560997,202.3746490479,84.2378978263,50.0033721924,0.0010681199,11.7420501709,108.8954086304 +2011-11-29 20:18:40.633,134.6954345703,-155.5157029478,0.1475223601,-110.8027916219,202.2942047119,84.2798078671,50.0033988953,0.0004831888,11.7639923096,108.9195480347 +2011-11-29 20:18:40.666,134.7453765869,-155.4357624138,0.226041913,-97.3577964671,202.2542419434,84.3361569277,50.0033721924,-0.0009918027,11.7661361694,108.9237365723 +2011-11-29 20:18:40.700,134.8535003662,-155.3952320712,0.2754724324,-130.9805706189,202.3320465088,84.3935646677,50.0033683777,0.0005086279,11.7669830322,108.9008026123 +2011-11-29 20:18:40.733,134.8515167236,-155.4197797711,0.196094051,-150.4482606607,202.3654022217,84.4061117252,50.0033950806,0.0008646632,11.7632293701,108.9108657837 +2011-11-29 20:18:40.766,134.7228546143,-155.4005459584,0.0909693167,137.4862165203,202.2662658691,84.4436162939,50.0034065247,5.08502125740051E-05,11.78465271,108.9261474609 +2011-11-29 20:18:40.800,134.6081085205,-155.3280639909,0.0676980987,23.359267452,202.1061553955,84.4978411657,50.0034065247,-0.0002543209,11.7691726685,108.9225921631 +2011-11-29 20:18:40.833,134.594909668,-155.2589424765,0.2618276179,-10.3301198272,202.0442199707,84.5345466023,50.0034065247,0.0002543209,11.7692489624,108.9112319946 +2011-11-29 20:18:40.866,134.6648254395,-155.2196005869,0.2542935014,-10.3349154737,202.1622161865,84.5755209072,50.0034179688,0.000279746,11.7569046021,108.9038391113 +2011-11-29 20:18:40.900,134.7518005371,-155.1900805093,0.0644170046,-145.8374888184,202.4243164063,84.6149515892,50.0034065247,-0.0004323246,11.7850952148,108.9338378906 +2011-11-29 20:18:40.933,134.7995605469,-155.1526237519,0.1554074436,-179.1590721183,202.5410308838,84.6619228002,50.0033836365,-0.0004831888,11.7955932617,108.9221725464 +2011-11-29 20:18:40.966,134.7221069336,-155.1017934841,0.0459256545,75.5766237323,202.4159698486,84.694666727,50.0033721924,-0.0002034567,11.7700958252,108.9072265625 +2011-11-29 20:18:41.000,134.6624450684,-155.0675469156,0.1439167112,114.9695553552,202.2284240723,84.7653933359,50.0033874512,0.000279732,11.7663116455,108.9047851563 +2011-11-29 20:18:41.033,134.7215118408,-155.0492146879,0.2483582795,145.5017030585,202.1583099365,84.8153083584,50.0033874512,2.5453045964241E-05,11.7766113281,108.9142837524 +2011-11-29 20:18:41.066,134.755645752,-155.027303441,0.097258985,155.997149322,202.211517334,84.7928165454,50.0033950806,0.0003814744,11.7636108398,108.9150314331 +2011-11-29 20:18:41.100,134.7515411377,-154.9678124933,0.024211362,-88.9067555957,202.3748321533,84.799626244,50.0034141541,0.0006357674,11.7720565796,108.9140548706 +2011-11-29 20:18:41.133,134.7322692871,-154.9452045672,0.1179030389,105.3342074931,202.3914337158,84.8448625869,50.0034217834,0,11.7910003662,108.9355010986 +2011-11-29 20:18:41.166,134.7382659912,-154.9437429067,0.2110021859,111.4015464951,202.3725585938,84.8786788535,50.0034065247,-0.0006866455,11.8018112183,108.9446105957 +2011-11-29 20:18:41.200,134.6704101563,-154.8617123348,0.1362928599,69.1090697959,202.3252563477,84.9365510463,50.0033950806,-7.62753188610077E-05,11.7819366455,108.9292221069 +2011-11-29 20:18:41.233,134.6262512207,-154.7834930084,0.1864733398,18.2179791581,202.2193145752,85.0082953534,50.0033874512,-0.0004323386,11.7785720825,108.9214553833 +2011-11-29 20:18:41.266,134.6722717285,-154.7525659118,0.1370951384,13.4818423178,202.2602233887,85.0344208269,50.0033798218,0,11.7962799072,108.9330368042 +2011-11-29 20:18:41.300,134.7080383301,-154.7372662881,0.0598000363,20.5850324414,202.3056335449,85.0366816195,50.0033874512,0.0004323386,11.7690429688,108.9185943604 +2011-11-29 20:18:41.333,134.7066955566,-154.6827203974,0.1445643604,-25.6916250819,202.2525939941,85.0952095105,50.00340271,0,11.7643814087,108.9058074951 +2011-11-29 20:18:41.366,134.6741790771,-154.6128202414,0.2068198174,-16.8185263311,202.2876434326,85.1790978939,50.0033912659,-0.0005086279,11.7678985596,108.9100494385 +2011-11-29 20:18:41.400,134.6716003418,-154.5658012192,0.1243391708,-23.2250815556,202.2881622314,85.2365192943,50.0033798218,7.63032585382462E-05,11.7673950195,108.9071044922 +2011-11-29 20:18:41.433,134.7057342529,-154.5413764627,0.1134059578,-78.3659432157,202.2781219482,85.2838729958,50.0033874512,0.0002288818,11.7863616943,108.9109191895 +2011-11-29 20:18:41.466,134.7790222168,-154.4988790257,0.1926959902,-106.1858159694,202.3787231445,85.3162549227,50.0033874512,0,11.7692871094,108.9065170288 +2011-11-29 20:18:41.500,134.7562561035,-154.4582940416,0.1238667741,-128.5303631975,202.3886413574,85.3598930013,50.0033683777,-0.0006357813,11.7668304443,108.925201416 +2011-11-29 20:18:41.533,134.7096252441,-154.4169167556,0.0497312769,4.1587177705,202.3314666748,85.4076565141,50.0033683777,0,11.7526092529,108.9104309082 +2011-11-29 20:18:41.566,134.7501068115,-154.3930384143,0.0602616258,75.7403092157,202.2909698486,85.4410902901,50.0033912659,0.0008646492,11.7629241943,108.9104156494 +2011-11-29 20:18:41.600,134.7784881592,-154.3681628654,0.1330206692,156.3733834623,202.271774292,85.499071766,50.0034103394,0.0003560213,11.7723999023,108.9222412109 +2011-11-29 20:18:41.633,134.7330169678,-154.321321428,0.0758437738,164.9866071755,202.2585296631,85.535503995,50.0033988953,-0.0006866455,11.7752456665,108.9170608521 +2011-11-29 20:18:41.666,134.7467346191,-154.2489760643,0.1045479998,-120.1841179186,202.3195037842,85.5762597338,50.0033798218,-0.0001780037,11.7905654907,108.9289321899 +2011-11-29 20:18:41.700,134.7456665039,-154.200509042,0.160201624,-96.9351443613,202.2417907715,85.6271992846,50.0033950806,0.0006103422,11.7789001465,108.9252090454 +2011-11-29 20:18:41.733,134.7665557861,-154.1642270771,0.1503203213,-72.7429694909,202.346786499,85.656965249,50.0033950806,-0.0005086418,11.7685241699,108.9113006592 +2011-11-29 20:18:41.766,134.7881469727,-154.1156644321,0.132433638,-43.6976856681,202.5795135498,85.6803108356,50.0033760071,-2.5453045964241E-05,11.7709274292,108.9076385498 +2011-11-29 20:18:41.800,134.7022247314,-154.0833029958,0.1331664026,-9.2212616673,202.4610290527,85.732281745,50.0033798218,7.62892886996269E-05,11.7869644165,108.9273300171 +2011-11-29 20:18:41.833,134.6435089111,-154.0564740128,0.0073276451,6.5755635597,202.2114257813,85.7742942386,50.00340271,0.000279746,11.7691497803,108.9097290039 +2011-11-29 20:18:41.866,134.6224365234,-154.013443821,0.1199463829,84.6434949498,202.1355285645,85.8233486572,50.0034065247,0.0002034567,11.7810745239,108.9196853638 +2011-11-29 20:18:41.900,134.6667175293,-153.9612884965,0.1940672547,64.8146771477,202.2714080811,85.8798206613,50.0034103394,5.08641824126244E-05,11.792175293,108.9354400635 +2011-11-29 20:18:41.933,134.7656707764,-153.9125755873,0.1228558719,19.3303608418,202.4282226563,85.9320442877,50.0034065247,-7.62753188610077E-05,11.7689590454,108.909614563 +2011-11-29 20:18:41.966,134.8261108398,-153.8678924898,0.168599695,-52.5819005517,202.5654449463,85.97473297,50.0033950806,-0.0004068995,11.7891616821,108.9218597412 +2011-11-29 20:18:42.000,134.7808380127,-153.841145469,0.1176332161,-76.8727614103,202.4199829102,85.9957016507,50.0033912659,5.08641824126244E-05,11.7780303955,108.915763855 +2011-11-29 20:18:42.033,134.7581939697,-153.810600863,0.0610621236,-139.47854172,202.2053527832,86.0270453888,50.0033950806,7.62753188610077E-05,11.7815322876,108.9165496826 +2011-11-29 20:18:42.066,134.7676086426,-153.7704256903,0.1081344038,-84.3041574914,202.3021697998,86.0426796918,50.0033798218,-0.0003814744,11.7822341919,108.9270477295 +2011-11-29 20:18:42.100,134.8624572754,-153.7254693852,0.2114848644,-116.0299422239,202.5532073975,86.0673161842,50.0033760071,5.08502125740051E-05,11.7855606079,108.9287185669 +2011-11-29 20:18:42.133,134.8675079346,-153.7016047043,0.1913362443,-139.4024534127,202.4571228027,86.1080514324,50.0033950806,0.0005594781,11.7536087036,108.9038467407 +2011-11-29 20:18:42.166,134.7385559082,-153.6649675695,0.101163581,-141.8349843044,202.18019104,86.1672077008,50.00340271,0,11.7698516846,108.928894043 +2011-11-29 20:18:42.200,134.7018585205,-153.5914747341,0.2044645995,-123.3694586003,202.1836547852,86.2271426107,50.0033950806,-0.000279746,11.7713928223,108.9223861694 +2011-11-29 20:18:42.233,134.7814331055,-153.5289511824,0.3035290241,-120.5370201326,202.383102417,86.2517722729,50.0033988953,7.62892886996269E-05,11.7964019775,108.9220123291 +2011-11-29 20:18:42.266,134.8200836182,-153.496658048,0.2331630886,-109.9243063512,202.5321807861,86.2794277088,50.0033988953,0,11.7711715698,108.9158782959 +2011-11-29 20:18:42.300,134.7299346924,-153.4931883119,0.0373257846,-58.8474755491,202.4102783203,86.3299232974,50.0033798218,-0.0004323665,11.808013916,108.9254150391 +2011-11-29 20:18:42.333,134.6224517822,-153.4616601587,0.1619272977,75.354417188,202.076675415,86.3876725468,50.0033798218,0,11.802192688,108.9336166382 +2011-11-29 20:18:42.366,134.6728668213,-153.4046827207,0.1101614684,109.5622448535,202.0001983643,86.4571424009,50.0033874512,0.000559506,11.7839813232,108.9097900391 +2011-11-29 20:18:42.400,134.7679290771,-153.3525137358,0.078026861,-130.9792319018,202.2978973389,86.4927618374,50.0033988953,-0.0001017284,11.7793960571,108.9228439331 +2011-11-29 20:18:42.433,134.7493133545,-153.3302883002,0.1194841638,-73.5409951332,202.3692169189,86.493868328,50.0033988953,1.39698386192322E-08,11.7874908447,108.9253997803 +2011-11-29 20:18:42.466,134.7184448242,-153.3082267892,0.183031559,-76.2950981613,202.3005981445,86.503362291,50.0033950806,0.0003051572,11.7512893677,108.9144439697 +2011-11-29 20:18:42.500,134.6681060791,-153.257997578,0.1059410796,-76.4185606607,202.3044433594,86.5516244076,50.0033988953,-0.0002034567,11.7945175171,108.924911499 +2011-11-29 20:18:42.533,134.7147521973,-153.1920452714,0.0842255726,-103.3736290126,202.3193511963,86.6219138844,50.0033683777,-0.0009918166,11.7769699097,108.91015625 +2011-11-29 20:18:42.566,134.7369537354,-153.1373217958,0.1040268168,-109.6229037635,202.246383667,86.7046479658,50.0033607483,0.0002034288,11.7813415527,108.9281921387 +2011-11-29 20:18:42.600,134.6891479492,-153.1115036807,0.0805980414,-57.8495780812,202.2533111572,86.7226045331,50.0033760071,0.0003305962,11.7647857666,108.9031677246 +2011-11-29 20:18:42.633,134.7186431885,-153.1092087372,0.1012736261,-86.2105179303,202.2967834473,86.6902977384,50.0033912659,0.0004323106,11.7718811035,108.9115600586 +2011-11-29 20:18:42.666,134.7843780518,-153.0306752221,0.1858794093,-129.9743744711,202.3423461914,86.7757775558,50.0033912659,7.63032585382462E-05,11.775428772,108.9178924561 +2011-11-29 20:18:42.700,134.7904663086,-152.942429178,0.0958134085,-135.8574486296,202.3694458008,86.8990214892,50.0034103394,0.0003814744,11.7494277954,108.9124679565 +2011-11-29 20:18:42.733,134.6834869385,-152.9268836675,0.0624641702,24.2386918737,202.1978302002,86.9267179063,50.0034179688,0.000279732,11.7865753174,108.9280548096 +2011-11-29 20:18:42.766,134.6974487305,-152.9419100836,0.067499727,162.075102438,202.1490783691,86.9135424714,50.0034217834,1.39698386192322E-08,11.7759017944,108.9108657837 +2011-11-29 20:18:42.800,134.8069458008,-152.8864626079,0.2150471509,-166.9105212005,202.3898162842,86.9500908136,50.0034141541,-0.0004323246,11.798614502,108.9273223877 +2011-11-29 20:18:42.833,134.81300354,-152.8099098477,0.0876007527,-75.6985767599,202.560256958,86.9883876843,50.0033988953,-0.0006103562,11.7689056396,108.9300003052 +2011-11-29 20:18:42.866,134.7479248047,-152.7872062989,0.2181064337,-28.4030701635,202.392074585,86.9891458353,50.0033836365,-0.0004323386,11.7557373047,108.9005203247 +2011-11-29 20:18:42.900,134.7347869873,-152.7431515788,0.1024229825,-75.5003783306,202.35546875,87.0294166307,50.0033798218,-0.0001525925,11.7905960083,108.9244995117 +2011-11-29 20:18:42.933,134.7722930908,-152.6902176127,0.1747537702,-147.7518815598,202.4282836914,87.0967486355,50.0033760071,-7.63032585382462E-05,11.8031539917,108.9366455078 +2011-11-29 20:18:42.966,134.763458252,-152.650547874,0.1360649914,-118.5859629358,202.3986206055,87.1676186783,50.0033798218,0.0002288818,11.7508468628,108.9097137451 +2011-11-29 20:18:43.000,134.7554016113,-152.6444690057,0.118851617,-115.0652736262,202.3354644775,87.2068786057,50.0033874512,0.0003306242,11.7524871826,108.9007873535 +2011-11-29 20:18:43.033,134.7252349854,-152.634770137,0.1285763085,131.5047739773,202.2749633789,87.2315765697,50.0033874512,1.39698386192322E-08,11.7874908447,108.9216461182 +2011-11-29 20:18:43.066,134.7059783936,-152.5827104352,0.1675840616,102.6442740922,202.2278289795,87.247292835,50.0033798218,-0.0003051711,11.7684020996,108.9022903442 +2011-11-29 20:18:43.100,134.65965271,-152.5340931487,0.071462974,40.0038954593,202.2253265381,87.2577976659,50.0033760071,0.0001271395,11.7506484985,108.909614563 +2011-11-29 20:18:43.133,134.69090271,-152.4964724667,0.0852345079,58.307432982,202.2906799316,87.2958418196,50.0033836365,0.0001780037,11.775390625,108.9304504395 +2011-11-29 20:18:43.166,134.7795257568,-152.4432516327,0.1178958565,112.6049165438,202.3601226807,87.3847708826,50.00340271,0.0007120846,11.7657775879,108.9189376831 +2011-11-29 20:18:43.200,134.8017730713,-152.3818755528,0.1506919265,-173.9460121966,202.3481140137,87.4837266633,50.00340271,-0.0003306102,11.7623748779,108.9036102295 +2011-11-29 20:18:43.233,134.7667999268,-152.3363045307,0.225970611,-153.1851604407,202.3450927734,87.5157602505,50.00340271,0.0001017423,11.7944869995,108.9120788574 +2011-11-29 20:18:43.266,134.7314453125,-152.3020443018,0.2101606131,-161.7488516221,202.2988128662,87.5512977248,50.0034179688,0.0003051851,11.7625808716,108.9077682495 +2011-11-29 20:18:43.300,134.7435455322,-152.2748464885,0.19272089,171.3453357079,202.3381652832,87.6140876538,50.0034065247,-0.0002543209,11.7669677734,108.9128723145 +2011-11-29 20:18:43.333,134.7812805176,-152.2483316942,0.1476919949,164.7460205922,202.372177124,87.6291072398,50.00340271,-0.0002288818,11.7666473389,108.9106063843 +2011-11-29 20:18:43.366,134.746383667,-152.1903433881,0.0873135179,-83.458429808,202.2980041504,87.6393525235,50.00340271,0,11.7926712036,108.9352798462 +2011-11-29 20:18:43.400,134.7128601074,-152.1383793089,0.2168589234,-77.1296653156,202.3057403564,87.6750812431,50.0034103394,0.0004577637,11.7658920288,108.9100570679 +2011-11-29 20:18:43.433,134.7460021973,-152.0997340986,0.1948777139,-90.5612391486,202.3621826172,87.6989937354,50.0034065247,-0.0003560493,11.7437667847,108.9025192261 +2011-11-29 20:18:43.466,134.7021331787,-152.0867020977,0.0112930275,46.8075083632,202.3208007813,87.7260139637,50.0033836365,-0.0007883878,11.7909240723,108.9377441406 +2011-11-29 20:18:43.500,134.5964508057,-152.0556383973,0.1639538705,52.485939809,202.1834411621,87.7848150623,50.003364563,-0.0003560493,11.7865142822,108.9313812256 +2011-11-29 20:18:43.533,134.6204833984,-151.9950546194,0.1416492015,-7.5464104903,202.0970306396,87.837339217,50.0033760071,0.0006103562,11.7742004395,108.915397644 +2011-11-29 20:18:43.566,134.7360076904,-151.9255642748,0.1068310291,-109.7495081499,202.1527557373,87.9005457876,50.0033912659,0.0001525786,11.7680053711,108.9146270752 +2011-11-29 20:18:43.600,134.7833862305,-151.8789687242,0.1684230864,-169.8733069983,202.2683563232,87.9640597167,50.0033760071,-0.0005086279,11.7859191895,108.9189300537 +2011-11-29 20:18:43.633,134.7754058838,-151.8759497806,0.1104474589,157.1154561948,202.2754364014,87.9607402447,50.0033836365,0.000534053,11.7408676147,108.8938446045 +2011-11-29 20:18:43.666,134.7388458252,-151.835993174,0.0816327929,142.2427192771,202.2074127197,87.9884503222,50.00340271,0.0005594781,11.762588501,108.9201507568 +2011-11-29 20:18:43.700,134.6904296875,-151.773783811,0.1040294245,173.8307732449,202.264465332,88.0458375716,50.0033988953,-0.0004577637,11.7603225708,108.9237365723 +2011-11-29 20:18:43.733,134.6193847656,-151.7248113547,0.1117637306,-86.6654631705,202.2624969482,88.0953564431,50.0033798218,-0.000534053,11.7786254883,108.92137146 +2011-11-29 20:18:43.766,134.5744476318,-151.6787348985,0.1515857428,-48.3743776645,202.1436157227,88.1504897301,50.0033874512,0.0005340669,11.7867660522,108.921257019 +2011-11-29 20:18:43.800,134.6831817627,-151.6442151225,0.1014171019,-175.2169464766,202.1700286865,88.2019278847,50.00340271,0.0002543209,11.7920455933,108.9167404175 +2011-11-29 20:18:43.833,134.7441864014,-151.6028514968,0.1419478357,146.0946317803,202.3056640625,88.2458938124,50.0033950806,-0.0003051711,11.7767105103,108.92527771 +2011-11-29 20:18:43.866,134.7205657959,-151.567074966,0.0547821969,94.2916152657,202.3064727783,88.2732350597,50.0034065247,0.0006358232,11.7594070435,108.9155731201 +2011-11-29 20:18:43.900,134.7177581787,-151.5152884717,0.1392075866,-18.0417466171,202.3805541992,88.2868407965,50.0034217834,0.0001525925,11.7779464722,108.9258422852 +2011-11-29 20:18:43.933,134.7096557617,-151.4799627333,0.1845961958,-17.5156103151,202.3767852783,88.3319951771,50.0034217834,-1.39698386192322E-08,11.7858276367,108.9328842163 +2011-11-29 20:18:43.966,134.7762145996,-151.4634473359,0.0804610997,-136.3500418726,202.3385925293,88.3706335572,50.0033874512,-0.0013224408,11.7760162354,108.9230575562 +2011-11-29 20:18:44.000,134.7941436768,-151.4450604666,0.1705620438,-157.2871534902,202.2035522461,88.3629017831,50.0033760071,5.08502125740051E-05,11.7528610229,108.8876113892 +2011-11-29 20:18:44.033,134.7136993408,-151.4021532183,0.0442956798,-1.0645358884,202.1844940186,88.3749502368,50.0033798218,0,11.7874984741,108.9204330444 +2011-11-29 20:18:44.066,134.7111358643,-151.3437687612,0.0739261806,-4.0665785186,202.1938171387,88.4531559028,50.0033721924,-0.0003560493,11.7830734253,108.9288330078 +2011-11-29 20:18:44.100,134.7422180176,-151.3116122306,0.0561677814,12.4307376762,202.2258911133,88.5107412277,50.0033798218,0.000534053,11.7649078369,108.9060974121 +2011-11-29 20:18:44.133,134.7281646729,-151.287938795,0.1143635586,43.9292495715,202.2843780518,88.533861418,50.0033988953,0.0007120706,11.7716217041,108.9180145264 +2011-11-29 20:18:44.166,134.7301330566,-151.2440889805,0.0454457663,-16.1575689251,202.3351135254,88.5614895332,50.00340271,-0.0002543069,11.7707214355,108.919052124 +2011-11-29 20:18:44.200,134.7536773682,-151.1968240714,0.0925513059,150.9045602769,202.3674926758,88.6230841791,50.0033836365,-0.0005086418,11.7929077148,108.918006897 +2011-11-29 20:18:44.233,134.7168273926,-151.1259813494,0.1645302474,123.7318411169,202.2472839355,88.7230303373,50.0033798218,0.000279732,11.7539749146,108.9025115967 +2011-11-29 20:18:44.266,134.7218170166,-151.0568188538,0.0870875046,90.5609386203,202.3177032471,88.7800760772,50.0033988953,0.0004832027,11.7665328979,108.9118881226 +2011-11-29 20:18:44.300,134.768081665,-151.0140891904,0.0917426348,9.1813212823,202.4943847656,88.7957308708,50.0033912659,-0.0004323386,11.7603378296,108.9161911011 +2011-11-29 20:18:44.333,134.7150726318,-151.018009719,0.132144779,15.2514879827,202.4049072266,88.8107914379,50.0033760071,-0.0003814884,11.7702636719,108.9178695679 +2011-11-29 20:18:44.366,134.5744476318,-151.0148951527,0.2021651864,45.7268938894,202.1295928955,88.8467250631,50.00340271,0.0009409525,11.7660217285,108.9187774658 +2011-11-29 20:18:44.400,134.5909729004,-150.9512377896,0.1213496327,44.3476840356,202.1221618652,88.891346689,50.0034065247,-0.0007120706,11.7686538696,108.9081192017 +2011-11-29 20:18:44.433,134.686920166,-150.8714475198,0.0281964988,149.0347550104,202.2240905762,88.9417056737,50.0033607483,-0.0012461375,11.787689209,108.9276199341 +2011-11-29 20:18:44.466,134.6960601807,-150.8412034421,0.1557296962,112.4627939675,202.2109832764,88.9854325448,50.0033760071,0.0011698343,11.7523117065,108.8995132446 +2011-11-29 20:18:44.500,134.6698608398,-150.8082409492,0.1204229817,95.0388447911,202.210647583,89.0100963579,50.0034217834,0.0012715766,11.7645339966,108.9227828979 +2011-11-29 20:18:44.533,134.6867218018,-150.7709890975,0.0973708779,-52.1593748044,202.1360626221,89.0317002462,50.0034103394,-0.0008392381,11.7549133301,108.8939361572 +2011-11-29 20:18:44.566,134.76222229,-150.7418651708,0.0759391934,-88.9733226194,202.2412261963,89.0796140233,50.0033836365,-0.0002288818,11.7802429199,108.9165344238 +2011-11-29 20:18:44.600,134.7519378662,-150.6811174684,0.1592244208,-156.0823627621,202.3314208984,89.1489882547,50.0033874512,0.0002034428,11.7536773682,108.8992843628 +2011-11-29 20:18:44.633,134.6801605225,-150.6392484087,0.1437509209,-143.4848028381,202.2668762207,89.174020898,50.0033874512,-0.0002543069,11.7488632202,108.8985671997 +2011-11-29 20:18:44.666,134.6676177979,-150.6150831995,0.0362857729,157.3157993036,202.2705383301,89.2146195424,50.0033760071,0,11.7865600586,108.9287567139 +2011-11-29 20:18:44.700,134.6898956299,-150.5788831969,0.0973593742,68.5785007011,202.3316040039,89.2621098477,50.0033798218,7.62753188610077E-05,11.762878418,108.9155578613 +2011-11-29 20:18:44.733,134.7665252686,-150.5485708173,0.0845773295,41.2632696441,202.3072509766,89.2860360003,50.00340271,0.0006866455,11.7973709106,108.9262542725 +2011-11-29 20:18:44.766,134.8052825928,-150.4941342096,0.086912781,-41.5930721584,202.3694000244,89.3231717389,50.0034103394,2.54251062870026E-05,11.7798156738,108.9229202271 +2011-11-29 20:18:44.800,134.776763916,-150.4320887712,0.0729341283,-90.3379192835,202.4706573486,89.395715178,50.0034103394,-1.39698386192322E-08,11.7773742676,108.9253311157 +2011-11-29 20:18:44.833,134.7384033203,-150.4167618267,0.0866294876,118.3630665424,202.3032684326,89.421854312,50.0033988953,-0.0001780177,11.7803192139,108.9196472168 +2011-11-29 20:18:44.866,134.7169647217,-150.3976236367,0.1200720519,83.8780424797,202.1879272461,89.4223870667,50.0033912659,-0.0003306102,11.778175354,108.9108886719 +2011-11-29 20:18:44.900,134.7059020996,-150.3390206136,0.1968485564,94.0327852471,202.3366851807,89.5111180543,50.0033798218,-0.0003560493,11.7824020386,108.9120635986 +2011-11-29 20:18:44.933,134.6353912354,-150.277439628,0.2543467581,80.7568304441,202.3519134521,89.6002725135,50.0033683777,-0.0003051711,11.7572937012,108.9188079834 +2011-11-29 20:18:44.966,134.577255249,-150.2192464163,0.0954119042,21.5723516538,202.188583374,89.6203942508,50.0033798218,0.0004068995,11.7618026733,108.9117584229 +2011-11-29 20:18:45.000,134.6401519775,-150.1467917696,0.2492560744,-59.781066786,202.2110290527,89.6561776118,50.0033874512,-0.0002543209,11.779045105,108.924369812 +2011-11-29 20:18:45.033,134.7345581055,-150.0971362943,0.1965187192,-78.2182950164,202.2691040039,89.7128545216,50.0033798218,2.54111364483833E-05,11.7844009399,108.907119751 +2011-11-29 20:18:45.066,134.7899780273,-150.0725066322,0.0747506246,-148.4260485516,202.4236907959,89.7317604852,50.0034103394,0.001093545,11.7841033936,108.911315918 +2011-11-29 20:18:45.100,134.7608642578,-150.0578490462,0.0931568071,143.286467805,202.4172058105,89.7424702218,50.0034255981,0,11.7735214233,108.9178314209 +2011-11-29 20:18:45.133,134.7211761475,-150.0255149307,0.0898812041,161.1285065209,202.2468414307,89.801906528,50.0033836365,-0.0015258836,11.7507705688,108.9143753052 +2011-11-29 20:18:45.166,134.6316070557,-149.9778402103,0.0124164009,8.8252191247,202.1706848145,89.8516166448,50.0033721924,0.0006866455,11.7552261353,108.9092025757 +2011-11-29 20:18:45.200,134.5969390869,-149.9415309246,0.1367984712,16.4385168038,202.3015899658,89.862818155,50.0034141541,0.0009663776,11.7680511475,108.9084472656 +2011-11-29 20:18:45.233,134.6768951416,-149.9002765821,0.187798664,7.6283565387,202.3805541992,89.8896539682,50.0034065247,-0.0004577497,11.7840805054,108.9152679443 +2011-11-29 20:18:45.266,134.712890625,-149.8470284273,0.0921579972,19.2010346249,202.3908843994,89.9814312201,50.0033950806,0,11.7730026245,108.9135894775 +2011-11-29 20:18:45.300,134.7002716064,-149.7970997445,0.0556700379,-178.1852100861,202.4139251709,90.0323434502,50.0033950806,0.0001017284,11.7957000732,108.9233627319 +2011-11-29 20:18:45.333,134.7132568359,-149.7475535522,0.0913944766,-85.5294319568,202.404006958,90.0483943947,50.00340271,-0.0002034428,11.7432098389,108.9039077759 +2011-11-29 20:18:45.366,134.696685791,-149.7209294748,0.0744585618,-29.2208162694,202.3307342529,90.0686322453,50.0033950806,0,11.7769393921,108.9136581421 +2011-11-29 20:18:45.400,134.7206268311,-149.6935404163,0.0217460152,-139.0068898371,202.3504638672,90.123758702,50.0033836365,-0.0004831748,11.7697753906,108.9178314209 +2011-11-29 20:18:45.433,134.7084350586,-149.648829998,0.0324872136,-54.2944133918,202.3072052002,90.1949087826,50.0033836365,0.0001271674,11.7875518799,108.9319839478 +2011-11-29 20:18:45.466,134.6843261719,-149.6257576189,0.0316454209,77.5270593818,202.1468353271,90.2108982555,50.0033912659,0.0002543209,11.8047637939,108.9437942505 +2011-11-29 20:18:45.500,134.6840667725,-149.6021524852,0.0813834444,123.5008987607,202.1306152344,90.2370510498,50.00340271,0.0002543069,11.770614624,108.9129867554 +2011-11-29 20:18:45.533,134.6519622803,-149.5480164058,0.0481467694,-41.6800887684,202.1430969238,90.27135909,50.0033988953,-0.0003814744,11.7769012451,108.9245910645 +2011-11-29 20:18:45.566,134.6429443359,-149.5077592708,0.0746480376,-40.3148364062,202.1439819336,90.2888375441,50.0033836365,-0.0003560213,11.7531814575,108.9060974121 +2011-11-29 20:18:45.600,134.654876709,-149.463390362,0.0664435178,24.7237582482,202.298828125,90.3437181141,50.0033950806,0.0009409525,11.7602539063,108.9095687866 +2011-11-29 20:18:45.633,134.6300354004,-149.399159263,0.1234369278,28.6661946635,202.3077087402,90.4074574394,50.0034332275,0.0009918166,11.78881073,108.9199295044 +2011-11-29 20:18:45.666,134.6519622803,-149.3424413722,0.097935468,-17.7196007449,202.2429199219,90.4636289151,50.0033950806,-0.0018056296,11.7519836426,108.9191131592 +2011-11-29 20:18:45.700,134.694732666,-149.2903680099,0.1009075493,-112.0007180098,202.2584991455,90.5273819009,50.0033531189,-0.0008138129,11.7733688354,108.9195785522 +2011-11-29 20:18:45.733,134.7135009766,-149.2641537439,0.1067470089,-154.9299186038,202.3343505859,90.5587939409,50.0033874512,0.0012970157,11.7753067017,108.9226837158 +2011-11-29 20:18:45.766,134.6959381104,-149.2731559332,0.0946026817,153.5176677099,202.2583312988,90.5550168462,50.0034103394,2.54390761256218E-05,11.7591323853,108.9119186401 +2011-11-29 20:18:45.800,134.6962127686,-149.2619680834,0.1091969758,122.4366869861,202.246887207,90.5959570001,50.0033721924,-0.0012970017,11.7618713379,108.9092559814 +2011-11-29 20:18:45.833,134.6522674561,-149.189417814,0.0531143025,46.6927133739,202.2242889404,90.6472039095,50.0033531189,2.79396772384644E-08,11.7599563599,108.9102020264 +2011-11-29 20:18:45.866,134.6009368896,-149.1459504901,0.0758183151,1.7385883678,202.161239624,90.6466916453,50.0033798218,0.0009154994,11.7750167847,108.9187774658 +2011-11-29 20:18:45.900,134.6339874268,-149.1182335825,0.038683001,48.071499756,202.2641906738,90.6827277233,50.0033950806,0.0001780177,11.7886657715,108.9300918579 +2011-11-29 20:18:45.933,134.6654205322,-149.0789873155,0.0577097312,-145.6785093353,202.2571868896,90.7233946697,50.0033874512,-0.0004577637,11.7534332275,108.9007644653 +2011-11-29 20:18:45.966,134.7108001709,-149.0093057256,0.1632880419,-106.6654523434,202.322265625,90.7853581458,50.0033874512,0.000279732,11.7692337036,108.9257278442 +2011-11-29 20:18:46.000,134.7744445801,-148.973324289,0.2019471228,-126.4889289376,202.3198852539,90.823853092,50.0034103394,0.0009409525,11.7702407837,108.9133682251 +2011-11-29 20:18:46.033,134.7618560791,-148.9516042875,0.2368354648,-157.4050152345,202.1580810547,90.859923321,50.0034332275,0.0003814744,11.7728118896,108.9052124023 +2011-11-29 20:18:46.066,134.7008056641,-148.8894768868,0.081386283,-179.6252188688,202.1275787354,90.9578750639,50.0034217834,-0.0004069135,11.7822952271,108.9176330566 +2011-11-29 20:18:46.100,134.7369232178,-148.8234289575,0.0589309186,-39.9940463265,202.339630127,91.0168878983,50.0034179688,7.63032585382462E-05,11.7958450317,108.9350280762 +2011-11-29 20:18:46.133,134.7622375488,-148.8022963522,0.095948033,-107.9498420961,202.3565368652,91.0089717091,50.0034179688,-1.39698386192322E-08,11.7909088135,108.9253463745 +2011-11-29 20:18:46.166,134.6938476563,-148.7820789923,0.1135404259,-141.8869893648,202.2513580322,91.0274268802,50.0034103394,-0.0004832167,11.7897644043,108.926612854 +2011-11-29 20:18:46.200,134.6739196777,-148.7202247992,0.0733036101,-140.106714218,202.2656097412,91.0908178659,50.0034065247,0,11.7691192627,108.9086532593 +2011-11-29 20:18:46.233,134.6906433105,-148.6635615498,0.0899165869,39.9734089099,202.3379211426,91.1500902475,50.00340271,-0.0002543069,11.7677993774,108.9134597778 +2011-11-29 20:18:46.266,134.7536621094,-148.6356807176,0.1150506437,14.0571320761,202.3620452881,91.1816388913,50.0033874512,-0.000559492,11.7464141846,108.8977127075 +2011-11-29 20:18:46.300,134.7343597412,-148.6110783762,0.0878530964,-51.3754739934,202.2057800293,91.2036662513,50.0033721924,-0.0004068995,11.7897720337,108.9198074341 +2011-11-29 20:18:46.333,134.6753692627,-148.5680345241,0.0557210669,-7.9480256135,202.1563873291,91.2544077267,50.0033683777,-5.08641824126244E-05,11.7805633545,108.9139709473 +2011-11-29 20:18:46.366,134.6445770264,-148.5115351993,0.1584796607,3.7546971401,202.3202667236,91.3183724483,50.0033683777,0,11.7503890991,108.9113845825 +2011-11-29 20:18:46.400,134.6819915771,-148.4435611566,0.1105148271,-16.992300004,202.3824615479,91.3715659615,50.0033683777,7.62892886996269E-05,11.7719421387,108.919303894 +2011-11-29 20:18:46.433,134.6990356445,-148.4031947386,0.093611002,-56.1676098471,202.2568817139,91.3906221893,50.0033950806,0.0008392241,11.8024368286,108.936706543 +2011-11-29 20:18:46.466,134.7233428955,-148.3783601708,0.1377227902,-79.5890388508,202.2057342529,91.4218224934,50.0033988953,1.39698386192322E-08,11.794593811,108.9169158936 +2011-11-29 20:18:46.500,134.7425994873,-148.3638118679,0.1625577211,-140.8661492914,202.195892334,91.4573736281,50.00340271,5.08641824126244E-05,11.7673797607,108.9123916626 +2011-11-29 20:18:46.533,134.7405548096,-148.3548233389,0.1842510849,170.6077435794,202.2069549561,91.4721200065,50.0033950806,-2.54251062870026E-05,11.7704620361,108.9152450562 +2011-11-29 20:18:46.566,134.7182769775,-148.31406077,0.1821564138,129.8233999697,202.2593231201,91.5217891421,50.0033950806,0,11.7592010498,108.9108276367 +2011-11-29 20:18:46.600,134.6922149658,-148.2483816709,0.0977247804,116.6196470964,202.2337799072,91.5729199383,50.0033988953,7.62753188610077E-05,11.8073348999,108.9315185547 +2011-11-29 20:18:46.633,134.6917266846,-148.1875383458,0.0746720359,-86.757766347,202.1311645508,91.6062922425,50.0033988953,0,11.787322998,108.9224090576 +2011-11-29 20:18:46.666,134.633895874,-148.1157940387,0.1103536785,-14.9937132283,202.1872253418,91.6843134934,50.0033950806,-7.63032585382462E-05,11.7684783936,108.9214859009 +2011-11-29 20:18:46.700,134.6790771484,-148.073487847,0.0566342101,-20.4876476042,202.3769683838,91.7720677639,50.0034065247,0.0002543069,11.7813720703,108.9168395996 +2011-11-29 20:18:46.733,134.7729034424,-148.04435026,0.1310273707,-127.8245587694,202.3834228516,91.8362373911,50.0033874512,-0.0008646632,11.8143005371,108.9395065308 +2011-11-29 20:18:46.766,134.7297058105,-148.0132455785,0.0988285989,-102.4521203803,202.2160949707,91.8534494678,50.0033798218,7.62892886996269E-05,11.7697601318,108.9092788696 +2011-11-29 20:18:46.800,134.633392334,-147.9667046695,0.1173108667,-68.2172383356,202.1251525879,91.8529030527,50.0034065247,0.0009409664,11.7637252808,108.9085769653 +2011-11-29 20:18:46.833,134.6470031738,-147.9323761388,0.1894122362,-81.6087052978,202.1819152832,91.8579778833,50.0034103394,-0.0001525925,11.755607605,108.900138855 +2011-11-29 20:18:46.866,134.7203826904,-147.9033478348,0.2019614279,-79.6639523656,202.2761230469,91.8832700738,50.0033874512,-0.0006866455,11.7956314087,108.9242477417 +2011-11-29 20:18:46.900,134.6785583496,-147.8484877554,0.0789105818,-51.1771867716,202.2713165283,91.9838924206,50.0034065247,0.0008138129,11.7773666382,108.909072876 +2011-11-29 20:18:46.933,134.707824707,-147.8020834502,0.0435027741,165.5181324967,202.2725067139,92.0501794065,50.0034294128,0.0006611925,11.7945556641,108.9334335327 +2011-11-29 20:18:46.966,134.8170013428,-147.7495866162,0.1738254428,-163.7266695001,202.3580932617,92.0730673704,50.0034179688,-0.0006866595,11.7731628418,108.9198150635 +2011-11-29 20:18:47.000,134.827255249,-147.6999311409,0.1881670803,-161.0109999464,202.3788757324,92.1397641677,50.0034065247,-7.62892886996269E-05,11.7833938599,108.9217987061 +2011-11-29 20:18:47.033,134.7173156738,-147.662201176,0.0231053121,75.8672004701,202.2570648193,92.1941188131,50.0033874512,-0.0010172417,11.789352417,108.9312286377 +2011-11-29 20:18:47.066,134.5740966797,-147.6491418543,0.1951939166,33.419179873,201.9758605957,92.2133936069,50.0033874512,0.0001017284,11.7789230347,108.9205245972 +2011-11-29 20:18:47.100,134.5737762451,-147.675779592,0.1858285069,50.6280512242,202.0484924316,92.1821386613,50.0033912659,0.0001271535,11.763343811,108.9041442871 +2011-11-29 20:18:47.133,134.6703491211,-147.6461502314,0.08275415,70.1054304712,202.4007263184,92.170465868,50.003364563,-0.0008646632,11.778678894,108.9125900269 +2011-11-29 20:18:47.166,134.7465667725,-147.5306380722,0.089062579,-97.368192015,202.4677886963,92.2834508572,50.0033683777,0.0007629488,11.7697372437,108.9160308838 +2011-11-29 20:18:47.200,134.7343139648,-147.4355208578,0.0718538463,-125.7978777182,202.3409576416,92.4223086031,50.0034179688,0.0014750054,11.778793335,108.9402618408 +2011-11-29 20:18:47.233,134.7476806641,-147.4047986669,0.0540898889,-165.2750870453,202.3402099609,92.4306687546,50.00340271,-0.0010681199,11.7553253174,108.8983230591 +2011-11-29 20:18:47.266,134.7838439941,-147.3806197972,0.1578145176,-110.3090918883,202.3689880371,92.4121316212,50.0033721924,-0.000813799,11.7513427734,108.896812439 +2011-11-29 20:18:47.300,134.758392334,-147.3174951889,0.2561130524,-87.2549563072,202.4426879883,92.4389674344,50.0033874512,0.0007629488,11.771232605,108.9191207886 +2011-11-29 20:18:47.333,134.7578735352,-147.2919776022,0.1624657661,-56.437211074,202.5214691162,92.4777697391,50.0033950806,0,11.7811279297,108.9107284546 +2011-11-29 20:18:47.366,134.7072601318,-147.286158281,0.1151265055,-23.265698983,202.3269042969,92.5238803462,50.0033721924,-0.0007375237,11.7752685547,108.9146575928 +2011-11-29 20:18:47.400,134.7164306641,-147.2386748059,0.100984998,-83.2353558297,202.222366333,92.5867727281,50.0033760071,0.0003051572,11.763671875,108.9102401733 +2011-11-29 20:18:47.433,134.7741546631,-147.1950162367,0.0959449038,-121.4272943098,202.2574462891,92.6262990328,50.0033950806,0.0003051711,11.7710876465,108.9331359863 +2011-11-29 20:18:47.466,134.7418365479,-147.1732006125,0.0569143109,-68.4824955622,202.2925109863,92.6611671485,50.0033721924,-0.001093559,11.7690429688,108.9187316895 +2011-11-29 20:18:47.500,134.6800384521,-147.1337631003,0.1023973748,-38.8166412419,202.2374572754,92.6896831883,50.0033531189,-0.0001525646,11.8075408936,108.9253082275 +2011-11-29 20:18:47.533,134.6877288818,-147.0951861918,0.0866918862,-30.214188737,202.220703125,92.6830442444,50.0033798218,0.0009409525,11.7517700195,108.9197235107 +2011-11-29 20:18:47.566,134.6420593262,-147.073780379,0.1355481595,46.9944847918,202.2495117188,92.7237453417,50.0033874512,-0.0002288818,11.7660751343,108.9106063843 +2011-11-29 20:18:47.600,134.6185302734,-147.0440690561,0.185611248,65.350683073,202.3340911865,92.7850257989,50.0033683777,-0.0003051711,11.7685623169,108.9112243652 +2011-11-29 20:18:47.633,134.6816864014,-146.9998504114,0.1078797579,49.9427974187,202.3219146729,92.822796745,50.0033912659,0.000813799,11.7880401611,108.9129486084 +2011-11-29 20:18:47.666,134.7412872314,-146.9643744088,0.1616576165,33.8141423919,202.3481903076,92.8510737282,50.0034065247,0.00027976,11.7852401733,108.9166488647 +2011-11-29 20:18:47.700,134.7479248047,-146.8947064793,0.0466296487,135.9132922563,202.3667907715,92.9207484879,50.0034065247,-0.0001780316,11.7822265625,108.9146270752 +2011-11-29 20:18:47.733,134.6833953857,-146.8188777191,0.0981492922,-139.3658572591,202.1865234375,92.9876092097,50.00340271,-0.000279732,11.7720947266,108.9034957886 +2011-11-29 20:18:47.766,134.6651000977,-146.7775140935,0.0898040533,-56.1008174272,202.1206512451,93.0238160425,50.0033988953,0,11.7680892944,108.8955078125 +2011-11-29 20:18:47.800,134.7364959717,-146.7678425457,0.0480953343,-112.4975118191,202.3002929688,93.0646674039,50.0033874512,-0.0007120706,11.7844161987,108.9167022705 +2011-11-29 20:18:47.833,134.7746276855,-146.7422293363,0.0848153904,-134.1345607323,202.4050750732,93.0825829901,50.0033798218,0.0002034567,11.7848510742,108.9346160889 +2011-11-29 20:18:47.866,134.7068939209,-146.6994860125,0.1135640591,17.8674265291,202.3598632813,93.109623709,50.0033798218,0,11.7579803467,108.9061431885 +2011-11-29 20:18:47.900,134.6504364014,-146.6639963495,0.1936088204,46.0584176113,202.3663482666,93.1732605815,50.0033912659,7.62892886996269E-05,11.7807235718,108.9242401123 +2011-11-29 20:18:47.933,134.6873626709,-146.6011449488,0.0372895561,-19.3476975694,202.4325256348,93.2504827003,50.0033760071,-0.0003814604,11.7903213501,108.9333724976 +2011-11-29 20:18:47.966,134.7282104492,-146.55822404,0.1047452539,-111.7093421398,202.3450164795,93.2818810799,50.0033798218,0.000279732,11.7559738159,108.9136581421 +2011-11-29 20:18:48.000,134.6791992188,-146.5302612456,0.0228358824,17.1908040843,202.1817626953,93.3169541013,50.0033988953,0.0003814744,11.7735366821,108.9181900024 +2011-11-29 20:18:48.033,134.6366424561,-146.4739258453,0.1299930513,35.1253133163,202.2069244385,93.3708169731,50.0033912659,-0.0003305962,11.7920684814,108.9176483154 +2011-11-29 20:18:48.066,134.6262207031,-146.4469465981,0.1018220559,62.8810027823,202.2994689941,93.3936707861,50.0033836365,0.0002034428,11.7527084351,108.90675354 +2011-11-29 20:18:48.100,134.6806182861,-146.3977828964,0.0085496632,127.0118208997,202.4425048828,93.4198372408,50.0034217834,0.0011698483,11.7735671997,108.915687561 +2011-11-29 20:18:48.133,134.8227386475,-146.3677027433,0.1013273671,-153.7949460694,202.5034790039,93.4334771285,50.0034217834,0,11.7761611938,108.90259552 +2011-11-29 20:18:48.166,134.842666626,-146.3510644025,0.0984089822,-163.7646590122,202.3586120605,93.4730580748,50.0033950806,-0.0015767477,11.8005142212,108.9276351929 +2011-11-29 20:18:48.200,134.7916870117,-146.3172003246,0.0524356887,-170.8069665371,202.3604888916,93.5214158141,50.0033836365,0.0002034428,11.7829284668,108.9206085205 +2011-11-29 20:18:48.233,134.7757415771,-146.2607966224,0.0969044641,171.5293410041,202.4856262207,93.5638244587,50.00340271,0.0004068995,11.7865219116,108.9267883301 +2011-11-29 20:18:48.266,134.7046661377,-146.1833969188,0.0766429156,107.0994220727,202.4759063721,93.624783897,50.00340271,2.54251062870026E-05,11.7761993408,108.9016342163 +2011-11-29 20:18:48.300,134.6695861816,-146.1572919358,0.0859208032,62.1259868413,202.3972015381,93.6412446529,50.0034294128,0.0011189701,11.7620162964,108.9070510864 +2011-11-29 20:18:48.333,134.7456207275,-146.1298209149,0.0535333157,-144.5442744614,202.3156890869,93.6790292594,50.0034294128,0,11.7803497314,108.9212722778 +2011-11-29 20:18:48.366,134.7682037354,-146.0570930606,0.1587524712,-135.0607617045,202.1800689697,93.7641470768,50.0034217834,-0.0003814744,11.7711486816,108.9207763672 +2011-11-29 20:18:48.400,134.706451416,-146.0131066424,0.0136338109,-172.1385802177,202.1568908691,93.8173610807,50.0034217834,0,11.7791366577,108.9180526733 +2011-11-29 20:18:48.433,134.7175750732,-145.9857039234,0.1031325758,74.9306312708,202.2845153809,93.8598311969,50.0034179688,-0.0002288958,11.7607574463,108.9171447754 +2011-11-29 20:18:48.466,134.7944946289,-145.9628091293,0.1073912308,151.7356030536,202.3488311768,93.8626315745,50.0033988953,-0.0006357813,11.7794265747,108.9254455566 +2011-11-29 20:18:48.500,134.8117523193,-145.9537386381,0.1978236139,173.8717680403,202.2914123535,93.8547222154,50.0033988953,7.63032585382462E-05,11.7794723511,108.9176330566 +2011-11-29 20:18:48.533,134.7405853271,-145.9076075405,0.0980280414,154.8639116557,202.3161315918,93.9126422196,50.00340271,-0.0001271674,11.7581634521,108.909942627 +2011-11-29 20:18:48.566,134.7382202148,-145.8298799877,0.1550034732,105.9356466306,202.4766540527,94.0022338109,50.0033798218,-0.0006357953,11.7857894897,108.9325256348 +2011-11-29 20:18:48.600,134.7249908447,-145.7592285109,0.1689590812,114.3666067459,202.4568328857,94.0781786843,50.0033607483,-0.0005086418,11.7824401855,108.9271774292 +2011-11-29 20:18:48.633,134.730758667,-145.7175370362,0.1530346125,-133.1985242877,202.2964630127,94.1042290258,50.0033721924,0.0005086279,11.7819976807,108.9236755371 +2011-11-29 20:18:48.666,134.7240447998,-145.7126876019,0.2191665024,-111.7225858766,202.215423584,94.0839297036,50.0033836365,0.0004069135,11.7755355835,108.9189987183 +2011-11-29 20:18:48.700,134.7238006592,-145.6882901662,0.1046591327,-151.6121268937,202.4025421143,94.1169400078,50.0033874512,-2.54251062870026E-05,11.775138855,108.9306106567 +2011-11-29 20:18:48.733,134.7633514404,-145.6228979351,0.0779430568,161.3242734029,202.5701751709,94.190132315,50.0033912659,0.0001525786,11.7697906494,108.9288024902 +2011-11-29 20:18:48.766,134.7168731689,-145.5513448734,0.0053528538,-70.1381470774,202.4192810059,94.255736282,50.0033988953,0.0002288818,11.7888031006,108.927444458 +2011-11-29 20:18:48.800,134.614654541,-145.4861848687,0.0920841545,22.2713788267,202.2844390869,94.3457035337,50.0033988953,-0.0001525786,11.7614593506,108.9063415527 +2011-11-29 20:18:48.833,134.6338500977,-145.4803792079,0.134134829,38.2219161803,202.253326416,94.3469261376,50.0033950806,-0.0002288818,11.7814559937,108.9249191284 +2011-11-29 20:18:48.866,134.6911468506,-145.4785487172,0.095066227,179.1504250989,202.087677002,94.344631194,50.0033721924,-0.0006866734,11.8002700806,108.923614502 +2011-11-29 20:18:48.900,134.6913452148,-145.4179512789,0.3374626637,-157.4511599925,202.0110473633,94.3962879147,50.0033836365,0.0005086139,11.7989120483,108.9249420166 +2011-11-29 20:18:48.933,134.6837463379,-145.3892644843,0.2313407063,-166.0204655894,202.1318969727,94.4214161807,50.0033988953,0.0004069135,11.7762680054,108.9191055298 +2011-11-29 20:18:48.966,134.6390380859,-145.3917643336,0.2014813721,77.0478942908,202.256362915,94.4632510893,50.0033988953,-0.0001525925,11.7678527832,108.9027404785 +2011-11-29 20:18:49.000,134.5872344971,-145.3451414623,0.2777602375,62.3612527072,202.2150421143,94.5274070562,50.0033988953,5.08641824126244E-05,11.766418457,108.8983154297 +2011-11-29 20:18:49.033,134.654800415,-145.2750090799,0.0362205133,-118.0293025185,202.2287597656,94.546934567,50.0034065247,0.0003051851,11.7841033936,108.9281616211 +2011-11-29 20:18:49.066,134.7463684082,-145.2312002466,0.1987242252,-107.1145099606,202.3629455566,94.5508209447,50.0033874512,-0.0007629348,11.7749786377,108.9203414917 +2011-11-29 20:18:49.100,134.7957611084,-145.1694689969,0.1715686172,-100.3545419655,202.5438995361,94.6132283831,50.0033874512,0,11.790222168,108.9292755127 +2011-11-29 20:18:49.133,134.7828979492,-145.1197315593,0.1009549499,-99.1103478761,202.4598236084,94.6713601231,50.0033683777,-0.0004069135,11.775177002,108.9150390625 +2011-11-29 20:18:49.166,134.6707000732,-145.0980115578,0.0547622368,83.8896401409,202.1910552979,94.717211183,50.0033836365,0.0007375097,11.7841110229,108.9226226807 +2011-11-29 20:18:49.200,134.5754699707,-145.0619208382,0.1321964562,51.3818943712,202.2004547119,94.7556173367,50.0034103394,0.0008646492,11.7744064331,108.9128723145 +2011-11-29 20:18:49.233,134.6629638672,-145.0255022695,0.0515657663,-52.4027788408,202.3451538086,94.7703705454,50.0034332275,0.0004832027,11.7580490112,108.9179229736 +2011-11-29 20:18:49.266,134.6841125488,-144.9730737375,0.0419591442,-100.5717488113,202.290802002,94.8272455306,50.0034065247,-0.0010681059,11.7682495117,108.9172286987 +2011-11-29 20:18:49.300,134.6608734131,-144.9259317718,0.0430693105,105.7048818593,202.3259735107,94.8967905167,50.00340271,0,11.7702331543,108.9285049438 +2011-11-29 20:18:49.333,134.669418335,-144.8977367509,0.1359689385,-0.5370330684,202.3809204102,94.9086887062,50.0033988953,-0.0004068855,11.7610931396,108.9157943726 +2011-11-29 20:18:49.366,134.7094726563,-144.8557584083,0.2471664846,-8.9881003534,202.3615570068,94.9578455777,50.0033607483,-0.0011952734,11.7772979736,108.9212188721 +2011-11-29 20:18:49.400,134.713394165,-144.7973466305,0.1981086731,-0.2372776502,202.3953857422,95.0331825642,50.0033531189,-2.79396772384644E-08,11.7862243652,108.9134902954 +2011-11-29 20:18:49.433,134.762588501,-144.7649305527,0.0183586869,-58.4852706174,202.47706604,95.052744226,50.0033607483,0.0004068995,11.7690887451,108.9136047363 +2011-11-29 20:18:49.466,134.8002624512,-144.755299986,0.2026698291,163.6159794544,202.3556976318,95.0801947563,50.0033683777,0.000279732,11.7634353638,108.9109954834 +2011-11-29 20:18:49.500,134.7202758789,-144.6928174154,0.1449938267,146.2779813784,202.1575775146,95.1639328755,50.0033836365,0.0004068995,11.787689209,108.926574707 +2011-11-29 20:18:49.533,134.6783905029,-144.6356623925,0.0935936943,-3.8410930567,202.3033447266,95.2078305013,50.0034103394,0.0008646632,11.7851104736,108.9231948853 +2011-11-29 20:18:49.566,134.6621246338,-144.6267421654,0.1890183389,-19.2458030998,202.4230041504,95.197530576,50.0034065247,-0.000534053,11.7788696289,108.9290618896 +2011-11-29 20:18:49.600,134.6830291748,-144.575133256,0.1112581417,-27.0746273982,202.426071167,95.2278907669,50.0033874512,-0.0004577637,11.7940216064,108.9293136597 +2011-11-29 20:18:49.633,134.7404174805,-144.4998645714,0.0634215027,-33.178678667,202.4344024658,95.2723211475,50.00340271,0.0006357813,11.791885376,108.932723999 +2011-11-29 20:18:49.666,134.6878662109,-144.4612466818,0.1708692461,-17.3297045188,202.3429260254,95.3200231886,50.0034065247,-0.0001525786,11.7876205444,108.9351806641 +2011-11-29 20:18:49.700,134.6460723877,-144.4339805666,0.1673256159,-23.4709615355,202.3905181885,95.3845070046,50.0033950806,-0.0002543069,11.7864761353,108.9228363037 +2011-11-29 20:18:49.733,134.7031402588,-144.4062909798,0.0396951661,157.9861687102,202.4162597656,95.4641879914,50.0033988953,0.0003051572,11.7647171021,108.9159469604 +2011-11-29 20:18:49.766,134.6845703125,-144.3687932412,0.1228523627,111.2977617706,202.3764953613,95.5018155036,50.0033988953,0,11.777381897,108.9196929932 +2011-11-29 20:18:49.800,134.5976104736,-144.2993438777,0.1289612204,35.0629741797,202.3630218506,95.5144718441,50.0034065247,5.08641824126244E-05,11.7762908936,108.9041290283 +2011-11-29 20:18:49.833,134.6532897949,-144.2306321747,0.1887485981,-2.3486314093,202.4730834961,95.5460682992,50.00340271,-5.08641824126244E-05,11.7634429932,108.9141387939 +2011-11-29 20:18:49.866,134.7106018066,-144.2228047779,0.0984557793,-18.7549071589,202.3972473145,95.5703223009,50.0034179688,0.0004068995,11.783203125,108.9225234985 +2011-11-29 20:18:49.900,134.722869873,-144.1933256814,0.0534633994,-121.0534097546,202.2914581299,95.6362267962,50.0034179688,-0.0001017144,11.7800521851,108.9161758423 +2011-11-29 20:18:49.933,134.74269104,-144.128534507,0.1083601564,-117.7591685368,202.4386444092,95.6994538574,50.0034065247,-0.0006357813,11.7726593018,108.9097976685 +2011-11-29 20:18:49.966,134.7355041504,-144.1020470334,0.0349652283,135.1093926514,202.5159454346,95.7211670288,50.0034065247,-1.39698386192322E-08,11.7825469971,108.9272460938 +2011-11-29 20:18:50.000,134.6635131836,-144.0582245397,0.2474317402,71.0861500134,202.3685302734,95.779667599,50.0033988953,-0.0005086279,11.7734603882,108.9188995361 +2011-11-29 20:18:50.033,134.6217651367,-143.9879965346,0.24467282,39.1117566405,202.3133850098,95.8432839809,50.0033760071,-0.0004323106,11.7399291992,108.8946228027 +2011-11-29 20:18:50.066,134.6271362305,-143.9662218915,0.0669736043,-5.5262936777,202.3824462891,95.8441036036,50.0033950806,0.0008900883,11.7667236328,108.9061813354 +2011-11-29 20:18:50.100,134.6648254395,-143.9605391741,0.1065603346,135.9624013164,202.4306182861,95.8466717548,50.0033950806,0,11.7649688721,108.9161071777 +2011-11-29 20:18:50.133,134.6793212891,-143.9255412848,0.2478156984,100.2708516576,202.3521575928,95.88296738,50.0033836365,0,11.7919464111,108.9186630249 +2011-11-29 20:18:50.166,134.673538208,-143.8638510163,0.1342519671,47.9532623512,202.3788909912,95.9334766289,50.0033950806,0.0005594781,11.7857284546,108.9306488037 +2011-11-29 20:18:50.200,134.6997070313,-143.8145370504,0.1661091894,-47.6721078593,202.4813537598,95.9671016502,50.0033950806,-0.0001017284,11.7793579102,108.916885376 +2011-11-29 20:18:50.233,134.7318878174,-143.78527652,0.0569524989,-57.0896444039,202.4426422119,96.0281157301,50.00340271,0.0003306242,11.7749938965,108.9223022461 +2011-11-29 20:18:50.266,134.730178833,-143.7515490459,0.0566772632,71.5969935218,202.3501281738,96.0856942248,50.0034103394,0,11.7865982056,108.924446106 +2011-11-29 20:18:50.300,134.7313232422,-143.6864983243,0.062985152,-3.1416910772,202.4154815674,96.1419066816,50.0033950806,-0.0008392381,11.8011779785,108.9234695435 +2011-11-29 20:18:50.333,134.688369751,-143.6513911519,0.0922055319,-47.0886013834,202.4389038086,96.1877304208,50.0033683777,-0.0006866455,11.7955856323,108.9221496582 +2011-11-29 20:18:50.366,134.6586303711,-143.6488503216,0.0475633331,-26.496866819,202.3235321045,96.1836801186,50.0033760071,0.0003306102,11.7557601929,108.9191207886 +2011-11-29 20:18:50.400,134.6773223877,-143.6041535636,0.0565749444,-115.6790344251,202.2571716309,96.2160210643,50.0033798218,0.0002288679,11.7665405273,108.9205322266 +2011-11-29 20:18:50.433,134.6737518311,-143.5169320479,0.068840161,-151.1817703345,202.3083343506,96.3200175246,50.00340271,0.0008646632,11.7553634644,108.9099273682 +2011-11-29 20:18:50.466,134.6887664795,-143.4599546099,0.1255174428,-154.5200389517,202.3377532959,96.3648508863,50.0034141541,0,11.7542190552,108.9053955078 +2011-11-29 20:18:50.500,134.6695251465,-143.4088921156,0.2275063246,-119.0095712681,202.2876281738,96.3769198306,50.0034103394,-0.00027976,11.7674789429,108.9042510986 +2011-11-29 20:18:50.533,134.6008758545,-143.3737303018,0.163122341,-62.5674424579,202.245010376,96.3966727377,50.0033874512,-0.0007120986,11.7690505981,108.9103927612 +2011-11-29 20:18:50.566,134.5975189209,-143.39352419,0.0549490489,59.0844967737,202.2095031738,96.4014265493,50.0033760071,-0.0001271395,11.7731323242,108.9300918579 +2011-11-29 20:18:50.600,134.7165222168,-143.3736756603,0.1541348547,163.072678887,202.2798919678,96.4575160628,50.0033760071,0,11.7557296753,108.9074172974 +2011-11-29 20:18:50.633,134.8175354004,-143.3069310517,0.1091192737,-151.2826795493,202.38331604,96.4989684809,50.0033760071,0.0003051711,11.7891235352,108.9226989746 +2011-11-29 20:18:50.666,134.7528076172,-143.2752253136,0.0592862926,-66.2854969137,202.3510742188,96.5061470097,50.0033912659,0.0004831888,11.7681503296,108.9203414917 +2011-11-29 20:18:50.700,134.6198272705,-143.2386428204,0.1108612418,-3.4056603862,202.3314361572,96.5663551272,50.00340271,0.0001780316,11.7644348145,108.9184036255 +2011-11-29 20:18:50.733,134.5877838135,-143.1989184402,0.0893390477,22.8255257344,202.2876739502,96.633864717,50.0033874512,-0.0006357813,11.7897491455,108.9276199341 +2011-11-29 20:18:50.766,134.6578674316,-143.1425830399,0.0035184934,-49.7708303309,202.2744598389,96.7196450628,50.0033798218,1.39698386192322E-08,11.7984161377,108.940246582 +2011-11-29 20:18:50.800,134.7144012451,-143.0638582795,0.0121316835,-120.5837659473,202.4463195801,96.7933974454,50.0033950806,0.0006103562,11.7613601685,108.9029464722 +2011-11-29 20:18:50.833,134.6995239258,-142.9899419723,0.1091507301,-22.1345598923,202.4413604736,96.8299048065,50.0033950806,-0.0004577637,11.7961349487,108.932975769 +2011-11-29 20:18:50.866,134.6758880615,-142.9622933666,0.1462489516,-2.153912321,202.3790893555,96.8748064701,50.0033912659,0.0004323386,11.7687988281,108.9149475098 +2011-11-29 20:18:50.900,134.6743469238,-142.9480592523,0.0418543257,-17.2325621533,202.3367004395,96.8813497914,50.0034179688,0.0007629488,11.7628479004,108.9092254639 +2011-11-29 20:18:50.933,134.6603088379,-142.929740685,0.1340715885,-108.6810753185,202.2308349609,96.8577036765,50.0034255981,-0.0003814884,11.7576828003,108.9053115845 +2011-11-29 20:18:50.966,134.7394104004,-142.850018717,0.1857624799,-107.9084101686,202.4384613037,96.9466463998,50.0033988953,-0.0007629488,11.7721939087,108.9213943481 +2011-11-29 20:18:51.000,134.8355255127,-142.7992021096,0.2173338532,-110.6086639853,202.5502624512,97.0219287449,50.0033836365,-0.000534053,11.7540817261,108.90675354 +2011-11-29 20:18:51.033,134.7668609619,-142.8113052048,0.1251070946,-118.3238066151,202.287979126,96.9871904028,50.0033874512,0.0001271674,11.7557601929,108.9056396484 +2011-11-29 20:18:51.066,134.6770629883,-142.7759794664,0.0438984111,49.1295063037,202.2270965576,96.9999491961,50.0033836365,-0.0001271814,11.7660369873,108.9105300903 +2011-11-29 20:18:51.100,134.6996459961,-142.7261327458,0.0283191279,142.3320718118,202.3483581543,97.0675065972,50.0033836365,0.0002543349,11.7671051025,108.9009094238 +2011-11-29 20:18:51.133,134.7100524902,-142.6933068567,0.0654056296,-149.4399491528,202.3444976807,97.1020195431,50.0034103394,0.0009918166,11.7781982422,108.9207000732 +2011-11-29 20:18:51.166,134.6824798584,-142.6454272306,0.1052939892,-102.5714779361,202.2608337402,97.1430211687,50.0034103394,0,11.7760162354,108.9239349365 +2011-11-29 20:18:51.200,134.708190918,-142.5955668496,0.0866399407,-124.9954397737,202.3582611084,97.2280365333,50.00340271,-0.0003560213,11.755607605,108.9067993164 +2011-11-29 20:18:51.233,134.7178039551,-142.5614978661,0.0970959738,15.5133352373,202.4427337646,97.2838801599,50.00340271,0,11.7940979004,108.9283676147 +2011-11-29 20:18:51.266,134.6973876953,-142.5038100883,0.1760911793,-1.5842572553,202.5053863525,97.3139193319,50.0033950806,-0.0004323386,11.7912368774,108.916267395 +2011-11-29 20:18:51.300,134.7002563477,-142.4524880469,0.1319283694,-45.4650654177,202.5149383545,97.3229625024,50.0033721924,-0.0007374957,11.7593765259,108.9055633545 +2011-11-29 20:18:51.333,134.6763305664,-142.451190311,0.0403235517,9.3237281652,202.3020629883,97.3580969954,50.0033798218,0.0006103562,11.7912826538,108.932800293 +2011-11-29 20:18:51.366,134.6486358643,-142.4278583848,0.1360694021,93.6705188437,202.2250823975,97.4467186999,50.0033988953,0.0004577637,11.7644348145,108.9221343994 +2011-11-29 20:18:51.400,134.663772583,-142.3503220773,0.2416366786,137.2614486551,202.1971893311,97.5410572727,50.0033874512,-0.0007375097,11.786529541,108.9219284058 +2011-11-29 20:18:51.433,134.626449585,-142.2960903753,0.1006844714,-173.7808718829,202.0933227539,97.5634739536,50.0033836365,0.0003560353,11.7684249878,108.9043121338 +2011-11-29 20:18:51.466,134.58253479,-142.2429241828,0.2438559383,-48.7781442973,202.2218933105,97.5701060673,50.0033950806,0.0001780316,11.7812423706,108.9212493896 +2011-11-29 20:18:51.500,134.5654296875,-142.2057952745,0.20550704,-2.9224560921,202.3251037598,97.597174107,50.0033836365,-0.0006357953,11.7715988159,108.9239883423 +2011-11-29 20:18:51.533,134.647354126,-142.2227068229,0.1771603823,72.011463061,202.2385253906,97.6008145978,50.0033836365,0,11.7530670166,108.9041900635 +2011-11-29 20:18:51.566,134.759185791,-142.1899765564,0.1061625332,64.4560990464,202.3603515625,97.6576759226,50.0033836365,1.39698386192322E-08,11.7905502319,108.9303512573 +2011-11-29 20:18:51.600,134.7649078369,-142.1197485513,0.0783282965,-15.4112922111,202.516204834,97.7294202297,50.0033798218,-0.0001271814,11.7550582886,108.9082260132 +2011-11-29 20:18:51.633,134.7400970459,-142.044384244,0.1448116899,-49.4395183448,202.4942016602,97.7760909123,50.0033836365,0.0003306102,11.7757568359,108.9163208008 +2011-11-29 20:18:51.666,134.7031860352,-141.9924748063,0.2260224372,-40.0162956677,202.4787445068,97.7881871773,50.00340271,0.0004323386,11.7921600342,108.933380127 +2011-11-29 20:18:51.700,134.6638031006,-141.963432842,0.1773700267,-40.559917254,202.4117431641,97.8269689914,50.0033721924,-0.0009663915,11.7627105713,108.9194946289 +2011-11-29 20:18:51.733,134.6632537842,-141.9373415193,0.0725853965,-174.8075449378,202.3718109131,97.8906536752,50.0033531189,-0.0001525786,11.7825317383,108.9292831421 +2011-11-29 20:18:51.766,134.7111968994,-141.9135997818,0.1914256066,143.2973141454,202.406463623,97.9527537552,50.0033798218,0.0007883599,11.7688598633,108.8980102539 +2011-11-29 20:18:51.800,134.7366638184,-141.881798421,0.107946299,161.8552659694,202.3865661621,97.9774039079,50.0033798218,-0.0001780177,11.7749633789,108.9276275635 +2011-11-29 20:18:51.833,134.7282714844,-141.8322932099,0.0971782953,-126.4943384474,202.3571014404,97.983510097,50.0033798218,0,11.7899093628,108.9279937744 +2011-11-29 20:18:51.866,134.7197265625,-141.7647562994,0.1580851823,-89.7950148671,202.3091583252,98.0467781393,50.00340271,0.0007120706,11.7847442627,108.9327316284 +2011-11-29 20:18:51.900,134.7045898438,-141.712532673,0.1215962172,-99.4811588461,202.2964477539,98.1001902186,50.0034065247,0.0001525646,11.7751846313,108.9298019409 +2011-11-29 20:18:51.933,134.7018280029,-141.6691609718,0.0758190304,-146.4427801827,202.3174743652,98.1287677301,50.0034065247,7.63172283768654E-05,11.7483139038,108.9019470215 +2011-11-29 20:18:51.966,134.670425415,-141.6373322902,0.0667638481,-118.9101510346,202.30809021,98.1654595063,50.0034179688,0.0003305962,11.7890319824,108.9278717041 +2011-11-29 20:18:52.000,134.6514434814,-141.6190956851,0.1316514909,-111.1096651911,202.2302093506,98.218489095,50.0034255981,-0.0002288818,11.7954940796,108.9407196045 +2011-11-29 20:18:52.033,134.7433776855,-141.5861058715,0.2035604417,-136.1779620866,202.3863830566,98.2538763051,50.0034179688,-0.0002034567,11.7771072388,108.9167633057 +2011-11-29 20:18:52.066,134.8018188477,-141.5158368853,0.1331965923,-133.8018758782,202.6400146484,98.2875696283,50.0034103394,0.0001525925,11.7702407837,108.9159164429 +2011-11-29 20:18:52.100,134.6839904785,-141.4731345426,0.0750998929,39.3418554683,202.5393066406,98.3325669145,50.0034217834,-7.62753188610077E-05,11.7780303955,108.9248428345 +2011-11-29 20:18:52.133,134.5988464355,-141.4851829963,0.1621936113,66.1009588627,202.2993621826,98.3375188017,50.0033836365,-0.0011444092,11.7703094482,108.9249572754 +2011-11-29 20:18:52.166,134.6152038574,-141.438846993,0.084248811,24.7419521646,202.2398376465,98.3821814086,50.0033569336,-0.0005086139,11.7762145996,108.9095535278 +2011-11-29 20:18:52.200,134.6396484375,-141.3538521189,0.0324700326,156.7467216023,202.357208252,98.4716227358,50.0033798218,0.0008646492,11.7796478271,108.9358978271 +2011-11-29 20:18:52.233,134.626373291,-141.3134447198,0.1681789309,148.789469257,202.3395843506,98.5431143259,50.00340271,0.0003814744,11.7818069458,108.911819458 +2011-11-29 20:18:52.266,134.5793457031,-141.2802909816,0.1272907257,145.8310137991,202.2795715332,98.6083494626,50.0033988953,-2.54251062870026E-05,11.7765350342,108.9239807129 +2011-11-29 20:18:52.300,134.6320648193,-141.2176035054,0.0372724608,-56.1346712598,202.4463653564,98.6222352372,50.00340271,5.08641824126244E-05,11.7729415894,108.9172592163 +2011-11-29 20:18:52.333,134.7293548584,-141.1733438795,0.1639405936,-57.4880220175,202.5245056152,98.6320912002,50.00340271,-1.39698386192322E-08,11.7686920166,108.9125747681 +2011-11-29 20:18:52.366,134.7384490967,-141.1478672739,0.1427245587,-99.151253879,202.452041626,98.6789941092,50.0033836365,-0.0004068715,11.7964553833,108.9230728149 +2011-11-29 20:18:52.400,134.7460327148,-141.1102329316,0.1604990661,-155.3517237662,202.3828735352,98.6967252803,50.0033836365,0,11.7791595459,108.9180908203 +2011-11-29 20:18:52.433,134.7197113037,-141.0990860629,0.1772147268,152.3006919243,202.3374633789,98.7146203759,50.0033836365,-0.0001271674,11.7732772827,108.92212677 +2011-11-29 20:18:52.466,134.6947937012,-141.09537044,0.1231890097,111.3798333237,202.3685913086,98.7541261901,50.0033721924,-0.0004323386,11.7647171021,108.9057769775 +2011-11-29 20:18:52.500,134.6923065186,-141.0445401722,0.1360786259,4.3055851938,202.4182281494,98.7849986451,50.0033798218,0.0005086558,11.7445831299,108.9017944336 +2011-11-29 20:18:52.533,134.683380127,-140.9595999396,0.061337024,-13.7179004857,202.3392181396,98.8470714043,50.0034065247,0.0003814744,11.8035736084,108.937461853 +2011-11-29 20:18:52.566,134.6307678223,-140.8897407648,0.0529339015,143.4467313636,202.2561950684,98.9011528422,50.0033836365,-0.0007629348,11.7750854492,108.9013824463 +2011-11-29 20:18:52.600,134.5936584473,-140.8590322343,0.0998956338,45.5704176706,202.2537841797,98.9497701287,50.003364563,-0.0003560353,11.7754821777,108.9163513184 +2011-11-29 20:18:52.633,134.6430969238,-140.8529670263,0.2049354017,50.5567440493,202.2873382568,98.9954231131,50.0033683777,0.000279732,11.7844009399,108.9157791138 +2011-11-29 20:18:52.666,134.6849822998,-140.8303727606,0.1968348473,91.7457237243,202.3167724609,99.026903455,50.0033912659,0.0007120706,11.7791824341,108.9064331055 +2011-11-29 20:18:52.700,134.6368560791,-140.7685868693,0.0148719521,-107.4788595717,202.3361358643,99.0647017218,50.0033912659,-0.0003051572,11.8029937744,108.9275894165 +2011-11-29 20:18:52.733,134.618927002,-140.7124153936,0.1779539287,-48.7080187451,202.3322143555,99.1026297623,50.0034065247,0.0007883739,11.7885437012,108.9274597168 +2011-11-29 20:18:52.766,134.6310119629,-140.7041781854,0.0942293406,49.7364437435,202.2001037598,99.1442324445,50.0034179688,0,11.7632446289,108.9132385254 +2011-11-29 20:18:52.800,134.6205596924,-140.6543861064,0.0887866691,114.2085356779,202.0562133789,99.2022480713,50.0034179688,-2.54251062870026E-05,11.7479248047,108.894241333 +2011-11-29 20:18:52.833,134.7195281982,-140.5841854221,0.1190064102,-119.9684068842,202.0743865967,99.2188317706,50.0033988953,-0.0002288818,11.7503585815,108.9071731567 +2011-11-29 20:18:52.866,134.7460174561,-140.5579574957,0.086130023,-147.9519514609,202.2487182617,99.2459203009,50.00340271,0.0001780316,11.7915267944,108.930519104 +2011-11-29 20:18:52.900,134.6868133545,-140.4994227745,0.0283244438,120.0697668915,202.471572876,99.3269673256,50.0033836365,-0.0006612204,11.7764892578,108.9233551025 +2011-11-29 20:18:52.933,134.6552886963,-140.4838909243,0.0414993092,110.678338745,202.3578796387,99.3486258554,50.0033874512,0.0003814744,11.7756271362,108.9135894775 diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..3a84342 --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Polar - Integer Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,148 @@ +2011-11-29 20:13:29.333,-176.0126346642,134.5806,75.6246993793,0.21362,63.9707378264,201.65728,50.003,0,108.8879394531,11.7365341187 +2011-11-29 20:13:29.366,-175.9610684626,134.5806,0,0,63.9879265602,201.65728,50.013,0,108.9138717651,11.763130188 +2011-11-29 20:13:29.400,-175.9037726831,134.36698,-163.9747913885,0.21362,64.0566814956,201.44366,50.003,0,108.9136047363,11.7515029907 +2011-11-29 20:13:29.433,-175.8579360595,134.36698,-169.1600594344,0.21362,64.1368955869,201.44366,50.003,0,108.8927993774,11.7216720581 +2011-11-29 20:13:29.466,-175.8178290138,134.36698,20.3342721492,0.21362,64.1884617885,201.44366,50.023,0,108.911491394,11.7508773804 +2011-11-29 20:13:29.500,-175.7548036564,134.36698,-9.6944458936,0.21362,64.1999209444,201.44366,50.003,0,108.9076538086,11.7556915283 +2011-11-29 20:13:29.533,-175.7032374548,134.36698,-57.1639992202,0.21362,64.2056505224,201.65728,50.003,0,108.9187164307,11.7559356689 +2011-11-29 20:13:29.566,-175.7204261887,134.5806,-148.3445027373,0.21362,64.2113801003,201.44366,50.003,0,108.8839187622,11.7135696411 +2011-11-29 20:13:29.600,-175.6975078769,134.5806,170.1741947318,0.21362,64.2400279901,201.44366,50.003,0,108.8941726685,11.7240066528 +2011-11-29 20:13:29.633,-175.6001050517,134.5806,0,0,64.3145125034,201.65728,50.003,0,108.9003219604,11.7472000122 +2011-11-29 20:13:29.666,-175.5428092722,134.5806,0,0,64.4061857507,201.65728,50.003,0,108.9094619751,11.7481307983 +2011-11-29 20:13:29.700,-175.5370796942,134.5806,110.5235586807,0.21362,64.4462927963,201.65728,50.003,0,108.8987350464,11.7291107178 +2011-11-29 20:13:29.733,-175.4855134927,134.5806,133.1611211664,0.21362,64.4462927963,201.65728,50.013,0,108.8821258545,11.7249679565 +2011-11-29 20:13:29.766,-175.4167585573,134.5806,-180,0,64.480670264,201.65728,50.003,0,108.8932952881,11.7100372314 +2011-11-29 20:13:29.800,-175.3709219336,134.36698,0,0,64.5666139333,201.44366,50.003,0,108.9089889526,11.7340240479 +2011-11-29 20:13:29.833,-175.3537331998,134.5806,180,0,64.6124505569,201.65728,50.023,0,108.9287338257,11.779296875 +2011-11-29 20:13:29.866,-175.3480036218,134.5806,85.1472579344,0.21362,64.6468280246,201.65728,50.003,0,108.9014053345,11.7508850098 +2011-11-29 20:13:29.900,-175.3136261541,134.5806,87.1354214835,0.21362,64.6812054923,201.65728,50.003,0,108.9190063477,11.751739502 +2011-11-29 20:13:29.933,-175.2391416408,134.5806,180,0,64.7041238041,201.65728,50.003,0,108.9239959717,11.7580108643 +2011-11-29 20:13:29.966,-175.1589275494,134.5806,-131.6886196329,0.21362,64.7728787395,201.44366,50.003,0,108.9025039673,11.7300491333 +2011-11-29 20:13:30.000,-175.1360092376,134.36698,0,0,64.8072562072,201.44366,50.003,0,108.8948974609,11.7199401855 +2011-11-29 20:13:30.033,-175.1073613479,134.36698,-24.0756865514,0.21362,64.8244449411,201.44366,50.003,0,108.914352417,11.7551956177 +2011-11-29 20:13:30.066,-175.0844430361,134.36698,-1.0771606548,0.21362,64.8702815647,201.44366,50.003,0,108.8997802734,11.7267532349 +2011-11-29 20:13:30.100,-175.0443359904,134.36698,28.9973940116,0.21362,64.9275773442,201.44366,50.003,0,108.90184021,11.7450714111 +2011-11-29 20:13:30.133,-174.9927697889,134.36698,41.2128542038,0.21362,64.956225234,201.65728,50.003,0,108.888381958,11.7264480591 +2011-11-29 20:13:30.166,-174.975581055,134.5806,73.2068174839,0.21362,64.956225234,201.65728,50.003,0,108.9130172729,11.7457275391 +2011-11-29 20:13:30.200,-174.981310633,134.5806,68.71482837,0.21362,64.9963322796,201.65728,50.023,0,108.9168930054,11.7412948608 +2011-11-29 20:13:30.233,-174.9068261196,134.36698,43.2926910001,0.42724,65.0593576371,201.65728,50.003,0,108.9072189331,11.7397460938 +2011-11-29 20:13:30.266,-174.8151528724,134.36698,11.2815389861,0.21362,65.1166534166,201.8709,50.003,0,108.9203796387,11.7424621582 +2011-11-29 20:13:30.300,-174.7750458267,134.36698,-13.9114152658,0.21362,65.1510308843,201.65728,50.003,0,108.9011764526,11.7237167358 +2011-11-29 20:13:30.333,-174.7635866708,134.5806,-180,0,65.1567604623,201.65728,50.003,0,108.8972167969,11.7298049927 +2011-11-29 20:13:30.366,-174.7292092031,134.5806,-172.5118625359,0.21362,65.1968675079,201.65728,50.003,0,108.9020690918,11.7188644409 +2011-11-29 20:13:30.400,-174.6318063779,134.36698,180,0,65.311459067,201.44366,50.003,0,108.9084701538,11.755065918 +2011-11-29 20:13:30.433,-174.5974289102,134.36698,4.8930595704,0.21362,65.3572956906,201.44366,50.003,0,108.9114151001,11.7544631958 +2011-11-29 20:13:30.466,-174.5859697543,134.36698,4.0336228777,0.21362,65.3802140024,201.44366,50.003,0,108.9236755371,11.7743911743 +2011-11-29 20:13:30.500,-174.5401331307,134.36698,0,0,65.4031323142,201.65728,50.003,0,108.9143829346,11.7374343872 +2011-11-29 20:13:30.533,-174.4942965071,134.36698,-110.6266910839,0.21362,65.4031323142,201.44366,50.003,0,108.9093093872,11.7520065308 +2011-11-29 20:13:30.566,-174.4599190394,134.36698,-91.5414669281,0.21362,65.4604280937,201.44366,50.003,0,108.8863220215,11.7292785645 +2011-11-29 20:13:30.600,-174.4312711496,134.5806,0,0,65.5349126071,201.65728,50.003,0,108.9136352539,11.7587661743 +2011-11-29 20:13:30.633,-174.385434526,134.5806,180,0,65.5750196527,201.65728,50.003,0,108.9194641113,11.7368621826 +2011-11-29 20:13:30.666,-174.3166795906,134.5806,-58.3786697459,0.21362,65.5979379645,201.65728,50.003,0,108.906539917,11.7529907227 +2011-11-29 20:13:30.700,-174.2593838111,134.36698,-38.6803807493,0.21362,65.6495041661,201.44366,50.003,0,108.8889389038,11.7196731567 +2011-11-29 20:13:30.733,-174.2421950772,134.36698,-10.3877248257,0.21362,65.6838816338,201.44366,50.003,0,108.9009399414,11.7405395508 +2011-11-29 20:13:30.766,-174.2479246552,134.36698,13.1321926644,0.21362,65.7297182574,201.44366,50.003,0,108.9118347168,11.7527008057 +2011-11-29 20:13:30.800,-174.2135471875,134.36698,72.9146090083,0.21362,65.7927436149,201.65728,50.003,0,108.8994216919,11.7378005981 +2011-11-29 20:13:30.833,-174.15052183,134.5806,135.0060452667,0.21362,65.7984731928,201.65728,50.003,0,108.9074707031,11.7389831543 +2011-11-29 20:13:30.866,-174.0703077387,134.5806,-180,0,65.8557689723,201.65728,50.003,0,108.9048156738,11.7374267578 +2011-11-29 20:13:30.900,-174.035930271,134.36698,-6.9728963667,0.21362,65.9245239078,201.44366,50.003,0,108.8948974609,11.7451858521 +2011-11-29 20:13:30.933,-174.030200693,134.36698,44.3125558754,0.21362,65.9417126416,201.44366,50.013,0,108.9101638794,11.742477417 +2011-11-29 20:13:30.966,-174.0072823812,134.5806,74.008958397,0.21362,65.9531717975,201.44366,50.003,0,108.9067382813,11.752532959 +2011-11-29 20:13:31.000,-173.9327978679,134.5806,180,0,66.010467577,201.44366,50.003,0,108.9275817871,11.7403259277 +2011-11-29 20:13:31.033,-173.8697725104,134.5806,-180,0,66.0448450447,201.44366,50.003,0,108.8905029297,11.7253417969 +2011-11-29 20:13:31.066,-173.8468541986,134.5806,-180,0,66.0448450447,201.44366,50.003,0,108.902961731,11.7606658936 +2011-11-29 20:13:31.100,-173.8124767309,134.5806,-145.0499954153,0.21362,66.1078704022,201.65728,50.003,0,108.9350814819,11.7690734863 +2011-11-29 20:13:31.133,-173.7838288411,134.5806,-150.9801085949,0.21362,66.1537070258,201.65728,50.003,0,108.8904266357,11.7325057983 +2011-11-29 20:13:31.166,-173.7265330616,134.5806,-142.1852064397,0.21362,66.1823549156,201.65728,50.003,0,108.9011459351,11.7200393677 +2011-11-29 20:13:31.200,-173.6978851719,134.5806,-146.9292969833,0.21362,66.2224619612,201.44366,50.003,0,108.9155426025,11.748085022 +2011-11-29 20:13:31.233,-173.686426016,134.5806,-165.8540929565,0.21362,66.2625690069,201.44366,50.003,0,108.8983917236,11.7314758301 +2011-11-29 20:13:31.266,-173.6463189703,134.5806,180,0,66.2854873187,201.65728,50.003,0,108.9117965698,11.7448654175 +2011-11-29 20:13:31.300,-173.5947527687,134.36698,40.5596823173,0.21362,66.3427830982,201.65728,50.003,0,108.9150619507,11.740814209 +2011-11-29 20:13:31.333,-173.5145386774,134.5806,32.1486618848,0.21362,66.4115380336,201.65728,50.003,0,108.9213027954,11.7776947021 +2011-11-29 20:13:31.366,-173.4801612097,134.5806,180,0,66.4401859234,201.8709,50.003,0,108.911567688,11.7540054321 +2011-11-29 20:13:31.400,-173.4858907877,134.5806,96.3142053615,0.21362,66.4516450793,201.65728,50.003,0,108.8943328857,11.7307891846 +2011-11-29 20:13:31.433,-173.4171358522,134.5806,115.1129506197,0.21362,66.5261295926,201.65728,50.003,0,108.9193572998,11.7556304932 +2011-11-29 20:13:31.466,-173.325462605,134.5806,156.8815738848,0.21362,66.600614106,201.65728,50.003,0,108.9143371582,11.7476043701 +2011-11-29 20:13:31.500,-173.2738964035,134.5806,-103.7340088084,0.21362,66.6349915737,201.65728,50.003,0,108.9296188354,11.7811965942 +2011-11-29 20:13:31.533,-173.2624372476,134.5806,0,0,66.6808281973,201.65728,50.003,0,108.9038543701,11.7516937256 +2011-11-29 20:13:31.566,-173.2738964035,134.5806,91.4154162131,0.21362,66.7037465091,201.65728,50.003,0,108.9060440063,11.7289657593 +2011-11-29 20:13:31.600,-173.2395189358,134.5806,130.6458364457,0.21362,66.7323943989,201.65728,50.023,0,108.9095306396,11.7495727539 +2011-11-29 20:13:31.633,-173.1593048444,134.5806,-177.679941848,0.21362,66.7896901784,201.65728,50.003,0,108.9005889893,11.7152404785 +2011-11-29 20:13:31.666,-173.1077386429,134.5806,180,0,66.8240676461,201.65728,50.003,0,108.9095993042,11.7536087036 +2011-11-29 20:13:31.700,-173.096279487,134.5806,152.1833199647,0.21362,66.8240676461,201.65728,50.003,0,108.8984603882,11.745262146 +2011-11-29 20:13:31.733,-173.0676315972,134.5806,-168.4954283921,0.21362,66.8183380682,201.65728,50.003,0,108.9105911255,11.7517623901 +2011-11-29 20:13:31.766,-173.0275245516,134.5806,-150.3326662864,0.21362,66.8699042697,201.65728,50.003,0,108.8968276978,11.7229309082 +2011-11-29 20:13:31.800,-172.97595835,134.5806,162.9205490455,0.21362,66.9787662508,201.65728,50.013,0,108.9060516357,11.7373962402 +2011-11-29 20:13:31.833,-172.9072034146,134.5806,173.3712992286,0.21362,66.9959549846,201.65728,50.003,0,108.9111785889,11.7592010498 +2011-11-29 20:13:31.866,-172.8441780571,134.5806,-97.4028251722,0.21362,67.0074141405,201.65728,50.003,0,108.9011764526,11.7418670654 +2011-11-29 20:13:31.900,-172.7983414335,134.5806,-180,0,67.0933578098,201.65728,50.003,0,108.9156951904,11.7429122925 +2011-11-29 20:13:31.933,-172.7525048099,134.5806,-180,0,67.1678423232,201.65728,50.003,0,108.9110641479,11.7357025146 +2011-11-29 20:13:31.966,-172.7295864981,134.5806,180,0,67.2136789468,201.44366,50.003,0,108.9058990479,11.7597198486 +2011-11-29 20:13:32.000,-172.7066681863,134.36698,-180,0,67.2423268366,201.44366,50.003,0,108.9004440308,11.7531585693 +2011-11-29 20:13:32.033,-172.6837498745,134.36698,-180,0,67.2652451484,201.44366,50.003,0,108.9179382324,11.7482147217 +2011-11-29 20:13:32.066,-172.6608315627,134.5806,136.6332454048,0.21362,67.2996226161,201.65728,50.003,0,108.897026062,11.7359390259 +2011-11-29 20:13:32.100,-172.6321836729,134.5806,113.3253222989,0.21362,67.3397296617,201.8709,50.003,0,108.9043884277,11.7489089966 +2011-11-29 20:13:32.133,-172.5748878934,134.5806,78.8619109218,0.21362,67.3683775515,201.65728,50.003,0,108.9048614502,11.7295837402 +2011-11-29 20:13:32.166,-172.4946738021,134.5806,-41.9691584933,0.21362,67.4084845971,201.65728,50.003,0,108.9082183838,11.7468185425 +2011-11-29 20:13:32.200,-172.4316484446,134.36698,-67.3626479735,0.21362,67.4944282664,201.65728,50.003,0,108.8976287842,11.7283477783 +2011-11-29 20:13:32.233,-172.4030005549,134.5806,-101.0640254831,0.21362,67.5230761562,201.65728,50.003,0,108.8935165405,11.7223968506 +2011-11-29 20:13:32.266,-172.3686230872,134.5806,-106.2492935291,0.21362,67.5230761562,201.65728,50.003,0,108.9143981934,11.7584228516 +2011-11-29 20:13:32.300,-172.3399751974,134.5806,-180,0,67.5803719357,201.65728,50.013,0,108.9077529907,11.7412948608 +2011-11-29 20:13:32.333,-172.3113273076,134.5806,103.0178115645,0.21362,67.6204789813,201.65728,50.003,0,108.8983154297,11.722442627 +2011-11-29 20:13:32.366,-172.2540315281,134.5806,137.4296567401,0.21362,67.6319381372,201.65728,50.003,0,108.9174499512,11.7483978271 +2011-11-29 20:13:32.400,-172.2081949045,134.5806,156.6008245652,0.21362,67.7006930727,201.65728,50.003,0,108.9036331177,11.7333908081 +2011-11-29 20:13:32.433,-172.1680878589,134.5806,0,0,67.7866367419,201.65728,50.003,0,108.9125976563,11.7383499146 +2011-11-29 20:13:32.466,-172.1451695471,134.5806,0,0,67.8324733655,201.65728,50.003,0,108.903213501,11.7393264771 +2011-11-29 20:13:32.500,-172.1222512353,134.36698,-180,0,67.8324733655,201.44366,50.003,0,108.8937988281,11.7263641357 +2011-11-29 20:13:32.533,-172.0764146116,134.5806,-151.1577255114,0.21362,67.8496620994,201.44366,50.003,0,108.8905029297,11.7281799316 +2011-11-29 20:13:32.566,-172.030577988,134.5806,-180,0,67.901228301,201.65728,50.003,0,108.9139480591,11.7747497559 +2011-11-29 20:13:32.600,-171.9962005203,134.5806,72.4505131943,0.21362,67.9642536584,201.65728,50.003,0,108.9020004272,11.7306900024 +2011-11-29 20:13:32.633,-171.9331751629,134.5806,95.9475123726,0.21362,68.010090282,201.65728,50.003,0,108.9188613892,11.7590103149 +2011-11-29 20:13:32.666,-171.8930681172,134.5806,-163.1153546958,0.21362,68.0272790159,201.65728,50.003,0,108.9086380005,11.7376327515 +2011-11-29 20:13:32.700,-171.8758793833,134.5806,-142.7753529687,0.21362,68.0673860615,201.65728,50.003,0,108.9081268311,11.748878479 +2011-11-29 20:13:32.733,-171.8415019156,134.36698,4.944625772,0.21362,68.0731156395,201.44366,50.003,0,108.91065979,11.7453613281 +2011-11-29 20:13:32.766,-171.7899357141,134.5806,54.4710975831,0.21362,68.1074931072,201.44366,50.003,0,108.9273452759,11.7584686279 +2011-11-29 20:13:32.800,-171.7440990905,134.5806,148.8773534868,0.21362,68.1762480426,201.65728,50.003,0,108.907989502,11.736907959 +2011-11-29 20:13:32.833,-171.6982624669,134.5806,-163.9346843428,0.21362,68.1991663544,201.65728,50.023,0,108.8904876709,11.7105636597 +2011-11-29 20:13:32.866,-171.6295075314,134.5806,-131.2703604424,0.21362,68.2564621339,201.65728,50.003,0,108.9077758789,11.7397537231 +2011-11-29 20:13:32.900,-171.5779413299,134.5806,-180,0,68.3309466473,201.65728,50.003,0,108.9225234985,11.7581100464 +2011-11-29 20:13:32.933,-171.566482174,134.5806,117.2672719294,0.21362,68.3424058032,201.44366,50.003,0,108.90234375,11.7471923828 +2011-11-29 20:13:32.966,-171.566482174,134.5806,93.66141077,0.21362,68.3481353812,201.44366,50.003,0,108.9211044312,11.7570877075 +2011-11-29 20:13:33.000,-171.5378342842,134.5806,0,0,68.371053693,201.65728,50.003,0,108.9114532471,11.7417144775 +2011-11-29 20:13:33.033,-171.4576201929,134.5806,-58.837035982,0.21362,68.4512677843,201.65728,50.003,0,108.9160079956,11.7567901611 +2011-11-29 20:13:33.066,-171.4003244134,134.5806,180,0,68.5544001874,201.8709,50.003,0,108.9047088623,11.7457122803 +2011-11-29 20:13:33.100,-171.3945948354,134.5806,116.7573394918,0.21362,68.5887776551,201.65728,50.003,0,108.9108657837,11.7477493286 +2011-11-29 20:13:33.133,-171.3602173677,134.5806,80.718294178,0.21362,68.5887776551,201.44366,50.003,0,108.8870925903,11.7159347534 +2011-11-29 20:13:33.166,-171.2971920103,134.5806,94.2458277211,0.21362,68.6288847008,201.44366,50.003,0,108.9074172974,11.7379837036 +2011-11-29 20:13:33.200,-171.2398962307,134.5806,123.8219091057,0.21362,68.7033692141,201.65728,50.003,0,108.898147583,11.7231369019 +2011-11-29 20:13:33.233,-171.211248341,134.5806,0,0,68.7033692141,201.65728,50.003,0,108.9351043701,11.7723083496 +2011-11-29 20:13:33.266,-171.1883300292,134.36698,2.6814424812,0.21362,68.7262875259,201.44366,50.003,0,108.9193115234,11.7568054199 +2011-11-29 20:13:33.300,-171.1138455158,134.36698,11.8946038269,0.21362,68.8236903511,201.65728,50.003,0,108.9076004028,11.7498626709 +2011-11-29 20:13:33.333,-171.0622793143,134.5806,0,0,68.8637973968,201.65728,50.003,0,108.9183044434,11.7508468628 +2011-11-29 20:13:33.366,-171.0279018466,134.5806,-37.6605158739,0.21362,68.8752565527,201.65728,50.013,0,108.90574646,11.7345962524 +2011-11-29 20:13:33.400,-170.9935243788,134.5806,-61.7132841135,0.21362,68.9153635983,201.65728,50.003,0,108.9196243286,11.7567825317 +2011-11-29 20:13:33.433,-170.9247694434,134.5806,-95.3573658436,0.21362,68.9841185338,201.65728,50.003,0,108.8988342285,11.7327575684 +2011-11-29 20:13:33.466,-170.8846623978,134.5806,0,0,69.0414143133,201.65728,50.003,0,108.8976593018,11.7327880859 +2011-11-29 20:13:33.500,-170.8674736639,134.5806,0,0,69.0643326251,201.65728,50.003,0,108.9175796509,11.7495727539 +2011-11-29 20:13:33.533,-170.8445553521,134.5806,-180,0,69.0643326251,201.44366,50.003,0,108.9033126831,11.7451553345 +2011-11-29 20:13:33.566,-170.8330961962,134.5806,86.957804567,0.21362,69.070062203,201.44366,50.003,0,108.9139862061,11.743927002 +2011-11-29 20:13:33.600,-170.8101778844,134.5806,79.7098884586,0.21362,69.1158988266,201.65728,50.003,0,108.9191970825,11.7429580688 +2011-11-29 20:13:33.633,-170.7471525269,134.5806,103.900166569,0.21362,69.184653762,201.8709,50.003,0,108.8771896362,11.7264099121 +2011-11-29 20:13:33.666,-170.6898567474,134.5806,180,0,69.2648678534,201.8709,50.003,0,108.893951416,11.7269821167 +2011-11-29 20:13:33.700,-170.62683139,134.5806,-180,0,69.3164340549,201.65728,50.003,0,108.918006897,11.7542648315 +2011-11-29 20:13:33.733,-170.5809947663,134.5806,-180,0,69.3164340549,201.44366,50.003,0,108.9091415405,11.7450790405 +2011-11-29 20:13:33.766,-170.5638060325,134.36698,-180,0,69.3221636329,201.44366,50.003,0,108.8977355957,11.7231826782 +2011-11-29 20:13:33.800,-170.5236989868,134.5806,-180,0,69.3909185683,201.65728,50.003,0,108.8998260498,11.7425537109 +2011-11-29 20:13:33.833,-170.4664032073,134.5806,-144.0645080077,0.21362,69.4367551919,201.65728,50.003,0,108.9008636475,11.7437667847 +2011-11-29 20:13:33.866,-170.4492144735,134.5806,153.2203735739,0.21362,69.4768622376,201.65728,50.003,0,108.9086456299,11.7290802002 +2011-11-29 20:13:33.900,-170.4205665837,134.5806,136.8738876788,0.21362,69.5513467509,201.65728,50.003,0,108.9125442505,11.7729415894 +2011-11-29 20:13:33.933,-170.3288933365,134.5806,180,0,69.6143721084,201.65728,50.013,0,108.9029083252,11.7062072754 +2011-11-29 20:13:33.966,-170.2887862908,134.5806,0,0,69.6372904202,201.44366,50.003,0,108.8963928223,11.7113418579 +2011-11-29 20:13:34.000,-170.2945158688,134.36698,49.4920943434,0.21362,69.6315608422,201.44366,50.003,0,108.9042053223,11.7478179932 +2011-11-29 20:13:34.033,-170.2429496672,134.5806,43.2583135324,0.21362,69.6773974659,201.44366,50.003,0,108.9077529907,11.7573471069 +2011-11-29 20:13:34.066,-170.1799243098,134.5806,0,0,69.7461524013,201.44366,50.003,0,108.9167327881,11.7492446899 +2011-11-29 20:13:34.100,-170.145546842,134.5806,0,0,69.774800291,201.65728,50.003,0,108.8961868286,11.7382736206 +2011-11-29 20:13:34.133,-170.1283581082,134.5806,180,0,69.7633411351,201.65728,50.003,0,108.8978805542,11.7284317017 +2011-11-29 20:13:34.166,-170.0997102184,134.5806,-180,0,69.774800291,201.65728,50.003,0,108.9037780762,11.7450485229 +2011-11-29 20:13:34.200,-170.036684861,134.5806,180,0,69.8607439603,201.44366,50.003,0,108.9142456055,11.7521057129 +2011-11-29 20:13:34.233,-169.9736595035,134.5806,129.4770025437,0.21362,69.9466876296,201.44366,50.023,0,108.9125061035,11.7442016602 diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..abb910a --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Rect - Integer Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,581 @@ +2011-11-29 19:59:41.333,-144.2882488,134166.76221621,180,0.21362,95.1669489197,201.6220884654,50.003,0,97.1605606079,108.8662872314 +2011-11-29 19:59:41.366,-144.2491587664,134164.942969119,180,0.21362,95.2274017294,201.6414389117,50.003,0,97.1727600098,108.8741531372 +2011-11-29 19:59:41.400,-144.2068962754,134168.540518895,180,0.21362,95.293442253,201.4483038595,50.003,0,97.1526794434,108.8799057007 +2011-11-29 19:59:41.433,-144.1678057152,134166.851241233,0,0,95.3539348416,201.4681240076,50.003,0,97.1575317383,108.8589401245 +2011-11-29 19:59:41.466,-144.1255460713,134170.589301778,0,0,95.3539348416,201.4681240076,50.003,0,97.1708602905,108.8584594727 +2011-11-29 19:59:41.500,-144.0841617369,134161.615219975,0,0,95.3539348416,201.4681240076,50.003,0,97.1524353027,108.8847961426 +2011-11-29 19:59:41.533,-144.041902842,134165.497742137,0,0,95.4144154617,201.4881686884,50.003,0,97.1456222534,108.8779830933 +2011-11-29 19:59:41.566,-144.005107375,134171.479211599,0,0,95.4748839819,201.508437835,50.003,0,97.1670150757,108.8718185425 +2011-11-29 19:59:41.600,-143.962853936,134175.498256946,0,0,95.5353402713,201.5289313796,50.003,0,97.1424026489,108.8986740112 +2011-11-29 19:59:41.633,-143.921460443,134166.799388069,0,0,95.5353402713,201.5289313796,50.003,0,97.1590423584,108.8726882935 +2011-11-29 19:59:41.666,-143.8792081037,134170.962883454,0,0,95.5957841991,201.5496492538,50.003,0,97.1589355469,108.8755187988 +2011-11-29 19:59:41.700,-143.840114839,134169.797155253,0,0,95.716634447,201.5917577133,50.003,0,97.1447982788,108.8520965576 +2011-11-29 19:59:41.733,-143.8010209132,134168.693889759,0,0.21362,95.7226885098,201.3792012354,50.003,0,97.1604156494,108.8694000244 +2011-11-29 19:59:41.766,-143.7587730339,134173.065354235,0,0,95.7226885098,201.3792012354,50.003,0,97.1587524414,108.8766021729 +2011-11-29 19:59:41.800,-143.7196794499,134172.092055856,90,0.21362,95.7770405062,201.6131481583,50.003,0,97.1608428955,108.8963241577 +2011-11-29 19:59:41.833,-143.6774353553,134176.603965256,180,0.21362,95.8374336819,201.6347626517,50.003,0,97.142868042,108.8790740967 +2011-11-29 19:59:41.866,-143.6360242864,134168.388084949,-90,0.42724,95.8978138441,201.6566011217,50.003,0,97.1536483765,108.8727722168 +2011-11-29 19:59:41.900,-143.5937819065,134173.04442652,-90,0.21362,95.8978138441,201.6566011217,50.003,0,97.1532287598,108.8821258545 +2011-11-29 19:59:41.933,-143.5523646821,134164.970145553,0,0,95.8978138441,201.6566011217,50.003,0,97.1376190186,108.8727493286 +2011-11-29 19:59:41.966,-143.5132675436,134164.326656088,-90,0.21362,95.9644871013,201.4661987073,50.003,0,97.1612930298,108.8745727539 +2011-11-29 19:59:42.000,-143.4764969973,134171.102820135,-90,0.21362,96.0917526792,201.2986270906,50.003,0,97.1406021118,108.8658599854 +2011-11-29 19:59:42.033,-143.4319320364,134168.681395194,0,0,96.0917526792,201.2986270906,50.003,0,97.1444320679,108.8821563721 +2011-11-29 19:59:42.066,-143.3928355162,134168.230340622,90,0.21362,96.0853070282,201.5110421027,50.003,0,97.1426925659,108.8840103149 +2011-11-29 19:59:42.100,-143.3506019728,134173.306491253,0,0.21362,96.0853070282,201.5110421027,50.003,0,97.1467971802,108.8726882935 +2011-11-29 19:59:42.133,-143.3115065852,134172.985391605,-90,0.21362,96.1456966946,201.5337997054,50.003,0,97.1567840576,108.866104126 +2011-11-29 19:59:42.166,-143.2700729313,134165.389036794,180,0.21362,96.2060726568,201.5567811439,50.003,0,97.1658935547,108.8693084717 +2011-11-29 19:59:42.200,-143.2278432684,134170.677074824,180,0.21362,96.3267829515,201.6034152213,50.003,0,97.1363677979,108.8723602295 +2011-11-29 19:59:42.233,-143.1887469391,134170.552130969,0,0,96.3267829515,201.6034152213,50.003,0,97.1538238525,108.8650360107 +2011-11-29 19:59:42.266,-143.1496505552,134170.489658998,-90,0.21362,96.3267829515,201.6034152213,50.003,0,97.1483917236,108.8839645386 +2011-11-29 19:59:42.300,-143.1050803159,134168.663590437,-90,0.21362,96.3334802806,201.3910976388,50.003,0,97.1638565063,108.8836288452 +2011-11-29 19:59:42.333,-143.0659834039,134168.734809451,0,0,96.3938771643,201.4147750553,50.003,0,97.1505737305,108.8585357666 +2011-11-29 19:59:42.366,-143.0268865516,134168.868501182,0,0,96.4542597825,201.4386762268,50.003,0,97.1700973511,108.8736038208 +2011-11-29 19:59:42.400,-142.9846680146,134174.576201693,0,0,96.5146280064,201.4628010736,50.003,0,97.1529846191,108.8689727783 +2011-11-29 19:59:42.433,-142.9432171066,134167.53345208,0,0,96.574981707,201.4871495155,50.003,0,97.1615142822,108.8869934082 +2011-11-29 19:59:42.466,-142.9010017765,134173.385516633,0,0,96.5819446552,201.2749360108,50.003,0,97.1631088257,108.9048461914 +2011-11-29 19:59:42.500,-142.8650233937,134168.2556422,90,0.21362,96.7027334382,201.3243553921,50.003,0,97.1630172729,108.8676757813 +2011-11-29 19:59:42.533,-142.8228117617,134174.242611036,0,0,96.7631054606,201.3494004921,50.003,0,97.1463394165,108.854019165 +2011-11-29 19:59:42.566,-142.7813524623,134167.474102373,90,0.21362,96.6956450242,201.5365168594,50.003,0,97.142539978,108.865814209 +2011-11-29 19:59:42.600,-142.742256075,134168.062600412,90,0.21362,96.748818344,201.7736738354,50.003,0,97.1609573364,108.8795166016 +2011-11-29 19:59:42.633,-142.6976807346,134166.978687479,0,0.21362,96.816248707,201.5867776015,50.003,0,97.1533279419,108.8818054199 +2011-11-29 19:59:42.666,-142.6554763934,134173.25432823,0,0.21362,96.8765278656,201.6122427886,50.003,0,97.1426773071,108.8528900146 +2011-11-29 19:59:42.700,-142.6163823661,134174.043955532,0,0.21362,96.8765278656,201.6122427886,50.003,0,97.164604187,108.881362915 +2011-11-29 19:59:42.733,-142.5749129145,134167.62528789,0,0.21362,96.8765278656,201.6122427886,50.003,0,97.1471252441,108.8760681152 +2011-11-29 19:59:42.766,-142.5358177785,134168.543642539,90,0.21362,96.8765278656,201.6122427886,50.003,0,97.1599655151,108.868637085 +2011-11-29 19:59:42.800,-142.4967231959,134169.524463352,0,0,96.9970401786,201.663842372,50.003,0,97.1474227905,108.8768005371 +2011-11-29 19:59:42.833,-142.4552467444,134163.308624461,-90,0.21362,97.0572730784,201.6899765972,50.003,0,97.1506118774,108.8864746094 +2011-11-29 19:59:42.866,-142.4130530318,134170.002376627,0,0,96.9970401786,201.663842372,50.003,0,97.1487579346,108.8761444092 +2011-11-29 19:59:42.900,-142.3715729177,134163.928378295,0,0,97.0572730784,201.6899765972,50.003,0,97.1480484009,108.8860855103 +2011-11-29 19:59:42.933,-142.3324783899,134165.171625844,0,0,97.1174903041,201.7163336626,50.003,0,97.1491851807,108.8600692749 +2011-11-29 19:59:42.966,-142.2933846047,134166.47733574,180,0.21362,97.1852800969,201.5309692977,50.003,0,97.1640777588,108.8804397583 +2011-11-29 19:59:43.000,-142.2542915988,134167.84550616,180,0.21362,97.2531946127,201.3458875664,50.003,0,97.1632995605,108.8935317993 +2011-11-29 19:59:43.033,-142.2097140084,134167.650589582,-135,0.3021043012,97.2531946127,201.3458875664,50.003,0,97.1572723389,108.872253418 +2011-11-29 19:59:43.066,-142.1706222587,134169.152439486,-90,0.21362,97.3057595333,201.5848534344,50.003,0,97.1592712402,108.868637085 +2011-11-29 19:59:43.100,-142.1315314022,134170.716744473,0,0,97.3659749683,201.6121296171,50.003,0,97.1526947021,108.8811569214 +2011-11-29 19:59:43.133,-142.086954727,134170.745481535,0,0,97.3737663613,201.4002743841,50.003,0,97.1536560059,108.8487014771 +2011-11-29 19:59:43.166,-142.0478653713,134172.443456118,180,0.21362,97.3737663613,201.4002743841,50.003,0,97.1671447754,108.8970489502 +2011-11-29 19:59:43.200,-142.0063704176,134166.988683258,180,0.21362,97.48635664,201.6673497592,50.003,0,97.1545639038,108.8803100586 +2011-11-29 19:59:43.233,-141.9672810446,134168.815399342,0,0,97.48635664,201.6673497592,50.003,0,97.1641311646,108.8821105957 +2011-11-29 19:59:43.266,-141.9257817546,134163.497299822,-90,0.21362,97.5545006024,201.4835257478,50.003,0,97.145866394,108.8701477051 +2011-11-29 19:59:43.300,-141.8836164608,134171.10375721,-90,0.21362,97.6749063679,201.5401396743,50.003,0,97.1462020874,108.88331604 +2011-11-29 19:59:43.333,-141.8445300762,134173.126575592,0,0,97.6749063679,201.5401396743,50.003,0,97.142364502,108.8635864258 +2011-11-29 19:59:43.366,-141.8030273816,134168.016682664,0,0,97.6668042618,201.7518480378,50.003,0,97.1460723877,108.8735046387 +2011-11-29 19:59:43.400,-141.7639413701,134170.168240248,0,0,97.7269196639,201.7804585764,50.003,0,97.1483764648,108.8705215454 +2011-11-29 19:59:43.433,-141.7224347531,134165.195053765,0,0,97.7350837543,201.5687802626,50.003,0,97.1462402344,108.8747634888 +2011-11-29 19:59:43.466,-141.6833492695,134167.475351841,0,0,97.803487287,201.3859992662,50.003,0,97.1564407349,108.858505249 +2011-11-29 19:59:43.500,-141.6387731128,134168.320614131,0,0,97.7952439757,201.5976431414,50.003,0,97.1579742432,108.8791732788 +2011-11-29 19:59:43.533,-141.5996900226,134170.734548958,90,0.21362,97.855386907,201.6267282153,50.003,0,97.1472930908,108.8657226563 +2011-11-29 19:59:43.566,-141.560608357,134173.210911088,135,0.3021043012,97.915512423,201.6560353881,50.003,0,97.1746368408,108.8845672607 +2011-11-29 19:59:43.600,-141.5190954592,134168.582688091,180,0.21362,97.9840495513,201.4740130473,50.003,0,97.1542053223,108.8653030396 +2011-11-29 19:59:43.633,-141.4800147117,134171.18778162,0,0,97.9756203991,201.685564563,50.003,0,97.1440124512,108.8623962402 +2011-11-29 19:59:43.666,-141.4384984699,134166.696306418,0,0,98.0357107105,201.7153156425,50.003,0,97.1391601563,108.8735351563 +2011-11-29 19:59:43.700,-141.3963634622,134175.142179449,0,0,98.1644523378,201.5640259803,50.003,0,97.1470184326,108.87840271 +2011-11-29 19:59:43.733,-141.35484571,134170.792647786,180,0.21362,98.1730849264,201.3525734046,50.003,0,97.1436004639,108.8637542725 +2011-11-29 19:59:43.766,-141.3133252876,134166.51357057,180,0.21362,98.1730849264,201.3525734046,50.003,0,97.1549224854,108.8487548828 +2011-11-29 19:59:43.800,-141.2742482326,134169.447309872,90,0.21362,98.1644523378,201.5640259803,50.003,0,97.1692199707,108.8696670532 +2011-11-29 19:59:43.833,-141.232124645,134178.175991921,90,0.21362,98.2245505789,201.5944740861,50.003,0,97.1523132324,108.8698730469 +2011-11-29 19:59:43.866,-141.1906027211,134174.105176442,0,0,98.2245505789,201.5944740861,50.003,0,97.1693572998,108.868927002 +2011-11-29 19:59:43.900,-141.152123191,134164.361954377,0,0,98.2846306027,201.6251439225,50.003,0,97.1690063477,108.8721923828 +2011-11-29 19:59:43.933,-141.1130492264,134167.553131187,0,0,98.3446922853,201.6560353881,50.003,0,97.1612091064,108.8774032593 +2011-11-29 19:59:43.966,-141.068479069,134169.437314277,0,0.21362,98.4047355032,201.6871483812,50.003,0,97.1595840454,108.8792572021 +2011-11-29 19:59:44.000,-141.0294086329,134172.762058226,90,0.21362,98.4737011108,201.5071923038,50.003,0,97.165687561,108.8862609863 +2011-11-29 19:59:44.033,-140.9878791961,134169.035303295,90,0.21362,98.4826608581,201.2959067255,50.003,0,97.1542510986,108.8827056885 +2011-11-29 19:59:44.066,-140.9463474739,134165.379040896,0,0,98.5337685334,201.5387811263,50.003,0,97.1725387573,108.8737411499 +2011-11-29 19:59:44.100,-140.9072789997,134168.898800458,0,0,98.5247660519,201.7500385393,50.003,0,97.1617660522,108.8791351318 +2011-11-29 19:59:44.133,-140.865745101,134165.379353268,0,0,98.5847531368,201.7818154972,50.003,0,97.1501617432,108.8582229614 +2011-11-29 19:59:44.166,-140.8266787988,134169.027806575,180,0.21362,98.6538465775,201.6026229849,50.003,0,97.1574020386,108.8806762695 +2011-11-29 19:59:44.200,-140.785142888,134165.645181428,135,0.3021043012,98.7138569533,201.6348758105,50.003,0,97.1441345215,108.8570556641 +2011-11-29 19:59:44.233,-140.7460789123,134169.422320882,90,0.21362,98.7138569533,201.6348758105,50.003,0,97.1560211182,108.8855209351 +2011-11-29 19:59:44.266,-140.7045411539,134166.176523797,90,0.21362,98.7230628526,201.4237241673,50.003,0,97.1674957275,108.8739547729 +2011-11-29 19:59:44.300,-140.6630014075,134163.001245489,0,0,98.8431484161,201.4889613749,50.003,0,97.1586151123,108.8799743652 +2011-11-29 19:59:44.333,-140.6209181225,134172.781736566,0,0,98.8431484161,201.4889613749,50.003,0,97.1572570801,108.8792724609 +2011-11-29 19:59:44.366,-140.5793785083,134169.748426844,0,0,98.8937720273,201.7329605975,50.003,0,97.1682815552,108.8765029907 +2011-11-29 19:59:44.400,-140.5433403984,134168.035736969,0,0,98.9537046276,201.7660972716,50.003,0,97.1553039551,108.8807830811 +2011-11-29 19:59:44.433,-140.4987807773,134170.957573354,0,0,98.9631557164,201.5550830977,50.003,0,97.1482467651,108.8891601563 +2011-11-29 19:59:44.466,-140.459726964,134175.191842946,0,0.21362,98.9726266149,201.3440744195,50.003,0,97.1551818848,108.8756408691 +2011-11-29 19:59:44.500,-140.4181846586,134172.432211324,0,0,99.0326618773,201.3775016918,50.003,0,97.1510162354,108.8777160645 +2011-11-29 19:59:44.533,-140.3766406661,134169.743116695,0,0,99.0830837781,201.6220884654,50.003,0,97.1447219849,108.8905944824 +2011-11-29 19:59:44.566,-140.33509503,134167.124563303,0,0,99.1430177908,201.6559222412,50.003,0,97.1340026855,108.8702087402 +2011-11-29 19:59:44.600,-140.2960454641,134171.620084813,0,0,99.2029316299,201.6899765972,50.003,0,97.152130127,108.8807373047 +2011-11-29 19:59:44.633,-140.2544988987,134169.138383149,90,0.21362,99.2029316299,201.6899765972,50.003,0,97.1584014893,108.8794937134 +2011-11-29 19:59:44.666,-140.2129508181,134166.727230922,135,0.3021043012,99.2628251747,201.7242514216,50.003,0,97.1588439941,108.8943786621 +2011-11-29 19:59:44.700,-140.1739053461,134171.417677133,180,0.21362,99.3226983046,201.7587466021,50.003,0,97.1608734131,108.8545227051 +2011-11-29 19:59:44.733,-140.1323565853,134169.143380958,0,0,99.3325358585,201.5479511475,50.003,0,97.1581802368,108.8549575806 +2011-11-29 19:59:44.766,-140.0908064377,134166.93964146,0,0.21362,99.3924493408,201.582702873,50.003,0,97.1713943481,108.8742370605 +2011-11-29 19:59:44.800,-140.0517654147,134171.824991042,0,0,99.4523421037,201.6176749456,50.003,0,97.1452026367,108.8734817505 +2011-11-29 19:59:44.833,-140.0102148361,134169.758110055,180,0.21362,99.4423828389,201.8283975786,50.003,0,97.1702957153,108.8597717285 +2011-11-29 19:59:44.866,-139.9686629992,134167.761792023,180,0.21362,99.4423828389,201.8283975786,50.003,0,97.1493835449,108.8867721558 +2011-11-29 19:59:44.900,-139.9296267798,134172.842020989,90,0.21362,99.5122140271,201.6528672504,50.003,0,97.146697998,108.864692688 +2011-11-29 19:59:44.933,-139.8880747612,134170.982562058,90,0.21362,99.5720649912,201.6882796724,50.003,0,97.1599884033,108.8801422119 +2011-11-29 19:59:44.966,-139.8465216127,134169.193671401,-45,0.3021043012,99.6318948765,201.7239120954,50.003,0,97.1522750854,108.8712844849 +2011-11-29 19:59:45.000,-139.804967378,134167.475351841,-90,0.21362,99.6917035637,201.7597644031,50.003,0,97.1517181396,108.8824386597 +2011-11-29 19:59:45.033,-139.7659374706,134172.816720276,0,0,99.6318948765,201.7239120954,50.003,0,97.1571502686,108.8837127686 +2011-11-29 19:59:45.066,-139.7273663379,134165.316878888,0,0,99.6917035637,201.7597644031,50.003,0,97.1704711914,108.8791503906 +2011-11-29 19:59:45.100,-139.6858094975,134163.800929152,0,0,99.811256868,201.8321282026,50.003,0,97.1574020386,108.8654403687 +2011-11-29 19:59:45.133,-139.6412723941,134168.284067424,0,0,99.8710012479,201.8686394582,50.003,0,97.1453094482,108.8835830688 +2011-11-29 19:59:45.166,-139.6022494358,134173.886530207,0,0,99.8814061204,201.6581851675,50.003,0,97.1674804688,108.8703155518 +2011-11-29 19:59:45.200,-139.560693968,134172.583078899,0,0,99.9411892427,201.6949541609,50.003,0,97.1544570923,108.8787384033 +2011-11-29 19:59:45.233,-139.522111589,134165.406841986,90,0.21362,99.9411892427,201.6949541609,50.003,0,97.1545791626,108.8906402588 +2011-11-29 19:59:45.266,-139.4805527779,134164.239503637,0,0,99.951676388,201.484544939,50.003,0,97.1675720215,108.8887252808 +2011-11-29 19:59:45.300,-139.4415355452,134170.098271439,0,0,100.0712978031,201.5588187805,50.003,0,97.1471557617,108.8903808594 +2011-11-29 19:59:45.333,-139.3999775485,134169.067789076,90,0.21362,100.0712978031,201.5588187805,50.003,0,97.153427124,108.8887329102 +2011-11-29 19:59:45.366,-139.3584189354,134168.107893413,45,0.3021043012,100.0712978031,201.5588187805,50.003,0,97.1553039551,108.8861999512 +2011-11-29 19:59:45.400,-139.3168597494,134167.218585966,0,0,100.12040699,201.8065776996,50.003,0,97.1544799805,108.8711166382 +2011-11-29 19:59:45.433,-139.2753000344,134166.399868139,0,0,100.1908305698,201.6339705384,50.003,0,97.1804275513,108.8857879639 +2011-11-29 19:59:45.466,-139.2362926903,134172.585890095,90,0.21362,100.1908305698,201.6339705384,50.003,0,97.1690979004,108.8721237183 +2011-11-29 19:59:45.500,-139.1947342085,134171.904017294,90,0.21362,100.1908305698,201.6339705384,50.003,0,97.1575698853,108.8747177124 +2011-11-29 19:59:45.533,-139.1531753261,134171.292733968,0,0,100.2505634158,201.6718753299,50.003,0,97.1634750366,108.882522583 +2011-11-29 19:59:45.566,-139.1145718471,134164.759293763,0,0,100.3211452867,201.4998321895,50.003,0,97.1780853271,108.8699951172 +2011-11-29 19:59:45.600,-139.0755716272,134171.201525384,180,0.21362,100.440618204,201.5768170087,50.003,0,97.175163269,108.8798904419 +2011-11-29 19:59:45.633,-139.0340121055,134170.792647786,180,0.21362,100.5003203183,201.6156379039,50.003,0,97.1504821777,108.8626785278 +2011-11-29 19:59:45.666,-138.9924523524,134170.454362322,180,0.21362,100.5003203183,201.6156379039,50.003,0,97.1605453491,108.865486145 +2011-11-29 19:59:45.700,-138.9508924116,134170.186669527,180,0.21362,100.5003203183,201.6156379039,50.003,0,97.1673812866,108.8854064941 +2011-11-29 19:59:45.733,-138.9093323269,134169.989569823,0,0,100.559999381,201.6546776209,50.003,0,97.1601638794,108.8744430542 +2011-11-29 19:59:45.766,-138.8677721418,134169.863063521,0,0,100.6084836047,201.9039010274,50.003,0,97.1636505127,108.873588562 +2011-11-29 19:59:45.800,-138.8291548969,134163.779999992,0,0,100.6196552762,201.6939360329,50.003,0,97.1630401611,108.8719787598 +2011-11-29 19:59:45.833,-138.7901686466,134170.677074824,0,0,100.630850231,201.4839787223,50.003,0,97.1654815674,108.8935546875 +2011-11-29 19:59:45.866,-138.7486086834,134170.752978159,0,0,100.6905427708,201.5234968305,50.003,0,97.150428772,108.869758606 +2011-11-29 19:59:45.900,-138.7070487891,134170.899474597,0,0,100.7388971009,201.77310843,50.003,0,97.1605682373,108.8745574951 +2011-11-29 19:59:45.933,-138.6654890075,134171.116563908,180,0.21362,100.7984827998,201.813022158,50.003,0,97.1629333496,108.8883285522 +2011-11-29 19:59:45.966,-138.6268632384,134165.35280166,0,0,100.8580448698,201.8531540666,50.003,0,97.1509399414,108.876449585 +2011-11-29 19:59:46.000,-138.5853019301,134165.706093799,0,0,100.8580448698,201.8531540666,50.003,0,97.1595458984,108.8640823364 +2011-11-29 19:59:46.033,-138.5463291841,134172.991638687,45,0.3021043012,100.9290770647,201.6837544698,50.003,0,97.159828186,108.8817520142 +2011-11-29 19:59:46.066,-138.5047705163,134173.481721379,90,0.21362,100.9290770647,201.6837544698,50.003,0,97.1656951904,108.8906097412 +2011-11-29 19:59:46.100,-138.4632121739,134174.042393774,0,0,100.9290770647,201.6837544698,50.003,0,97.1555633545,108.8874206543 +2011-11-29 19:59:46.133,-138.4216542008,134174.673654986,-90,0.21362,100.9886510965,201.7243645302,50.003,0,97.1655044556,108.8772277832 +2011-11-29 19:59:46.166,-138.3800966405,134175.375504021,-90,0.21362,101.1077269088,201.8062385118,50.003,0,97.1730804443,108.870010376 +2011-11-29 19:59:46.200,-138.3414603816,134170.062349938,0,0,101.1077269088,201.8062385118,50.003,0,97.148109436,108.8778152466 +2011-11-29 19:59:46.233,-138.2999018743,134170.900411674,90,0.21362,101.1077269088,201.8062385118,50.003,0,97.155632019,108.8938980103 +2011-11-29 19:59:46.266,-138.2583439081,134171.809060844,0,0,101.1672284615,201.8475021678,50.003,0,97.1577835083,108.8692398071 +2011-11-29 19:59:46.300,-138.2167865266,134172.788296013,0,0,101.286158293,201.9306821428,50.003,0,97.1510009766,108.8820800781 +2011-11-29 19:59:46.333,-138.1781432495,134167.733054323,0,0,101.2980330392,201.7211974657,50.003,0,97.1550598145,108.8745422363 +2011-11-29 19:59:46.366,-138.1365852527,134168.848509904,180,0.21362,101.3575203198,201.763157036,50.003,0,97.1707611084,108.8675079346 +2011-11-29 19:59:46.400,-138.0950279687,134170.034549813,0,0,101.3575203198,201.763157036,50.003,0,97.1679763794,108.870262146 +2011-11-29 19:59:46.433,-138.0534714413,134171.291172178,0,0.21362,101.3575203198,201.763157036,50.003,0,97.1478271484,108.874458313 +2011-11-29 19:59:46.466,-138.0148217736,134166.49389131,0,0,101.416982799,201.8053340084,50.003,0,97.1645355225,108.8804473877 +2011-11-29 19:59:46.500,-137.9732649626,134167.886738476,0,0,101.4764203643,201.8477282468,50.003,0,97.1485061646,108.8867797852 +2011-11-29 19:59:46.533,-137.9317090363,134169.350165145,90,0.21362,101.5358329036,201.8903396143,50.003,0,97.1586151123,108.8763885498 +2011-11-29 19:59:46.566,-137.8930545706,134164.745236965,90,0.21362,101.5479692412,201.6810392995,50.003,0,97.1665039063,108.8824691772 +2011-11-29 19:59:46.600,-137.8514986079,134166.344891104,0,0,101.6074156758,201.7239120954,50.003,0,97.1452026367,108.8826751709 +2011-11-29 19:59:46.633,-137.8099436581,134168.015120836,0,0.21362,101.6074156758,201.7239120954,50.003,0,97.1723709106,108.8647537231 +2011-11-29 19:59:46.666,-137.7683897647,134169.755923523,0,0,101.6074156758,201.7239120954,50.003,0,97.1499481201,108.8761825562 +2011-11-29 19:59:46.700,-137.7297300045,134165.409028588,0,0,101.6668367832,201.7670019509,50.003,0,97.1522369385,108.8996047974 +2011-11-29 19:59:46.733,-137.6881764065,134167.286057338,180,0.21362,101.7856025709,201.8538322838,50.003,0,97.1596679688,108.8877868652 +2011-11-29 19:59:46.766,-137.6466239931,134169.233653852,90,0.21362,101.8449470289,201.8975724813,50.003,0,97.1501922607,108.8746795654 +2011-11-29 19:59:46.800,-137.6079602523,134165.079163608,90,0.21362,101.832516303,202.1066485559,50.003,0,97.1698608398,108.8734283447 +2011-11-29 19:59:46.833,-137.5664083816,134167.162984532,0,0,101.8449470289,201.8975724813,50.003,0,97.1686019897,108.8869857788 +2011-11-29 19:59:46.866,-137.5248578235,134169.31736707,180,0.21362,101.9167809658,201.7325081821,50.003,0,97.175201416,108.8725357056 +2011-11-29 19:59:46.900,-137.4833086216,134171.542307824,0,0,102.0354578513,201.8211622325,50.003,0,97.1568527222,108.9067764282 +2011-11-29 19:59:46.933,-137.4446406833,134167.645904084,0,0,102.0354578513,201.8211622325,50.003,0,97.1685791016,108.8748397827 +2011-11-29 19:59:46.966,-137.4030923558,134170.007062043,90,0.21362,102.0354578513,201.8211622325,50.003,0,97.1631622314,108.874130249 +2011-11-29 19:59:47.000,-137.3644217016,134166.237435927,90,0.21362,102.094757077,201.8658137454,50.003,0,97.1704711914,108.8943023682 +2011-11-29 19:59:47.033,-137.3228744115,134168.734809451,90,0.21362,102.1540300118,201.9106813924,50.003,0,97.158454895,108.8682098389 +2011-11-29 19:59:47.066,-137.2813286899,134171.302729425,0,0,102.1668058778,201.701854671,50.003,0,97.1708908081,108.8618392944 +2011-11-29 19:59:47.100,-137.2426551032,134167.72555753,0,0,102.2261108748,201.7469849737,50.003,0,97.1410446167,108.8822555542 +2011-11-29 19:59:47.133,-137.2011106662,134170.429685879,0,0,102.2261108748,201.7469849737,50.003,0,97.1762008667,108.883354187 +2011-11-29 19:59:47.166,-137.1595679256,134173.204351663,45,0.3021043012,102.2853892814,201.7923313242,50.003,0,97.1480941772,108.8746948242 +2011-11-29 19:59:47.200,-137.1182312802,134163.110889898,90,0.21362,102.3446409888,201.8378935768,50.003,0,97.1662521362,108.8816223145 +2011-11-29 19:59:47.233,-137.079350547,134172.730510404,0,0,102.3446409888,201.8378935768,50.003,0,97.162399292,108.8959960938 +2011-11-29 19:59:47.266,-137.0378111626,134175.711902991,180,0.21362,102.4169020321,201.6750431689,50.003,0,97.1620407104,108.8957977295 +2011-11-29 19:59:47.300,-136.9964662549,134165.824170009,0,0,102.4169020321,201.6750431689,50.003,0,97.1614837646,108.8746185303 +2011-11-29 19:59:47.333,-136.9549266392,134168.946279721,0,0,102.4761582597,201.7210843553,50.003,0,97.1415863037,108.8640823364 +2011-11-29 19:59:47.366,-136.9162443725,134165.885082299,-90,0.21362,102.5353873806,201.7673412046,50.003,0,97.1747283936,108.880859375 +2011-11-29 19:59:47.400,-136.8747067043,134169.143380958,-135,0.3021043012,102.5353873806,201.7673412046,50.003,0,97.1539154053,108.8753967285 +2011-11-29 19:59:47.433,-136.8331710753,134172.472192809,-135,0.3021043012,102.6078272377,201.6053392112,50.003,0,97.1671066284,108.889541626 +2011-11-29 19:59:47.466,-136.7916375291,134175.871512606,0,0,102.667059925,201.6520752083,50.003,0,97.1522903442,108.878036499 +2011-11-29 19:59:47.500,-136.750274974,134166.399868139,0,0,102.7854426532,201.746193301,50.003,0,97.1749572754,108.8946838379 +2011-11-29 19:59:47.533,-136.711587597,134163.662234358,0,0,102.7262650992,201.6990266217,50.003,0,97.1705932617,108.8945465088 +2011-11-29 19:59:47.566,-136.6700545295,134167.267940029,-90,0.21362,102.7129110262,201.9074042444,50.003,0,97.1629943848,108.8936309814 +2011-11-29 19:59:47.600,-136.6285237161,134170.944141923,-90,0.21362,102.7720306449,201.954522257,50.003,0,97.1537628174,108.8744430542 +2011-11-29 19:59:47.633,-136.5869952003,134174.690834246,180,0.21362,102.8311226207,202.0018551856,50.003,0,97.1554489136,108.8798217773 +2011-11-29 19:59:47.666,-136.5483070767,134172.211375871,180,0.21362,102.84459248,201.7935750954,50.003,0,97.155090332,108.8964920044 +2011-11-29 19:59:47.700,-136.5096175409,134169.793094553,180,0.21362,102.9037144733,201.8411718534,50.003,0,97.1556015015,108.8784484863 +2011-11-29 19:59:47.733,-136.4680921098,134173.741598792,0,0,102.97642188,201.6808130336,50.003,0,97.1578140259,108.8704452515 +2011-11-29 19:59:47.766,-136.4267068007,134164.817082805,0,0,103.0355455901,201.7288888218,50.003,0,97.1774978638,108.8749923706 +2011-11-29 19:59:47.800,-136.3851823349,134168.906297185,0,0,103.0355455901,201.7288888218,50.003,0,97.1641540527,108.86743927 +2011-11-29 19:59:47.833,-136.3464890997,134166.745973042,0,0,103.0946410634,201.7771793134,50.003,0,97.1746826172,108.8771896362 +2011-11-29 19:59:47.866,-136.3049677374,134170.971317142,0,0,103.0946410634,201.7771793134,50.003,0,97.1656799316,108.8888092041 +2011-11-29 19:59:47.900,-136.2607460708,134168.652345326,135,0.3021043012,103.1399219919,202.0337054718,50.003,0,97.1633148193,108.8795623779 +2011-11-29 19:59:47.933,-136.2220508784,134166.688809568,180,0.21362,103.2717570102,201.9233374646,50.003,0,97.1432495117,108.8764038086 +2011-11-29 19:59:47.966,-136.1805335479,134171.125309945,0,0,103.2856866716,201.7154287561,50.003,0,97.1741104126,108.8765182495 +2011-11-29 19:59:48.000,-136.141837951,134169.288629703,0,0,103.3587414068,201.5567811439,50.003,0,97.1464157104,108.8779144287 +2011-11-29 19:59:48.033,-136.1003241389,134173.861229691,180,0.21362,103.3447255224,201.7646271592,50.003,0,97.1520767212,108.8712692261 +2011-11-29 19:59:48.066,-136.058915352,134165.558966947,180,0.21362,103.3307384857,201.9724852233,50.003,0,97.1639633179,108.8844451904 +2011-11-29 19:59:48.100,-136.0202165996,134163.914633786,180,0.21362,103.3896912008,202.0218469094,50.003,0,97.1706771851,108.8776245117 +2011-11-29 19:59:48.133,-135.9759883162,134162.110342295,-90,0.21362,103.4178088018,201.6062446119,50.003,0,97.166847229,108.8987045288 +2011-11-29 19:59:48.166,-135.9344781529,134166.964318545,-90,0.21362,103.4910068812,201.4481905959,50.003,0,97.1578369141,108.8697814941 +2011-11-29 19:59:48.200,-135.8957784004,134165.5167968,0,0,103.5500734125,201.4981336633,50.003,0,97.1602935791,108.8926544189 +2011-11-29 19:59:48.233,-135.8542722545,134170.506838793,90,0.21362,103.5948363341,201.7559193502,50.003,0,97.1831207275,108.8863143921 +2011-11-29 19:59:48.266,-135.8155727148,134169.18617469,90,0.21362,103.5948363341,201.7559193502,50.003,0,97.1601028442,108.8939971924 +2011-11-29 19:59:48.300,-135.7768724308,134167.926721317,90,0.21362,103.6537869489,201.8062385118,50.003,0,97.1725692749,108.8904724121 +2011-11-29 19:59:48.333,-135.7326426689,134166.562300154,90,0.21362,103.6537869489,201.8062385118,50.003,0,97.1533508301,108.8808670044 +2011-11-29 19:59:48.366,-135.693940909,134165.434018326,0,0,103.6537869489,201.8062385118,50.003,0,97.1742553711,108.8695373535 +2011-11-29 19:59:48.400,-135.6524425547,134170.766409609,0,0,103.7127081107,201.8567711987,50.003,0,97.1594161987,108.8768386841 +2011-11-29 19:59:48.433,-135.6137413893,134169.76498201,0,0.21362,103.7715997171,201.9075172504,50.003,0,97.1606674194,108.8860855103 +2011-11-29 19:59:48.466,-135.5695108022,134168.69545158,0,0,103.9038529422,201.8022812796,50.003,0,97.1637420654,108.8857650757 +2011-11-29 19:59:48.500,-135.5308084799,134167.825202363,90,0.21362,103.9773577954,201.6464176736,50.003,0,97.1440887451,108.8716430664 +2011-11-29 19:59:48.533,-135.4893647817,134150.487208926,0,0.21362,103.9627119637,201.8537192477,50.003,0,97.1617355347,108.8857727051 +2011-11-29 19:59:48.566,-135.4478733463,134166.166527957,0,0.21362,103.9627119637,201.8537192477,50.003,0,97.1526031494,108.8983459473 +2011-11-29 19:59:48.600,-135.4091696204,134165.488683362,0,0,104.0215409331,201.9053701258,50.003,0,97.1523590088,108.8954696655 +2011-11-29 19:59:48.633,-135.3649363357,134164.78896922,0,0,104.0803397493,201.9572337505,50.003,0,97.1382904053,108.8748550415 +2011-11-29 19:59:48.666,-135.3262318529,134164.242315007,-90,0.21362,104.1539239792,201.8021682147,50.003,0,97.1546630859,108.8759994507 +2011-11-29 19:59:48.700,-135.284748695,134170.19822687,-90,0.21362,104.1391083117,202.009309958,50.003,0,97.1573410034,108.8554000854 +2011-11-29 19:59:48.733,-135.2460455021,134169.778413559,0,0,104.1539239792,201.8021682147,50.003,0,97.1549301147,108.8920211792 +2011-11-29 19:59:48.766,-135.2018130088,134169.373592337,0,0.21362,104.2127186168,201.8545104987,50.003,0,97.1770095825,108.8757171631 +2011-11-29 19:59:48.800,-135.163109378,134169.084969052,0,0.21362,104.2714827087,201.9070652261,50.003,0,97.1589736938,108.8961181641 +2011-11-29 19:59:48.833,-135.1244055984,134168.857568452,0,0.21362,104.3302161552,201.959832231,50.003,0,97.1777877808,108.8807220459 +2011-11-29 19:59:48.866,-135.0801725704,134168.672648998,0,0,104.3452315792,201.7528658736,50.003,0,97.1533432007,108.885017395 +2011-11-29 19:59:48.900,-135.0414685907,134168.576440803,90,0.21362,104.3452315792,201.7528658736,50.003,0,97.151763916,108.8871154785 +2011-11-29 19:59:48.933,-135,134175.015053306,90,0.21362,104.4039905329,201.8058993235,50.003,0,97.1535949707,108.8810272217 +2011-11-29 19:59:48.966,-134.9585314093,134168.576440803,0,0,104.46271855,201.8591449064,50.003,0,97.1497192383,108.8802337646 +2011-11-29 19:59:49.000,-134.9170668636,134175.155610459,180,0.21362,104.5214155315,201.9126024545,50.003,0,97.1803283691,108.8870620728 +2011-11-29 19:59:49.033,-134.8755944016,134168.857568452,180,0.21362,104.5214155315,201.9126024545,50.003,0,97.1559677124,108.9035339355 +2011-11-29 19:59:49.066,-134.836890622,134169.084969052,180,0.21362,104.6540430771,201.813474393,50.003,0,97.1585159302,108.8765563965 +2011-11-29 19:59:49.100,-134.7981869912,134169.373592337,0,0,104.6387159942,202.0201527722,50.003,0,97.1576309204,108.8868713379 +2011-11-29 19:59:49.133,-134.7539544979,134169.778413559,0,0,104.7127022451,201.8676222062,50.003,0,97.1569824219,108.8935546875 +2011-11-29 19:59:49.166,-134.715251305,134170.19822687,0,0.21362,104.7868002643,201.7154287561,50.003,0,97.1657485962,108.8825836182 +2011-11-29 19:59:49.200,-134.6737681471,134164.242315007,0,0,104.8454520821,201.7700552136,50.003,0,97.1635513306,108.8671875 +2011-11-29 19:59:49.233,-134.6323168121,134171.303978858,0,0,104.8299259185,201.9765520882,50.003,0,97.1441497803,108.8607635498 +2011-11-29 19:59:49.266,-134.5936145549,134171.916199202,0,0.21362,104.8454520821,201.7700552136,50.003,0,97.1509246826,108.8773651123 +2011-11-29 19:59:49.300,-134.5521266537,134166.166527957,0,0.21362,104.9040720887,201.8248929902,50.003,0,97.1450042725,108.8864212036 +2011-11-29 19:59:49.333,-134.5134233366,134166.905593323,0,0.21362,104.8884902297,202.031333815,50.003,0,97.1531219482,108.8955078125 +2011-11-29 19:59:49.366,-134.4719814678,134174.238862822,0,0,104.9040720887,201.8248929902,50.003,0,97.1499633789,108.8846588135 +2011-11-29 19:59:49.400,-134.4304891978,134168.69545158,0,0.21362,104.9626601875,201.8799419139,50.003,0,97.1544113159,108.8768615723 +2011-11-29 19:59:49.433,-134.3917873952,134169.626918106,0,0,105.021216282,201.9352018119,50.003,0,97.1561355591,108.8838424683 +2011-11-29 19:59:49.466,-134.3475574453,134170.766409609,0,0,105.0955208442,201.7844162366,50.003,0,97.1446380615,108.9010467529 +2011-11-29 19:59:49.500,-134.3088568753,134171.829051681,0,0,105.1540680503,201.8401544629,50.003,0,97.1651000977,108.8954696655 +2011-11-29 19:59:49.533,-134.2673573311,134166.562300154,-45,0.3021043012,105.1540680503,201.8401544629,50.003,0,97.1473083496,108.8869018555 +2011-11-29 19:59:49.566,-134.2258545504,134161.365940033,0,0,105.1540680503,201.8401544629,50.003,0,97.1590270996,108.8726043701 +2011-11-29 19:59:49.600,-134.1844272852,134169.18617469,0,0,105.271065204,201.9522626513,50.003,0,97.1599197388,108.8806152344 +2011-11-29 19:59:49.633,-134.1429221694,134164.130484899,180,0.21362,105.271065204,201.9522626513,50.003,0,97.1477279663,108.8688430786 +2011-11-29 19:59:49.666,-134.1042215996,134165.5167968,180,0.21362,105.345549252,201.8026204739,50.003,0,97.1417999268,108.8843841553 +2011-11-29 19:59:49.700,-134.0628028304,134173.542942546,0,0,105.4040214518,201.8592579394,50.003,0,97.1451263428,108.871383667 +2011-11-29 19:59:49.733,-134.0212946048,134168.693577395,-45,0.3021043012,105.4463163677,202.1220016403,50.003,0,97.1863861084,108.8955535889 +2011-11-29 19:59:49.766,-133.9825967228,134170.272256313,-90,0.21362,105.4463163677,202.1220016403,50.003,0,97.1583557129,108.8755645752 +2011-11-29 19:59:49.800,-133.941084648,134165.558966947,180,0.21362,105.5208671662,201.9731630398,50.003,0,97.1568908691,108.87449646 +2011-11-29 19:59:49.833,-133.9023868619,134167.264503987,0,0,105.6118483401,201.6189197943,50.003,0,97.1486968994,108.8946914673 +2011-11-29 19:59:49.866,-133.858162049,134169.288629703,0,0,105.5955277954,201.8246668857,50.003,0,97.1601715088,108.8856735229 +2011-11-29 19:59:49.900,-133.8194664521,134171.125309945,0,0,105.5955277954,201.8246668857,50.003,0,97.1415786743,108.899520874 +2011-11-29 19:59:49.933,-133.7779491216,134166.688809568,0,0,105.7122844545,201.9399473556,50.003,0,97.1699523926,108.8838119507 +2011-11-29 19:59:49.966,-133.7392539292,134168.652345326,0,0,105.770612688,201.9979017855,50.003,0,97.1632614136,108.877532959 +2011-11-29 19:59:50.000,-133.6977332427,134164.351958402,0,0,105.803616241,201.5867776015,50.003,0,97.1470718384,108.873008728 +2011-11-29 19:59:50.033,-133.6590386065,134166.442350377,0,0,105.803616241,201.5867776015,50.003,0,97.1551742554,108.874130249 +2011-11-29 19:59:50.066,-133.6148176651,134168.906297185,-90,0.21362,105.7870976545,201.7923313242,50.003,0,97.1576538086,108.88671875 +2011-11-29 19:59:50.100,-133.5732931993,134164.817082805,-135,0.3021043012,105.8289074014,202.0560654386,50.003,0,97.1747741699,108.8970184326 +2011-11-29 19:59:50.133,-133.5346007557,134167.104259397,135,0.3021043012,105.8871685028,202.1144381342,50.003,0,97.1519851685,108.8864517212 +2011-11-29 19:59:50.166,-133.4930733489,134163.151186539,0,0,105.903762585,201.9089863225,50.003,0,97.1449661255,108.890914917 +2011-11-29 19:59:50.200,-133.4516929233,134172.211375871,0,0,106.0202923021,202.0264774785,50.003,0,97.1641159058,108.8765106201 +2011-11-29 19:59:50.233,-133.4101647197,134168.399017717,-90,0.21362,106.0370290846,201.8211622325,50.003,0,97.1718597412,108.8908157349 +2011-11-29 19:59:50.266,-133.3714762839,134170.944141923,-90,0.21362,106.0537999534,201.6158642428,50.003,0,97.1608047485,108.8951339722 +2011-11-29 19:59:50.300,-133.3299454705,134167.267940029,0,0,106.0952973076,201.8802809778,50.003,0,97.1695632935,108.9012069702 +2011-11-29 19:59:50.333,-133.2912582865,134169.9399044,0,0,106.1535313539,201.9396083919,50.003,0,97.1474456787,108.8887176514 +2011-11-29 19:59:50.366,-133.249725026,134166.399868139,0,0,106.1535313539,201.9396083919,50.003,0,97.1648254395,108.8924407959 +2011-11-29 19:59:50.400,-133.2081895956,134162.930335809,180,0.21362,106.2117311331,201.999144291,50.003,0,97.1532211304,108.8642272949 +2011-11-29 19:59:50.433,-133.1695037007,134165.794807152,180,0.21362,106.2698965557,202.0588884908,50.003,0,97.1606750488,108.8718948364 +2011-11-29 19:59:50.466,-133.1252932957,134169.143380958,-135,0.3021043012,106.3450693218,201.9138454849,50.003,0,97.1511001587,108.8875579834 +2011-11-29 19:59:50.500,-133.0837556275,134165.885082299,-90,0.21362,106.4203500351,201.769150548,50.003,0,97.1553573608,108.8751449585 +2011-11-29 19:59:50.533,-133.0450733608,134168.946279721,-90,0.21362,106.4203500351,201.769150548,50.003,0,97.1585159302,108.8797836304 +2011-11-29 19:59:50.566,-133.0035337451,134165.824170009,-90,0.21362,106.4203500351,201.769150548,50.003,0,97.155960083,108.8935928345 +2011-11-29 19:59:50.600,-132.9648533474,134169.012188408,-45,0.3021043012,106.4613352347,202.0344960178,50.003,0,97.1582794189,108.9132080078 +2011-11-29 19:59:50.633,-132.9233119472,134166.026273758,0,0.21362,106.5194160136,202.0951329771,50.003,0,97.1628875732,108.876373291 +2011-11-29 19:59:50.666,-132.8846335701,134169.34110663,90,0.21362,106.5366540323,201.8903396143,50.003,0,97.1601867676,108.8673324585 +2011-11-29 19:59:50.700,-132.8430905482,134166.491392356,90,0.21362,106.6528180073,202.0123595583,50.003,0,97.1408843994,108.8819885254 +2011-11-29 19:59:50.733,-132.7988893338,134170.429685879,-90,0.21362,106.6528180073,202.0123595583,50.003,0,97.1601715088,108.874786377 +2011-11-29 19:59:50.766,-132.7573448968,134167.72555753,0,0,106.7108472674,202.0736806395,50.003,0,97.1613769531,108.8790740967 +2011-11-29 19:59:50.800,-132.7213237234,134164.576555276,0,0,106.7108472674,202.0736806395,50.003,0,97.1674423218,108.8837280273 +2011-11-29 19:59:50.833,-132.6771255885,134168.734809451,0,0.21362,106.7863286428,201.9306821428,50.003,0,97.1595153809,108.8886871338 +2011-11-29 19:59:50.866,-132.6355782984,134166.237435927,0,0,106.8443406102,201.9924798539,50.003,0,97.1515045166,108.8850784302 +2011-11-29 19:59:50.900,-132.5969076442,134170.007062043,180,0.21362,106.9023170326,202.0544845121,50.003,0,97.1613922119,108.8899993896 +2011-11-29 19:59:50.933,-132.5553593167,134167.645904084,0,0,106.9023170326,202.0544845121,50.003,0,97.143196106,108.8863067627 +2011-11-29 19:59:50.966,-132.5138095487,134165.355300635,0,0,106.9779405987,201.9123764481,50.003,0,97.1649856567,108.8787841797 +2011-11-29 19:59:51.000,-132.4751421765,134169.31736707,180,0.21362,107.0358987744,201.9748575711,50.003,0,97.1530532837,108.8786468506 +2011-11-29 19:59:51.033,-132.4335916184,134167.162984532,0,0,107.0358987744,201.9748575711,50.003,0,97.1544570923,108.8701934814 +2011-11-29 19:59:51.066,-132.3949271922,134171.251815056,-90,0.21362,107.018162899,202.1791139072,50.003,0,97.1756515503,108.8956451416 +2011-11-29 19:59:51.100,-132.3533760069,134169.233653852,0,0,107.0760321723,202.2417382621,50.003,0,97.1697998047,108.8745269775 +2011-11-29 19:59:51.133,-132.3118235935,134167.286057338,0,0,107.1338655592,202.3045687996,50.003,0,97.1496505737,108.8660125732 +2011-11-29 19:59:51.166,-132.2702699955,134165.409028588,0,0,107.1517073201,202.1004392567,50.003,0,97.1587219238,108.8966827393 +2011-11-29 19:59:51.200,-132.2287152567,134163.602570563,0,0,107.2274882265,201.9594933007,50.003,0,97.1484832764,108.8849029541 +2011-11-29 19:59:51.233,-132.190056342,134168.015120836,0,0,107.2673715605,202.2268455786,50.003,0,97.1644515991,108.8706741333 +2011-11-29 19:59:51.266,-132.1485013921,134166.344891104,0,0,107.2853550286,202.0228633849,50.003,0,97.1667861938,108.8750762939 +2011-11-29 19:59:51.300,-132.1069454294,134164.745236965,0,0,107.3431854802,202.0864394095,50.003,0,97.1574859619,108.894569397 +2011-11-29 19:59:51.333,-132.0653884977,134163.216160942,-135,0.3021043012,107.3431854802,202.0864394095,50.003,0,97.1604690552,108.8674545288 +2011-11-29 19:59:51.366,-132.0267350374,134167.886738476,180,0.21362,107.3612580385,201.8825413892,50.003,0,97.1684875488,108.8800430298 +2011-11-29 19:59:51.400,-131.9851782264,134166.49389131,0,0,107.4769147142,202.010439445,50.003,0,97.1538314819,108.8863372803 +2011-11-29 19:59:51.433,-131.9465285587,134171.291172178,0,0.21362,107.5346880329,202.0746968543,50.003,0,97.1460876465,108.8734359741 +2011-11-29 19:59:51.466,-131.9049720313,134170.034549813,0,0,107.5346880329,202.0746968543,50.003,0,97.1538391113,108.8756256104 +2011-11-29 19:59:51.500,-131.8634147473,134168.848509904,0,0,107.5346880329,202.0746968543,50.003,0,97.1713104248,108.8965759277 +2011-11-29 19:59:51.533,-131.8218567505,134167.733054323,0,0,107.6107438791,201.935540783,50.003,0,97.1534042358,108.8829803467 +2011-11-29 19:59:51.566,-131.7802980845,134166.68818483,0,0,107.6684958219,202.0002738348,50.003,0,97.1479644775,108.8718795776 +2011-11-29 19:59:51.600,-131.7416560919,134171.809060844,180,0.21362,107.7262107035,202.0652119846,50.003,0,97.1542434692,108.8691864014 +2011-11-29 19:59:51.633,-131.7026990665,134164.06488619,0,0,107.7262107035,202.0652119846,50.003,0,97.1664581299,108.8798980713 +2011-11-29 19:59:51.666,-131.6585396184,134170.062349938,0,0,107.7262107035,202.0652119846,50.003,0,97.1656799316,108.9002761841 +2011-11-29 19:59:51.700,-131.6169806139,134169.294876957,0,0,107.7838884427,202.1303550346,50.003,0,97.1622695923,108.8806533813 +2011-11-29 19:59:51.733,-131.5780157829,134161.749231181,90,0.21362,107.8415289584,202.1957027868,50.003,0,97.1611633301,108.8821640015 +2011-11-29 19:59:51.766,-131.5393803753,134167.189535782,0,0,107.9177492146,202.0579851184,50.003,0,97.1522750854,108.8906478882 +2011-11-29 19:59:51.800,-131.4978199205,134166.624461584,0,0,107.994073306,201.9206255159,50.003,0,97.1535186768,108.885055542 +2011-11-29 19:59:51.833,-131.4562591374,134166.129980663,90,0.21362,108.0517051773,201.9867188922,50.003,0,97.1591033936,108.8721466064 +2011-11-29 19:59:51.866,-131.4146980699,134165.706093799,0,0,108.0329469432,202.1898347673,50.003,0,97.1572265625,108.8883285522 +2011-11-29 19:59:51.900,-131.3731367616,134165.35280166,0,0,108.1092992865,202.0530164979,50.003,0,97.1603088379,108.8840484619 +2011-11-29 19:59:51.933,-131.3315752563,134165.070104805,0,0.21362,108.1092992865,202.0530164979,50.003,0,97.157699585,108.8916625977 +2011-11-29 19:59:51.966,-131.2900135977,134164.858003679,0,0.21362,108.1857549664,201.9165575246,50.003,0,97.1643371582,108.9079208374 +2011-11-29 19:59:52.000,-131.2513913166,134170.752978159,-45,0.3021043012,108.3008566383,202.0503062898,50.003,0,97.170211792,108.8901977539 +2011-11-29 19:59:52.033,-131.2124072255,134163.789683633,-90,0.42724,108.281854252,202.2531326808,50.003,0,97.1667327881,108.8997650146 +2011-11-29 19:59:52.066,-131.1737880997,134169.807150821,-90,0.21362,108.3008566383,202.0503062898,50.003,0,97.1690979004,108.8810501099 +2011-11-29 19:59:52.100,-131.1322278582,134169.863063521,0,0,108.3008566383,202.0503062898,50.003,0,97.170753479,108.8821868896 +2011-11-29 19:59:52.133,-131.0906676731,134169.989569823,0,0.21362,108.3583502328,202.1174861483,50.003,0,97.1581726074,108.8782730103 +2011-11-29 19:59:52.166,-131.0491075884,134170.186669527,0,0,108.3583502328,202.1174861483,50.003,0,97.1632843018,108.8746337891 +2011-11-29 19:59:52.200,-131.0075476476,134170.454362322,0,0,108.4158055629,202.184869387,50.003,0,97.1628417969,108.8712463379 +2011-11-29 19:59:52.233,-130.9659878945,134170.792647786,90,0.21362,108.4349488229,201.9822003758,50.003,0,97.1456756592,108.8899459839 +2011-11-29 19:59:52.266,-130.9269895519,134164.28417318,90,0.21362,108.569130731,201.9152015093,50.003,0,97.1612548828,108.8977279663 +2011-11-29 19:59:52.300,-130.8883839131,134170.752041081,0,0,108.5498466225,202.1177119253,50.003,0,97.1746368408,108.8907852173 +2011-11-29 19:59:52.333,-130.8468246739,134171.292733968,0,0,108.5498466225,202.1177119253,50.003,0,97.1508712769,108.8670883179 +2011-11-29 19:59:52.366,-130.8052657915,134171.904017294,0,0,108.6265727891,201.9833300144,50.003,0,97.1577148438,108.892074585 +2011-11-29 19:59:52.400,-130.7637073097,134172.585890095,0,0,108.6839760524,202.0516613984,50.003,0,97.1575088501,108.8847808838 +2011-11-29 19:59:52.433,-130.7221492721,134173.338351293,0,0,108.7413404452,202.1201954556,50.003,0,97.1483459473,108.8847503662 +2011-11-29 19:59:52.466,-130.6831402506,134167.218585966,0,0,108.798665892,202.18893198,50.003,0,97.1460723877,108.8751068115 +2011-11-29 19:59:52.500,-130.6415810646,134168.107893413,0,0,108.8755295501,202.0557266697,50.003,0,97.1656494141,108.8922424316 +2011-11-29 19:59:52.533,-130.6025669044,134162.116589883,90,0.21362,108.8755295501,202.0557266697,50.003,0,97.1601791382,108.8859863281 +2011-11-29 19:59:52.566,-130.5610067344,134163.142752359,0,0,108.8951459909,201.8536062116,50.003,0,97.1379928589,108.8833236694 +2011-11-29 19:59:52.600,-130.5194472221,134164.239503637,0,0,108.9524944811,201.9228854757,50.003,0,97.1658706665,108.8758621216 +2011-11-29 19:59:52.633,-130.477888411,134165.406841986,0,0,108.9900860135,202.1943486436,50.003,0,97.1637878418,108.8795394897 +2011-11-29 19:59:52.666,-130.436330345,134166.644765563,0,0,109.0098035752,201.9923668955,50.003,0,97.1775512695,108.8851928711 +2011-11-29 19:59:52.700,-130.3977505642,134173.886530207,0,0,109.0868806948,201.8601622012,50.003,0,97.1629257202,108.8756561279 +2011-11-29 19:59:52.733,-130.3587276059,134168.284067424,-90,0.21362,109.1441611248,201.930117177,50.003,0,97.1670227051,108.8845367432 +2011-11-29 19:59:52.766,-130.3171716518,134169.724374994,-90,0.21362,109.1441611248,201.930117177,50.003,0,97.1654663086,108.8692321777 +2011-11-29 19:59:52.800,-130.2781441753,134164.250436743,0,0,109.2014018239,202.0002738348,50.003,0,97.1692962646,108.893081665 +2011-11-29 19:59:52.833,-130.2336031084,134159.913984501,135,0.3021043012,109.2586027193,202.0706319646,50.003,0,97.150062561,108.8865661621 +2011-11-29 19:59:52.866,-130.195032622,134167.475351841,116.5650511771,0.4776688414,109.3157637386,202.141191356,50.003,0,97.1507110596,108.8729934692 +2011-11-29 19:59:52.900,-130.1534783873,134169.193671401,90,0.21362,109.3157637386,202.141191356,50.003,0,97.1658096313,108.8874130249 +2011-11-29 19:59:52.933,-130.1119252388,134170.982562058,90,0.21362,109.3358118963,201.9396083919,50.003,0,97.1715393066,108.879486084 +2011-11-29 19:59:52.966,-130.0698980585,134159.942411492,45,0.3021043012,109.3929829316,202.010439445,50.003,0,97.184211731,108.883392334 +2011-11-29 19:59:53.000,-130.0313370008,134167.761792023,0,0,109.4501138323,202.0814714886,50.003,0,97.1458358765,108.8887634277 +2011-11-29 19:59:53.033,-129.9897851639,134169.758110055,0,0,109.4703020095,201.8800549353,50.003,0,97.1659393311,108.8893890381 +2011-11-29 19:59:53.066,-129.950745053,134164.806462118,0,0,109.5072045272,202.1527043111,50.003,0,97.1641540527,108.885887146 +2011-11-29 19:59:53.100,-129.9091935623,134166.93964146,0,0,109.5642549454,202.2241377002,50.003,0,97.156539917,108.8809204102 +2011-11-29 19:59:53.133,-129.8676434147,134169.143380958,0,0,109.5845426172,202.0228633849,50.003,0,97.1690368652,108.8894271851 +2011-11-29 19:59:53.166,-129.8285987341,134164.386631936,-90,0.21362,109.6048707518,201.8216144492,50.003,0,97.1728363037,108.8854522705 +2011-11-29 19:59:53.200,-129.7870491819,134166.727230922,0,0,109.6416022623,202.0945684711,50.003,0,97.1687316895,108.8924179077 +2011-11-29 19:59:53.233,-129.7455011013,134169.138383149,0,0,109.719048681,201.9653680127,50.003,0,97.1709136963,108.8887405396 +2011-11-29 19:59:53.266,-129.7064522058,134164.576555276,0,0,109.719048681,201.9653680127,50.003,0,97.1594543457,108.8840866089 +2011-11-29 19:59:53.300,-129.66490497,134167.124563303,0,0,109.7760766026,202.037545238,50.003,0,97.1669692993,108.8912353516 +2011-11-29 19:59:53.333,-129.6233593339,134169.743116695,0,0,109.7760766026,202.037545238,50.003,0,97.1558074951,108.8780899048 +2011-11-29 19:59:53.366,-129.5843065786,134165.37622955,0,0,109.8536306067,201.9089863225,50.003,0,97.1815414429,108.8883056641 +2011-11-29 19:59:53.400,-129.5427620365,134168.131633187,-90,0.21362,109.8900100132,202.1824995034,50.003,0,97.1588363647,108.8701095581 +2011-11-29 19:59:53.433,-129.5037062461,134163.893392268,0,0,109.9469153648,202.2552761136,50.003,0,97.1452102661,108.8714828491 +2011-11-29 19:59:53.466,-129.4621629624,134166.785643853,0,0,110.0244939852,202.1275329806,50.003,0,97.1631393433,108.8776550293 +2011-11-29 19:59:53.500,-129.4176011273,134163.934938174,90,0.21362,110.0813661792,202.2007807432,50.003,0,97.1567840576,108.8885650635 +2011-11-29 19:59:53.533,-129.3785402835,134159.896490965,0,0.21362,110.0813661792,202.2007807432,50.003,0,97.1786651611,108.8834838867 +2011-11-29 19:59:53.566,-129.3369985926,134163.001245489,0,0,110.1021705833,202.0001608807,50.003,0,97.1651382446,108.8806762695 +2011-11-29 19:59:53.600,-129.2954588461,134166.176523797,0,0,110.1590503785,202.0736806395,50.003,0,97.1673049927,108.8728561401 +2011-11-29 19:59:53.633,-129.2563950954,134162.333068648,0,0,110.1949867647,202.3478732848,50.003,0,97.1736297607,108.8905639648 +2011-11-29 19:59:53.666,-129.214857112,134165.645181428,0,0,110.1949867647,202.3478732848,50.003,0,97.147895813,108.8899383545 +2011-11-29 19:59:53.700,-129.1757909549,134161.930411619,0,0,110.2726856133,202.2213169549,50.003,0,97.1635665894,108.888671875 +2011-11-29 19:59:53.733,-129.134254899,134165.379353268,180,0.21362,110.3504816322,202.0951329771,50.003,0,97.162612915,108.9020462036 +2011-11-29 19:59:53.766,-129.0927210003,134168.898800458,90,0.21362,110.4283747164,201.9693220495,50.003,0,97.1719665527,108.8745956421 +2011-11-29 19:59:53.800,-129.0536525261,134165.379040896,90,0.21362,110.4851434125,202.0439823295,50.003,0,97.1499252319,108.9010162354 +2011-11-29 19:59:53.833,-129.0121208039,134169.035303295,0,0,110.4639640609,202.2441074515,50.003,0,97.163230896,108.8866882324 +2011-11-29 19:59:53.866,-128.9730503123,134165.644244314,0,0,110.4639640609,202.2441074515,50.003,0,97.145690918,108.8915252686 +2011-11-29 19:59:53.900,-128.931520931,134169.437314277,0,0,110.5206424933,202.3188918818,50.003,0,97.1562423706,108.8820343018 +2011-11-29 19:59:53.933,-128.8924485767,134166.174961947,0,0,110.5985547551,202.1938972605,50.003,0,97.1613235474,108.8911209106 +2011-11-29 19:59:53.966,-128.8509217006,134170.104831016,0,0,110.619872649,201.9939483081,50.003,0,97.1549682617,108.8787689209 +2011-11-29 19:59:54.000,-128.8088010037,134161.23317797,0,0,110.6765632616,202.0692769833,50.003,0,97.1621627808,108.8814239502 +2011-11-29 19:59:54.033,-128.7672751144,134165.305008753,0,0,110.7332115675,202.1448033341,50.003,0,97.1583633423,108.8851623535 +2011-11-29 19:59:54.066,-128.7281977615,134162.304954542,-90,0.21362,110.7117976037,202.3446032176,50.003,0,97.156867981,108.885055542 +2011-11-29 19:59:54.100,-128.6866747124,134166.51357057,0,0,110.7332115675,202.1448033341,50.003,0,97.1624221802,108.884765625 +2011-11-29 19:59:54.133,-128.6475959666,134163.642242304,180,0.21362,110.7898175035,202.2205271391,50.003,0,97.1695480347,108.9019088745 +2011-11-29 19:59:54.166,-128.6060759219,134167.987632652,0,0,110.867933058,202.0968264857,50.003,0,97.1622161865,108.8821182251 +2011-11-29 19:59:54.200,-128.5639388201,134159.53756059,0,0,110.9461441525,201.9735019472,50.003,0,97.1586837769,108.8825454712 +2011-11-29 19:59:54.233,-128.522420281,134164.024902198,0,0,110.9810277546,202.2494098225,50.003,0,97.1760482788,108.8699493408 +2011-11-29 19:59:54.266,-128.4833374937,134161.415921011,0,0,110.9810277546,202.2494098225,50.003,0,97.1738204956,108.8874816895 +2011-11-29 19:59:54.300,-128.4418222938,134166.040018051,180,0.21362,110.9810277546,202.2494098225,50.003,0,97.1625976563,108.8957824707 +2011-11-29 19:59:54.333,-128.4027385837,134163.559775049,0,0,111.0375110254,202.3259966565,50.003,0,97.1613235474,108.8880615234 +2011-11-29 19:59:54.366,-128.3612268873,134168.320614131,0,0.21362,111.0592485536,202.1266299149,50.003,0,97.1561508179,108.8849868774 +2011-11-29 19:59:54.400,-128.3221424089,134165.969109977,0,0,111.1375642932,202.0042271884,50.003,0,97.1584091187,108.8774261475 +2011-11-29 19:59:54.433,-128.2775652469,134165.195053765,0,0,111.1940564815,202.0813585799,50.003,0,97.174041748,108.8816299438 +2011-11-29 19:59:54.466,-128.2384784528,134162.97719243,0,0,111.2505055071,202.158686274,50.003,0,97.1560134888,108.8838348389 +2011-11-29 19:59:54.500,-128.1969726184,134168.016682664,0,0,111.2505055071,202.158686274,50.003,0,97.1864395142,108.8949966431 +2011-11-29 19:59:54.533,-128.1554699238,134173.126575592,0,0,111.3289240768,202.037206438,50.003,0,97.1517028809,108.9061584473 +2011-11-29 19:59:54.566,-128.1163835392,134171.10375721,-45,0.3021043012,111.3289240768,202.037206438,50.003,0,97.1628341675,108.8843078613 +2011-11-29 19:59:54.600,-128.0742182454,134163.497299822,-45,0.3021043012,111.3853336126,202.1150025847,50.003,0,97.1712646484,108.8524856567 +2011-11-29 19:59:54.633,-128.0351278887,134161.604286654,0,0.21362,111.4416996853,202.1929944913,50.003,0,97.1585769653,108.8591156006 +2011-11-29 19:59:54.666,-127.9936295824,134166.988683258,0,0,111.4980222362,202.2711819314,50.003,0,97.1622467041,108.8606338501 +2011-11-29 19:59:54.700,-127.9545391633,134165.224416753,180,0.21362,111.5543012068,202.3495646782,50.003,0,97.1585998535,108.8716583252 +2011-11-29 19:59:54.733,-127.9099606616,134165.120084403,0,0,111.5543012068,202.3495646782,50.003,0,97.1658096313,108.8775558472 +2011-11-29 19:59:54.766,-127.8708686589,134163.489490417,0,0,111.5543012068,202.3495646782,50.003,0,97.1712646484,108.882598877 +2011-11-29 19:59:54.800,-127.8317757242,134161.921352603,0,0,111.6328268633,202.2295534208,50.003,0,97.1639556885,108.8818130493 +2011-11-29 19:59:54.833,-127.7902859916,134167.650589582,0,0,111.7114456278,202.1099224732,50.003,0,97.1689987183,108.8870849609 +2011-11-29 19:59:54.866,-127.7511933848,134166.211196859,180,0.21362,111.7114456278,202.1099224732,50.003,0,97.1695175171,108.8840179443 +2011-11-29 19:59:54.900,-127.7066153953,134166.47733574,180,0.21362,111.7338702883,201.9114724202,50.003,0,97.168006897,108.8642120361 +2011-11-29 19:59:54.933,-127.6675216101,134165.171625844,0,0,111.7338702883,201.9114724202,50.003,0,97.1670761108,108.9022369385 +2011-11-29 19:59:54.966,-127.6284270823,134163.928378295,-90,0.21362,111.8464002737,202.0700673902,50.003,0,97.1837463379,108.8925933838 +2011-11-29 19:59:55.000,-127.5893318481,134162.747594831,0,0,111.9587533264,202.2294405948,50.003,0,97.1668624878,108.899230957 +2011-11-29 19:59:55.033,-127.5447532556,134163.308624461,90,0.21362,111.9587533264,202.2294405948,50.003,0,97.154045105,108.8806991577 +2011-11-29 19:59:55.066,-127.5056571656,134162.261533857,90,0.21362,111.9587533264,202.2294405948,50.003,0,97.1542205811,108.8844604492 +2011-11-29 19:59:55.100,-127.4641822215,134168.543642539,0,0,111.9814074161,202.031333815,50.003,0,97.1625366211,108.8894348145 +2011-11-29 19:59:55.133,-127.4250870855,134167.62528789,-90,0.21362,112.0375634719,202.1113900741,50.003,0,97.159286499,108.8927383423 +2011-11-29 19:59:55.166,-127.3828847619,134161.210686502,90,0.21362,112.1164655855,201.9937223928,50.003,0,97.1561737061,108.8901977539 +2011-11-29 19:59:55.200,-127.3414153689,134167.700880585,90,0.21362,112.1725783663,202.0742452039,50.003,0,97.1520233154,108.8684539795 +2011-11-29 19:59:55.233,-127.3023192654,134166.978687479,0,0,112.1497419598,202.2720843516,50.003,0,97.1672134399,108.87940979 +2011-11-29 19:59:55.266,-127.257743925,134168.062600412,0,0,112.2057642831,202.352721908,50.003,0,97.1569061279,108.8838043213 +2011-11-29 19:59:55.300,-127.2186475377,134167.474102373,0,0.21362,112.261741921,202.4335527679,50.003,0,97.1694946289,108.877494812 +2011-11-29 19:59:55.333,-127.1795508255,134166.948075401,0,0,112.261741921,202.4335527679,50.003,0,97.1713867188,108.8931045532 +2011-11-29 19:59:55.366,-127.140453825,134166.484520233,0,0,112.2846696071,202.2358715783,50.003,0,97.16771698,108.891242981 +2011-11-29 19:59:55.400,-127.0958798551,134167.863311025,0,0,112.3636660155,202.1194052447,50.003,0,97.1463241577,108.8821563721 +2011-11-29 19:59:55.433,-127.0567828934,134167.53345208,0,0,112.4427533653,202.0033235716,50.003,0,97.1465606689,108.8655776978 +2011-11-29 19:59:55.466,-127.0176857576,134167.266065824,0,0,112.4755785622,202.2823490986,50.003,0,97.1540145874,108.8921279907 +2011-11-29 19:59:55.500,-126.9731134484,134168.868501182,-90,0.21362,112.5314671448,202.3641100777,50.003,0,97.1471710205,108.8960037231 +2011-11-29 19:59:55.533,-126.9340165961,134168.734809451,-90,0.21362,112.5314671448,202.3641100777,50.003,0,97.1634063721,108.8915939331 +2011-11-29 19:59:55.566,-126.8949196841,134168.663590437,-90,0.21362,112.5873105314,202.4460634471,50.003,0,97.1835021973,108.8673858643 +2011-11-29 19:59:55.600,-126.8558227487,134168.65484424,0,0.21362,112.6663976914,202.3310713428,50.003,0,97.1632843018,108.8747787476 +2011-11-29 19:59:55.633,-126.8135957693,134163.222408479,0,0,112.6663976914,202.3310713428,50.003,0,97.1823577881,108.8849411011 +2011-11-29 19:59:55.666,-126.7744973014,134163.34361064,180,0.21362,112.6663976914,202.3310713428,50.003,0,97.1611480713,108.8890838623 +2011-11-29 19:59:55.700,-126.7299270687,134165.389036794,180,0.21362,112.7455746477,202.2164651809,50.003,0,97.1539840698,108.8994369507 +2011-11-29 19:59:55.733,-126.6908293689,134165.643931943,-90,0.21362,112.8248412505,202.102245618,50.003,0,97.1744003296,108.8707122803 +2011-11-29 19:59:55.766,-126.6517318359,134165.961300716,0,0,112.904197348,201.9884133097,50.003,0,97.1494750977,108.889289856 +2011-11-29 19:59:55.800,-126.609496068,134150.881123582,0,0,112.9599920337,202.0716481947,50.003,0,97.1737213135,108.8829040527 +2011-11-29 19:59:55.833,-126.5680679636,134168.681395194,0,0,112.9599920337,202.0716481947,50.003,0,97.1567077637,108.8770446777 +2011-11-29 19:59:55.866,-126.5258299517,134163.745638677,45,0.3021043012,112.936387279,202.2683618421,50.003,0,97.1740264893,108.9014892578 +2011-11-29 19:59:55.900,-126.4867324564,134164.326656088,45,0.3021043012,112.9920915093,202.3517070895,50.003,0,97.1633987427,108.8757171631 +2011-11-29 19:59:55.933,-126.4476353179,134164.970145553,90,0.21362,113.0157407211,202.155074544,50.003,0,97.1692276001,108.8884124756 +2011-11-29 19:59:55.966,-126.4053918329,134150.242300261,0,0,113.0951829994,202.0421754473,50.003,0,97.1511535645,108.8882598877 +2011-11-29 19:59:56.000,-126.3639757136,134168.388084949,0,0.21362,113.1508837974,202.1260654969,50.003,0,97.1445465088,108.8763427734 +2011-11-29 19:59:56.033,-126.3248804657,134169.227718958,45,0.3021043012,113.206538326,202.2101464171,50.003,0,97.1686477661,108.8985748291 +2011-11-29 19:59:56.066,-126.2857857253,134170.12981988,90,0.21362,113.206538326,202.2101464171,50.003,0,97.1611557007,108.900970459 +2011-11-29 19:59:56.100,-126.2435383741,134165.681416483,0,0,113.2304126595,202.013827868,50.003,0,97.1548614502,108.8809204102 +2011-11-29 19:59:56.133,-126.2012882442,134161.305962835,180,0.21362,113.2621465381,202.29441797,50.003,0,97.1534805298,108.8781204224 +2011-11-29 19:59:56.166,-126.1621921462,134162.405540537,0,0,113.3177083868,202.3788799174,50.003,0,97.1620025635,108.9016799927 +2011-11-29 19:59:56.200,-126.1199383963,134158.170554998,0,0,113.4212825942,202.0714223663,50.003,0,97.1482009888,108.8701324463 +2011-11-29 19:59:56.233,-126.078539557,134166.799388069,0,0.21362,113.4212825942,202.0714223663,50.003,0,97.1569366455,108.8866729736 +2011-11-29 19:59:56.266,-126.0362846182,134162.708859959,0,0,113.3972299186,202.2674594053,50.003,0,97.1673736572,108.872253418 +2011-11-29 19:59:56.300,-125.9971904818,134164.072070812,0,0,113.5323485609,202.2416254428,50.003,0,97.1594848633,108.8888473511 +2011-11-29 19:59:56.333,-125.958097158,134165.497742137,-90,0.21362,113.5565353332,202.0457891955,50.003,0,97.1800765991,108.8734893799 +2011-11-29 19:59:56.366,-125.9190046833,134166.985871945,-45,0.3021043012,113.6120416406,202.1312580836,50.003,0,97.1493682861,108.8722305298 +2011-11-29 19:59:56.400,-125.8767451463,134163.170866289,0,0.21362,113.6432273266,202.4125871936,50.003,0,97.1727752686,108.8737335205 +2011-11-29 19:59:56.433,-125.8353639263,134172.211063515,45,0.3021043012,113.6985963977,202.4983519717,50.003,0,97.1650314331,108.8755340576 +2011-11-29 19:59:56.466,-125.7953904767,134161.114472956,90,0.21362,113.6675009754,202.2169165137,50.003,0,97.1680755615,108.8761672974 +2011-11-29 19:59:56.500,-125.756298725,134162.862549868,180,0.21362,113.691821641,202.0212821986,50.003,0,97.1696929932,108.8909378052 +2011-11-29 19:59:56.533,-125.7140334771,134159.328574576,-90,0.21362,113.7472772497,202.1072130282,50.003,0,97.1583175659,108.8901977539 +2011-11-29 19:59:56.566,-125.6726622447,134168.643911493,-90,0.21362,113.7472772497,202.1072130282,50.003,0,97.157081604,108.8854980469 +2011-11-29 19:59:56.600,-125.6303966828,134165.25440448,0,0,113.778278551,202.3888010365,50.003,0,97.1822662354,108.8975372314 +2011-11-29 19:59:56.633,-125.5913084876,134167.266065824,0,0,113.8580468587,202.2796419631,50.003,0,97.1639556885,108.8804931641 +2011-11-29 19:59:56.666,-125.5522214826,134169.340169542,0,0,113.937901151,202.1708753864,50.003,0,97.1505889893,108.8835754395 +2011-11-29 19:59:56.700,-125.5099532235,134166.158718707,0,0,113.9932105692,202.2576451445,50.003,0,97.1790924072,108.8581161499 +2011-11-29 19:59:56.733,-125.4676829827,134163.050288726,0,0,113.9932105692,202.2576451445,50.003,0,97.1486206055,108.8765487671 +2011-11-29 19:59:56.766,-125.4285967805,134165.32187684,90,0.21362,114.0731459219,202.1495439574,50.003,0,97.1672363281,108.8773803711 +2011-11-29 19:59:56.800,-125.3863244559,134162.353998034,45,0.3021043012,114.1284029303,202.2367741561,50.003,0,97.1610794067,108.8828582764 +2011-11-29 19:59:56.833,-125.3472394866,134164.755545283,0,0.21362,114.1284029303,202.2367741561,50.003,0,97.1972503662,108.8884429932 +2011-11-29 19:59:56.866,-125.3049652486,134161.92822496,0,0,114.1836122402,202.3241922929,50.003,0,97.1837997437,108.875831604 +2011-11-29 19:59:56.900,-125.26588167,134164.459727464,180,0.21362,114.2387738111,202.4117981243,50.003,0,97.1591644287,108.8805007935 +2011-11-29 19:59:56.933,-125.2236056889,134161.772972079,-90,0.21362,114.2938876026,202.4995914066,50.003,0,97.1670913696,108.893409729 +2011-11-29 19:59:56.966,-125.1845236586,134164.43442517,0,0,114.3738866014,202.3929722709,50.003,0,97.1730804443,108.8729705811 +2011-11-29 19:59:57.000,-125.142246105,134161.888240332,0,0,114.3738866014,202.3929722709,50.003,0,97.171546936,108.9037704468 +2011-11-29 19:59:57.033,-125.1031657805,134164.679638556,0,0,114.3988676151,202.1984110461,50.003,0,97.1695251465,108.899848938 +2011-11-29 19:59:57.066,-125.060886825,134162.274029019,0,0,114.4539697741,202.2867481164,50.003,0,97.1380767822,108.8764648438 +2011-11-29 19:59:57.100,-125.0218083639,134165.195366137,0,0,114.4539697741,202.2867481164,50.003,0,97.1440734863,108.8976669312 +2011-11-29 19:59:57.133,-124.9795281769,134162.930335809,0,0,114.5341369402,202.1809195656,50.003,0,97.1693191528,108.8798980713 +2011-11-29 19:59:57.166,-124.9372465852,134150.738364796,0,0,114.5341369402,202.1809195656,50.003,0,97.1678695679,108.8772735596 +2011-11-29 19:59:57.200,-124.8981704888,134163.85715673,0,0,114.6143879176,202.07548724,50.003,0,97.175994873,108.8855743408 +2011-11-29 19:59:57.233,-124.8590962272,134167.038349773,0,0,114.5891845722,202.2697154899,50.003,0,97.1767120361,108.879737854 +2011-11-29 19:59:57.266,-124.8168140888,134165.054486177,-90,0.21362,114.6694289185,202.1645551976,50.003,0,97.1649246216,108.8866958618 +2011-11-29 19:59:57.300,-124.774530723,134163.14368949,0,0,114.724421391,202.2538095568,50.003,0,97.1566314697,108.8917999268 +2011-11-29 19:59:57.333,-124.7354593049,134166.522316907,0,0.21362,114.724421391,202.2538095568,50.003,0,97.1647186279,108.8768463135 +2011-11-29 19:59:57.366,-124.6931753078,134164.752109177,0,0.21362,114.7497566321,202.0597918592,50.003,0,97.162727356,108.8742141724 +2011-11-29 19:59:57.400,-124.6541064652,134168.260640042,0,0,114.8047420465,202.1493182159,50.003,0,97.1680297852,108.8798294067 +2011-11-29 19:59:57.433,-124.6118220073,134166.631021332,0,0,114.8596787288,202.239030583,50.003,0,97.1591033936,108.8679962158 +2011-11-29 19:59:57.466,-124.5749745599,134162.731038799,180,0.21362,114.914566643,202.328928713,50.003,0,97.1684875488,108.8740386963 +2011-11-29 19:59:57.500,-124.53268746,134161.238176074,180,0.21362,114.9949550824,202.2253788156,50.003,0,97.1475372314,108.8726577759 +2011-11-29 19:59:57.533,-124.4903994419,134159.818394794,0,0,115.0497863759,202.315734124,50.003,0,97.177406311,108.8779373169 +2011-11-29 19:59:57.566,-124.4513347572,134163.650676452,0,0,115.0497863759,202.315734124,50.003,0,97.1702423096,108.8703231812 +2011-11-29 19:59:57.600,-124.4090467034,134162.371491249,0,0,115.1045686652,202.4062745524,50.003,0,97.1501235962,108.8773956299 +2011-11-29 19:59:57.633,-124.3699851441,134166.333645799,0,0,115.1302489473,202.2128544829,50.003,0,97.1458892822,108.8874282837 +2011-11-29 19:59:57.666,-124.3276972251,134165.195053765,0,0,115.1850229941,202.3036665243,50.003,0,97.1630401611,108.8974227905 +2011-11-29 19:59:57.700,-124.2876112015,134156.565180327,180,0.21362,115.2397478379,202.3946632874,50.003,0,97.1670532227,108.8887481689 +2011-11-29 19:59:57.733,-124.2485516539,134150.72118375,90,0.21362,115.2655588179,202.2014577944,50.003,0,97.1507492065,108.8830108643 +2011-11-29 19:59:57.766,-124.2072964979,134172.510924862,0,0.21362,115.3202749936,202.2927261155,50.003,0,97.1583251953,108.880897522 +2011-11-29 19:59:57.800,-124.1672050336,134164.078318309,0,0,115.3202749936,202.2927261155,50.003,0,97.1677093506,108.8694458008 +2011-11-29 19:59:57.833,-124.1249150029,134163.290194237,0,0,115.4008831875,202.1911889408,50.003,0,97.1616363525,108.8890609741 +2011-11-29 19:59:57.866,-124.0858626481,134167.705878448,0,0,115.4555408695,202.2829130806,50.003,0,97.1804656982,108.8902740479 +2011-11-29 19:59:57.900,-124.0435733479,134167.058341321,0,0,115.5101489558,202.3748211375,50.003,0,97.162727356,108.8739013672 +2011-11-29 19:59:57.933,-124.0012836624,134166.483895494,0,0,115.5362205484,202.1820480939,50.003,0,97.1711578369,108.8679580688 +2011-11-29 19:59:57.966,-123.9589936379,134165.982541906,-90,0.21362,115.5623418997,201.9893169933,50.003,0,97.1614303589,108.8739624023 +2011-11-29 19:59:58.000,-123.9221295626,134163.065907587,-90,0.21362,115.5623418997,201.9893169933,50.003,0,97.1431350708,108.8888931274 +2011-11-29 19:59:58.033,-123.8798382268,134162.701362886,-90,0.21362,115.5623418997,201.9893169933,50.003,0,97.1537857056,108.8983459473 +2011-11-29 19:59:58.066,-123.8375466842,134162.40991384,180,0.21362,115.6169806065,202.0815843973,50.003,0,97.1659469604,108.8904647827 +2011-11-29 19:59:58.100,-123.7985040889,134167.284183134,180,0.21362,115.6715693921,202.1740354067,50.003,0,97.1497192383,108.8815078735 +2011-11-29 19:59:58.133,-123.7583864888,134159.521628932,0,0,115.7523995828,202.0742452039,50.003,0,97.1625518799,108.8768844604 +2011-11-29 19:59:58.166,-123.7193459845,134164.522202242,0,0.21362,115.8333094844,201.9748575711,50.003,0,97.1608352661,108.8717575073 +2011-11-29 19:59:58.200,-123.6770548768,134164.50814542,0,0.21362,115.8614066922,202.2602397655,50.003,0,97.1608276367,108.8765563965 +2011-11-29 19:59:58.233,-123.6347637834,134164.567184065,0,0,115.8614066922,202.2602397655,50.003,0,97.1676330566,108.8694610596 +2011-11-29 19:59:58.266,-123.5957294743,134169.76498201,0,0,115.8878276395,202.068034909,50.003,0,97.1521453857,108.8916854858 +2011-11-29 19:59:58.300,-123.5556011846,134162.334942921,0,0,115.9702131112,202.4469650878,50.003,0,97.1585769653,108.8986282349 +2011-11-29 19:59:58.333,-123.5133095876,134162.603900896,0,0,116.0245409899,202.540601153,50.003,0,97.1677703857,108.8965911865 +2011-11-29 19:59:58.366,-123.4742795284,134167.995441796,0,0,116.0510801618,202.3486626035,50.003,0,97.1569519043,108.8877639771 +2011-11-29 19:59:58.400,-123.4341441033,134150.764604934,180,0.21362,116.0776697234,202.1567675504,50.003,0,97.161529541,108.8999023438 +2011-11-29 19:59:58.433,-123.3918523829,134161.243486559,0,0,116.1053969272,202.4425695515,50.003,0,97.1603851318,108.8806762695 +2011-11-29 19:59:58.466,-123.3495609875,134161.795463454,0,0.21362,116.1863310491,202.3449415028,50.003,0,97.1730651855,108.9012145996 +2011-11-29 19:59:58.500,-123.3105374708,134167.448175914,45,0.3021043012,116.2405858612,202.4393010138,50.003,0,97.1746368408,108.8605804443 +2011-11-29 19:59:58.533,-123.2682484304,134168.140691784,90,0.21362,116.2673431456,202.2477175916,50.003,0,97.1575622559,108.8795013428 +2011-11-29 19:59:58.566,-123.2281022544,134161.247859899,180,0.21362,116.2941511649,202.0561783614,50.003,0,97.1482009888,108.8838043213 +2011-11-29 19:59:58.600,-123.1912241398,134159.432599045,180,0.21362,116.4026639515,202.2457997127,50.003,0,97.156829834,108.8981933594 +2011-11-29 19:59:58.633,-123.1489333129,134150.331329611,0,0,116.375778408,202.4371595295,50.003,0,97.1731033325,108.8786621094 +2011-11-29 19:59:58.666,-123.1066430757,134161.303151403,180,0.21362,116.375778408,202.4371595295,50.003,0,97.1512374878,108.8828887939 +2011-11-29 19:59:58.700,-123.0643534741,134162.348062835,180,0.21362,116.4026639515,202.2457997127,50.003,0,97.1615982056,108.874130249 +2011-11-29 19:59:58.733,-123.0253426839,134168.455555733,0,0,116.456843979,202.3408820422,50.003,0,97.1549530029,108.8856430054 +2011-11-29 19:59:58.766,-122.9851845428,134161.961337221,0,0,116.5109730624,202.4361451343,50.003,0,97.1742858887,108.8965072632 +2011-11-29 19:59:58.800,-122.9428962228,134163.216160942,0,0,116.5921030068,202.3405437502,50.003,0,97.1489715576,108.8876876831 +2011-11-29 19:59:58.833,-122.9038913296,134169.517279021,0,0,116.5921030068,202.3405437502,50.003,0,97.1713790894,108.8796539307 +2011-11-29 19:59:58.866,-122.8637277475,134163.222408479,0,0,116.727361733,202.3413330974,50.003,0,97.1679153442,108.9044113159 +2011-11-29 19:59:58.900,-122.8214410891,134164.687135518,90,0.21362,116.727361733,202.3413330974,50.003,0,97.1602401733,108.9035568237 +2011-11-29 19:59:58.933,-122.7812722541,134158.527614704,90,0.21362,116.6733094885,202.2453484444,50.003,0,97.1509399414,108.8897857666 +2011-11-29 19:59:58.966,-122.7422737812,134165.086348176,0,0,116.7545922893,202.1505597907,50.003,0,97.1467895508,108.8860855103 +2011-11-29 19:59:59.000,-122.6999891643,134166.760966736,0,0,116.8086312002,202.2468150626,50.003,0,97.1661834717,108.8651580811 +2011-11-29 19:59:59.033,-122.6598154943,134150.800841308,180,0.21362,116.8899765001,202.1527043111,50.003,0,97.1562805176,108.8912353516 +2011-11-29 19:59:59.066,-122.6175306221,134162.617957918,180,0.21362,116.916554617,202.4398645586,50.003,0,97.1646957397,108.8951416016 +2011-11-29 19:59:59.100,-122.5752469184,134164.50814542,0,0,116.8626186502,202.3432500708,50.003,0,97.159362793,108.8843536377 +2011-11-29 19:59:59.133,-122.5329644291,134166.471400723,0,0,116.9439501946,202.2494098225,50.003,0,97.1580886841,108.8925857544 +2011-11-29 19:59:59.166,-122.4960812033,134165.703907201,0,0,117.0253570826,202.1559774825,50.003,0,97.1645431519,108.8975982666 +2011-11-29 19:59:59.200,-122.4538003113,134167.803961464,0,0,117.079264962,202.2531326808,50.003,0,97.1678619385,108.8884811401 +2011-11-29 19:59:59.233,-122.4136164481,134162.248101555,90,0.21362,117.079264962,202.2531326808,50.003,0,97.1650466919,108.9010162354 +2011-11-29 19:59:59.266,-122.3734292765,134156.758238659,90,0.21362,117.1331210278,202.3504667489,50.003,0,97.1731033325,108.8864440918 +2011-11-29 19:59:59.300,-122.3344513093,134163.96680044,90,0.21362,117.2145739935,202.2579835752,50.003,0,97.1670379639,108.8754882813 +2011-11-29 19:59:59.333,-122.292172612,134166.346140583,0,0,117.2961013175,202.1659095404,50.003,0,97.1810455322,108.8871078491 +2011-11-29 19:59:59.366,-122.2519818186,134161.055745173,0,0,117.2961013175,202.1659095404,50.003,0,97.1683578491,108.8793869019 +2011-11-29 19:59:59.400,-122.2130117407,134168.457742286,0,0,117.2961013175,202.1659095404,50.003,0,97.1613616943,108.897102356 +2011-11-29 19:59:59.433,-122.1728185161,134163.297378901,0,0,117.4035980834,202.3621933019,50.003,0,97.1722106934,108.8907623291 +2011-11-29 19:59:59.466,-122.1305426865,134165.955990417,0,0.21362,117.457268209,202.4606019138,50.003,0,97.1649475098,108.8854522705 +2011-11-29 19:59:59.500,-122.0882685553,134168.687642477,0,0,117.4851688136,202.2710691285,50.003,0,97.1559066772,108.8938980103 +2011-11-29 19:59:59.533,-122.0480707276,134163.732206524,180,0.21362,117.4851688136,202.2710691285,50.003,0,97.1580963135,108.8761749268 +2011-11-29 19:59:59.566,-122.0078699501,134158.842813602,90,0.21362,117.4851688136,202.2710691285,50.003,0,97.169128418,108.8963851929 +2011-11-29 19:59:59.600,-121.9655962056,134161.786404428,0,0.21362,117.5388233496,202.3697475483,50.003,0,97.1566238403,108.8784561157 +2011-11-29 19:59:59.633,-121.9266426924,134169.644410373,0,0,117.6204515862,202.2793035687,50.003,0,97.1657791138,108.8881988525 +2011-11-29 19:59:59.666,-121.8864393814,134164.954526913,0,0,117.6204515862,202.2793035687,50.003,0,97.1750717163,108.8861083984 +2011-11-29 19:59:59.700,-121.8441703546,134168.107893413,-90,0.21362,117.6485301316,202.0900523661,50.003,0,97.1716537476,108.8746643066 +2011-11-29 19:59:59.733,-121.8039637622,134163.553527528,0,0,117.7021526855,202.1892705257,50.003,0,97.1612319946,108.9004211426 +2011-11-29 19:59:59.766,-121.7616962988,134166.849367023,0,0,117.7839264122,202.0996489686,50.003,0,97.1667633057,108.8891830444 +2011-11-29 19:59:59.800,-121.7214865914,134162.430530835,0,0,117.7557225911,202.2886656071,50.003,0,97.1659469604,108.8894958496 +2011-11-29 19:59:59.833,-121.681274255,134158.077775549,-90,0.21362,117.837479774,202.1993137911,50.003,0,97.1578903198,108.8782424927 +2011-11-29 19:59:59.866,-121.6390082108,134161.585543816,0,0,117.972792665,202.2104849273,50.003,0,97.1689834595,108.8957824707 +2011-11-29 19:59:59.900,-121.6021232027,134162.165633444,0,0,118.026223273,202.3107718337,50.003,0,97.1633148193,108.8907318115 +2011-11-29 19:59:59.933,-121.5598605775,134165.810113323,0,0.21362,118.026223273,202.3107718337,50.003,0,97.1668395996,108.8931274414 +2011-11-29 19:59:59.966,-121.51964421,134161.722991235,0,0,118.026223273,202.3107718337,50.003,0,97.1632156372,108.8823699951 +2011-11-29 20:00:00.000,-121.4773837521,134165.509924627,0,0,118.0546766226,202.1222274123,50.003,0,97.1730041504,108.8860244751 +2011-11-29 20:00:00.033,-121.4371648441,134161.558366696,0,0,118.0831830987,201.9337329305,50.003,0,97.1589202881,108.8872680664 +2011-11-29 20:00:00.066,-121.3949067286,134165.487746247,0,0,118.1080898515,202.2227837473,50.003,0,97.1499252319,108.8810882568 +2011-11-29 20:00:00.100,-121.3546854467,134161.671760849,-90,0.21362,118.2147568763,202.4244228654,50.003,0,97.1751480103,108.8851470947 +2011-11-29 20:00:00.133,-121.3178022047,134162.680433555,0,0,118.2966588208,202.3373863303,50.003,0,97.1443634033,108.8663330078 +2011-11-29 20:00:00.166,-121.2755480625,134166.815943599,45,0.3021043012,118.2966588208,202.3373863303,50.003,0,97.1742706299,108.903137207 +2011-11-29 20:00:00.200,-121.2332965481,134171.024418128,45,0.3021043012,118.2966588208,202.3373863303,50.003,0,97.1682891846,108.8765640259 +2011-11-29 20:00:00.233,-121.1930725293,134167.474102373,0,0.21362,118.3498945014,202.4387374675,50.003,0,97.1636886597,108.899597168 +2011-11-29 20:00:00.266,-121.1528464015,134163.989916196,0,0,118.4318484119,202.3523836358,50.003,0,97.1545944214,108.8760223389 +2011-11-29 20:00:00.300,-121.1126182041,134150.57186475,0,0,118.4318484119,202.3523836358,50.003,0,97.1567687988,108.8878555298 +2011-11-29 20:00:00.333,-121.0703700492,134165.061670746,0,0,118.4318484119,202.3523836358,50.003,0,97.1704940796,108.884475708 +2011-11-29 20:00:00.366,-121.030140134,134161.779219684,0,0,118.5138721318,202.266444159,50.003,0,97.1675796509,108.9068145752 +2011-11-29 20:00:00.400,-120.9878951856,134166.411425808,180,0.21362,118.567017213,202.3685073182,50.003,0,97.1589508057,108.8912811279 +2011-11-29 20:00:00.433,-120.9476637192,134163.264579346,0,0,118.5959654139,202.1809195656,50.003,0,97.1707229614,108.882598877 +2011-11-29 20:00:00.466,-120.9107849901,134164.886741996,-90,0.21362,118.6490914541,202.283251469,50.003,0,97.1641921997,108.8653106689 +2011-11-29 20:00:00.500,-120.8671952236,134157.169345768,-90,0.21362,118.7021637247,202.3857571085,50.003,0,97.1677322388,108.8824920654 +2011-11-29 20:00:00.533,-120.8249546647,134162.082852902,-90,0.21362,118.7551822163,202.4884362202,50.003,0,97.1568832397,108.88230896 +2011-11-29 20:00:00.566,-120.7847182813,134159.203932539,0,0,118.7551822163,202.4884362202,50.003,0,97.158416748,108.8909759521 +2011-11-29 20:00:00.600,-120.7424814497,134164.259807976,0,0,118.7842875552,202.3011852464,50.003,0,97.1597824097,108.9033355713 +2011-11-29 20:00:00.633,-120.7022440114,134161.516507672,135,0.3021043012,118.8664799091,202.2170293467,50.003,0,97.1782150269,108.8862075806 +2011-11-29 20:00:00.666,-120.6620049474,134158.839377344,0,0,118.8664799091,202.2170293467,50.003,0,97.1726455688,108.8806228638 diff --git a/PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv b/PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv new file mode 100755 index 0000000..d959d96 --- /dev/null +++ b/PMUSimulator/DataDir/50Hz_measurement_files/Rect Floating Point - 3 phasors, 2 analogs.csv @@ -0,0 +1,439 @@ +2011-11-29 19:40:43.633,-95.0310743232,134161.730967817,144.6209026086,202.1741503424,24.7951722724,201.0948560874,50.0033798218,-0.0014368678,97.1672668457,11.7199020386 +2011-11-29 19:40:43.666,-94.9904572707,134162.222746533,144.6706160271,201.9811511642,24.7884525562,201.0386165045,50.003364563,0,97.1768341064,11.6947250366 +2011-11-29 19:40:43.700,-94.9484913082,134161.379156871,144.7633064276,202.0314571126,24.7527349645,200.9489535604,50.0033798218,0.0009155273,97.1564178467,11.7217178345 +2011-11-29 19:40:43.733,-94.907366856,134150.635667951,144.7676405372,202.1212960972,24.8216331728,201.0496115566,50.0034065247,0.0005213264,97.1714477539,11.7051925659 +2011-11-29 19:40:43.766,-94.8670899705,134162.4825921,144.7824524451,202.1468254967,24.9063055163,201.2645329261,50.0033874512,-0.0007375237,97.1837844849,11.6851348877 +2011-11-29 19:40:43.800,-94.8266379063,134163.702365177,144.8516040282,202.2346686741,24.9307552785,201.3175790007,50.00340271,0.0005976297,97.1774597168,11.7053833008 +2011-11-29 19:40:43.833,-94.7850190031,134162.517929697,144.8824993131,202.2376580829,24.9790511725,201.1612151129,50.0034255981,0.0004577637,97.194480896,11.6948776245 +2011-11-29 19:40:43.866,-94.74508973,134161.638699808,144.9240956101,202.1826863895,25.0447174712,200.9130145547,50.0033950806,-0.0011316827,97.1801147461,11.7219772339 +2011-11-29 19:40:43.900,-94.7058129128,134162.486906616,144.9811914484,202.205017683,25.0691587949,201.0001207642,50.0033607483,-0.0009282399,97.1677017212,11.6936264038 +2011-11-29 19:40:43.933,-94.6638690923,134163.782027835,144.9631209332,202.1431445004,25.081942998,201.291458323,50.0033950806,0.0012206985,97.1804656982,11.6960754395 +2011-11-29 19:40:43.966,-94.6220197946,134162.9564704,144.986687662,202.1038830972,25.105064665,201.189658547,50.0034255981,0.000699372,97.17628479,11.6816558838 +2011-11-29 19:40:44.000,-94.5808373626,134161.199078223,145.0537365439,202.1257600723,25.1484111906,201.0232102429,50.0034141541,-0.0006357813,97.1669235229,11.7047042847 +2011-11-29 19:40:44.033,-94.5401579804,134161.3132107,145.0988863586,202.0957344387,25.2339007635,201.0445621051,50.0034294128,0.0007629348,97.184753418,11.6997299194 +2011-11-29 19:40:44.066,-94.498989481,134161.62425985,145.1486237194,201.9645690389,25.261110344,201.0552224405,50.0034408569,0.0005086418,97.1720581055,11.7031707764 +2011-11-29 19:40:44.100,-94.4587847011,134150.707273445,145.2195621017,201.9400402392,25.2850707501,201.0637865312,50.0034179688,-0.0007629488,97.1693267822,11.7102813721 +2011-11-29 19:40:44.133,-94.4192600376,134150.120553969,145.2767963294,202.035486901,25.3552110354,201.0625841924,50.0033874512,-0.0012588222,97.1715621948,11.7076644897 +2011-11-29 19:40:44.166,-94.3781150607,134162.347329085,145.2994004596,202.136051787,25.3936239362,201.0597587381,50.0033836365,5.08641824126244E-05,97.1907501221,11.691734314 +2011-11-29 19:40:44.200,-94.337040445,134163.417617171,145.3234992055,202.0637450357,25.422067516,201.0716968655,50.0033950806,0.0001525925,97.1713409424,11.6921691895 +2011-11-29 19:40:44.233,-94.2963398144,134162.710900816,145.3395725473,202.0257498896,25.4673359443,201.256156586,50.0033836365,-0.0004323386,97.1721038818,11.7059249878 +2011-11-29 19:40:44.266,-94.2548432443,134150.679829932,145.3469560809,202.0398242763,25.4990424519,201.316615875,50.0034103394,0.0012333971,97.1785430908,11.7187728882 +2011-11-29 19:40:44.300,-94.2130117063,134150.447644123,145.3828690279,202.0266798601,25.5184274769,201.1924472067,50.0034370422,0.0008010864,97.1839828491,11.6969528198 +2011-11-29 19:40:44.333,-94.1728782862,134162.378687192,145.4253222978,201.988632841,25.5537299123,201.1205511141,50.0034255981,-0.0006357534,97.175453186,11.6959915161 +2011-11-29 19:40:44.366,-94.133777282,134163.030477833,145.5162987705,202.0788180691,25.6114414969,201.1899770996,50.0033988953,-0.0011062576,97.1768341064,11.7010345459 +2011-11-29 19:40:44.400,-94.0928938137,134161.37818328,145.6282292682,202.1137942269,25.6729760154,201.2070766817,50.00340271,0.0006230548,97.176361084,11.7106018066 +2011-11-29 19:40:44.433,-94.050808563,134150.111967316,145.6345967967,202.0495947778,25.7291457745,201.2897378958,50.0034141541,0.0001780316,97.1847610474,11.6962127686 +2011-11-29 19:40:44.466,-94.0094375344,134162.058495589,145.6379051427,202.0712667289,25.7344019736,201.2562059503,50.0033988953,-0.0005722046,97.1832427979,11.7029342651 +2011-11-29 19:40:44.500,-93.9688489711,134164.092241769,145.710651974,202.1138281414,25.7637537997,201.0835457434,50.0034103394,0.0008265115,97.1794128418,11.692779541 +2011-11-29 19:40:44.533,-93.9281617816,134165.550782778,145.7378252131,202.0793797171,25.7971812652,201.13050609,50.0034217834,0.0001652911,97.1799087524,11.6959228516 +2011-11-29 19:40:44.566,-93.8877303209,134165.065932838,145.7710763305,202.0247136645,25.8423937108,201.0863276811,50.0034065247,-0.0008010864,97.1574859619,11.7195129395 +2011-11-29 19:40:44.600,-93.8471452129,134162.47828073,145.8129581692,202.1107099031,25.9326781705,201.0355881657,50.0033836365,-0.0003560353,97.1762466431,11.6885147095 +2011-11-29 19:40:44.633,-93.8064295825,134161.378531962,145.8363868748,202.2534170587,25.9779934519,201.1887018578,50.0033836365,0,97.1653823853,11.7189559937 +2011-11-29 19:40:44.666,-93.7653691895,134162.031628747,145.8701760448,202.2553950572,25.9891544306,201.2958548044,50.0033874512,0.00027976,97.1782073975,11.6996002197 +2011-11-29 19:40:44.700,-93.7247840171,134162.872974943,145.9502519742,202.1963318514,26.0454380945,201.1920753409,50.0033874512,-0.0001907302,97.1775588989,11.693687439 +2011-11-29 19:40:44.733,-93.6841384954,134162.879988519,146.0040553928,202.163196384,26.1000693961,201.023190671,50.0033912659,0.0002161553,97.1760253906,11.694152832 +2011-11-29 19:40:44.766,-93.643114839,134163.383492391,146.0036310441,202.1265502764,26.0996372874,201.0196953607,50.00340271,0.0003560353,97.1793518066,11.7110214233 +2011-11-29 19:40:44.800,-93.6019639518,134162.778433517,146.0401910973,202.2031372639,26.1417216629,201.1089015998,50.0034103394,0.0001653191,97.1462860107,11.734992981 +2011-11-29 19:40:44.833,-93.5614836225,134161.57324323,146.0599739494,202.2214332607,26.2257556183,201.1830916432,50.0033988953,-0.0004323386,97.1767349243,11.6837997437 +2011-11-29 19:40:44.866,-93.5211936482,134163.483879781,146.0743977775,202.0732816033,26.2864834637,201.1529193526,50.0033950806,-7.62892886996269E-05,97.1872787476,11.6847686768 +2011-11-29 19:40:44.900,-93.480923458,134165.886162059,146.1384221454,202.0678369606,26.2901719677,201.1324939442,50.0033836365,-0.0004323106,97.1711654663,11.7049636841 +2011-11-29 19:40:44.933,-93.440068767,134163.106671404,146.1869143277,202.133290204,26.3025218097,201.2904097516,50.0033798218,2.79396772384644E-08,97.17628479,11.6963043213 +2011-11-29 19:40:44.966,-93.3986271897,134161.362731642,146.26690113,202.0872092583,26.3609911145,201.3586354568,50.0033798218,1.27265229821205E-05,97.1451797485,11.7205429077 +2011-11-29 19:40:45.000,-93.3571694449,134161.267742595,146.3478968845,202.0387991591,26.4390978981,201.2013068296,50.0034065247,0.000953665,97.1782989502,11.7075042725 +2011-11-29 19:40:45.033,-93.316988852,134159.913771664,146.3703280835,202.0717541503,26.485946971,201.0761478982,50.0034065247,-6.35627657175064E-05,97.1798858643,11.6761474609 +2011-11-29 19:40:45.066,-93.2767565955,134150.450080553,146.3790298327,202.1218749024,26.4979962322,201.144572227,50.0034103394,0.0002924446,97.1577758789,11.7214355469 +2011-11-29 19:40:45.100,-93.2351382024,134162.058389414,146.3928716063,202.1377124677,26.5495254945,201.1364066736,50.0034294128,0.0003306102,97.1667022705,11.6985321045 +2011-11-29 19:40:45.133,-93.1943838822,134163.286881728,146.4395721946,202.0185476934,26.5939330716,201.0830479944,50.0034103394,-0.0008901022,97.1697692871,11.7150878906 +2011-11-29 19:40:45.166,-93.1542816942,134163.571887267,146.5238623723,202.0955565215,26.6138022631,201.1812780906,50.0033721924,-0.001093559,97.1782150269,11.6863327026 +2011-11-29 19:40:45.200,-93.1137655223,134164.464483283,146.5918065496,202.2548308383,26.6438913138,201.2438006984,50.0033798218,0.0004704902,97.1662216187,11.7092285156 +2011-11-29 19:40:45.233,-93.0725212521,134163.314043274,146.5901772253,202.1977542229,26.6354877948,201.2681885522,50.00340271,0.0007375097,97.1663284302,11.6977844238 +2011-11-29 19:40:45.266,-93.031164335,134162.031479972,146.601764001,202.1006247164,26.6466599659,201.2914283896,50.0033988953,-0.0003560493,97.1905593872,11.6807479858 +2011-11-29 19:40:45.300,-92.9916340625,134164.781846796,146.6426387886,202.1101540305,26.7488664965,201.2865518441,50.0033798218,-0.000279732,97.1825408936,11.6873931885 +2011-11-29 19:40:45.333,-92.9520882556,134165.560051442,146.6903624084,202.1758557991,26.8438529903,201.1901688443,50.0033798218,8.90158116817474E-05,97.1871185303,11.6791610718 +2011-11-29 19:40:45.366,-92.9096339799,134162.394811721,146.7193872902,202.1716101872,26.8868311234,201.1218970542,50.0034103394,0.000813799,97.1711883545,11.70337677 +2011-11-29 19:40:45.400,-92.8676473558,134159.827651591,146.7103388258,202.1690060791,26.8995004269,201.139440477,50.0034217834,-0.0001271535,97.1585083008,11.7232513428 +2011-11-29 19:40:45.433,-92.8273436368,134159.748725519,146.7683504337,202.1390275519,26.937715162,201.1614400357,50.0033912659,-0.0007883878,97.1487960815,11.7245559692 +2011-11-29 19:40:45.466,-92.7868928535,134150.110511494,146.8674207428,202.1175709233,27.0239677522,200.9697838503,50.00340271,0.0004323386,97.1795043945,11.6893157959 +2011-11-29 19:40:45.500,-92.7459613419,134150.313074001,146.9267314938,202.0963275339,27.0673663396,200.8727991329,50.0034217834,0.0005722046,97.1768341064,11.6928787231 +2011-11-29 19:40:45.533,-92.7052852844,134159.705090564,146.9674190104,202.1407586879,27.048345879,201.0456518846,50.0033950806,-0.0006866734,97.1856231689,11.7129516602 +2011-11-29 19:40:45.566,-92.6650390777,134150.290901027,146.9959775566,202.2251815193,27.0938394189,201.2023096038,50.0033760071,-0.0005722046,97.1657104492,11.7122192383 +2011-11-29 19:40:45.600,-92.6248766466,134161.608798821,147.0078069922,202.1536090213,27.1846040778,201.1677686431,50.0033721924,7.62892886996269E-05,97.1608734131,11.7198257446 +2011-11-29 19:40:45.633,-92.5845457813,134161.301149552,147.0530024327,201.9804867667,27.2120365434,201.0628336662,50.0033683777,-0.0003178837,97.1881713867,11.6849441528 +2011-11-29 19:40:45.666,-92.5434299966,134150.978338357,147.1145783429,202.1143578996,27.259447072,200.9084504532,50.0033683777,-1.39698386192322E-08,97.1709289551,11.6850891113 +2011-11-29 19:40:45.700,-92.5013305476,134162.109786067,147.1668023343,202.317353466,27.3135304789,200.9388429104,50.0033798218,0.000813799,97.1631317139,11.7126617432 +2011-11-29 19:40:45.733,-92.4608633417,134162.883498049,147.1955564865,202.1538880259,27.314910216,201.1369674719,50.0033950806,0,97.155380249,11.7086791992 +2011-11-29 19:40:45.766,-92.4215401621,134162.382922313,147.2076438614,202.0609532551,27.3272480121,201.242387861,50.0033874512,-0.0004068855,97.1701202393,11.7148742676 +2011-11-29 19:40:45.800,-92.3800445063,134162.437770808,147.2479421507,202.0680552916,27.4021172015,201.2633654963,50.0034179688,0.0015004585,97.178062439,11.7024993896 +2011-11-29 19:40:45.833,-92.3382197334,134162.015460007,147.3072229407,202.090544672,27.4350636987,201.1704512333,50.0034370422,-7.63032585382462E-05,97.1662216187,11.6988525391 +2011-11-29 19:40:45.866,-92.297853144,134161.44196509,147.3573737714,202.1595076966,27.440809437,201.0494659944,50.0033874512,-0.0016403245,97.1801223755,11.7005767822 +2011-11-29 19:40:45.900,-92.2572272129,134162.052666692,147.4090182216,202.2151627444,27.4944815616,201.1636335984,50.0033912659,0.0008901022,97.1815948486,11.6935653687 +2011-11-29 19:40:45.933,-92.2162355559,134162.635092467,147.441580441,202.066710676,27.5646647854,201.3217843221,50.0034141541,0.000534053,97.1707229614,11.7233200073 +2011-11-29 19:40:45.966,-92.1752120309,134164.643676579,147.492389597,202.1020217662,27.5478375247,201.1738886032,50.0034103394,-0.0002924446,97.1636123657,11.7089996338 +2011-11-29 19:40:46.000,-92.1341029698,134165.290603118,147.5554924308,202.1122078394,27.5525305722,200.9999138757,50.0034065247,-7.63032585382462E-05,97.1756973267,11.6872253418 +2011-11-29 19:40:46.033,-92.0934376012,134162.338936002,147.6072869055,201.9736748636,27.6419462379,201.0503350621,50.0034103394,-2.79396772384644E-08,97.1825714111,11.7096405029 +2011-11-29 19:40:46.066,-92.0523529108,134161.405462732,147.6031461364,202.0535960236,27.726924197,201.1920711535,50.0034141541,0.0001907162,97.1721343994,11.7244796753 +2011-11-29 19:40:46.100,-92.0104870543,134162.978336163,147.6178670319,202.1533261129,27.764366859,201.2389651465,50.0034217834,0.0002416084,97.17993927,11.6928482056 +2011-11-29 19:40:46.133,-91.969028458,134164.123977844,147.6798176334,202.1650768397,27.7712358817,201.1858953,50.0034332275,0.000139866,97.1949310303,11.6689758301 +2011-11-29 19:40:46.166,-91.9286625388,134162.893257736,147.7605629771,202.1184497426,27.8316627718,201.1237544537,50.0034217834,-0.000279746,97.1660919189,11.7040100098 +2011-11-29 19:40:46.200,-91.8893845517,134162.23530149,147.8252503164,202.0281933078,27.8633833511,200.999927587,50.0034141541,-0.0004704902,97.182472229,11.6990585327 +2011-11-29 19:40:46.233,-91.8496210938,134163.260822302,147.8483300395,202.0329492157,27.8745037476,201.0386300284,50.0033760071,-0.0011189841,97.2001724243,11.6981658936 +2011-11-29 19:40:46.266,-91.8090057932,134163.052909562,147.8940681011,202.1572588301,27.9281241356,201.196563286,50.0033531189,-0.0003051572,97.1736450195,11.6892166138 +2011-11-29 19:40:46.300,-91.7674331131,134161.780221351,147.9075050092,202.0441309008,27.9771843528,201.2445832743,50.0033531189,-1.39698386192322E-08,97.1490325928,11.7424087524 +2011-11-29 19:40:46.333,-91.7264376987,134161.369295617,147.9095714644,201.9986952351,28.0162663051,201.1991082695,50.0033721924,0.0004577637,97.1880569458,11.689125061 +2011-11-29 19:40:46.366,-91.6864334777,134161.751917573,147.9326261695,202.1508468451,28.0692941781,201.2630618359,50.0033798218,-1.39698386192322E-08,97.1741638184,11.7025527954 +2011-11-29 19:40:46.400,-91.6466785379,134163.045171359,147.9567129812,202.1607490623,28.1139736579,201.2976153124,50.0033798218,-2.54251062870026E-05,97.1701507568,11.7000579834 +2011-11-29 19:40:46.433,-91.6058654724,134163.630076029,147.9939904786,202.1188053543,28.1667939558,201.1566876418,50.0033874512,0.0001653191,97.1924667358,11.6864471436 +2011-11-29 19:40:46.466,-91.5641344275,134162.958221334,148.0074384821,202.1164756451,28.2052293467,201.2373412205,50.0033874512,0,97.1664428711,11.7091751099 +2011-11-29 19:40:46.500,-91.5225100898,134162.395465352,148.0697413822,202.0596533732,28.2322596413,201.2726187788,50.0033988953,0.0006612064,97.1793212891,11.6871490479 +2011-11-29 19:40:46.533,-91.4819704973,134162.172418846,148.1542205574,202.0392264775,28.2703088085,201.2050378284,50.0034141541,0.0002924306,97.1776199341,11.7169418335 +2011-11-29 19:40:46.566,-91.4413508048,134161.99619499,148.1968541189,202.1503752282,28.3148809772,201.1355342452,50.0034179688,0.0003560353,97.1858825684,11.703163147 +2011-11-29 19:40:46.600,-91.4000351578,134162.23831051,148.2509498321,202.3925490887,28.3825786193,200.9762755207,50.0034332275,0.0002543069,97.1878433228,11.6951980591 +2011-11-29 19:40:46.633,-91.3585946193,134163.262193605,148.2805003459,202.442879838,28.4274736183,201.0018069078,50.0034332275,0,97.1767807007,11.6972885132 +2011-11-29 19:40:46.666,-91.3179227883,134161.865704056,148.2807482966,202.3108518841,28.4495573126,201.2236308829,50.0034103394,-0.0008265115,97.1685256958,11.7141494751 +2011-11-29 19:40:46.700,-91.2777846517,134150.314669011,148.351269206,202.1871672831,28.4776980521,201.2569593091,50.0034065247,0,97.1823577881,11.6814193726 +2011-11-29 19:40:46.733,-91.2369135739,134161.511839359,148.4356454182,202.1683171205,28.5290771401,201.1733206695,50.0034141541,0.0002670335,97.1770477295,11.7100372314 +2011-11-29 19:40:46.766,-91.1961173087,134163.687344447,148.4433347147,202.1119168675,28.565293702,201.1720610959,50.0033988953,-0.0006866455,97.1743164063,11.7018966675 +2011-11-29 19:40:46.800,-91.1562202452,134163.754081074,148.4617485428,202.1245703709,28.6220763197,201.225292952,50.0033721924,-0.0007375237,97.1788787842,11.697303772 +2011-11-29 19:40:46.833,-91.1157669749,134162.672770895,148.5203030076,202.2239768177,28.6709462056,201.1786745511,50.003364563,0.0003560213,97.1840438843,11.7037200928 +2011-11-29 19:40:46.866,-91.0739516636,134150.004513931,148.566823849,202.3112925419,28.6717965501,201.2187245731,50.0033912659,0.0008392101,97.1651229858,11.7116012573 +2011-11-29 19:40:46.900,-91.0328661155,134150.095263904,148.591694118,202.3222649697,28.7116969794,201.2428540857,50.0033988953,-0.0003941869,97.1840286255,11.6947479248 +2011-11-29 19:40:46.933,-90.9924488807,134161.579165159,148.6135223382,202.2460548765,28.7878982289,201.2380955545,50.0033874512,-6.35627657175064E-05,97.1611175537,11.7321853638 +2011-11-29 19:40:46.966,-90.9518772031,134150.967232577,148.7070208642,202.1336010655,28.8520259804,201.1857903968,50.0033950806,6.35767355561256E-05,97.1761169434,11.7027130127 +2011-11-29 19:40:47.000,-90.9118938872,134150.42887868,148.7821842691,202.1227049225,28.8718043125,201.0788024379,50.0033912659,-0.0003560493,97.1924743652,11.6914215088 +2011-11-29 19:40:47.033,-90.8706124166,134161.878620997,148.7883651387,202.1902415043,28.9007876022,201.1344584518,50.0033836365,0,97.1760406494,11.6959762573 +2011-11-29 19:40:47.066,-90.8286750732,134162.953834777,148.774334999,202.2854338678,28.9515251366,201.1225116285,50.0033950806,0.0008392241,97.1721343994,11.7048339844 +2011-11-29 19:40:47.100,-90.7875977831,134161.862732972,148.8147247877,202.2248821765,28.9987903301,201.029495393,50.0034141541,0.000419626,97.1819610596,11.7102966309 +2011-11-29 19:40:47.133,-90.7472688608,134150.144643699,148.8791156158,202.0708977407,29.0278902894,201.0595870663,50.0034065247,-0.0003306242,97.1687469482,11.7080612183 +2011-11-29 19:40:47.166,-90.7074102344,134161.194350365,148.9481883826,202.0482744832,29.0344173943,201.2027014211,50.0034065247,-1.27125531435013E-05,97.1712036133,11.6953887939 +2011-11-29 19:40:47.200,-90.666993109,134164.215739759,148.9921725309,202.108681221,29.076644503,201.2558239835,50.0033836365,-0.0008392381,97.165397644,11.7139434814 +2011-11-29 19:40:47.233,-90.6259154353,134162.630404999,148.9854720084,201.9547298709,29.1430535423,201.2869403515,50.0033836365,1.39698386192322E-08,97.1723175049,11.711769104 +2011-11-29 19:40:47.266,-90.5853054517,134159.85954676,149.0294874627,201.9328312916,29.1740750553,201.3125407371,50.0033721924,-0.0003814604,97.1721954346,11.6974258423 +2011-11-29 19:40:47.300,-90.544215288,134161.067493115,149.1064372932,202.1503903816,29.2016983,201.2395589478,50.0033874512,0.0008646492,97.1631088257,11.7105102539 +2011-11-29 19:40:47.333,-90.5021875595,134163.200196859,149.1397402605,202.1615920235,29.2518719823,201.3367108203,50.0034141541,0.0006739469,97.1640472412,11.7054214478 +2011-11-29 19:40:47.366,-90.4611205013,134162.469925186,149.1812360805,202.0526774762,29.3253943682,201.3366256462,50.0034255981,0,97.169960022,11.6965103149 +2011-11-29 19:40:47.400,-90.4213517878,134161.518400713,149.2344200143,202.1711529778,29.3686772743,201.1914964099,50.0034103394,-0.0004577637,97.1664199829,11.7141647339 +2011-11-29 19:40:47.433,-90.3803869607,134162.659816731,149.2844534896,202.1948993937,29.4004332469,201.1757466392,50.0034217834,0.0008138129,97.1822357178,11.6934432983 +2011-11-29 19:40:47.466,-90.3382201477,134164.259416155,149.3291371508,202.0160046334,29.4306594914,201.1883964959,50.0034446716,0.0006612204,97.1835784912,11.6718673706 +2011-11-29 19:40:47.500,-90.2969222698,134163.645291044,149.378445881,201.997638408,29.4488172077,201.1449008345,50.0034255981,-0.0010808464,97.1727371216,11.7085800171 +2011-11-29 19:40:47.533,-90.2572574126,134162.024225939,149.4102106741,202.13785529,29.4954200522,201.2121187649,50.0033912659,-0.0006103422,97.1691970825,11.6959991455 +2011-11-29 19:40:47.566,-90.2174888924,134162.185309302,149.4649815007,202.1992204082,29.5508367511,201.2655458869,50.0033950806,0.0003051991,97.1888504028,11.7050018311 +2011-11-29 19:40:47.600,-90.1769089674,134163.405150936,149.5020665653,202.3079831334,29.5886642611,201.140881203,50.0033874512,-0.0007756613,97.1630401611,11.7067108154 +2011-11-29 19:40:47.633,-90.1368127309,134162.913731152,149.5289727176,202.1666953834,29.6321240824,201.2252728751,50.0033531189,-0.0006993581,97.1675720215,11.7136993408 +2011-11-29 19:40:47.666,-90.095682912,134161.608952546,149.5710566737,202.0761109489,29.698558966,201.3724957692,50.0033531189,1.39698386192322E-08,97.1724243164,11.7125930786 +2011-11-29 19:40:47.700,-90.0539424884,134161.684458666,149.5904230732,202.2679280744,29.722162808,201.3488732052,50.0033836365,0.0012715766,97.1824493408,11.6830825806 +2011-11-29 19:40:47.733,-90.0134474213,134150.83182012,149.6160008972,202.2250654741,29.7123175763,201.2754713751,50.0033912659,5.08641824126244E-05,97.1825485229,11.6933898926 +2011-11-29 19:40:47.766,-89.9724902967,134150.17171394,149.6725533294,202.1132922787,29.7245703103,201.203280237,50.00340271,0.0006357813,97.1754837036,11.7044677734 +2011-11-29 19:40:47.800,-89.9307164459,134150.363711498,149.6892557545,202.1453151059,29.7868060804,201.1365668465,50.0034408569,0.0009663776,97.1874542236,11.6954498291 +2011-11-29 19:40:47.833,-89.8901894031,134163.074528069,149.7108595761,202.1535992134,29.8647171381,201.1470538707,50.0034294128,-0.0008901022,97.1804733276,11.6836700439 +2011-11-29 19:40:47.866,-89.8499201068,134164.679014746,149.8169802537,202.1369455726,29.8874986527,201.1493227225,50.0033912659,-0.0009409525,97.1717681885,11.6999053955 +2011-11-29 19:40:47.900,-89.809344371,134164.399031182,149.8821881769,202.1667127167,29.9529086453,201.1009551229,50.0033950806,0.0002924586,97.1735076904,11.6933822632 +2011-11-29 19:40:47.933,-89.7689339481,134163.450389839,149.8492029751,202.1287779163,30.0260888745,201.1738813112,50.0033798218,-0.0007756613,97.1774520874,11.6979675293 +2011-11-29 19:40:47.966,-89.7282360055,134161.915415992,149.8981436266,202.1280353871,30.0077284464,201.2497823786,50.0033760071,2.79396772384644E-08,97.157623291,11.7113342285 +2011-11-29 19:40:48.000,-89.687086006,134161.672667709,149.964008188,202.1090572068,30.0244204272,201.2024826456,50.0033798218,0.0003051711,97.1841583252,11.6813354492 +2011-11-29 19:40:48.033,-89.6455792114,134162.160548479,149.984561749,202.0167951928,30.1048307996,201.1951251332,50.0033988953,0.0007120846,97.173248291,11.7054901123 +2011-11-29 19:40:48.066,-89.6050276698,134150.031465216,150.0189166378,202.0458792663,30.1589789713,201.1528838211,50.00340271,-0.0001526065,97.1843719482,11.6878051758 +2011-11-29 19:40:48.100,-89.5650249204,134159.459846653,150.0374515932,202.2070014601,30.2053755043,200.9817246341,50.0033988953,-0.0002034567,97.1600952148,11.7149658203 +2011-11-29 19:40:48.133,-89.5242166896,134161.609983929,150.0634690433,202.2146755221,30.2579954311,200.9970339012,50.00340271,0.0002415804,97.1582183838,11.724609375 +2011-11-29 19:40:48.166,-89.4831627702,134150.895773886,150.1262985432,202.0079939838,30.3033929856,201.2816101998,50.0033988953,-0.0001907442,97.1710891724,11.6977310181 +2011-11-29 19:40:48.200,-89.4421567221,134161.155636083,150.1874558788,201.9839362224,30.2843324592,201.3407061159,50.0033988953,-6.35767355561256E-05,97.1788024902,11.7059707642 +2011-11-29 19:40:48.233,-89.40088084,134163.397181272,150.2185489078,202.0383364118,30.2968349151,201.1081947177,50.0034141541,0.0007501943,97.1708755493,11.707244873 +2011-11-29 19:40:48.266,-89.3601728736,134164.709094236,150.2571275901,202.0190474388,30.365207689,201.0876362044,50.0034179688,1.39698386192322E-08,97.1692504883,11.6975631714 +2011-11-29 19:40:48.300,-89.3199873617,134164.964774738,150.3250483505,202.1594883322,30.4340480988,201.1992591884,50.0034103394,-0.000534039,97.1772842407,11.6917800903 +2011-11-29 19:40:48.333,-89.2789479431,134164.217771739,150.3272292932,202.2649698732,30.4733836922,201.3318685481,50.0034103394,3.81376594305038E-05,97.1791915894,11.6925201416 +2011-11-29 19:40:48.366,-89.238159826,134163.094223677,150.3368177976,202.097938442,30.5055313216,201.3638218556,50.00340271,-0.0002288679,97.1799926758,11.7048721313 +2011-11-29 19:40:48.400,-89.1975597001,134162.173119226,150.4294610649,202.0645066461,30.5115260808,201.3032305713,50.0033912659,-0.00027976,97.1784439087,11.700302124 +2011-11-29 19:40:48.433,-89.1570040932,134164.083753461,150.5042698361,202.2250934932,30.560744664,201.2526920247,50.0033874512,1.27125531435013E-05,97.1848754883,11.701675415 +2011-11-29 19:40:48.466,-89.1161267305,134165.104403736,150.5318305745,202.3078963165,30.6418310442,201.1671205229,50.0033950806,0.0003814604,97.1823120117,11.6735992432 +2011-11-29 19:40:48.500,-89.0750459799,134163.060021771,150.5616020343,202.2111360185,30.7300986948,201.0566535838,50.0033950806,-0.0001907302,97.1820831299,11.7009811401 +2011-11-29 19:40:48.533,-89.0355047302,134161.680170578,150.6069602536,202.0798290944,30.7360628912,201.1064837181,50.0033874512,-0.0002288818,97.1827545166,11.6836853027 +2011-11-29 19:40:48.566,-88.9952423321,134162.315960365,150.6489132153,202.1476957123,30.7249243364,201.0632209395,50.0033760071,1.27125531435013E-05,97.1560974121,11.7064743042 +2011-11-29 19:40:48.600,-88.9540887002,134164.056266621,150.6882679824,202.2823602563,30.7994948674,201.0934320345,50.0033912659,0.0005976297,97.1776580811,11.7036743164 +2011-11-29 19:40:48.633,-88.913107375,134165.092417313,150.7135707244,202.3487540529,30.8902841913,201.2662271022,50.0033950806,-0.0002161553,97.1610794067,11.7220611572 +2011-11-29 19:40:48.666,-88.8723984437,134163.949871323,150.7835663898,202.2879261946,30.920872403,201.1744270977,50.0033874512,-8.90158116817474E-05,97.1419143677,11.7371139526 +2011-11-29 19:40:48.700,-88.8309533372,134161.441132877,150.8578255434,202.1715906396,30.9468569415,201.0199009693,50.0034141541,0.0004577497,97.1645355225,11.711151123 +2011-11-29 19:40:48.733,-88.7899247817,134150.075908046,150.8534846916,202.057153151,30.97757964,201.0110072909,50.0034217834,0,97.1691894531,11.7346115112 +2011-11-29 19:40:48.766,-88.7502601344,134150.600803515,150.8576699278,202.1091609168,31.0225766135,200.9718963033,50.0034065247,-0.0004831888,97.1847839355,11.698135376 +2011-11-29 19:40:48.800,-88.7095947398,134163.055735981,150.909745888,202.1537252035,31.0730820936,201.0430654548,50.0033988953,2.54251062870026E-05,97.1852493286,11.7053756714 +2011-11-29 19:40:48.833,-88.6684077355,134162.12140096,150.9281323804,202.0771806952,31.1126166709,201.2440133979,50.0034103394,0.0005086418,97.1755218506,11.6898956299 +2011-11-29 19:40:48.866,-88.6263369211,134161.634192107,150.9487893129,202.0921696297,31.1829599751,201.3884527578,50.0034141541,0,97.1672973633,11.709564209 +2011-11-29 19:40:48.900,-88.5847073031,134164.085280935,151.0017313574,202.0581905756,31.2000735409,201.3194452253,50.0034255981,0.0004577637,97.1693267822,11.7104797363 +2011-11-29 19:40:48.933,-88.5440136708,134164.269572698,151.0869585675,202.0238291441,31.2075158341,201.1993416519,50.0034294128,-1.39698386192322E-08,97.1789932251,11.6944198608 +2011-11-29 19:40:48.966,-88.503131322,134163.860992216,151.1724532361,202.2335018805,31.2569160197,201.1687255596,50.0034332275,-2.54251062870026E-05,97.1872711182,11.6711044312 +2011-11-29 19:40:49.000,-88.463130896,134163.74663308,151.2339369227,202.3248194727,31.3020689259,201.1552153694,50.0034179688,-0.0005594781,97.1639862061,11.7000656128 +2011-11-29 19:40:49.033,-88.4234359242,134161.630324045,151.2845926991,202.2412209204,31.3758829687,201.1692474045,50.0033798218,-0.0011316827,97.1842193604,11.6977996826 +2011-11-29 19:40:49.066,-88.3827945488,134150.907007123,151.2992713739,202.1634769106,31.3981918891,201.1444797428,50.0033721924,0,97.1724700928,11.7002487183 +2011-11-29 19:40:49.100,-88.3418772623,134161.473494053,151.3289990294,202.0627535097,31.4051705557,201.2161800776,50.0033760071,0.0001652911,97.1795806885,11.7028656006 +2011-11-29 19:40:49.133,-88.3011106327,134163.160931455,151.3680752909,202.0431715615,31.4472932908,201.2160879252,50.0033760071,-0.0002161413,97.1714096069,11.6858901978 +2011-11-29 19:40:49.166,-88.2598894008,134163.338579468,151.4257616321,202.2570723219,31.4915619352,201.0740055113,50.0033950806,0.0009028148,97.1818084717,11.7012329102 +2011-11-29 19:40:49.200,-88.2181477563,134161.950900331,151.425399617,202.3619324783,31.506527009,201.1020738979,50.0034179688,0.0007120986,97.1785812378,11.684211731 +2011-11-29 19:40:49.233,-88.1785327738,134159.647370762,151.4158146669,202.2033403699,31.5415866158,201.226409486,50.0034141541,-0.0002416084,97.1784210205,11.6912612915 +2011-11-29 19:40:49.266,-88.1385751503,134158.40320942,151.4736792824,202.2104395418,31.6253034674,201.1853879037,50.0033950806,-0.0003178837,97.1730499268,11.7079162598 +2011-11-29 19:40:49.300,-88.0965929915,134150.023779023,151.5500416946,202.36214735,31.7037866091,201.1781739811,50.0034217834,0.0009282399,97.1698913574,11.7037353516 +2011-11-29 19:40:49.333,-88.0551554018,134162.579924578,151.5959094299,202.2405957657,31.7089884442,201.299280668,50.0034255981,-0.0004577637,97.1864624023,11.6796264648 +2011-11-29 19:40:49.366,-88.0145295906,134163.23306509,151.6398411661,202.1100644738,31.7026226324,201.2281270568,50.0033988953,-0.0006357534,97.1726531982,11.7042770386 +2011-11-29 19:40:49.400,-87.9728615286,134162.820538445,151.6577876386,202.099399296,31.7795426467,201.0684104748,50.0034332275,0.0010681059,97.1750183105,11.7159805298 +2011-11-29 19:40:49.433,-87.9317577211,134162.009078049,151.6759933692,202.0209392494,31.8231571323,201.1268816481,50.0034484863,0,97.1831283569,11.7130508423 +2011-11-29 19:40:49.466,-87.8928142148,134150.642612785,151.7545365704,202.0860990987,31.8513791052,201.2022553478,50.0034179688,-0.0010681199,97.1766052246,11.7143554688 +2011-11-29 19:40:49.500,-87.8536271459,134161.392109828,151.8227792156,202.3038631286,31.8921454113,201.1356132637,50.003364563,-0.0012206985,97.187210083,11.700958252 +2011-11-29 19:40:49.533,-87.811909692,134164.635391602,151.8188202579,202.2437012107,31.9236362277,201.1297221011,50.0033836365,0.0007120706,97.1741409302,11.703918457 +2011-11-29 19:40:49.566,-87.7696451755,134165.247783186,151.8364165061,202.1119560776,32.0135798683,201.1458732655,50.0033912659,3.81516292691231E-05,97.1694488525,11.7132034302 +2011-11-29 19:40:49.600,-87.729384137,134164.386673865,151.8768179286,202.1779355844,32.1144925966,201.1545632734,50.003364563,-0.0007120706,97.1769790649,11.6908035278 +2011-11-29 19:40:49.633,-87.6892755385,134162.826750304,151.9192331376,202.1707353946,32.1306845117,201.1047955229,50.0033836365,0.000699372,97.186706543,11.6911849976 +2011-11-29 19:40:49.666,-87.647732594,134150.782327859,151.9812528133,202.1144032621,32.1295827207,201.0025451695,50.0034332275,0.0017547654,97.184211731,11.694480896 +2011-11-29 19:40:49.700,-87.6063239872,134157.856847879,152.0216126183,202.0961542999,32.1821669773,201.0427207787,50.0034332275,-0.0007629348,97.1795043945,11.6932907104 +2011-11-29 19:40:49.733,-87.5662553904,134157.260659128,152.0583631802,202.1442909727,32.2001736016,201.1790443644,50.0033836365,-0.0015894463,97.1935806274,11.6668319702 +2011-11-29 19:40:49.766,-87.5260813498,134159.336884481,152.0945781267,202.2576068837,32.207747472,201.2194188395,50.0033798218,0.000394173,97.1724472046,11.708114624 +2011-11-29 19:40:49.800,-87.4854551345,134161.040846747,152.1706349459,202.2889825789,32.2626645718,201.2045849283,50.0033912659,0.0002288958,97.177772522,11.7045211792 +2011-11-29 19:40:49.833,-87.4445984505,134150.959586576,152.22258404,202.1607637068,32.3371892811,201.2209791239,50.0033836365,-8.90158116817474E-05,97.1819534302,11.6820449829 +2011-11-29 19:40:49.866,-87.4031774902,134161.851079151,152.263513009,202.1450980895,32.4128650047,201.2465797544,50.0033836365,1.39698386192322E-08,97.1865158081,11.6882247925 +2011-11-29 19:40:49.900,-87.361494442,134164.65545305,152.2915070905,202.3247920547,32.4825819046,201.198215871,50.0034141541,0.0010045432,97.1712036133,11.7194366455 +2011-11-29 19:40:49.933,-87.3205409024,134164.963975153,152.2883380458,202.3031099086,32.5218854621,201.1603437923,50.0034255981,-2.79396772384644E-08,97.1850662231,11.6877822876 +2011-11-29 19:40:49.966,-87.2809777926,134162.433300169,152.3348496589,202.2421553384,32.5252527194,201.059461607,50.0034217834,-0.0001017423,97.1673965454,11.7152099609 +2011-11-29 19:40:50.000,-87.2407245009,134162.077916177,152.426346464,202.2554034799,32.555657114,201.0058956044,50.0034065247,-0.0001525786,97.1622924805,11.7127380371 +2011-11-29 19:40:50.033,-87.1994985921,134163.370622636,152.4564635486,202.2415069219,32.5910663449,201.0569853028,50.00340271,-0.0002670335,97.1853790283,11.6893920898 +2011-11-29 19:40:50.066,-87.1586375252,134163.783111994,152.4746775139,202.2716737,32.6415745737,201.1233596325,50.0033912659,-0.0004450371,97.169593811,11.6935272217 +2011-11-29 19:40:50.100,-87.1180562067,134163.02624116,152.516212225,202.3685974999,32.725889493,201.1997954831,50.0033798218,-2.54390761256218E-05,97.1662445068,11.7047348022 +2011-11-29 19:40:50.133,-87.0774764817,134161.663682136,152.545890412,202.2732533795,32.7360163599,201.185376424,50.0033912659,0.0001017144,97.1632232666,11.7124252319 +2011-11-29 19:40:50.166,-87.0369608498,134150.923809732,152.5986002583,202.1765336993,32.7438408177,201.031006368,50.0033912659,-0.0001525925,97.1735916138,11.7233810425 +2011-11-29 19:40:50.200,-86.9959731603,134162.202199092,152.6631576229,202.133071757,32.8064641353,200.9341575109,50.0033874512,1.39698386192322E-08,97.1769561768,11.6844100952 +2011-11-29 19:40:50.233,-86.9549339673,134163.618348976,152.6687879256,202.1501838672,32.8570663733,201.049711938,50.0033912659,0.0002161833,97.1793670654,11.6978912354 +2011-11-29 19:40:50.266,-86.9138615589,134163.386388026,152.6863143459,202.1193214483,32.88590349,201.1588133557,50.0034065247,0.0004069135,97.1873245239,11.6977310181 +2011-11-29 19:40:50.300,-86.8729571939,134161.91869664,152.7392601958,202.1801786004,32.9503307427,201.1784511837,50.0034141541,0.0002543069,97.1795349121,11.6959838867 +2011-11-29 19:40:50.333,-86.8316326707,134161.309227331,152.7839447657,202.1274053642,32.97587805,201.2232255828,50.0034179688,0.0001525786,97.1714324951,11.7021408081 +2011-11-29 19:40:50.366,-86.7903966627,134162.90186817,152.8398443699,202.0543801933,32.9702447358,201.2462940668,50.0034255981,0.0001144409,97.1602172852,11.7139358521 +2011-11-29 19:40:50.400,-86.7503376746,134164.251115467,152.877816981,202.1917299277,33.0406118788,201.2573833682,50.0034217834,-0.0002034567,97.1713409424,11.6962509155 +2011-11-29 19:40:50.433,-86.7104593448,134164.780946981,152.9083896341,202.2441125839,33.1118484665,201.2139121421,50.0033988953,-0.0008265255,97.1890106201,11.6756439209 +2011-11-29 19:40:50.466,-86.6695805596,134164.213053972,152.9847442967,202.1916747669,33.148023674,201.1146858632,50.0033988953,0.000279732,97.1832427979,11.7098846436 +2011-11-29 19:40:50.500,-86.6272872732,134162.891181005,153.0360593419,202.1918478955,33.1895846652,201.0994008585,50.0033988953,1.39698386192322E-08,97.1635437012,11.7150268555 +2011-11-29 19:40:50.533,-86.5860307291,134162.107914944,153.0588544501,202.106531663,33.2147486487,201.1468870397,50.0033988953,-0.0004577916,97.1670761108,11.7057800293 +2011-11-29 19:40:50.566,-86.5463990335,134163.355960723,153.0806370216,202.129264207,33.2203844857,201.1554294416,50.0033874512,1.39698386192322E-08,97.1791152954,11.7087554932 +2011-11-29 19:40:50.600,-86.5060235068,134163.898010799,153.1121406958,202.2314902125,33.2328465934,201.2193535997,50.00340271,0.0004832027,97.181137085,11.6961975098 +2011-11-29 19:40:50.633,-86.4656006522,134161.226075851,153.1812336752,202.0821857704,33.2807023674,201.2187004857,50.0033912659,-0.0007883599,97.1940841675,11.6647415161 +2011-11-29 19:40:50.666,-86.4251420508,134150.802027758,153.2497098207,202.1351802471,33.3757924145,201.0805764427,50.0033683777,-0.0001144269,97.165687561,11.7001266479 +2011-11-29 19:40:50.700,-86.3846059775,134161.082549632,153.2492227333,202.3313409361,33.4240950808,201.0584476626,50.003364563,-2.79396772384644E-08,97.1639938354,11.7059783936 +2011-11-29 19:40:50.733,-86.3436789054,134161.567038601,153.2689489786,202.1857083939,33.4240591015,201.0836671673,50.0033760071,0.0002416084,97.1851196289,11.6725692749 +2011-11-29 19:40:50.766,-86.3019516592,134162.977024353,153.3564735652,202.0948062112,33.4405579941,201.0420805383,50.0033874512,0.0004704623,97.1928024292,11.6809997559 +2011-11-29 19:40:50.800,-86.2605647737,134162.934328594,153.4136761129,202.1750575188,33.5142916482,201.1171490607,50.0034103394,0.0004959013,97.1897888184,11.6769790649 +2011-11-29 19:40:50.833,-86.2202634531,134161.869793114,153.4040229986,202.2184050469,33.557197574,201.1649547873,50.0034103394,0,97.1937332153,11.6821899414 +2011-11-29 19:40:50.866,-86.1798565585,134161.984231637,153.4355852538,202.1167876386,33.6330237713,200.9955244302,50.0034103394,0,97.1854934692,11.687789917 +2011-11-29 19:40:50.900,-86.1388470961,134162.197988759,153.5188406271,202.0540192655,33.7194291396,201.027885463,50.0034141541,-0.0001144409,97.1873397827,11.6866531372 +2011-11-29 19:40:50.933,-86.0984803293,134161.391195532,153.543590281,202.143167281,33.7298899562,201.2950120482,50.0033874512,-0.0006993441,97.1750259399,11.702255249 +2011-11-29 19:40:50.966,-86.0586736255,134159.824445392,153.5712789774,202.245322625,33.7194314168,201.2724119986,50.003364563,-0.0007374957,97.1949462891,11.669708252 +2011-11-29 19:40:51.000,-86.0172949631,134159.674919565,153.6290300753,202.2090097565,33.7334265223,201.1444878366,50.0033798218,0.0006612204,97.1721801758,11.7074737549 +2011-11-29 19:40:51.033,-85.9745324042,134162.031930042,153.655931197,202.1335220669,33.8191091637,201.2063938002,50.0034103394,0.0010553934,97.1907577515,11.6756057739 +2011-11-29 19:40:51.066,-85.933349852,134164.138178427,153.6858960894,202.1111413791,33.87595365,201.3621655051,50.0034141541,-0.0003814744,97.1712646484,11.7160263062 +2011-11-29 19:40:51.100,-85.8939121816,134163.65513348,153.7314985476,202.1427136275,33.9086012229,201.3198986078,50.0033988953,-0.0003814744,97.1997451782,11.6621704102 +2011-11-29 19:40:51.133,-85.854092348,134162.799159039,153.808336418,202.1066944088,33.9400267409,201.1402163513,50.0033988953,3.81376594305038E-05,97.1694564819,11.6914901733 +2011-11-29 19:40:51.166,-85.8134906391,134161.812901094,153.8749719095,202.1934872355,33.9583675628,201.1542617897,50.0033760071,-0.0008265255,97.1832504272,11.6809616089 +2011-11-29 19:40:51.200,-85.7720060813,134150.169335257,153.9093181608,202.3242842993,33.9850512568,201.3190836884,50.0033721924,0,97.1842193604,11.6911315918 +2011-11-29 19:40:51.233,-85.7306235585,134159.925582178,153.8935311633,202.2126990313,34.031462828,201.4138615813,50.0033798218,0.0004704623,97.1766815186,11.6906585693 +2011-11-29 19:40:51.266,-85.6901039558,134162.890055473,153.9048883487,202.0441052066,34.0835841612,201.4081806292,50.0033988953,0.0002543069,97.1735305786,11.6986618042 +2011-11-29 19:40:51.300,-85.6496224834,134163.12586866,153.9838251596,202.0763509172,34.1561335681,201.3416892017,50.00340271,0.0003178976,97.1851577759,11.6855773926 +2011-11-29 19:40:51.333,-85.6086663859,134150.787271359,154.0490133634,202.1258472348,34.2250501748,201.3569120441,50.0034141541,7.62892886996269E-05,97.1737976074,11.7015151978 +2011-11-29 19:40:51.366,-85.567603197,134161.200627734,154.0797757669,202.132980117,34.2666285666,201.407076422,50.0034103394,-8.90018418431282E-05,97.1879425049,11.692855835 +2011-11-29 19:40:51.400,-85.526359754,134162.264512966,154.0898130964,202.1450207456,34.2851234895,201.3850732074,50.0034103394,0,97.1618499756,11.6969909668 +2011-11-29 19:40:51.433,-85.4850931991,134163.151534788,154.1274669003,202.0144105749,34.2867443831,201.3195917406,50.0034179688,0.0003178837,97.1821289063,11.6896820068 +2011-11-29 19:40:51.466,-85.4451249599,134161.389456975,154.2071606164,202.0847568208,34.3206321003,201.2345834551,50.0034179688,0,97.1714553833,11.7000198364 +2011-11-29 19:40:51.500,-85.4052632998,134158.841620693,154.2326818094,202.2289859615,34.3989005328,201.2558265353,50.0033988953,-0.0006993301,97.1783676147,11.6837768555 +2011-11-29 19:40:51.533,-85.3644861608,134158.397703508,154.2386676605,202.1804477509,34.4449175958,201.319756176,50.0033912659,-0.0001271395,97.1860580444,11.6815185547 +2011-11-29 19:40:51.566,-85.3243022887,134150.134228556,154.2667126796,202.178645864,34.4822886252,201.2245852412,50.003364563,-0.000953679,97.1755523682,11.7083435059 +2011-11-29 19:40:51.600,-85.2839567092,134163.065649545,154.3363241075,202.1733525989,34.5470815767,201.2154889329,50.0033531189,-7.62753188610077E-05,97.1586456299,11.7249832153 +2011-11-29 19:40:51.633,-85.2427329368,134163.334443041,154.3869594368,202.23676571,34.592682256,201.2794387677,50.0033721924,0.0007883599,97.1720657349,11.6860046387 +2011-11-29 19:40:51.666,-85.201975972,134163.25169128,154.4029789695,202.4625633645,34.6291058283,201.2333030604,50.0033912659,0.0004069135,97.181892395,11.6992111206 +2011-11-29 19:40:51.700,-85.160964796,134162.064104276,154.4482825184,202.3846123207,34.6520896855,201.133029795,50.0033950806,0.0001907162,97.198135376,11.7048187256 +2011-11-29 19:40:51.733,-85.1193371976,134150.096082027,154.5204675052,202.1667349654,34.6625715563,201.104132635,50.0034179688,0.0006485218,97.1749725342,11.6833114624 +2011-11-29 19:40:51.766,-85.0778280705,134150.166467597,154.5668532522,202.2111817595,34.7047497481,201.156899891,50.0034370422,0.0003942009,97.1719207764,11.6991729736 +2011-11-29 19:40:51.800,-85.0371036647,134159.441940249,154.6023145958,202.2783566851,34.7943993572,201.3007783176,50.0034255981,-0.0003814744,97.1543807983,11.725769043 +2011-11-29 19:40:51.833,-84.9966248347,134150.381662568,154.6405442349,202.1556968333,34.8375033638,201.3159198594,50.0034217834,0,97.175819397,11.6925811768 +2011-11-29 19:40:51.866,-84.9567310806,134162.977304316,154.7107763218,202.0390419115,34.8467374677,201.2848849193,50.0034065247,-0.0006612064,97.1838607788,11.6841049194 +2011-11-29 19:40:51.900,-84.9159421572,134162.279586704,154.7518070634,202.142651024,34.9093174335,201.2041111806,50.0033874512,-0.0001017284,97.1787567139,11.6982955933 +2011-11-29 19:40:51.933,-84.8744365059,134150.341345249,154.7429216604,202.3195243285,34.9704926526,201.1148660516,50.0033874512,1.39698386192322E-08,97.1778717041,11.6834106445 +2011-11-29 19:40:51.966,-84.8332445706,134159.850201269,154.8132215724,202.2611742697,34.9519766109,200.9776105903,50.00340271,0.0005976297,97.1742706299,11.7121582031 +2011-11-29 19:40:52.000,-84.7921411339,134150.256700792,154.8904773507,202.2105804904,34.9363719411,201.0075462281,50.0034179688,0.0004577637,97.1701660156,11.7182769775 +2011-11-29 19:40:52.033,-84.7522420868,134150.049600428,154.8797888096,202.2579919051,35.0110122049,201.1667343035,50.0034179688,0,97.1867370605,11.6942062378 +2011-11-29 19:40:52.066,-84.7122856084,134158.319420792,154.8815790777,202.2258741267,35.085449126,201.3802599212,50.00340271,-0.0008646492,97.168762207,11.7142868042 +2011-11-29 19:40:52.100,-84.6711411326,134156.615535062,154.9558287596,202.2109954851,35.1504235647,201.2837326463,50.0033950806,-1.39698386192322E-08,97.1756286621,11.6918945313 +2011-11-29 19:40:52.133,-84.6299980077,134157.805208081,154.9849140065,202.2520944719,35.2064346644,201.0731268726,50.0033950806,-0.0002288818,97.1632385254,11.7071990967 +2011-11-29 19:40:52.166,-84.5892229666,134159.186620605,155.0028626803,202.1856903861,35.2238577672,201.0387527308,50.0033874512,-0.000139866,97.1684494019,11.7096405029 +2011-11-29 19:40:52.200,-84.5484631257,134150.946693143,155.0638686225,202.0195182566,35.2542697143,201.0343438434,50.00340271,0.000419612,97.16847229,11.7146530151 +2011-11-29 19:40:52.233,-84.5078182816,134163.314108368,155.0925777469,202.0183842324,35.2956298455,201.1622834577,50.00340271,3.81516292691231E-05,97.1666870117,11.7127227783 +2011-11-29 19:40:52.266,-84.466768697,134163.313774327,155.1115366093,202.1390181837,35.332097037,201.3737739639,50.00340271,0,97.1868896484,11.6775665283 +2011-11-29 19:40:52.300,-84.4260307279,134150.422439834,155.1834378378,202.2838310044,35.3758467037,201.4299318589,50.0033988953,-0.0002670335,97.1807250977,11.6721343994 +2011-11-29 19:40:52.333,-84.3855314626,134150.51094563,155.2227841562,202.2551743492,35.4001080107,201.2725961523,50.0033950806,3.81516292691231E-05,97.1607055664,11.7163848877 +2011-11-29 19:40:52.366,-84.3438999014,134161.965353856,155.2437904414,202.2477838305,35.4252082863,201.1994260099,50.0034065247,0.0003687618,97.1909561157,11.6896286011 +2011-11-29 19:40:52.400,-84.3030356161,134162.19668162,155.3034979116,202.3307421014,35.4765854325,201.2848272518,50.0034141541,-0.000254293,97.1752243042,11.7080459595 +2011-11-29 19:40:52.433,-84.263220637,134161.558471997,155.3541932495,202.2836476751,35.505090431,201.3966197434,50.0033912659,-0.0007629627,97.1862487793,11.6768035889 +2011-11-29 19:40:52.466,-84.2222576777,134150.29893197,155.4072720528,202.2377153029,35.5431016267,201.2822800805,50.0033988953,0.0006739469,97.1557235718,11.7326278687 +2011-11-29 19:40:52.500,-84.1812170708,134161.0110279,155.4337189023,202.3031521062,35.6374958292,201.2066535401,50.0034141541,0.000139866,97.1703491211,11.7055282593 +2011-11-29 19:40:52.533,-84.1403219725,134163.484877666,155.4726808736,202.2508987689,35.6910161909,201.3114216799,50.00340271,-0.0003687479,97.1574249268,11.7269210815 +2011-11-29 19:40:52.566,-84.099609414,134165.967560107,155.5614733062,202.2444680711,35.6880896999,201.2997901964,50.0033988953,0.0004323246,97.1891708374,11.6960601807 +2011-11-29 19:40:52.600,-84.0581721358,134163.479449155,155.6304802016,202.3349653536,35.7192995248,201.2244018278,50.0034141541,0.0004704902,97.1691741943,11.7055740356 +2011-11-29 19:40:52.633,-84.0174449941,134150.949716359,155.605338899,202.3202383783,35.7550757749,201.2222105588,50.0034141541,-0.0003687758,97.1834716797,11.7160720825 +2011-11-29 19:40:52.666,-83.9775927493,134161.492160547,155.637528228,202.2876128747,35.7697558293,201.2304410615,50.0033988953,-0.0005340809,97.1821365356,11.6904449463 +2011-11-29 19:40:52.700,-83.9372035827,134161.683173322,155.7280299251,202.2141149965,35.7912921295,201.236390858,50.0033836365,-0.0001271674,97.1850662231,11.6779785156 +2011-11-29 19:40:52.733,-83.8964508552,134150.83764576,155.7433796363,202.184910106,35.8703621331,201.2767863215,50.0033836365,-0.0001144409,97.1742782593,11.7083740234 +2011-11-29 19:40:52.766,-83.8557598661,134161.851561598,155.7524472055,202.2344906656,35.9637117495,201.2896831912,50.0033760071,-3.81516292691231E-05,97.1660842896,11.728805542 +2011-11-29 19:40:52.800,-83.8144855927,134150.676699108,155.8094319611,202.4134521827,36.0320077333,201.1805114377,50.0033836365,0.0004450511,97.1942596436,11.688583374 +2011-11-29 19:40:52.833,-83.7736848539,134159.151669397,155.8797805473,202.4851909013,36.0469165501,201.1165243886,50.0033950806,-1.39698386192322E-08,97.1705932617,11.7142562866 +2011-11-29 19:40:52.866,-83.7332043094,134161.588995448,155.9075567894,202.28814782,36.029519687,201.2647045277,50.0033950806,-1.27265229821205E-05,97.1788635254,11.7026672363 +2011-11-29 19:40:52.900,-83.6916400728,134163.823969752,155.9176882719,202.1080971188,36.0620915138,201.3454415212,50.0034103394,0.000559506,97.1734390259,11.6866607666 +2011-11-29 19:40:52.933,-83.6500239518,134162.889091871,155.9683837048,202.1751687601,36.1461491495,201.3838230647,50.0034332275,0.0006866455,97.1764907837,11.6968002319 +2011-11-29 19:40:52.966,-83.6090422718,134162.455905304,156.0723384413,202.3083820453,36.2047384008,201.2132736635,50.0034255981,-0.0006103562,97.1747970581,11.7015075684 +2011-11-29 19:40:53.000,-83.569286762,134163.984725853,156.1327609979,202.3927758658,36.2563579128,201.1006593775,50.0034141541,-0.0002034428,97.1683807373,11.7199020386 +2011-11-29 19:40:53.033,-83.5290333337,134164.845737205,156.1092422342,202.3446792897,36.2905528698,201.2370680435,50.0034103394,-3.81516292691231E-05,97.1885070801,11.6826171875 +2011-11-29 19:40:53.066,-83.4881115968,134161.894307088,156.0940082965,202.2266324468,36.3031309061,201.2954577954,50.0033950806,-0.0005722046,97.1730499268,11.7059707642 +2011-11-29 19:40:53.100,-83.4478281835,134161.371322196,156.1595004523,202.2695718728,36.3528964364,201.2345457848,50.0033683777,-0.0007120706,97.1898193359,11.6676559448 +2011-11-29 19:40:53.133,-83.4069058123,134163.336746439,156.2098118892,202.3531651249,36.4394768388,201.0664400721,50.0033683777,0.0002543209,97.1683349609,11.7065048218 +2011-11-29 19:40:53.166,-83.3648616739,134161.696693215,156.2510703137,202.4063771194,36.462772059,201.0109843019,50.0033988953,0.0011062576,97.1617889404,11.7044677734 +2011-11-29 19:40:53.200,-83.3241672758,134158.295608923,156.3278202017,202.4335482334,36.4754128281,201.0621721766,50.0034065247,-0.0001271814,97.1968231201,11.674041748 +2011-11-29 19:40:53.233,-83.2843196685,134159.982966477,156.3528042618,202.3170535735,36.5506681714,201.2127758045,50.0033874512,-0.0007120706,97.1873168945,11.6920700073 +2011-11-29 19:40:53.266,-83.2430103069,134162.581550303,156.3577822179,202.095900495,36.6114663935,201.3216828903,50.0034141541,0.0014241412,97.1841659546,11.7033996582 +2011-11-29 19:40:53.300,-83.2022362202,134163.291311303,156.3819228257,202.0650113155,36.6401450633,201.2293552695,50.0034103394,-0.0010172557,97.1589355469,11.7181549072 +2011-11-29 19:40:53.333,-83.1625269651,134161.944661366,156.4379121411,202.2603983089,36.6595805746,201.1837864265,50.003364563,-0.001233411,97.1736068726,11.6982040405 +2011-11-29 19:40:53.366,-83.1211522793,134150.534575692,156.5050744746,202.3090510716,36.6946956849,201.3053799293,50.0033760071,0.0009663776,97.1912155151,11.6856079102 +2011-11-29 19:40:53.400,-83.0794909419,134150.172838001,156.5482602483,202.2519576901,36.7732032342,201.298632608,50.0034255981,0.0012842752,97.1701507568,11.689666748 +2011-11-29 19:40:53.433,-83.038879227,134161.313388412,156.5701377853,202.1118114523,36.8385419222,201.2364604935,50.0034065247,-0.0011571217,97.1790161133,11.7080230713 +2011-11-29 19:40:53.466,-82.9985306196,134162.493109759,156.632203199,201.9288161591,36.8130343489,201.3028411421,50.0033950806,0.0001780316,97.1621398926,11.7111129761 +2011-11-29 19:40:53.500,-82.9579419323,134150.329646585,156.6832293355,202.117227747,36.8128800166,201.3375615468,50.0033988953,0.0001653191,97.188331604,11.7030563354 +2011-11-29 19:40:53.533,-82.917441505,134159.041952883,156.7110151368,202.1968148511,36.8975015844,201.273788923,50.0033798218,-0.0007375097,97.1750030518,11.6737518311 +2011-11-29 19:40:53.566,-82.8763302844,134150.346038244,156.7345874207,202.2062587928,36.9589305739,201.2342959957,50.0033798218,0,97.1744842529,11.7063293457 +2011-11-29 19:40:53.600,-82.8347197549,134163.756168361,156.7910979,202.4160182947,36.9867968153,201.2887520845,50.0033950806,0.0007502222,97.1753082275,11.7053833008 +2011-11-29 19:40:53.633,-82.7939517778,134165.098291106,156.8481002678,202.4272211172,36.992833214,201.4465955997,50.00340271,0,97.1564025879,11.715461731 +2011-11-29 19:40:53.666,-82.7541253999,134163.456094059,156.9173320344,202.3230634232,37.0190344489,201.3362075624,50.0033988953,-0.0001271674,97.1736984253,11.7018051147 +2011-11-29 19:40:53.700,-82.7138721762,134162.179497541,156.9393847485,202.3183211751,37.0468375981,201.1354943196,50.0033950806,3.81376594305038E-05,97.1790466309,11.7035827637 +2011-11-29 19:40:53.733,-82.6720332792,134163.210736983,156.9069727004,202.3320559152,37.096022638,201.2709400399,50.0034065247,0.0002034567,97.1675796509,11.7129974365 +2011-11-29 19:40:53.766,-82.6300696607,134162.728709772,156.9652370983,202.2771645241,37.1206062361,201.3981316616,50.0034103394,0.0001780177,97.1894454956,11.6771774292 +2011-11-29 19:40:53.800,-82.5890773708,134150.336748324,157.0534396204,202.2374512662,37.1304019263,201.2157562245,50.0034141541,0.0001780177,97.1727752686,11.7070007324 +2011-11-29 19:40:53.833,-82.548633895,134150.665639181,157.0850293606,202.1098902387,37.2347431757,201.1380286958,50.0034217834,0,97.1814804077,11.6959152222 +2011-11-29 19:40:53.866,-82.5088489601,134162.387339593,157.1006994086,202.1107674934,37.3186586233,201.1938237554,50.0034179688,-0.0002543349,97.1734313965,11.7001342773 +2011-11-29 19:40:53.900,-82.4693469115,134161.580488897,157.1189993368,202.2221379259,37.3725950696,201.2155128092,50.0033683777,-0.0017420389,97.1925811768,11.6810379028 +2011-11-29 19:40:53.933,-82.4284200042,134161.107322797,157.1580368215,202.2050502886,37.4203410687,201.2903635409,50.0033569336,0,97.178565979,11.6973114014 +2011-11-29 19:40:53.966,-82.3868317688,134161.461237264,157.2283471597,202.1284881542,37.4158271615,201.2516617821,50.003364563,0.0005086279,97.1694793701,11.6979217529 +2011-11-29 19:40:54.000,-82.3462620775,134161.313140775,157.2950755836,202.1443989469,37.4104214809,201.1107925108,50.0033683777,0.0001907302,97.1901473999,11.6960525513 +2011-11-29 19:40:54.033,-82.3050992131,134159.370239572,157.3248568055,202.1989014544,37.4678657421,201.2688437712,50.0034065247,0.0013605924,97.1809768677,11.6999969482 +2011-11-29 19:40:54.066,-82.2642024219,134158.925357278,157.3320834602,202.1860821979,37.5176591763,201.4465668368,50.0034179688,0.0001144409,97.1746826172,11.6932830811 +2011-11-29 19:40:54.100,-82.2234951769,134162.178323067,157.366673732,202.1581482562,37.5449244671,201.2414015301,50.0034103394,-0.0004323386,97.1832427979,11.6829223633 +2011-11-29 19:40:54.133,-82.1828472575,134164.739313171,157.4131864697,202.239079012,37.5761255692,201.1789283329,50.0033950806,-0.0004704902,97.1976089478,11.6847457886 +2011-11-29 19:40:54.166,-82.1422575982,134162.743761102,157.4569107121,202.2351264205,37.5966598296,201.3872670509,50.0033950806,5.08641824126244E-05,97.1632919312,11.718208313 +2011-11-29 19:40:54.200,-82.1011960595,134150.006195606,157.5229158648,202.0547285941,37.6423420305,201.3625694928,50.0033912659,0,97.1692352295,11.7203598022 +2011-11-29 19:40:54.233,-82.0588568759,134159.316123257,157.6086313938,202.0392987832,37.7420239418,201.2577063668,50.00340271,0.0006357953,97.1873626709,11.6802597046 +2011-11-29 19:40:54.266,-82.0186967515,134150.113703112,157.6467638536,202.1839554132,37.8256047379,201.3394467016,50.00340271,-0.0002416084,97.1740188599,11.7194442749 +2011-11-29 19:40:54.300,-81.9786403373,134150.690666772,157.6684686429,202.3099993233,37.8775364456,201.3223511606,50.0033988953,3.81376594305038E-05,97.1675720215,11.7171707153 +2011-11-29 19:40:54.333,-81.9376682371,134161.021565217,157.6999554492,202.3134187492,37.8814043695,201.3707961105,50.0034103394,0.0002670195,97.1703643799,11.7057418823 +2011-11-29 19:40:54.366,-81.8974474173,134163.159286333,157.7375041894,202.2799233392,37.8849903381,201.4710240398,50.0033874512,-0.0011825468,97.183052063,11.6850662231 +2011-11-29 19:40:54.400,-81.8575507476,134164.055358587,157.7468678795,202.2971913241,37.9462033846,201.3678783807,50.0033569336,-0.0008265115,97.1847381592,11.6894073486 +2011-11-29 19:40:54.433,-81.8167278793,134162.755459874,157.7535191073,202.1889322858,37.9842715925,201.2376476609,50.003364563,0.0008900743,97.1650848389,11.6983566284 +2011-11-29 19:40:54.466,-81.7749215986,134161.824670372,157.8300816848,202.1409916081,37.9892301492,201.2628454442,50.0033912659,0.0005468074,97.1678237915,11.7022857666 +2011-11-29 19:40:54.500,-81.7333609567,134162.365722478,157.8913029552,202.3461969027,38.0734460404,201.3614919338,50.0034065247,0.0003942009,97.1863021851,11.6709899902 +2011-11-29 19:40:54.533,-81.6927102766,134161.734699679,157.917717066,202.3410824626,38.1476234971,201.3518934181,50.0034179688,0.0002670474,97.1882171631,11.6925125122 +2011-11-29 19:40:54.566,-81.6528412456,134159.954989745,157.980602199,202.1542999685,38.1767677247,201.2249756403,50.0034179688,-1.39698386192322E-08,97.1876220703,11.6822357178 +2011-11-29 19:40:54.600,-81.6122104063,134150.445543076,158.0484339843,202.231854574,38.2156021585,201.1490023333,50.0034103394,-0.0002288818,97.1697845459,11.7223205566 +2011-11-29 19:40:54.633,-81.57095844,134162.056353593,158.1104339901,202.2445326896,38.2592869336,201.2918265239,50.00340271,-0.0001525786,97.1766662598,11.7117614746 +2011-11-29 19:40:54.666,-81.5297965248,134162.378685862,158.1413742349,202.2203378309,38.2956802326,201.3571273852,50.00340271,-3.81516292691231E-05,97.1497955322,11.7257080078 +2011-11-29 19:40:54.700,-81.4887462635,134163.378970331,158.1670372011,202.2175956882,38.2880274885,201.2671151021,50.0034103394,0.0005976297,97.1674499512,11.712600708 +2011-11-29 19:40:54.733,-81.447998537,134163.409571699,158.1992841305,202.226388514,38.3408770322,201.2154061086,50.0034217834,0,97.1690597534,11.6962051392 +2011-11-29 19:40:54.766,-81.407154068,134161.851419853,158.2491794386,202.3088339625,38.3906501379,201.2691213665,50.0034217834,5.08641824126244E-05,97.1956329346,11.6863708496 +2011-11-29 19:40:54.800,-81.3658624819,134161.104839722,158.2813096249,202.4313414971,38.4065011232,201.2589683203,50.0034217834,0,97.1523590088,11.7287521362 +2011-11-29 19:40:54.833,-81.3254158541,134150.932009041,158.2836928328,202.3604995995,38.4609869745,201.2873362743,50.0034103394,-0.0003814744,97.1819458008,11.6994171143 +2011-11-29 19:40:54.866,-81.2861971731,134163.072551225,158.3161911283,202.1946940078,38.5222036053,201.2621239321,50.0033912659,-0.0009027869,97.1773681641,11.7049713135 +2011-11-29 19:40:54.900,-81.2456191495,134164.438571013,158.3574715574,202.2723206195,38.5754486498,201.2646141291,50.0033836365,0.0005213404,97.1781234741,11.6916275024 +2011-11-29 19:40:54.933,-81.2032625739,134163.876181138,158.3623980635,202.2811959406,38.619431415,201.3759261543,50.0033988953,0.0003178837,97.1823730469,11.6885375977 +2011-11-29 19:40:54.966,-81.1620808911,134163.860530383,158.4396675227,202.2066099132,38.6289249369,201.3485411536,50.0033950806,-0.0005086139,97.1779937744,11.673828125 +2011-11-29 19:40:55.000,-81.1212964487,134163.00978713,158.5253087392,202.2581590376,38.6766382752,201.2601867089,50.00340271,0.0007502222,97.1646118164,11.6993637085 +2011-11-29 19:40:55.033,-81.0805287136,134161.161012044,158.5343106168,202.311491349,38.7579174975,201.2864123191,50.0034179688,0,97.1788635254,11.6802902222 +2011-11-29 19:40:55.066,-81.0400915883,134150.080234009,158.5392902834,202.3291715661,38.7871954144,201.2723237022,50.0034103394,-0.0005086279,97.1821899414,11.6853103638 +2011-11-29 19:40:55.100,-80.9994045605,134150.250297328,158.5910936641,202.322317449,38.7975461796,201.2631592918,50.0033950806,-0.0001017284,97.1776657104,11.7028579712 +2011-11-29 19:40:55.133,-80.9586854828,134162.525163792,158.6298997104,202.2574930277,38.8266377373,201.3287259916,50.0033912659,0,97.1797866821,11.6790542603 +2011-11-29 19:40:55.166,-80.9177416625,134162.309934262,158.6858906249,202.2937209678,38.846658064,201.2527122064,50.0033950806,-2.79396772384644E-08,97.1782150269,11.7041931152 +2011-11-29 19:40:55.200,-80.8770515563,134163.302135782,158.7557484913,202.206327564,38.9068712508,201.1840377956,50.0033912659,-8.90018418431282E-05,97.1631011963,11.7194137573 +2011-11-29 19:40:55.233,-80.8365951834,134163.625042779,158.7975330983,202.1019817241,38.971282702,201.2837535042,50.0033912659,1.39698386192322E-08,97.1819534302,11.6883392334 +2011-11-29 19:40:55.266,-80.7957954706,134163.116321351,158.8041531936,202.2170606199,39.0404032543,201.4189963573,50.0033950806,0.0001271674,97.168800354,11.6946563721 +2011-11-29 19:40:55.300,-80.7549177021,134162.262013126,158.8264284691,202.3413919144,39.0980443402,201.4796856198,50.0033988953,-1.27404928207397E-05,97.1690063477,11.723815918 +2011-11-29 19:40:55.333,-80.7146157989,134161.983631391,158.8682428855,202.3778360873,39.1296188365,201.4396857318,50.0033836365,-0.0004450371,97.1770782471,11.6963653564 +2011-11-29 19:40:55.366,-80.6742371693,134162.101927581,158.9256468673,202.4126289259,39.1496242502,201.3215220192,50.0033798218,-1.2698583304882E-05,97.1759872437,11.6884155273 +2011-11-29 19:40:55.400,-80.6335258725,134162.795445108,158.9676764963,202.3527354223,39.1828975296,201.2865631861,50.0033874512,0.0002288818,97.1748352051,11.6953811646 +2011-11-29 19:40:55.433,-80.5928038483,134162.705778717,159.0313991966,202.2490904748,39.2249593781,201.3525519747,50.0033874512,-1.27265229821205E-05,97.1633300781,11.712097168 +2011-11-29 19:40:55.466,-80.5516779094,134161.795830416,159.0897195464,202.2470217468,39.2718548464,201.3487542647,50.0033874512,1.39698386192322E-08,97.1800994873,11.7040786743 +2011-11-29 19:40:55.500,-80.510651421,134161.739642602,159.1409363817,202.3146770704,39.3044986578,201.3200940718,50.0033988953,0.000279746,97.180809021,11.7107620239 +2011-11-29 19:40:55.533,-80.4702132126,134150.697110818,159.1920512298,202.4064987029,39.3318654561,201.2575393868,50.0033988953,-1.39698386192322E-08,97.1742706299,11.6993179321 +2011-11-29 19:40:55.566,-80.4289276871,134150.309224279,159.2060103329,202.3931363765,39.385872122,201.16461847,50.0034103394,0.0003814744,97.1810760498,11.6929702759 +2011-11-29 19:40:55.600,-80.3875135992,134161.468169006,159.2319512882,202.2591612975,39.4177172596,201.2450491375,50.0034294128,0.000534053,97.1750640869,11.700592041 +2011-11-29 19:40:55.633,-80.3466920511,134161.13013857,159.2528594232,202.2214313577,39.4519545061,201.2682490816,50.0034179688,-0.0005467515,97.1649246216,11.7109603882 +2011-11-29 19:40:55.666,-80.3064880777,134159.503521908,159.2954150804,202.3213357035,39.4973851324,201.2262495439,50.00340271,-0.0004068855,97.1718215942,11.706199646 +2011-11-29 19:40:55.700,-80.2654455364,134150.372042426,159.3595280685,202.4507707886,39.5283373611,201.3044863597,50.0034179688,0.0007629348,97.1666107178,11.7156524658 +2011-11-29 19:40:55.733,-80.2238700041,134162.904062473,159.3913143696,202.4341632393,39.5766412116,201.4642158653,50.0034255981,1.2698583304882E-05,97.1837768555,11.6929702759 +2011-11-29 19:40:55.766,-80.1836952305,134164.131085596,159.3944141435,202.300789094,39.6329086471,201.4600312375,50.0033950806,-0.0009155273,97.1818008423,11.6922149658 +2011-11-29 19:40:55.800,-80.1442245246,134162.568773628,159.4196211967,202.1007914659,39.6790329961,201.2519752043,50.0033721924,-0.0006993581,97.1717681885,11.7136001587 +2011-11-29 19:40:55.833,-80.1031517794,134161.581450568,159.5131944218,202.0676234589,39.7174774365,201.1879753261,50.0033950806,0.001093545,97.1643829346,11.7070465088 +2011-11-29 19:40:55.866,-80.0608182019,134162.052607956,159.6224588776,202.2595967886,39.7497201955,201.3069319233,50.0034103394,0.000279746,97.1757278442,11.7215576172 +2011-11-29 19:40:55.900,-80.0202468164,134163.806534146,159.633578209,202.4329147667,39.7757838481,201.3230243942,50.0033836365,-0.0011571357,97.1798858643,11.6974945068 +2011-11-29 19:40:55.933,-79.9800401383,134164.43005952,159.6143400202,202.2463812737,39.8241901812,201.342062135,50.0033836365,0.000534053,97.1827850342,11.6861038208 +2011-11-29 19:40:55.966,-79.938789855,134161.951109055,159.6721883006,202.1127180575,39.865356557,201.2866431392,50.0034179688,0.0012461515,97.1898117065,11.6823654175 +2011-11-29 19:40:56.000,-79.8973007891,134150.799283293,159.7530732383,202.1691127543,39.904847336,201.2188609553,50.0034294128,-0.0003941869,97.16746521,11.7005310059 +2011-11-29 19:40:56.033,-79.8572432718,134161.927341646,159.7996529067,202.2943793786,39.9769959269,201.2271590401,50.0033912659,-0.0012461375,97.1804275513,11.7091674805 +2011-11-29 19:40:56.066,-79.8177813931,134162.823128654,159.7770535822,202.250338089,40.0504648765,201.2949483791,50.0033721924,-0.0003305962,97.1789627075,11.7072753906 +2011-11-29 19:40:56.100,-79.7768968002,134162.129008036,159.8002168548,202.1157592819,40.070941448,201.2772086373,50.0033874512,0.0009028008,97.1796798706,11.7004852295 +2011-11-29 19:40:56.133,-79.7351189398,134161.214880936,159.9163913294,202.2299209132,40.0283854408,201.2610241799,50.0033988953,1.2698583304882E-05,97.1733551025,11.7051315308 +2011-11-29 19:40:56.166,-79.694290868,134161.190294261,150.0326934815,202.5066188773,40.0630566773,201.2118049789,50.0033836365,-0.0005467795,97.1725311279,11.7065963745 +2011-11-29 19:40:56.200,-79.6543746671,134162.337052432,150.0283999544,202.4480854508,40.1728268317,201.1984038418,50.0033798218,7.63172283768654E-05,97.1777267456,11.6865310669 +2011-11-29 19:40:56.233,-79.6140057048,134162.901614789,150.007224203,202.1624657658,40.2187931532,201.3278013497,50.0033912659,0.0006484939,97.1751861572,11.7128295898 +2011-11-29 19:40:56.266,-79.5720122336,134161.516206844,150.0447612578,202.2190389841,40.2374339274,201.322430995,50.0034141541,0.00027976,97.1770553589,11.6929550171 +2011-11-29 19:40:56.300,-79.5300767343,134161.861711329,150.0448561358,202.1820025507,40.247586773,201.2536674441,50.0034179688,0.0001271674,97.1764984131,11.7020874023 +2011-11-29 19:40:56.333,-79.4896793673,134161.388460444,150.0758872168,202.0836746341,40.2657554404,201.2423633912,50.0034065247,-0.0004577637,97.1835784912,11.6989898682 +2011-11-29 19:40:56.366,-79.4498313497,134161.139552327,150.1692173447,202.2332615958,40.3371917325,201.3414500035,50.00340271,0,97.1723556519,11.7086639404 +2011-11-29 19:40:56.400,-79.4090578403,134161.821645681,150.225213887,202.2881287201,40.4387499011,201.4472032944,50.0034141541,0.0002924446,97.1768035889,11.6967697144 +2011-11-29 19:40:56.433,-79.3677603119,134150.655991751,150.2450258394,202.2890339289,40.4929099696,201.4770620268,50.00340271,-0.0004831888,97.1691665649,11.7193222046 +2011-11-29 19:40:56.466,-79.3275320253,134150.72558669,150.2670370531,202.3200855221,40.504839726,201.3893736353,50.0033721924,-0.000953651,97.1660003662,11.7053833008 +2011-11-29 19:40:56.500,-79.286820626,134161.616032785,150.3101874005,202.3131165142,40.5355523079,201.3500938194,50.0033798218,0.0008010864,97.160446167,11.7052154541 +2011-11-29 19:40:56.533,-79.2455180964,134150.753892713,150.355709983,202.3406371688,40.5478750124,201.2759290834,50.0034103394,0.0007120706,97.1774978638,11.6985549927 +2011-11-29 19:40:56.566,-79.2048818217,134150.140968805,150.3887549153,202.293677752,40.5545220996,201.2349577994,50.0034065247,-0.0005594781,97.1651077271,11.7213363647 +2011-11-29 19:40:56.600,-79.1645100665,134162.181289026,150.4409736439,202.3098672877,40.6025977127,201.3610335968,50.0033836365,-0.0006103422,97.16847229,11.7254104614 +2011-11-29 19:40:56.633,-79.1234481348,134164.121974762,150.5074102994,202.3245093368,40.6883369275,201.4809491873,50.0033988953,0.0006484939,97.1816864014,11.6921691895 +2011-11-29 19:40:56.666,-79.0824942983,134163.871380304,150.4937351554,202.2515890491,40.7832404282,201.4677407264,50.0034065247,-0.0001144409,97.1914672852,11.6739730835 +2011-11-29 19:40:56.700,-79.0419197167,134163.612812307,150.5056668808,202.2422588315,40.8388258061,201.3166092151,50.0033912659,-0.000394173,97.1784439087,11.6952056885 +2011-11-29 19:40:56.733,-79.0013488392,134162.894505308,150.582754656,202.310846957,40.832767406,201.2009872085,50.0033912659,6.35627657175064E-05,97.1742401123,11.6897354126 +2011-11-29 19:40:56.766,-78.9605066122,134161.857811617,150.6457451782,202.4052584741,40.8271779084,201.2851564339,50.0033988953,0.000394173,97.1819763184,11.7035369873 +2011-11-29 19:40:56.800,-78.9194489297,134161.592839544,150.6905816775,202.332835941,40.8655197388,201.3531433668,50.0033988953,-2.54251062870026E-05,97.1820678711,11.6881256104 +2011-11-29 19:40:56.833,-78.8789446296,134161.428605588,150.7405681377,202.2539331454,40.8942240281,201.2508358006,50.0033912659,-0.0002415944,97.1628875732,11.7201004028 +2011-11-29 19:40:56.866,-78.8388096559,134163.071900669,150.7817511587,202.1516393216,40.9323624826,201.2180086211,50.0033874512,-0.0002034567,97.1893463135,11.6922912598 +2011-11-29 19:40:56.900,-78.7974833666,134162.928743433,150.8184739734,202.1574640061,41.0071879485,201.2740699952,50.0033950806,0.0004450511,97.1881027222,11.6942825317 +2011-11-29 19:40:56.933,-78.7557778081,134158.889902948,150.8278982403,202.2214558954,41.088978584,201.242941938,50.0034065247,0.0002034567,97.1823501587,11.7013244629 +2011-11-29 19:40:56.966,-78.7158216699,134158.262118301,150.8893773794,202.2087649923,41.1197085126,201.2592755693,50.0033836365,-0.0007375097,97.1759262085,11.6909790039 +2011-11-29 19:40:57.000,-78.6755716004,134159.797273608,150.9654147821,202.2286392411,41.1125030141,201.338144386,50.0033798218,0.0003051711,97.1834716797,11.7063751221 +2011-11-29 19:40:57.033,-78.6336486437,134150.513019755,150.9830342356,202.3433660318,41.1552938581,201.3479022402,50.0034255981,0.0014495663,97.173324585,11.6795730591 +2011-11-29 19:40:57.066,-78.5918245536,134150.744022195,150.946155745,202.3460266339,41.2205313182,201.2786479982,50.0034370422,-0.0003560213,97.1799621582,11.6828384399 +2011-11-29 19:40:57.100,-78.5515270369,134162.793679874,150.9865519463,202.3134717129,41.2655038002,201.2498384975,50.0033988953,-0.0011189841,97.1541442871,11.7256317139 +2011-11-29 19:40:57.133,-78.5117539655,134163.975092715,161.0798497893,202.3048064811,41.305253456,201.2637389575,50.0033912659,5.08781522512436E-05,97.1947250366,11.681098938 +2011-11-29 19:40:57.166,-78.4711403962,134162.258175035,161.160548527,202.2324404665,41.3377566783,201.1747382313,50.00340271,0.0001907442,97.1862716675,11.6930465698 +2011-11-29 19:40:57.200,-78.4300774573,134163.582780701,161.2216732639,202.1991489491,41.3611384972,201.2299036823,50.0033874512,-0.0004323386,97.1866455078,11.6766357422 +2011-11-29 19:40:57.233,-78.3892976005,134165.446651176,161.2470136095,202.2407337553,41.4129497305,201.3196787821,50.0033798218,-5.08502125740051E-05,97.1645278931,11.7115249634 +2011-11-29 19:40:57.266,-78.34814907,134163.536717798,161.2656626186,202.1875587236,41.48092027,201.2457518384,50.0033988953,0.0009791041,97.1720962524,11.7115097046 +2011-11-29 19:40:57.300,-78.3072793444,134159.99661699,161.290492218,202.0821645872,41.5344708896,201.1690496918,50.0034103394,3.81376594305038E-05,97.1728057861,11.695892334 +2011-11-29 19:40:57.333,-78.2668023492,134161.072410531,161.3295232642,202.0302854693,41.5613345506,201.3352456407,50.0034065247,-0.0002034567,97.1813430786,11.6905136108 +2011-11-29 19:40:57.366,-78.2265168788,134163.478679342,161.3748887916,202.0819079892,41.5722096828,201.43764834,50.0033912659,-0.0004832167,97.1625823975,11.7047348022 +2011-11-29 19:40:57.400,-78.1862346226,134162.278896052,161.4085755854,202.1995481643,41.5940574344,201.314761216,50.0033798218,-0.0004577637,97.173576355,11.7011795044 +2011-11-29 19:40:57.433,-78.1454411697,134162.210575354,161.4758888398,202.3152577159,41.666978536,201.3519760005,50.0033760071,0,97.1703720093,11.729347229 +2011-11-29 19:40:57.466,-78.1045501168,134164.366158025,161.5451737527,202.300206567,41.7231311641,201.4110443464,50.0033760071,0.0001017423,97.1642303467,11.7185592651 +2011-11-29 19:40:57.500,-78.0636027121,134163.344715866,161.5624166595,202.2196321862,41.7071221979,201.2252306423,50.0033874512,0.0004704762,97.1769104004,11.6801757813 +2011-11-29 19:40:57.533,-78.0227594722,134162.898800904,161.5934543213,202.2363135944,41.756794303,201.1363793747,50.00340271,0.0004704902,97.1717605591,11.7264709473 +2011-11-29 19:40:57.566,-77.9813281801,134162.302877049,161.6256806885,202.4622830383,41.8542928836,201.2004289556,50.0034103394,0.0001653051,97.1724395752,11.7011566162 +2011-11-29 19:40:57.600,-77.9402501987,134161.184762167,161.6577448024,202.5593680609,41.9164321922,201.2159036732,50.0034141541,7.62753188610077E-05,97.1853790283,11.6879653931 +2011-11-29 19:40:57.633,-77.8999751245,134162.241080851,161.7164153333,202.4896697064,41.947866983,201.2770964513,50.0034141541,-0.0001271535,97.1672592163,11.6972732544 +2011-11-29 19:40:57.666,-77.8596463731,134163.598829378,161.7327579102,202.3436392155,41.9638545344,201.2328895268,50.0033988953,-0.0003560353,97.1824417114,11.7098007202 +2011-11-29 19:40:57.700,-77.8186971866,134161.356834908,161.7762796833,202.348479378,41.981431051,201.2075726116,50.00340271,0.0001907302,97.1758422852,11.6999893188 +2011-11-29 19:40:57.733,-77.7774414359,134159.24225691,161.8185221291,202.3374276506,42.0262030035,201.4347224009,50.00340271,1.39698386192322E-08,97.1664505005,11.7208633423 +2011-11-29 19:40:57.766,-77.736126765,134159.721000202,161.8458320024,202.1928923913,42.053482516,201.4519218357,50.0034065247,0.0002034428,97.1818695068,11.6815261841 +2011-11-29 19:40:57.800,-77.6956770259,134150.835423516,161.9247155595,202.161716692,42.1002183321,201.325438942,50.0034065247,0,97.1853485107,11.6780700684 +2011-11-29 19:40:57.833,-77.6551712322,134161.701904669,161.9883997492,202.2737558491,42.1841135651,201.2456592543,50.0034103394,0.0002288818,97.1801757813,11.6877441406 +2011-11-29 19:40:57.866,-77.6143474575,134162.271314186,161.9875430861,202.3984154151,42.239034283,201.3416387804,50.0034103394,-0.0003306242,97.1754760742,11.7015686035 +2011-11-29 19:40:57.900,-77.574009448,134163.002385693,162.004806373,202.380233791,42.2504628845,201.4538510694,50.0033874512,-0.0007629208,97.1542892456,11.7234649658 +2011-11-29 19:40:57.933,-77.5335243989,134161.531976937,162.0396206271,202.3159693108,42.2916690394,201.3546884219,50.0033760071,-6.35767355561256E-05,97.1703796387,11.6867370605 +2011-11-29 19:40:57.966,-77.4923286654,134159.905068189,162.08836658,202.3775017325,42.3508188987,201.3315263622,50.0033874512,0.0005467795,97.1721725464,11.7256851196 +2011-11-29 19:40:58.000,-77.4509112348,134159.198896598,162.1379385053,202.4309760513,42.3539894374,201.414136517,50.0034065247,0.0004959013,97.1626815796,11.7216033936 +2011-11-29 19:40:58.033,-77.4095514831,134150.157461845,162.1862752173,202.4347197221,42.394544461,201.3731442155,50.0034179688,0.0004831888,97.1825408936,11.6914138794 +2011-11-29 19:40:58.066,-77.368820172,134150.288037263,162.2263501966,202.38897768,42.4901491024,201.297115558,50.0034255981,0,97.1867980957,11.6754379272 +2011-11-29 19:40:58.100,-77.32907371,134161.633544433,162.2612235998,202.2951614094,42.5270501885,201.2871980699,50.0034255981,-0.0001525646,97.1683273315,11.6976852417 +2011-11-29 19:40:58.133,-77.2888005975,134162.032790637,162.294469068,202.254274337,42.5332741601,201.1900952914,50.0033988953,-0.0006357953,97.1804122925,11.7022094727 +2011-11-29 19:40:58.166,-77.2473969494,134161.912074355,162.3369449986,202.3621266056,42.5862412149,201.1842751264,50.0033950806,0,97.196975708,11.6925888062 +2011-11-29 19:40:58.200,-77.2059887003,134162.352530665,162.3757528559,202.3359399537,42.6223853105,201.3586158351,50.0033950806,1.27265229821205E-05,97.1824645996,11.6936187744 +2011-11-29 19:40:58.233,-77.1652844224,134162.736041472,162.4134272463,202.2529567086,42.6449654265,201.4115223361,50.0033950806,0,97.1909179688,11.6703720093 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..0cfc8fe --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Floating Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,712 @@ +"2011-11-29 20:18:29.233",134168.296875,-169.102970943,134.8224334717,-169.5159651613,0.1450927705,144.6345149207,202.337310791,70.3263802607,202.0307922363,-49.3285038651,60.0033760071,"-7.63032585382462E-05",97.1161651611,108.9102172852,11.794052124 +"2011-11-29 20:18:29.266",134167.265625,-169.061921506,134.8015441895,-169.4483189678,0.0693023801,0.1610450551,202.3217163086,70.3646429804,202.1531677246,-49.2646518417,60.0033760071,"2.79396772384644E-08",97.1366653442,108.922706604,11.7860412598 +"2011-11-29 20:18:29.300",134167.046875,-169.0205032389,134.78465271,-169.3850440953,0.0458044522,-74.8878606262,202.2794799805,70.4249330602,202.0801849365,-49.207759781,60.0033836365,0.0005086139,97.1474304199,108.9005584717,11.7531280518 +"2011-11-29 20:18:29.333",134165.78125,-168.9798636134,134.7117156982,-169.367558811,0.1078804955,174.3555230185,202.0138702393,70.4346797402,202.0202636719,-49.1611949663,60.0033950806,0.0001780316,97.1515655518,108.9214553833,11.7698898315 +"2011-11-29 20:18:29.366",134166.0625,-168.9391420255,134.6603393555,-169.3241324683,0.0502309091,-135.409565805,201.8742523193,70.4780514414,202.0673370361,-49.1344411153,60.00340271,0.00027976,97.1497802734,108.913482666,11.7637023926 +"2011-11-29 20:18:29.400",134168.25,-168.8983111547,134.7460327148,-169.2591910297,0.1367013007,-93.1392803904,202.0541381836,70.5406228044,202.153213501,-49.0967009051,60.0034065247,0.0001017423,97.1319656372,108.9110870361,11.7791213989 +"2011-11-29 20:18:29.433",134168.03125,-168.8577808121,134.7694091797,-169.2105874035,0.1303349286,-94.847551683,202.1423950195,70.5799373732,202.1329956055,-49.036690863,60.0033950806,-0.0005594781,97.1434402466,108.9143066406,11.770866394 +"2011-11-29 20:18:29.466",134165.1875,-168.8172777904,134.7488708496,-169.1920366097,0.0251683109,-49.7269087994,202.1364746094,70.6069166205,202.1249237061,-48.9971611432,60.0033874512,-0.0003051711,97.1438598633,108.9025115967,11.7586517334 +"2011-11-29 20:18:29.500",134163.71875,-168.7766928063,134.7640838623,-169.1789636277,0.0830653459,110.7198184838,202.1180877686,70.6408694908,202.1621398926,-48.9756187266,60.0033874512,0.0003051711,97.1206283569,108.8883361816,11.7677078247 +"2011-11-29 20:18:29.533",134163.828125,-168.7355477467,134.7208251953,-169.1402774362,0.0719386414,100.8485490576,201.9964599609,70.6924784002,202.1679840088,-48.9527819891,60.0033912659,"7.62892886996269E-05",97.1437301636,108.9006271362,11.7568969727 +"2011-11-29 20:18:29.566",134165.03125,-168.6946075929,134.7014465332,-169.0792428658,0.0182955861,18.3640769044,202.0995178223,70.749626593,202.0247650146,-48.9073680613,60.0033950806,"2.54390761256218E-05",97.1380081177,108.8836669922,11.7456588745 +"2011-11-29 20:18:29.600",134168.28125,-168.6537357409,134.7675933838,-168.9990427845,0.1057253778,-109.8865968768,202.2347106934,70.807143616,202.0158538818,-48.8307367539,60.00340271,0.0002288818,97.1334686279,108.9103851318,11.7769165039 +"2011-11-29 20:18:29.633",134169.609375,-168.6128365681,134.8114624023,-168.9500293471,0.1741364002,-135.6230365373,202.1170043945,70.8475441849,202.174118042,-48.7747531084,60.0034103394,0.0002543069,97.1322097778,108.9046630859,11.7724533081 +"2011-11-29 20:18:29.666",134167.296875,-168.5715822255,134.7888031006,-168.9464093468,0.1465153247,-155.4737246052,202.0650787354,70.8824669422,202.1605987549,-48.7850222978,60.0034179688,0.000279774,97.1318435669,108.9321670532,11.8003234863 +"2011-11-29 20:18:29.700",134163.875,-168.5309835811,134.7734222412,-168.9167526654,0.1618448496,-179.0984883404,202.1455230713,70.9278398888,202.0170135498,-48.7530843332,60.0034103394,-0.000279732,97.1244430542,108.9172515869,11.7928085327 +"2011-11-29 20:18:29.733",134163.4375,-168.4908493895,134.6933288574,-168.863190322,0.07745222,-119.1842875071,202.050567627,70.9634729857,201.9809875488,-48.706536594,60.0033988953,-0.0004577637,97.1373977661,108.9127655029,11.7753677368 +"2011-11-29 20:18:29.766",134166.59375,-168.450100481,134.6704559326,-168.818384281,0.126095891,-81.0482472952,201.987487793,70.9934643464,202.0208129883,-48.6659925911,60.0033950806,0.0001017144,97.1295623779,108.8991699219,11.7696075439 +"2011-11-29 20:18:29.800",134167.328125,-168.4090920252,134.678604126,-168.7711603531,0.108848311,-103.0472279325,202.0768127441,71.0504554448,201.9159088135,-48.6207801539,60.0033988953,-0.0001525925,97.1335296631,108.9075622559,11.7740325928 +"2011-11-29 20:18:29.833",134168.15625,-168.3686982864,134.7520904541,-168.7525412574,0.1251616776,-156.9304946721,202.1476135254,71.0946877499,201.9875183105,-48.6068977944,60.0033798218,-0.0005340669,97.1406402588,108.9163131714,11.7756729126 +"2011-11-29 20:18:29.866",134169.203125,-168.3281406231,134.7929229736,-168.7290727274,0.1713201255,-142.0740409254,202.2034454346,71.1279780919,202.0232543945,-48.6077720586,60.0033798218,0.0003305962,97.1406173706,108.933807373,11.7931900024 +"2011-11-29 20:18:29.900",134169.203125,-168.2872960919,134.6959838867,-168.6730241951,0.1111529693,-62.5422185693,202.2106323242,71.1479632254,201.9098815918,-48.5240134488,60.0033912659,0.0003814744,97.1529083252,108.9044342041,11.7515258789 +"2011-11-29 20:18:29.933",134169.3125,-168.2468886928,134.6150970459,-168.6361411736,0.1139465198,30.0007794764,202.0644836426,71.1756459821,201.8910980225,-48.4374134804,60.0033874512,-0.0003814884,97.1458969116,108.9192047119,11.7733078003 +"2011-11-29 20:18:29.966",134168.28125,-168.2069320861,134.6213684082,-168.5966626802,0.1800202578,124.1126651442,201.9098052979,71.2584893465,201.8865661621,-48.4046490629,60.0033721924,-0.000534053,97.1282043457,108.9049835205,11.7767791748 +"2011-11-29 20:18:30.000",134166.125,-168.1660465737,134.6870117188,-168.5288525621,0.2006438076,168.9980319165,201.9216461182,71.3419064469,201.9552459717,-48.3778576459,60.0033798218,0.0004069135,97.1309967041,108.9200668335,11.7890701294 +"2011-11-29 20:18:30.033",134164.3125,-168.1244507217,134.6818237305,-168.4630368592,0.1549095362,-64.5752107154,201.9330444336,71.3637972032,202.1510772705,-48.3326759445,60.0033912659,0.0004832027,97.1484832764,108.9197845459,11.7713012695 +"2011-11-29 20:18:30.066",134166.15625,-168.0837974358,134.6237030029,-168.4238315734,0.2399064302,-25.4937459639,201.948135376,71.3883380728,202.1161651611,-48.2771226009,60.0033874512,-0.0004832167,97.1307220459,108.9100265503,11.7793045044 +"2011-11-29 20:18:30.100",134168.671875,-168.0435539612,134.6981811523,-168.4289951964,0.0758340806,64.7152842349,202.085067749,71.3974153942,202.0570373535,-48.2381632019,60.0033836365,0.0002288818,97.1278381348,108.9133453369,11.7855072021 +"2011-11-29 20:18:30.133",134169.296875,-168.0026138073,134.7296447754,-168.3838749668,0.0666584298,125.1205141978,202.1620025635,71.4213756979,202.0028991699,-48.1716303292,60.00340271,0.0005849171,97.1577072144,108.921005249,11.7632980347 +"2011-11-29 20:18:30.166",134167.734375,-167.9620971251,134.7190704346,-168.3001231872,0.066609405,-121.4367472916,202.2138214111,71.5091982702,201.8999328613,-48.12291742,60.0033950806,-0.0007629348,97.1296539307,108.9293212891,11.7996673584 +"2011-11-29 20:18:30.200",134165.453125,-167.9220175751,134.8034820557,-168.2203329173,0.2367471904,-148.5384051635,202.3042449951,71.6099230699,201.8848419189,-48.0728589636,60.0033721924,-0.0007120706,97.141746521,108.9134674072,11.7717208862 +"2011-11-29 20:18:30.233",134165.6875,-167.8812686665,134.8206634521,-168.2139398602,0.226904124,-169.3587068859,202.2487945557,71.6174294478,201.9880828857,-48.0437965087,60.0033721924,0.0004577637,97.1455917358,108.919921875,11.7743301392 +"2011-11-29 20:18:30.266",134167.09375,-167.8400006635,134.7584991455,-168.2660268828,0.1117278636,159.3766039799,202.0735778809,71.5556025754,202.1096801758,-48.0707176993,60.0033950806,0.0005849171,97.1352386475,108.9136886597,11.7784500122 +"2011-11-29 20:18:30.300",134167.453125,-167.7993063965,134.7873687744,-168.2091723882,0.0597603396,-106.502019577,202.1817321777,71.6104353341,202.1538848877,-48.0436496596,60.0033874512,-0.0003560493,97.126449585,108.9007797241,11.7743301392 +"2011-11-29 20:18:30.333",134167.90625,-167.7582979407,134.7945861816,-168.1141644568,0.1495974064,-62.1187946521,202.4531555176,71.696256661,201.9736175537,-47.964918069,60.0033988953,0.0006612204,97.1394500732,108.9086456299,11.7691955566 +"2011-11-29 20:18:30.366",134169.46875,-167.7169752962,134.8035736084,-168.0930591723,0.096420832,171.811578081,202.3246765137,71.7291986634,201.9975128174,-47.9056251969,60.0034217834,0.000534053,97.1360168457,108.9164123535,11.7803955078 +"2011-11-29 20:18:30.400",134167.75,-167.6767045009,134.8062286377,-168.079835926,0.2849707007,160.6752141865,202.0523681641,71.7627007412,202.1246643066,-47.8805071762,60.0034141541,-0.0003814604,97.1364822388,108.9037399292,11.7672576904 +"2011-11-29 20:18:30.433",134164.984375,-167.6367342338,134.728515625,-168.0440867159,0.1319861859,148.8217214102,202.1294403076,71.7697494965,201.9622344971,-47.8321733425,60.0033912659,-0.0007374957,97.1403198242,108.8994903564,11.7591705322 +"2011-11-29 20:18:30.466",134165.0625,-167.5958077403,134.6993560791,-168.0027367507,0.0599027015,169.1915584965,202.2049713135,71.7973502909,201.8403930664,-47.795867472,60.0033988953,0.0003560493,97.1388244629,108.9189376831,11.7801132202 +"2011-11-29 20:18:30.500",134165.609375,-167.5555779261,134.7456359863,-167.9492290487,0.1175718755,173.4509327648,202.1370849609,71.9225271678,201.9895172119,-47.8102416051,60.0033798218,-0.0009918446,97.1369476318,108.9150085449,11.7780609131 +"2011-11-29 20:18:30.533",134166.28125,-167.5153344515,134.7556304932,-167.9005707811,0.0389445201,82.44644849,202.1036682129,71.9703180014,202.1774597168,-47.7611086393,60.0033607483,-0.0003814744,97.13331604,108.9063491821,11.7730331421 +"2011-11-29 20:18:30.566",134167.5625,-167.4741210901,134.7534332275,-167.8605458726,0.0232568569,-58.5460114897,202.1315307617,71.9305594703,202.1390686035,-47.65787033,60.0033721924,0.0007120706,97.1285476685,108.9191055298,11.7905578613 +"2011-11-29 20:18:30.600",134166.9375,-167.4325525588,134.781036377,-167.8150158315,0.1436795145,-135.767522359,202.1632537842,71.9648880011,202.0607757568,-47.6164179119,60.00340271,0.0010681059,97.1313323975,108.9164505005,11.785118103 +"2011-11-29 20:18:30.633",134166.4375,-167.3913528577,134.7587280273,-167.7896348486,0.0994106531,-151.6603070481,202.1341247559,72.0262640809,202.048538208,-47.6132862702,60.0034103394,"-5.08641824126244E-05",97.1599731445,108.9181213379,11.7581481934 +"2011-11-29 20:18:30.666",134167.328125,-167.3511093831,134.6957092285,-167.7810151499,0.0991883427,138.6410102636,202.0322418213,72.0757146505,201.9974822998,-47.6150621194,60.0034103394,"1.39698386192322E-08",97.1244659424,108.9186935425,11.7942276001 +"2011-11-29 20:18:30.700",134166.15625,-167.3109478708,134.6871948242,-167.7184642774,0.083424814,112.3871291319,202.075012207,72.1456626178,201.9733276367,-47.5592150776,60.0034103394,"-5.08641824126244E-05",97.1357574463,108.9184265137,11.7826690674 +"2011-11-29 20:18:30.733",134166.296875,-167.2699120943,134.7311401367,-167.6461598949,0.0603959188,59.2860215051,202.0905609131,72.1868691491,202.145904541,-47.4667104106,60.0034065247,-0.0002288818,97.1477813721,108.9258651733,11.7780838013 +"2011-11-29 20:18:30.766",134165.96875,-167.2284118649,134.7288513184,-167.6102330999,0.0666521117,140.921159635,201.9429016113,72.2306438315,202.2038726807,-47.4365175594,60.0034065247,0,97.123085022,108.9035797119,11.7804946899 +"2011-11-29 20:18:30.800",134165.328125,-167.1871985034,134.7057189941,-167.5554686431,0.1903870851,-147.0027737324,201.9218139648,72.2891307413,202.0184326172,-47.4190869166,60.0034065247,0.0001271535,97.13646698,108.9016189575,11.7651519775 +"2011-11-29 20:18:30.833",134167.234375,-167.1469823496,134.7625579834,-167.5144738477,0.1911585331,-113.1810976418,202.0932769775,72.288468213,202.084854126,-47.3614196295,60.0034065247,0,97.1244888306,108.9146728516,11.790184021 +"2011-11-29 20:18:30.866",134168.9375,-167.1066022712,134.7877807617,-167.498381922,0.0497270934,-97.5609058025,202.2779541016,72.3078454597,202.0704650879,-47.3176586074,60.0034103394,0.0003051851,97.1500396729,108.9332809448,11.783241272 +"2011-11-29 20:18:30.900",134170.4375,-167.0655255135,134.719543457,-167.4414181443,0.0959455147,135.544311777,202.2464752197,72.3816798046,201.8620605469,-47.2413175831,60.0034141541,-0.0002288818,97.1340408325,108.9098815918,11.7758407593 +"2011-11-29 20:18:30.933",134168.609375,-167.0254186427,134.6839752197,-167.3783618379,0.0350519009,128.5353492356,202.0845336914,72.4507944888,201.9539489746,-47.1984274102,60.0033798218,-0.0008901022,97.1288299561,108.9278869629,11.7990570068 +"2011-11-29 20:18:30.966",134165.609375,-166.9848746398,134.6943511963,-167.3387877219,0.1081242189,-88.1916757708,201.9718017578,72.491673171,202.0923614502,-47.1994553537,60.0033683777,-0.0002543209,97.1332931519,108.914932251,11.7816390991 +"2011-11-29 20:18:31.000",134165.796875,-166.9443442973,134.7009124756,-167.3141717201,0.0082966676,-175.4406761531,201.9728546143,72.5127852857,202.1235656738,-47.140903557,60.0033760071,0.0002288818,97.1352920532,108.9032211304,11.7679290771 +"2011-11-29 20:18:31.033",134167.296875,-166.9038549359,134.6902160645,-167.2848838689,0.0977809727,25.8015672218,202.0949249268,72.5215415882,202.0733337402,-47.0850155341,60.0033760071,"-2.54390761256218E-05",97.1309051514,108.9061660767,11.7752609253 +"2011-11-29 20:18:31.066",134167.25,-166.8627918386,134.7153778076,-167.2337940539,0.0955304205,-64.7005515168,202.2023925781,72.578580498,201.9664001465,-47.0723865144,60.0033760071,"-2.79396772384644E-08",97.1220779419,108.9007720947,11.7786941528 +"2011-11-29 20:18:31.100",134167.03125,-166.821824364,134.7046966553,-167.1974437872,0.1050107405,-92.6661122055,202.1512908936,72.6228128031,201.9364624023,-47.0462098144,60.0033874512,0.0002543349,97.1513061523,108.9249420166,11.7736358643 +"2011-11-29 20:18:31.133",134168,-166.7816082101,134.6782989502,-167.1698498229,0.0768977627,-11.9338883716,202.0171813965,72.6216585011,202.0900878906,-46.9705279033,60.0033836365,-0.000279732,97.1320724487,108.9260406494,11.7939682007 +"2011-11-29 20:18:31.166",134166.90625,-166.7411188487,134.7247009277,-167.1614623506,0.1715258956,91.2748573131,202.0719451904,72.6636709947,202.1389770508,-46.9390202406,60.0033836365,0.0001780177,97.1366958618,108.9173583984,11.7806625366 +"2011-11-29 20:18:31.200",134165.671875,-166.7003426194,134.7617034912,-167.1086649883,0.2102522403,129.3795469566,202.2709503174,72.755789756,201.9220581055,-46.9194722392,60.0033912659,"7.62892886996269E-05",97.1400222778,108.9205780029,11.7805557251 +"2011-11-29 20:18:31.233",134166.640625,-166.6597712957,134.7189331055,-167.0413193231,0.0248604342,-168.0532118487,202.2695617676,72.7813551541,201.8643035889,-46.8635090843,60.0033836365,-0.0002288818,97.1226959229,108.9226608276,11.7999649048 +"2011-11-29 20:18:31.266",134168.765625,-166.6186398965,134.6730804443,-167.0016222637,0.0362494811,-26.5984914961,202.1249084473,72.8092018353,201.9243927002,-46.8187679301,60.0033836365,0.0001017004,97.145904541,108.9201889038,11.7742843628 +"2011-11-29 20:18:31.300",134167.859375,-166.5776177804,134.7223358154,-166.9603269399,0.1349045485,139.6828326781,202.1561584473,72.8501898005,201.9329223633,-46.7399031508,60.0033950806,0.0002543069,97.1273574829,108.9056549072,11.7782974243 +"2011-11-29 20:18:31.333",134165.140625,-166.5374699284,134.8051300049,-166.9278152395,0.1664902717,138.9865905149,202.2486724854,72.8554558764,202.0724945068,-46.672642863,60.0033950806,"-5.08781522512436E-05",97.1392745972,108.9155273438,11.7762527466 +"2011-11-29 20:18:31.366",134164.5625,-166.4976909067,134.8708343506,-166.8810557644,0.0942825526,176.2316120589,202.2861480713,72.9062724838,202.2390441895,-46.6605807489,60.0033760071,-0.0006866455,97.1384277344,108.9013900757,11.7629623413 +"2011-11-29 20:18:31.400",134165.6875,-166.4571605642,134.8437652588,-166.8443503278,0.1503423601,162.1740308979,202.1686706543,72.9923260371,202.2356109619,-46.6591259186,60.0033760071,0.0003051851,97.1354904175,108.9233932495,11.787902832 +"2011-11-29 20:18:31.433",134167.5625,-166.4154281083,134.7200775146,-166.8283130437,0.1823710799,129.163644677,201.948928833,73.029004153,202.1330718994,-46.6392910493,60.0033798218,0,97.1495513916,108.9170761108,11.7675247192 +"2011-11-29 20:18:31.466",134168.9375,-166.3736683318,134.6050567627,-166.7654616429,0.130270496,0.5457648249,201.9873199463,73.0529234755,201.9568481445,-46.5919339327,60.0033950806,0.000534053,97.1314315796,108.90234375,11.7709121704 +"2011-11-29 20:18:31.500",134168.734375,-166.3331379892,134.6272277832,-166.7088803558,0.3081825972,-16.3638833267,202.140411377,73.1114513665,202.0107116699,-46.5723210445,60.00340271,0.0003306102,97.1289825439,108.91796875,11.7889862061 +"2011-11-29 20:18:31.533",134167.90625,-166.2926076467,134.7216644287,-166.6597029938,0.1359220892,-47.4541018814,202.0629730225,73.1682990309,202.1698455811,-46.5213917389,60.0034141541,0.0004323525,97.133934021,108.8986206055,11.7646865845 +"2011-11-29 20:18:31.566",134168.046875,-166.2512303607,134.7438964844,-166.6152384623,0.1055927128,-152.1283389308,202.0192108154,73.199028052,202.1122589111,-46.437052563,60.0034332275,0.0003051851,97.1349029541,108.9136047363,11.7787017822 +"2011-11-29 20:18:31.600",134169.1875,-166.2109732257,134.7142791748,-166.5635612511,0.0949059576,-154.825362068,202.0703735352,73.2484786216,201.9816741943,-46.3810006156,60.0034065247,-0.0009663915,97.1314468384,108.9265670776,11.7951202393 +"2011-11-29 20:18:31.633",134168.84375,-166.1707570719,134.817276001,-166.4982373218,0.2221906185,-124.7820100225,202.2247924805,73.3291568161,202.0626373291,-46.3674085392,60.0033760071,-0.0006866455,97.1561431885,108.9035949707,11.7474517822 +"2011-11-29 20:18:31.666",134168.046875,-166.1301994086,134.884979248,-166.4681981499,0.2723530531,-133.6475819048,202.2952728271,73.3692636869,202.1320800781,-46.3473721792,60.0033760071,0.0001780316,97.1394805908,108.9327392578,11.793258667 +"2011-11-29 20:18:31.700",134167.265625,-166.0896007642,134.7557220459,-166.4568600358,0.0874619931,-121.635888287,202.2000274658,73.3760460647,202.0066375732,-46.3070877235,60.0033798218,-0.0001525925,97.1505126953,108.9287796021,11.7782669067 +"2011-11-29 20:18:31.733",134167.21875,-166.0489611386,134.6260375977,-166.4203321842,0.1133208722,9.4597795571,202.1197052002,73.4283926345,201.8728027344,-46.2711711738,60.0033798218,0,97.1333312988,108.9112243652,11.7778930664 +"2011-11-29 20:18:31.766",134167.421875,-166.0081302678,134.7039031982,-166.372739426,0.0676515698,94.8038179817,202.1496734619,73.4693464488,201.9741516113,-46.1957078287,60.0033836365,0.0002034288,97.1207733154,108.9184112549,11.7976379395 +"2011-11-29 20:18:31.800",134166.3125,-165.9668212837,134.8201293945,-166.3255564792,0.2120327652,-174.9573992881,202.1255645752,73.4906976201,202.1273345947,-46.1327881261,60.0033912659,0.0003306102,97.1374816895,108.9098892212,11.7724075317 +"2011-11-29 20:18:31.833",134165.328125,-165.9260177336,134.7403869629,-166.2756004757,0.2075133771,-142.5582876772,202.1139831543,73.5290423021,201.9192810059,-46.1037290863,60.0033950806,0,97.1332626343,108.8980407715,11.7647781372 +"2011-11-29 20:18:31.866",134165.78125,-165.8857879193,134.5975646973,-166.2256308117,0.1797547489,-80.1426939849,202.1083068848,73.5746543054,201.6740570068,-46.0764254051,60.0033950806,"-2.54111364483833E-05",97.1202087402,108.9058074951,11.7855987549 +"2011-11-29 20:18:31.900",134167.578125,-165.8453258787,134.6386260986,-166.1799505065,0.1479940861,-69.1760124799,202.2281341553,73.6189207614,201.707824707,-46.0200046274,60.0033912659,-0.0002543069,97.1393814087,108.928894043,11.7895126343 +"2011-11-29 20:18:31.933",134166.765625,-165.8057381023,134.7091522217,-166.1387371451,0.0489395112,-61.9942734733,202.204498291,73.6780565392,201.9367980957,-45.9687303973,60.0033760071,-0.0006612344,97.1406021118,108.9143981934,11.7737960815 +"2011-11-29 20:18:31.966",134166.3125,-165.7654263258,134.6456298828,-166.109162426,0.1335384101,30.6746664305,202.0961914063,73.7477176386,201.9699554443,-45.9549914718,60.0033607483,0,97.1463012695,108.8932800293,11.7469787598 +"2011-11-29 20:18:32.000",134168.953125,-165.7234479831,134.6671905518,-166.0859397828,0.0623375848,45.4995988542,202.0775146484,73.7559343562,201.978805542,-45.9184704503,60.003364563,0.0003051711,97.1439208984,108.9108581543,11.7669372559 +"2011-11-29 20:18:32.033",134169.28125,-165.682316584,134.7414855957,-166.0628127622,0.0508997552,-129.79596993,202.050994873,73.7501901671,202.1345062256,-45.8844151271,60.0033912659,0.0003306102,97.1489105225,108.9158325195,11.7669219971 +"2011-11-29 20:18:32.066",134167.9375,-165.6418408829,134.7391204834,-166.0135807587,0.1144944206,-100.4569333313,202.046661377,73.8040462087,202.1250457764,-45.8608065782,60.0033912659,0.0002034567,97.1413574219,108.9234771729,11.782119751 +"2011-11-29 20:18:32.100",134167.078125,-165.6007094838,134.7500762939,-165.9906313231,0.0357705615,-58.9408032539,202.1491699219,73.8518848536,202.1129760742,-45.8427987845,60.0034179688,0.0007883878,97.1497802734,108.9061813354,11.756401062 +"2011-11-29 20:18:32.133",134166.953125,-165.5592502355,134.82081604,-165.9479836219,0.1116574705,67.8054120795,202.3647613525,73.8868007807,202.1657104492,-45.7570594198,60.0034370422,0.0004832167,97.1355895996,108.9043045044,11.7687149048 +"2011-11-29 20:18:32.166",134167.234375,-165.5178319684,134.8270568848,-165.8511998414,0.0978476554,161.1638869008,202.3099975586,73.973721768,202.0911254883,-45.6608220544,60.0034294128,-0.0003814604,97.142288208,108.9138870239,11.7715988159 +"2011-11-29 20:18:32.200",134166.796875,-165.4778753617,134.7667541504,-165.7968861771,0.2567587197,-148.4723299134,202.1715698242,74.0638666047,201.8846282959,-45.6791440369,60.0034141541,-0.0003051991,97.1370620728,108.9048461914,11.7677841187 +"2011-11-29 20:18:32.233",134167.390625,-165.4378094721,134.7483520508,-165.792911007,0.2051653415,-125.5847075142,202.1719207764,74.0470438488,201.917678833,-45.67023064,60.0034065247,-0.0003051851,97.1292266846,108.9069213867,11.7776947021 +"2011-11-29 20:18:32.266",134168.078125,-165.3975523371,134.7303466797,-165.7594704008,0.1532536,-71.5523923865,202.2077026367,74.0367302631,201.9966125488,-45.5987902764,60.0033798218,-0.0009409664,97.1374511719,108.8991775513,11.7617263794 +"2011-11-29 20:18:32.300",134166.75,-165.3574454663,134.688949585,-165.7224234548,0.0293897931,-107.6627965661,202.1138153076,74.0829569834,201.9397583008,-45.5346957812,60.0033493042,-0.0007629488,97.1331634521,108.9178390503,11.7846755981 +"2011-11-29 20:18:32.333",134167.265625,-165.3165736143,134.6743927002,-165.7024793024,0.0897390097,124.7442117557,202.0773010254,74.1285894773,201.9165496826,-45.5095538549,60.0033493042,0,97.133140564,108.9227600098,11.7896194458 +"2011-11-29 20:18:32.366",134167.875,-165.2752919509,134.6895294189,-165.6595857144,0.0458155908,-159.6815172849,202.1174316406,74.1490937052,201.9078521729,-45.4694025879,60.0033721924,0.0009663915,97.1479263306,108.9072952271,11.7593688965 +"2011-11-29 20:18:32.400",134167.0625,-165.2345976839,134.6852111816,-165.5918985397,0.1096128747,-111.8864079639,202.0882110596,74.211118653,201.9046173096,-45.4197915088,60.0033836365,0.000279732,97.1401367188,108.9169082642,11.7767715454 +"2011-11-29 20:18:32.433",134167.078125,-165.1935892281,134.7213134766,-165.5628019339,0.054535985,-79.6505583646,202.154586792,74.2437191459,202.0076141357,-45.3846057893,60.00340271,0.0007629627,97.135093689,108.9169311523,11.7818374634 +"2011-11-29 20:18:32.466",134166.75,-165.1522119421,134.7651977539,-165.5492098574,0.1286593974,-174.6766921736,202.1805725098,74.2617166944,201.9902954102,-45.354156806,60.0034217834,0.000534053,97.1332855225,108.9138793945,11.7805938721 +"2011-11-29 20:18:32.500",134166.78125,-165.1120504298,134.7492523193,-165.4953196649,0.2289061546,-161.4176147681,202.1427307129,74.3477702477,201.8781433105,-45.3427777108,60.0034141541,-0.0004577637,97.1366119385,108.9009094238,11.7642974854 +"2011-11-29 20:18:32.533",134166.171875,-165.0717796344,134.7688140869,-165.4549669073,0.131089583,-167.9339157646,202.2225799561,74.3969066286,201.9542388916,-45.3050238402,60.0033988953,-0.0004068995,97.1311645508,108.9117889404,11.7806243896 +"2011-11-29 20:18:32.566",134165.484375,-165.0308394806,134.7589263916,-165.4231792069,0.0948160142,123.3637622225,202.2283172607,74.435626971,202.0194244385,-45.2564099688,60.00340271,0.0002288679,97.1372756958,108.913848877,11.7765731812 +"2011-11-29 20:18:32.600",134165.421875,-164.9906779682,134.7152862549,-165.3821570907,0.1120574027,146.3185390417,202.2238311768,74.4714581434,201.849029541,-45.2117405316,60.0033798218,-0.0009918166,97.1438522339,108.9041671753,11.7603149414 +"2011-11-29 20:18:32.633",134165.34375,-164.9502159276,134.7539978027,-165.2968070468,0.188980639,-134.2053351524,202.1230926514,74.5237159208,201.9787597656,-45.1448934702,60.0033683777,-0.0001780177,97.1379852295,108.9258575439,11.7878723145 +"2011-11-29 20:18:32.666",134167.015625,-164.9090162265,134.8057556152,-165.2369199482,0.1806704849,-126.7916292613,202.1176147461,74.5889920387,202.15965271,-45.0946915798,60.0033836365,0.0007883739,97.1453781128,108.9097671509,11.7643890381 +"2011-11-29 20:18:32.700",134169.390625,-164.8684585632,134.7784881592,-165.2223306641,0.0301558599,163.8141095818,202.2628479004,74.5928647559,202.0488891602,-45.0329056886,60.0033874512,-0.0003305962,97.1501235962,108.9105987549,11.7604751587 +"2011-11-29 20:18:32.733",134168.890625,-164.8291986359,134.6609344482,-165.1897779825,0.0625008196,62.138397295,202.196105957,74.6077272476,201.8317565918,-44.9738552881,60.003364563,-0.0006612064,97.1392059326,108.8908004761,11.7515945435 +"2011-11-29 20:18:32.766",134166.328125,-164.7887229349,134.6501464844,-165.1390023562,0.0032847053,-83.0411735516,202.1112518311,74.6657565347,201.8410644531,-44.9444205879,60.0033760071,0.0008392381,97.1334609985,108.9185180664,11.7850570679 +"2011-11-29 20:18:32.800",134163.796875,-164.7465670073,134.779083252,-165.10231058,0.1332431585,-179.1212055496,202.125579834,74.7059180471,202.0847930908,-44.9013220942,60.0033950806,0.0005594781,97.1436462402,108.9228591919,11.7792129517 +"2011-11-29 20:18:32.833",134164.875,-164.7052580232,134.8428497314,-165.0791562387,0.1221353561,177.3503287431,202.231262207,74.7275151052,202.1832580566,-44.875319564,60.0033988953,-0.0004068995,97.1440887451,108.9092102051,11.76512146 +"2011-11-29 20:18:32.866",134167.59375,-164.66542436,134.8453521729,-165.0392952547,0.1134274676,167.85431674,202.3348083496,74.7950656761,202.1020965576,-44.8588007515,60.0033798218,-0.0004577637,97.1335601807,108.9015960693,11.7680358887 +"2011-11-29 20:18:32.900",134165.515625,-164.6248940174,134.848236084,-164.9791486089,0.18787314,161.5034565856,202.2967376709,74.8628211527,202.0932006836,-44.7915233882,60.0033988953,0.0009918306,97.1435470581,108.9047164917,11.7611694336 +"2011-11-29 20:18:32.933",134164.390625,-164.5835986937,134.7936248779,-164.9522103428,0.1112930328,159.7579744224,202.19871521,74.866659719,202.0935821533,-44.7527484043,60.0034217834,0.0001017144,97.1414260864,108.904838562,11.7634124756 +"2011-11-29 20:18:32.966",134166.546875,-164.5428361247,134.7298736572,-164.9396837759,0.0496879742,128.0910590905,202.1852874756,74.8938575323,201.9867706299,-44.7600840275,60.0033988953,-0.0005849171,97.1248931885,108.9066390991,11.7817459106 +"2011-11-29 20:18:33.000",134165.5625,-164.5025380086,134.7444763184,-164.9036340374,0.1254227459,157.9576048591,202.2581939697,74.972090519,201.8763885498,-44.7576217443,60.0033760071,-0.0004831888,97.1321182251,108.9223937988,11.7902755737 +"2011-11-29 20:18:33.033",134164.546875,-164.461570534,134.7482452393,-164.8470254296,0.2068149447,-174.4236609856,202.2681274414,75.0059272762,201.7740936279,-44.6898252866,60.0033988953,0.000813785,97.1567687988,108.9197921753,11.7630233765 +"2011-11-29 20:18:33.066",134165.59375,-164.4199063801,134.7265930176,-164.7819610476,0.2179476768,-152.4457241612,202.2308197021,75.0381725992,201.7378845215,-44.6148707906,60.0034179688,0.000279732,97.1306915283,108.9063262939,11.7756347656 +"2011-11-29 20:18:33.100",134165.4375,-164.3791028299,134.8150482178,-164.726049119,0.2098569125,-129.2039291327,202.320602417,75.0913046408,201.9554138184,-44.5776257691,60.00340271,-0.0006103422,97.1446685791,108.9146575928,11.7699890137 +"2011-11-29 20:18:33.133",134165.78125,-164.3387773931,134.8708343506,-164.6809562101,0.1772757769,-105.271847866,202.3301086426,75.1451948333,202.1936187744,-44.5502367105,60.0033950806,-0.0001017004,97.1299591064,108.935508728,11.8055496216 +"2011-11-29 20:18:33.166",134165.96875,-164.2978782203,134.768737793,-164.6612169634,0.0632076338,156.8134252297,202.0765228271,75.2040642338,202.1814575195,-44.5153959155,60.0034065247,0.0003306242,97.1312255859,108.9094924927,11.7782669067 +"2011-11-29 20:18:33.200",134165.515625,-164.2575801042,134.6920013428,-164.6235553003,0.1796914637,136.9721491626,202.0647888184,75.2294110658,201.9188079834,-44.4329555323,60.0033950806,-0.0006866455,97.1443634033,108.9141921997,11.7698287964 +"2011-11-29 20:18:33.233",134165.6875,-164.2170770825,134.6973419189,-164.5946089586,0.1668328643,125.4736076571,202.1951293945,75.2385088778,201.8418731689,-44.382938057,60.0033798218,-0.0001271535,97.1415557861,108.9251861572,11.7836303711 +"2011-11-29 20:18:33.266",134166.921875,-164.1760276455,134.6754455566,-164.540677785,0.1221094579,78.20181377,202.2401428223,75.3161612985,201.8436737061,-44.3664192445,60.0033874512,0.0003306102,97.1339797974,108.9153747559,11.7813949585 +"2011-11-29 20:18:33.300",134167.625,-164.1348279445,134.6802520752,-164.4882492529,0.0849476531,50.457715135,202.2150878906,75.3557149239,201.8969421387,-44.3181366372,60.00340271,0.0005086139,97.1366043091,108.9223480225,11.7857437134 +"2011-11-29 20:18:33.333",134167.75,-164.0942839416,134.7559509277,-164.467745025,0.0371315889,159.7477974406,202.1168518066,75.3320005071,202.1234283447,-44.2613265388,60.0033950806,-0.0004577497,97.1345214844,108.9227600098,11.7882385254 +"2011-11-29 20:18:33.366",134166.71875,-164.0536579764,134.7503662109,-164.417269927,0.1461791247,-114.7582976042,202.1208648682,75.3526345086,202.0384674072,-44.218658347,60.0033988953,0.0003814744,97.1280212402,108.8964691162,11.768447876 +"2011-11-29 20:18:33.400",134166.28125,-164.0123080111,134.6984100342,-164.3649233572,0.1945338994,-112.1854336457,202.0830535889,75.429699533,201.8949432373,-44.2029557421,60.0034179688,0.0003814744,97.1241455078,108.9081573486,11.7840118408 +"2011-11-29 20:18:33.433",134166.125,-163.9714908007,134.7460784912,-164.3746358862,0.1197025478,145.6389898608,202.1585540771,75.4726819135,202.0043792725,-44.1958181945,60.0034103394,-0.0006103702,97.1677017212,108.9043731689,11.7366714478 +"2011-11-29 20:18:33.466",134166.703125,-163.9322172129,134.7147827148,-164.36719098,0.2006149143,98.0487315734,202.2359466553,75.4747992721,201.9370574951,-44.1525011347,60.0033874512,-0.0006866455,97.1320037842,108.9074859619,11.7754821777 +"2011-11-29 20:18:33.500",134168.1875,-163.8925884554,134.7143096924,-164.2923321067,0.1159531549,59.5055574454,202.2961425781,75.5207459547,201.9328918457,-44.0822560542,60.0033607483,-0.0003560493,97.1480941772,108.9059677124,11.7578735352 +"2011-11-29 20:18:33.533",134168.71875,-163.8518805279,134.7562561035,-164.2088945158,0.0198720824,-20.7373763957,202.2211151123,75.5880301482,202.0661315918,-44.008988615,60.003364563,"5.08502125740051E-05",97.1362609863,108.9020767212,11.7658157349 +"2011-11-29 20:18:33.566",134168.28125,-163.8105032419,134.7349700928,-164.1760139852,0.0175287537,-99.670027237,202.1244506836,75.6122568292,202.0756225586,-43.968693914,60.003364563,0,97.1233062744,108.9155731201,11.7922668457 +"2011-11-29 20:18:33.600",134167.890625,-163.7683882955,134.6799163818,-164.1552911912,0.0296518002,9.7003465036,202.1844329834,75.6424530955,201.8873138428,-43.9536265167,60.0033836365,0.0009918306,97.1448974609,108.9142990112,11.7694015503 +"2011-11-29 20:18:33.633",134168.046875,-163.7268880661,134.695892334,-164.096141753,0.0686378479,-5.9337870325,202.3030548096,75.7055025717,201.8506469727,-43.904568683,60.0034332275,0.0009918166,97.1298522949,108.9119873047,11.7821350098 +"2011-11-29 20:18:33.666",134167.921875,-163.686699233,134.7987823486,-164.0667309584,0.0397295207,147.5365393556,202.3248138428,75.7455274803,202.04737854,-43.8702845484,60.0034332275,"-2.79396772384644E-08",97.1468353271,108.9206390381,11.7738037109 +"2011-11-29 20:18:33.700",134166.34375,-163.6464967396,134.8126678467,-164.0374021262,0.1011244953,167.2430694508,202.296585083,75.7961186914,202.0546112061,-43.8569349437,60.0034255981,-0.0003560213,97.1341705322,108.9205169678,11.7863464355 +"2011-11-29 20:18:33.733",134165.203125,-163.60535168,134.759185791,-164.0189059739,0.1059787869,143.8537013551,202.2293243408,75.8239926934,201.9848632813,-43.8378650555,60.0034179688,"-2.54390761256218E-05",97.1371078491,108.9146957397,11.7775878906 +"2011-11-29 20:18:33.766",134166.28125,-163.5638514506,134.7437286377,-163.9863942734,0.1550430655,132.2346753127,202.1365356445,75.8602678281,202.0279998779,-43.7935302976,60.0034103394,-0.0004323386,97.1037826538,108.9302597046,11.8264770508 +"2011-11-29 20:18:33.800",134165.875,-163.5242363534,134.706817627,-163.8983394747,0.0685942397,130.2544395478,202.0716705322,75.957966854,202.0221710205,-43.736856803,60.0033760071,-0.0009409525,97.1495361328,108.8960113525,11.7464752197 +"2011-11-29 20:18:33.833",134163.03125,-163.4843890298,134.6802520752,-163.8248876203,0.0733544976,-14.0976965696,202.1639099121,76.0041389328,201.9418792725,-43.6641972506,60.0033760071,0.0005086418,97.1454467773,108.9214782715,11.7760314941 +"2011-11-29 20:18:33.866",134162.265625,-163.4423560457,134.7329711914,-163.8283983375,0.1022025347,-85.076884113,202.2783966064,75.9629528921,201.9029083252,-43.6478013815,60.0034141541,0.0010681199,97.1411514282,108.9394226074,11.7982711792 +"2011-11-29 20:18:33.900",134165.796875,-163.4006372502,134.7387695313,-163.8175519971,0.0756518617,-117.9051706605,202.3426513672,75.9898091959,201.8231048584,-43.6398237205,60.0034255981,-0.0001780177,97.1406784058,108.9139404297,11.7732620239 +"2011-11-29 20:18:33.933",134167.4375,-163.36091287,134.7136535645,-163.736668897,0.0210026484,35.4538249248,202.2837219238,76.0859441085,201.8790588379,-43.5569530353,60.0033760071,-0.0015767198,97.1509094238,108.9135894775,11.7626800537 +"2011-11-29 20:18:33.966",134165.578125,-163.3213797351,134.7252807617,-163.6539553061,0.0488383248,104.8914882915,202.1305389404,76.1811910965,202.0484161377,-43.4751751804,60.0033721924,0.0004831888,97.1500091553,108.8981933594,11.7481842041 +"2011-11-29 20:18:34.000",134165.78125,-163.2803439585,134.7636566162,-163.6283557571,0.0358877219,161.9342639373,202.106842041,76.2128626836,202.1560974121,-43.4638336513,60.00340271,0.0006357953,97.118927002,108.9102859497,11.7913589478 +"2011-11-29 20:18:34.033",134168.546875,-163.2396770122,134.7949676514,-163.5788095649,0.1125329658,-56.6989575834,202.2606964111,76.2285789489,202.1588134766,-43.4166028932,60.0033798218,-0.0008392381,97.1329650879,108.9181671143,11.7852020264 +"2011-11-29 20:18:34.066",134169.625,-163.1996384433,134.7140960693,-163.5316129577,0.0828156695,-68.4467053709,202.199005127,76.2866287267,201.9524230957,-43.3730228712,60.0033493042,-0.0007120846,97.1289749146,108.9157180786,11.7867431641 +"2011-11-29 20:18:34.100",134166.75,-163.1589031951,134.6399841309,-163.5370361279,0.1269385666,127.3450794897,202.1083526611,76.3335589565,201.7676696777,-43.3737195505,60.0033683777,0.0009409525,97.1435852051,108.9228591919,11.7792739868 +"2011-11-29 20:18:34.133",134164.625,-163.1177854563,134.6613616943,-163.5189907681,0.1049878374,134.7563948147,202.0841674805,76.3343171075,201.8517456055,-43.3458831145,60.0033988953,0.0007120846,97.1426239014,108.8929595947,11.7503356934 +"2011-11-29 20:18:34.166",134165.984375,-163.076831642,134.735458374,-163.460961481,0.0939195231,179.3661088125,202.0900421143,76.3639464681,202.0286102295,-43.2779432228,60.0033988953,-0.0001017423,97.1277618408,108.9252624512,11.7975006104 +"2011-11-29 20:18:34.200",134167.328125,-163.0363149599,134.7007751465,-163.4276301578,0.1151335984,121.3637052486,202.1410980225,76.3960483572,201.9341430664,-43.2195348602,60.0033950806,0.0001017144,97.1350631714,108.917388916,11.7823257446 +"2011-11-29 20:18:34.233",134166.296875,-162.9957572966,134.651184082,-163.4046397411,0.1276842207,105.8167671881,202.0353851318,76.4363669639,201.921875,-43.2093339726,60.0033988953,0.0002034428,97.1574020386,108.9166564941,11.7592544556 +"2011-11-29 20:18:34.266",134166.96875,-162.9546668785,134.6968383789,-163.3698877386,0.1406074017,143.6472657177,202.1134033203,76.4844378352,201.8940887451,-43.1921799525,60.0034065247,"7.62892886996269E-05",97.1268997192,108.9137115479,11.7868118286 +"2011-11-29 20:18:34.300",134169.859375,-162.9130983473,134.7418670654,-163.317909999,0.059841767,142.0797782843,202.3025360107,76.5256511967,201.8900604248,-43.1472919493,60.0034065247,0.0001017423,97.1410293579,108.9201049805,11.7790756226 +"2011-11-29 20:18:34.333",134170.625,-162.8717074009,134.7531433105,-163.2855349023,0.1122234166,48.66631361,202.2786102295,76.5258492722,202.078414917,-43.0798745671,60.0034179688,0.0002288818,97.1272659302,108.9225311279,11.7952651978 +"2011-11-29 20:18:34.366",134168.09375,-162.8313956244,134.7572937012,-163.2314124833,0.0817365199,138.451431533,202.1609039307,76.5656214637,202.0708465576,-43.0086356941,60.0034179688,0,97.1313858032,108.9206542969,11.7892684937 +"2011-11-29 20:18:34.400",134165,-162.7910565272,134.7566833496,-163.1506386662,0.2066543102,-169.2542186519,202.1748046875,76.670410226,201.8918304443,-42.9651820306,60.0034141541,-0.0001525786,97.1354827881,108.9314956665,11.7960128784 +"2011-11-29 20:18:34.433",134164.375,-162.7509906375,134.7145233154,-163.0937978319,0.1403826326,-152.0971659475,202.1581115723,76.7436981558,201.8491668701,-42.9386262551,60.0033912659,-0.0008392381,97.1459197998,108.9166564941,11.7707366943 +"2011-11-29 20:18:34.466",134166.875,-162.7104739553,134.6585235596,-163.0870769258,0.0856863111,-112.8696341855,202.0853729248,76.7256254752,201.8373718262,-42.9182415555,60.0033683777,-0.0003560493,97.1516571045,108.8980255127,11.7463684082 +"2011-11-29 20:18:34.500",134168.59375,-162.6695611222,134.7442932129,-163.0662585092,0.1240338758,-147.4618580672,202.2496185303,76.7407133631,201.8659515381,-42.8823318359,60.0033683777,0,97.1452789307,108.9018707275,11.7565917969 +"2011-11-29 20:18:34.533",134167.25,-162.6294269306,134.8587493896,-162.9751437857,0.2169630229,-148.9071124352,202.3663330078,76.8537256731,202.0011138916,-42.8186369068,60.003364563,"-2.79396772384644E-08",97.1451339722,108.9208831787,11.7757492065 +"2011-11-29 20:18:34.566",134164.671875,-162.5891014938,134.8060150146,-162.9142731398,0.2065442204,-161.1047238022,202.2419128418,76.9128819415,201.9715118408,-42.743036958,60.003364563,0.0001525646,97.1249084473,108.8979949951,11.7730865479 +"2011-11-29 20:18:34.600",134164.6875,-162.5476422455,134.7059020996,-162.9231114046,0.1493121237,160.0243654604,202.1651916504,76.8880883548,201.8358459473,-42.7084318046,60.0033874512,0.0009155553,97.1518783569,108.9437332153,11.7918548584 +"2011-11-29 20:18:34.633",134167.78125,-162.5067567332,134.6365966797,-162.9167593286,0.1368422806,103.3235364052,202.0907592773,76.9116661678,201.8302459717,-42.7061846723,60.0033988953,-0.0002034428,97.1480712891,108.9123153687,11.7642440796 +"2011-11-29 20:18:34.666",134167.890625,-162.4670186926,134.5773773193,-162.8680737402,0.1241775826,59.4443521203,202.0487670898,76.9809106256,201.7768096924,-42.6931048601,60.0033721924,-0.0007120846,97.1428451538,108.9137496948,11.770904541 +"2011-11-29 20:18:34.700",134165.578125,-162.4264337085,134.5954437256,-162.7951136595,0.0131280441,-111.2218032369,202.1301727295,77.0286126668,201.649887085,-42.6213366474,60.0033836365,0.0008646771,97.153717041,108.91822052,11.764503479 +"2011-11-29 20:18:34.733",134164.25,-162.3849061584,134.7041931152,-162.7663449027,0.1801652163,-165.2506213077,202.1792755127,77.0520197251,201.755355835,-42.5820801351,60.0034141541,0.0006357953,97.1386566162,108.9195861816,11.7809295654 +"2011-11-29 20:18:34.766",134166.265625,-162.3441572498,134.7378845215,-162.7454035428,0.188690424,174.3628859624,202.1072540283,77.0845177651,201.9345703125,-42.5543290765,60.0033950806,-0.0007120986,97.1361694336,108.8906707764,11.7545013428 +"2011-11-29 20:18:34.800",134168.890625,-162.3033400393,134.6867980957,-162.7251725224,0.1166008264,129.5163010042,202.138168335,77.1081433895,201.8802185059,-42.527626452,60.0033912659,0.0003814884,97.1255493164,108.928604126,11.8030548096 +"2011-11-29 20:18:34.833",134168.515625,-162.2625091684,134.6901855469,-162.682552142,0.0441596881,78.7631801876,202.2227783203,77.1197068997,201.8714447021,-42.4734562216,60.0034065247,0,97.1284561157,108.9210357666,11.7925796509 +"2011-11-29 20:18:34.866",134166.578125,-162.2226481844,134.7968597412,-162.598062702,0.0608316101,-171.5508424396,202.3348236084,77.1855772441,201.9985961914,-42.3786258752,60.0033988953,-0.0003560213,97.1309814453,108.9172515869,11.7862701416 +"2011-11-29 20:18:34.900",134167.234375,-162.1829374646,134.8657684326,-162.5360582447,0.1744561493,-156.1394494832,202.4206390381,77.2692743822,202.0055847168,-42.3465000804,60.0033683777,-0.0009155273,97.1455383301,108.9031066895,11.7575683594 +"2011-11-29 20:18:34.933",134165.6875,-162.1421065937,134.7811584473,-162.5179719038,0.1408860087,-158.9023293044,202.3192749023,77.2828527983,201.8860015869,-42.3208937012,60.0033683777,0.0003306242,97.1264343262,108.9094009399,11.7829666138 +"2011-11-29 20:18:34.966",134163.375,-162.1006746662,134.716293335,-162.4898725055,0.0829108506,-164.80588037,202.2449035645,77.3255483108,201.8232574463,-42.3039445868,60.0033798218,0.0001271535,97.1589355469,108.8974761963,11.7385406494 +"2011-11-29 20:18:35.000",134163.890625,-162.0592700595,134.7002563477,-162.4524703896,0.0555278771,131.888753552,202.1312103271,77.3966300895,201.9481964111,-42.2870774347,60.0033950806,0.0007120706,97.1248550415,108.9192504883,11.7943954468 +"2011-11-29 20:18:35.033",134164.921875,-162.0180157169,134.7080993652,-162.4157103115,0.0682803169,34.1839971355,202.1895446777,77.3787554844,202.0028381348,-42.2044321457,60.0034294128,0.0010172417,97.1434020996,108.9266662598,11.7832641602 +"2011-11-29 20:18:35.066",134164.765625,-161.9772668083,134.6999359131,-162.3754668369,0.049672313,-85.4425861015,202.2559814453,77.3712900876,201.8363647461,-42.1354096691,60.0034332275,0,97.1431655884,108.9106750488,11.7675094604 +"2011-11-29 20:18:35.100",134166.625,-161.9369823526,134.680267334,-162.3332289471,0.1187935993,-144.7068329636,202.1940002441,77.4402818284,201.736618042,-42.1164319884,60.0034255981,-0.0004068995,97.139755249,108.9192276001,11.7794723511 +"2011-11-29 20:18:35.133",134166.65625,-161.8972716328,134.760925293,-162.2900211704,0.1141022891,-136.8065034148,202.2197265625,77.523562325,201.9620361328,-42.1172857621,60.0033950806,-0.0010426668,97.1424789429,108.9260559082,11.7835769653 +"2011-11-29 20:18:35.166",134164.828125,-161.8569735167,134.8073425293,-162.2378931667,0.1400380731,-146.7045540128,202.2675018311,77.5985373115,202.0211791992,-42.0847638164,60.0033721924,-0.0003814744,97.1439819336,108.9145965576,11.770614624 +"2011-11-29 20:18:35.200",134164.5,-161.8154869476,134.7281036377,-162.1781699926,0.1549102217,-174.4885477828,202.1491241455,77.6698239959,201.8853607178,-42.0165643775,60.0033721924,0,97.1500778198,108.9203109741,11.7702331543 +"2011-11-29 20:18:35.233",134164.890625,-161.7740686805,134.6944274902,-162.1402078012,0.0769574717,-169.9065426988,202.0553436279,77.7084418854,201.9530944824,-41.9858319413,60.0033874512,0.0005594781,97.1551437378,108.9285736084,11.7734298706 +"2011-11-29 20:18:35.266",134165.484375,-161.7331695078,134.7548980713,-162.0916997977,0.15074417,-136.4375912374,202.1979980469,77.7297520757,201.9325714111,-41.9314328997,60.00340271,0.0006357813,97.1417617798,108.9062576294,11.7644958496 +"2011-11-29 20:18:35.300",134163.375,-161.6924205992,134.7930297852,-162.0462517189,0.1985771805,-170.4440512657,202.321105957,77.7757055884,201.863571167,-41.8595622341,60.0034179688,"-2.79396772384644E-08",97.1268920898,108.8959197998,11.76902771 +"2011-11-29 20:18:35.333",134161.4375,-161.6522727472,134.8242340088,-162.0082622068,0.1733834893,153.9689656291,202.3746643066,77.8403874798,201.9750976563,-41.8224367409,60.0034179688,"-7.62892886996269E-05",97.1466827393,108.9195556641,11.7728729248 +"2011-11-29 20:18:35.366",134163.828125,-161.6120019519,134.7969970703,-161.9698765436,0.034623675,112.9225066798,202.2707366943,77.8689718215,202.1190032959,-41.7988247769,60.0033874512,-0.0007120706,97.1599884033,108.9064483643,11.7464599609 +"2011-11-29 20:18:35.400",134165.078125,-161.5710481376,134.7587280273,-161.9503831837,0.0381100737,-126.9583541789,202.1031494141,77.8837455207,202.1435089111,-41.7907002669,60.0033874512,0,97.1467895508,108.919883728,11.7730941772 +"2011-11-29 20:18:35.433",134164.03125,-161.5299577196,134.7606048584,-161.9021347274,0.0290505309,-114.0169010603,202.2265777588,77.9076102016,202.0379638672,-41.7177640919,60.0033874512,"5.08502125740051E-05",97.1264801025,108.9103546143,11.7838745117 +"2011-11-29 20:18:35.466",134162.578125,-161.4898918299,134.784286499,-161.8386276285,0.0898261145,167.5172469045,202.3139343262,77.9707416401,201.9640350342,-41.6346850859,60.0033721924,-0.0004068855,97.1421051025,108.9187011719,11.7765960693 +"2011-11-29 20:18:35.500",134163.59375,-161.4499898648,134.7738342285,-161.7737544918,0.2114211768,-170.1364468663,202.1834869385,78.0877154599,201.9300537109,-41.6263181042,60.0033721924,0.0001017144,97.133026123,108.9271850586,11.7941589355 +"2011-11-29 20:18:35.533",134165.703125,-161.4088448052,134.675567627,-161.7371993194,0.0617153235,-148.1613650609,202.1043395996,78.113390141,201.8637084961,-41.5917197809,60.0033950806,0.000534039,97.1485137939,108.9014892578,11.7529754639 +"2011-11-29 20:18:35.566",134165.84375,-161.3681232174,134.6022491455,-161.7528404526,0.1211414114,41.6951493355,202.0643310547,78.0698818359,201.855682373,-41.5616976844,60.0033874512,-0.0003814884,97.1620254517,108.9142684937,11.752243042 +"2011-11-29 20:18:35.600",134164.296875,-161.3269098559,134.6011505127,-161.7330055832,0.1315233558,57.1132392924,201.9939727783,78.0990467437,201.9139251709,-41.5415622868,60.0033874512,0.0001271674,97.1473693848,108.908493042,11.7611236572 +"2011-11-29 20:18:35.633",134165.578125,-161.2851637397,134.6655883789,-161.6682553899,0.0381600745,50.9399367356,202.0675506592,78.1500204455,201.9634552002,-41.4805960182,60.0034179688,0.001093545,97.1376113892,108.9119644165,11.7743530273 +"2011-11-29 20:18:35.666",134167.75,-161.2444967934,134.7576293945,-161.6131221029,0.1193244159,-173.9403704603,202.2328796387,78.2123664122,201.9254150391,-41.4311078826,60.0034255981,0,97.1409683228,108.9120025635,11.7710342407 +"2011-11-29 20:18:35.700",134166.84375,-161.2042396584,134.8315582275,-161.5887383276,0.3148454726,-174.5512079382,202.313079834,78.2375219989,201.8769073486,-41.3945697856,60.0034103394,-0.0006103562,97.1569290161,108.9149398804,11.7580108643 +"2011-11-29 20:18:35.733",134167.125,-161.1632995045,134.8184509277,-161.5512679098,0.2707233131,-154.2418453468,202.290222168,78.2436759994,201.8990783691,-41.3555728206,60.0034141541,0.0003051711,97.1367492676,108.9127578735,11.776008606 +"2011-11-29 20:18:35.766",134168.25,-161.1223866714,134.7516326904,-161.4886350751,0.1379662901,-117.1735617777,202.3079071045,78.3088906456,201.8504638672,-41.3130685534,60.0034065247,-0.0005849311,97.1483078003,108.9274902344,11.7791824341 +"2011-11-29 20:18:35.800",134168.21875,-161.0818290081,134.6771087646,-161.4416023925,0.1267182976,104.2117888464,202.2276153564,78.414082389,201.8149871826,-41.2611249647,60.0033912659,-0.0005086279,97.1538619995,108.9148101807,11.7609481812 +"2011-11-29 20:18:35.833",134165.703125,-161.0412986656,134.6946868896,-161.3781635955,0.1721171439,105.8723854185,202.21434021,78.4656366568,201.8800201416,-41.1728755056,60.0033874512,0.0003560493,97.1357269287,108.9101715088,11.7744445801 +"2011-11-29 20:18:35.866",134163.296875,-160.9997028135,134.7263793945,-161.3349148376,0.1033174619,-156.1084404244,202.1803894043,78.4508971086,201.8986816406,-41.1230936718,60.0034065247,0.0004577637,97.1303024292,108.9126281738,11.7823257446 +"2011-11-29 20:18:35.900",134163.734375,-160.9585167729,134.7148895264,-161.3152165721,0.1289021969,-130.6590462939,202.1926727295,78.4818242052,201.8434295654,-41.1305419931,60.0034103394,-0.0001525925,97.1403503418,108.9052734375,11.7649230957 +"2011-11-29 20:18:35.933",134166.421875,-160.9186557889,134.6376800537,-161.2716672859,0.0537871681,-52.6509161982,202.1445007324,78.5819342878,201.7869262695,-41.139458805,60.0033950806,-0.0004068995,97.1370315552,108.9084854126,11.7714538574 +"2011-11-29 20:18:35.966",134167.46875,-160.8791772955,134.6202087402,-161.2129413194,0.1639854312,-18.3951269444,202.1566925049,78.6424019526,201.8356933594,-41.0961690661,60.0033760071,-0.0006103562,97.131187439,108.9050979614,11.7739105225 +"2011-11-29 20:18:36.000",134165.828125,-160.8386879341,134.691696167,-161.1561687871,0.1217822731,-47.5995370994,202.1675415039,78.6706925961,201.9577789307,-41.0145175696,60.0033760071,"-1.39698386192322E-08",97.1399612427,108.9181137085,11.7781524658 +"2011-11-29 20:18:36.033",134165,-160.7976248368,134.7517700195,-161.121362143,0.0968797579,-111.7964065612,202.1486206055,78.6921052391,202.0454864502,-40.9555662069,60.0033683777,"-2.54390761256218E-05",97.1442489624,108.9193115234,11.775062561 +"2011-11-29 20:18:36.066",134165.546875,-160.7570398527,134.7429656982,-161.0764331587,0.1024669558,-94.6050663071,202.1840209961,78.7500320735,202.0055847168,-40.9293656013,60.0033607483,-0.0002288818,97.1338348389,108.9166870117,11.7828521729 +"2011-11-29 20:18:36.100",134165.953125,-160.7161816611,134.7108764648,-161.0253570041,0.0646226332,-26.4052193407,202.2999572754,78.8328959285,201.879196167,-40.8963587121,60.0033874512,0.0010426808,97.1233062744,108.91381073,11.7905044556 +"2011-11-29 20:18:36.133",134165.375,-160.6753371299,134.6978607178,-160.9955363982,0.1483157873,17.9617104604,202.2986297607,78.8383600798,201.9449157715,-40.8299078017,60.0033988953,0.0001780037,97.1352081299,108.9080352783,11.7728271484 +"2011-11-29 20:18:36.166",134163.046875,-160.6346292024,134.7162475586,-160.9918754168,0.143864572,3.3657900107,202.2518615723,78.8089083041,202.0377197266,-40.803454479,60.0033988953,"2.54251062870026E-05",97.139175415,108.9122772217,11.7731018066 +"2011-11-29 20:18:36.200",134162.75,-160.5938256523,134.7219390869,-160.9461131493,0.1135220826,-57.6719521816,202.2559967041,78.8311747208,201.9385528564,-40.7543966453,60.0033950806,"-7.62753188610077E-05",97.1296768188,108.9065322876,11.7768554688 +"2011-11-29 20:18:36.233",134164.390625,-160.5528308569,134.775390625,-160.8925508058,0.1018223539,-120.5725097955,202.3141174316,78.8847165737,201.9372253418,-40.6880857537,60.00340271,0.0001271395,97.1419296265,108.9102249146,11.7682952881 +"2011-11-29 20:18:36.266",134163.828125,-160.5117950804,134.8208770752,-160.8726476346,0.1153751165,171.502512021,202.4161529541,78.9515089936,201.9463195801,-40.6812214136,60.0034065247,"2.54251062870026E-05",97.1449127197,108.9004974365,11.7555847168 +"2011-11-29 20:18:36.300",134163.75,-160.4714013416,134.7667694092,-160.8499987273,0.160578236,174.0318266933,202.3248291016,78.9968272988,201.8316802979,-40.6771062246,60.00340271,-0.0001017144,97.1455917358,108.9157104492,11.7701187134 +"2011-11-29 20:18:36.333",134165.921875,-160.4305704708,134.7205200195,-160.795971931,0.136921823,-129.1945854339,202.0892028809,78.9893892228,201.9583282471,-40.6015370117,60.0034065247,0.0001780316,97.1360473633,108.9165420532,11.7804946899 +"2011-11-29 20:18:36.366",134167,-160.3893980904,134.7395935059,-160.7307982659,0.1769560426,-99.1697500313,202.0307006836,79.0225497912,202.1069335938,-40.5283481196,60.0034141541,0.0002288958,97.135345459,108.9142150879,11.7788696289 +"2011-11-29 20:18:36.400",134167.28125,-160.3486765026,134.737411499,-160.6698046766,0.1233531609,-94.5592972094,202.1538391113,79.1081388917,202.0110778809,-40.4795703237,60.0034065247,-0.0005086279,97.1460800171,108.9146118164,11.7685317993 +"2011-11-29 20:18:36.433",134165.671875,-160.308719896,134.69090271,-160.6249439942,0.111702852,-27.7860240437,202.2061309814,79.1686407073,201.9449157715,-40.4414749436,60.0033874512,-0.0005340669,97.1368408203,108.9197311401,11.7828903198 +"2011-11-29 20:18:36.466",134163.59375,-160.2687769497,134.7082519531,-160.6041665587,0.0622628257,-4.8175966646,202.1891326904,79.2036932382,201.9946136475,-40.4190548476,60.0033760071,-0.0003051851,97.1535491943,108.919303894,11.7657546997 +"2011-11-29 20:18:36.500",134163.8125,-160.2281236638,134.748916626,-160.5705073865,0.1749843806,-120.9841516364,202.1865234375,79.2256113152,201.9275817871,-40.3979871291,60.0033721924,"-7.63032585382462E-05",97.1483840942,108.9196929932,11.7713088989 +"2011-11-29 20:18:36.533",134164.328125,-160.187115208,134.7115020752,-160.5528581777,0.1519946456,-125.5559797385,202.1789398193,79.2574741477,201.8329772949,-40.3876154869,60.0033721924,0,97.1347198486,108.9214630127,11.7867431641 +"2011-11-29 20:18:36.566",134165.328125,-160.146243356,134.7803955078,-160.5355231576,0.0509760492,174.1212885111,202.3546447754,79.3138505291,201.9419555664,-40.3783810711,60.0033760071,0.0003814604,97.1560897827,108.9243927002,11.7683029175 +"2011-11-29 20:18:36.600",134164.890625,-160.1050846361,134.8391571045,-160.4715516058,0.077448085,-107.0988005255,202.5014190674,79.3423255878,201.971786499,-40.3025728015,60.00340271,0.0008901022,97.1513671875,108.9199295044,11.7685623169 +"2011-11-29 20:18:36.633",134162.671875,-160.0642264444,134.7234954834,-160.3688938626,0.1580817103,-72.7647987755,202.2940216064,79.4358786888,201.8717041016,-40.2180731162,60.0034103394,0,97.1228790283,108.9297637939,11.8068847656 +"2011-11-29 20:18:36.666",134162.453125,-160.0237780642,134.6461029053,-160.2950458573,0.1944588274,-65.9260103973,202.1041717529,79.5124382792,201.850692749,-40.1573185835,60.0034103394,"-7.63032585382462E-05",97.1521148682,108.9225692749,11.7704544067 +"2011-11-29 20:18:36.700",134163.515625,-159.9834116462,134.6596221924,-160.2987614802,0.0875200406,-92.5495550273,202.1480712891,79.5082103921,201.7997283936,-40.1283995626,60.0033950806,-0.0004831888,97.150894165,108.9115753174,11.7606811523 +"2011-11-29 20:18:36.733",134164.984375,-159.9423485489,134.7589569092,-160.3438270683,0.109084934,-170.3765689967,202.1987457275,79.4805822769,201.9726715088,-40.1626324707,60.0033988953,0.0001780177,97.1416397095,108.9108276367,11.7691879272 +"2011-11-29 20:18:36.766",134165.78125,-159.9013264327,134.8256988525,-160.3106186886,0.0789236948,-163.2455646353,202.2766876221,79.5403259416,202.1229858398,-40.1602999611,60.0033950806,-0.0001780177,97.1430130005,108.92137146,11.7783584595 +"2011-11-29 20:18:36.800",134166.25,-159.8607687694,134.7864227295,-160.2267439656,0.1562705189,166.7734119831,202.2233886719,79.6346918352,202.0062255859,-40.0638815957,60.0033874512,-0.0002543209,97.1381149292,108.9214401245,11.7833251953 +"2011-11-29 20:18:36.833",134166.1875,-159.8200062005,134.7356262207,-160.169602603,0.1916223019,166.4542235828,202.1785888672,79.6717729322,201.8701171875,-39.9808025897,60.0033950806,0.0003051711,97.1340637207,108.9260253906,11.7919616699 +"2011-11-29 20:18:36.866",134163.796875,-159.7792846126,134.6631317139,-160.1155348255,0.0775945485,-150.750935662,202.1928405762,79.7121530106,201.7218017578,-39.946402342,60.0033988953,"5.08641824126244E-05",97.1267242432,108.904335022,11.7776107788 +"2011-11-29 20:18:36.900",134162.65625,-159.7390821192,134.6146697998,-160.0667809352,0.07820566,-35.6995034142,202.157043457,79.7413862202,201.7331542969,-39.8928741494,60.0033912659,-0.0003560353,97.1407394409,108.9131622314,11.7724227905 +"2011-11-29 20:18:36.933",134164.546875,-159.6987566823,134.7396240234,-160.0417141409,0.1143516004,-44.8481593168,202.2801818848,79.7381692011,201.9900054932,-39.8506123539,60.0033798218,-0.000279732,97.1408691406,108.9136047363,11.7727355957 +"2011-11-29 20:18:36.966",134166.53125,-159.6583356228,134.7952575684,-160.0249665171,0.0408340804,15.9196427005,202.4622192383,79.7953515448,201.9662322998,-39.8456570517,60.0033760071,"-7.63032585382462E-05",97.1412658691,108.9220352173,11.7807693481 +"2011-11-29 20:18:37.000",134166.5625,-159.6174364501,134.7595825195,-159.9965529301,0.1501219273,111.1084220966,202.4285430908,79.8810909095,201.8486175537,-39.8312112016,60.0033721924,0,97.1490249634,108.9234695435,11.7744445801 +"2011-11-29 20:18:37.033",134165.875,-159.5760318433,134.7493438721,-159.9480449267,0.1500513256,92.3830350153,202.3400421143,79.9461962727,201.9545288086,-39.8015067089,60.0033798218,0.0004323386,97.1170043945,108.914642334,11.7976379395 +"2011-11-29 20:18:37.066",134166.609375,-159.5351190102,134.7560272217,-159.8791146576,0.0710950792,-15.320281648,202.3115997314,79.9858182,202.0154266357,-39.7555258754,60.0033950806,0.0002288539,97.1400375366,108.9122619629,11.7722244263 +"2011-11-29 20:18:37.100",134168.40625,-159.4943701016,134.7656555176,-159.8171921625,0.1608465165,-94.5479317747,202.3856506348,79.9993283142,201.8456878662,-39.6746905866,60.0034065247,0.0004069135,97.139251709,108.9093856812,11.7701339722 +"2011-11-29 20:18:37.133",134167,-159.4533343251,134.6812896729,-159.7753231029,0.0893111452,-29.2806623869,202.3395843506,79.9981603519,201.7652130127,-39.5674429562,60.0034179688,0.0003560213,97.130821228,108.9186401367,11.7878189087 +"2011-11-29 20:18:37.166",134164.9375,-159.4128449637,134.6441040039,-159.7399563834,0.145976454,28.5758859023,202.1477813721,80.0676575267,201.9313659668,-39.541365294,60.0034103394,-0.0004323386,97.145690918,108.9188995361,11.7732086182 +"2011-11-29 20:18:37.200",134163.65625,-159.3722189985,134.6740570068,-159.6982922295,0.099530071,33.136037796,202.1912841797,80.1199631153,201.9300537109,-39.5100318012,60.0033988953,-0.0001779897,97.1558227539,108.902305603,11.7464828491 +"2011-11-29 20:18:37.233",134162.5,-159.3315247314,134.6808624268,-159.6868721532,0.0574505441,62.3430297625,202.2279205322,80.1012142461,201.8602600098,-39.4636548167,60.0033950806,-0.0001271674,97.1325302124,108.9098052979,11.7772750854 +"2011-11-29 20:18:37.266",134163.734375,-159.2911992946,134.6808166504,-159.6704660388,0.0623938516,108.7509549839,202.2336273193,80.1180916435,201.8135528564,-39.4408658905,60.0033836365,-0.0004831888,97.1390457153,108.9032287598,11.7641830444 +"2011-11-29 20:18:37.300",134166.828125,-159.2505186879,134.7102355957,-159.5885720706,0.0882130042,-76.3186554837,202.3133087158,80.2262886701,201.8089599609,-39.4278407198,60.0033798218,"-5.08781522512436E-05",97.1442565918,108.9036407471,11.7593841553 +"2011-11-29 20:18:37.333",134168.78125,-159.2094829113,134.7139434814,-159.515325122,0.2824039161,-60.5407067651,202.2900085449,80.3054983739,201.8972015381,-39.4149521528,60.0033874512,0.0004323246,97.1346817017,108.9103088379,11.7756271362 +"2011-11-29 20:18:37.366",134167.171875,-159.1681875876,134.7419433594,-159.4977442151,0.2006050795,-55.5479989913,202.3203735352,80.3033468644,201.955657959,-39.353685356,60.0033988953,0.00027976,97.1379470825,108.9130554199,11.7751083374 +"2011-11-29 20:18:37.400",134165.4375,-159.1278075092,134.7505950928,-159.5181938014,0.0473733544,102.7836509325,202.3843994141,80.2943515052,201.8760986328,-39.3169116175,60.0033950806,-0.0001525786,97.1396331787,108.9026565552,11.7630233765 +"2011-11-29 20:18:37.433",134164.671875,-159.0877006384,134.68309021,-159.4739341756,0.125001654,76.330724428,202.2720794678,80.3492184148,201.8496856689,-39.2673620101,60.0033950806,"-2.5453045964241E-05",97.1339492798,108.9065246582,11.7725753784 +"2011-11-29 20:18:37.466",134163.6875,-159.0472522582,134.692565918,-159.3879284336,0.1253381819,-5.8748173136,202.2184143066,80.4303132508,201.9733734131,-39.2217807427,60.0033874512,-0.0002034428,97.1513366699,108.9058532715,11.7545166016 +"2011-11-29 20:18:37.500",134163.421875,-159.0056564061,134.7101593018,-159.3577663182,0.1691512465,-53.059556171,202.2173461914,80.4616774795,201.9621582031,-39.2230238371,60.0033950806,"7.62892886996269E-05",97.1427307129,108.9157104492,11.7729797363 +"2011-11-29 20:18:37.533",134165.578125,-158.9640742144,134.6652069092,-159.3660445075,0.0715622306,-9.4208363797,202.1908416748,80.4571354037,201.868560791,-39.1990908543,60.0033912659,-0.0001525786,97.1382369995,108.9088287354,11.7705917358 +"2011-11-29 20:18:37.566",134166.15625,-158.9241312682,134.7009124756,-159.3275768821,0.0336652063,-32.8383610765,202.2059173584,80.4896744249,201.9187927246,-39.1522391717,60.0033836365,0,97.1344146729,108.9185333252,11.7841186523 +"2011-11-29 20:18:37.600",134162.5625,-158.8843249257,134.772277832,-159.2610508396,0.1639339775,-116.0894331715,202.3365325928,80.5723743554,201.862197876,-39.1259053773,60.0033760071,-0.0003560493,97.1372909546,108.9149017334,11.7776107788 +"2011-11-29 20:18:37.633",134160.796875,-158.8439448473,134.8306121826,-159.2266540069,0.2428865582,-127.2831979758,202.4151153564,80.6133623206,201.8719024658,-39.1026998096,60.0033760071,0,97.1545028687,108.9130630493,11.7585601807 +"2011-11-29 20:18:37.666",134162.234375,-158.8029363916,134.7405090332,-159.1824080415,0.1089276671,-134.9217127134,202.1821594238,80.6715008908,201.9412841797,-39.0488027869,60.0033721924,0,97.1435852051,108.9050140381,11.761428833 +"2011-11-29 20:18:37.700",134163.4375,-158.7621191811,134.650100708,-159.1131089421,0.0590605699,138.2746252562,202.0925750732,80.720288932,201.8324432373,-38.9314089105,60.0033683777,-0.0001271674,97.138381958,108.9109115601,11.7725296021 +"2011-11-29 20:18:37.733",134165.0625,-158.7212883102,134.628692627,-159.0514733151,0.0676034763,18.4066938697,202.1913299561,80.731442631,201.7651672363,-38.8347514885,60.0033874512,0.0008392381,97.1511383057,108.9236450195,11.7725067139 +"2011-11-29 20:18:37.766",134166.46875,-158.6803618167,134.6715545654,-159.0046591985,0.1007048339,-54.5512285046,202.2430419922,80.7881946728,201.799041748,-38.8247042802,60.00340271,0.0003051711,97.1423492432,108.8796157837,11.7372665405 +"2011-11-29 20:18:37.800",134166.859375,-158.639285059,134.72265625,-158.9824884045,0.0652759075,-150.5314133821,202.2202758789,80.869262188,201.8844146729,-38.8367151679,60.0034103394,0.0002034567,97.1500167847,108.9155883789,11.7655715942 +"2011-11-29 20:18:37.833",134166.046875,-158.5985771316,134.7367095947,-158.9654948938,0.0941890255,126.293175716,202.139541626,80.9269909469,202.0467224121,-38.8321423562,60.0034065247,-0.0002034567,97.1449050903,108.9113464355,11.7664413452 +"2011-11-29 20:18:37.866",134165.65625,-158.5585658834,134.6955566406,-158.8959089265,0.0290705077,-117.6435880757,202.1318969727,80.9903682722,201.9336853027,-38.7875104851,60.00340271,-0.0002288958,97.160774231,108.9281463623,11.7673721313 +"2011-11-29 20:18:37.900",134164.96875,-158.5177350126,134.7431030273,-158.82887745,0.182022512,-98.2686841552,202.3955383301,80.9798975922,201.7461395264,-38.6820011379,60.0033988953,"5.08502125740051E-05",97.1421508789,108.9013061523,11.7591552734 +"2011-11-29 20:18:37.933",134164.796875,-158.4766172738,134.7813415527,-158.7861341262,0.2146588415,-111.3263461123,202.4386291504,80.9822130263,201.7630004883,-38.5986147734,60.00340271,"7.63032585382462E-05",97.1408081055,108.9240570068,11.7832489014 +"2011-11-29 20:18:37.966",134165.203125,-158.4358820256,134.7178497314,-158.7483358593,0.1565297693,-123.1326696021,202.2177276611,81.0364515585,201.8111419678,-38.5585625441,60.0033950806,-0.0003306242,97.1360778809,108.9103469849,11.774269104 +"2011-11-29 20:18:38.000",134165.15625,-158.3952150792,134.7046508789,-158.7357819716,0.1204173937,-152.4012049882,202.074005127,81.0763945048,201.92237854,-38.551588921,60.0033912659,0,97.1379776001,108.9128570557,11.7748794556 +"2011-11-29 20:18:38.033",134165.34375,-158.3548623216,134.728515625,-158.7267661219,0.0827944055,-156.4432562975,202.0936279297,81.1311179804,202.0104217529,-38.5855076404,60.0033950806,0.0001017144,97.1472930908,108.9204559326,11.7731628418 +"2011-11-29 20:18:38.066",134165.96875,-158.3134713752,134.7312316895,-158.6765778919,0.0359580554,-120.4416843522,202.1300506592,81.2006902873,202.0362701416,-38.5600788461,60.0034065247,"2.54390761256218E-05",97.1394882202,108.9239044189,11.7844161987 +"2011-11-29 20:18:38.100",134165.671875,-158.2726541648,134.7095947266,-158.6169776612,0.0839281008,-122.7589489715,202.1022644043,81.2320681764,201.9597625732,-38.4798616894,60.0033988953,-0.0004323386,97.1448364258,108.9276885986,11.7828521729 +"2011-11-29 20:18:38.133",134166.546875,-158.2330663883,134.6962127686,-158.5820753945,0.1227663979,-149.6268914303,202.0832977295,81.2369585918,201.8860473633,-38.406334703,60.0033836365,-0.0005340669,97.1765594482,108.8934249878,11.7168655396 +"2011-11-29 20:18:38.166",134166.09375,-158.1926316685,134.743637085,-158.5575823362,0.093999818,-173.0224203567,202.1764221191,81.2556391592,201.9656982422,-38.3639328886,60.0033760071,0.000279746,97.1422805786,108.9241714478,11.7818908691 +"2011-11-29 20:18:38.200",134165.796875,-158.1516095523,134.7323303223,-158.5067793891,0.0411538556,33.8391477145,202.2415008545,81.300008068,201.9980621338,-38.3108145075,60.0033950806,0.0002543349,97.1380310059,108.9110412598,11.7730102539 +"2011-11-29 20:18:38.233",134165.328125,-158.1108743041,134.7108154297,-158.4602248198,0.0644780174,92.9500909806,202.2968597412,81.346043543,201.8587036133,-38.2487349181,60.0033836365,-0.0003560353,97.1349105835,108.9165725708,11.7816619873 +"2011-11-29 20:18:38.266",134164.375,-158.070070754,134.6897583008,-158.4359639878,0.1382803619,104.1747897117,202.3964538574,81.3940392823,201.6928710938,-38.2264104448,60.0033874512,0.0004323386,97.1369781494,108.9233779907,11.7863998413 +"2011-11-29 20:18:38.300",134165.5,-158.0297316567,134.7026672363,-158.3887263995,0.1475995779,82.8690732751,202.4562683105,81.4379505685,201.7250213623,-38.1779980639,60.0033950806,"1.39698386192322E-08",97.1448745728,108.9129638672,11.7680892944 +"2011-11-29 20:18:38.333",134167.578125,-157.9890647104,134.73046875,-158.3208206588,0.087883763,-8.6038048824,202.3672790527,81.4631812873,201.9027099609,-38.1168849463,60.0033950806,"7.63172283768654E-05",97.1420059204,108.9094085693,11.7674026489 +"2011-11-29 20:18:38.366",134166.015625,-157.9478650094,134.7516937256,-158.2729546931,0.1744945198,-67.4064607301,202.3070831299,81.4721493257,201.953918457,-38.0670928673,60.0033950806,0,97.1367416382,108.9206008911,11.7838592529 +"2011-11-29 20:18:38.400",134165.125,-157.9069658366,134.7576904297,-158.2378885019,0.2177632004,-96.7351495922,202.2839508057,81.5253291786,201.8880157471,-38.0549419608,60.0033988953,0.0001525925,97.1336135864,108.9054412842,11.7718276978 +"2011-11-29 20:18:38.433",134165.390625,-157.8660256827,134.7113037109,-158.205144575,0.1205437854,-103.9325092414,202.2230682373,81.6069840901,201.8423309326,-38.0446932619,60.00340271,"2.54251062870026E-05",97.1351013184,108.9156646729,11.7805633545 +"2011-11-29 20:18:38.466",134165.734375,-157.8254680194,134.6243438721,-158.1599970246,0.0149959587,40.7574360795,202.1462097168,81.6647948112,201.7429351807,-37.9830439745,60.0034065247,0,97.1420516968,108.9123001099,11.7702484131 +"2011-11-29 20:18:38.500",134166.125,-157.7849376769,134.6171722412,-158.1220211728,0.0637553558,69.9287744585,202.1313476563,81.7290737215,201.7643127441,-37.9593944445,60.00340271,-0.0002288539,97.1413421631,108.9034576416,11.7621154785 +"2011-11-29 20:18:38.533",134164.734375,-157.7443390325,134.7271881104,-158.1178137763,0.0565765575,100.9877209921,202.222076416,81.7378231938,201.9716644287,-37.9575093123,60.0033912659,-0.0002034567,97.1346130371,108.9010925293,11.7664794922 +"2011-11-29 20:18:38.566",134164.5625,-157.7033578974,134.7572021484,-158.0876106798,0.0471885093,21.0792546844,202.2964477539,81.7408899488,202.0242004395,-37.9160637244,60.0033950806,"2.54251062870026E-05",97.1221923828,108.8993301392,11.7771377563 +"2011-11-29 20:18:38.600",134166.390625,-157.6624314039,134.7246856689,-158.0210163354,0.0784630924,-90.352706643,202.2476501465,81.7857506312,201.8986816406,-37.8480350402,60.0033950806,0,97.1297149658,108.9073562622,11.7776412964 +"2011-11-29 20:18:38.633",134165.203125,-157.6221196275,134.7450561523,-157.9572906704,0.1652958095,-112.8724823743,202.1917266846,81.8580003723,201.9285125732,-37.8055444334,60.0033912659,0,97.1532592773,108.9095840454,11.7563247681 +"2011-11-29 20:18:38.666",134162.234375,-157.582204002,134.7016601563,-157.9374694614,0.0402029455,-108.1286564486,202.2358093262,81.9104767157,201.8446044922,-37.7938272439,60.0033836365,-0.0004323106,97.1455612183,108.9198532104,11.7742919922 +"2011-11-29 20:18:38.700",134161.875,-157.5413048292,134.5825042725,-157.9276886305,0.2119918466,33.4225574015,202.2510986328,81.9337335098,201.7055358887,-37.7768542238,60.0033912659,0.0002543069,97.1509246826,108.9172363281,11.7663116455 +"2011-11-29 20:18:38.733",134164.65625,-157.499954864,134.5727081299,-157.9142468183,0.1915941983,41.4770306595,202.1038360596,81.9480837372,201.7963867188,-37.7583102602,60.0033912659,"5.08781522512436E-05",97.1427154541,108.8990478516,11.7563323975 +"2011-11-29 20:18:38.766",134165.5,-157.4588098044,134.6298980713,-157.8750551928,0.0654268712,115.5541649067,202.0010681152,81.9685128331,201.8863677979,-37.6999838598,60.0033988953,0.0001780037,97.1430969238,108.9119567871,11.7688598633 +"2011-11-29 20:18:38.800",134164.59375,-157.4178969713,134.6527252197,-157.814116245,0.0863623098,108.5584665927,202.1622161865,82.0295132525,201.8032226563,-37.6329762889,60.0034141541,0.000559492,97.1383666992,108.9134750366,11.7751083374 +"2011-11-29 20:18:38.833",134165.921875,-157.3772436853,134.6612243652,-157.7449127684,0.1515554488,44.9151498122,202.3025054932,82.0915655211,201.8228912354,-37.5644353406,60.0034141541,0,97.1462783813,108.9157485962,11.7694702148 +"2011-11-29 20:18:38.866",134166.90625,-157.3366723617,134.6530303955,-157.6909406135,0.1743898243,13.4230582947,202.3125457764,82.1475525818,201.8203735352,-37.5367116028,60.0034103394,-0.0003814744,97.1407241821,108.9157714844,11.7750473022 +"2011-11-29 20:18:38.900",134165.375,-157.2967840569,134.674911499,-157.6383481569,0.1927174181,3.3674721582,202.4317779541,82.1814166597,201.7769622803,-37.475338938,60.0033912659,-0.0005086139,97.1249542236,108.8886947632,11.7637405396 +"2011-11-29 20:18:38.933",134166.125,-157.2574558277,134.7459869385,-157.5915340404,0.0571935177,27.1515336207,202.4242706299,82.2226641721,201.8728790283,-37.4038746687,60.003364563,-0.0009663776,97.1229019165,108.9139709473,11.7910690308 +"2011-11-29 20:18:38.966",134167.828125,-157.2159146171,134.7545928955,-157.5647596988,0.0960649326,-135.0578110628,202.3026123047,82.254868514,201.8742980957,-37.3944387624,60.003364563,0,97.1371536255,108.9122009277,11.7750473022 +"2011-11-29 20:18:39.000",134168.21875,-157.1732805763,134.7261657715,-157.5515637733,0.0560979135,-131.9567549154,202.2404632568,82.2638775335,201.8894500732,-37.3735383835,60.0033912659,0.001373291,97.1299591064,108.9255752563,11.7956161499 +"2011-11-29 20:18:39.033",134166.921875,-157.1326955923,134.674118042,-157.5040666378,0.0551699549,-29.2821855191,202.152633667,82.3139291598,201.9057769775,-37.3341179467,60.0033912659,-0.0004831888,97.1361541748,108.9166183472,11.7804641724 +"2011-11-29 20:18:39.066",134163.65625,-157.0926980045,134.6964111328,-157.435833048,0.0900994614,-116.394728967,202.1481781006,82.3764663718,201.8751068115,-37.2646788285,60.0033912659,0.0004069135,97.1332550049,108.911239624,11.7779846191 +"2011-11-29 20:18:39.100",134165.0625,-157.0517305299,134.7173309326,-157.3651132694,0.1511427164,-86.2146911759,202.2864837646,82.4174270163,201.8191070557,-37.1877333324,60.0034217834,0.0010426668,97.1368255615,108.9156494141,11.7788238525 +"2011-11-29 20:18:39.133",134167.578125,-157.0102712816,134.7283935547,-157.3729406662,0.0786082298,-25.4200909114,202.4187774658,82.4066284872,201.8217315674,-37.1684346329,60.0034179688,-0.0007629488,97.1357345581,108.9188766479,11.7831420898 +"2011-11-29 20:18:39.166",134165.046875,-156.9696999579,134.7352294922,-157.3929804412,0.1845038235,91.167404777,202.4317016602,82.4202069032,201.8442382813,-37.1568438019,60.0033912659,-0.0009409664,97.1391220093,108.9121246338,11.7730026245 +"2011-11-29 20:18:39.200",134165.421875,-156.9299619173,134.6986999512,-157.3280526629,0.171293065,123.1363442439,202.277053833,82.4871769081,201.7906646729,-37.0950135144,60.0033760071,-0.0001525925,97.1261520386,108.9112167358,11.7850646973 +"2011-11-29 20:18:39.233",134166.1875,-156.8893905937,134.6657409668,-157.2376346187,0.0727209374,-116.7709631073,202.0845947266,82.5439835914,201.8600769043,-37.0324148307,60.0033912659,0.0006612064,97.1496353149,108.9106903076,11.7610549927 +"2011-11-29 20:18:39.266",134166.140625,-156.8485187417,134.6753692627,-157.2030602011,0.0426415615,-134.678380394,202.0566253662,82.5890901607,201.932723999,-36.9996913944,60.0033874512,-0.000559506,97.1356277466,108.9033889771,11.7677612305 +"2011-11-29 20:18:39.300",134165.734375,-156.8082889275,134.7642364502,-157.1834985393,0.2124240398,142.1624918751,202.23387146,82.624559333,201.9577026367,-36.9387387862,60.0033683777,-0.000559492,97.1334991455,108.9246673584,11.7911682129 +"2011-11-29 20:18:39.333",134165.109375,-156.7673760943,134.7706298828,-157.136151668,0.1887208372,127.0139519187,202.279083252,82.6907985076,201.9891357422,-36.9109365012,60.0033721924,0.000559506,97.1550674438,108.903137207,11.7480697632 +"2011-11-29 20:18:39.366",134165.265625,-156.7261627329,134.7398071289,-157.100443439,0.1037463397,128.0675085982,202.2068023682,82.7639771544,201.9868621826,-36.9362867483,60.0033950806,0.0006612064,97.1517562866,108.9021148682,11.7503585815 +"2011-11-29 20:18:39.400",134165.34375,-156.6854274847,134.8003845215,-157.0600633607,0.0911201984,177.6355847636,202.2670135498,82.8036468931,202.0529937744,-36.9125791617,60.00340271,-0.0001017423,97.1500930786,108.9038696289,11.7537765503 +"2011-11-29 20:18:39.433",134163.765625,-156.6440501987,134.8237762451,-157.0155305273,0.1137414277,178.264604205,202.2506866455,82.8393141409,202.1187438965,-36.8568004218,60.0034103394,0.0004323386,97.1500701904,108.9154434204,11.76537323 +"2011-11-29 20:18:39.466",134164.921875,-156.6033832524,134.7436218262,-156.9849859213,0.1817761362,125.3056259847,202.2383117676,82.8590738782,201.9559326172,-36.7784410766,60.0034179688,0,97.1323242188,108.9196929932,11.7873687744 +"2011-11-29 20:18:39.500",134166.828125,-156.5638910986,134.6875915527,-156.9540998059,0.2754449844,98.6791921847,202.3603210449,82.8837376913,201.7733612061,-36.7156818834,60.00340271,-0.000813799,97.1359405518,108.9375610352,11.8016204834 +"2011-11-29 20:18:39.533",134167.171875,-156.5232924542,134.7150268555,-156.907094444,0.1875057966,94.6058312882,202.3509063721,82.939041733,201.8556060791,-36.7023356938,60.0033874512,-0.0001017144,97.1600112915,108.92578125,11.7657699585 +"2011-11-29 20:18:39.566",134166.65625,-156.4824752437,134.7206115723,-156.8527261382,0.0496733226,130.5454192668,202.1530151367,83.0002265676,201.9954071045,-36.692124561,60.0033912659,"-5.08502125740051E-05",97.1359329224,108.9227752686,11.7868423462 +"2011-11-29 20:18:39.600",134165.375,-156.4417536559,134.6899261475,-156.7805310387,0.0800142661,-157.2343151468,202.146774292,83.0648811382,201.8444824219,-36.6255370467,60.0033836365,-0.0001525925,97.1390075684,108.9223937988,11.7833862305 +"2011-11-29 20:18:39.633",134164.84375,-156.4008818039,134.6804656982,-156.7481422816,0.0436520539,-167.1708880117,202.2189941406,83.0811028375,201.7812805176,-36.5747614204,60.0033912659,0.0005849171,97.1320037842,108.9070129395,11.7750091553 +"2011-11-29 20:18:39.666",134165.578125,-156.3598460273,134.6875,-156.7390854508,0.0469127484,150.3639508041,202.1802215576,83.1013270277,201.855682373,-36.5685971747,60.00340271,0.0001780177,97.1462097168,108.9021759033,11.7559661865 +"2011-11-29 20:18:39.700",134165.5625,-156.3183184772,134.7135009766,-156.6800316352,0.0156053193,9.037426272,202.2780303955,83.1421305778,201.8795623779,-36.5029249059,60.0034103394,0.0002034567,97.1387939453,108.9216537476,11.7828598022 +"2011-11-29 20:18:39.733",134163.703125,-156.2778427762,134.7740783691,-156.6181228006,0.0978960171,-29.6287083364,202.3872833252,83.1847987695,201.9960327148,-36.4428021657,60.0034141541,"-1.39698386192322E-08",97.1492004395,108.9254455566,11.7762451172 +"2011-11-29 20:18:39.766",134164.09375,-156.2391839055,134.7691497803,-156.5744369107,0.0548111536,-85.9410806279,202.3369903564,83.2500475666,201.9540405273,-36.4132308617,60.0033988953,-0.0008392241,97.1608581543,108.9102630615,11.7494049072 +"2011-11-29 20:18:39.800",134166.171875,-156.1985579403,134.7658996582,-156.5336333606,0.1665652096,-121.7189980289,202.3106536865,83.2827095313,201.852142334,-36.3765459156,60.0033912659,0.0003306102,97.1482696533,108.927116394,11.7788467407 +"2011-11-29 20:18:39.833",134166.609375,-156.156483975,134.7778930664,-156.4981027165,0.1322962046,-120.7963760758,202.3412322998,83.338375573,201.8864898682,-36.3561270651,60.0034065247,0.0003814604,97.1375198364,108.914855957,11.7773361206 +"2011-11-29 20:18:39.866",134165.140625,-156.1140138587,134.7375030518,-156.4679952426,0.0602958016,149.0470630113,202.2129669189,83.3999224076,201.9656982422,-36.3218156098,60.0034217834,0.0004831888,97.1408309937,108.9311981201,11.7903671265 +"2011-11-29 20:18:39.900",134164.296875,-156.0731556671,134.7284088135,-156.4727353939,0.1376226693,121.414412573,202.1714019775,83.3771232362,201.9966888428,-36.2837817014,60.0034332275,0.0004577637,97.144493103,108.9094924927,11.7649993896 +"2011-11-29 20:18:39.933",134165.203125,-156.0339640416,134.6734924316,-156.4476822601,0.1248818338,90.5577694125,202.1211090088,83.3786053872,201.9503936768,-36.2412057172,60.0034332275,0,97.1363830566,108.9141235352,11.7777404785 +"2011-11-29 20:18:39.966",134166.296875,-155.9942396614,134.6500091553,-156.3704601413,0.0978360698,66.8289818962,202.090713501,83.4726502619,201.9323730469,-36.194476978,60.0034065247,-0.0010681059,97.1539306641,108.9339141846,11.7799835205 +"2011-11-29 20:18:40.000",134165.078125,-155.9533131679,134.6811218262,-156.2952734189,0.0485065766,-65.8217338993,202.097946167,83.5451595501,201.9472351074,-36.1493567484,60.0033760071,-0.0008392381,97.1422576904,108.9165725708,11.7743148804 +"2011-11-29 20:18:40.033",134164.390625,-155.911649014,134.6671142578,-156.2548933405,0.0945940614,-85.9574525914,201.9947357178,83.5786889487,201.9762115479,-36.113706576,60.0033760071,0,97.1316299438,108.9153594971,11.7837295532 +"2011-11-29 20:18:40.066",134165.640625,-155.8709410865,134.6767272949,-156.2264114517,0.0760143772,-122.9851238557,202.0511779785,83.6182630648,201.9168395996,-36.0828068002,60.0033721924,"7.62892886996269E-05",97.1532821655,108.921081543,11.7677993774 +"2011-11-29 20:18:40.100",134167.46875,-155.8307659138,134.7007293701,-156.1886131848,0.0964606404,-177.6168700453,202.2456207275,83.6621197095,201.7682495117,-36.0289849095,60.0033836365,"7.63032585382462E-05",97.152305603,108.8919754028,11.7396697998 +"2011-11-29 20:18:40.133",134166.859375,-155.7906453827,134.7051696777,-156.1577953713,0.1002500206,137.3080032244,202.2971954346,83.6709443139,201.7805175781,-35.9599863385,60.0033874512,0.0001525786,97.1337738037,108.915184021,11.7814102173 +"2011-11-29 20:18:40.166",134165.984375,-155.7495822854,134.723815918,-156.1213768026,0.0971610099,107.7021999274,202.2568206787,83.7135305433,201.9271087646,-35.928591374,60.0033912659,"7.62892886996269E-05",97.1274337769,108.905960083,11.7785263062 +"2011-11-29 20:18:40.200",134165.90625,-155.7083552635,134.7310180664,-156.055315213,0.0983870849,101.9259772482,202.2744445801,83.8033611913,201.9405822754,-35.8864491068,60.0033874512,-0.0002034567,97.1300354004,108.915687561,11.7856521606 +"2011-11-29 20:18:40.233",134166.46875,-155.6677292984,134.7640838623,-155.9978050202,0.029127432,65.4048464731,202.3522796631,83.8383112693,201.9635314941,-35.8281261215,60.0033836365,0.0001271674,97.1548156738,108.91355896,11.7587432861 +"2011-11-29 20:18:40.266",134165.359375,-155.6274311823,134.7327728271,-155.9704979239,0.0970433131,52.886646517,202.3075714111,83.8396431562,201.9781341553,-35.76705057,60.0033874512,"7.62892886996269E-05",97.1480560303,108.9220581055,11.7740020752 +"2011-11-29 20:18:40.300",134163.03125,-155.5862588019,134.6737060547,-155.9431088653,0.132908076,124.801885873,202.0939178467,83.8827962914,201.9047241211,-35.7317794731,60.0034065247,0.0007883599,97.1469726563,108.9197692871,11.7727966309 +"2011-11-29 20:18:40.333",134163.359375,-155.5444034027,134.7059783936,-155.9017998812,0.1692603081,-174.098393717,202.0995483398,83.9541239569,201.8590393066,-35.7425199456,60.0034179688,0.0001780316,97.1390686035,108.9252319336,11.7861633301 +"2011-11-29 20:18:40.366",134165.078125,-155.5035861922,134.7266235352,-155.8705312752,0.0645465702,176.7844748911,202.229309082,83.981028072,201.8946685791,-35.7134199246,60.0034065247,-0.0003814884,97.125793457,108.9161376953,11.7903442383 +"2011-11-29 20:18:40.400",134164.71875,-155.4630421893,134.7720947266,-155.8154526297,0.0320686214,128.8237608035,202.3261871338,84.0177608294,201.9838409424,-35.6395719193,60.00340271,"2.54251062870026E-05",97.1424636841,108.907081604,11.7646179199 +"2011-11-29 20:18:40.433",134164.515625,-155.422880677,134.8078613281,-155.7493363986,0.0544594228,-102.8403688233,202.3780212402,84.0738844938,202.0145111084,-35.5845410851,60.00340271,0,97.1390380859,108.9018707275,11.7628326416 +"2011-11-29 20:18:40.466",134164.46875,-155.3826645232,134.8226623535,-155.692522885,0.1777125746,-119.8518428758,202.4632263184,84.1079944585,201.8628082275,-35.5219799674,60.0033836365,-0.0008646632,97.1544723511,108.9225158691,11.7680435181 +"2011-11-29 20:18:40.500",134164.078125,-155.3412872372,134.868270874,-155.6822776013,0.2303971797,-149.2662711025,202.4543457031,84.1157877043,201.9239349365,-35.4871050215,60.0033836365,0,97.1441192627,108.9110183716,11.7668991089 +"2011-11-29 20:18:40.533",134164.71875,-155.3008525173,134.7557678223,-155.7142975281,0.0791226104,134.8319640277,202.2174224854,84.119496497,202.0240478516,-35.5269079489,60.0033721924,-0.0005086139,97.1398620605,108.9091186523,11.7692565918 +"2011-11-29 20:18:40.566",134164.96875,-155.2616199107,134.687789917,-155.6771549594,0.0825629681,87.5782223305,202.2333984375,84.1719455197,201.8687438965,-35.5050410983,60.0033569336,-0.0005340669,97.1413726807,108.9067840576,11.765411377 +"2011-11-29 20:18:40.600",134166.0625,-155.220830021,134.6926422119,-155.5887040097,0.0735448301,-165.2445560997,202.3746490479,84.2378978263,201.6326904297,-35.4111635633,60.0033721924,0.0010681199,97.1533584595,108.8954086304,11.7420501709 +"2011-11-29 20:18:40.633",134166,-155.1796439803,134.6954345703,-155.5157029478,0.1475223601,-110.8027916219,202.2942047119,84.2798078671,201.6895141602,-35.3400715393,60.0033988953,0.0004831888,97.1555557251,108.9195480347,11.7639923096 +"2011-11-29 20:18:40.666",134164,-155.1393322038,134.7453765869,-155.4357624138,0.226041913,-97.3577964671,202.2542419434,84.3361569277,201.864944458,-35.2616712129,60.0033721924,-0.0009918027,97.1576004028,108.9237365723,11.7661361694 +"2011-11-29 20:18:40.700",134164.171875,-155.0990067669,134.8535003662,-155.3952320712,0.2754724324,-130.9805706189,202.3320465088,84.3935646677,201.9800109863,-35.2159601719,60.0033683777,0.0005086279,97.1338195801,108.9008026123,11.7669830322 +"2011-11-29 20:18:40.733",134164.53125,-155.0580529527,134.8515167236,-155.4197797711,0.196094051,-160.4482606607,202.3654022217,84.4061117252,201.9957580566,-35.2404703057,60.0033950806,0.0008646632,97.1476364136,108.9108657837,11.7632293701 +"2011-11-29 20:18:40.766",134165.5,-155.0164297799,134.7228546143,-155.4005459584,0.0909693167,137.4862165203,202.2662658691,84.4436162939,201.8686676025,-35.2206047005,60.0034065247,"5.08502125740051E-05",97.141494751,108.9261474609,11.78465271 +"2011-11-29 20:18:40.800",134166.21875,-154.9753393618,134.6081085205,-155.3280639909,0.0676980987,23.359267452,202.1061553955,84.4978411657,201.7877197266,-35.1541401297,60.0034065247,-0.0002543209,97.1534194946,108.9225921631,11.7691726685 +"2011-11-29 20:18:40.833",134166.625,-154.9348773212,134.594909668,-155.2589424765,0.2618276179,-10.3301198272,202.0442199707,84.5345466023,201.9569854736,-35.0950248424,60.0034065247,0.0002543209,97.1419830322,108.9112319946,11.7692489624 +"2011-11-29 20:18:40.866",134167.296875,-154.8939371673,134.6648254395,-155.2196005869,0.2542935014,-10.3349154737,202.1622161865,84.5755209072,202.0423736572,-35.0560825189,60.0034179688,0.000279746,97.1469345093,108.9038391113,11.7569046021 +"2011-11-29 20:18:40.900",134166.875,-154.8534068247,134.7518005371,-155.1900805093,0.0644170046,-145.8374888184,202.4243164063,84.6149515892,201.7698516846,-34.9974350996,60.0034065247,-0.0004323246,97.1487426758,108.9338378906,11.7850952148 +"2011-11-29 20:18:40.933",134164.921875,-154.8130540671,134.7995605469,-155.1526237519,0.1554074436,-179.1590721183,202.5410308838,84.6619228002,201.7180175781,-34.9484114168,60.0033836365,-0.0004831888,97.1265792847,108.9221725464,11.7955932617 +"2011-11-29 20:18:40.966",134163.71875,-154.7726603284,134.7221069336,-155.1017934841,0.0459256545,75.5766237323,202.4159698486,84.694666727,201.7820892334,-34.8874929596,60.0033721924,-0.0002034567,97.1371307373,108.9072265625,11.7700958252 +"2011-11-29 20:18:41.000",134163.71875,-154.7315152688,134.6624450684,-155.0675469156,0.1439167112,114.9695553552,202.2284240723,84.7653933359,201.7610168457,-34.8592159764,60.0033874512,0.000279732,97.1384735107,108.9047851563,11.7663116455 +"2011-11-29 20:18:41.033",134163.6875,-154.69039753,134.7215118408,-155.0492146879,0.2483582795,145.5017030585,202.1583099365,84.8153083584,201.8817596436,-34.8528195043,60.0033874512,"2.5453045964241E-05",97.1376724243,108.9142837524,11.7766113281 +"2011-11-29 20:18:41.066",134164.96875,-154.6495939799,134.755645752,-155.027303441,0.097258985,155.997149322,202.211517334,84.7928165454,201.9938659668,-34.8264037477,60.0033950806,0.0003814744,97.1514205933,108.9150314331,11.7636108398 +"2011-11-29 20:18:41.100",134165.96875,-154.6084489204,134.7515411377,-154.9678124933,0.024211362,-88.9067555957,202.3748321533,84.799626244,201.8732147217,-34.7409512509,60.0034141541,0.0006357674,97.141998291,108.9140548706,11.7720565796 +"2011-11-29 20:18:41.133",134165.328125,-154.567563408,134.7322692871,-154.9452045672,0.1179030389,105.3342074931,202.3914337158,84.8448625869,201.8284606934,-34.7016947387,60.0034217834,0,97.1445007324,108.9355010986,11.7910003662 +"2011-11-29 20:18:41.166",134163.453125,-154.5275521598,134.7382659912,-154.9437429067,0.2110021859,111.4015464951,202.3725585938,84.8786788535,201.8584289551,-34.7059397013,60.0034065247,-0.0006866455,97.1427993774,108.9446105957,11.8018112183 +"2011-11-29 20:18:41.200",134163.40625,-154.486830572,134.6704101563,-154.8617123348,0.1362928599,69.1090697959,202.3252563477,84.9365510463,201.7869262695,-34.6325561488,60.0033950806,"-7.62753188610077E-05",97.1472854614,108.9292221069,11.7819366455 +"2011-11-29 20:18:41.233",134165.09375,-154.446354871,134.6262512207,-154.7834930084,0.1864733398,18.2179791581,202.2193145752,85.0082953534,201.84715271,-34.5813365602,60.0033874512,-0.0004323386,97.1428833008,108.9214553833,11.7785720825 +"2011-11-29 20:18:41.266",134166.6875,-154.4056196228,134.6722717285,-154.7525659118,0.1370951384,13.4818423178,202.2602233887,85.0344208269,201.8934631348,-34.5470968219,60.0033798218,0,97.136756897,108.9330368042,11.7962799072 +"2011-11-29 20:18:41.300",134165.71875,-154.3638461858,134.7080383301,-154.7372662881,0.0598000363,20.5850324414,202.3056335449,85.0366816195,201.8811798096,-34.5121160081,60.0033874512,0.0004323386,97.1495513916,108.9185943604,11.7690429688 +"2011-11-29 20:18:41.333",134162.03125,-154.3229196923,134.7066955566,-154.6827203974,0.1445643604,-25.6916250819,202.2525939941,85.0952095105,201.9610748291,-34.4921957614,60.00340271,0,97.1414260864,108.9058074951,11.7643814087 +"2011-11-29 20:18:41.366",134162.234375,-154.2835231612,134.6741790771,-154.6128202414,0.2068198174,-16.8185263311,202.2876434326,85.1790978939,201.8902893066,-34.4437560598,60.0033912659,-0.0005086279,97.1421508789,108.9100494385,11.7678985596 +"2011-11-29 20:18:41.400",134165.703125,-154.2434709319,134.6716003418,-154.5658012192,0.1243391708,-23.2250815556,202.2881622314,85.2365192943,201.8108825684,-34.3941347355,60.0033798218,"7.63032585382462E-05",97.1397094727,108.9071044922,11.7673950195 +"2011-11-29 20:18:41.433",134166.609375,-154.2024761365,134.7057342529,-154.5413764627,0.1134059578,-78.3659432157,202.2781219482,85.2838729958,201.8135223389,-34.3974849433,60.0033874512,0.0002288818,97.1245574951,108.9109191895,11.7863616943 +"2011-11-29 20:18:41.466",134164.21875,-154.160866624,134.7790222168,-154.4988790257,0.1926959902,-106.1858159694,202.3787231445,85.3162549227,201.8319091797,-34.354365959,60.0033874512,0,97.1372299194,108.9065170288,11.7692871094 +"2011-11-29 20:18:41.500",134163.4375,-154.1205958287,134.7562561035,-154.4582940416,0.1238667741,-128.5303631975,202.3886413574,85.3598930013,201.7705688477,-34.2913028224,60.0033683777,-0.0006357813,97.1583709717,108.925201416,11.7668304443 +"2011-11-29 20:18:41.533",134164.8125,-154.0814451844,134.7096252441,-154.4169167556,0.0497312769,4.1587177705,202.3314666748,85.4076565141,201.8455657959,-34.2462064984,60.0033683777,0,97.1578216553,108.9104309082,11.7526092529 +"2011-11-29 20:18:41.566",134165.59375,-154.0406279739,134.7501068115,-154.3930384143,0.0602616258,75.7403092157,202.2909698486,85.4410902901,201.9998321533,-34.2137938357,60.0033912659,0.0008646492,97.1474914551,108.9104156494,11.7629241943 +"2011-11-29 20:18:41.600",134165.46875,-153.9981168765,134.7784881592,-154.3681628654,0.1330206692,156.3733834623,202.271774292,85.499071766,201.9782104492,-34.2065879861,60.0034103394,0.0003560213,97.1498413086,108.9222412109,11.7723999023 +"2011-11-29 20:18:41.633",134165.25,-153.9568078924,134.7330169678,-154.321321428,0.0758437738,164.9866071755,202.2585296631,85.535503995,201.8843994141,-34.1638378321,60.0033988953,-0.0006866455,97.1418151855,108.9170608521,11.7752456665 +"2011-11-29 20:18:41.666",134164.171875,-153.917220116,134.7467346191,-154.2489760643,0.1045479998,-120.1841179186,202.3195037842,85.5762597338,201.8358306885,-34.0904132985,60.0033798218,-0.0001780037,97.1383666992,108.9289321899,11.7905654907 +"2011-11-29 20:18:41.700",134162.6875,-153.8771405659,134.7456665039,-154.200509042,0.160201624,-96.9351443613,202.2417907715,85.6271992846,201.9100341797,-34.066166127,60.0033950806,0.0006103422,97.1463088989,108.9252090454,11.7789001465 +"2011-11-29 20:18:41.733",134163.84375,-153.8363370158,134.7665557861,-154.1642270771,0.1503203213,-72.7429694909,202.346786499,85.656965249,201.9320220947,-34.0272101431,60.0033950806,-0.0005086418,97.1427764893,108.9113006592,11.7685241699 +"2011-11-29 20:18:41.766",134166.015625,-153.7956017676,134.7881469727,-154.1156644321,0.132433638,-43.6976856681,202.5795135498,85.6803108356,201.8333129883,-33.9461084769,60.0033760071,"-2.5453045964241E-05",97.1367111206,108.9076385498,11.7709274292 +"2011-11-29 20:18:41.800",134166.515625,-153.7543610854,134.7022247314,-154.0833029958,0.1331664026,-9.2212616673,202.4610290527,85.732281745,201.7564239502,-33.9199864184,60.0033798218,"7.62892886996269E-05",97.1403656006,108.9273300171,11.7869644165 +"2011-11-29 20:18:41.833",134165.609375,-153.7133253089,134.6435089111,-154.0564740128,0.0073276451,6.5755635597,202.2114257813,85.7742942386,201.7277526855,-33.887512284,60.00340271,0.000279746,97.1405792236,108.9097290039,11.7691497803 +"2011-11-29 20:18:41.866",134164.796875,-153.6725354191,134.6224365234,-154.013443821,0.1199463829,84.6434949498,202.1355285645,85.8233486572,201.7961273193,-33.8208837886,60.0034065247,0.0002034567,97.1386108398,108.9196853638,11.7810745239 +"2011-11-29 20:18:41.900",134166.34375,-153.6315952653,134.6667175293,-153.9612884965,0.1940672547,64.8146771477,202.2714080811,85.8798206613,201.882019043,-33.7675809923,60.0034103394,"5.08641824126244E-05",97.1432647705,108.9354400635,11.792175293 +"2011-11-29 20:18:41.933",134168.828125,-153.5910785831,134.7656707764,-153.9125755873,0.1228558719,19.3303608418,202.4282226563,85.9320442877,201.9922637939,-33.760962539,60.0034065247,"-7.62753188610077E-05",97.1406555176,108.909614563,11.7689590454 +"2011-11-29 20:18:41.966",134167.703125,-153.5505482406,134.8261108398,-153.8678924898,0.168599695,-52.5819005517,202.5654449463,85.97473297,201.9470214844,-33.7569429727,60.0033950806,-0.0004068995,97.1326980591,108.9218597412,11.7891616821 +"2011-11-29 20:18:42.000",134165,-153.5098676339,134.7808380127,-153.841145469,0.1176332161,-76.8727614103,202.4199829102,85.9957016507,201.8973236084,-33.7100605542,60.0033912659,"5.08641824126244E-05",97.1377334595,108.915763855,11.7780303955 +"2011-11-29 20:18:42.033",134166.03125,-153.4687225743,134.7581939697,-153.810600863,0.0610621236,-139.47854172,202.2053527832,86.0270453888,202.0116577148,-33.6523591161,60.0033950806,"7.62753188610077E-05",97.135017395,108.9165496826,11.7815322876 +"2011-11-29 20:18:42.066",134166.0625,-153.4288342696,134.7676086426,-153.7704256903,0.1081344038,-84.3041574914,202.3021697998,86.0426796918,201.9645690918,-33.6119483019,60.0033798218,-0.0003814744,97.1448135376,108.9270477295,11.7822341919 +"2011-11-29 20:18:42.100",134164.34375,-153.3888366818,134.8624572754,-153.7254693852,0.2114848644,-116.0299422239,202.5532073975,86.0673161842,201.8690490723,-33.554219543,60.0033760071,"5.08502125740051E-05",97.143157959,108.9287185669,11.7855606079 +"2011-11-29 20:18:42.133",134165.46875,-153.3475550184,134.8675079346,-153.7016047043,0.1913362443,-139.4024534127,202.4571228027,86.1080514324,201.962097168,-33.5241872013,60.0033950806,0.0005594781,97.1502380371,108.9038467407,11.7536087036 +"2011-11-29 20:18:42.166",134165.375,-153.306560223,134.7385559082,-153.6649675695,0.101163581,-141.8349843044,202.18019104,86.1672077008,201.9380950928,-33.502801879,60.00340271,0,97.1590423584,108.928894043,11.7698516846 +"2011-11-29 20:18:42.200",134162.34375,-153.2657566729,134.7018585205,-153.5914747341,0.2044645995,-123.3694586003,202.1836547852,86.2271426107,201.7469940186,-33.4389293649,60.0033950806,-0.000279746,97.1509933472,108.9223861694,11.7713928223 +"2011-11-29 20:18:42.233",134162.828125,-153.2251307078,134.7814331055,-153.5289511824,0.3035290241,-120.5370201326,202.383102417,86.2517722729,201.7090148926,-33.3558571892,60.0033988953,"7.62892886996269E-05",97.1256103516,108.9220123291,11.7964019775 +"2011-11-29 20:18:42.266",134165.859375,-153.1849008935,134.8200836182,-153.496658048,0.2331630886,-109.9243063512,202.5321807861,86.2794277088,201.7616577148,-33.3175193373,60.0033988953,0,97.1447067261,108.9158782959,11.7711715698 +"2011-11-29 20:18:42.300",134166.140625,-153.1446300982,134.7299346924,-153.4931883119,0.0373257846,-58.8474755491,202.4102783203,86.3299232974,201.7843780518,-33.3263029606,60.0033798218,-0.0004323665,97.117401123,108.9254150391,11.808013916 +"2011-11-29 20:18:42.333",134164.53125,-153.1035670009,134.6224517822,-153.4616601587,0.1619272977,75.354417188,202.076675415,86.3876725468,201.899017334,-33.2762615797,60.0033798218,0,97.1314239502,108.9336166382,11.802192688 +"2011-11-29 20:18:42.366",134165.265625,-153.0616569602,134.6728668213,-153.4046827207,0.1101614684,109.5622448535,202.0001983643,86.4571424009,202.0333709717,-33.2355263315,60.0033874512,0.000559506,97.1258087158,108.9097900391,11.7839813232 +"2011-11-29 20:18:42.400",134167.21875,-153.0207031459,134.7679290771,-153.3525137358,0.078026861,-130.9792319018,202.2978973389,86.4927618374,201.9351196289,-33.2058969708,60.0033988953,-0.0001017284,97.143447876,108.9228439331,11.7793960571 +"2011-11-29 20:18:42.433",134166.78125,-152.9811973317,134.7493133545,-153.3302883002,0.1194841638,-73.5409951332,202.3692169189,86.493868328,201.859085083,-33.1873393469,60.0033988953,"1.39698386192322E-08",97.1379089355,108.9253997803,11.7874908447 +"2011-11-29 20:18:42.466",134164.78125,-152.9409948383,134.7184448242,-153.3082267892,0.183031559,-76.2950981613,202.3005981445,86.503362291,201.815322876,-33.1699872513,60.0033950806,0.0003051572,97.1631546021,108.9144439697,11.7512893677 +"2011-11-29 20:18:42.500",134163.609375,-152.8997541561,134.6681060791,-153.257997578,0.1059410796,-76.4185606607,202.3044433594,86.5516244076,201.6776580811,-33.0963441516,60.0033988953,-0.0002034567,97.1303939819,108.924911499,11.7945175171 +"2011-11-29 20:18:42.533",134164.265625,-152.8594697003,134.7147521973,-153.1920452714,0.0842255726,-103.3736290126,202.3193511963,86.6219138844,201.7725067139,-33.0237665615,60.0033683777,-0.0009918166,97.1331863403,108.91015625,11.7769699097 +"2011-11-29 20:18:42.566",134163.34375,-152.8189530182,134.7369537354,-153.1373217958,0.1040268168,-109.6229037635,202.246383667,86.7046479658,201.8903961182,-32.99933839,60.0033607483,0.0002034288,97.1468505859,108.9281921387,11.7813415527 +"2011-11-29 20:18:42.600",134163.484375,-152.7784909775,134.6891479492,-153.1115036807,0.0805980414,-57.8495780812,202.2533111572,86.7226045331,201.8230133057,-32.9680492934,60.0033760071,0.0003305962,97.138381958,108.9031677246,11.7647857666 +"2011-11-29 20:18:42.633",134165.71875,-152.7374005595,134.7186431885,-153.1092087372,0.1012736261,-86.2105179303,202.2967834473,86.6902977384,201.8215942383,-32.9346769891,60.0033912659,0.0004323106,97.1396789551,108.9115600586,11.7718811035 +"2011-11-29 20:18:42.666",134165.546875,-152.6959276509,134.7843780518,-153.0306752221,0.1858794093,-129.9743744711,202.3423461914,86.7757775558,201.8418884277,-32.8572738703,60.0033912659,"7.63032585382462E-05",97.1424636841,108.9178924561,11.775428772 +"2011-11-29 20:18:42.700",134165.875,-152.6548918743,134.7904663086,-152.942429178,0.0958134085,-135.8574486296,202.3694458008,86.8990214892,201.9118499756,-32.7915025637,60.0034103394,0.0003814744,97.1630401611,108.9124679565,11.7494277954 +"2011-11-29 20:18:42.733",134166.9375,-152.6139927016,134.6834869385,-152.9268836675,0.0624641702,24.2386918737,202.1978302002,86.9267179063,201.9163208008,-32.7811377516,60.0034179688,0.000279732,97.1414794922,108.9280548096,11.7865753174 +"2011-11-29 20:18:42.766",134165.640625,-152.572956925,134.6974487305,-152.9419100836,0.067499727,162.075102438,202.1490783691,86.9135424714,201.8969573975,-32.7836239405,60.0034217834,"1.39698386192322E-08",97.1349639893,108.9108657837,11.7759017944 +"2011-11-29 20:18:42.800",134162.5,-152.5324265825,134.8069458008,-152.8864626079,0.2150471509,-166.9105212005,202.3898162842,86.9500908136,201.8242034912,-32.7077644445,60.0034141541,-0.0004323246,97.1287078857,108.9273223877,11.798614502 +"2011-11-29 20:18:42.833",134162.125,-152.4920328438,134.81300354,-152.8099098477,0.0876007527,-75.6985767599,202.560256958,86.9883876843,201.8614959717,-32.6317512692,60.0033988953,-0.0006103562,97.1610946655,108.9300003052,11.7689056396 +"2011-11-29 20:18:42.866",134163.515625,-152.4517074069,134.7479248047,-152.7872062989,0.2181064337,-28.4030701635,202.392074585,86.9891458353,201.9773406982,-32.6141054755,60.0033836365,-0.0004323386,97.14478302,108.9005203247,11.7557373047 +"2011-11-29 20:18:42.900",134164.515625,-152.4109858191,134.7347869873,-152.7431515788,0.1024229825,-75.5003783306,202.35546875,87.0294166307,201.8291168213,-32.5434915648,60.0033798218,-0.0001525925,97.1339035034,108.9244995117,11.7905960083 +"2011-11-29 20:18:42.933",134166.296875,-152.3703735143,134.7722930908,-152.6902176127,0.1747537702,-147.7518815598,202.4282836914,87.0967486355,201.7172546387,-32.4807050508,60.0033760071,"-7.63032585382462E-05",97.1334915161,108.9366455078,11.8031539917 +"2011-11-29 20:18:42.966",134169.046875,-152.3296929076,134.763458252,-152.650547874,0.1360649914,-118.5859629358,202.3986206055,87.1676186783,201.7808685303,-32.4898062779,60.0033798218,0.0002288818,97.1588668823,108.9097137451,11.7508468628 +"2011-11-29 20:18:43.000",134169.40625,-152.2888210556,134.7554016113,-152.6444690057,0.118851617,-115.0652736262,202.3354644775,87.2068786057,201.8377380371,-32.5160205439,60.0033874512,0.0003306242,97.1483001709,108.9007873535,11.7524871826 +"2011-11-29 20:18:43.033",134167.828125,-152.2483863357,134.7252349854,-152.634770137,0.1285763085,131.5047739773,202.2749633789,87.2315765697,201.8707885742,-32.4654532384,60.0033874512,"1.39698386192322E-08",97.1341552734,108.9216461182,11.7874908447 +"2011-11-29 20:18:43.066",134165.203125,-152.2085253517,134.7059783936,-152.5827104352,0.1675840616,102.6442740922,202.2278289795,87.247292835,201.9351348877,-32.3664940426,60.0033798218,-0.0003051711,97.1338882446,108.9022903442,11.7684020996 +"2011-11-29 20:18:43.100",134165.203125,-152.1680223299,134.65965271,-152.5340931487,0.071462974,40.0038954593,202.2253265381,87.2577976659,201.8261260986,-32.3211210959,60.0033760071,0.0001271395,97.1589660645,108.909614563,11.7506484985 +"2011-11-29 20:18:43.133",134166.65625,-152.1263171948,134.69090271,-152.4964724667,0.0852345079,58.307432982,202.2906799316,87.2958418196,201.8580932617,-32.2759291493,60.0033836365,0.0001780037,97.1550598145,108.9304504395,11.775390625 +"2011-11-29 20:18:43.166",134165.71875,-152.0846257201,134.7795257568,-152.4432516327,0.1178958565,112.6049165438,202.3601226807,87.3847708826,201.9908294678,-32.2376220333,60.00340271,0.0007120846,97.1531600952,108.9189376831,11.7657775879 +"2011-11-29 20:18:43.200",134163.21875,-152.0442593021,134.8017730713,-152.3818755528,0.1506919265,-173.9460121966,202.3481140137,87.4837266633,201.9183349609,-32.2314577876,60.00340271,-0.0003306102,97.1412353516,108.9036102295,11.7623748779 +"2011-11-29 20:18:43.233",134161.015625,-152.0043846578,134.7667999268,-152.3363045307,0.225970611,-153.1851604407,202.3450927734,87.5157602505,201.7307434082,-32.1869659354,60.00340271,0.0001017423,97.1175918579,108.9120788574,11.7944869995 +"2011-11-29 20:18:43.266",134164.28125,-151.9633898624,134.7314453125,-152.3020443018,0.2101606131,-161.7488516221,202.2988128662,87.5512977248,201.6896057129,-32.1451378569,60.0034179688,0.0003051851,97.1451873779,108.9077682495,11.7625808716 +"2011-11-29 20:18:43.300",134167.9375,-151.922108199,134.7435455322,-152.2748464885,0.19272089,171.3453357079,202.3381652832,87.6140876538,201.7383270264,-32.1309788747,60.0034065247,-0.0002543209,97.145904541,108.9128723145,11.7669677734 +"2011-11-29 20:18:43.333",134165.203125,-151.880908498,134.7812805176,-152.2483316942,0.1476919949,164.7460205922,202.372177124,87.6291072398,201.8648529053,-32.0968552496,60.00340271,-0.0002288818,97.1439590454,108.9106063843,11.7666473389 +"2011-11-29 20:18:43.366",134162.390625,-151.8405967215,134.746383667,-152.1903433881,0.0873135179,-83.458429808,202.2980041504,87.6393525235,201.9110565186,-32.0427601514,60.00340271,0,97.1426086426,108.9352798462,11.7926712036 +"2011-11-29 20:18:43.400",134164.796875,-151.8002712846,134.7128601074,-152.1383793089,0.2168589234,-77.1296653156,202.3057403564,87.6750812431,201.7783355713,-32.0108187718,60.0034103394,0.0004577637,97.1441650391,108.9100570679,11.7658920288 +"2011-11-29 20:18:43.433",134166.90625,-151.7593721119,134.7460021973,-152.0997340986,0.1948777139,-90.5612391486,202.3621826172,87.6989937354,201.784942627,-31.9465330313,60.0034065247,-0.0003560493,97.1587524414,108.9025192261,11.7437667847 +"2011-11-29 20:18:43.466",134167.6875,-151.7191422977,134.7021331787,-152.0867020977,0.0112930275,46.8075083632,202.3208007813,87.7260139637,201.7984466553,-31.8978713486,60.0033836365,-0.0007883878,97.1468200684,108.9377441406,11.7909240723 +"2011-11-29 20:18:43.500",134165.265625,-151.6788305212,134.5964508057,-152.0556383973,0.1639538705,52.485939809,202.1834411621,87.7848150623,201.7568206787,-31.8763767432,60.003364563,-0.0003560493,97.1448669434,108.9313812256,11.7865142822 +"2011-11-29 20:18:43.533",134162.96875,-151.6379586692,134.6204833984,-151.9950546194,0.1416492015,-7.5464104903,202.0970306396,87.837339217,201.8812103271,-31.8506440055,60.0033760071,0.0006103562,97.1411972046,108.915397644,11.7742004395 +"2011-11-29 20:18:43.566",134164.609375,-151.5970048549,134.7360076904,-151.9255642748,0.1068310291,-109.7495081499,202.1527557373,87.9005457876,201.9777374268,-31.7718338678,60.0033912659,0.0001525786,97.1466217041,108.9146270752,11.7680053711 +"2011-11-29 20:18:43.600",134165.796875,-151.5566794181,134.7833862305,-151.8789687242,0.1684230864,-169.8733069983,202.2683563232,87.9640597167,201.9233093262,-31.7069641462,60.0033760071,-0.0005086279,97.1330108643,108.9189300537,11.7859191895 +"2011-11-29 20:18:43.633",134166.1875,-151.5160534529,134.7754058838,-151.8759497806,0.1104474589,157.1154561948,202.2754364014,87.9607402447,201.9832000732,-31.6880581825,60.0033836365,0.000534053,97.1529769897,108.8938446045,11.7408676147 +"2011-11-29 20:18:43.666",134165.28125,-151.4748127707,134.7388458252,-151.835993174,0.0816327929,142.2427192771,202.2074127197,87.9884503222,201.9779663086,-31.6390686507,60.00340271,0.0005594781,97.1575622559,108.9201507568,11.762588501 +"2011-11-29 20:18:43.700",134163.734375,-151.4339272583,134.6904296875,-151.773783811,0.1040294245,173.8307732449,202.264465332,88.0458375716,201.7232055664,-31.5762377405,60.0033988953,-0.0004577637,97.1634140015,108.9237365723,11.7603225708 +"2011-11-29 20:18:43.733",134162.3125,-151.3939979724,134.6193847656,-151.7248113547,0.1117637306,-86.6654631705,202.2624969482,88.0953564431,201.55027771,-31.5731539101,60.0033798218,-0.000534053,97.1427459717,108.92137146,11.7786254883 +"2011-11-29 20:18:43.766",134163.421875,-151.3534676299,134.5744476318,-151.6787348985,0.1515857428,-48.3743776645,202.1436157227,88.1504897301,201.6159973145,-31.5494121726,60.0033874512,0.0005340669,97.1344909668,108.921257019,11.7867660522 +"2011-11-29 20:18:43.800",134165.75,-151.3122542684,134.6831817627,-151.6442151225,0.1014171019,-175.2169464766,202.1700286865,88.2019278847,201.7881469727,-31.4785557901,60.00340271,0.0002543209,97.1246948242,108.9167404175,11.7920455933 +"2011-11-29 20:18:43.833",134166.4375,-151.2713824164,134.7441864014,-151.6028514968,0.1419478357,146.0946317803,202.3056640625,88.2458938124,201.8626861572,-31.415619012,60.0033950806,-0.0003051711,97.1485671997,108.92527771,11.7767105103 +"2011-11-29 20:18:43.866",134166.578125,-151.2298412059,134.7205657959,-151.567074966,0.0547821969,94.2916152657,202.3064727783,88.2732350597,201.8793792725,-31.3928505764,60.0034065247,0.0006358232,97.1561660767,108.9155731201,11.7594070435 +"2011-11-29 20:18:43.900",134165.703125,-151.1885458822,134.7177581787,-151.5152884717,0.1392075866,-18.0417466171,202.3805541992,88.2868407965,201.87059021,-31.3455788372,60.0034217834,0.0001525925,97.147895813,108.9258422852,11.7779464722 +"2011-11-29 20:18:43.933",134164.890625,-151.1486848982,134.7096557617,-151.4799627333,0.1845961958,-17.5156103151,202.3767852783,88.3319951771,201.8821258545,-31.3291522322,60.0034217834,"-1.39698386192322E-08",97.1470565796,108.9328842163,11.7858276367 +"2011-11-29 20:18:43.966",134165.234375,-151.1092473859,134.7762145996,-151.4634473359,0.0804610997,-136.3500418726,202.3385925293,88.3706335572,201.9140319824,-31.3031633624,60.0033874512,-0.0013224408,97.1470413208,108.9230575562,11.7760162354 +"2011-11-29 20:18:44.000",134164.703125,-151.0687307038,134.7941436768,-151.4450604666,0.1705620438,-157.2871534902,202.2035522461,88.3629017831,202.0115203857,-31.2479003018,60.0033760071,"5.08502125740051E-05",97.1347503662,108.8876113892,11.7528610229 +"2011-11-29 20:18:44.033",134164.546875,-151.0269982479,134.7136993408,-151.4021532183,0.0442956798,-1.0645358884,202.1844940186,88.3749502368,201.9980773926,-31.1852708823,60.0033798218,0,97.1329345703,108.9204330444,11.7874984741 +"2011-11-29 20:18:44.066",134164.765625,-150.9860171129,134.7111358643,-151.3437687612,0.0739261806,-4.0665785186,202.1938171387,88.4531559028,202.0042266846,-31.1518371063,60.0033721924,-0.0003560493,97.1457595825,108.9288330078,11.7830734253 +"2011-11-29 20:18:44.100",134165.453125,-150.9458965817,134.7422180176,-151.3116122306,0.0561677814,12.4307376762,202.2258911133,88.5107412277,202.0565795898,-31.1382723506,60.0033798218,0.000534053,97.1411895752,108.9060974121,11.7649078369 +"2011-11-29 20:18:44.133",134164.71875,-150.9050793712,134.7281646729,-151.287938795,0.1143635586,43.9292495715,202.2843780518,88.533861418,202.0125427246,-31.100955612,60.0033988953,0.0007120706,97.1463928223,108.9180145264,11.7716217041 +"2011-11-29 20:18:44.166",134162.515625,-150.8643031419,134.7301330566,-151.2440889805,0.0454457663,-16.1575689251,202.3351135254,88.5614895332,201.8896636963,-31.0583352316,60.00340271,-0.0002543069,97.1483306885,108.919052124,11.7707214355 +"2011-11-29 20:18:44.200",134162.828125,-150.8239094031,134.7536773682,-151.1968240714,0.0925513059,150.9045602769,202.3674926758,88.6230841791,201.8466186523,-30.99400851,60.0033836365,-0.0005086418,97.1250991821,108.918006897,11.7929077148 +"2011-11-29 20:18:44.233",134164.90625,-150.7831878153,134.7168273926,-151.1259813494,0.1645302474,123.7318411169,202.2472839355,88.7230303373,201.8911743164,-30.9281962223,60.0033798218,0.000279732,97.1485366821,108.9025115967,11.7539749146 +"2011-11-29 20:18:44.266",134166,-150.7418105293,134.7218170166,-151.0568188538,0.0870875046,90.5609386203,202.3177032471,88.7800760772,201.8910064697,-30.8716251805,60.0033988953,0.0004832027,97.1453552246,108.9118881226,11.7665328979 +"2011-11-29 20:18:44.300",134166.265625,-150.7016899981,134.768081665,-151.0140891904,0.0917426348,9.1813212823,202.4943847656,88.7957308708,201.8983306885,-30.8321227814,60.0033912659,-0.0004323386,97.1558532715,108.9161911011,11.7603378296 +"2011-11-29 20:18:44.333",134165.515625,-150.6619382972,134.7150726318,-151.018009719,0.132144779,15.2514879827,202.4049072266,88.8107914379,201.8703918457,-30.8552429717,60.0033760071,-0.0003814884,97.147605896,108.9178695679,11.7702636719 +"2011-11-29 20:18:44.366",134166.078125,-150.6199872753,134.5744476318,-151.0148951527,0.2021651864,45.7268938894,202.1295928955,88.8467250631,201.7886505127,-30.8597372362,60.00340271,0.0009409525,97.1527557373,108.9187774658,11.7660217285 +"2011-11-29 20:18:44.400",134166.03125,-150.5790607818,134.5909729004,-150.9512377896,0.1213496327,44.3476840356,202.1221618652,88.891346689,201.7694244385,-30.7844036648,60.0034065247,-0.0007120706,97.139465332,108.9081192017,11.7686538696 +"2011-11-29 20:18:44.433",134164.234375,-150.5394183638,134.686920166,-150.8714475198,0.0281964988,149.0347550104,202.2240905762,88.9417056737,201.8248748779,-30.6772721476,60.0033607483,-0.0012461375,97.1399307251,108.9276199341,11.787689209 +"2011-11-29 20:18:44.466",134163.453125,-150.4987104364,134.6960601807,-150.8412034421,0.1557296962,112.4627939675,202.2109832764,88.9854325448,201.8977508545,-30.6236585778,60.0033760071,0.0011698343,97.1472015381,108.8995132446,11.7523117065 +"2011-11-29 20:18:44.500",134163.15625,-150.4569096787,134.6698608398,-150.8082409492,0.1204229817,95.0388447911,202.210647583,89.0100963579,201.8506164551,-30.5950674059,60.0034217834,0.0012715766,97.1582489014,108.9227828979,11.7645339966 +"2011-11-29 20:18:44.533",134163.09375,-150.4156006946,134.6867218018,-150.7709890975,0.0973708779,-52.1593748044,202.1360626221,89.0317002462,201.9407501221,-30.6007876893,60.0034103394,-0.0008392381,97.1390228271,108.8939361572,11.7549133301 +"2011-11-29 20:18:44.566",134164.09375,-150.3756304275,134.76222229,-150.7418651708,0.0759391934,-88.9733226194,202.2412261963,89.0796140233,202.0112915039,-30.5821173672,60.0033836365,-0.0002288818,97.1362915039,108.9165344238,11.7802429199 +"2011-11-29 20:18:44.600",134164.5625,-150.3356328398,134.7519378662,-150.6811174684,0.1592244208,-156.0823627621,202.3314208984,89.1489882547,201.7677154541,-30.5064832674,60.0033874512,0.0002034428,97.1456069946,108.8992843628,11.7536773682 +"2011-11-29 20:18:44.633",134164.03125,-150.2950068746,134.6801605225,-150.6392484087,0.1437509209,-143.4848028381,202.2668762207,89.174020898,201.6330871582,-30.4570122073,60.0033874512,-0.0002543069,97.1497039795,108.8985671997,11.7488632202 +"2011-11-29 20:18:44.666",134165,-150.2541213622,134.6676177979,-150.6150831995,0.0362857729,157.3157993036,202.2705383301,89.2146195424,201.7118988037,-30.436169885,60.0033760071,0,97.1421966553,108.9287567139,11.7865600586 +"2011-11-29 20:18:44.700",134166.65625,-150.2131948687,134.6898956299,-150.5788831969,0.0973593742,68.5785007011,202.3316040039,89.2621098477,201.815322876,-30.4020189392,60.0033798218,"7.62753188610077E-05",97.1526794434,108.9155578613,11.762878418 +"2011-11-29 20:18:44.733",134165.84375,-150.1720361488,134.7665252686,-150.5485708173,0.0845773295,41.2632696441,202.3072509766,89.2860360003,202.0768890381,-30.3780688809,60.00340271,0.0006866455,97.1288833618,108.9262542725,11.7973709106 +"2011-11-29 20:18:44.766",134164.953125,-150.1310959949,134.8052825928,-150.4941342096,0.086912781,-41.5930721584,202.3694000244,89.3231717389,202.0764312744,-30.3344820287,60.0034103394,"2.54251062870026E-05",97.1431045532,108.9229202271,11.7798156738 +"2011-11-29 20:18:44.800",134165.359375,-150.090770558,134.776763916,-150.4320887712,0.0729341283,-90.3379192835,202.4706573486,89.395715178,201.8249206543,-30.277231383,60.0034103394,"-1.39698386192322E-08",97.1479568481,108.9253311157,11.7773742676 +"2011-11-29 20:18:44.833",134164.640625,-150.0502265551,134.7384033203,-150.4167618267,0.0866294876,118.3630665424,202.3032684326,89.421854312,201.9156951904,-30.2304855684,60.0033988953,-0.0001780177,97.1393280029,108.9196472168,11.7803192139 +"2011-11-29 20:18:44.866",134162.875,-150.0095459484,134.7169647217,-150.3976236367,0.1200720519,83.8780424797,202.1879272461,89.4223870667,202.0354003906,-30.1898459428,60.0033912659,-0.0003306102,97.1327133179,108.9108886719,11.778175354 +"2011-11-29 20:18:44.900",134163.15625,-149.9691522096,134.7059020996,-150.3390206136,0.1968485564,94.0327852471,202.3366851807,89.5111180543,201.8681030273,-30.1384248636,60.0033798218,-0.0003560493,97.1296615601,108.9120635986,11.7824020386 +"2011-11-29 20:18:44.933",134164.28125,-149.9289633766,134.6353912354,-150.277439628,0.2543467581,80.7568304441,202.3519134521,89.6002725135,201.7156677246,-30.0985843702,60.0033683777,-0.0003051711,97.1615142822,108.9188079834,11.7572937012 +"2011-11-29 20:18:44.966",134165.078125,-149.8873538641,134.577255249,-150.2192464163,0.0954119042,21.5723516538,202.188583374,89.6203942508,201.6391601563,-30.0623126506,60.0033798218,0.0004068995,97.1499557495,108.9117584229,11.7618026733 +"2011-11-29 20:18:45.000",134165.15625,-149.8463454084,134.6401519775,-150.1467917696,0.2492560744,-59.781066786,202.2110290527,89.6561776118,201.7126922607,-30.0200747608,60.0033874512,-0.0002543209,97.145324707,108.924369812,11.779045105 +"2011-11-29 20:18:45.033",134165.03125,-149.8061292545,134.7345581055,-150.0971362943,0.1965187192,-78.2182950164,202.2691040039,89.7128545216,201.8751525879,-29.9597573602,60.0033798218,"2.54111364483833E-05",97.122718811,108.907119751,11.7844009399 +"2011-11-29 20:18:45.066",134165.375,-149.7644924214,134.7899780273,-150.0725066322,0.0747506246,-148.4260485516,202.4236907959,89.7317604852,201.873916626,-29.8768695996,60.0034103394,0.001093545,97.1272125244,108.911315918,11.7841033936 +"2011-11-29 20:18:45.100",134166.03125,-149.7237981543,134.7608642578,-150.0578490462,0.0931568071,143.286467805,202.4172058105,89.7424702218,201.8312530518,-29.8332998228,60.0034255981,0,97.1443099976,108.9178314209,11.7735214233 +"2011-11-29 20:18:45.133",134166.0625,-149.6850026798,134.7211761475,-150.0255149307,0.0898812041,161.1285065209,202.2468414307,89.801906528,201.8596038818,-29.8333817851,60.0033836365,-0.0015258836,97.1636047363,108.9143753052,11.7507705688 +"2011-11-29 20:18:45.166",134166.484375,-149.6444450165,134.6316070557,-149.9778402103,0.0124164009,8.8252191247,202.1706848145,89.8516166448,201.7375030518,-29.8081818022,60.0033721924,0.0006866455,97.1539764404,108.9092025757,11.7552261353 +"2011-11-29 20:18:45.200",134167,-149.6026715795,134.5969390869,-149.9415309246,0.1367984712,16.4385168038,202.3015899658,89.862818155,201.6244354248,-29.7543530813,60.0034141541,0.0009663776,97.1403961182,108.9084472656,11.7680511475 +"2011-11-29 20:18:45.233",134167.6875,-149.5612259917,134.6768951416,-149.9002765821,0.187798664,7.6283565387,202.3805541992,89.8896539682,201.8261566162,-29.7100080781,60.0034065247,-0.0004577497,97.131187439,108.9152679443,11.7840805054 +"2011-11-29 20:18:45.266",134167,-149.5210098378,134.712890625,-149.8470284273,0.0921579972,19.2010346249,202.3908843994,89.9814312201,201.840057373,-29.6799689062,60.0033950806,0,97.140586853,108.9135894775,11.7730026245 +"2011-11-29 20:18:45.300",134165.0625,-149.4811215331,134.7002716064,-149.7970997445,0.0556700379,-178.1852100861,202.4139251709,90.0323434502,201.6398010254,-29.618364015,60.0033950806,0.0001017284,97.1276626587,108.9233627319,11.7957000732 +"2011-11-29 20:18:45.333",134165.6875,-149.4403589641,134.7132568359,-149.7475535522,0.0913944766,-85.5294319568,202.404006958,90.0483943947,201.6983032227,-29.566157464,60.00340271,-0.0002034428,97.160697937,108.9039077759,11.7432098389 +"2011-11-29 20:18:45.366",134164.421875,-149.3991046215,134.696685791,-149.7209294748,0.0744585618,-29.2208162694,202.3307342529,90.0686322453,201.7996368408,-29.5281542915,60.0033950806,0,97.13671875,108.9136581421,11.7769393921 +"2011-11-29 20:18:45.400",134162.8125,-149.3582737507,134.7206268311,-149.6935404163,0.0217460152,-139.0068898371,202.3504638672,90.123758702,201.7920684814,-29.5114715544,60.0033836365,-0.0004831748,97.1480560303,108.9178314209,11.7697753906 +"2011-11-29 20:18:45.433",134163.8125,-149.3180575968,134.7084350586,-149.648829998,0.0324872136,-54.2944133918,202.3072052002,90.1949087826,201.822555542,-29.5013731198,60.0033836365,0.0001271674,97.1444320679,108.9319839478,11.7875518799 +"2011-11-29 20:18:45.466",134165.859375,-149.2775682354,134.6843261719,-149.6257576189,0.0316454209,77.5270593818,202.1468353271,90.2108982555,201.9294128418,-29.4556313429,60.0033912659,0.0002543209,97.1390304565,108.9437942505,11.8047637939 +"2011-11-29 20:18:45.500",134164.96875,-149.2357811381,134.6840667725,-149.6021524852,0.0813834444,123.5008987607,202.1306152344,90.2370510498,201.9190216064,-29.418119944,60.00340271,0.0002543069,97.1423721313,108.9129867554,11.770614624 +"2011-11-29 20:18:45.533",134162.296875,-149.1942672483,134.6519622803,-149.5480164058,0.0481467694,-41.6800887684,202.1430969238,90.27135909,201.8294525146,-29.3801167714,60.0033988953,-0.0003814744,97.1476898193,108.9245910645,11.7769012451 +"2011-11-29 20:18:45.566",134161.890625,-149.1550892832,134.6429443359,-149.5077592708,0.0746480376,-40.3148364062,202.1439819336,90.2888375441,201.8116912842,-29.3240409183,60.0033836365,-0.0003560213,97.1529159546,108.9060974121,11.7531814575 +"2011-11-29 20:18:45.600",134163.75,-149.1144359973,134.654876709,-149.463390362,0.0664435178,24.7237582482,202.298828125,90.3437181141,201.7342071533,-29.2718582731,60.0033950806,0.0009409525,97.1493148804,108.9095687866,11.7602539063 +"2011-11-29 20:18:45.633",134164.25,-149.0725805981,134.6300354004,-149.399159263,0.1234369278,28.6661946635,202.3077087402,90.4074574394,201.7080535889,-29.2063635891,60.0034332275,0.0009918166,97.1311187744,108.9199295044,11.78881073 +"2011-11-29 20:18:45.666",134164.96875,-149.0322688216,134.6519622803,-149.3424413722,0.097935468,-17.7196007449,202.2429199219,90.4636289151,201.7801055908,-29.16884536,60.0033950806,-0.0018056296,97.1671295166,108.9191131592,11.7519836426 +"2011-11-29 20:18:45.700",134164.796875,-148.9925854225,134.694732666,-149.2903680099,0.1009075493,-112.0007180098,202.2584991455,90.5273819009,201.7472839355,-29.1250228663,60.0033531189,-0.0008138129,97.1462097168,108.9195785522,11.7733688354 +"2011-11-29 20:18:45.733",134163.46875,-148.9516179479,134.7135009766,-149.2641537439,0.1067470089,-154.9299186038,202.3343505859,90.5587939409,201.7019500732,-29.0835533728,60.0033874512,0.0012970157,97.1473770142,108.9226837158,11.7753067017 +"2011-11-29 20:18:45.766",134161.625,-148.9101040581,134.6959381104,-149.2731559332,0.0946026817,153.5176677099,202.2583312988,90.5550168462,201.7803039551,-29.0783316931,60.0034103394,"2.54390761256218E-05",97.1527862549,108.9119186401,11.7591323853 +"2011-11-29 20:18:45.800",134161.71875,-148.8702294137,134.6962127686,-149.2619680834,0.1091969758,122.4366869861,202.246887207,90.5959570001,201.8401031494,-29.088617958,60.0033721924,-0.0012970017,97.1473846436,108.9092559814,11.7618713379 +"2011-11-29 20:18:45.833",134162.140625,-148.8306552977,134.6522674561,-149.189417814,0.0531143025,46.6927133739,202.2242889404,90.6472039095,201.7852783203,-29.0215591607,60.0033531189,"2.79396772384644E-08",97.1502456665,108.9102020264,11.7599563599 +"2011-11-29 20:18:45.866",134162.421875,-148.7900429929,134.6009368896,-149.1459504901,0.0758183151,1.7385883678,202.161239624,90.6466916453,201.7103424072,-28.9486024951,60.0033798218,0.0009154994,97.1437606812,108.9187774658,11.7750167847 +"2011-11-29 20:18:45.900",134164.46875,-148.7483515182,134.6339874268,-149.1182335825,0.038683001,48.071499756,202.2641906738,90.6827277233,201.6772155762,-28.9153736248,60.0033950806,0.0001780177,97.1414260864,108.9300918579,11.7886657715 +"2011-11-29 20:18:45.933",134164.96875,-148.7071381567,134.6654205322,-149.0789873155,0.0577097312,-145.6785093353,202.2571868896,90.7233946697,201.683883667,-28.881765679,60.0033874512,-0.0004577637,97.1473312378,108.9007644653,11.7534332275 +"2011-11-29 20:18:45.966",134163.734375,-148.6670039651,134.7108001709,-149.0093057256,0.1632880419,-106.6654523434,202.322265625,90.7853581458,201.6916656494,-28.8345690718,60.0033874512,0.000279732,97.1564941406,108.9257278442,11.7692337036 +"2011-11-29 20:18:46.000",134165.296875,-148.6260774716,134.7744445801,-148.973324289,0.2019471228,-126.4889289376,202.3198852539,90.823853092,201.8191070557,-28.7919316159,60.0034103394,0.0009409525,97.1431274414,108.9133682251,11.7702407837 +"2011-11-29 20:18:46.033",134165.921875,-148.5845362611,134.7618560791,-148.9516042875,0.2368354648,-157.4050152345,202.1580810547,90.859923321,201.8955535889,-28.7529824622,60.0034332275,0.0003814744,97.1324005127,108.9052124023,11.7728118896 +"2011-11-29 20:18:46.066",134164.296875,-148.5434321827,134.7008056641,-148.8894768868,0.081386283,-179.6252188688,202.1275787354,90.9578750639,201.9064788818,-28.724848913,60.0034217834,-0.0004069135,97.1353378296,108.9176330566,11.7822952271 +"2011-11-29 20:18:46.100",134161.65625,-148.5024510477,134.7369232178,-148.8234289575,0.0589309186,-39.9940463265,202.339630127,91.0168878983,201.8915710449,-28.6791890984,60.0034179688,"7.63032585382462E-05",97.1391830444,108.9350280762,11.7958450317 +"2011-11-29 20:18:46.133",134161.984375,-148.4620436485,134.7622375488,-148.8022963522,0.095948033,-107.9498420961,202.3565368652,91.0089717091,201.8595733643,-28.6308689251,60.0034179688,"-1.39698386192322E-08",97.134437561,108.9253463745,11.7909088135 +"2011-11-29 20:18:46.166",134163.640625,-148.421513306,134.6938476563,-148.7820789923,0.1135404259,-141.8869893648,202.2513580322,91.0274268802,201.7196807861,-28.5949250546,60.0034103394,-0.0004832167,97.1368484497,108.926612854,11.7897644043 +"2011-11-29 20:18:46.200",134165.34375,-148.3802726238,134.6739196777,-148.7202247992,0.0733036101,-140.106714218,202.2656097412,91.0908178659,201.6858520508,-28.53383072,60.0034065247,0,97.1395339966,108.9086532593,11.7691192627 +"2011-11-29 20:18:46.233",134165.3125,-148.3391822057,134.6906433105,-148.6635615498,0.0899165869,39.9734089099,202.3379211426,91.1500902475,201.8251037598,-28.4729071402,60.00340271,-0.0002543069,97.1456604004,108.9134597778,11.7677993774 +"2011-11-29 20:18:46.266",134164.734375,-148.2993895236,134.7536621094,-148.6356807176,0.1150506437,14.0571320761,202.3620452881,91.1816388913,202.0107269287,-28.4624091394,60.0033874512,-0.000559492,97.1512985229,108.8977127075,11.7464141846 +"2011-11-29 20:18:46.300",134165.859375,-148.2598154076,134.7343597412,-148.6110783762,0.0878530964,-51.3754739934,202.2057800293,91.2036662513,202.0102081299,-28.4503623933,60.0033721924,-0.0004068995,97.1300354004,108.9198074341,11.7897720337 +"2011-11-29 20:18:46.333",134166.375,-148.21946265,134.6753692627,-148.5680345241,0.0557210669,-7.9480256135,202.1563873291,91.2544077267,201.9146118164,-28.4002800312,60.0033683777,"-5.08641824126244E-05",97.1334075928,108.9139709473,11.7805633545 +"2011-11-29 20:18:46.366",134165.34375,-148.1781400055,134.6445770264,-148.5115351993,0.1584796607,3.7546971401,202.3202667236,91.3183724483,201.7553405762,-28.3618943681,60.0033683777,0,97.1609954834,108.9113845825,11.7503890991 +"2011-11-29 20:18:46.400",134164.703125,-148.1370905686,134.6819915771,-148.4435611566,0.1105148271,-16.992300004,202.3824615479,91.3715659615,201.7385101318,-28.2816242774,60.0033683777,"7.62892886996269E-05",97.1473617554,108.919303894,11.7719421387 +"2011-11-29 20:18:46.433",134164.828125,-148.0962870185,134.6990356445,-148.4031947386,0.093611002,-56.1676098471,202.2568817139,91.3906221893,201.8461914063,-28.2231288298,60.0033950806,0.0008392241,97.1342697144,108.936706543,11.8024368286 +"2011-11-29 20:18:46.466",134165.15625,-148.0559889024,134.7233428955,-148.3783601708,0.1377227902,-79.5890388508,202.2057342529,91.4218224934,201.9165344238,-28.2146884235,60.0033988953,"1.39698386192322E-08",97.1223220825,108.9169158936,11.794593811 +"2011-11-29 20:18:46.500",134164.03125,-148.0153629372,134.7425994873,-148.3638118679,0.1625577211,-140.8661492914,202.195892334,91.4573736281,201.8726654053,-28.1907434878,60.00340271,"5.08641824126244E-05",97.1450119019,108.9123916626,11.7673797607 +"2011-11-29 20:18:46.533",134166.15625,-147.9745047456,134.7405548096,-148.3548233389,0.1842510849,170.6077435794,202.2069549561,91.4721200065,201.8779754639,-28.1471600508,60.0033950806,"-2.54251062870026E-05",97.14478302,108.9152450562,11.7704620361 +"2011-11-29 20:18:46.566",134168.515625,-147.9334279879,134.7182769775,-148.31406077,0.1821564138,129.8233999697,202.2593231201,91.5217891421,201.8719940186,-28.0983959152,60.0033950806,0,97.1516265869,108.9108276367,11.7592010498 +"2011-11-29 20:18:46.600",134166.75,-147.8924058718,134.6922149658,-148.2483816709,0.0977247804,116.6196470964,202.2337799072,91.5729199383,201.8538970947,-28.0417172979,60.0033988953,"7.62753188610077E-05",97.1241836548,108.9315185547,11.8073348999 +"2011-11-29 20:18:46.633",134163.65625,-147.8521623972,134.6917266846,-148.1875383458,0.0746720359,-86.757766347,202.1311645508,91.6062922425,201.9107208252,-27.9997628609,60.0033988953,0,97.1350860596,108.9224090576,11.787322998 +"2011-11-29 20:18:46.666",134165.125,-147.8118779414,134.633895874,-148.1157940387,0.1103536785,-14.9937132283,202.1872253418,91.6843134934,201.7920837402,-27.9383543376,60.0033950806,"-7.63032585382462E-05",97.1530075073,108.9214859009,11.7684783936 +"2011-11-29 20:18:46.700",134166.46875,-147.7705416366,134.6790771484,-148.073487847,0.0566342101,-20.4876476042,202.3769683838,91.7720677639,201.696182251,-27.9312663088,60.0034065247,0.0002543069,97.1354675293,108.9168395996,11.7813720703 +"2011-11-29 20:18:46.733",134163.828125,-147.7300795959,134.7729034424,-148.04435026,0.1310273707,-127.8245587694,202.3834228516,91.8362373911,201.813079834,-27.9374612904,60.0033874512,-0.0008646632,97.1252059937,108.9395065308,11.8143005371 +"2011-11-29 20:18:46.766",134163.578125,-147.68942631,134.7297058105,-148.0132455785,0.0988285989,-102.4521203803,202.2160949707,91.8534494678,201.9047851563,-27.8997569386,60.0033798218,"7.62892886996269E-05",97.1395187378,108.9092788696,11.7697601318 +"2011-11-29 20:18:46.800",134166.875,-147.6480763448,134.633392334,-147.9667046695,0.1173108667,-68.2172383356,202.1251525879,91.8529030527,201.7558288574,-27.8187696781,60.0034065247,0.0009409664,97.1448516846,108.9085769653,11.7637252808 +"2011-11-29 20:18:46.833",134167.546875,-147.6074367192,134.6470031738,-147.9323761388,0.1894122362,-81.6087052978,202.1819152832,91.8579778833,201.6851501465,-27.7714894011,60.0034103394,-0.0001525925,97.14453125,108.900138855,11.755607605 +"2011-11-29 20:18:46.866",134164.90625,-147.567097622,134.7203826904,-147.9033478348,0.2019614279,-79.6639523656,202.2761230469,91.8832700738,201.8123474121,-27.7427325972,60.0033874512,-0.0006866455,97.128616333,108.9242477417,11.7956314087 +"2011-11-29 20:18:46.900",134162.90625,-147.5256793548,134.6785583496,-147.8484877554,0.0789105818,-51.1771867716,202.2713165283,91.9838924206,201.7750091553,-27.7026906132,60.0034065247,0.0008138129,97.1317062378,108.909072876,11.7773666382 +"2011-11-29 20:18:46.933",134165.203125,-147.4837693141,134.707824707,-147.8020834502,0.0435027741,165.5181324967,202.2725067139,92.0501794065,201.8225402832,-27.6449925901,60.0034294128,0.0006611925,97.1388778687,108.9334335327,11.7945556641 +"2011-11-29 20:18:46.966",134167.265625,-147.442856481,134.8170013428,-147.7495866162,0.1738254428,-163.7266695001,202.3580932617,92.0730673704,201.9279022217,-27.5582662632,60.0034179688,-0.0006866595,97.1466522217,108.9198150635,11.7731628418 +"2011-11-29 20:18:47.000",134167,-147.4032823649,134.827255249,-147.6999311409,0.1881670803,-161.0109999464,202.3788757324,92.1397641677,201.9215240479,-27.5269635062,60.0034065247,"-7.62892886996269E-05",97.1384048462,108.9217987061,11.7833938599 +"2011-11-29 20:18:47.033",134164.859375,-147.3644459093,134.7173156738,-147.662201176,0.0231053121,75.8672004701,202.2570648193,92.1941188131,201.9129486084,-27.513759043,60.0033874512,-0.0010172417,97.1418762207,108.9312286377,11.789352417 +"2011-11-29 20:18:47.066",134165.140625,-147.3226724723,134.5740966797,-147.6491418543,0.1951939166,33.419179873,201.9758605957,92.2133936069,201.942779541,-27.5106034956,60.0033874512,0.0001017284,97.1416015625,108.9205245972,11.7789230347 +"2011-11-29 20:18:47.100",134165.484375,-147.2802160164,134.5737762451,-147.675779592,0.1858285069,60.6280512242,202.0484924316,92.1821386613,201.8379516602,-27.5085339483,60.0033912659,0.0001271535,97.1408004761,108.9041442871,11.763343811 +"2011-11-29 20:18:47.133",134165.03125,-147.2401774475,134.6703491211,-147.6461502314,0.08275415,70.1054304712,202.4007263184,92.170465868,201.6779937744,-27.4476957458,60.003364563,-0.0008646632,97.1339111328,108.9125900269,11.778678894 +"2011-11-29 20:18:47.166",134165.140625,-147.2004394069,134.7465667725,-147.5306380722,0.089062579,-97.368192015,202.4677886963,92.2834508572,201.7167816162,-27.3634624378,60.0033683777,0.0007629488,97.1462936401,108.9160308838,11.7697372437 +"2011-11-29 20:18:47.200",134165.203125,-147.1592533662,134.7343139648,-147.4355208578,0.0718538463,-125.7978777182,202.3409576416,92.4223086031,201.7963562012,-27.3004488201,60.0034179688,0.0014750054,97.1614685059,108.9402618408,11.778793335 +"2011-11-29 20:18:47.233",134165.046875,-147.1183132124,134.7476806641,-147.4047986669,0.0540898889,-165.2750870453,202.3402099609,92.4306687546,201.8531036377,-27.2351556267,60.00340271,-0.0010681199,97.1429977417,108.8983230591,11.7553253174 +"2011-11-29 20:18:47.266",134163.71875,-147.0781107189,134.7838439941,-147.3806197972,0.1578145176,-110.3090918883,202.3689880371,92.4121316212,201.8589782715,-27.1998213506,60.0033721924,-0.000813799,97.1454696655,108.896812439,11.7513427734 +"2011-11-29 20:18:47.300",134163.640625,-147.0372935084,134.758392334,-147.3174951889,0.2561130524,-87.2549563072,202.4426879883,92.4389674344,201.7075195313,-27.1360666573,60.0033874512,0.0007629488,97.1478881836,108.9191207886,11.771232605 +"2011-11-29 20:18:47.333",134165.296875,-146.9967495055,134.7578735352,-147.2919776022,0.1624657661,-56.437211074,202.5214691162,92.4777697391,201.7572937012,-27.1069888345,60.0033950806,0,97.1296005249,108.9107284546,11.7811279297 +"2011-11-29 20:18:47.366",134166.953125,-146.9567792385,134.7072601318,-147.286158281,0.1151265055,-23.265698983,202.3269042969,92.5238803462,201.8611907959,-27.1228195055,60.0033721924,-0.0007375237,97.1393890381,108.9146575928,11.7752685547 +"2011-11-29 20:18:47.400",134166.78125,-146.9152516883,134.7164306641,-147.2386748059,0.100984998,-83.2353558297,202.222366333,92.5867727281,201.884262085,-27.0895906351,60.0033760071,0.0003051572,97.1465682983,108.9102401733,11.763671875 +"2011-11-29 20:18:47.433",134166.15625,-146.8740929684,134.7741546631,-147.1950162367,0.0959449038,-121.4272943098,202.2574462891,92.6262990328,201.98046875,-27.0279089043,60.0033950806,0.0003051711,97.1620483398,108.9331359863,11.7710876465 +"2011-11-29 20:18:47.466",134167.0625,-146.8343549278,134.7418365479,-147.1732006125,0.0569143109,-68.4824955622,202.2925109863,92.6611671485,201.9233856201,-27.0230867907,60.0033721924,-0.001093559,97.1496887207,108.9187316895,11.7690429688 +"2011-11-29 20:18:47.500",134165.78125,-146.7944256419,134.6800384521,-147.1337631003,0.1023973748,-38.8166412419,202.2374572754,92.6896831883,201.8364868164,-26.9844586559,60.0033531189,-0.0001525646,97.117767334,108.9253082275,11.8075408936 +"2011-11-29 20:18:47.533",134163.609375,-146.7534581673,134.6877288818,-147.0951861918,0.0866918862,-30.214188737,202.220703125,92.6830442444,201.8844299316,-26.8949831778,60.0033798218,0.0009409525,97.1679534912,108.9197235107,11.7517700195 +"2011-11-29 20:18:47.566",134164.234375,-146.7118349945,134.6420593262,-147.073780379,0.1355481595,46.9944847918,202.2495117188,92.7237453417,201.810836792,-26.861522081,60.0033874512,-0.0002288818,97.14453125,108.9106063843,11.7660751343 +"2011-11-29 20:18:47.600",134164.328125,-146.6714002746,134.6185302734,-147.0440690561,0.185611248,65.350683073,202.3340911865,92.7850257989,201.6803588867,-26.8443646458,60.0033683777,-0.0003051711,97.1426620483,108.9112243652,11.7685623169 +"2011-11-29 20:18:47.633",134163.875,-146.6307196679,134.6816864014,-146.9998504114,0.1078797579,49.9427974187,202.3219146729,92.822796745,201.828414917,-26.8131165304,60.0033912659,0.000813799,97.1249084473,108.9129486084,11.7880401611 +"2011-11-29 20:18:47.666",134165.328125,-146.5898341555,134.7412872314,-146.9643744088,0.1616576165,33.8141423919,202.3481903076,92.8510737282,202.0393829346,-26.7789058204,60.0034065247,0.00027976,97.1314086914,108.9166488647,11.7852401733 +"2011-11-29 20:18:47.700",134166.359375,-146.5488530205,134.7479248047,-146.8947064793,0.0466296487,135.9132922563,202.3667907715,92.9207484879,201.8688964844,-26.6968291447,60.0034065247,-0.0001780316,97.1324005127,108.9146270752,11.7822265625 +"2011-11-29 20:18:47.733",134164.90625,-146.5080084893,134.6833953857,-146.8188777191,0.0981492922,-139.3658572591,202.1865234375,92.9876092097,201.7685699463,-26.6285870171,60.00340271,-0.000279732,97.131401062,108.9034957886,11.7720947266 +"2011-11-29 20:18:47.766",134164.78125,-146.4676830524,134.6651000977,-146.7775140935,0.0898040533,-56.1008174272,202.1206512451,93.0238160425,201.8778686523,-26.6040598078,60.0033988953,0,97.1274185181,108.8955078125,11.7680892944 +"2011-11-29 20:18:47.800",134165.359375,-146.4281362571,134.7364959717,-146.7678425457,0.0480953343,-112.4975118191,202.3002929688,93.0646674039,201.8711090088,-26.6076678552,60.0033874512,-0.0007120706,97.1322860718,108.9167022705,11.7844161987 +"2011-11-29 20:18:47.833",134164.484375,-146.3875785938,134.7746276855,-146.7422293363,0.0848153904,-134.1345607323,202.4050750732,93.0825829901,201.8379211426,-26.5717939942,60.0033798218,0.0002034567,97.1497650146,108.9346160889,11.7848510742 +"2011-11-29 20:18:47.866",134163.40625,-146.3459827418,134.7068939209,-146.6994860125,0.1135640591,17.8674265291,202.3598632813,93.109623709,201.8724365234,-26.5166965657,60.0033798218,0,97.1481628418,108.9061431885,11.7579803467 +"2011-11-29 20:18:47.900",134162.875,-146.3048376822,134.6504364014,-146.6639963495,0.1936088204,46.0584176113,202.3663482666,93.1732605815,201.7755737305,-26.4886688844,60.0033912659,"7.62892886996269E-05",97.1435165405,108.9242401123,11.7807235718 +"2011-11-29 20:18:47.933",134163.828125,-146.265004019,134.6873626709,-146.6011449488,0.0372895561,-19.3476975694,202.4325256348,93.2504827003,201.6533966064,-26.4606207126,60.0033760071,-0.0003814604,97.1430511475,108.9333724976,11.7903213501 +"2011-11-29 20:18:47.966",134164.25,-146.2253069595,134.7282104492,-146.55822404,0.1047452539,-111.7093421398,202.3450164795,93.2818810799,201.7550811768,-26.414851615,60.0033798218,0.000279732,97.1576843262,108.9136581421,11.7559738159 +"2011-11-29 20:18:48.000",134162.59375,-146.1841482396,134.6791992188,-146.5302612456,0.0228358824,17.1908040843,202.1817626953,93.3169541013,201.8791809082,-26.3790460558,60.0033988953,0.0003814744,97.1446533203,108.9181900024,11.7735366821 +"2011-11-29 20:18:48.033",134162.859375,-146.1427436328,134.6366424561,-146.4739258453,0.1299930513,35.1253133163,202.2069244385,93.3708169731,201.8344421387,-26.3173574947,60.0033912659,-0.0003305962,97.125579834,108.9176483154,11.7920684814 +"2011-11-29 20:18:48.066",134164.53125,-146.1018444601,134.6262207031,-146.4469465981,0.1018220559,62.8810027823,202.2994689941,93.3936707861,201.6696472168,-26.2728861331,60.0033836365,0.0002034428,97.154045105,108.90675354,11.7527084351 +"2011-11-29 20:18:48.100",134165.5625,-146.0604671741,134.6806182861,-146.3977828964,0.0085496632,127.0118208997,202.4425048828,93.4198372408,201.6009674072,-26.2121999023,60.0034217834,0.0011698483,97.1421203613,108.915687561,11.7735671997 +"2011-11-29 20:18:48.133",134164.265625,-146.0203739637,134.8227386475,-146.3677027433,0.1013273671,-153.7949460694,202.5034790039,93.4334771285,201.8667449951,-26.1645337196,60.0034217834,0,97.1264343262,108.90259552,11.7761611938 +"2011-11-29 20:18:48.166",134163.203125,-145.9813735835,134.842666626,-146.3510644025,0.0984089822,-163.7646590122,202.3586120605,93.4730580748,202.0774688721,-26.1665622858,60.0033950806,-0.0015767477,97.1271209717,108.9276351929,11.8005142212 +"2011-11-29 20:18:48.200",134163.546875,-145.9403924485,134.7916870117,-146.3172003246,0.0524356887,-170.8069665371,202.3604888916,93.5214158141,201.9685211182,-26.149328011,60.0033836365,0.0002034428,97.1376800537,108.9206085205,11.7829284668 +"2011-11-29 20:18:48.233",134164.78125,-145.8985233889,134.7757415771,-146.2607966224,0.0969044641,171.5293410041,202.4856262207,93.5638244587,201.7719268799,-26.0663053541,60.00340271,0.0004068995,97.1402664185,108.9267883301,11.7865219116 +"2011-11-29 20:18:48.266",134166.09375,-145.8570641406,134.7046661377,-146.1833969188,0.0766429156,107.0994220727,202.4759063721,93.624783897,201.6626281738,-25.9699484604,60.00340271,"2.54251062870026E-05",97.1254348755,108.9016342163,11.7761993408 +"2011-11-29 20:18:48.300",134165.953125,-145.8159873829,134.6695861816,-146.1572919358,0.0859208032,62.1259868413,202.3972015381,93.6412446529,201.6898345947,-25.9435514868,60.0034294128,0.0011189701,97.14503479,108.9070510864,11.7620162964 +"2011-11-29 20:18:48.333",134165.4375,-145.7761537197,134.7456207275,-146.1298209149,0.0535333157,-144.5442744614,202.3156890869,93.6790292594,201.8699188232,-25.9386798543,60.0034294128,0,97.1409225464,108.9212722778,11.7803497314 +"2011-11-29 20:18:48.366",134164.75,-145.7355004338,134.7682037354,-146.0570930606,0.1587524712,-135.0607617045,202.1800689697,93.7641470768,201.9706115723,-25.8867208978,60.0034217834,-0.0003814744,97.1496276855,108.9207763672,11.7711486816 +"2011-11-29 20:18:48.400",134162.78125,-145.6936177138,134.706451416,-146.0131066424,0.0136338109,-172.1385802177,202.1568908691,93.8173610807,201.9520721436,-25.8417048285,60.0034217834,0,97.1389160156,108.9180526733,11.7791366577 +"2011-11-29 20:18:48.433",134163.9375,-145.6522540881,134.7175750732,-145.9857039234,0.1031325758,74.9306312708,202.2845153809,93.8598311969,201.9478149414,-25.8118244584,60.0034179688,-0.0002288958,97.1563873291,108.9171447754,11.7607574463 +"2011-11-29 20:18:48.466",134165.515625,-145.611955972,134.7944946289,-145.9628091293,0.1073912308,151.7356030536,202.3488311768,93.8626315745,201.9869232178,-25.7609754076,60.0033988953,-0.0006357813,97.1460189819,108.9254455566,11.7794265747 +"2011-11-29 20:18:48.500",134164.1875,-145.5716851767,134.8117523193,-145.9537386381,0.1978236139,173.8717680403,202.2914123535,93.8547222154,201.9954223633,-25.7257230937,60.0033988953,"7.63032585382462E-05",97.1381607056,108.9176330566,11.7794723511 +"2011-11-29 20:18:48.533",134161.96875,-145.5309635889,134.7405853271,-145.9076075405,0.0980280414,154.8639116557,202.3161315918,93.9126422196,201.8577575684,-25.7035420544,60.00340271,-0.0001271674,97.1517791748,108.909942627,11.7581634521 +"2011-11-29 20:18:48.566",134162.296875,-145.4904332463,134.7382202148,-145.8298799877,0.1550034732,105.9356466306,202.4766540527,94.0022338109,201.7887420654,-25.6196041522,60.0033798218,-0.0006357953,97.146736145,108.9325256348,11.7857894897 +"2011-11-29 20:18:48.600",134163.90625,-145.4504219982,134.7249908447,-145.7592285109,0.1689590812,114.3666067459,202.4568328857,94.0781786843,201.7492980957,-25.5487904584,60.0033607483,-0.0005086418,97.1447372437,108.9271774292,11.7824401855 +"2011-11-29 20:18:48.633",134163.78125,-145.4096730896,134.730758667,-145.7175370362,0.1530346125,-133.1985242877,202.2964630127,94.1042290258,201.7482757568,-25.5482167225,60.0033721924,0.0005086279,97.1416778564,108.9236755371,11.7819976807 +"2011-11-29 20:18:48.666",134163.28125,-145.3689105206,134.7240447998,-145.7126876019,0.2191665024,-111.7225858766,202.215423584,94.0839297036,201.7771759033,-25.5436609863,60.0033836365,0.0004069135,97.1434631348,108.9189987183,11.7755355835 +"2011-11-29 20:18:48.700",134164.234375,-145.3280659894,134.7238006592,-145.6882901662,0.1046591327,-151.6121268937,202.4025421143,94.1169400078,201.6671295166,-25.4897332277,60.0033874512,"-2.54251062870026E-05",97.1554718018,108.9306106567,11.775138855 +"2011-11-29 20:18:48.733",134164.734375,-145.2874810053,134.7633514404,-145.6228979351,0.0779430568,161.3242734029,202.5701751709,94.190132315,201.6754302979,-25.417403232,60.0033912659,0.0001525786,97.1590118408,108.9288024902,11.7697906494 +"2011-11-29 20:18:48.766",134164.46875,-145.2464862099,134.7168731689,-145.5513448734,0.0053528538,-70.1381470774,202.4192810059,94.255736282,201.7322845459,-25.3592424636,60.0033988953,0.0002288818,97.1386413574,108.927444458,11.7888031006 +"2011-11-29 20:18:48.800",134163.78125,-145.2055460561,134.614654541,-145.4861848687,0.0920841545,22.2713788267,202.2844390869,94.3457035337,201.6511993408,-25.3230936875,60.0033988953,-0.0001525786,97.1448822021,108.9063415527,11.7614593506 +"2011-11-29 20:18:48.833",134165.828125,-145.1657533739,134.6338500977,-145.4803792079,0.134134829,38.2219161803,202.253326416,94.3469261376,201.7839202881,-25.3048024409,60.0033950806,-0.0002288818,97.1434631348,108.9249191284,11.7814559937 +"2011-11-29 20:18:48.866",134166.78125,-145.1260836352,134.6911468506,-145.4785487172,0.095066227,179.1504250989,202.087677002,94.344631194,201.9103240967,-25.285961364,60.0033721924,-0.0006866734,97.1233444214,108.923614502,11.8002700806 +"2011-11-29 20:18:48.900",134164.5625,-145.0847883115,134.6913452148,-145.4179512789,0.3374626637,-157.4511599925,202.0110473633,94.3962879147,201.7353515625,-25.2119528493,60.0033836365,0.0005086139,97.1260299683,108.9249420166,11.7989120483 +"2011-11-29 20:18:48.933",134164.25,-145.0427689878,134.6837463379,-145.3892644843,0.2313407063,-166.0204655894,202.1318969727,94.4214161807,201.7053527832,-25.1763692713,60.0033988953,0.0004069135,97.1428375244,108.9191055298,11.7762680054 +"2011-11-29 20:18:48.966",134164.625,-145.0017741924,134.6390380859,-145.3917643336,0.2014813721,77.0478942908,202.256362915,94.4632510893,201.8111419678,-25.2078427829,60.0033988953,-0.0001525925,97.1348876953,108.9027404785,11.7678527832 +"2011-11-29 20:18:49.000",134164.078125,-144.9617356234,134.5872344971,-145.3451414623,0.2777602375,62.3612527072,202.2150421143,94.5274070562,201.7939300537,-25.1807627904,60.0033988953,"5.08641824126244E-05",97.1318969727,108.8983154297,11.766418457 +"2011-11-29 20:18:49.033",134164.71875,-144.9213692054,134.654800415,-145.2750090799,0.0362205133,-118.0293025185,202.2287597656,94.546934567,201.705368042,-25.1012064545,60.0034065247,0.0003051851,97.1440582275,108.9281616211,11.7841033936 +"2011-11-29 20:18:49.066",134166.15625,-144.8807295799,134.7463684082,-145.2312002466,0.1987242252,-107.1145099606,202.3629455566,94.5508209447,201.7223358154,-25.0473572431,60.0033874512,-0.0007629348,97.145362854,108.9203414917,11.7749786377 +"2011-11-29 20:18:49.100",134166.578125,-144.8392976524,134.7957611084,-145.1694689969,0.1715686172,-100.3545419655,202.5438995361,94.6132283831,201.7241973877,-24.9856140406,60.0033874512,0,97.1390533447,108.9292755127,11.790222168 +"2011-11-29 20:18:49.133",134165.625,-144.7991224797,134.7828979492,-145.1197315593,0.1009549499,-99.1103478761,202.4598236084,94.6713601231,201.8212432861,-24.9307710366,60.0033683777,-0.0004069135,97.1398620605,108.9150390625,11.775177002 +"2011-11-29 20:18:49.166",134165.609375,-144.7585374956,134.6707000732,-145.0980115578,0.0547622368,83.8896401409,202.1910552979,94.717211183,201.8592834473,-24.9011826571,60.0033836365,0.0007375097,97.1385116577,108.9226226807,11.7841110229 +"2011-11-29 20:18:49.200",134165.828125,-144.7166137945,134.5754699707,-145.0619208382,0.1321964562,51.3818943712,202.2004547119,94.7556173367,201.6549224854,-24.8683089567,60.0034103394,0.0008646492,97.1384658813,108.9128723145,11.7744064331 +"2011-11-29 20:18:49.233",134164.90625,-144.6751545462,134.6629638672,-145.0255022695,0.0515657663,-52.4027788408,202.3451538086,94.7703705454,201.6484680176,-24.8352576713,60.0034332275,0.0004832027,97.1598739624,108.9179229736,11.7580490112 +"2011-11-29 20:18:49.266",134163.046875,-144.6346788452,134.6841125488,-144.9730737375,0.0419591442,-100.5717488113,202.290802002,94.8272455306,201.7339324951,-24.7811659881,60.0034065247,-0.0010681059,97.148979187,108.9172286987,11.7682495117 +"2011-11-29 20:18:49.300",134162.484375,-144.5947768801,134.6608734131,-144.9259317718,0.0430693105,105.7048818593,202.3259735107,94.8967905167,201.6730194092,-24.7365255793,60.00340271,0,97.1582717896,108.9285049438,11.7702331543 +"2011-11-29 20:18:49.333",134164.625,-144.5543011791,134.669418335,-144.8977367509,0.1359689385,-0.5370330684,202.3809204102,94.9086887062,201.7398834229,-24.7260344087,60.0033988953,-0.0004068855,97.1547012329,108.9157943726,11.7610931396 +"2011-11-29 20:18:49.366",134164.921875,-144.5143445724,134.7094726563,-144.8557584083,0.2471664846,-8.9881003534,202.3615570068,94.9578455777,201.9459228516,-24.7177903704,60.0033607483,-0.0011952734,97.1439208984,108.9212188721,11.7772979736 +"2011-11-29 20:18:49.400",134164.515625,-144.4736639657,134.713394165,-144.7973466305,0.1981086731,-0.2372776502,202.3953857422,95.0331825642,201.9076843262,-24.6600650266,60.0033531189,"-2.79396772384644E-08",97.1272659302,108.9134902954,11.7862243652 +"2011-11-29 20:18:49.433",134165.9375,-144.4327238118,134.762588501,-144.7649305527,0.0183586869,-58.4852706174,202.47706604,95.052744226,201.8114776611,-24.5872278893,60.0033607483,0.0004068995,97.1445159912,108.9136047363,11.7690887451 +"2011-11-29 20:18:49.466",134166.140625,-144.3924120354,134.8002624512,-144.755299986,0.2026698291,163.6159794544,202.3556976318,95.0801947563,201.9214477539,-24.5453229712,60.0033683777,0.000279732,97.1475601196,108.9109954834,11.7634353638 +"2011-11-29 20:18:49.500",134163.46875,-144.3513079569,134.7202758789,-144.6928174154,0.1449938267,146.2779813784,202.1575775146,95.1639328755,201.9530334473,-24.5110268838,60.0033836365,0.0004068995,97.138885498,108.926574707,11.787689209 +"2011-11-29 20:18:49.533",134162.65625,-144.309643803,134.6783905029,-144.6356623925,0.0935936943,-3.8410930567,202.3033447266,95.2078305013,201.8056945801,-24.4955599204,60.0034103394,0.0008646632,97.1380844116,108.9231948853,11.7851104736 +"2011-11-29 20:18:49.566",134164.0625,-144.2691544416,134.6621246338,-144.6267421654,0.1890183389,-19.2458030998,202.4230041504,95.197530576,201.6742858887,-24.494154609,60.0034065247,-0.000534053,97.1501922607,108.9290618896,11.7788696289 +"2011-11-29 20:18:49.600",134164.015625,-144.2293754199,134.6830291748,-144.575133256,0.1112581417,-27.0746273982,202.426071167,95.2278907669,201.6764526367,-24.405440697,60.0033874512,-0.0004577637,97.1352920532,108.9293136597,11.7940216064 +"2011-11-29 20:18:49.633",134163.515625,-144.1885172283,134.7404174805,-144.4998645714,0.0634215027,-33.178678667,202.4344024658,95.2723211475,201.8128967285,-24.2881031697,60.00340271,0.0006357813,97.140838623,108.932723999,11.791885376 +"2011-11-29 20:18:49.666",134163.640625,-144.1471809234,134.6878662109,-144.4612466818,0.1708692461,-17.3297045188,202.3429260254,95.3200231886,201.8262481689,-24.2806258201,60.0034065247,-0.0001525786,97.1475601196,108.9351806641,11.7876205444 +"2011-11-29 20:18:49.700",134163.9375,-144.106295411,134.6460723877,-144.4339805666,0.1673256159,-23.4709615355,202.3905181885,95.3845070046,201.6354370117,-24.29253767,60.0033950806,-0.0002543069,97.1363601685,108.9228363037,11.7864761353 +"2011-11-29 20:18:49.733",134164.921875,-144.0656694458,134.7031402588,-144.4062909798,0.0396951661,157.9861687102,202.4162597656,95.4641879914,201.6730041504,-24.2667605361,60.0033988953,0.0003051572,97.1512298584,108.9159469604,11.7647171021 +"2011-11-29 20:18:49.766",134165.171875,-144.0253576694,134.6845703125,-144.3687932412,0.1228523627,111.2977617706,202.3764953613,95.5018155036,201.7089538574,-24.2051607675,60.0033988953,0,97.1423110962,108.9196929932,11.777381897 +"2011-11-29 20:18:49.800",134162.734375,-143.984185289,134.5976104736,-144.2993438777,0.1289612204,35.0629741797,202.3630218506,95.5144718441,201.5608825684,-24.1128285628,60.0034065247,"5.08641824126244E-05",97.1278381348,108.9041290283,11.7762908936 +"2011-11-29 20:18:49.833",134162.3125,-143.9429582672,134.6532897949,-144.2306321747,0.1887485981,-2.3486314093,202.4730834961,95.5460682992,201.6379394531,-24.0394979443,60.00340271,"-5.08641824126244E-05",97.1506958008,108.9141387939,11.7634429932 +"2011-11-29 20:18:49.866",134164.59375,-143.9015536605,134.7106018066,-144.2228047779,0.0984557793,-18.7549071589,202.3972473145,95.5703223009,201.7940673828,-24.03808068,60.0034179688,0.0004068995,97.1393203735,108.9225234985,11.783203125 +"2011-11-29 20:18:49.900",134163.71875,-143.861351167,134.722869873,-144.1933256814,0.0534633994,-121.0534097546,202.2914581299,95.6362267962,201.8296966553,-24.0284296227,60.0034179688,-0.0001017144,97.1361236572,108.9161758423,11.7800521851 +"2011-11-29 20:18:49.933",134162.21875,-143.8221458812,134.74269104,-144.128534507,0.1083601564,-117.7591685368,202.4386444092,95.6994538574,201.6940155029,-23.9695602223,60.0034065247,-0.0006357813,97.1371383667,108.9097976685,11.7726593018 +"2011-11-29 20:18:49.966",134164.140625,-143.7808095763,134.7355041504,-144.1020470334,0.0349652283,135.1093926514,202.5159454346,95.7211670288,201.68699646,-23.9147189259,60.0034065247,"-1.39698386192322E-08",97.1446990967,108.9272460938,11.7825469971 +"2011-11-29 20:18:50.000",134165.453125,-143.7398830828,134.6635131836,-144.0582245397,0.2474317402,71.0861500134,202.3685302734,95.779667599,201.8264160156,-23.8552279782,60.0033988953,-0.0005086279,97.1454391479,108.9188995361,11.7734603882 +"2011-11-29 20:18:50.033",134164.5625,-143.6992980988,134.6217651367,-143.9879965346,0.24467282,39.1117566405,202.3133850098,95.8432839809,201.7979888916,-23.8150493904,60.0033760071,-0.0004323106,97.1546936035,108.8946228027,11.7399291992 +"2011-11-29 20:18:50.066",134164.609375,-143.6584399072,134.6271362305,-143.9662218915,0.0669736043,-5.5262936777,202.3824462891,95.8441036036,201.5511779785,-23.7883809168,60.0033950806,0.0008900883,97.1394577026,108.9061813354,11.7667236328 +"2011-11-29 20:18:50.100",134166.140625,-143.6187428477,134.6648254395,-143.9605391741,0.1065603346,135.9624013164,202.4306182861,95.8466717548,201.5482025146,-23.7370759509,60.0033950806,0,97.1511383057,108.9161071777,11.7649688721 +"2011-11-29 20:18:50.133",134166.109375,-143.5779802787,134.6793212891,-143.9255412848,0.2478156984,100.2708516576,202.3521575928,95.88296738,201.7968292236,-23.6701793706,60.0033836365,0,97.1267166138,108.9186630249,11.7919464111 +"2011-11-29 20:18:50.166",134164.21875,-143.5365893324,134.673538208,-143.8638510163,0.1342519671,47.9532623512,202.3788909912,95.9334766289,201.7757720947,-23.652755558,60.0033950806,0.0005594781,97.1449203491,108.9306488037,11.7857284546 +"2011-11-29 20:18:50.200",134162.828125,-143.495922386,134.6997070313,-143.8145370504,0.1661091894,-47.6721078593,202.4813537598,95.9671016502,201.6379699707,-23.642175595,60.0033950806,-0.0001017284,97.1375274658,108.916885376,11.7793579102 +"2011-11-29 20:18:50.233",134164.40625,-143.4548456284,134.7318878174,-143.78527652,0.0569524989,-57.0896444039,202.4426422119,96.0281157301,201.7516937256,-23.6141666967,60.00340271,0.0003306242,97.1473083496,108.9223022461,11.7749938965 +"2011-11-29 20:18:50.266",134165.265625,-143.4143699274,134.730178833,-143.7515490459,0.0566772632,71.5969935218,202.3501281738,96.0856942248,201.888381958,-23.5790902603,60.0034103394,0,97.1378479004,108.924446106,11.7865982056 +"2011-11-29 20:18:50.300",134163.921875,-143.3746455471,134.7313232422,-143.6864983243,0.062985152,-3.1416910772,202.4154815674,96.1419066816,201.8288116455,-23.5257584357,60.0033950806,-0.0008392381,97.1222915649,108.9234695435,11.8011779785 +"2011-11-29 20:18:50.333",134164.578125,-143.3345113556,134.688369751,-143.6513911519,0.0922055319,-47.0886013834,202.4389038086,96.1877304208,201.638092041,-23.5158905199,60.0033683777,-0.0006866455,97.1265640259,108.9221496582,11.7955856323 +"2011-11-29 20:18:50.366",134165.03125,-143.2934072771,134.6586303711,-143.6488503216,0.0475633331,-26.496866819,202.3235321045,96.1836801186,201.6756744385,-23.4928642446,60.0033760071,0.0003306102,97.1633605957,108.9191207886,11.7557601929 +"2011-11-29 20:18:50.400",134162.515625,-143.2517567836,134.6773223877,-143.6041535636,0.0565749444,-115.6790344251,202.2571716309,96.2160210643,201.7267150879,-23.4313532685,60.0033798218,0.0002288679,97.1539916992,108.9205322266,11.7665405273 +"2011-11-29 20:18:50.433",134162.140625,-143.2104341391,134.6737518311,-143.5169320479,0.068840161,-151.1817703345,202.3083343506,96.3200175246,201.6463470459,-23.3507143476,60.00340271,0.0008646632,97.1545639038,108.9099273682,11.7553634644 +"2011-11-29 20:18:50.466",134163.953125,-143.1700950419,134.6887664795,-143.4599546099,0.1255174428,-154.5200389517,202.3377532959,96.3648508863,201.6073150635,-23.2772761537,60.0034141541,0,97.1511764526,108.9053955078,11.7542190552 +"2011-11-29 20:18:50.500",134165.234375,-143.1304526239,134.6695251465,-143.4088921156,0.2275063246,-119.0095712681,202.2876281738,96.3769198306,201.5162963867,-23.2205941213,60.0034103394,-0.00027976,97.1367721558,108.9042510986,11.7674789429 +"2011-11-29 20:18:50.533",134166.078125,-143.0901681682,134.6008758545,-143.3737303018,0.163122341,-62.5674424579,202.245010376,96.3966727377,201.5342102051,-23.1890967039,60.0033874512,-0.0007120986,97.1413421631,108.9103927612,11.7690505981 +"2011-11-29 20:18:50.566",134166.6875,-143.0492553351,134.5975189209,-143.39352419,0.0549490489,59.0844967737,202.2095031738,96.4014265493,201.636505127,-23.1819284204,60.0033760071,-0.0001271395,97.1569595337,108.9300918579,11.7731323242 +"2011-11-29 20:18:50.600",134164.8125,-143.0080419736,134.7165222168,-143.3736756603,0.1541348547,163.072678887,202.2798919678,96.4575160628,201.7802886963,-23.169241344,60.0033760071,0,97.1516876221,108.9074172974,11.7557296753 +"2011-11-29 20:18:50.633",134163.671875,-142.9676345745,134.8175354004,-143.3069310517,0.1091192737,-151.2826795493,202.38331604,96.4989684809,201.9635925293,-23.1081248113,60.0033760071,0.0003051711,97.1335754395,108.9226989746,11.7891235352 +"2011-11-29 20:18:50.666",134164.0625,-142.9270222697,134.7528076172,-143.2752253136,0.0592862926,-66.2854969137,202.3510742188,96.5061470097,201.8967437744,-23.0724951295,60.0033912659,0.0004831888,97.1521911621,108.9203414917,11.7681503296 +"2011-11-29 20:18:50.700",134164.515625,-142.8861367573,134.6198272705,-143.2386428204,0.1108612418,-3.4056603862,202.3314361572,96.5663551272,201.6148529053,-23.0632555911,60.00340271,0.0001780316,97.153968811,108.9184036255,11.7644348145 +"2011-11-29 20:18:50.733",134162.609375,-142.8458523016,134.5877838135,-143.1989184402,0.0893390477,22.8255257344,202.2876739502,96.633864717,201.5640563965,-23.0371796364,60.0033874512,-0.0006357813,97.1378707886,108.9276199341,11.7897491455 +"2011-11-29 20:18:50.766",134161.890625,-142.805103393,134.6578674316,-143.1425830399,0.0035184934,-49.7708303309,202.2744598389,96.7196450628,201.7005157471,-23.005391936,60.0033798218,"1.39698386192322E-08",97.1418304443,108.940246582,11.7984161377 +"2011-11-29 20:18:50.800",134164.734375,-142.7637944089,134.7144012451,-143.0638582795,0.0121316835,-120.5837659473,202.4463195801,96.7933974454,201.6869506836,-22.9218860432,60.0033950806,0.0006103562,97.1415863037,108.9029464722,11.7613601685 +"2011-11-29 20:18:50.833",134166.53125,-142.723250406,134.6995239258,-142.9899419723,0.1091507301,-22.1345598923,202.4413604736,96.8299048065,201.7149200439,-22.835730037,60.0033950806,-0.0004577637,97.1368408203,108.932975769,11.7961349487 +"2011-11-29 20:18:50.866",134165.203125,-142.6823512332,134.6758880615,-142.9622933666,0.1462489516,-2.153912321,202.3790893555,96.8748064701,201.7633209229,-22.8251329985,60.0033912659,0.0004323386,97.1461486816,108.9149475098,11.7687988281 +"2011-11-29 20:18:50.900",134162.4375,-142.6405777963,134.6743469238,-142.9480592523,0.0418543257,-17.2325621533,202.3367004395,96.8813497914,201.7124786377,-22.7865731656,60.0034179688,0.0007629488,97.1463775635,108.9092254639,11.7628479004 +"2011-11-29 20:18:50.933",134162.90625,-142.5996513028,134.6603088379,-142.929740685,0.1340715885,-108.6810753185,202.2308349609,96.8577036765,201.6418304443,-22.7380071055,60.0034255981,-0.0003814884,97.1476287842,108.9053115845,11.7576828003 +"2011-11-29 20:18:50.966",134166.53125,-142.5597083565,134.7394104004,-142.850018717,0.1857624799,-107.9084101686,202.4384613037,96.9466463998,201.6297149658,-22.6760897331,60.0033988953,-0.0007629488,97.1492004395,108.9213943481,11.7721939087 +"2011-11-29 20:18:51.000",134167.46875,-142.5202845046,134.8355255127,-142.7992021096,0.2173338532,-110.6086639853,202.5502624512,97.0219287449,201.7740478516,-22.6525341182,60.0033836365,-0.000534053,97.152671814,108.90675354,11.7540817261 +"2011-11-29 20:18:51.033",134167.171875,-142.4792487281,134.7668609619,-142.8113052048,0.1251070946,-118.3238066151,202.287979126,96.9871904028,201.9010620117,-22.6241068709,60.0033874512,0.0001271674,97.1498794556,108.9056396484,11.7557601929 +"2011-11-29 20:18:51.066",134166.984375,-142.4376801968,134.6770629883,-142.7759794664,0.0438984111,49.1295063037,202.2270965576,96.9999491961,201.850189209,-22.5489150259,60.0033836365,-0.0001271814,97.144493103,108.9105300903,11.7660369873 +"2011-11-29 20:18:51.100",134165.5,-142.3967673637,134.6996459961,-142.7261327458,0.0283191279,142.3320718118,202.3483581543,97.0675065972,201.7459564209,-22.5113950892,60.0033836365,0.0002543349,97.1338043213,108.9009094238,11.7671051025 +"2011-11-29 20:18:51.133",134163.765625,-142.3558955117,134.7100524902,-142.6933068567,0.0654056296,-149.4399491528,202.3444976807,97.1020195431,201.7232971191,-22.4858057855,60.0034103394,0.0009918166,97.1425018311,108.9207000732,11.7781982422 +"2011-11-29 20:18:51.166",134163.453125,-142.3153788295,134.6824798584,-142.6454272306,0.1052939892,-102.5714779361,202.2608337402,97.1430211687,201.7085418701,-22.4525530095,60.0034103394,0,97.1479187012,108.9239349365,11.7760162354 +"2011-11-29 20:18:51.200",134165.1875,-142.2747528643,134.708190918,-142.5955668496,0.0866399407,-124.9954397737,202.3582611084,97.2280365333,201.6855926514,-22.4260126019,60.00340271,-0.0003560213,97.1511917114,108.9067993164,11.755607605 +"2011-11-29 20:18:51.233",134166.890625,-142.2335941444,134.7178039551,-142.5614978661,0.0970959738,15.5133352373,202.4427337646,97.2838801599,201.8021697998,-22.4166654881,60.00340271,0,97.1342697144,108.9283676147,11.7940979004 +"2011-11-29 20:18:51.266",134167.296875,-142.1932823679,134.6973876953,-142.5038100883,0.1760911793,-1.5842572553,202.5053863525,97.3139193319,201.725189209,-22.3523370589,60.0033950806,-0.0004323386,97.1250305176,108.916267395,11.7912368774 +"2011-11-29 20:18:51.300",134165.34375,-142.1535853085,134.7002563477,-142.4524880469,0.1319283694,-45.4650654177,202.5149383545,97.3229625024,201.6045227051,-22.2641046752,60.0033721924,-0.0007374957,97.1461868286,108.9055633545,11.7593765259 +"2011-11-29 20:18:51.333",134164.21875,-142.112658815,134.6763305664,-142.451190311,0.0403235517,9.3237281652,202.3020629883,97.3580969954,201.7645874023,-22.2653921659,60.0033798218,0.0006103562,97.1415176392,108.932800293,11.7912826538 +"2011-11-29 20:18:51.366",134164,-142.0707351138,134.6486358643,-142.4278583848,0.1360694021,93.6705188437,202.2250823975,97.4467186999,201.7979431152,-22.2701032888,60.0033988953,0.0004577637,97.157699585,108.9221343994,11.7644348145 +"2011-11-29 20:18:51.400",134163.890625,-142.0300545071,134.663772583,-142.3503220773,0.2416366786,137.2614486551,202.1971893311,97.5410572727,201.7550811768,-22.1738044517,60.0033874512,-0.0007375097,97.1353988647,108.9219284058,11.786529541 +"2011-11-29 20:18:51.433",134163.296875,-141.9898246929,134.626449585,-142.2960903753,0.1006844714,-173.7808718829,202.0933227539,97.5634739536,201.7015075684,-22.1404458078,60.0033836365,0.0003560353,97.135887146,108.9043121338,11.7684249878 +"2011-11-29 20:18:51.466",134162.28125,-141.9493489919,134.58253479,-142.2429241828,0.2438559383,-48.7781442973,202.2218933105,97.5701060673,201.5419616699,-22.1244956086,60.0033950806,0.0001780316,97.140007019,108.9212493896,11.7812423706 +"2011-11-29 20:18:51.500",134162.375,-141.9088186494,134.5654296875,-142.2057952745,0.20550704,-2.9224560921,202.3251037598,97.597174107,201.5289001465,-22.0460764992,60.0033836365,-0.0006357953,97.1523895264,108.9239883423,11.7715988159 +"2011-11-29 20:18:51.533",134164.46875,-141.8672637785,134.647354126,-142.2227068229,0.1771603823,72.011463061,202.2385253906,97.6008145978,201.8522644043,-22.017584365,60.0033836365,0,97.1511230469,108.9041900635,11.7530670166 +"2011-11-29 20:18:51.566",134164.25,-141.8265695114,134.759185791,-142.1899765564,0.1061625332,64.4560990464,202.3603515625,97.6576759226,202.0136566162,-22.023830573,60.0033836365,"1.39698386192322E-08",97.1398010254,108.9303512573,11.7905502319 +"2011-11-29 20:18:51.600",134164.453125,-141.7866538859,134.7649078369,-142.1197485513,0.0783282965,-15.4112922111,202.516204834,97.7294202297,201.8265838623,-21.986225259,60.0033798218,-0.0001271814,97.1531677246,108.9082260132,11.7550582886 +"2011-11-29 20:18:51.633",134167.25,-141.7460689018,134.7400970459,-142.044384244,0.1448116899,-49.4395183448,202.4942016602,97.7760909123,201.7342376709,-21.9052567815,60.0033836365,0.0003306102,97.1405639648,108.9163208008,11.7757568359 +"2011-11-29 20:18:51.666",134167.453125,-141.7047872385,134.7031860352,-141.9924748063,0.2260224372,-40.0162956677,202.4787445068,97.7881871773,201.6799926758,-21.8350817104,60.00340271,0.0004323386,97.1412200928,108.933380127,11.7921600342 +"2011-11-29 20:18:51.700",134166.40625,-141.6648852733,134.6638031006,-141.963432842,0.1773700267,-40.559917254,202.4117431641,97.8269689914,201.616897583,-21.8024146232,60.0033721924,-0.0009663915,97.1567840576,108.9194946289,11.7627105713 +"2011-11-29 20:18:51.733",134166.375,-141.6250652705,134.6632537842,-141.9373415193,0.0725853965,-174.8075449378,202.3718109131,97.8906536752,201.5588989258,-21.7534080159,60.0033531189,-0.0001525786,97.1467514038,108.9292831421,11.7825317383 +"2011-11-29 20:18:51.766",134165.671875,-141.584138777,134.7111968994,-141.9135997818,0.1914256066,143.2973141454,202.406463623,97.9527537552,201.6784820557,-21.7269598159,60.0033798218,0.0007883599,97.1291503906,108.8980102539,11.7688598633 +"2011-11-29 20:18:51.800",134164.421875,-141.543485491,134.7366638184,-141.881798421,0.107946299,161.8552659694,202.3865661621,97.9774039079,201.7649078369,-21.7150377207,60.0033798218,-0.0001780177,97.1526641846,108.9276275635,11.7749633789 +"2011-11-29 20:18:51.833",134161.90625,-141.5025316768,134.7282714844,-141.8322932099,0.0971782953,-126.4943384474,202.3571014404,97.983510097,201.7360076904,-21.6548432635,60.0033798218,0,97.1380844116,108.9279937744,11.7899093628 +"2011-11-29 20:18:51.866",134162.859375,-141.4614822399,134.7197265625,-141.7647562994,0.1580851823,-89.7950148671,202.3091583252,98.0467781393,201.754486084,-21.6111129773,60.00340271,0.0007120706,97.1479873657,108.9327316284,11.7847442627 +"2011-11-29 20:18:51.900",134166.84375,-141.420651369,134.7045898438,-141.712532673,0.1215962172,-99.4811588461,202.2964477539,98.1001902186,201.7291870117,-21.54793202,60.0034065247,0.0001525646,97.1546173096,108.9298019409,11.7751846313 +"2011-11-29 20:18:51.933",134167.71875,-141.379670234,134.7018280029,-141.6691609718,0.0758190304,-146.4427801827,202.3174743652,98.1287677301,201.7149810791,-21.4646685989,60.0034065247,"7.63172283768654E-05",97.1536331177,108.9019470215,11.7483139038 +"2011-11-29 20:18:51.966",134166.1875,-141.3377055517,134.670425415,-141.6373322902,0.0667638481,-118.9101510346,202.30809021,98.1654595063,201.6439056396,-21.4467939938,60.0034179688,0.0003305962,97.1388397217,108.9278717041,11.7890319824 +"2011-11-29 20:18:52.000",134163.21875,-141.2964648695,134.6514434814,-141.6190956851,0.1316514909,-111.1096651911,202.2302093506,98.218489095,201.612121582,-21.4751700147,60.0034255981,-0.0002288818,97.1452255249,108.9407196045,11.7954940796 +"2011-11-29 20:18:52.033",134162.46875,-141.2567678101,134.7433776855,-141.5861058715,0.2035604417,-136.1779620866,202.3863830566,98.2538763051,201.6426391602,-21.4309616153,60.0034179688,-0.0002034567,97.1396560669,108.9167633057,11.7771072388 +"2011-11-29 20:18:52.066",134164.46875,-141.2161691656,134.8018188477,-141.5158368853,0.1331965923,-133.8018758782,202.6400146484,98.2875696283,201.6357879639,-21.3233144189,60.0034103394,0.0001525925,97.1456756592,108.9159164429,11.7702407837 +"2011-11-29 20:18:52.100",134165,-141.1748601815,134.6839904785,-141.4731345426,0.0750998929,39.3418554683,202.5393066406,98.3325669145,201.5901031494,-21.2776136232,60.0034217834,"-7.62753188610077E-05",97.146812439,108.9248428345,11.7780303955 +"2011-11-29 20:18:52.133",134163.9375,-141.1345620654,134.5988464355,-141.4851829963,0.1621936113,66.1009588627,202.2993621826,98.3375188017,201.6431274414,-21.285946454,60.0033836365,-0.0011444092,97.1546478271,108.9249572754,11.7703094482 +"2011-11-29 20:18:52.166",134163.96875,-141.094578138,134.6152038574,-141.438846993,0.084248811,24.7419521646,202.2398376465,98.3821814086,201.6895141602,-21.2650938864,60.0033569336,-0.0005086139,97.1333389282,108.9095535278,11.7762145996 +"2011-11-29 20:18:52.200",134164.375,-141.0537199464,134.6396484375,-141.3538521189,0.0324700326,156.7467216023,202.357208252,98.4716227358,201.5484161377,-21.1704906438,60.0033798218,0.0008646492,97.15625,108.9358978271,11.7796478271 +"2011-11-29 20:18:52.233",134163.84375,-141.0120284717,134.626373291,-141.3134447198,0.1681789309,148.789469257,202.3395843506,98.5431143259,201.4834594727,-21.1244637065,60.00340271,0.0003814744,97.1300125122,108.911819458,11.7818069458 +"2011-11-29 20:18:52.266",134165.6875,-140.9708287706,134.5793457031,-141.2802909816,0.1272907257,145.8310137991,202.2795715332,98.6083494626,201.4220581055,-21.1338381412,60.0033988953,"-2.54251062870026E-05",97.1474456787,108.9239807129,11.7765350342 +"2011-11-29 20:18:52.300",134165.59375,-140.9304077111,134.6320648193,-141.2176035054,0.0372724608,-56.1346712598,202.4463653564,98.6222352372,201.4481506348,-21.067216476,60.00340271,"5.08641824126244E-05",97.144317627,108.9172592163,11.7729415894 +"2011-11-29 20:18:52.333",134163.140625,-140.8909292177,134.7293548584,-141.1733438795,0.1639405936,-57.4880220175,202.5245056152,98.6320912002,201.6474151611,-21.0242204352,60.00340271,"-1.39698386192322E-08",97.1438827515,108.9125747681,11.7686920166 +"2011-11-29 20:18:52.366",134162.984375,-140.8506857431,134.7384490967,-141.1478672739,0.1427245587,-99.151253879,202.452041626,98.6789941092,201.6588134766,-21.001178792,60.0033836365,-0.0004068715,97.1266174316,108.9230728149,11.7964553833 +"2011-11-29 20:18:52.400",134163.765625,-140.8090625703,134.7460327148,-141.1102329316,0.1604990661,-155.3517237662,202.3828735352,98.6967252803,201.7021026611,-20.9053102568,60.0033836365,0,97.1389312744,108.9180908203,11.7791595459 +"2011-11-29 20:18:52.433",134163.703125,-140.7679038504,134.7197113037,-141.0990860629,0.1772147268,152.3006919243,202.3374633789,98.7146203759,201.7540283203,-20.8660742351,60.0033836365,-0.0001271674,97.1488494873,108.92212677,11.7732772827 +"2011-11-29 20:18:52.466",134164.9375,-140.7278926022,134.6947937012,-141.09537044,0.1231890097,111.3798333237,202.3685913086,98.7541261901,201.7546539307,-20.9110288327,60.0033721924,-0.0004323386,97.1410598755,108.9057769775,11.7647171021 +"2011-11-29 20:18:52.500",134165.265625,-140.6880316182,134.6923065186,-141.0445401722,0.1360786259,4.3055851938,202.4182281494,98.7849986451,201.7721557617,-20.8954986901,60.0033798218,0.0005086558,97.1572113037,108.9017944336,11.7445831299 +"2011-11-29 20:18:52.533",134164.609375,-140.6469275398,134.683380127,-140.9595999396,0.061337024,-13.7179004857,202.3392181396,98.8470714043,201.7501983643,-20.779522078,60.0034065247,0.0003814744,97.1338882446,108.937461853,11.8035736084 +"2011-11-29 20:18:52.566",134164.6875,-140.6064654992,134.6307678223,-140.8897407648,0.0529339015,143.4467313636,202.2561950684,98.9011528422,201.6259155273,-20.6653998622,60.0033836365,-0.0007629348,97.1262969971,108.9013824463,11.7750854492 +"2011-11-29 20:18:52.600",134164.953125,-140.5660581,134.5936584473,-140.8590322343,0.0998956338,45.5704176706,202.2537841797,98.9497701287,201.6287384033,-20.6640440697,60.003364563,-0.0003560353,97.1408691406,108.9163513184,11.7754821777 +"2011-11-29 20:18:52.633",134163.640625,-140.5256097198,134.6430969238,-140.8529670263,0.2049354017,60.5567440493,202.2873382568,98.9954231131,201.8344268799,-20.6797705802,60.0033683777,0.000279732,97.1313781738,108.9157791138,11.7844009399 +"2011-11-29 20:18:52.666",134162.78125,-140.4842460942,134.6849822998,-140.8303727606,0.1968348473,91.7457237243,202.3167724609,99.026903455,201.8595275879,-20.642950738,60.0033912659,0.0007120706,97.1272506714,108.9064331055,11.7791824341 +"2011-11-29 20:18:52.700",134161.765625,-140.443223978,134.6368560791,-140.7685868693,0.0148719521,-107.4788595717,202.3361358643,99.0647017218,201.5637207031,-20.6035371314,60.0033912659,-0.0003051572,97.1245956421,108.9275894165,11.8029937744 +"2011-11-29 20:18:52.733",134162.78125,-140.4019559751,134.618927002,-140.7124153936,0.1779539287,-48.7080187451,202.3322143555,99.1026297623,201.532409668,-20.5772870068,60.0034065247,0.0007883739,97.1389160156,108.9274597168,11.7885437012 +"2011-11-29 20:18:52.766",134165.09375,-140.3610977834,134.6310119629,-140.7041781854,0.0942293406,49.7364437435,202.2001037598,99.1442324445,201.7870635986,-20.5474305424,60.0034179688,0,97.1499938965,108.9132385254,11.7632446289 +"2011-11-29 20:18:52.800",134164.296875,-140.3212367994,134.6205596924,-140.6543861064,0.0887866691,114.2085356779,202.0562133789,99.2022480713,201.8301544189,-20.486524038,60.0034179688,"-2.54251062870026E-05",97.1463165283,108.894241333,11.7479248047 +"2011-11-29 20:18:52.833",134162.640625,-140.2806518154,134.7195281982,-140.5841854221,0.1190064102,-119.9684068842,202.0743865967,99.2188317706,201.9750366211,-20.3989797959,60.0033988953,-0.0002288818,97.1568145752,108.9071731567,11.7503585815 +"2011-11-29 20:18:52.866",134163.140625,-140.2394794351,134.7460174561,-140.5579574957,0.086130023,-147.9519514609,202.2487182617,99.2459203009,201.9063415527,-20.3583538307,60.00340271,0.0001780316,97.1389923096,108.930519104,11.7915267944 +"2011-11-29 20:18:52.900",134165.703125,-140.1990310548,134.6868133545,-140.4994227745,0.0283244438,120.0697668915,202.471572876,99.3269673256,201.5954589844,-20.3171011957,60.0033836365,-0.0006612204,97.1468658447,108.9233551025,11.7764892578 +"2011-11-29 20:18:52.933",134166.828125,-140.1580089387,134.6552886963,-140.4838909243,0.0414993092,110.678338745,202.3578796387,99.3486258554,201.6232147217,-20.3046173174,60.0033874512,0.0003814744,97.1379623413,108.9135894775,11.7756271362 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..e74e5a5 --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Polar - Integer Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,148 @@ +"2011-11-29 20:13:29.333",-175.519890960376,134170.48185,-176.012634664189,134.5806,75.6246993793174,0.21362,63.9707378263564,201.65728,-55.9435991165736,202.08452,60.003,0,97.1514053344727,108.887939453125,11.7365341186523 +"2011-11-29 20:13:29.366",-175.479783914717,134170.48185,-175.961068462627,134.5806,0,0,63.9879265602103,201.65728,-55.9034920709144,202.08452,60.013,0,97.1507415771484,108.913871765137,11.7631301879883 +"2011-11-29 20:13:29.400",-175.439676869058,134170.48185,-175.903772683114,134.36698,-163.97479138849,0.21362,64.056681495626,201.44366,-55.8748441811579,201.8709,60.003,0,97.1621017456055,108.913604736328,11.7515029907227 +"2011-11-29 20:13:29.433",-175.399569823399,134170.48185,-175.857936059504,134.36698,-169.160059434424,0.21362,64.1368955869443,201.44366,-55.8633850252553,201.8709,60.003,0,97.1711273193359,108.892799377441,11.7216720581055 +"2011-11-29 20:13:29.466",-175.35946277774,134170.48185,-175.817829013844,134.36698,20.3342721491929,0.21362,64.1884617885061,201.44366,-55.8175484016448,201.8709,60.023,0,97.1606140136719,108.911491394043,11.7508773803711 +"2011-11-29 20:13:29.500",-175.319355732081,134170.48185,-175.75480365638,134.36698,-9.69444589361353,0.21362,64.1999209444087,201.44366,-55.7316047323752,201.8709,60.003,0,97.1519622802734,108.907653808594,11.7556915283203 +"2011-11-29 20:13:29.533",-175.279248686421,134170.48185,-175.703237454818,134.36698,-57.1639992202022,0.21362,64.20565052236,201.65728,-55.6743089528621,201.65728,60.003,0,97.1627807617188,108.918716430664,11.7559356689453 +"2011-11-29 20:13:29.566",-175.233412062811,134161.32658,-175.720426188672,134.5806,-148.344502737321,0.21362,64.2113801003114,201.44366,-55.6743089528621,201.8709,60.003,0,97.1703491210938,108.883918762207,11.7135696411133 +"2011-11-29 20:13:29.600",-175.193305017152,134170.48185,-175.697507876867,134.5806,170.174194731806,0.21362,64.2400279900679,201.44366,-55.6227427513003,202.08452,60.003,0,97.170166015625,108.894172668457,11.724006652832 +"2011-11-29 20:13:29.633",-175.158927549444,134170.48185,-175.600105051695,134.5806,0,0,64.3145125034349,201.65728,-55.5310695040794,201.8709,60.003,0,97.1531219482422,108.900321960449,11.747200012207 +"2011-11-29 20:13:29.666",-175.118820503785,134170.48185,-175.542809272182,134.5806,0,0,64.4061857506558,201.65728,-55.5024216143228,201.8709,60.003,0,97.1613311767578,108.909461975098,11.7481307983398 +"2011-11-29 20:13:29.700",-175.072983880174,134170.48185,-175.53707969423,134.5806,110.523558680736,0.21362,64.446292796315,201.65728,-55.4852328804689,201.8709,60.003,0,97.1696243286133,108.898735046387,11.7291107177734 +"2011-11-29 20:13:29.733",-175.032876834515,134170.48185,-175.485513492669,134.5806,133.161121166355,0.21362,64.446292796315,201.65728,-55.3878300552967,201.8709,60.013,0,97.1571578979492,108.882125854492,11.724967956543 +"2011-11-29 20:13:29.766",-174.992769788856,134170.48185,-175.416758557253,134.5806,-180,0,64.4806702640228,201.65728,-55.3133455419297,201.8709,60.003,0,97.1832580566406,108.893295288086,11.7100372314453 +"2011-11-29 20:13:29.800",-174.952662743197,134170.48185,-175.370921933642,134.36698,0,0,64.5666139332925,201.44366,-55.3076159639784,201.8709,60.003,0,97.1749649047852,108.908988952637,11.7340240478516 +"2011-11-29 20:13:29.833",-174.912555697538,134170.48185,-175.353733199788,134.5806,180,0,64.6124505569029,201.65728,-55.3076159639784,201.8709,60.023,0,97.1494369506836,108.928733825684,11.779296875 +"2011-11-29 20:13:29.866",-174.872448651879,134170.48185,-175.348003621837,134.5806,85.1472579343916,0.21362,64.6468280246108,201.65728,-55.3076159639784,201.8709,60.003,0,97.150520324707,108.901405334473,11.7508850097656 +"2011-11-29 20:13:29.900",-174.832341606219,134170.48185,-175.313626154129,134.5806,87.1354214834956,0.21362,64.6812054923186,201.65728,-55.2617793403679,201.8709,60.003,0,97.1672668457031,108.919006347656,11.7517395019531 +"2011-11-29 20:13:29.933",-174.786504982609,134170.48185,-175.239141640762,134.5806,180,0,64.7041238041239,201.65728,-55.170106093147,201.8709,60.003,0,97.1659851074219,108.92399597168,11.7580108642578 +"2011-11-29 20:13:29.966",-174.74639793695,134170.48185,-175.158927549444,134.5806,-131.688619632868,0.21362,64.7728787395396,201.44366,-55.1185398915852,201.8709,60.003,0,97.1724548339844,108.902503967285,11.7300491333008 +"2011-11-29 20:13:30.000",-174.706290891291,134170.48185,-175.136009237639,134.36698,0,0,64.8072562072474,201.44366,-55.1013511577313,201.8709,60.003,0,97.1749572753906,108.894897460938,11.7199401855469 +"2011-11-29 20:13:30.033",-174.666183845631,134170.48185,-175.107361347882,134.36698,-24.0756865513972,0.21362,64.8244449411013,201.44366,-55.0669736900234,202.08452,60.003,0,97.1591567993164,108.914352416992,11.7551956176758 +"2011-11-29 20:13:30.066",-174.626076799972,134170.48185,-175.084443036077,134.36698,-1.07716065484595,0.21362,64.8702815647118,201.44366,-55.0383258002669,201.8709,60.003,0,97.1730270385742,108.899780273438,11.7267532348633 +"2011-11-29 20:13:30.100",-174.585969754313,134170.48185,-175.044335990418,134.36698,28.997394011571,0.21362,64.9275773442249,201.44366,-54.9867595987051,201.8709,60.003,0,97.1567687988281,108.901840209961,11.7450714111328 +"2011-11-29 20:13:30.133",-174.545862708654,134170.48185,-174.992769788856,134.36698,41.2128542037601,0.21362,64.9562252339814,201.65728,-54.8893567735329,201.8709,60.003,0,97.1619338989258,108.888381958008,11.726448059082 +"2011-11-29 20:13:30.166",-174.505755662995,134170.48185,-174.975581055002,134.5806,73.2068174838653,0.21362,64.9562252339814,201.65728,-54.8721680396789,201.8709,60.003,0,97.1672897338867,108.913017272949,11.7457275390625 +"2011-11-29 20:13:30.200",-174.465648617336,134170.48185,-174.981310632953,134.5806,68.7148283700396,0.21362,64.9963322796406,201.65728,-54.8950863514842,201.8709,60.023,0,97.1755981445313,108.916893005371,11.7412948608398 +"2011-11-29 20:13:30.233",-174.419811993725,134170.48185,-174.906826119586,134.36698,43.292691000085,0.42724,65.059357637105,201.65728,-54.8206018381172,201.8709,60.003,0,97.1674728393555,108.907218933105,11.73974609375 +"2011-11-29 20:13:30.266",-174.379704948066,134170.48185,-174.815152872365,134.36698,11.2815389861259,0.21362,65.1166534166181,201.8709,-54.7346581688475,201.8709,60.003,0,97.1779174804688,108.920379638672,11.7424621582031 +"2011-11-29 20:13:30.300",-174.339597902407,134170.48185,-174.775045826706,134.36698,-13.9114152657764,0.21362,65.1510308843259,201.65728,-54.7231990129449,201.8709,60.003,0,97.1774597167969,108.901176452637,11.7237167358398 +"2011-11-29 20:13:30.333",-174.299490856748,134170.48185,-174.763586670804,134.5806,-180,0,65.1567604622772,201.65728,-54.7117398570423,201.8709,60.003,0,97.1674118041992,108.897216796875,11.7298049926758 +"2011-11-29 20:13:30.366",-174.259383811089,134170.48185,-174.729209203096,134.5806,-172.51186253594,0.21362,65.1968675079364,201.65728,-54.6487144995779,201.8709,60.003,0,97.1832046508789,108.902069091797,11.718864440918 +"2011-11-29 20:13:30.400",-174.219276765429,134170.48185,-174.631806377924,134.36698,180,0,65.3114590669625,201.44366,-54.5742299862109,201.65728,60.003,0,97.1534042358398,108.908470153809,11.7550659179688 +"2011-11-29 20:13:30.433",-174.17916971977,134170.48185,-174.597428910216,134.36698,4.89305957041723,0.21362,65.357295690573,201.44366,-54.5513116744057,201.8709,60.003,0,97.1569519042969,108.911415100098,11.7544631958008 +"2011-11-29 20:13:30.466",-174.139062674111,134170.48185,-174.585969754313,134.36698,4.033622877721,0.21362,65.3802140023782,201.44366,-54.5513116744057,201.8709,60.003,0,97.149284362793,108.923675537109,11.7743911743164 +"2011-11-29 20:13:30.500",-174.093226050501,134170.48185,-174.540133130703,134.36698,0,0,65.4031323141835,201.65728,-54.5054750507952,201.65728,60.003,0,97.1769485473633,108.91438293457,11.737434387207 +"2011-11-29 20:13:30.533",-174.053119004841,134170.48185,-174.494296507092,134.36698,-110.626691083859,0.21362,65.4031323141835,201.44366,-54.4424496933308,201.65728,60.003,0,97.1573028564453,108.909309387207,11.7520065307617 +"2011-11-29 20:13:30.566",-174.013011959182,134170.48185,-174.459919039384,134.36698,-91.5414669280516,0.21362,65.4604280936966,201.44366,-54.4309905374282,201.8709,60.003,0,97.1570434570313,108.886322021484,11.7292785644531 +"2011-11-29 20:13:30.600",-173.972904913523,134170.48185,-174.431271149628,134.5806,0,0,65.5349126070636,201.65728,-54.408072225623,201.8709,60.003,0,97.1548690795898,108.913635253906,11.7587661743164 +"2011-11-29 20:13:30.633",-173.932797867864,134170.48185,-174.385434526017,134.5806,180,0,65.5750196527227,201.65728,-54.3393172902073,201.8709,60.003,0,97.1826019287109,108.919464111328,11.7368621826172 +"2011-11-29 20:13:30.666",-173.892690822205,134170.48185,-174.316679590602,134.5806,-58.3786697458796,0.21362,65.597937964528,201.65728,-54.2533736209377,201.8709,60.003,0,97.1535491943359,108.906539916992,11.7529907226563 +"2011-11-29 20:13:30.700",-173.852583776546,134170.48185,-174.259383811089,134.36698,-38.6803807492819,0.21362,65.6495041660897,201.44366,-54.1960778414246,201.65728,60.003,0,97.1692657470703,108.888938903809,11.7196731567383 +"2011-11-29 20:13:30.733",-173.812476730887,134170.48185,-174.242195077235,134.36698,-10.3877248257218,0.21362,65.6838816337976,201.44366,-54.184618685522,201.8709,60.003,0,97.160400390625,108.900939941406,11.7405395507813 +"2011-11-29 20:13:30.766",-173.766640107276,134170.48185,-174.247924655186,134.36698,13.1321926643985,0.21362,65.729718257408,201.44366,-54.2189961532298,201.8709,60.003,0,97.1591339111328,108.911834716797,11.7527008056641 +"2011-11-29 20:13:30.800",-173.726533061617,134170.48185,-174.213547187478,134.36698,72.9146090083486,0.21362,65.7927436148724,201.65728,-54.184618685522,201.65728,60.003,0,97.16162109375,108.899421691895,11.7378005981445 +"2011-11-29 20:13:30.833",-173.686426015958,134170.48185,-174.150521830014,134.5806,135.006045266676,0.21362,65.7984731928237,201.65728,-54.0757567044471,201.8709,60.003,0,97.1684875488281,108.907470703125,11.7389831542969 +"2011-11-29 20:13:30.866",-173.65204854825,134170.48185,-174.070307738695,134.5806,-180,0,65.8557689723368,201.65728,-54.0127313469827,201.8709,60.003,0,97.1673889160156,108.904815673828,11.7374267578125 +"2011-11-29 20:13:30.900",-173.606211924639,134170.48185,-174.035930270988,134.36698,-6.97289636674212,0.21362,65.9245239077525,201.44366,-54.0012721910801,201.8709,60.003,0,97.1497116088867,108.894897460938,11.7451858520508 +"2011-11-29 20:13:30.933",-173.56610487898,134170.48185,-174.030200693036,134.36698,44.3125558754179,0.21362,65.9417126416064,201.44366,-53.9611651454209,201.8709,60.013,0,97.1676864624023,108.910163879395,11.7424774169922 +"2011-11-29 20:13:30.966",-173.525997833321,134170.48185,-174.007282381231,134.5806,74.0089583970484,0.21362,65.9531717975091,201.44366,-53.9325172556644,202.08452,60.003,0,97.1542053222656,108.90673828125,11.7525329589844 +"2011-11-29 20:13:31.000",-173.485890787662,134170.48185,-173.932797867864,134.5806,180,0,66.0104675770221,201.44366,-53.8694918982,201.8709,60.003,0,97.187255859375,108.927581787109,11.7403259277344 +"2011-11-29 20:13:31.033",-173.445783742003,134170.48185,-173.8697725104,134.5806,-180,0,66.04484504473,201.44366,-53.795007384833,201.8709,60.003,0,97.1651611328125,108.890502929688,11.725341796875 +"2011-11-29 20:13:31.066",-173.405676696344,134170.48185,-173.846854198594,134.5806,-180,0,66.04484504473,201.44366,-53.7549003391738,202.08452,60.003,0,97.1422958374023,108.902961730957,11.7606658935547 +"2011-11-29 20:13:31.100",-173.365569650684,134170.48185,-173.812476730887,134.5806,-145.049995415319,0.21362,66.1078704021944,201.65728,-53.7549003391738,202.08452,60.003,0,97.1660079956055,108.935081481934,11.7690734863281 +"2011-11-29 20:13:31.133",-173.325462605025,134170.48185,-173.78382884113,134.5806,-150.980108594923,0.21362,66.1537070258048,201.65728,-53.7377116053199,201.8709,60.003,0,97.1579208374023,108.890426635742,11.7325057983398 +"2011-11-29 20:13:31.166",-173.279625981415,134170.48185,-173.726533061617,134.5806,-142.185206439665,0.21362,66.1823549155614,201.65728,-53.6689566699042,201.8709,60.003,0,97.1811065673828,108.901145935059,11.7200393676758 +"2011-11-29 20:13:31.200",-173.239518935756,134170.48185,-173.69788517186,134.5806,-146.929296983348,0.21362,66.2224619612205,201.44366,-53.646038358099,201.8709,60.003,0,97.1674575805664,108.915542602539,11.7480850219727 +"2011-11-29 20:13:31.233",-173.199411890097,134170.48185,-173.686426015958,134.5806,-165.854092956519,0.21362,66.2625690068797,201.44366,-53.6403087801477,201.8709,60.003,0,97.1669158935547,108.898391723633,11.7314758300781 +"2011-11-29 20:13:31.266",-173.159304844437,134170.48185,-173.646318970299,134.5806,180,0,66.2854873186849,201.65728,-53.5658242667807,201.8709,60.003,0,97.1669311523438,108.911796569824,11.7448654174805 +"2011-11-29 20:13:31.300",-173.119197798778,134170.48185,-173.594752768737,134.36698,40.559682317311,0.21362,66.342783098198,201.65728,-53.497069331365,201.8709,60.003,0,97.1742477416992,108.915061950684,11.7408142089844 +"2011-11-29 20:13:31.333",-173.079090753119,134170.48185,-173.514538677419,134.5806,32.1486618847905,0.21362,66.4115380336137,201.65728,-53.422584817998,201.8709,60.003,0,97.1436080932617,108.92130279541,11.7776947021484 +"2011-11-29 20:13:31.366",-173.03898370746,134170.48185,-173.480161209711,134.5806,180,0,66.4401859233703,201.8709,-53.3882073502901,202.08452,60.003,0,97.1575622558594,108.911567687988,11.7540054321289 +"2011-11-29 20:13:31.400",-172.998876661801,134170.48185,-173.485890787662,134.5806,96.3142053614914,0.21362,66.4516450792729,201.65728,-53.3767481943875,201.8709,60.003,0,97.1635437011719,108.894332885742,11.7307891845703 +"2011-11-29 20:13:31.433",-172.95304003819,134170.48185,-173.417135852246,134.5806,115.112950619734,0.21362,66.5261295926399,201.65728,-53.3079932589718,201.8709,60.003,0,97.1637268066406,108.919357299805,11.7556304931641 +"2011-11-29 20:13:31.466",-172.912932992531,134170.48185,-173.325462605025,134.5806,156.881573884771,0.21362,66.6006141060069,201.65728,-53.2392383235561,201.8709,60.003,0,97.1667327880859,108.914337158203,11.7476043701172 +"2011-11-29 20:13:31.500",-172.872825946872,134170.48185,-173.273896403464,134.5806,-103.734008808436,0.21362,66.6349915737147,201.65728,-53.2335087456048,201.8709,60.003,0,97.1484222412109,108.929618835449,11.7811965942383 +"2011-11-29 20:13:31.533",-172.832718901213,134170.48185,-173.262437247561,134.5806,0,0,66.6808281973252,201.65728,-53.2277791676535,201.8709,60.003,0,97.1521606445313,108.903854370117,11.7516937255859 +"2011-11-29 20:13:31.566",-172.792611855554,134170.48185,-173.273896403464,134.5806,91.4154162131228,0.21362,66.7037465091304,201.65728,-53.1991312778969,202.08452,60.003,0,97.1770782470703,108.906044006348,11.7289657592773 +"2011-11-29 20:13:31.600",-172.752504809895,134170.48185,-173.239518935756,134.5806,130.64583644573,0.21362,66.732394398887,201.65728,-53.1647538101891,202.08452,60.023,0,97.1599578857422,108.909530639648,11.7495727539063 +"2011-11-29 20:13:31.633",-172.712397764235,134170.48185,-173.159304844437,134.5806,-177.67994184802,0.21362,66.7896901784001,201.65728,-53.107458030676,201.8709,60.003,0,97.1853485107422,108.900588989258,11.7152404785156 +"2011-11-29 20:13:31.666",-172.672290718576,134170.48185,-173.107738642876,134.5806,180,0,66.8240676461079,201.65728,-53.0444326732116,201.8709,60.003,0,97.1559906005859,108.909599304199,11.7536087036133 +"2011-11-29 20:13:31.700",-172.632183672917,134170.48185,-173.096279486973,134.5806,152.183319964698,0.21362,66.8240676461079,201.65728,-53.0043256275525,201.8709,60.003,0,97.1531982421875,108.898460388184,11.7452621459961 +"2011-11-29 20:13:31.733",-172.586347049307,134170.48185,-173.067631597216,134.5806,-168.495428392072,0.21362,66.8183380681566,201.65728,-52.9527594259907,202.08452,60.003,0,97.1588287353516,108.910591125488,11.7517623901367 +"2011-11-29 20:13:31.766",-172.546240003647,134170.48185,-173.027524551557,134.5806,-150.332666286425,0.21362,66.8699042697184,201.65728,-52.9355706921368,202.08452,60.003,0,97.1738967895508,108.896827697754,11.7229309082031 +"2011-11-29 20:13:31.800",-172.506132957988,134170.48185,-172.975958349996,134.5806,162.92054904545,0.21362,66.9787662507932,201.65728,-52.9011932244289,202.08452,60.013,0,97.1686553955078,108.906051635742,11.7373962402344 +"2011-11-29 20:13:31.833",-172.466025912329,134170.48185,-172.90720341458,134.5806,173.371299228636,0.21362,66.9959549846472,201.65728,-52.792331243354,202.08452,60.003,0,97.1519775390625,108.911178588867,11.7592010498047 +"2011-11-29 20:13:31.866",-172.42591886667,134170.48185,-172.844178057115,134.5806,-97.4028251722399,0.21362,67.0074141405498,201.65728,-52.7235763079384,201.8709,60.003,0,97.159309387207,108.901176452637,11.7418670654297 +"2011-11-29 20:13:31.900",-172.385811821011,134170.48185,-172.798341433505,134.5806,-180,0,67.0933578098194,201.65728,-52.7121171520357,201.8709,60.003,0,97.1727828979492,108.91569519043,11.7429122924805 +"2011-11-29 20:13:31.933",-172.345704775352,134170.48185,-172.752504809895,134.5806,-180,0,67.1678423231864,201.65728,-52.6834692622792,201.8709,60.003,0,97.1753616333008,108.911064147949,11.7357025146484 +"2011-11-29 20:13:31.966",-172.299868151741,134170.48185,-172.729586498089,134.5806,180,0,67.2136789467969,201.44366,-52.660550950474,201.8709,60.003,0,97.1461791992188,108.905899047852,11.7597198486328 +"2011-11-29 20:13:32.000",-172.259761106082,134170.48185,-172.706668186284,134.36698,-180,0,67.2423268365534,201.44366,-52.660550950474,201.8709,60.003,0,97.1472854614258,108.900444030762,11.7531585693359 +"2011-11-29 20:13:32.033",-172.219654060423,134170.48185,-172.683749874479,134.36698,-180,0,67.2652451483586,201.44366,-52.6490917945713,201.8709,60.003,0,97.1697235107422,108.917938232422,11.7482147216797 +"2011-11-29 20:13:32.066",-172.179547014764,134170.48185,-172.660831562674,134.5806,136.633245404847,0.21362,67.2996226160665,201.65728,-52.5803368591556,202.08452,60.003,0,97.1610870361328,108.897026062012,11.7359390258789 +"2011-11-29 20:13:32.100",-172.139439969105,134170.48185,-172.632183672917,134.5806,113.325322298926,0.21362,67.3397296617257,201.8709,-52.5230410796426,202.08452,60.003,0,97.1554794311523,108.904388427734,11.748908996582 +"2011-11-29 20:13:32.133",-172.099332923445,134170.48185,-172.574887893404,134.5806,78.8619109218065,0.21362,67.3683775514822,201.65728,-52.4829340339834,202.08452,60.003,0,97.1752777099609,108.904861450195,11.7295837402344 +"2011-11-29 20:13:32.166",-172.059225877786,134170.48185,-172.494673802086,134.5806,-41.9691584933328,0.21362,67.4084845971414,201.65728,-52.4313678324216,201.8709,60.003,0,97.1613998413086,108.908218383789,11.7468185424805 +"2011-11-29 20:13:32.200",-172.019118832127,134170.48185,-172.431648444621,134.36698,-67.3626479735309,0.21362,67.494428266411,201.65728,-52.3969903647138,201.8709,60.003,0,97.1692810058594,108.89762878418,11.7283477783203 +"2011-11-29 20:13:32.233",-171.979011786468,134170.48185,-172.403000554865,134.5806,-101.064025483126,0.21362,67.5230761561675,201.65728,-52.3740720529086,201.8709,60.003,0,97.1711196899414,108.893516540527,11.7223968505859 +"2011-11-29 20:13:32.266",-171.933175162857,134170.48185,-172.368623087157,134.5806,-106.24929352906,0.21362,67.5230761561675,201.65728,-52.3053171174929,201.8709,60.003,0,97.1559753417969,108.914398193359,11.7584228515625 +"2011-11-29 20:13:32.300",-171.89879769515,134170.48185,-172.3399751974,134.5806,-180,0,67.5803719356806,201.65728,-52.2652100718337,201.8709,60.013,0,97.1664581298828,108.907752990723,11.7412948608398 +"2011-11-29 20:13:32.333",-171.852961071539,134170.48185,-172.311327307644,134.5806,103.017811564522,0.21362,67.6204789813398,201.65728,-52.196455136418,202.08452,60.003,0,97.1758728027344,108.898315429688,11.7224426269531 +"2011-11-29 20:13:32.366",-171.81285402588,134170.48185,-172.254031528131,134.5806,137.429656740079,0.21362,67.6319381372424,201.65728,-52.0933227332945,202.08452,60.003,0,97.1690521240234,108.917449951172,11.7483978271484 +"2011-11-29 20:13:32.400",-171.772746980221,134170.48185,-172.20819490452,134.5806,156.600824565157,0.21362,67.7006930726581,201.65728,-52.0875931553431,201.8709,60.003,0,97.1702423095703,108.903633117676,11.7333908081055 +"2011-11-29 20:13:32.433",-171.732639934562,134170.48185,-172.168087858861,134.5806,0,0,67.7866367419277,201.65728,-52.121970623051,201.8709,60.003,0,97.1742477416992,108.91259765625,11.7383499145508 +"2011-11-29 20:13:32.466",-171.692532888902,134170.48185,-172.145169547056,134.5806,0,0,67.8324733655382,201.65728,-52.1277002010023,201.8709,60.003,0,97.1638870239258,108.903213500977,11.7393264770508 +"2011-11-29 20:13:32.500",-171.652425843243,134170.48185,-172.122251235251,134.36698,-180,0,67.8324733655382,201.44366,-52.0818635773918,201.8709,60.003,0,97.1674346923828,108.893798828125,11.7263641357422 +"2011-11-29 20:13:32.533",-171.612318797584,134170.48185,-172.07641461164,134.5806,-151.157725511414,0.21362,67.8496620993921,201.44366,-52.0131086419761,201.8709,60.003,0,97.1623229980469,108.890502929688,11.7281799316406 +"2011-11-29 20:13:32.566",-171.572211751925,134170.48185,-172.03057798803,134.5806,-180,0,67.9012283009539,201.65728,-51.9558128624631,201.8709,60.003,0,97.1391983032227,108.913948059082,11.7747497558594 +"2011-11-29 20:13:32.600",-171.526375128315,134170.48185,-171.996200520322,134.5806,72.4505131942926,0.21362,67.9642536584182,201.65728,-51.9157058168039,202.08452,60.003,0,97.1713104248047,108.902000427246,11.7306900024414 +"2011-11-29 20:13:32.633",-171.486268082655,134170.48185,-171.933175162857,134.5806,95.9475123726077,0.21362,68.0100902820287,201.65728,-51.8412213034369,201.8709,60.003,0,97.1598510742188,108.91886138916,11.7590103149414 +"2011-11-29 20:13:32.666",-171.446161036996,134170.48185,-171.893068117198,134.5806,-163.115354695794,0.21362,68.0272790158826,201.65728,-51.824032569583,201.8709,60.003,0,97.1710052490234,108.908638000488,11.7376327514648 +"2011-11-29 20:13:32.700",-171.406053991337,134170.48185,-171.875879383344,134.5806,-142.77535296865,0.21362,68.0673860615418,201.65728,-51.8354917254856,201.8709,60.003,0,97.1592483520508,108.908126831055,11.7488784790039 +"2011-11-29 20:13:32.733",-171.365946945678,134170.48185,-171.841501915637,134.36698,4.944625771979,0.21362,68.0731156394931,201.44366,-51.7610072121186,202.08452,60.003,0,97.1652984619141,108.910659790039,11.745361328125 +"2011-11-29 20:13:32.766",-171.325839900019,134170.48185,-171.789935714075,134.5806,54.4710975830874,0.21362,68.107493107201,201.44366,-51.657874808995,202.08452,60.003,0,97.1688766479492,108.927345275879,11.7584686279297 +"2011-11-29 20:13:32.800",-171.28573285436,134170.48185,-171.744099090464,134.5806,148.877353486793,0.21362,68.1762480426166,201.65728,-51.6292269192385,202.08452,60.003,0,97.1710815429688,108.907989501953,11.7369079589844 +"2011-11-29 20:13:32.833",-171.2456258087,134170.48185,-171.698262466854,134.5806,-163.934684342831,0.21362,68.1991663544219,201.65728,-51.6063086074332,202.08452,60.023,0,97.1799240112305,108.890487670898,11.710563659668 +"2011-11-29 20:13:32.866",-171.19978918509,134170.48185,-171.629507531438,134.5806,-131.270360442423,0.21362,68.256462133935,201.65728,-51.5662015617741,201.8709,60.003,0,97.1680221557617,108.907775878906,11.7397537231445 +"2011-11-29 20:13:32.900",-171.159682139431,134170.48185,-171.577941329876,134.5806,-180,0,68.330946647302,201.65728,-51.4917170484071,201.8709,60.003,0,97.1644134521484,108.922523498535,11.7581100463867 +"2011-11-29 20:13:32.933",-171.119575093772,134170.48185,-171.566482173974,134.5806,117.267271929426,0.21362,68.3424058032046,201.44366,-51.4286916909427,202.08452,60.003,0,97.1551513671875,108.90234375,11.7471923828125 +"2011-11-29 20:13:32.966",-171.079468048113,134170.48185,-171.566482173974,134.5806,93.6614107700357,0.21362,68.3481353811559,201.44366,-51.4401508468453,202.08452,60.003,0,97.1640167236328,108.921104431152,11.7570877075195 +"2011-11-29 20:13:33.000",-171.039361002453,134170.48185,-171.537834284217,134.5806,0,0,68.3710536929611,201.65728,-51.4630691586505,202.08452,60.003,0,97.1697387695313,108.91145324707,11.7417144775391 +"2011-11-29 20:13:33.033",-170.999253956794,134170.48185,-171.457620192899,134.5806,-58.8370359819842,0.21362,68.4512677842795,201.65728,-51.4057733791375,202.08452,60.003,0,97.1592178344727,108.916007995605,11.7567901611328 +"2011-11-29 20:13:33.066",-170.959146911135,134170.48185,-171.400324413386,134.5806,180,0,68.554400187403,201.8709,-51.3370184437218,202.08452,60.003,0,97.1589965820313,108.904708862305,11.7457122802734 +"2011-11-29 20:13:33.100",-170.919039865476,134170.48185,-171.394594835434,134.5806,116.757339491759,0.21362,68.5887776551108,201.65728,-51.3255592878191,202.08452,60.003,0,97.1631164550781,108.910865783691,11.7477493286133 +"2011-11-29 20:13:33.133",-170.873203241865,134170.48185,-171.360217367727,134.5806,80.7182941780304,0.21362,68.5887776551108,201.44366,-51.2682635083061,202.29814,60.003,0,97.1711578369141,108.887092590332,11.715934753418 +"2011-11-29 20:13:33.166",-170.833096196206,134170.48185,-171.297192010262,134.5806,94.2458277210691,0.21362,68.62888470077,201.44366,-51.1823198390364,202.29814,60.003,0,97.16943359375,108.907417297363,11.7379837036133 +"2011-11-29 20:13:33.200",-170.798718728498,134170.48185,-171.239896230749,134.5806,123.821909105722,0.21362,68.703369214137,201.65728,-51.1479423713286,202.08452,60.003,0,97.1750106811523,108.898147583008,11.7231369018555 +"2011-11-29 20:13:33.233",-170.752882104888,134170.48185,-171.211248340993,134.5806,0,0,68.703369214137,201.65728,-51.1250240595234,201.8709,60.003,0,97.1627960205078,108.935104370117,11.7723083496094 +"2011-11-29 20:13:33.266",-170.712775059229,134170.48185,-171.188330029187,134.36698,2.68144248121225,0.21362,68.7262875259422,201.44366,-51.1078353256694,201.8709,60.003,0,97.1625061035156,108.919311523438,11.7568054199219 +"2011-11-29 20:13:33.300",-170.67266801357,134170.48185,-171.11384551582,134.36698,11.8946038269159,0.21362,68.8236903511145,201.65728,-51.044809968205,201.8709,60.003,0,97.1577377319336,108.907600402832,11.7498626708984 +"2011-11-29 20:13:33.333",-170.63256096791,134170.48185,-171.062279314259,134.5806,0,0,68.8637973967736,201.65728,-50.9989733445946,202.08452,60.003,0,97.1674575805664,108.918304443359,11.750846862793 +"2011-11-29 20:13:33.366",-170.592453922251,134170.48185,-171.027901846551,134.5806,-37.660515873949,0.21362,68.8752565526763,201.65728,-50.970325454838,202.08452,60.013,0,97.1711502075195,108.905746459961,11.7345962524414 +"2011-11-29 20:13:33.400",-170.552346876592,134170.48185,-170.993524378843,134.5806,-61.713284113541,0.21362,68.9153635983354,201.65728,-50.9416775650815,202.08452,60.003,0,97.162841796875,108.919624328613,11.7567825317383 +"2011-11-29 20:13:33.433",-170.512239830933,134170.48185,-170.924769443427,134.5806,-95.3573658436229,0.21362,68.9841185337511,201.65728,-50.8786522076171,202.08452,60.003,0,97.1660766601563,108.898834228516,11.7327575683594 +"2011-11-29 20:13:33.466",-170.472132785274,134170.48185,-170.884662397768,134.5806,0,0,69.0414143132642,201.65728,-50.8328155840066,201.8709,60.003,0,97.1648712158203,108.897659301758,11.7327880859375 +"2011-11-29 20:13:33.500",-170.426296161663,134170.48185,-170.867473663914,134.5806,0,0,69.0643326250694,201.65728,-50.8156268501527,201.8709,60.003,0,97.1680068969727,108.917579650879,11.7495727539063 +"2011-11-29 20:13:33.533",-170.386189116004,134170.48185,-170.844555352109,134.5806,-180,0,69.0643326250694,201.44366,-50.7640606485909,201.8709,60.003,0,97.1581573486328,108.903312683105,11.7451553344727 +"2011-11-29 20:13:33.566",-170.346082070345,134170.48185,-170.833096196206,134.5806,86.957804567005,0.21362,69.0700622030207,201.44366,-50.7010352911265,202.08452,60.003,0,97.1700592041016,108.913986206055,11.7439270019531 +"2011-11-29 20:13:33.600",-170.305975024686,134170.48185,-170.810177884401,134.5806,79.7098884586001,0.21362,69.1158988266312,201.65728,-50.6609282454674,201.8709,60.003,0,97.1762390136719,108.91919708252,11.7429580688477 +"2011-11-29 20:13:33.633",-170.265867979027,134170.48185,-170.747152526937,134.5806,103.900166569023,0.21362,69.1846537620469,201.8709,-50.6380099336622,201.8709,60.003,0,97.1507797241211,108.87718963623,11.7264099121094 +"2011-11-29 20:13:33.666",-170.225760933368,134170.48185,-170.689856747424,134.5806,180,0,69.2648678533652,201.8709,-50.6322803557108,201.8709,60.003,0,97.1669692993164,108.893951416016,11.7269821166992 +"2011-11-29 20:13:33.700",-170.185653887708,134170.48185,-170.626831389959,134.5806,-180,0,69.316434054927,201.65728,-50.5864437321004,201.8709,60.003,0,97.1637420654297,108.918006896973,11.754264831543 +"2011-11-29 20:13:33.733",-170.145546842049,134170.48185,-170.580994766349,134.5806,-180,0,69.316434054927,201.44366,-50.5062296407821,201.8709,60.003,0,97.1640625,108.909141540527,11.7450790405273 +"2011-11-29 20:13:33.766",-170.099710218439,134170.48185,-170.563806032495,134.36698,-180,0,69.3221636328783,201.44366,-50.4718521730742,201.8709,60.003,0,97.1745529174805,108.897735595703,11.7231826782227 +"2011-11-29 20:13:33.800",-170.05960317278,134161.32658,-170.523698986836,134.5806,-180,0,69.390918568294,201.65728,-50.4546634392203,201.8709,60.003,0,97.1572723388672,108.899826049805,11.7425537109375 +"2011-11-29 20:13:33.833",-170.01949612712,134170.48185,-170.466403207323,134.5806,-144.064508007694,0.21362,69.4367551919045,201.65728,-50.3801789258533,201.8709,60.003,0,97.157096862793,108.900863647461,11.743766784668 +"2011-11-29 20:13:33.866",-169.979389081461,134170.48185,-170.449214473469,134.5806,153.220373573885,0.21362,69.4768622375636,201.65728,-50.3458014581454,202.08452,60.003,0,97.1795654296875,108.908645629883,11.7290802001953 +"2011-11-29 20:13:33.900",-169.939282035802,134170.48185,-170.420566583712,134.5806,136.873887678802,0.21362,69.5513467509306,201.65728,-50.3343423022428,202.08452,60.003,0,97.1396026611328,108.912544250488,11.7729415893555 +"2011-11-29 20:13:33.933",-169.899174990143,134170.48185,-170.328893336491,134.5806,180,0,69.614372108395,201.65728,-50.2541282109245,202.08452,60.013,0,97.1967010498047,108.902908325195,11.7062072753906 +"2011-11-29 20:13:33.966",-169.859067944484,134170.48185,-170.288786290832,134.5806,0,0,69.6372904202003,201.44366,-50.1968324314114,202.08452,60.003,0,97.1850509643555,108.896392822266,11.7113418579102 +"2011-11-29 20:13:34.000",-169.818960898825,134170.48185,-170.294515868783,134.36698,49.4920943434005,0.21362,69.6315608422489,201.44366,-50.1853732755088,202.08452,60.003,0,97.1563873291016,108.904205322266,11.7478179931641 +"2011-11-29 20:13:34.033",-169.778853853166,134170.48185,-170.242949667221,134.5806,43.2583135323772,0.21362,69.6773974658594,201.44366,-50.1452662298496,202.08452,60.003,0,97.1504058837891,108.907752990723,11.7573471069336 +"2011-11-29 20:13:34.066",-169.738746807506,134170.48185,-170.179924309757,134.5806,0,0,69.7461524012751,201.44366,-50.1051591841905,202.08452,60.003,0,97.1674880981445,108.916732788086,11.7492446899414 +"2011-11-29 20:13:34.100",-169.692910183896,134170.48185,-170.145546842049,134.5806,0,0,69.7748002910317,201.65728,-50.0650521385313,201.8709,60.003,0,97.1579132080078,108.896186828613,11.7382736206055 +"2011-11-29 20:13:34.133",-169.652803138237,134170.48185,-170.128358108195,134.5806,180,0,69.763341135129,201.65728,-50.0134859369696,201.8709,60.003,0,97.1694488525391,108.897880554199,11.7284317016602 +"2011-11-29 20:13:34.166",-169.612696092578,134170.48185,-170.099710218439,134.5806,-180,0,69.7748002910317,201.65728,-49.9733788913104,202.08452,60.003,0,97.1587295532227,108.903778076172,11.7450485229492 +"2011-11-29 20:13:34.200",-169.572589046918,134170.48185,-170.036684860974,134.5806,180,0,69.8607439603013,201.44366,-49.9275422676999,202.08452,60.003,0,97.1621398925781,108.914245605469,11.7521057128906 +"2011-11-29 20:13:34.233",-169.532482001259,134170.48185,-169.97365950351,134.5806,129.477002543663,0.21362,69.9466876295709,201.44366,-49.8645169102356,202.08452,60.023,0,97.1683044433594,108.912506103516,11.7442016601563 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..15550fe --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Rect - Integer Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,581 @@ +"2011-11-29 19:59:41.333",-144.288248800004,134166.76221621,-144.769279848706,134.421986928277,180,0.21362,95.1669489196678,201.622088465351,-24.6649402115011,201.687148381249,60.003,0,97.1605606079102,108.866287231445,11.7057266235352 +"2011-11-29 19:59:41.366",-144.249158766432,134164.942969119,-144.694972673441,134.545331124661,180,0.21362,95.2274017294428,201.641438911704,-24.6396397539419,201.881298166063,60.003,0,97.1727600097656,108.874153137207,11.7013931274414 +"2011-11-29 19:59:41.400",-144.2068962754,134168.540518895,-144.642330533104,134.371055359501,180,0.21362,95.2934422530305,201.448303859516,-24.6097668864874,201.598095859552,60.003,0,97.1526794433594,108.879905700684,11.7272262573242 +"2011-11-29 19:59:41.433",-144.167805715173,134166.851241233,-144.642330533104,134.371055359501,0,0,95.3539348416315,201.468124007611,-24.5545448474405,201.509230441792,60.003,0,97.1575317382813,108.858940124512,11.7014083862305 +"2011-11-29 19:59:41.466",-144.125546071298,134170.589301778,-144.568111931814,134.494785561127,0,0,95.3539348416315,201.468124007611,-24.5545448474405,201.509230441792,60.003,0,97.1708602905273,108.858459472656,11.6875991821289 +"2011-11-29 19:59:41.500",-144.084161736864,134161.615219975,-144.568111931814,134.494785561127,0,0,95.3539348416315,201.468124007611,-24.4489741215787,201.809404241766,60.003,0,97.1524353027344,108.884796142578,11.7323608398438 +"2011-11-29 19:59:41.533",-144.041902841975,134165.497742137,-144.494029885759,134.618741023863,0,0,95.4144154616509,201.488168688449,-24.4238967453483,202.003888332598,60.003,0,97.145622253418,108.877983093262,11.7323608398438 +"2011-11-29 19:59:41.566",-144.005107374996,134171.479211599,-144.441156424166,134.444899839451,0,0,95.4748839818981,201.508437835026,-24.3687042595744,201.915653515403,60.003,0,97.1670150756836,108.87181854248,11.7048034667969 +"2011-11-29 19:59:41.600",-143.962853936043,134175.498256946,-144.441156424166,134.444899839451,0,0,95.5353402713429,201.528931379613,-24.3384563139547,201.632952102459,60.003,0,97.1424026489258,108.89867401123,11.7562713623047 +"2011-11-29 19:59:41.633",-143.921460443024,134166.799388069,-144.441156424166,134.444899839451,0,0,95.5353402713429,201.528931379613,-24.3134635670617,201.827606225275,60.003,0,97.1590423583984,108.872688293457,11.7136459350586 +"2011-11-29 19:59:41.666",-143.879208103679,134170.962883454,-144.367164145376,134.569240361849,0,0,95.5957841991171,201.549649253761,-24.3134635670617,201.827606225275,60.003,0,97.158935546875,108.875518798828,11.7165832519531 +"2011-11-29 19:59:41.700",-143.840114839022,134169.797155253,-144.314107292293,134.395674694404,0,0,95.7166344469999,201.591757713332,-24.2581747074572,201.739746707747,60.003,0,97.1447982788086,108.852096557617,11.7072982788086 +"2011-11-29 19:59:41.733",-143.801020913239,134168.693889759,-144.186965683356,134.347110852097,0,0.21362,95.7226885098159,201.379201235361,-24.2028377208362,201.652075208256,60.003,0,97.1604156494141,108.869400024414,11.708984375 +"2011-11-29 19:59:41.766",-143.758773033913,134173.065354235,-144.186965683356,134.347110852097,0,0,95.7226885098159,201.379201235361,-24.1226358664209,201.759538225522,60.003,0,97.1587524414063,108.876602172852,11.7178497314453 +"2011-11-29 19:59:41.800",-143.719679449867,134172.092055856,-144.186965683356,134.347110852097,90,0.21362,95.7770405061963,201.613148158255,-24.1226358664209,201.759538225522,60.003,0,97.1608428955078,108.896324157715,11.735481262207 +"2011-11-29 19:59:41.833",-143.677435355296,134176.603965256,-144.166441063543,134.645348583012,180,0.21362,95.8374336819009,201.634762651738,-24.0978670009526,201.954522257032,60.003,0,97.1428680419922,108.87907409668,11.7362060546875 +"2011-11-29 19:59:41.866",-143.636024286351,134168.388084949,-144.039482803355,134.597552900489,-90,0.42724,95.8978138440794,201.656601121739,-24.0425195590052,201.867396149486,60.003,0,97.1536483764648,108.872772216797,11.719123840332 +"2011-11-29 19:59:41.900",-143.593781906474,134173.04442652,-143.986015043094,134.424702736574,-90,0.21362,95.8978138440794,201.656601121739,-23.9871243721842,201.78045857637,60.003,0,97.1532287597656,108.882125854492,11.7288970947266 +"2011-11-29 19:59:41.933",-143.552364682147,134164.970145553,-143.986015043094,134.424702736574,0,0,95.8978138440794,201.656601121739,-23.9316814823793,201.693709781478,60.003,0,97.1376190185547,108.872749328613,11.7351303100586 +"2011-11-29 19:59:41.966",-143.513267543625,134164.326656088,-143.986015043094,134.424702736574,-90,0.21362,95.9644871012531,201.466198707305,-23.9316814823793,201.693709781478,60.003,0,97.1612930297852,108.874572753906,11.7132797241211 +"2011-11-29 19:59:42.000",-143.476496997261,134171.102820135,-143.858785220557,134.377847350678,-90,0.21362,96.0917526792435,201.298627090608,-23.9070891190864,201.888983422855,60.003,0,97.1406021118164,108.865859985352,11.7252578735352 +"2011-11-29 19:59:42.033",-143.431932036436,134168.681395194,-143.858785220557,134.377847350678,0,0,96.0917526792435,201.298627090608,-23.8516417320447,201.802507409219,60.003,0,97.1444320678711,108.88215637207,11.7377243041992 +"2011-11-29 19:59:42.066",-143.392835516181,134168.230340622,-143.858785220557,134.377847350678,90,0.21362,96.0853070281543,201.511042102694,-23.771688394574,201.911698427551,60.003,0,97.142692565918,108.884010314941,11.7413177490234 +"2011-11-29 19:59:42.100",-143.350601972804,134173.306491253,-143.785298717885,134.503946233451,0,0.21362,96.0853070281543,201.511042102694,-23.7161894513671,201.825684354222,60.003,0,97.1467971801758,108.872688293457,11.7258911132813 +"2011-11-29 19:59:42.133",-143.31150658516,134172.985391605,-143.785298717885,134.503946233451,-90,0.21362,96.1456966945623,201.533799705404,-23.7161894513671,201.825684354222,60.003,0,97.1567840576172,108.866104125977,11.7093200683594 +"2011-11-29 19:59:42.166",-143.270072931326,134165.389036794,-143.785298717885,134.503946233451,180,0.21362,96.2060726568099,201.556781143903,-23.771688394574,201.911698427551,60.003,0,97.1658935546875,108.86930847168,11.7034149169922 +"2011-11-29 19:59:42.200",-143.227843268408,134170.677074824,-143.711949995309,134.630265962558,180,0.21362,96.3267829515109,201.60341522133,-23.7161894513671,201.825684354222,60.003,0,97.1363677978516,108.872360229492,11.7359924316406 +"2011-11-29 19:59:42.233",-143.188746939115,134170.552130969,-143.658075209371,134.458136630638,0,0,96.3267829515109,201.60341522133,-23.5807690334846,201.849989022779,60.003,0,97.1538238525391,108.865036010742,11.7112121582031 +"2011-11-29 19:59:42.266",-143.14965055521,134170.489658998,-143.584821215849,134.584838425322,-90,0.21362,96.3267829515109,201.60341522133,-23.5807690334846,201.849989022779,60.003,0,97.1483917236328,108.883964538574,11.7355728149414 +"2011-11-29 19:59:42.300",-143.105080315945,134168.663590437,-143.584821215849,134.584838425322,-90,0.21362,96.3334802806117,201.391097638783,-23.5807690334846,201.849989022779,60.003,0,97.1638565063477,108.883628845215,11.7197723388672 +"2011-11-29 19:59:42.333",-143.065983403931,134168.734809451,-143.530765609948,134.412990421361,0,0,96.3938771642707,201.414775055291,-23.5251721234927,201.764627159158,60.003,0,97.1505737304688,108.858535766602,11.7079620361328 +"2011-11-29 19:59:42.366",-143.026886551628,134168.868501182,-143.530765609948,134.412990421361,0,0,96.4542597825485,201.438676226791,-23.445381979599,201.875421007576,60.003,0,97.1700973510742,108.873603820801,11.7035064697266 +"2011-11-29 19:59:42.400",-142.984668014572,134174.576201693,-143.457607212533,134.540073914089,0,0,96.5146280064181,201.462801073645,-23.365679523349,201.986605930481,60.003,0,97.1529846191406,108.86897277832,11.7159881591797 +"2011-11-29 19:59:42.433",-142.943217106647,134167.53345208,-143.403371090561,134.368508274298,0,0,96.5749817070417,201.487149515509,-23.3100297886822,201.901979882615,60.003,0,97.1615142822266,108.886993408203,11.7254791259766 +"2011-11-29 19:59:42.466",-142.901001776511,134173.385516633,-143.403371090561,134.368508274298,0,0,96.581944655178,201.274936010781,-23.3340412767098,201.705813873537,60.003,0,97.1631088256836,108.904846191406,11.7417373657227 +"2011-11-29 19:59:42.500",-142.865023393654,134168.2556422,-143.33030915515,134.495973090886,90,0.21362,96.7027334381537,201.324355392144,-23.3100297886822,201.901979882615,60.003,0,97.1630172729492,108.86767578125,11.7046585083008 +"2011-11-29 19:59:42.533",-142.822811761725,134174.242611036,-143.202928218354,134.45253660879,0,0,96.7631054606064,201.349400492117,-23.2304126595086,202.013827867985,60.003,0,97.1463394165039,108.854019165039,11.7076797485352 +"2011-11-29 19:59:42.566",-142.781352462314,134167.474102373,-143.202928218354,134.45253660879,90,0.21362,96.6956450241564,201.536516859361,-23.174713957378,201.929665203253,60.003,0,97.1425399780273,108.865814208984,11.723274230957 +"2011-11-29 19:59:42.600",-142.742256074951,134168.062600412,-143.202928218354,134.45253660879,90,0.21362,96.7488183439642,201.773673835379,-23.1189688590752,201.845693526835,60.003,0,97.1609573364258,108.879516601563,11.7185592651367 +"2011-11-29 19:59:42.633",-142.697680734623,134166.978687479,-143.202928218354,134.45253660879,0,0.21362,96.8162487070369,201.586777601501,-23.1189688590752,201.845693526835,60.003,0,97.1533279418945,108.881805419922,11.7284774780273 +"2011-11-29 19:59:42.666",-142.655476393421,134173.25432823,-143.075465581607,134.409765111874,0,0.21362,96.8765278656011,201.612242788595,-23.1189688590752,201.845693526835,60.003,0,97.1426773071289,108.852890014648,11.7102127075195 +"2011-11-29 19:59:42.700",-142.616382366085,134174.043955532,-143.075465581607,134.409765111874,0,0.21362,96.8765278656011,201.612242788595,-23.063177412274,201.761913077192,60.003,0,97.1646041870117,108.881362915039,11.7167587280273 +"2011-11-29 19:59:42.733",-142.574912914472,134167.62528789,-143.075465581607,134.409765111874,0,0.21362,96.8765278656011,201.612242788595,-22.983642786905,201.874968911374,60.003,0,97.1471252441406,108.876068115234,11.7289428710938 +"2011-11-29 19:59:42.766",-142.535817778491,134168.543642539,-143.002738176329,134.538208402892,90,0.21362,96.8765278656011,201.612242788595,-22.9041973479522,201.988413309739,60.003,0,97.1599655151367,108.868637084961,11.7086715698242 +"2011-11-29 19:59:42.800",-142.496723195905,134169.524463352,-142.947922429119,134.367659235167,0,0,96.9970401786331,201.663842372037,-22.8483567127534,201.905370125839,60.003,0,97.1474227905273,108.876800537109,11.729377746582 +"2011-11-29 19:59:42.833",-142.455246744366,134163.308624461,-142.875294341149,134.496482029002,-90,0.21362,97.0572730783644,201.689976597178,-22.8483567127534,201.905370125839,60.003,0,97.1506118774414,108.886474609375,11.7358627319336 +"2011-11-29 19:59:42.866",-142.413053031804,134170.002376627,-142.875294341149,134.496482029002,0,0,96.9970401786331,201.663842372037,-22.7924701775563,201.82251887965,60.003,0,97.1487579345703,108.87614440918,11.7273864746094 +"2011-11-29 19:59:42.900",-142.37157291771,134163.928378295,-142.875294341149,134.496482029002,0,0,97.0572730783644,201.689976597178,-22.7131121267,201.936896661753,60.003,0,97.1480484008789,108.886085510254,11.738037109375 +"2011-11-29 19:59:42.933",-142.332478389861,134165.171625844,-142.802805364856,134.625520519053,0,0,97.1174903040859,201.716333662634,-22.7131121267,201.936896661753,60.003,0,97.1491851806641,108.860069274902,11.7108840942383 +"2011-11-29 19:59:42.966",-142.293384604748,134166.47733574,-142.802805364856,134.625520519053,180,0.21362,97.185280096874,201.530969297743,-22.7131121267,201.936896661753,60.003,0,97.1640777587891,108.880439758301,11.7163619995117 +"2011-11-29 19:59:43.000",-142.25429159875,134167.84550616,-142.747772036108,134.455421497658,180,0.21362,97.2531946127253,201.345887566393,-22.6571790290647,201.854510498706,60.003,0,97.1632995605469,108.893531799316,11.7302322387695 +"2011-11-29 19:59:43.033",-142.20971400842,134167.650589582,-142.675383492463,134.584838425322,-135,0.302104301194141,97.2531946127253,201.345887566393,-22.5779105160613,201.969547992145,60.003,0,97.1572723388672,108.872253417969,11.7149810791016 +"2011-11-29 19:59:43.066",-142.170622258651,134169.152439486,-142.547885194044,134.544822371326,-90,0.21362,97.3057595333108,201.584853434434,-22.5779105160613,201.969547992145,60.003,0,97.1592712402344,108.868637084961,11.7093658447266 +"2011-11-29 19:59:43.100",-142.131531402232,134170.716744473,-142.547885194044,134.544822371326,0,0,97.3659749683352,201.612129617101,-22.4659071129067,201.805899323533,60.003,0,97.1526947021484,108.881156921387,11.7284622192383 +"2011-11-29 19:59:43.133",-142.086954726988,134170.745481535,-142.547885194044,134.544822371326,0,0,97.3737663613302,201.400274384149,-22.4659071129067,201.805899323533,60.003,0,97.1536560058594,108.848701477051,11.6950454711914 +"2011-11-29 19:59:43.166",-142.047865371321,134172.443456118,-142.547885194044,134.544822371326,180,0.21362,97.3737663613302,201.400274384149,-22.4659071129067,201.805899323533,60.003,0,97.1671447753906,108.897048950195,11.7299041748047 +"2011-11-29 19:59:43.200",-142.006370417563,134166.988683258,-142.547885194044,134.544822371326,180,0.21362,97.4863566399806,201.667349759176,-22.4098373714933,201.724364530187,60.003,0,97.1545639038086,108.880310058594,11.7257461547852 +"2011-11-29 19:59:43.233",-141.967281044624,134168.815399342,-142.420311664637,134.505472951515,0,0,97.4863566399806,201.667349759176,-22.3306596919294,201.840606637096,60.003,0,97.1641311645508,108.882110595703,11.7179794311523 +"2011-11-29 19:59:43.266",-141.925781754568,134163.497299822,-142.348266238613,134.635858591961,-90,0.21362,97.5545006024329,201.48352574775,-22.3076421559009,202.038222836241,60.003,0,97.145866394043,108.870147705078,11.7242813110352 +"2011-11-29 19:59:43.300",-141.883616460791,134171.10375721,-142.292664103675,134.466790751128,-90,0.21362,97.6749063678688,201.54013967432,-22.2745451608755,201.759538225522,60.003,0,97.1462020874023,108.883316040039,11.7371139526367 +"2011-11-29 19:59:43.333",-141.844530076242,134173.126575592,-142.292664103675,134.466790751128,0,0,97.6749063678688,201.54013967432,-22.2515733092004,201.957233750543,60.003,0,97.1423645019531,108.863586425781,11.7212219238281 +"2011-11-29 19:59:43.366",-141.803027381555,134168.016682664,-142.292664103675,134.466790751128,0,0,97.6668042618142,201.751848037823,-22.1954595286789,201.876438220327,60.003,0,97.1460723876953,108.873504638672,11.7274322509766 +"2011-11-29 19:59:43.400",-141.763941370098,134170.168240248,-142.220721904957,134.597552900489,0,0,97.7269196638723,201.78045857637,-22.1725783663321,202.07424520391,60.003,0,97.1483764648438,108.87052154541,11.7221450805664 +"2011-11-29 19:59:43.433",-141.722434753132,134165.195053765,-142.220721904957,134.597552900489,0,0,97.7350837542503,201.568780262613,-22.1164655855431,201.993722392783,60.003,0,97.146240234375,108.87476348877,11.7285232543945 +"2011-11-29 19:59:43.466",-141.683349269503,134167.475351841,-142.164943714922,134.428776346145,0,0,97.803487286989,201.385999266225,-22.1164655855431,201.993722392783,60.003,0,97.1564407348633,108.858505249023,11.7020645141602 +"2011-11-29 19:59:43.500",-141.63877311275,134168.320614131,-142.164943714922,134.428776346145,0,0,97.7952439757007,201.597643141431,-22.0603081032087,201.913393474689,60.003,0,97.1579742431641,108.879173278809,11.7211990356445 +"2011-11-29 19:59:43.533",-141.599690022634,134170.734548958,-142.093105586669,134.559914569025,90,0.21362,97.8553869069686,201.62672821531,-22.0041059739167,201.833258681132,60.003,0,97.1472930908203,108.86572265625,11.7184295654297 +"2011-11-29 19:59:43.566",-141.560608357004,134173.210911088,-142.037151706411,134.391430303253,135,0.302104301194141,97.9155124230266,201.656035388108,-22.0041059739167,201.833258681132,60.003,0,97.1746368408203,108.884567260742,11.7099304199219 +"2011-11-29 19:59:43.600",-141.519095459184,134168.582688091,-141.965418490055,134.522944157731,180,0.21362,97.9840495513368,201.474013047278,-21.9252068923355,201.951471783315,60.003,0,97.1542053222656,108.865303039551,11.7110977172852 +"2011-11-29 19:59:43.633",-141.480014711681,134171.18778162,-141.965418490055,134.522944157731,0,0,97.9756203990734,201.685564563006,-21.8464002737385,202.070067390168,60.003,0,97.1440124511719,108.862396240234,11.7183837890625 +"2011-11-29 19:59:43.666",-141.438498469942,134166.696306418,-141.893825505966,134.654668458924,0,0,98.0357107105348,201.715315642505,-21.8464002737385,202.070067390168,60.003,0,97.13916015625,108.87353515625,11.734375 +"2011-11-29 19:59:43.700",-141.396363462179,134175.142179449,-141.83766182557,134.486642217443,0,0,98.1644523377582,201.564025980265,-21.812672662836,201.792331324191,60.003,0,97.1470184326172,108.878402709961,11.7313842773438 +"2011-11-29 19:59:43.733",-141.354845709958,134170.792647786,-141.83766182557,134.486642217443,180,0.21362,98.1730849263726,201.352573404608,-21.7338702883458,201.911472420191,60.003,0,97.1436004638672,108.863754272461,11.7201538085938 +"2011-11-29 19:59:43.766",-141.313325287618,134166.51357057,-141.709836807757,134.451009289623,180,0.21362,98.1730849263726,201.352573404608,-21.5988324418028,201.952262651296,60.003,0,97.1549224853516,108.848754882813,11.6938323974609 +"2011-11-29 19:59:43.800",-141.274248232635,134169.447309872,-141.766174822553,134.618741023863,90,0.21362,98.1644523377582,201.564025980265,-21.5765449441894,202.150898400718,60.003,0,97.1692199707031,108.869667053223,11.7004470825195 +"2011-11-29 19:59:43.833",-141.232124645029,134178.175991921,-141.766174822553,134.618741023863,90,0.21362,98.2245505789087,201.594474086113,-21.63282686325,202.22955342082,60.003,0,97.1523132324219,108.869873046875,11.7175598144531 +"2011-11-29 19:59:43.866",-141.190602721126,134174.105176442,-141.638456619734,134.583482143742,0,0,98.2245505789087,201.594474086113,-21.5765449441894,202.150898400718,60.003,0,97.1693572998047,108.868927001953,11.6995697021484 +"2011-11-29 19:59:43.900",-141.15212319101,134164.361954377,-141.638456619734,134.583482143742,0,0,98.2846306026776,201.62514392245,-21.5424599960244,201.8737256416,60.003,0,97.1690063476563,108.872192382813,11.7031860351563 +"2011-11-29 19:59:43.933",-141.11304922639,134167.553131187,-141.581944655178,134.416045906328,0,0,98.3446922852854,201.656035388108,-21.4638498834584,201.994174223195,60.003,0,97.1612091064453,108.877403259277,11.716194152832 +"2011-11-29 19:59:43.966",-141.068479069006,134169.437314277,-141.510672114156,134.548892344148,0,0.21362,98.4047355031892,201.687148381249,-21.4074368580955,201.916105520511,60.003,0,97.1595840454102,108.879257202148,11.7196731567383 +"2011-11-29 19:59:44.000",-141.029408632921,134172.762058226,-141.453986590353,134.381752590161,90,0.21362,98.4737011107712,201.507192303808,-21.3853336126128,202.115002584713,60.003,0,97.1656875610352,108.886260986328,11.720573425293 +"2011-11-29 19:59:44.033",-140.987879196095,134169.035303295,-141.453986590353,134.381752590161,90,0.21362,98.4826608580561,201.295906725542,-21.4074368580955,201.916105520511,60.003,0,97.1542510986328,108.882705688477,11.7284545898438 +"2011-11-29 19:59:44.066",-140.946347473935,134165.379040896,-141.382822526371,134.514972141235,0,0,98.5337685334,201.538781126342,-21.3509802476536,201.838232711343,60.003,0,97.1725387573242,108.873741149902,11.7012023925781 +"2011-11-29 19:59:44.100",-140.907278999679,134168.898800458,-141.382822526371,134.514972141235,0,0,98.5247660519059,201.750038539293,-21.272471137066,201.959606277503,60.003,0,97.1617660522461,108.879135131836,11.7173690795898 +"2011-11-29 19:59:44.133",-140.865745101026,134165.379353268,-141.311799389704,134.648398795233,0,0,98.5847531368294,201.781815497192,-21.2505055071332,202.158686273979,60.003,0,97.1501617431641,108.858222961426,11.7080612182617 +"2011-11-29 19:59:44.166",-140.82667879876,134169.027806575,-141.311799389704,134.648398795233,180,0.21362,98.6538465774944,201.602622984854,-21.2505055071332,202.158686273979,60.003,0,97.1574020385742,108.880676269531,11.723274230957 +"2011-11-29 19:59:44.200",-140.785142888006,134165.645181428,-141.311799389704,134.648398795233,135,0.302104301194141,98.7138569533252,201.634875810528,-21.2159748530494,201.882202329106,60.003,0,97.1441345214844,108.857055664063,11.7129211425781 +"2011-11-29 19:59:44.233",-140.746078912338,134169.422320882,-141.254909080765,134.481722041677,90,0.21362,98.7138569533252,201.634875810528,-21.1157364039438,202.203488934459,60.003,0,97.1560211181641,108.885520935059,11.7294998168945 +"2011-11-29 19:59:44.266",-140.704541153898,134166.176523797,-141.183995460079,134.615520644042,90,0.21362,98.7230628526178,201.423724167292,-21.059248553597,202.126629914941,60.003,0,97.1674957275391,108.873954772949,11.7064590454102 +"2011-11-29 19:59:44.300",-140.66300140745,134163.001245489,-141.126933005494,134.449142542636,0,0,98.8431484160758,201.488961374949,-21.0244506701629,201.850554212809,60.003,0,97.1586151123047,108.879974365234,11.7213592529297 +"2011-11-29 19:59:44.333",-140.620918122522,134172.781736566,-141.056129722758,134.583312607583,0,0,98.8431484160758,201.488961374949,-21.002717782689,202.049967511217,60.003,0,97.1572570800781,108.879272460938,11.7220153808594 +"2011-11-29 19:59:44.366",-140.579378508273,134169.748426844,-141.056129722758,134.583312607583,0,0,98.8937720273132,201.732960597524,-21.002717782689,202.049967511217,60.003,0,97.1682815551758,108.876502990723,11.7082214355469 +"2011-11-29 19:59:44.400",-140.543340398444,134168.035736969,-140.928203407448,134.551775167078,0,0,98.9537046276342,201.766097271646,-20.8679330580301,202.096826485747,60.003,0,97.1553039550781,108.880783081055,11.7254791259766 +"2011-11-29 19:59:44.433",-140.498780777348,134170.957573354,-140.928203407448,134.551775167078,0,0,98.963155716391,201.555083097711,-20.8113217559813,202.020830428817,60.003,0,97.1482467651367,108.88916015625,11.7409133911133 +"2011-11-29 19:59:44.466",-140.459726964046,134175.191842946,-140.928203407448,134.551775167078,0,0.21362,98.9726266148964,201.344074419457,-20.8679330580301,202.096826485747,60.003,0,97.1551818847656,108.875640869141,11.720458984375 +"2011-11-29 19:59:44.500",-140.418184658581,134172.432211324,-140.870797897025,134.385997286969,0,0,99.0326618772548,201.377501691788,-20.8113217559813,202.020830428817,60.003,0,97.1510162353516,108.877716064453,11.7266998291016 +"2011-11-29 19:59:44.533",-140.376640666055,134169.743116695,-140.800217747437,134.520908794177,0,0,99.0830837781358,201.622088465351,-20.7546679012599,201.945031743037,60.003,0,97.1447219848633,108.890594482422,11.7458724975586 +"2011-11-29 19:59:44.566",-140.335095030049,134167.124563303,-140.800217747437,134.520908794177,0,0,99.1430177908336,201.655922241192,-20.6979715567777,201.869430650737,60.003,0,97.1340026855469,108.870208740234,11.7362060546875 +"2011-11-29 19:59:44.600",-140.29604546414,134171.620084813,-140.672173979525,134.490713950919,0,0,99.2029316299475,201.689976597177,-20.6198726490063,201.993948308115,60.003,0,97.1521301269531,108.880737304688,11.7286071777344 +"2011-11-29 19:59:44.633",-140.25449889867,134169.138383149,-140.672173979525,134.490713950919,90,0.21362,99.2029316299475,201.689976597177,-20.6198726490063,201.993948308115,60.003,0,97.1584014892578,108.879493713379,11.7210922241211 +"2011-11-29 19:59:44.666",-140.21295081806,134166.727230922,-140.672173979525,134.490713950919,135,0.302104301194141,99.2628251746993,201.724251421596,-20.6198726490063,201.993948308115,60.003,0,97.1588439941406,108.894378662109,11.7355346679688 +"2011-11-29 19:59:44.700",-140.173905346145,134171.417677133,-140.672173979525,134.490713950919,180,0.21362,99.3226983045698,201.758746602087,-20.5631397935335,201.918817529906,60.003,0,97.1608734130859,108.854522705078,11.6936492919922 +"2011-11-29 19:59:44.733",-140.13235658531,134169.143380958,-140.544073343958,134.461191089706,0,0,99.3325358585388,201.547951147483,-20.5063647592741,201.843884869615,60.003,0,97.1581802368164,108.854957580566,11.69677734375 +"2011-11-29 19:59:44.766",-140.090806437719,134166.93964146,-140.544073343958,134.461191089706,0,0.21362,99.3924493408189,201.582702873036,-20.4495476107926,201.769150547972,60.003,0,97.1713943481445,108.874237060547,11.7028427124023 +"2011-11-29 19:59:44.800",-140.051765414682,134171.824991042,-140.544073343958,134.461191089706,0,0,99.4523421037,201.617674945572,-20.4495476107926,201.769150547972,60.003,0,97.1452026367188,108.873481750488,11.7282791137695 +"2011-11-29 19:59:44.833",-140.010214836124,134169.758110055,-140.473861503937,134.597044344543,180,0.21362,99.4423828388939,201.828397578625,-20.3926884130808,201.694614785448,60.003,0,97.170295715332,108.859771728516,11.6894760131836 +"2011-11-29 19:59:44.866",-139.968662999229,134167.761792023,-140.473861503937,134.597044344543,180,0.21362,99.4423828388939,201.828397578625,-20.3147115992975,201.820596960152,60.003,0,97.1493835449219,108.886772155762,11.7373886108398 +"2011-11-29 19:59:44.900",-139.929626779826,134172.842020989,-140.473861503937,134.597044344543,90,0.21362,99.5122140271057,201.652867250448,-20.2936777660727,202.020943371357,60.003,0,97.1466979980469,108.864692687988,11.7179946899414 +"2011-11-29 19:59:44.933",-139.888074761228,134170.982562058,-140.345819842749,134.568562144164,90,0.21362,99.5720649912254,201.68827967238,-20.2936777660727,202.020943371357,60.003,0,97.1599884033203,108.880142211914,11.7201538085938 +"2011-11-29 19:59:44.966",-139.846521612741,134169.193671401,-140.275864478601,134.70498464641,-45,0.302104301194141,99.6318948765153,201.723912095443,-20.2368322195244,201.946952478296,60.003,0,97.1522750854492,108.871284484863,11.7190093994141 +"2011-11-29 19:59:45.000",-139.804967378032,134167.475351841,-140.217724608632,134.540752275383,-90,0.21362,99.6917035636996,201.759764403076,-20.1799450587273,201.873160516444,60.003,0,97.1517181396484,108.882438659668,11.7307205200195 +"2011-11-29 19:59:45.033",-139.765937470647,134172.816720276,-140.217724608632,134.540752275383,0,0,99.6318948765153,201.723912095443,-20.102170583329,202.000160880737,60.003,0,97.1571502685547,108.883712768555,11.7265625 +"2011-11-29 19:59:45.066",-139.727366337886,134165.316878888,-140.147884824136,134.677541783613,0,0,99.6917035636996,201.759764403076,-20.0244939852301,202.127532980559,60.003,0,97.1704711914063,108.879150390625,11.7086791992188 +"2011-11-29 19:59:45.100",-139.685809497535,134163.800929152,-140.147884824136,134.677541783613,0,0,99.8112568679961,201.832128202625,-20.0244939852301,202.127532980559,60.003,0,97.1574020385742,108.865440368652,11.7080383300781 +"2011-11-29 19:59:45.133",-139.641272394052,134168.284067424,-140.147884824136,134.677541783613,0,0,99.8710012479079,201.868639458243,-20.0244939852301,202.127532980559,60.003,0,97.1453094482422,108.883583068848,11.7382736206055 +"2011-11-29 19:59:45.166",-139.602249435751,134173.886530207,-140.08957704926,134.513615155203,0,0,99.8814061203502,201.65818516746,-20.0244939852301,202.127532980559,60.003,0,97.16748046875,108.870315551758,11.7028350830078 +"2011-11-29 19:59:45.200",-139.560693968003,134172.583078899,-140.01985364202,134.650771134745,0,0,99.941189242656,201.69495416089,-19.96758061328,202.054484512124,60.003,0,97.1544570922852,108.87873840332,11.7242813110352 +"2011-11-29 19:59:45.233",-139.522111588987,134165.406841986,-139.961378415421,134.487151190869,90,0.21362,99.941189242656,201.69495416089,-19.8536306067233,201.908986322533,60.003,0,97.1545791625977,108.890640258789,11.7360610961914 +"2011-11-29 19:59:45.266",-139.480552777939,134164.239503637,-139.961378415421,134.487151190869,0,0,99.9516763880323,201.48454493902,-19.8536306067233,201.908986322533,60.003,0,97.1675720214844,108.888725280762,11.7211532592773 +"2011-11-29 19:59:45.300",-139.441535545156,134170.098271439,-139.833129960945,134.461360779842,0,0,100.071297803123,201.55881878045,-19.7965941087778,201.836537032997,60.003,0,97.1471557617188,108.890380859375,11.7432250976563 +"2011-11-29 19:59:45.333",-139.399977548514,134169.067789076,-139.833129960945,134.461360779842,90,0.21362,100.071297803123,201.55881878045,-19.7395167062001,201.764287900909,60.003,0,97.1534271240234,108.888732910156,11.7353057861328 +"2011-11-29 19:59:45.366",-139.358418935362,134168.107893413,-139.833129960945,134.461360779842,45,0.302104301194141,100.071297803123,201.55881878045,-19.7190486810491,201.965368012658,60.003,0,97.1553039550781,108.886199951172,11.7308959960938 +"2011-11-29 19:59:45.400",-139.316859749414,134167.218585966,-139.763641690726,134.5992480731,0,0,100.120406990016,201.806577699555,-19.7190486810491,201.965368012658,60.003,0,97.1544799804688,108.871116638184,11.7166366577148 +"2011-11-29 19:59:45.433",-139.275300034391,134166.399868139,-139.763641690726,134.5992480731,0,0,100.190830569821,201.633970538429,-19.6416022622675,202.094568471105,60.003,0,97.1804275512695,108.885787963867,11.7053604125977 +"2011-11-29 19:59:45.466",-139.236292690296,134172.585890095,-139.704832942633,134.436244309768,90,0.21362,100.190830569821,201.633970538429,-19.5845426171969,202.022863384885,60.003,0,97.1690979003906,108.872123718262,11.7030258178711 +"2011-11-29 19:59:45.500",-139.194734208454,134171.904017294,-139.704832942633,134.436244309768,90,0.21362,100.190830569821,201.633970538429,-19.5477208839471,201.750038539293,60.003,0,97.1575698852539,108.874717712402,11.7171478271484 +"2011-11-29 19:59:45.533",-139.153175326066,134171.292733968,-139.704832942633,134.436244309768,0,0,100.250563415834,201.671875329868,-19.5477208839471,201.750038539293,60.003,0,97.1634750366211,108.882522583008,11.7190475463867 +"2011-11-29 19:59:45.566",-139.114571847069,134164.759293763,-139.635463426903,134.574496433023,0,0,100.321145286697,201.499832189454,-19.5274425094344,201.951358801922,60.003,0,97.1780853271484,108.869995117188,11.6919097900391 +"2011-11-29 19:59:45.600",-139.07557162717,134171.201525384,-139.507238645991,134.550418552217,180,0.21362,100.440618204,201.576817008727,-19.4501138323257,202.081471488634,60.003,0,97.175163269043,108.879890441895,11.7047271728516 +"2011-11-29 19:59:45.633",-139.034012105512,134170.792647786,-139.438131310936,134.689231093953,180,0.21362,100.500320318252,201.615637903857,-19.392982931598,202.010439444955,60.003,0,97.1504821777344,108.862678527832,11.7121963500977 +"2011-11-29 19:59:45.666",-138.992452352419,134170.454362322,-139.438131310936,134.689231093953,180,0.21362,100.500320318252,201.615637903857,-19.3358118962515,201.939608391928,60.003,0,97.1605453491211,108.86548614502,11.7049407958984 +"2011-11-29 19:59:45.700",-138.950892411621,134170.186669527,-139.378968607752,134.527014792456,180,0.21362,100.500320318252,201.615637903857,-19.278600797944,201.86897854112,60.003,0,97.1673812866211,108.885406494141,11.7180252075195 +"2011-11-29 19:59:45.733",-138.909332326852,134169.989569823,-139.378968607752,134.527014792456,0,0,100.559999380994,201.65467762092,-19.278600797944,201.86897854112,60.003,0,97.1601638793945,108.874443054199,11.7142791748047 +"2011-11-29 19:59:45.766",-138.867772141843,134169.863063521,-139.309981748071,134.666190322894,0,0,100.608483604742,201.903901027431,-19.2213497087532,201.798550103795,60.003,0,97.1636505126953,108.873588562012,11.7099380493164 +"2011-11-29 19:59:45.800",-138.829154896853,134163.779999992,-139.309981748071,134.666190322894,0,0,100.619655276155,201.693936032852,-19.1441611248037,201.930117176997,60.003,0,97.1630401611328,108.871978759766,11.7089385986328 +"2011-11-29 19:59:45.833",-138.790168646581,134170.677074824,-139.250654574651,134.50428550563,0,0,100.630850230978,201.483978722285,-19.1243032794232,202.131935367666,60.003,0,97.1654815673828,108.8935546875,11.7280731201172 +"2011-11-29 19:59:45.866",-138.748608683409,134170.752978159,-139.250654574651,134.50428550563,0,0,100.690542770802,201.523496830513,-19.1243032794232,202.131935367666,60.003,0,97.1504287719727,108.869758605957,11.7193298339844 +"2011-11-29 19:59:45.900",-138.707048789125,134170.899474597,-139.181788967633,134.643823450989,0,0,100.738897100905,201.773108429999,-19.0670731991242,202.062050262425,60.003,0,97.1605682373047,108.874557495117,11.7139892578125 +"2011-11-29 19:59:45.933",-138.665489007463,134171.116563908,-139.11306604944,134.783555505229,180,0.21362,100.798482799812,201.813022158029,-18.9900860134904,202.194348643605,60.003,0,97.1629333496094,108.888328552246,11.7253952026367 +"2011-11-29 19:59:45.966",-138.626863238391,134165.35280166,-139.053554231831,134.622130814135,0,0,100.858044869775,201.853154066562,-18.9900860134904,202.194348643605,60.003,0,97.1509399414063,108.876449584961,11.7255096435547 +"2011-11-29 19:59:46.000",-138.585301930109,134165.706093799,-139.053554231831,134.622130814135,0,0,100.858044869775,201.853154066562,-18.9900860134904,202.194348643605,60.003,0,97.1595458984375,108.864082336426,11.7045364379883 +"2011-11-29 19:59:46.033",-138.54632918408,134172.991638687,-138.993899586804,134.460851708791,45,0.302104301194141,100.929077064704,201.683754469784,-18.9328274231528,202.124936656034,60.003,0,97.1598281860352,108.88175201416,11.721923828125 +"2011-11-29 19:59:46.066",-138.504770516282,134173.481721379,-138.993899586804,134.460851708791,90,0.21362,100.929077064704,201.683754469784,-18.8755295500807,202.05572666967,60.003,0,97.1656951904297,108.890609741211,11.7249145507813 +"2011-11-29 19:59:46.100",-138.463212173941,134174.042393774,-138.925278805385,134.601112738314,0,0,100.929077064704,201.683754469784,-18.8181924685568,201.986718892159,60.003,0,97.1555633544922,108.887420654297,11.7318572998047 +"2011-11-29 19:59:46.133",-138.421654200783,134174.673654986,-138.85680098559,134.741566435677,-90,0.21362,100.988651096494,201.724364530187,-18.7413404451927,202.120195455627,60.003,0,97.1655044555664,108.877227783203,11.7117233276367 +"2011-11-29 19:59:46.166",-138.380096640526,134175.375504021,-138.796963955446,134.580769539576,-90,0.21362,101.10772690875,201.806238511829,-18.7413404451927,202.120195455627,60.003,0,97.1730804443359,108.870010375977,11.6969299316406 +"2011-11-29 19:59:46.200",-138.341460381553,134170.062349938,-138.796963955446,134.580769539576,0,0,101.10772690875,201.806238511829,-18.7034009793635,201.849310792654,60.003,0,97.1481094360352,108.877815246582,11.7297058105469 +"2011-11-29 19:59:46.233",-138.299901874306,134170.900411674,-138.796963955446,134.580769539576,90,0.21362,101.10772690875,201.806238511829,-18.645946722339,201.780910884324,60.003,0,97.155632019043,108.893898010254,11.7382659912109 +"2011-11-29 19:59:46.266",-138.258343908087,134171.809060844,-138.668610951527,134.561101524007,0,0,101.167228461473,201.847502167848,-18.6265727890963,201.983330014355,60.003,0,97.1577835083008,108.869239807129,11.7114562988281 +"2011-11-29 19:59:46.300",-138.216786526611,134172.788296013,-138.668610951527,134.561101524007,0,0,101.286158293014,201.930682142753,-18.5691307310378,201.915201509284,60.003,0,97.1510009765625,108.882080078125,11.7310791015625 +"2011-11-29 19:59:46.333",-138.178143249478,134167.733054323,-138.600381287203,134.702274489035,0,0,101.298033039194,201.721197465671,-18.5116499544974,201.847276088607,60.003,0,97.1550598144531,108.874542236328,11.719482421875 +"2011-11-29 19:59:46.366",-138.136585252659,134168.848509904,-138.600381287203,134.702274489035,180,0.21362,101.357520319816,201.763157035958,-18.4924169877158,202.049854584901,60.003,0,97.1707611083984,108.86750793457,11.6967468261719 +"2011-11-29 19:59:46.400",-138.095027968708,134170.034549813,-138.540221065429,134.542108987711,0,0,101.357520319816,201.763157035958,-18.4732225510388,202.252455802587,60.003,0,97.1679763793945,108.870262145996,11.7022857666016 +"2011-11-29 19:59:46.433",-138.053471441331,134171.291172178,-138.540221065429,134.542108987711,0,0.21362,101.357520319816,201.763157035958,-18.434948822922,201.982200375786,60.003,0,97.1478271484375,108.874458312988,11.7266311645508 +"2011-11-29 19:59:46.466",-138.014821773605,134166.49389131,-138.472116617586,134.683640680801,0,0,101.416982799033,201.80533400844,-18.3583502328441,202.117486148317,60.003,0,97.1645355224609,108.880447387695,11.7159118652344 +"2011-11-29 19:59:46.500",-137.973264962591,134167.886738476,-138.411795571162,134.52379221679,0,0,101.476420364342,201.847728246835,-18.3008566382552,202.050306289788,60.003,0,97.1485061645508,108.886779785156,11.7382736206055 +"2011-11-29 19:59:46.533",-137.931709036261,134169.350165145,-138.411795571162,134.52379221679,90,0.21362,101.53583290355,201.890339614274,-18.3008566382552,202.050306289788,60.003,0,97.1586151123047,108.876388549805,11.7177734375 +"2011-11-29 19:59:46.566",-137.893054570552,134164.745236965,-138.343817094784,134.665682026152,90,0.21362,101.547969241239,201.68103929949,-18.2243739024509,202.186223593733,60.003,0,97.16650390625,108.882469177246,11.7159652709961 +"2011-11-29 19:59:46.600",-137.851498607909,134166.344891104,-138.283335744879,134.506151487315,0,0,101.607415675795,201.723912095443,-18.1857549663926,201.916557524606,60.003,0,97.1452026367188,108.882675170898,11.7374725341797 +"2011-11-29 19:59:46.633",-137.809943658051,134168.015120836,-138.283335744879,134.506151487315,0,0.21362,101.607415675795,201.723912095443,-18.1281470456721,201.849989022779,60.003,0,97.1723709106445,108.864753723145,11.6923828125 +"2011-11-29 19:59:46.666",-137.768389764654,134169.755923523,-138.283335744879,134.506151487315,0,0,101.607415675795,201.723912095443,-18.1281470456721,201.849989022779,60.003,0,97.1499481201172,108.876182556152,11.7262344360352 +"2011-11-29 19:59:46.700",-137.729730004495,134165.409028588,-138.215483991748,134.648398795233,0,0,101.666836783242,201.76700195093,-18.0517051772873,201.986718892159,60.003,0,97.1522369384766,108.899604797363,11.7473678588867 +"2011-11-29 19:59:46.733",-137.688176406527,134167.286057338,-138.147775544007,134.790834537517,180,0.21362,101.785602570889,201.853832283773,-18.0329469432454,202.189834767319,60.003,0,97.15966796875,108.887786865234,11.7281188964844 +"2011-11-29 19:59:46.766",-137.646623993086,134169.233653852,-138.087118583445,134.631791248163,90,0.21362,101.844947028917,201.897572481316,-17.975366865392,202.123807808881,60.003,0,97.1501922607422,108.87467956543,11.7244873046875 +"2011-11-29 19:59:46.800",-137.607960252301,134165.079163608,-138.019537713803,134.774583133831,90,0.21362,101.832516303037,202.106648555887,-17.9177492145836,202.057985118372,60.003,0,97.1698608398438,108.873428344727,11.7035675048828 +"2011-11-29 19:59:46.833",-137.566408381622,134167.162984532,-138.019537713803,134.774583133831,0,0,101.844947028917,201.897572481316,-17.8991321701716,202.26125504288,60.003,0,97.1686019897461,108.886985778809,11.7183837890625 +"2011-11-29 19:59:46.866",-137.524857823503,134169.31736707,-137.958722146781,134.615859635019,180,0.21362,101.916780965795,201.732508182059,-17.8991321701716,202.26125504288,60.003,0,97.1752014160156,108.872535705566,11.6973342895508 +"2011-11-29 19:59:46.900",-137.483308621584,134171.542307824,-137.891269596221,134.7590070329,0,0,102.035457851258,201.821162232492,-17.7838884426925,202.130355034608,60.003,0,97.156852722168,108.906776428223,11.7499237060547 +"2011-11-29 19:59:46.933",-137.444640683308,134167.645904084,-137.830295960524,134.600604195818,0,0,102.035457851258,201.821162232492,-17.7838884426925,202.130355034608,60.003,0,97.1685791015625,108.874839782715,11.7062606811523 +"2011-11-29 19:59:46.966",-137.40309235583,134170.007062043,-137.830295960524,134.600604195818,90,0.21362,102.035457851258,201.821162232492,-17.7838884426925,202.130355034608,60.003,0,97.1631622314453,108.874130249023,11.7109680175781 +"2011-11-29 19:59:47.000",-137.364421701639,134166.237435927,-137.830295960524,134.600604195818,90,0.21362,102.094757077012,201.865813745448,-17.6684958219111,202.000273834834,60.003,0,97.1704711914063,108.894302368164,11.7238311767578 +"2011-11-29 19:59:47.033",-137.322874411539,134168.734809451,-137.762972466676,134.744106468914,90,0.21362,102.15403001184,201.910681392438,-17.6107438791419,201.93554078301,60.003,0,97.1584548950195,108.868209838867,11.7097549438477 +"2011-11-29 19:59:47.066",-137.281328689949,134171.302729425,-137.701841305233,134.586025160493,0,0,102.166805877835,201.701854671027,-17.5924245621816,202.139159590021,60.003,0,97.1708908081055,108.861839294434,11.6909484863281 +"2011-11-29 19:59:47.100",-137.242655103151,134167.72555753,-137.634647602325,134.729881666008,0,0,102.226110874761,201.746984973723,-17.5346880329487,202.074696854276,60.003,0,97.1410446166992,108.882255554199,11.7412109375 +"2011-11-29 19:59:47.133",-137.201110666192,134170.429685879,-137.573359463177,134.572122748881,0,0,102.226110874761,201.746984973723,-17.476914714246,202.010439444955,60.003,0,97.1762008666992,108.883354187012,11.7071533203125 +"2011-11-29 19:59:47.166",-137.159567925649,134173.204351663,-137.573359463177,134.572122748881,45,0.302104301194141,102.285389281384,201.792331324191,-17.476914714246,202.010439444955,60.003,0,97.1480941772461,108.874694824219,11.7266006469727 +"2011-11-29 19:59:47.200",-137.118231280246,134163.110889898,-137.573359463177,134.572122748881,90,0.21362,102.344640988762,201.837893576814,-17.476914714246,202.010439444955,60.003,0,97.1662521362305,108.881622314453,11.7153701782227 +"2011-11-29 19:59:47.233",-137.079350547009,134172.730510404,-137.506296281988,134.716332838244,0,0,102.344640988762,201.837893576814,-17.400979497695,202.150221180169,60.003,0,97.1623992919922,108.89599609375,11.7335968017578 +"2011-11-29 19:59:47.266",-137.037811162558,134175.711902991,-137.506296281988,134.716332838244,180,0.21362,102.416902032085,201.675043168929,-17.3431854802209,202.086439409489,60.003,0,97.1620407104492,108.895797729492,11.733757019043 +"2011-11-29 19:59:47.300",-136.996466254859,134165.824170009,-137.444851718264,134.558897170707,0,0,102.416902032085,201.675043168929,-17.3033748475239,201.81890113363,60.003,0,97.1614837646484,108.874618530273,11.713134765625 +"2011-11-29 19:59:47.333",-136.954926639205,134168.946279721,-137.31631935596,134.546348625562,0,0,102.476158259681,201.721084355305,-17.2274882264509,201.959493300661,60.003,0,97.1415863037109,108.864082336426,11.7224960327148 +"2011-11-29 19:59:47.366",-136.916244372496,134165.885082299,-137.311131452761,134.848206637359,-90,0.21362,102.535387380633,201.767341204615,-17.151707320088,202.100439256699,60.003,0,97.1747283935547,108.880859375,11.7061309814453 +"2011-11-29 19:59:47.400",-136.874706704259,134169.143380958,-137.311131452761,134.848206637359,-135,0.302104301194141,102.535387380633,201.767341204615,-17.1338655591548,202.304568799645,60.003,0,97.1539154052734,108.875396728516,11.7214813232422 +"2011-11-29 19:59:47.433",-136.833171075286,134172.472192809,-137.249519396514,134.691263913935,-135,0.302104301194141,102.607827237739,201.605339211239,-17.1338655591548,202.304568799645,60.003,0,97.167106628418,108.889541625977,11.7224349975586 +"2011-11-29 19:59:47.466",-136.791637529082,134175.871512606,-137.187763663216,134.534477302895,0,0,102.667059925008,201.652075208256,-17.0938210432048,202.037545238008,60.003,0,97.1522903442383,108.878036499023,11.7257461547852 +"2011-11-29 19:59:47.500",-136.750274973976,134166.399868139,-137.187763663216,134.534477302895,0,0,102.785442653161,201.746193301031,-17.0358987744225,201.97485757108,60.003,0,97.1749572753906,108.894683837891,11.7197265625 +"2011-11-29 19:59:47.533",-136.711587596985,134163.662234358,-137.121096396661,134.679744195012,0,0,102.726265099209,201.699026621652,-17.018162898964,202.179113907242,60.003,0,97.1705932617188,108.894546508789,11.7239532470703 +"2011-11-29 19:59:47.566",-136.670054529475,134167.267940029,-137.121096396661,134.679744195012,-90,0.21362,102.71291102624,201.907404244449,-16.9602578240089,202.116695926844,60.003,0,97.1629943847656,108.893630981445,11.7306365966797 +"2011-11-29 19:59:47.600",-136.628523716103,134170.944141923,-137.121096396661,134.679744195012,-90,0.21362,102.772030644891,201.954522257032,-16.9602578240089,202.116695926844,60.003,0,97.1537628173828,108.874443054199,11.7206802368164 +"2011-11-29 19:59:47.633",-136.586995200325,134174.690834246,-137.121096396661,134.679744195012,180,0.21362,102.831122620699,202.001855185564,-16.9779405986646,201.912376448114,60.003,0,97.1554489135742,108.879821777344,11.7243728637695 +"2011-11-29 19:59:47.666",-136.548307076732,134172.211375871,-136.992652071241,134.668901206449,180,0.21362,102.844592480019,201.793575095444,-16.902317032564,202.054484512124,60.003,0,97.1550903320313,108.896492004395,11.7414016723633 +"2011-11-29 19:59:47.700",-136.509617540866,134169.793094553,-136.992652071241,134.668901206449,180,0.21362,102.903714473275,201.841171853398,-16.826799897505,202.19694407684,60.003,0,97.1556015014648,108.878448486328,11.7228469848633 +"2011-11-29 19:59:47.733",-136.46809210984,134173.741598792,-136.864187706259,134.65873511172,0,0,102.976421880012,201.680813033649,-16.7688412596035,202.135208875411,60.003,0,97.1578140258789,108.870445251465,11.7126312255859 +"2011-11-29 19:59:47.766",-136.426706800697,134164.817082805,-136.864187706259,134.65873511172,0,0,103.035545590068,201.728888821814,-16.7688412596035,202.135208875411,60.003,0,97.1774978637695,108.874992370605,11.6974945068359 +"2011-11-29 19:59:47.800",-136.385182334852,134168.906297185,-136.864187706259,134.65873511172,0,0,103.035545590068,201.728888821814,-16.693448585671,202.278288381836,60.003,0,97.1641540527344,108.86743927002,11.7032852172852 +"2011-11-29 19:59:47.833",-136.346489099676,134166.745973042,-136.735704588928,134.649246064143,0,0,103.094641063362,201.777179313376,-16.6354727765022,202.21702934668,60.003,0,97.1746826171875,108.87718963623,11.702507019043 +"2011-11-29 19:59:47.866",-136.304967737408,134170.971317142,-136.735704588928,134.649246064143,0,0,103.094641063362,201.777179313376,-16.5947535665292,201.951245820466,60.003,0,97.1656799316406,108.888809204102,11.7231292724609 +"2011-11-29 19:59:47.900",-136.260746070844,134168.652345326,-136.735704588928,134.649246064143,135,0.302104301194141,103.139921991927,202.033705471761,-16.5947535665292,201.951245820466,60.003,0,97.1633148193359,108.87956237793,11.7162475585938 +"2011-11-29 19:59:47.933",-136.222050878416,134166.688809568,-136.669583631809,134.795743430377,180,0.21362,103.271757010203,201.923337464622,-16.5947535665292,201.951245820466,60.003,0,97.1432495117188,108.876403808594,11.733154296875 +"2011-11-29 19:59:47.966",-136.180533547886,134171.125309945,-136.607204007592,134.640434206865,0,0,103.285686671562,201.715428756107,-16.5194160136143,202.09513297713,60.003,0,97.1741104125977,108.876518249512,11.7024078369141 +"2011-11-29 19:59:48.000",-136.141837950997,134169.288629703,-136.607204007592,134.640434206865,0,0,103.358741406805,201.556781143903,-16.5022128974485,202.299944595964,60.003,0,97.1464157104492,108.877914428711,11.7314987182617 +"2011-11-29 19:59:48.033",-136.100324138934,134173.861229691,-136.541218643724,134.787279710394,180,0.21362,103.344725522351,201.764627159158,-16.4441857914888,202.23936904487,60.003,0,97.1520767211914,108.871269226074,11.7191925048828 +"2011-11-29 19:59:48.066",-136.058915351961,134165.558966947,-136.541218643724,134.787279710394,180,0.21362,103.330738485691,201.972485223274,-16.3861239736839,202.17900105306,60.003,0,97.1639633178711,108.88444519043,11.7204818725586 +"2011-11-29 19:59:48.100",-136.020216599611,134163.914633786,-136.478687251648,134.632299672857,180,0.21362,103.389691200752,202.021846909408,-16.3280275322339,202.118840806512,60.003,0,97.1706771850586,108.877624511719,11.7069473266602 +"2011-11-29 19:59:48.133",-135.975988316184,134162.110342295,-136.350155611466,134.624842584897,-90,0.21362,103.417808801808,201.606244611902,-16.2698965557288,202.058888490785,60.003,0,97.1668472290039,108.898704528809,11.7318572998047 +"2011-11-29 19:59:48.166",-135.93447815286,134166.964318545,-136.350155611466,134.624842584897,-90,0.21362,103.491006881177,201.448190595924,-16.1948317630975,202.204278816742,60.003,0,97.1578369140625,108.869781494141,11.7119445800781 +"2011-11-29 19:59:48.200",-135.895778400421,134165.5167968,-136.350155611466,134.624842584897,0,0,103.550073412489,201.498133663347,-16.2117311331485,201.999144291019,60.003,0,97.1602935791016,108.892654418945,11.7323608398438 +"2011-11-29 19:59:48.233",-135.854272254528,134170.506838793,-136.350155611466,134.624842584897,90,0.21362,103.594836334075,201.755919350177,-16.1948317630975,202.204278816742,60.003,0,97.1831207275391,108.88631439209,11.7031936645508 +"2011-11-29 19:59:48.266",-135.815572714782,134169.18617469,-136.284443521801,134.772382272262,90,0.21362,103.594836334075,201.755919350177,-16.1366860783772,202.144803334095,60.003,0,97.1601028442383,108.893997192383,11.7338943481445 +"2011-11-29 19:59:48.300",-135.776872430824,134167.926721317,-136.221610378318,134.618063055566,90,0.21362,103.653786948864,201.806238511829,-16.1366860783772,202.144803334095,60.003,0,97.1725692749023,108.890472412109,11.717903137207 +"2011-11-29 19:59:48.333",-135.732642668865,134166.562300154,-136.221610378318,134.618063055566,90,0.21362,103.653786948864,201.806238511829,-16.0617492241782,202.290808663354,60.003,0,97.1533508300781,108.880867004395,11.7275161743164 +"2011-11-29 19:59:48.366",-135.693940909012,134165.434018326,-136.156035961829,134.765948778516,0,0,103.653786948864,201.806238511829,-16.0035895049099,202.231809928291,60.003,0,97.1742553710938,108.869537353516,11.6952819824219 +"2011-11-29 19:59:48.400",-135.652442554665,134170.766409609,-136.093052844293,134.611961187236,0,0,103.712708110687,201.856771198689,-15.9453959009229,202.173019691254,60.003,0,97.1594161987305,108.876838684082,11.7174224853516 +"2011-11-29 19:59:48.433",-135.613741389281,134169.76498201,-136.027616786442,134.760192234294,0,0.21362,103.771599717082,201.907517250437,-15.9453959009229,202.173019691254,60.003,0,97.1606674194336,108.886085510254,11.7254180908203 +"2011-11-29 19:59:48.466",-135.569510802246,134168.69545158,-136.027616786442,134.760192234294,0,0,103.903852942152,201.802281279571,-15.8706081238731,202.319906864868,60.003,0,97.1637420654297,108.885765075684,11.7220230102539 +"2011-11-29 19:59:48.500",-135.530808479946,134167.825202363,-135.964484302227,134.606537072065,90,0.21362,103.977357795429,201.646417673551,-15.812401439037,202.261593467554,60.003,0,97.1440887451172,108.871643066406,11.7275543212891 +"2011-11-29 19:59:48.533",-135.489364781722,134160.487208926,-135.964484302227,134.606537072065,0,0.21362,103.962711963746,201.853719247729,-15.812401439037,202.261593467554,60.003,0,97.161735534668,108.885772705078,11.7240371704102 +"2011-11-29 19:59:48.566",-135.447873346276,134166.166527957,-135.899187284476,134.755112726353,0,0.21362,103.962711963746,201.853719247729,-15.7541612419003,202.203488934459,60.003,0,97.1526031494141,108.898345947266,11.7457427978516 +"2011-11-29 19:59:48.600",-135.409169620447,134165.488683362,-135.835906045615,134.601790791988,0,0,104.021540933091,201.905370125839,-15.6958876239683,202.145593445692,60.003,0,97.1523590087891,108.895469665527,11.7431106567383 +"2011-11-29 19:59:48.633",-135.364936335731,134164.78896922,-135.770748745392,134.750710331254,0,0,104.080339749251,201.957233750543,-15.6375806771284,202.087907180916,60.003,0,97.1382904052734,108.874855041504,11.7365646362305 +"2011-11-29 19:59:48.666",-135.326231852949,134164.242315007,-135.707319368544,134.597722418711,-90,0.21362,104.153923979238,201.802168214652,-15.6375806771284,202.087907180916,60.003,0,97.1546630859375,108.875999450684,11.7213363647461 +"2011-11-29 19:59:48.700",-135.284748694964,134170.19822687,-135.707319368544,134.597722418711,-90,0.21362,104.139108311651,202.009309957982,-15.6375806771284,202.087907180916,60.003,0,97.157341003418,108.855400085449,11.6980590820313 +"2011-11-29 19:59:48.733",-135.246045502099,134169.778413559,-135.707319368544,134.597722418711,0,0,104.153923979238,201.802168214652,-15.5629863359292,202.236210045442,60.003,0,97.1549301147461,108.892021179199,11.7370910644531 +"2011-11-29 19:59:48.766",-135.20181300879,134169.373592337,-135.578725565608,134.594332013709,0,0.21362,104.212718616779,201.854510498705,-15.5046678281618,202.17900105306,60.003,0,97.1770095825195,108.875717163086,11.6987075805664 +"2011-11-29 19:59:48.800",-135.16310937801,134169.084969052,-135.578725565608,134.594332013709,0,0.21362,104.271482708664,201.907065226103,-15.4624607877485,201.916105520511,60.003,0,97.1589736938477,108.896118164063,11.7371444702148 +"2011-11-29 19:59:48.833",-135.124405598373,134168.857568452,-135.578725565608,134.594332013709,0,0.21362,104.330216155158,201.959832230998,-15.4463163676926,202.122001640324,60.003,0,97.1777877807617,108.880722045898,11.7029342651367 +"2011-11-29 19:59:48.866",-135.080172570395,134168.672648998,-135.578725565608,134.594332013709,0,0,104.345231579237,201.752865873614,-15.3879320477292,202.065211984592,60.003,0,97.1533432006836,108.88501739502,11.7316741943359 +"2011-11-29 19:59:48.900",-135.041468590718,134168.576440803,-135.45012593183,134.591619628215,90,0.21362,104.345231579237,201.752865873614,-15.3295149618577,202.008632262766,60.003,0,97.1517639160156,108.887115478516,11.7353515625 +"2011-11-29 19:59:48.933",-135,134175.015053306,-135.45012593183,134.591619628215,90,0.21362,104.403990532937,201.805899323533,-15.2710652040413,201.952262651296,60.003,0,97.1535949707031,108.88102722168,11.7274322509766 +"2011-11-29 19:59:48.966",-134.958531409282,134168.576440803,-135.45012593183,134.591619628215,0,0,104.462718549981,201.859144906423,-15.2551187030578,202.158347677033,60.003,0,97.1497192382813,108.880233764648,11.7305145263672 +"2011-11-29 19:59:49.000",-134.917066863603,134175.155610459,-135.385391807733,134.741566435677,180,0.21362,104.521415531491,201.912602454462,-15.1966915818766,202.102245617957,60.003,0,97.1803283691406,108.887062072754,11.7067337036133 +"2011-11-29 19:59:49.033",-134.875594401627,134168.857568452,-135.321521762588,134.589585303222,180,0.21362,104.521415531491,201.912602454462,-15.1966915818766,202.102245617957,60.003,0,97.1559677124023,108.903533935547,11.7475662231445 +"2011-11-29 19:59:49.066",-134.83689062199,134169.084969052,-135.256930024504,134.739873053584,180,0.21362,104.654043077092,201.813474393002,-15.1540680503126,201.840154462915,60.003,0,97.1585159301758,108.876556396484,11.7180404663086 +"2011-11-29 19:59:49.100",-134.79818699121,134169.373592337,-135.192914353533,134.588229069477,0,0,104.63871599422,202.020152772248,-15.0797402762983,201.990672511069,60.003,0,97.1576309204102,108.886871337891,11.7292404174805 +"2011-11-29 19:59:49.133",-134.753954497901,134169.778413559,-135.128465658072,134.738857014113,0,0,104.712702245082,201.867622206193,-15.0639919043407,202.19694407684,60.003,0,97.156982421875,108.8935546875,11.736572265625 +"2011-11-29 19:59:49.166",-134.715251305036,134170.19822687,-135.128465658072,134.738857014113,0,0.21362,104.786800264291,201.715428756107,-15.0482756322805,202.403230887159,60.003,0,97.1657485961914,108.882583618164,11.7168350219727 +"2011-11-29 19:59:49.200",-134.673768147051,134164.242315007,-135.064305000512,134.58755094748,0,0,104.845452082084,201.770055213565,-15.0212162820411,201.935201811902,60.003,0,97.1635513305664,108.8671875,11.7036361694336 +"2011-11-29 19:59:49.233",-134.632316812098,134171.303978858,-135.064305000512,134.58755094748,0,0,104.829925918479,201.976552088167,-14.9626601875216,201.879941913906,60.003,0,97.1441497802734,108.860763549805,11.7166137695313 +"2011-11-29 19:59:49.266",-134.593614554859,134171.916199202,-135.064305000512,134.58755094748,0,0.21362,104.845452082084,201.770055213565,-14.8884902297165,202.031333814975,60.003,0,97.1509246826172,108.877365112305,11.7264404296875 +"2011-11-29 19:59:49.300",-134.552126653724,134166.166527957,-134.935694999488,134.58755094748,0,0.21362,104.904072088744,201.824892990234,-14.8299259184788,201.976552088167,60.003,0,97.1450042724609,108.886421203613,11.7414169311523 +"2011-11-29 19:59:49.333",-134.513423336637,134166.905593323,-134.935694999488,134.58755094748,0,0.21362,104.888490229716,202.031333814975,-14.7558911374129,202.128548924555,60.003,0,97.1531219482422,108.8955078125,11.7423858642578 +"2011-11-29 19:59:49.366",-134.47198146776,134174.238862822,-134.871534341928,134.738857014113,0,0,104.904072088744,201.824892990234,-14.7558911374129,202.128548924555,60.003,0,97.1499633789063,108.884658813477,11.7346954345703 +"2011-11-29 19:59:49.400",-134.430489197754,134168.69545158,-134.871534341928,134.738857014113,0,0.21362,104.962660187522,201.879941913906,-14.6973192795119,202.07424520391,60.003,0,97.154411315918,108.876861572266,11.7224502563477 +"2011-11-29 19:59:49.433",-134.391787395174,134169.626918106,-134.807085646467,134.588229069477,0,0,105.021216282041,201.935201811902,-14.6973192795119,202.07424520391,60.003,0,97.156135559082,108.883842468262,11.7277069091797 +"2011-11-29 19:59:49.466",-134.347557445335,134170.766409609,-134.807085646467,134.588229069477,0,0,105.095520844211,201.784416236596,-14.6234202413859,202.226845578619,60.003,0,97.1446380615234,108.90104675293,11.7564086914063 +"2011-11-29 19:59:49.500",-134.308856875321,134171.829051681,-134.743069975496,134.739873053584,0,0,105.154068050313,201.840154462915,-14.5648415051927,202.173019691254,60.003,0,97.1651000976563,108.895469665527,11.7303695678711 +"2011-11-29 19:59:49.533",-134.267357331135,134166.562300154,-134.678478237412,134.589585303222,-45,0.302104301194141,105.154068050313,201.840154462915,-14.5648415051927,202.173019691254,60.003,0,97.1473083496094,108.886901855469,11.7395935058594 +"2011-11-29 19:59:49.566",-134.225854550441,134161.365940033,-134.678478237412,134.589585303222,0,0,105.154068050313,201.840154462915,-14.5062316303705,202.119405244746,60.003,0,97.1590270996094,108.872604370117,11.7135772705078 +"2011-11-29 19:59:49.600",-134.184427285218,134169.18617469,-134.614608192267,134.741566435677,0,0,105.271065204041,201.952262651296,-14.4475907148403,202.066002407403,60.003,0,97.1599197387695,108.880615234375,11.7206954956055 +"2011-11-29 19:59:49.633",-134.14292216944,134164.130484899,-134.614608192267,134.741566435677,180,0.21362,105.271065204041,201.952262651296,-14.4324938221835,202.272873966021,60.003,0,97.1477279663086,108.868843078613,11.7211151123047 +"2011-11-29 19:59:49.666",-134.104221599579,134165.5167968,-134.54987406817,134.591619628215,180,0.21362,105.345549252026,201.802620473948,-14.4324938221835,202.272873966021,60.003,0,97.1417999267578,108.884384155273,11.7425842285156 +"2011-11-29 19:59:49.700",-134.06280283041,134173.542942546,-134.54987406817,134.591619628215,0,0,105.404021451768,201.859257939429,-14.3889188568866,202.012811347044,60.003,0,97.1451263427734,108.871383666992,11.7262573242188 +"2011-11-29 19:59:49.733",-134.021294604824,134168.693577395,-134.421274434392,134.594332013709,-45,0.302104301194141,105.446316367693,202.122001640324,-14.3302161551577,201.959832230998,60.003,0,97.1863861083984,108.895553588867,11.7091674804688 +"2011-11-29 19:59:49.766",-133.98259672281,134170.272256313,-134.357697540806,134.746985115366,-90,0.21362,105.446316367693,202.122001640324,-14.2565542746562,202.114099463108,60.003,0,97.1583557128906,108.875564575195,11.7172088623047 +"2011-11-29 19:59:49.800",-133.941084648039,134165.558966947,-134.357697540806,134.746985115366,180,0.21362,105.520867166179,201.973163039776,-14.1978465200721,202.061598583791,60.003,0,97.1568908691406,108.874496459961,11.7176055908203 +"2011-11-29 19:59:49.833",-133.902386861914,134167.264503987,-134.292680631456,134.597722418711,0,0,105.611848340089,201.618919794266,-14.2127186167793,201.854510498705,60.003,0,97.1486968994141,108.894691467285,11.7459945678711 +"2011-11-29 19:59:49.866",-133.858162049003,134169.288629703,-134.292680631456,134.597722418711,0,0,105.595527795422,201.824666885667,-14.1539239792375,201.802168214652,60.003,0,97.1601715087891,108.885673522949,11.7255020141602 +"2011-11-29 19:59:49.900",-133.819466452113,134171.125309945,-134.229251254608,134.750710331254,0,0,105.595527795422,201.824666885667,-14.0803397492507,201.957233750543,60.003,0,97.1415786743164,108.899520874023,11.757942199707 +"2011-11-29 19:59:49.933",-133.777949121584,134166.688809568,-134.164093954385,134.601790791988,0,0,105.712284454489,201.939947355639,-14.0068685514984,202.112631881894,60.003,0,97.1699523925781,108.883811950684,11.7138595581055 +"2011-11-29 19:59:49.966",-133.739253929156,134168.652345326,-134.164093954385,134.601790791988,0,0,105.77061268804,201.997901785527,-14.0803397492507,201.957233750543,60.003,0,97.1632614135742,108.877532958984,11.7142715454102 +"2011-11-29 19:59:50.000",-133.697733242673,134164.351958402,-134.098792402826,134.453045711323,0,0,105.803616241003,201.586777601501,-14.0803397492507,201.957233750543,60.003,0,97.1470718383789,108.873008728027,11.7259368896484 +"2011-11-29 19:59:50.033",-133.659038606451,134166.442350377,-134.098792402826,134.453045711323,0,0,105.803616241003,201.586777601501,-14.0068685514984,202.112631881894,60.003,0,97.1551742553711,108.874130249023,11.7189559936523 +"2011-11-29 19:59:50.066",-133.614817665148,134168.906297185,-134.035515697773,134.606537072065,-90,0.21362,105.787097654469,201.792331324191,-13.889293855505,202.009648804737,60.003,0,97.1576538085938,108.88671875,11.7290649414063 +"2011-11-29 19:59:50.100",-133.573293199303,134164.817082805,-133.972383213558,134.760192234294,-135,0.302104301194141,105.828907401364,202.056065438585,-13.7571839440321,202.115002584713,60.003,0,97.1747741699219,108.897018432617,11.7222442626953 +"2011-11-29 19:59:50.133",-133.534600755702,134167.104259397,-133.972383213558,134.760192234294,135,0.302104301194141,105.887168502764,202.114438134183,-13.7571839440321,202.115002584713,60.003,0,97.151985168457,108.886451721191,11.7344665527344 +"2011-11-29 19:59:50.166",-133.493073348916,134163.151186539,-133.972383213558,134.760192234294,0,0,105.903762584959,201.908986322533,-13.8159891216365,202.165909540414,60.003,0,97.1449661254883,108.890914916992,11.7459487915039 +"2011-11-29 19:59:50.200",-133.451692923268,134172.211375871,-133.843964038171,134.765948778516,0,0,106.020292302071,202.026477478495,-13.8159891216365,202.165909540414,60.003,0,97.1641159057617,108.876510620117,11.7123947143555 +"2011-11-29 19:59:50.233",-133.410164719717,134168.399017717,-133.778389621682,134.618063055566,-90,0.21362,106.037029084595,201.821162232492,-13.6983491983109,202.064308640449,60.003,0,97.1718597412109,108.890815734863,11.7189559936523 +"2011-11-29 19:59:50.266",-133.371476283897,134170.944141923,-133.778389621682,134.618063055566,-90,0.21362,106.053799953448,201.615864242842,-13.6252123879063,202.22142978544,60.003,0,97.1608047485352,108.895133972168,11.7343292236328 +"2011-11-29 19:59:50.300",-133.329945470525,134167.267940029,-133.778389621682,134.618063055566,0,0,106.095297307629,201.880280977799,-13.5805914103189,201.963560427167,60.003,0,97.169563293457,108.901206970215,11.7316436767578 +"2011-11-29 19:59:50.333",-133.291258286472,134169.9399044,-133.649844388534,134.624842584897,0,0,106.153531353862,201.939608391928,-13.5216685728249,201.913506477325,60.003,0,97.1474456787109,108.888717651367,11.7412719726563 +"2011-11-29 19:59:50.366",-133.249725026024,134166.399868139,-133.649844388534,134.624842584897,0,0,106.153531353862,201.939608391928,-13.5075099351381,202.121211436505,60.003,0,97.1648254394531,108.892440795898,11.7276153564453 +"2011-11-29 19:59:50.400",-133.2081895956,134162.930335809,-133.649844388534,134.624842584897,180,0.21362,106.211731133149,201.999144291019,-13.4627165767664,201.86366617727,60.003,0,97.1532211303711,108.864227294922,11.7110061645508 +"2011-11-29 19:59:50.433",-133.169503700706,134165.794807152,-133.649844388534,134.624842584897,180,0.21362,106.269896555729,202.058888490785,-13.4486150516865,202.071422366252,60.003,0,97.1606750488281,108.871894836426,11.7112197875977 +"2011-11-29 19:59:50.466",-133.125293295741,134169.143380958,-133.587161821781,134.779492618594,-135,0.302104301194141,106.345069321789,201.913845484855,-13.4486150516865,202.071422366252,60.003,0,97.1511001586914,108.887557983398,11.736457824707 +"2011-11-29 19:59:50.500",-133.083755627504,134165.885082299,-133.521312748352,134.632299672857,-90,0.21362,106.420350035051,201.769150547972,-13.4486150516865,202.071422366252,60.003,0,97.1553573608398,108.875144958496,11.7197875976563 +"2011-11-29 19:59:50.533",-133.045073360795,134168.946279721,-133.458781356276,134.787279710394,-90,0.21362,106.420350035051,201.769150547972,-13.3167802095148,202.180355299089,60.003,0,97.1585159301758,108.879783630371,11.7212677001953 +"2011-11-29 19:59:50.566",-133.003533745141,134165.824170009,-133.392795992408,134.640434206865,-90,0.21362,106.420350035051,201.769150547972,-13.2439835700925,202.339190576273,60.003,0,97.1559600830078,108.893592834473,11.7376327514648 +"2011-11-29 19:59:50.600",-132.964853347409,134169.012188408,-133.330416368191,134.795743430377,-45,0.302104301194141,106.461335234687,202.034496017837,-13.198903231376,202.082374756055,60.003,0,97.1582794189453,108.913208007813,11.7549285888672 +"2011-11-29 19:59:50.633",-132.923311947201,134166.026273758,-133.264295411072,134.649246064143,0,0.21362,106.519416013614,202.09513297713,-13.1399219919268,202.033705471761,60.003,0,97.1628875732422,108.876373291016,11.7134857177734 +"2011-11-29 19:59:50.666",-132.88463357009,134169.34110663,-133.264295411072,134.649246064143,90,0.21362,106.536654032303,201.890339614274,-13.1399219919268,202.033705471761,60.003,0,97.1601867675781,108.867332458496,11.707145690918 +"2011-11-29 19:59:50.700",-132.843090548212,134166.491392356,-133.264295411072,134.649246064143,90,0.21362,106.652818007336,202.012359558317,-13.1399219919268,202.033705471761,60.003,0,97.1408843994141,108.881988525391,11.7411041259766 +"2011-11-29 19:59:50.733",-132.798889333808,134170.429685879,-133.202068143099,134.804883651096,-90,0.21362,106.652818007336,202.012359558317,-13.0809123914078,201.985250385425,60.003,0,97.1601715087891,108.874786376953,11.7146148681641 +"2011-11-29 19:59:50.766",-132.757344896849,134167.72555753,-133.135812293741,134.65873511172,0,0,106.710847267353,202.073680639533,-13.0218745346332,201.937009651238,60.003,0,97.161376953125,108.87907409668,11.7176971435547 +"2011-11-29 19:59:50.800",-132.721323723393,134164.576555276,-133.135812293741,134.65873511172,0,0,106.710847267353,202.073680639533,-12.9492232191664,202.097165185767,60.003,0,97.1674423217773,108.883728027344,11.7162857055664 +"2011-11-29 19:59:50.833",-132.677125588461,134168.734809451,-133.007347928759,134.668901206449,0,0.21362,106.786328642839,201.930682142753,-12.9492232191664,202.097165185767,60.003,0,97.1595153808594,108.888687133789,11.7291717529297 +"2011-11-29 19:59:50.866",-132.635578298361,134166.237435927,-133.007347928759,134.668901206449,0,0,106.844340610189,201.99247985394,-12.8901868474252,202.049402879004,60.003,0,97.1515045166016,108.885078430176,11.7335739135742 +"2011-11-29 19:59:50.900",-132.59690764417,134170.007062043,-133.007347928759,134.668901206449,180,0.21362,106.902317032564,202.054484512124,-12.8311226206992,202.001855185564,60.003,0,97.1613922119141,108.889999389648,11.7286071777344 +"2011-11-29 19:59:50.933",-132.555359316692,134167.645904084,-132.945427119074,134.825193034216,0,0,106.902317032564,202.054484512124,-12.8176805105167,202.210146417106,60.003,0,97.143196105957,108.886306762695,11.7431106567383 +"2011-11-29 19:59:50.966",-132.513809548657,134165.355300635,-132.878903603339,134.679744195012,0,0,106.977940598665,201.912376448114,-12.7586462795207,202.16286225636,60.003,0,97.1649856567383,108.878784179688,11.7137985229492 +"2011-11-29 19:59:51.000",-132.475142176497,134169.31736707,-132.817136885938,134.836361891012,180,0.21362,107.035898774423,201.97485757108,-12.6995844895974,202.115792812806,60.003,0,97.1530532836914,108.878646850586,11.7255935668945 +"2011-11-29 19:59:51.033",-132.433591618378,134167.162984532,-132.817136885938,134.836361891012,0,0,107.035898774423,201.97485757108,-12.6404952470495,202.068938236492,60.003,0,97.1544570922852,108.870193481445,11.7157363891602 +"2011-11-29 19:59:51.066",-132.394927192173,134171.251815056,-132.750480603486,134.691263913935,-90,0.21362,107.018162898964,202.179113907242,-12.6404952470495,202.068938236492,60.003,0,97.175651550293,108.895645141602,11.7199935913086 +"2011-11-29 19:59:51.100",-132.353376006914,134169.233653852,-132.750480603486,134.691263913935,0,0,107.076032172267,202.24173826206,-12.5945892870371,201.813813568566,60.003,0,97.1697998046875,108.874526977539,11.7047271728516 +"2011-11-29 19:59:51.133",-132.311823593473,134167.286057338,-132.750480603486,134.691263913935,0,0,107.133865559155,202.304568799645,-12.5945892870371,201.813813568566,60.003,0,97.1496505737305,108.866012573242,11.7163619995117 +"2011-11-29 19:59:51.166",-132.270269995505,134165.409028588,-132.68368064404,134.546348625562,0,0,107.151707320088,202.100439256699,-12.5222348309524,201.975874283038,60.003,0,97.1587219238281,108.896682739258,11.7379608154297 +"2011-11-29 19:59:51.200",-132.228715256675,134163.602570563,-132.622080213924,134.703460189596,0,0,107.227488226451,201.959493300661,-12.5222348309524,201.975874283038,60.003,0,97.1484832763672,108.884902954102,11.7364196777344 +"2011-11-29 19:59:51.233",-132.19005634195,134168.015120836,-132.622080213924,134.703460189596,0,0,107.26737156046,202.226845578619,-12.4630638716676,201.929665203253,60.003,0,97.1644515991211,108.870674133301,11.7062225341797 +"2011-11-29 19:59:51.266",-132.148501392091,134166.344891104,-132.493703718012,134.716332838244,0,0,107.285355028647,202.022863384885,-12.3316899793533,202.046579694268,60.003,0,97.1667861938477,108.875076293945,11.7082901000977 +"2011-11-29 19:59:51.300",-132.106945429448,134164.745236965,-132.493703718012,134.716332838244,0,0,107.343185480221,202.086439409489,-12.3316899793533,202.046579694268,60.003,0,97.1574859619141,108.894569396973,11.7370834350586 +"2011-11-29 19:59:51.333",-132.065388497707,134163.216160942,-132.493703718012,134.716332838244,-135,0.302104301194141,107.343185480221,202.086439409489,-12.3316899793533,202.046579694268,60.003,0,97.1604690551758,108.867454528809,11.7069854736328 +"2011-11-29 19:59:51.366",-132.026735037409,134167.886738476,-132.493703718012,134.716332838244,180,0.21362,107.36125803851,201.882541389203,-12.2724965718291,202.001064511747,60.003,0,97.1684875488281,108.880043029785,11.711555480957 +"2011-11-29 19:59:51.400",-131.985178226395,134166.49389131,-132.365352397675,134.729881666008,0,0,107.476914714246,202.010439444955,-12.2132765464394,201.95576502941,60.003,0,97.1538314819336,108.886337280273,11.7325057983398 +"2011-11-29 19:59:51.433",-131.946528558669,134171.291172178,-132.298158694767,134.586025160493,0,0.21362,107.534688032949,202.074696854276,-12.2132765464394,201.95576502941,60.003,0,97.1460876464844,108.873435974121,11.7273483276367 +"2011-11-29 19:59:51.466",-131.904972031292,134170.034549813,-132.365352397675,134.729881666008,0,0,107.534688032949,202.074696854276,-12.2132765464394,201.95576502941,60.003,0,97.1538391113281,108.875625610352,11.7217864990234 +"2011-11-29 19:59:51.500",-131.863414747341,134168.848509904,-132.298158694767,134.586025160493,0,0,107.534688032949,202.074696854276,-12.0820660451361,202.074696854276,60.003,0,97.1713104248047,108.896575927734,11.7252655029297 +"2011-11-29 19:59:51.533",-131.821856750522,134167.733054323,-132.237027533324,134.744106468914,0,0,107.610743879142,201.93554078301,-12.0820660451361,202.074696854276,60.003,0,97.1534042358398,108.88298034668,11.7295761108398 +"2011-11-29 19:59:51.566",-131.780298084545,134166.68818483,-132.169704039476,134.600604195818,0,0,107.668495821911,202.000273834834,-12.0820660451361,202.074696854276,60.003,0,97.1479644775391,108.871879577637,11.7239151000977 +"2011-11-29 19:59:51.600",-131.741656091913,134171.809060844,-132.169704039476,134.600604195818,180,0.21362,107.726210703544,202.065211984592,-12.0228253334196,202.030091507452,60.003,0,97.1542434692383,108.869186401367,11.7149429321289 +"2011-11-29 19:59:51.633",-131.702699066534,134164.06488619,-132.108730403779,134.7590070329,0,0,107.726210703544,202.065211984592,-11.9510105882127,202.194687180264,60.003,0,97.1664581298828,108.879898071289,11.7134399414063 +"2011-11-29 19:59:51.666",-131.658539618447,134170.062349938,-132.041277853219,134.615859635019,0,0,107.726210703544,202.065211984592,-11.8917763469893,202.150559790727,60.003,0,97.1656799316406,108.900276184082,11.7345962524414 +"2011-11-29 19:59:51.700",-131.616980613891,134169.294876957,-132.041277853219,134.615859635019,0,0,107.783888442693,202.130355034608,-11.8449470289167,201.897572481316,60.003,0,97.1622695922852,108.880653381348,11.7183837890625 +"2011-11-29 19:59:51.733",-131.578015782921,134161.749231181,-132.041277853219,134.615859635019,90,0.21362,107.841528958414,202.195702786841,-11.8325163030373,202.106648555887,60.003,0,97.1611633300781,108.882164001465,11.7210006713867 +"2011-11-29 19:59:51.766",-131.539380375299,134167.189535782,-131.912881416555,134.631791248163,0,0,107.917749214584,202.057985118372,-11.773230566362,202.062953616664,60.003,0,97.1522750854492,108.890647888184,11.7383728027344 +"2011-11-29 19:59:51.800",-131.497819920469,134166.624461584,-131.852224455993,134.790834537517,0,0,107.994073305973,201.920625515934,-11.7016315143666,202.228650810782,60.003,0,97.1535186767578,108.885055541992,11.7315368652344 +"2011-11-29 19:59:51.833",-131.456259137422,134166.129980663,-131.852224455993,134.790834537517,90,0.21362,108.051705177287,201.986718892159,-11.7016315143666,202.228650810782,60.003,0,97.1591033935547,108.872146606445,11.7130432128906 +"2011-11-29 19:59:51.866",-131.414698069891,134165.706093799,-131.852224455993,134.790834537517,0,0,108.032946943245,202.189834767319,-11.642353490505,202.185433640913,60.003,0,97.1572265625,108.888328552246,11.7311019897461 +"2011-11-29 19:59:51.900",-131.373136761609,134165.35280166,-131.784516008252,134.648398795233,0,0,108.10929928652,202.053016497905,-11.5952203047726,201.933167973303,60.003,0,97.1603088378906,108.884048461914,11.7237396240234 +"2011-11-29 19:59:51.933",-131.331575256311,134165.070104805,-131.716664255121,134.506151487315,0,0.21362,108.10929928652,202.053016497905,-11.5479692412385,201.68103929949,60.003,0,97.1576995849609,108.891662597656,11.7339630126953 +"2011-11-29 19:59:51.966",-131.290013597736,134164.858003679,-131.656182905216,134.665682026152,0,0.21362,108.185754966393,201.916557524606,-11.5358329035496,201.890339614274,60.003,0,97.1643371582031,108.907920837402,11.7435836791992 +"2011-11-29 19:59:52.000",-131.251391316591,134170.752978159,-131.527883382414,134.683640680801,-45,0.302104301194141,108.300856638255,202.050306289788,-11.4764203643417,201.847728246835,60.003,0,97.1702117919922,108.890197753906,11.7199859619141 +"2011-11-29 19:59:52.033",-131.212407225521,134163.789683633,-131.595844750224,134.825362266222,-90,0.42724,108.281854252029,202.253132680817,-11.4643681633925,202.057081741921,60.003,0,97.1667327880859,108.899765014648,11.7330322265625 +"2011-11-29 19:59:52.066",-131.173788099672,134169.807150821,-131.595844750224,134.825362266222,-90,0.21362,108.300856638255,202.050306289788,-11.4643681633925,202.057081741921,60.003,0,97.1690979003906,108.881050109863,11.7119522094727 +"2011-11-29 19:59:52.100",-131.132227858157,134169.863063521,-131.527883382414,134.683640680801,0,0,108.300856638255,202.050306289788,-11.4049896734304,202.014731437861,60.003,0,97.1707534790039,108.882186889648,11.7114334106445 +"2011-11-29 19:59:52.133",-131.090667673148,134169.989569823,-131.459778934571,134.542108987711,0,0.21362,108.358350232844,202.117486148317,-11.3455863459042,201.972598192849,60.003,0,97.1581726074219,108.878273010254,11.720100402832 +"2011-11-29 19:59:52.166",-131.049107588379,134170.186669527,-131.459778934571,134.542108987711,0,0,108.358350232844,202.117486148317,-11.357520319816,201.763157035958,60.003,0,97.1632843017578,108.874633789063,11.7113494873047 +"2011-11-29 19:59:52.200",-131.007547647581,134170.454362322,-131.459778934571,134.542108987711,0,0,108.415805562855,202.184869387009,-11.2980330391938,201.721197465671,60.003,0,97.162841796875,108.871246337891,11.7084045410156 +"2011-11-29 19:59:52.233",-130.965987894488,134170.792647786,-131.399618712797,134.702274489035,90,0.21362,108.434948822922,201.982200375786,-11.2267056272666,201.888983422855,60.003,0,97.1456756591797,108.889945983887,11.744270324707 +"2011-11-29 19:59:52.266",-130.926989551948,134164.28417318,-131.331389048473,134.561101524007,90,0.21362,108.569130731038,201.915201509284,-11.1672284614734,201.847502167848,60.003,0,97.1612548828125,108.897727966309,11.7364730834961 +"2011-11-29 19:59:52.300",-130.888383913141,134170.752041081,-131.271390167229,134.721583170704,0,0,108.549846622474,202.117711925313,-11.0960545725362,202.015860894523,60.003,0,97.1746368408203,108.890785217285,11.7161483764648 +"2011-11-29 19:59:52.333",-130.846824673934,134171.292733968,-131.271390167229,134.721583170704,0,0,108.549846622474,202.117711925313,-11.0960545725362,202.015860894523,60.003,0,97.1508712768555,108.867088317871,11.7162170410156 +"2011-11-29 19:59:52.366",-130.805265791546,134171.904017294,-131.203036044554,134.580769539576,0,0,108.626572789096,201.983330014355,-11.0365881614305,201.97485757108,60.003,0,97.15771484375,108.892074584961,11.7343597412109 +"2011-11-29 19:59:52.400",-130.763707309704,134172.585890095,-131.203036044554,134.580769539576,0,0,108.683976052426,202.051661398391,-10.9770976647436,201.934071904098,60.003,0,97.1575088500977,108.884780883789,11.7272720336914 +"2011-11-29 19:59:52.433",-130.722149272128,134173.338351293,-131.14319901441,134.741566435677,0,0,108.741340445193,202.120195455627,-10.9770976647436,201.934071904098,60.003,0,97.1483459472656,108.884750366211,11.7364044189453 +"2011-11-29 19:59:52.466",-130.683140250586,134167.218585966,-131.015046520803,134.762223983863,0,0,108.79866589198,202.188931979969,-10.9770976647436,201.934071904098,60.003,0,97.1460723876953,108.875106811523,11.7290344238281 +"2011-11-29 19:59:52.500",-130.641581064638,134168.107893413,-131.015046520803,134.762223983863,0,0,108.875529550081,202.05572666967,-10.8580448697747,201.853154066562,60.003,0,97.1656494140625,108.892242431641,11.7265930175781 +"2011-11-29 19:59:52.533",-130.602566904438,134162.116589883,-130.946445768169,134.622130814135,90,0.21362,108.875529550081,202.05572666967,-10.7984827998122,201.813022158029,60.003,0,97.1601791381836,108.885986328125,11.7258071899414 +"2011-11-29 19:59:52.566",-130.561006734441,134163.142752359,-130.946445768169,134.622130814135,0,0,108.895145990901,201.853606211623,-10.7871319072058,202.022863384885,60.003,0,97.1379928588867,108.883323669434,11.7453308105469 +"2011-11-29 19:59:52.600",-130.519447222061,134164.239503637,-130.88693395056,134.783555505229,0,0,108.9524944811,201.922885475703,-10.716338093744,202.192881644865,60.003,0,97.1658706665039,108.875862121582,11.7099914550781 +"2011-11-29 19:59:52.633",-130.477888411013,134165.406841986,-130.818211032367,134.643823450989,0,0,108.99008601349,202.194348643605,-10.6568482469213,202.153268654776,60.003,0,97.1637878417969,108.879539489746,11.7157516479492 +"2011-11-29 19:59:52.666",-130.436330345007,134166.644765563,-130.818211032367,134.643823450989,0,0,109.009803575165,201.992366895484,-10.6568482469213,202.153268654776,60.003,0,97.1775512695313,108.885192871094,11.7076416015625 +"2011-11-29 19:59:52.700",-130.397750564249,134173.886530207,-130.758862565449,134.80556067983,0,0,109.086880694752,201.860162201193,-10.5973351450236,202.113873682077,60.003,0,97.1629257202148,108.87565612793,11.7127304077148 +"2011-11-29 19:59:52.733",-130.358727605948,134168.284067424,-130.690018251929,134.666190322894,-90,0.21362,109.144161124804,201.930117176997,-10.6084836047421,201.903901027431,60.003,0,97.1670227050781,108.884536743164,11.7175140380859 +"2011-11-29 19:59:52.766",-130.317171651801,134169.724374994,-130.690018251929,134.666190322894,-90,0.21362,109.144161124804,201.930117176997,-10.6084836047421,201.903901027431,60.003,0,97.1654663085938,108.869232177734,11.7037658691406 +"2011-11-29 19:59:52.800",-130.278144175349,134164.250436743,-130.690018251929,134.666190322894,0,0,109.201401823933,202.000273834834,-10.4892684867376,201.825684354222,60.003,0,97.1692962646484,108.893081665039,11.7237854003906 +"2011-11-29 19:59:52.833",-130.233603108415,134159.913984501,-130.561868689064,134.689231093953,135,0.302104301194141,109.25860271932,202.070631964641,-10.4186574588601,201.996998140369,60.003,0,97.1500625610352,108.886566162109,11.7365036010742 +"2011-11-29 19:59:52.866",-130.195032621968,134167.475351841,-130.621031392248,134.527014792456,116.565051177078,0.477668841353505,109.315763738564,202.14119135604,-10.4782396357062,202.035738298276,60.003,0,97.1507110595703,108.872993469238,11.722282409668 +"2011-11-29 19:59:52.900",-130.153478387259,134169.193671401,-130.621031392248,134.527014792456,90,0.21362,109.315763738564,202.14119135604,-10.4296263992079,201.786903869009,60.003,0,97.1658096313477,108.887413024902,11.7216033935547 +"2011-11-29 19:59:52.933",-130.111925238772,134170.982562058,-130.492761354009,134.550418552217,90,0.21362,109.335811896252,201.939608391928,-10.4296263992079,201.786903869009,60.003,0,97.1715393066406,108.879486083984,11.7079467773438 +"2011-11-29 19:59:52.966",-130.069898058523,134159.942411492,-130.492761354009,134.550418552217,45,0.302104301194141,109.392982931598,202.010439444955,-10.3590524880837,201.958476506236,60.003,0,97.184211730957,108.883392333984,11.6991806030273 +"2011-11-29 19:59:53.000",-130.031337000771,134167.761792023,-130.433763603403,134.712945418384,0,0,109.450113832326,202.081471488634,-10.2885984931604,202.130355034608,60.003,0,97.1458358764648,108.888763427734,11.7429275512695 +"2011-11-29 19:59:53.033",-129.989785163876,134169.758110055,-130.364536573097,134.574496433023,0,0,109.470302009467,201.880054935267,-10.2290082873595,202.092310431233,60.003,0,97.1659393310547,108.889389038086,11.7234497070313 +"2011-11-29 19:59:53.066",-129.950745052994,134164.806462118,-130.305704251921,134.73733294054,0,0,109.507204527197,202.152704311092,-10.1097608647243,202.016877400119,60.003,0,97.1641540527344,108.885887145996,11.7217330932617 +"2011-11-29 19:59:53.100",-129.909193562281,134166.93964146,-130.236358309274,134.5992480731,0,0,109.564254945393,202.22413770016,-10.050103881228,201.979489217441,60.003,0,97.1565399169922,108.880920410156,11.7243804931641 +"2011-11-29 19:59:53.133",-129.86764341469,134169.143380958,-130.236358309274,134.5992480731,0,0,109.584542617197,202.022863384885,-10.1097608647243,202.016877400119,60.003,0,97.1690368652344,108.889427185059,11.7203903198242 +"2011-11-29 19:59:53.166",-129.828598734075,134164.386631936,-130.236358309274,134.5992480731,-90,0.21362,109.604870751762,201.821614449225,-10.060689795323,201.769150547972,60.003,0,97.1728363037109,108.885452270508,11.7126159667969 +"2011-11-29 19:59:53.200",-129.78704918194,134166.727230922,-130.177691888871,134.762393294944,0,0,109.641602262267,202.094568471105,-10.0009505069713,201.731942661301,60.003,0,97.1687316894531,108.892417907715,11.7236862182617 +"2011-11-29 19:59:53.233",-129.74550110133,134169.138383149,-130.108227819523,134.624673100825,0,0,109.719048681049,201.965368012658,-9.93072395531613,201.905370125839,60.003,0,97.1709136962891,108.888740539551,11.7178268432617 +"2011-11-29 19:59:53.266",-129.706452205843,134164.576555276,-130.108227819523,134.624673100825,0,0,109.719048681049,201.965368012658,-9.92028045844306,202.115792812806,60.003,0,97.1594543457031,108.884086608887,11.7246322631836 +"2011-11-29 19:59:53.300",-129.664904969951,134167.124563303,-130.108227819523,134.624673100825,0,0,109.776076602639,202.037545238008,-9.93072395531613,201.905370125839,60.003,0,97.1669692993164,108.891235351563,11.7242660522461 +"2011-11-29 19:59:53.333",-129.623359333945,134169.743116695,-129.98014635798,134.650771134745,0,0,109.776076602639,202.037545238008,-9.81125686799605,201.832128202625,60.003,0,97.1558074951172,108.878089904785,11.722282409668 +"2011-11-29 19:59:53.366",-129.58430657856,134165.37622955,-129.98014635798,134.650771134745,0,0,109.853630606723,201.908986322533,-9.81125686799605,201.832128202625,60.003,0,97.1815414428711,108.888305664063,11.7067642211914 +"2011-11-29 19:59:53.400",-129.542762036505,134168.131633187,-129.92181313102,134.814530989565,-90,0.21362,109.890010013177,202.182499503418,-9.75149093377187,201.795836478081,60.003,0,97.1588363647461,108.870109558105,11.7112731933594 +"2011-11-29 19:59:53.433",-129.503706246056,134163.893392268,-129.852115175864,134.677541783613,0,0,109.946915364776,202.255276113598,-9.74122852839484,202.006373262295,60.003,0,97.1452102661133,108.871482849121,11.7262725830078 +"2011-11-29 19:59:53.466",-129.462162962438,134166.785643853,-129.852115175864,134.677541783613,0,0,110.02449398523,202.127532980559,-9.68150165519143,201.970338789343,60.003,0,97.1631393432617,108.877655029297,11.7145156860352 +"2011-11-29 19:59:53.500",-129.417601127321,134163.934938174,-129.782275391368,134.540752275383,90,0.21362,110.081366179226,202.200780743207,-9.62175353083622,201.934523867979,60.003,0,97.1567840576172,108.888565063477,11.7317810058594 +"2011-11-29 19:59:53.533",-129.378540283477,134159.896490965,-129.782275391368,134.540752275383,0,0.21362,110.081366179226,202.200780743207,-9.62175353083622,201.934523867979,60.003,0,97.1786651611328,108.883483886719,11.7048187255859 +"2011-11-29 19:59:53.566",-129.33699859255,134163.001245489,-129.724135521399,134.70498464641,0,0,110.102170583329,202.000160880737,-9.56198427399877,201.89892861504,60.003,0,97.1651382446289,108.880676269531,11.7155380249023 +"2011-11-29 19:59:53.600",-129.295458846102,134166.176523797,-129.654180157251,134.568562144164,0,0,110.159050378491,202.073680639533,-9.50219400361659,201.863553146733,60.003,0,97.1673049926758,108.872856140137,11.7055511474609 +"2011-11-29 19:59:53.633",-129.256395095401,134162.333068648,-129.59620863975,134.733099312381,0,0,110.194986764681,202.347873284846,-9.43244434900269,202.039126297016,60.003,0,97.1736297607422,108.890563964844,11.7169342041016 +"2011-11-29 19:59:53.666",-129.214857111994,134165.645181428,-129.59620863975,134.733099312381,0,0,110.194986764681,202.347873284846,-9.43244434900269,202.039126297016,60.003,0,97.1478958129883,108.889938354492,11.7420425415039 +"2011-11-29 19:59:53.700",-129.175790954903,134161.930411619,-129.59620863975,134.733099312381,0,0,110.27268561331,202.221316954873,-9.43244434900269,202.039126297016,60.003,0,97.1635665893555,108.888671875,11.7251052856445 +"2011-11-29 19:59:53.733",-129.134254898974,134165.379353268,-129.526138496063,134.597044344543,180,0.21362,110.35048163223,202.09513297713,-9.43244434900269,202.039126297016,60.003,0,97.1626129150391,108.902046203613,11.7394332885742 +"2011-11-29 19:59:53.766",-129.092721000321,134168.898800458,-129.455926656042,134.461191089706,90,0.21362,110.428374716448,201.969322049519,-9.31288128578439,201.969547992145,60.003,0,97.1719665527344,108.87459564209,11.7026290893555 +"2011-11-29 19:59:53.800",-129.053652526065,134165.379040896,-129.398151652292,134.626198449795,90,0.21362,110.485143412546,202.043982329469,-9.25306898712307,201.935088821406,60.003,0,97.1499252319336,108.901016235352,11.751091003418 +"2011-11-29 19:59:53.833",-129.012120803905,134169.035303295,-129.398151652292,134.626198449795,0,0,110.463964060924,202.244107451495,-9.19323633689339,201.90084978889,60.003,0,97.1632308959961,108.886688232422,11.7234573364258 +"2011-11-29 19:59:53.866",-128.973050312294,134165.644244314,-129.340518159838,134.791342362311,0,0,110.463964060924,202.244107451495,-9.1835612752765,202.111728749696,60.003,0,97.1456909179688,108.891525268555,11.7458343505859 +"2011-11-29 19:59:53.900",-128.931520930994,134169.437314277,-129.340518159838,134.791342362311,0,0,110.520642493297,202.318891881775,-9.1835612752765,202.111728749696,60.003,0,97.1562423706055,108.882034301758,11.7257919311523 +"2011-11-29 19:59:53.933",-128.892448576684,134166.174961947,-129.270220867176,134.656024023502,0,0,110.598554755134,202.193897260511,-9.08308377813584,201.622088465351,60.003,0,97.1613235473633,108.891120910645,11.7297973632813 +"2011-11-29 19:59:53.966",-128.850921700579,134170.104831016,-129.199782252563,134.520908794177,0,0,110.619872649006,201.993948308115,-9.01361747982354,201.799454637591,60.003,0,97.1549682617188,108.878768920898,11.7238006591797 +"2011-11-29 19:59:54.000",-128.808801003705,134161.23317797,-129.142347378627,134.686520619585,0,0,110.676563261555,202.069276983257,-9.00412511612837,202.010439444955,60.003,0,97.1621627807617,108.881423950195,11.7192611694336 +"2011-11-29 19:59:54.033",-128.767275114384,134165.305008753,-129.142347378627,134.686520619585,0,0,110.733211567467,202.144803334095,-8.94427328705095,201.977116924037,60.003,0,97.1583633422852,108.885162353516,11.7267990112305 +"2011-11-29 19:59:54.066",-128.728197761485,134162.304954542,-129.085053633569,134.85226745375,-90,0.21362,110.711797603666,202.344603217562,-8.88440177116376,201.944014875799,60.003,0,97.156867980957,108.885055541992,11.7281875610352 +"2011-11-29 19:59:54.100",-128.686674712382,134166.51357057,-129.085053633569,134.85226745375,0,0,110.733211567467,202.144803334095,-8.87505108076526,202.155074543976,60.003,0,97.1624221801758,108.884765625,11.7223434448242 +"2011-11-29 19:59:54.133",-128.647595966591,134163.642242304,-129.014532421168,134.717687782338,180,0.21362,110.789817503457,202.220527139142,-8.88440177116376,201.944014875799,60.003,0,97.169548034668,108.901908874512,11.7323608398438 +"2011-11-29 19:59:54.166",-128.606075921946,134167.987632652,-129.014532421168,134.717687782338,0,0,110.86793305803,202.096826485747,-8.8338198003115,201.700044723995,60.003,0,97.1622161865234,108.882118225098,11.7199020385742 +"2011-11-29 19:59:54.200",-128.563938820128,134159.53756059,-128.943870277242,134.583312607583,0,0,110.946144152471,201.973501947174,-8.8338198003115,201.700044723995,60.003,0,97.1586837768555,108.882545471191,11.7238616943359 +"2011-11-29 19:59:54.233",-128.522420280962,134164.024902198,-128.88677722586,134.749525046461,0,0,110.981027754596,202.249409822523,-8.70467031489863,201.846032648259,60.003,0,97.1760482788086,108.86994934082,11.6939010620117 +"2011-11-29 19:59:54.266",-128.483337493688,134161.415921011,-128.88677722586,134.749525046461,0,0,110.981027754596,202.249409822523,-8.635615031911,202.025009260764,60.003,0,97.1738204956055,108.887481689453,11.7136611938477 +"2011-11-29 19:59:54.300",-128.441822293839,134166.040018051,-128.82982490497,134.915870953243,180,0.21362,110.981027754596,202.249409822523,-8.635615031911,202.025009260764,60.003,0,97.16259765625,108.895782470703,11.7331848144531 +"2011-11-29 19:59:54.333",-128.402738583672,134163.559775049,-128.759083020237,134.782031937093,0,0,111.037511025422,202.325996656501,-8.57570816689173,201.993044645271,60.003,0,97.1613235473633,108.888061523438,11.7267379760742 +"2011-11-29 19:59:54.366",-128.36122688725,134168.320614131,-128.688200610296,134.648398795233,0,0.21362,111.059248553597,202.126629914941,-8.52476605190586,201.750038539293,60.003,0,97.1561508178711,108.884986877441,11.7288360595703 +"2011-11-29 19:59:54.400",-128.322142408942,134165.969109977,-128.688200610296,134.648398795233,0,0,111.137564293153,202.004227188448,-8.51578240435006,201.961300922553,60.003,0,97.1584091186523,108.877426147461,11.7190170288086 +"2011-11-29 19:59:54.433",-128.277565246868,134165.195053765,-128.688200610296,134.648398795233,0,0,111.194056481542,202.081358579922,-8.45583786651143,201.929778196784,60.003,0,97.1740417480469,108.881629943848,11.7075881958008 +"2011-11-29 19:59:54.466",-128.238478452797,134162.97719243,-128.631451028238,134.81520796985,0,0,111.250505507133,202.158686273979,-8.45583786651143,201.929778196784,60.003,0,97.1560134887695,108.883834838867,11.7278213500977 +"2011-11-29 19:59:54.500",-128.196972618445,134168.016682664,-128.560459714423,134.681946570397,0,0,111.250505507133,202.158686273979,-8.45583786651143,201.929778196784,60.003,0,97.1864395141602,108.894996643066,11.7085571289063 +"2011-11-29 19:59:54.533",-128.155469923758,134173.126575592,-128.560459714423,134.681946570397,0,0,111.328924076794,202.037206438039,-8.45583786651143,201.929778196784,60.003,0,97.1517028808594,108.906158447266,11.7544555664063 +"2011-11-29 19:59:54.566",-128.116383539209,134171.10375721,-128.432783074644,134.716163469273,-45,0.302104301194141,111.328924076794,202.037206438039,-8.39587467584227,201.898476571478,60.003,0,97.1628341674805,108.884307861328,11.7214736938477 +"2011-11-29 19:59:54.600",-128.074218245432,134163.497299822,-128.432783074644,134.716163469273,-45,0.302104301194141,111.385333612613,202.115002584713,-8.26717333551064,202.047934827864,60.003,0,97.1712646484375,108.852485656738,11.6812210083008 +"2011-11-29 19:59:54.633",-128.035127888651,134161.604286654,-128.361543380267,134.583482143742,0,0.21362,111.44169968533,202.1929944913,-8.2158744151031,201.805899323533,60.003,0,97.158576965332,108.859115600586,11.7005386352539 +"2011-11-29 19:59:54.666",-127.993629582437,134166.988683258,-128.361543380267,134.583482143742,0,0,111.498022236182,202.271181931357,-8.2158744151031,201.805899323533,60.003,0,97.1622467041016,108.860633850098,11.6983871459961 +"2011-11-29 19:59:54.700",-127.954539163257,134165.224416753,-128.305171909519,134.751048982137,180,0.21362,111.55430120683,202.349564678222,-8.1558378425494,201.77548312195,60.003,0,97.1585998535156,108.871658325195,11.7130584716797 +"2011-11-29 19:59:54.733",-127.909960661646,134165.120084403,-128.305171909519,134.751048982137,0,0,111.55430120683,202.349564678222,-8.08724837597425,201.956781837486,60.003,0,97.1658096313477,108.877555847168,11.7117462158203 +"2011-11-29 19:59:54.766",-127.870868658921,134163.489490417,-128.177627433761,134.786602589836,0,0,111.55430120683,202.349564678222,-7.96720891143352,201.897120434717,60.003,0,97.1712646484375,108.882598876953,11.7113342285156 +"2011-11-29 19:59:54.800",-127.831775724151,134161.921352603,-128.177627433761,134.786602589836,0,0,111.63282686325,202.22955342082,-8.02723751043195,201.926840344438,60.003,0,97.1639556884766,108.881813049316,11.7178573608398 +"2011-11-29 19:59:54.833",-127.79028599158,134167.650589582,-128.177627433761,134.786602589836,0,0,111.711445627781,202.109922473194,-8.0187820438234,202.138369453276,60.003,0,97.1689987182617,108.887084960938,11.7180862426758 +"2011-11-29 19:59:54.866",-127.751193384827,134166.211196859,-128.106174494034,134.654668458924,180,0.21362,111.711445627781,202.109922473194,-7.9588150333082,202.108680648734,60.003,0,97.1695175170898,108.884017944336,11.7145004272461 +"2011-11-29 19:59:54.900",-127.706615395252,134166.47733574,-128.106174494034,134.654668458924,180,0.21362,111.733870288346,201.911472420191,-7.89883046819765,202.079213302417,60.003,0,97.1680068969727,108.864212036133,11.6962051391602 +"2011-11-29 19:59:54.933",-127.667521610139,134165.171625844,-128.034581509945,134.522944157731,0,0,111.733870288346,201.911472420191,-7.84709900921375,201.83834575606,60.003,0,97.1670761108398,108.902236938477,11.7351608276367 +"2011-11-29 19:59:54.966",-127.62842708229,134163.928378295,-127.978592542709,134.691263913935,-90,0.21362,111.846400273738,202.070067390168,-7.84709900921375,201.83834575606,60.003,0,97.1837463378906,108.892593383789,11.7088470458984 +"2011-11-29 19:59:55.000",-127.589331848088,134162.747594831,-127.978592542709,134.691263913935,0,0,111.958753326436,202.229440594786,-7.78701795463245,201.809291180837,60.003,0,97.166862487793,108.899230957031,11.7323684692383 +"2011-11-29 19:59:55.033",-127.544753255634,134163.308624461,-127.906894413331,134.559914569025,90,0.21362,111.958753326436,202.229440594786,-7.78701795463245,201.809291180837,60.003,0,97.1540451049805,108.880699157715,11.7266540527344 +"2011-11-29 19:59:55.066",-127.505657165576,134162.261533857,-127.851080532121,134.728526844545,90,0.21362,111.958753326436,202.229440594786,-7.71877268482916,201.992140978384,60.003,0,97.1542205810547,108.884460449219,11.7302398681641 +"2011-11-29 19:59:55.100",-127.464182221508,134168.543642539,-127.851080532121,134.728526844545,0,0,111.981407416128,202.031333814975,-7.65871914199138,201.963560427167,60.003,0,97.1625366210938,108.889434814453,11.7268981933594 +"2011-11-29 19:59:55.133",-127.425087085528,134167.62528789,-127.779278095043,134.597552900489,-90,0.21362,112.037563471893,202.111390074082,-7.65871914199138,201.963560427167,60.003,0,97.1592864990234,108.892738342285,11.7334518432617 +"2011-11-29 19:59:55.166",-127.382884761919,134161.210686502,-127.779278095043,134.597552900489,90,0.21362,112.116465585543,201.993722392783,-7.59864866599933,201.935201811902,60.003,0,97.1561737060547,108.890197753906,11.7340240478516 +"2011-11-29 19:59:55.200",-127.341415368927,134167.700880585,-127.651733761387,134.635858591961,90,0.21362,112.172578366332,202.07424520391,-7.47845741457682,201.879150762607,60.003,0,97.1520233154297,108.868453979492,11.7164306640625 +"2011-11-29 19:59:55.233",-127.302319265377,134166.978687479,-127.651733761387,134.635858591961,0,0,112.14974195976,202.272084351606,-7.41833688970171,201.851458513564,60.003,0,97.1672134399414,108.879409790039,11.7121963500977 +"2011-11-29 19:59:55.266",-127.257743925049,134168.062600412,-127.596271147212,134.805052908598,0,0,112.205764283139,202.352721908032,-7.47845741457682,201.879150762607,60.003,0,97.1569061279297,108.883804321289,11.7268981933594 +"2011-11-29 19:59:55.300",-127.218647537686,134167.474102373,-127.524262614452,134.674831073985,0,0.21362,112.261741921046,202.433552767924,-7.42617404595522,201.639628422371,60.003,0,97.1694946289063,108.877494812012,11.7080001831055 +"2011-11-29 19:59:55.333",-127.179550825549,134166.948075401,-127.524262614452,134.674831073985,0,0,112.261741921046,202.433552767924,-7.36597496833521,201.612129617101,60.003,0,97.17138671875,108.893104553223,11.7217178344727 +"2011-11-29 19:59:55.366",-127.140453825044,134166.484520233,-127.524262614452,134.674831073985,0,0,112.284669607072,202.23587157829,-7.29804666962628,201.79674102404,60.003,0,97.1677169799805,108.891242980957,11.7235260009766 +"2011-11-29 19:59:55.400",-127.095879855074,134167.863311025,-127.524262614452,134.674831073985,0,0,112.363666015473,202.119405244746,-7.29804666962628,201.79674102404,60.003,0,97.1463241577148,108.88215637207,11.7358322143555 +"2011-11-29 19:59:55.433",-127.056782893353,134167.53345208,-127.452114805956,134.544822371326,0,0,112.442753365294,202.003323571586,-7.29034998618275,202.008632262766,60.003,0,97.1465606689453,108.865577697754,11.7190170288086 +"2011-11-29 19:59:55.466",-127.017685757593,134167.266065824,-127.396865852053,134.714469767861,0,0,112.475578562154,202.282349098589,-7.23024263925158,201.981635554132,60.003,0,97.1540145874023,108.892127990723,11.7381134033203 +"2011-11-29 19:59:55.500",-126.973113448372,134168.868501182,-127.341755925444,134.884242110593,-90,0.21362,112.531467144793,202.364110077685,-7.23024263925158,201.981635554132,60.003,0,97.1471710205078,108.896003723145,11.7488327026367 +"2011-11-29 19:59:55.533",-126.934016596069,134168.734809451,-127.341755925444,134.884242110593,-90,0.21362,112.531467144793,202.364110077685,-7.16256272590809,202.166812430572,60.003,0,97.1634063720703,108.891593933105,11.7281875610352 +"2011-11-29 19:59:55.566",-126.894919684055,134168.663590437,-127.269544667663,134.754774085682,-90,0.21362,112.587310531366,202.446063447113,-7.10248556771431,202.140288351442,60.003,0,97.1835021972656,108.867385864258,11.6838836669922 +"2011-11-29 19:59:55.600",-126.855822748739,134168.65484424,-127.142300250357,134.795743430377,0,0.21362,112.666397691414,202.331071342847,-7.10998006017388,201.928309275954,60.003,0,97.1632843017578,108.874778747559,11.7114944458008 +"2011-11-29 19:59:55.633",-126.813595769288,134163.222408479,-127.142300250357,134.795743430377,0,0,112.666397691414,202.331071342847,-7.04982508037026,201.901979882615,60.003,0,97.1823577880859,108.884941101074,11.7025833129883 +"2011-11-29 19:59:55.666",-126.774497301358,134163.34361064,-127.142300250357,134.795743430377,180,0.21362,112.666397691414,202.331071342847,-6.98965447562817,201.875873102765,60.003,0,97.1611480712891,108.889083862305,11.7279357910156 +"2011-11-29 19:59:55.700",-126.729927068674,134165.389036794,-127.069850379358,134.666868048899,180,0.21362,112.745574647743,202.216465180939,-6.9367917319562,201.637931073858,60.003,0,97.1539840698242,108.899436950684,11.7454528808594 +"2011-11-29 19:59:55.733",-126.690829368894,134165.643931943,-127.069850379358,134.666868048899,-90,0.21362,112.824841250457,202.102245617957,-6.92946837263094,201.849989022779,60.003,0,97.1744003295898,108.870712280273,11.6963119506836 +"2011-11-29 19:59:55.766",-126.651731835878,134165.961300716,-126.997261823671,134.538208402892,0,0,112.904197347952,201.988413309739,-6.86202117524377,202.036415902569,60.003,0,97.1494750976563,108.889289855957,11.7398147583008 +"2011-11-29 19:59:55.800",-126.609496067956,134160.881123582,-126.942584926244,134.708880402113,0,0,112.959992033727,202.071648194715,-6.80186676922141,202.011004186074,60.003,0,97.1737213134766,108.882904052734,11.7091827392578 +"2011-11-29 19:59:55.833",-126.568067963564,134168.681395194,-126.942584926244,134.708880402113,0,0,112.959992033727,202.071648194715,-6.80186676922141,202.011004186074,60.003,0,97.1567077636719,108.877044677734,11.7203369140625 +"2011-11-29 19:59:55.866",-126.525829951735,134163.745638677,-126.869897645844,134.5806,45,0.302104301194141,112.93638727904,202.268361842128,-6.74169729354425,201.985815196971,60.003,0,97.1740264892578,108.901489257813,11.7274627685547 +"2011-11-29 19:59:55.900",-126.486732456375,134164.326656088,-126.869897645844,134.5806,45,0.302104301194141,112.992091509316,202.351707089537,-6.68151287531138,201.960849018597,60.003,0,97.1633987426758,108.875717163086,11.7123184204102 +"2011-11-29 19:59:55.933",-126.447635317853,134164.970145553,-126.815399457289,134.751556956866,90,0.21362,113.01574072108,202.155074543976,-6.62131364181689,201.936105733593,60.003,0,97.1692276000977,108.888412475586,11.7191848754883 +"2011-11-29 19:59:55.966",-126.405391832928,134160.242300261,-126.742614308232,134.62365619191,0,0,113.095182999426,202.042175447307,-6.56803341083019,201.699365989671,60.003,0,97.1511535644531,108.888259887695,11.7371063232422 +"2011-11-29 19:59:56.000",-126.363975713649,134168.388084949,-126.66969084485,134.495973090886,0,0.21362,113.150883797352,202.126065496881,-6.56803341083019,201.699365989671,60.003,0,97.1445465087891,108.876342773438,11.7317962646484 +"2011-11-29 19:59:56.033",-126.324880465698,134169.227718958,-126.742614308232,134.62365619191,45,0.302104301194141,113.206538325986,202.210146417106,-6.56803341083019,201.699365989671,60.003,0,97.1686477661133,108.898574829102,11.7299270629883 +"2011-11-29 19:59:56.066",-126.285785725264,134170.12981988,-126.615412989004,134.667376341164,90,0.21362,113.206538325986,202.210146417106,-6.50087123918559,201.887288170771,60.003,0,97.1611557006836,108.900970458984,11.7398147583008 +"2011-11-29 19:59:56.100",-126.243538374059,134165.681416483,-126.615412989004,134.667376341164,0,0,113.230412659509,202.013827867985,-6.38037110784609,201.83936315566,60.003,0,97.1548614501953,108.880920410156,11.7260589599609 +"2011-11-29 19:59:56.133",-126.201288244225,134161.305962835,-126.561273174557,134.838900138536,180,0.21362,113.262146538066,202.294417969984,-6.32009971417484,201.815735552664,60.003,0,97.1534805297852,108.878120422363,11.7246398925781 +"2011-11-29 19:59:56.166",-126.16219214616,134162.405540537,-126.488294861575,134.711759801309,0,0,113.317708386755,202.378879917372,-6.25320767941112,202.004678995363,60.003,0,97.1620025634766,108.901679992676,11.7396774291992 +"2011-11-29 19:59:56.200",-126.119938396328,134158.170554998,-126.415178784151,134.584838425322,0,0,113.421282594158,202.071422366251,-6.25981427301696,201.792331324191,60.003,0,97.1482009887695,108.870132446289,11.7219314575195 +"2011-11-29 19:59:56.233",-126.078539556976,134166.799388069,-126.415178784151,134.584838425322,0,0.21362,113.421282594158,202.071422366251,-6.25981427301696,201.792331324191,60.003,0,97.1569366455078,108.886672973633,11.729736328125 +"2011-11-29 19:59:56.266",-126.036284618161,134162.708859959,-126.415178784151,134.584838425322,0,0,113.397229918577,202.267459405271,-6.25981427301696,201.792331324191,60.003,0,97.1673736572266,108.872253417969,11.7048797607422 +"2011-11-29 19:59:56.300",-125.99719048177,134164.072070812,-126.361261094552,134.756805916941,0,0,113.532348560901,202.241625442823,-6.19951491298899,201.769150547972,60.003,0,97.1594848632813,108.888847351074,11.729362487793 +"2011-11-29 19:59:56.333",-125.958097158025,134165.497742137,-126.288050004691,134.630265962558,-90,0.21362,113.55653533318,202.045789195472,-6.14569669456231,201.533799705404,60.003,0,97.1800765991211,108.873489379883,11.6934127807617 +"2011-11-29 19:59:56.366",-125.919004683297,134166.985871945,-126.161007613952,134.676355854864,-45,0.302104301194141,113.612041640562,202.131258083583,-6.07887495170095,201.723459659685,60.003,0,97.1493682861328,108.872230529785,11.7228622436523 +"2011-11-29 19:59:56.400",-125.876745146321,134163.170866289,-126.161007613952,134.676355854864,0,0.21362,113.643227326595,202.412587193647,-6.0724564072077,201.935879753549,60.003,0,97.1727752685547,108.873733520508,11.7009582519531 +"2011-11-29 19:59:56.433",-125.835363926278,134172.211063515,-126.161007613952,134.676355854864,45,0.302104301194141,113.698596397693,202.498351971748,-6.01217883264429,201.913393474689,60.003,0,97.1650314331055,108.875534057617,11.7105026245117 +"2011-11-29 19:59:56.466",-125.795390476709,134161.114472956,-126.161007613952,134.676355854864,90,0.21362,113.667500975372,202.216916513658,-5.95818086286931,201.678663495497,60.003,0,97.1680755615234,108.876167297363,11.7080917358398 +"2011-11-29 19:59:56.500",-125.756298725017,134162.862549868,-126.161007613952,134.676355854864,180,0.21362,113.691821640981,202.0212821986,-5.95818086286931,201.678663495497,60.003,0,97.1696929931641,108.890937805176,11.7212448120117 +"2011-11-29 19:59:56.533",-125.714033477116,134159.328574576,-126.087565030477,134.550418552217,-90,0.21362,113.747277249746,202.107213028172,-5.95188789759255,201.891130721727,60.003,0,97.158317565918,108.890197753906,11.7318801879883 +"2011-11-29 19:59:56.566",-125.672662244694,134168.643911493,-126.03405277182,134.723107422448,-90,0.21362,113.747277249746,202.107213028172,-5.89158373117236,201.869091568619,60.003,0,97.1570816040039,108.885498046875,11.7284164428711 +"2011-11-29 19:59:56.600",-125.63039668282,134165.25440448,-126.03405277182,134.723107422448,0,0,113.77827855095,202.388801036513,-5.83126646267756,201.847276088607,60.003,0,97.1822662353516,108.897537231445,11.7152709960938 +"2011-11-29 19:59:56.633",-125.591308487558,134167.266065824,-125.907186633143,134.770519976709,0,0,113.858046858678,202.279641963145,-5.77093622157434,201.825684354222,60.003,0,97.1639556884766,108.880493164063,11.7165374755859 +"2011-11-29 19:59:56.666",-125.552221482621,134169.340169542,-125.907186633143,134.770519976709,0,0,113.937901150956,202.170875386383,-5.77093622157434,201.825684354222,60.003,0,97.1505889892578,108.883575439453,11.7329864501953 +"2011-11-29 19:59:56.700",-125.509953223485,134166.158718707,-125.833558936457,134.645348583012,0,0,113.993210569228,202.257645144454,-5.71059313749964,201.804316437281,60.003,0,97.1790924072266,108.858116149902,11.6790237426758 +"2011-11-29 19:59:56.733",-125.467682982712,134163.050288726,-125.833558936457,134.645348583012,0,0,113.993210569228,202.257645144454,-5.65023734025957,201.783172408889,60.003,0,97.1486206054688,108.87654876709,11.7279281616211 +"2011-11-29 19:59:56.766",-125.428596780492,134165.32187684,-125.833558936457,134.645348583012,90,0.21362,114.07314592189,202.149543957351,-5.65023734025957,201.783172408889,60.003,0,97.167236328125,108.877380371094,11.7101440429688 +"2011-11-29 19:59:56.800",-125.386324455853,134162.353998034,-125.759794340298,134.520399948476,45,0.302104301194141,114.128402930268,202.236774156101,-5.58986895982779,201.762252339434,60.003,0,97.1610794067383,108.882858276367,11.7217788696289 +"2011-11-29 19:59:56.833",-125.347239486626,134164.755545283,-125.706691400603,134.693804895768,0,0.21362,114.128402930268,202.236774156101,-5.52948812634393,201.741556298588,60.003,0,97.1972503662109,108.888442993164,11.6911926269531 +"2011-11-29 19:59:56.866",-125.304965248551,134161.92822496,-125.653725060032,134.867325247108,0,0,114.18361224021,202.324192292904,-5.46331815063409,201.933732930525,60.003,0,97.1837997436523,108.875831604004,11.6920318603516 +"2011-11-29 19:59:56.900",-125.265881669952,134164.459727464,-125.579915734572,134.742921126029,180,0.21362,114.23877381106,202.411798124257,-5.40868962159849,201.70083657782,60.003,0,97.1591644287109,108.880500793457,11.7213363647461 +"2011-11-29 19:59:56.933",-125.223605688899,134161.772972079,-125.579915734572,134.742921126029,-90,0.21362,114.293887602585,202.499591406557,-5.41441546165087,201.488168688449,60.003,0,97.1670913696289,108.893409729004,11.726318359375 +"2011-11-29 19:59:56.966",-125.18452365855,134164.43442517,-125.505970114241,134.618741023863,0,0,114.373886601407,202.392972270926,-5.41441546165087,201.488168688449,60.003,0,97.1730804443359,108.872970581055,11.6998901367188 +"2011-11-29 19:59:57.000",-125.142246104999,134161.888240332,-125.505970114241,134.618741023863,0,0,114.373886601407,202.392972270926,-5.34827221143136,201.680813033649,60.003,0,97.1715469360352,108.903770446777,11.7322235107422 +"2011-11-29 19:59:57.033",-125.103165780503,134164.679638556,-125.379198260178,134.668901206449,0,0,114.398867615148,202.198411046106,-5.28225528771244,201.8737256416,60.003,0,97.1695251464844,108.899848937988,11.7303237915039 +"2011-11-29 19:59:57.066",-125.060886824954,134162.274029019,-125.379198260178,134.668901206449,0,0,114.453969774112,202.286748116418,-5.22187730053441,201.854171391524,60.003,0,97.1380767822266,108.87646484375,11.7383880615234 +"2011-11-29 19:59:57.100",-125.021808363891,134165.195366137,-125.379198260178,134.668901206449,0,0,114.453969774112,202.286748116418,-5.16148768128784,201.834841340405,60.003,0,97.1440734863281,108.897666931152,11.7535934448242 +"2011-11-29 19:59:57.133",-124.979528176859,134162.930335809,-125.379198260178,134.668901206449,0,0,114.534136940225,202.180919565591,-5.16148768128784,201.834841340405,60.003,0,97.169319152832,108.879898071289,11.710578918457 +"2011-11-29 19:59:57.166",-124.937246585221,134160.738364796,-125.252521428097,134.719720172929,0,0,114.534136940225,202.180919565591,-5.16148768128784,201.834841340405,60.003,0,97.1678695678711,108.87727355957,11.7094039916992 +"2011-11-29 19:59:57.200",-124.898170488792,134163.85715673,-125.252521428097,134.719720172929,0,0,114.614387917577,202.075487239988,-5.10108656082445,201.815735552664,60.003,0,97.1759948730469,108.88557434082,11.7095794677734 +"2011-11-29 19:59:57.233",-124.859096227232,134167.038349773,-125.252521428097,134.719720172929,0,0,114.589184572165,202.269715489865,-5.03535056054622,202.009648804737,60.003,0,97.1767120361328,108.879737854004,11.7030258178711 +"2011-11-29 19:59:57.266",-124.816814088812,134165.054486177,-125.125940748243,134.771197178069,-90,0.21362,114.669428918463,202.164555197616,-4.97498999786319,201.991011389089,60.003,0,97.164924621582,108.886695861816,11.7217712402344 +"2011-11-29 19:59:57.300",-124.774530722971,134163.14368949,-125.125940748243,134.771197178069,0,0,114.724421391009,202.25380955678,-4.98025034041287,201.778197021388,60.003,0,97.1566314697266,108.891799926758,11.7351684570313 +"2011-11-29 19:59:57.333",-124.735459304942,134166.522316907,-125.051594681392,134.648398795233,0,0.21362,114.724421391009,202.25380955678,-4.85936968912568,201.741556298588,60.003,0,97.1647186279297,108.876846313477,11.7121276855469 +"2011-11-29 19:59:57.366",-124.693175307813,134164.752109177,-125.051594681392,134.648398795233,0,0.21362,114.749756632142,202.059791859159,-4.85936968912568,201.741556298588,60.003,0,97.162727355957,108.874214172363,11.7114868164063 +"2011-11-29 19:59:57.400",-124.654106465169,134168.260640042,-124.977113010261,134.525827536718,0,0,114.804742046499,202.149318215907,-4.79891303061957,201.723572768719,60.003,0,97.1680297851563,108.879829406738,11.711799621582 +"2011-11-29 19:59:57.433",-124.611822007291,134166.631021332,-124.92502503413,134.700919389899,0,0,114.859678728825,202.239030583006,-4.79384239750302,201.936444703184,60.003,0,97.1591033935547,108.86799621582,11.7088928222656 +"2011-11-29 19:59:57.466",-124.57497455994,134162.731038799,-124.92502503413,134.700919389899,180,0.21362,114.914566643,202.328928713026,-4.73343833057548,201.918704530242,60.003,0,97.1684875488281,108.874038696289,11.7055511474609 +"2011-11-29 19:59:57.500",-124.53268745995,134161.238176074,-124.850457442307,134.57873505057,180,0.21362,114.994955082422,202.225378815621,-4.67796770657818,201.68827967238,60.003,0,97.1475372314453,108.872657775879,11.7251205444336 +"2011-11-29 19:59:57.533",-124.490399441897,134159.818394794,-124.798554665342,134.754096801788,0,0,115.04978637591,202.315734124032,-4.67796770657818,201.68827967238,60.003,0,97.1774063110352,108.877937316895,11.7005310058594 +"2011-11-29 19:59:57.566",-124.451334757165,134163.650676452,-124.798554665342,134.754096801788,0,0,115.04978637591,202.315734124032,-4.67302371591581,201.901188817672,60.003,0,97.1702423095703,108.870323181152,11.700080871582 +"2011-11-29 19:59:57.600",-124.409046703397,134162.371491249,-124.798554665342,134.754096801788,0,0,115.104568665234,202.406274552394,-4.61259868513758,201.883897623897,60.003,0,97.1501235961914,108.877395629883,11.7272720336914 +"2011-11-29 19:59:57.633",-124.369985144056,134166.333645799,-124.723902038361,134.632299672857,0,0,115.130248947338,202.212854482926,-4.55698058640966,201.653885585838,60.003,0,97.1458892822266,108.887428283691,11.7415390014648 +"2011-11-29 19:59:57.666",-124.327697225104,134165.195053765,-124.649114345069,134.51073151443,0,0,115.185022994094,202.3036665243,-4.49647168326508,201.637025815476,60.003,0,97.1630401611328,108.897422790527,11.7343826293945 +"2011-11-29 19:59:57.700",-124.287611201495,134156.565180327,-124.597447913061,134.686520619585,180,0.21362,115.239747837937,202.394663287415,-4.43595272794642,201.620390969178,60.003,0,97.1670532226563,108.888748168945,11.7216949462891 +"2011-11-29 19:59:57.733",-124.248551653912,134160.72118375,-124.597447913061,134.686520619585,90,0.21362,115.265558817943,202.20145779442,-4.43126241428811,201.833371728635,60.003,0,97.150749206543,108.883010864258,11.7322616577148 +"2011-11-29 19:59:57.766",-124.20729649793,134172.510924862,-124.522576403995,134.565340563475,0,0.21362,115.320274993607,202.292726115519,-4.43126241428811,201.833371728635,60.003,0,97.1583251953125,108.880897521973,11.7225723266602 +"2011-11-29 19:59:57.800",-124.167205033594,134164.078318309,-124.522576403995,134.565340563475,0,0,115.320274993607,202.292726115519,-4.37079703790748,201.81697917968,60.003,0,97.1677093505859,108.869445800781,11.7017364501953 +"2011-11-29 19:59:57.833",-124.124915002939,134163.290194237,-124.522576403995,134.565340563475,0,0,115.400883187533,202.191188940785,-4.37079703790748,201.81697917968,60.003,0,97.1616363525391,108.889060974121,11.727424621582 +"2011-11-29 19:59:57.866",-124.085862648137,134167.705878448,-124.396141740129,134.620605419075,0,0,115.455540869478,202.28291308058,-4.31032190551353,201.800811430683,60.003,0,97.1804656982422,108.890274047852,11.7098083496094 +"2011-11-29 19:59:57.900",-124.043573347858,134167.058341321,-124.396141740129,134.620605419075,0,0,115.51014895576,202.374821137541,-4.19377903824455,201.556101927143,60.003,0,97.162727355957,108.873901367188,11.7111740112305 +"2011-11-29 19:59:57.933",-124.001283662409,134166.483895494,-124.344847928247,134.796928308767,0,0,115.536220548437,202.18204809387,-4.12883929705727,201.753657520123,60.003,0,97.1711578369141,108.867958068848,11.6968002319336 +"2011-11-29 19:59:57.966",-123.958993637863,134165.982541906,-124.26981145692,134.676525273896,-90,0.21362,115.562341899724,201.989316993303,-4.18934290248063,201.769150547972,60.003,0,97.1614303588867,108.873962402344,11.712532043457 +"2011-11-29 19:59:58.000",-123.922129562639,134163.065907587,-124.26981145692,134.676525273896,-90,0.21362,115.562341899724,201.989316993303,-4.12883929705727,201.753657520123,60.003,0,97.1431350708008,108.888893127441,11.7457580566406 +"2011-11-29 19:59:58.033",-123.879838226822,134162.701362886,-124.26981145692,134.676525273896,-90,0.21362,115.562341899724,201.989316993303,-4.06832646604841,201.738389503964,60.003,0,97.1537857055664,108.898345947266,11.7445602416992 +"2011-11-29 19:59:58.066",-123.837546684219,134162.40991384,-124.143586651938,134.733099312381,180,0.21362,115.616980606537,202.081584397282,-4.00356831248804,201.936444703184,60.003,0,97.1659469604492,108.890464782715,11.7245178222656 +"2011-11-29 19:59:58.100",-123.798504088879,134167.284183134,-124.143586651938,134.733099312381,180,0.21362,115.671569392112,202.174035406675,-3.94310100213915,201.92164250096,60.003,0,97.1497192382813,108.881507873535,11.7317886352539 +"2011-11-29 19:59:58.133",-123.758386488762,134159.521628932,-124.068335222288,134.613317181879,0,0,115.752399582824,202.07424520391,-3.88262489319464,201.907065226103,60.003,0,97.1625518798828,108.876884460449,11.7143325805664 +"2011-11-29 19:59:58.166",-123.719345984488,134164.522202242,-123.992949882651,134.493767670131,0,0.21362,115.833309484414,201.97485757108,-3.82618554633005,201.679568566985,60.003,0,97.1608352661133,108.871757507324,11.7109222412109 +"2011-11-29 19:59:58.200",-123.677054876845,134164.50814542,-123.992949882651,134.493767670131,0,0.21362,115.861406692202,202.26023976546,-3.7656285835644,201.665426360879,60.003,0,97.1608276367188,108.876556396484,11.7157287597656 +"2011-11-29 19:59:58.233",-123.634763783381,134164.567184065,-123.942137081005,134.670934333304,0,0,115.861406692202,202.26023976546,-3.7656285835644,201.665426360879,60.003,0,97.1676330566406,108.86946105957,11.7018280029297 +"2011-11-29 19:59:58.266",-123.595729474292,134169.76498201,-123.942137081005,134.670934333304,0,0,115.887827639524,202.068034909008,-3.76164681107761,201.878585652637,60.003,0,97.1521453857422,108.89168548584,11.7395401000977 +"2011-11-29 19:59:58.300",-123.55560118455,134162.334942921,-123.816047488996,134.729204256979,0,0,115.970213111162,202.446965087817,-3.70114510397112,201.864683449255,60.003,0,97.158576965332,108.898628234863,11.7400512695313 +"2011-11-29 19:59:58.333",-123.513309587592,134162.603900896,-123.816047488996,134.729204256979,0,0,116.024540989947,202.540601153013,-3.64063513039763,201.851006363693,60.003,0,97.1677703857422,108.896591186523,11.7288208007813 +"2011-11-29 19:59:58.366",-123.474279528445,134167.995441796,-123.816047488996,134.729204256979,0,0,116.051080161821,202.348662603514,-3.64063513039763,201.851006363693,60.003,0,97.1569519042969,108.887763977051,11.7308120727539 +"2011-11-29 19:59:58.400",-123.43414410328,134160.764604934,-123.816047488996,134.729204256979,180,0.21362,116.077669723433,202.156767550449,-3.64063513039763,201.851006363693,60.003,0,97.1615295410156,108.89990234375,11.7383728027344 +"2011-11-29 19:59:58.433",-123.391852382904,134161.243486559,-123.69006752598,134.788126106308,0,0,116.105396927234,202.442569551456,-3.52331780630927,201.611111070802,60.003,0,97.1603851318359,108.880676269531,11.7202911376953 +"2011-11-29 19:59:58.466",-123.349560987485,134161.795463454,-123.614446215495,134.669748346369,0,0.21362,116.186331049104,202.344941502835,-3.52331780630927,201.611111070802,60.003,0,97.1730651855469,108.901214599609,11.7281494140625 +"2011-11-29 19:59:58.500",-123.310537470796,134167.448175914,-123.614446215495,134.669748346369,45,0.302104301194141,116.240585861189,202.439301013831,-3.52331780630927,201.611111070802,60.003,0,97.1746368408203,108.860580444336,11.6859436035156 +"2011-11-29 19:59:58.533",-123.268248430443,134168.140691784,-123.614446215495,134.669748346369,90,0.21362,116.267343145563,202.247717591554,-3.5195909172056,201.824327728342,60.003,0,97.1575622558594,108.879501342773,11.7219390869141 +"2011-11-29 19:59:58.566",-123.228102254429,134161.247859899,-123.614446215495,134.669748346369,180,0.21362,116.294151164949,202.05617836143,-3.45905694453434,201.811326267856,60.003,0,97.1482009887695,108.883804321289,11.7356033325195 +"2011-11-29 19:59:58.600",-123.19122413981,134159.432599045,-123.488500091889,134.72971231407,180,0.21362,116.402663951473,202.245799712671,-3.34150139830928,201.572742078912,60.003,0,97.1568298339844,108.898193359375,11.7413635253906 +"2011-11-29 19:59:58.633",-123.14893331292,134160.331329611,-123.412669352474,134.611961187236,0,0,116.375778408001,202.437159529531,-3.28088077260941,201.560403594635,60.003,0,97.1731033325195,108.878662109375,11.7055587768555 +"2011-11-29 19:59:58.666",-123.106643075673,134161.303151403,-123.488500091889,134.72971231407,180,0.21362,116.375778408001,202.437159529531,-3.27740916610742,201.773673835379,60.003,0,97.151237487793,108.882888793945,11.7316513061523 +"2011-11-29 19:59:58.700",-123.064353474134,134162.348062835,-123.412669352474,134.611961187236,180,0.21362,116.402663951473,202.245799712671,-3.27740916610742,201.773673835379,60.003,0,97.1615982055664,108.874130249023,11.712532043457 +"2011-11-29 19:59:58.733",-123.025342683927,134168.455555733,-123.362666635135,134.790326710811,0,0,116.456843978978,202.340882042229,-3.21684506594771,201.761573814379,60.003,0,97.1549530029297,108.885643005371,11.7306900024414 +"2011-11-29 19:59:58.766",-122.985184542841,134161.961337221,-123.286760297038,134.672967429466,0,0,116.510973062402,202.436145134324,-3.09569540865842,201.738050201592,60.003,0,97.1742858886719,108.896507263184,11.7222213745117 +"2011-11-29 19:59:58.800",-122.942896222833,134163.216160942,-123.286760297038,134.672967429466,0,0,116.592103006755,202.340543750169,-3.09569540865842,201.738050201592,60.003,0,97.1489715576172,108.887687683105,11.7387161254883 +"2011-11-29 19:59:58.833",-122.903891329647,134169.517279021,-123.21072168179,134.555844929596,0,0,116.592103006755,202.340543750169,-3.03832607147491,201.513306655917,60.003,0,97.1713790893555,108.879653930664,11.7082748413086 +"2011-11-29 19:59:58.866",-122.863727747524,134163.222408479,-123.160965869247,134.734623433843,0,0,116.727361733015,202.341333097429,-3.03511011988427,201.726626688684,60.003,0,97.1679153442383,108.904411315918,11.7364959716797 +"2011-11-29 19:59:58.900",-122.821441089063,134164.687135518,-123.160965869247,134.734623433843,90,0.21362,116.727361733015,202.341333097429,-3.03511011988427,201.726626688684,60.003,0,97.1602401733398,108.90355682373,11.7433166503906 +"2011-11-29 19:59:58.933",-122.781272254111,134158.527614704,-123.160965869247,134.734623433843,90,0.21362,116.673309488518,202.245348444409,-2.9713727138609,201.928761252732,60.003,0,97.1509399414063,108.889785766602,11.7388458251953 +"2011-11-29 19:59:58.966",-122.742273781217,134165.086348176,-123.084852928735,134.617893562958,0,0,116.754592289334,202.150559790727,-2.91391929366338,201.704456441431,60.003,0,97.1467895507813,108.886085510254,11.7392959594727 +"2011-11-29 19:59:59.000",-122.699989164251,134166.760966736,-123.008608010379,134.501401664835,0,0,116.808631200242,202.24681506258,-2.85633800746411,201.480354897497,60.003,0,97.1661834716797,108.865158081055,11.698974609375 +"2011-11-29 19:59:59.033",-122.659815494283,134160.800841308,-122.959100760341,134.68059126673,180,0.21362,116.889976500099,202.152704311092,-2.85331402512287,201.693709781478,60.003,0,97.1562805175781,108.891235351563,11.7349548339844 +"2011-11-29 19:59:59.066",-122.617530622126,134162.617957918,-122.959100760341,134.68059126673,180,0.21362,116.916554616951,202.439864558566,-2.73208445010529,201.672893569279,60.003,0,97.1646957397461,108.895141601563,11.7304458618164 +"2011-11-29 19:59:59.100",-122.575246918408,134164.50814542,-122.959100760341,134.68059126673,0,0,116.862618650199,202.343250070813,-2.6714604130534,201.662824086925,60.003,0,97.1593627929688,108.884353637695,11.7249908447266 +"2011-11-29 19:59:59.133",-122.532964429135,134166.471400723,-122.882782798888,134.564492766264,0,0,116.94395019456,202.249409822523,-2.72919467096423,201.886271012688,60.003,0,97.158088684082,108.892585754395,11.7344970703125 +"2011-11-29 19:59:59.166",-122.496081203349,134165.703907201,-122.833466224534,134.743937134854,0,0,117.02535708262,202.155977482526,-2.72919467096423,201.886271012688,60.003,0,97.1645431518555,108.897598266602,11.7330551147461 +"2011-11-29 19:59:59.200",-122.453800311251,134167.803961464,-122.757076124996,134.628232221538,0,0,117.07926496202,202.253132680817,-2.6714604130534,201.662824086925,60.003,0,97.1678619384766,108.888481140137,11.7206192016602 +"2011-11-29 19:59:59.233",-122.413616448136,134162.248101555,-122.757076124996,134.628232221538,90,0.21362,117.07926496202,202.253132680817,-2.61083038939413,201.652980399079,60.003,0,97.1650466918945,108.901016235352,11.735969543457 +"2011-11-29 19:59:59.266",-122.373429276505,134156.758238659,-122.757076124996,134.628232221538,90,0.21362,117.133121027816,202.350466748909,-2.55019451404429,201.643362538808,60.003,0,97.1731033325195,108.886444091797,11.7133407592773 +"2011-11-29 19:59:59.300",-122.334451309346,134163.96680044,-122.631489029759,134.692619110211,90,0.21362,117.214573993452,202.257983575169,-2.48955292199916,201.633970538429,60.003,0,97.1670379638672,108.87548828125,11.7084503173828 +"2011-11-29 19:59:59.333",-122.292172611987,134166.346140583,-122.554896803268,134.577548251114,0,0,117.29610131753,202.165909540414,-2.36574723738949,201.829301978654,60.003,0,97.1810455322266,108.887107849121,11.7060623168945 +"2011-11-29 19:59:59.366",-122.251981818576,134161.055745173,-122.554896803268,134.577548251114,0,0,117.29610131753,202.165909540414,-2.36574723738949,201.829301978654,60.003,0,97.1683578491211,108.879386901855,11.7110290527344 +"2011-11-29 19:59:59.400",-122.21301174065,134168.457742286,-122.50602254766,134.757652504257,0,0,117.29610131753,202.165909540414,-2.36825312818573,201.615864242842,60.003,0,97.1613616943359,108.897102355957,11.7357406616211 +"2011-11-29 19:59:59.433",-122.172818516129,134163.297378901,-122.50602254766,134.757652504257,0,0,117.403598083376,202.362193301908,-2.36825312818573,201.615864242842,60.003,0,97.1722106933594,108.890762329102,11.7185516357422 +"2011-11-29 19:59:59.466",-122.130542686494,134165.955990417,-122.429360383329,134.642976147957,0,0.21362,117.457268208978,202.460601913804,-2.31004222080242,201.393703423804,60.003,0,97.1649475097656,108.885452270508,11.7205047607422 +"2011-11-29 19:59:59.500",-122.088268555302,134168.687642477,-122.429360383329,134.642976147957,0,0,117.485168813572,202.271069128542,-2.30759519678425,201.607150008498,60.003,0,97.1559066772461,108.893898010254,11.7379913330078 +"2011-11-29 19:59:59.533",-122.048070727599,134163.732206524,-122.429360383329,134.642976147957,180,0.21362,117.485168813572,202.271069128542,-2.30515334874292,201.820596960152,60.003,0,97.1580963134766,108.876174926758,11.7180786132813 +"2011-11-29 19:59:59.566",-122.007869950102,134158.842813602,-122.303946510892,134.70904978024,90,0.21362,117.485168813572,202.271069128542,-2.18395022767631,201.803864181786,60.003,0,97.1691284179688,108.896385192871,11.7272567749023 +"2011-11-29 19:59:59.600",-121.965596205572,134161.786404428,-122.227085151534,134.595010101541,0,0.21362,117.538823349576,202.369747548278,-2.12559088829901,201.582363308613,60.003,0,97.156623840332,108.878456115723,11.7218322753906 +"2011-11-29 19:59:59.633",-121.926642692409,134169.644410373,-122.227085151534,134.595010101541,0,0,117.620451586243,202.279303568667,-2.12559088829901,201.582363308613,60.003,0,97.1657791137695,108.888198852539,11.7224197387695 +"2011-11-29 19:59:59.666",-121.88643938138,134164.954526913,-122.227085151534,134.595010101541,0,0,117.620451586243,202.279303568667,-2.06491306547012,201.574553169,60.003,0,97.1750717163086,108.886108398438,11.7110366821289 +"2011-11-29 19:59:59.700",-121.844170354647,134168.107893413,-122.227085151534,134.595010101541,-90,0.21362,117.648530131629,202.090052366132,-2.06491306547012,201.574553169,60.003,0,97.1716537475586,108.874664306641,11.703010559082 +"2011-11-29 19:59:59.733",-121.803963762201,134163.553527528,-122.101727121841,134.662123895238,0,0,117.702152685486,202.189270525697,-2.00423060851808,201.566969120655,60.003,0,97.1612319946289,108.900421142578,11.7391891479492 +"2011-11-29 19:59:59.766",-121.761696298772,134166.849367023,-122.101727121841,134.662123895238,0,0,117.783926412209,202.099648968572,-1.94148639091438,201.773108429999,60.003,0,97.1667633056641,108.889183044434,11.7224197387695 +"2011-11-29 19:59:59.800",-121.721486591409,134162.430530835,-122.024668222338,134.548722764405,0,0,117.755722591053,202.288665607073,-1.82022783778018,201.759085869654,60.003,0,97.1659469604492,108.889495849609,11.7235488891602 +"2011-11-29 19:59:59.833",-121.681274255034,134158.077775549,-121.976494582206,134.729881666008,-90,0.21362,117.837479773982,202.199313791133,-1.82215678943135,201.545573774657,60.003,0,97.1578903198242,108.878242492676,11.7203521728516 +"2011-11-29 19:59:59.866",-121.639008210778,134161.585543816,-121.899369271094,134.61687660283,0,0,117.972792664952,202.210484927317,-1.82215678943135,201.545573774657,60.003,0,97.1689834594727,108.895782470703,11.7267990112305 +"2011-11-29 19:59:59.900",-121.602123202655,134162.165633444,-121.899369271094,134.61687660283,0,0,118.026223273009,202.310771833712,-1.76145715279017,201.538894339023,60.003,0,97.1633148193359,108.890731811523,11.7274169921875 +"2011-11-29 19:59:59.933",-121.559860577459,134165.810113323,-121.822114504704,134.504115869648,0,0.21362,118.026223273009,202.310771833712,-1.75959237605879,201.752413502785,60.003,0,97.1668395996094,108.893127441406,11.7262878417969 +"2011-11-29 19:59:59.966",-121.519644210047,134161.722991235,-121.822114504704,134.504115869648,0,0,118.026223273009,202.310771833712,-1.7007535607164,201.532441114688,60.003,0,97.163215637207,108.882369995117,11.7191543579102 +"2011-11-29 20:00:00.000",-121.477383752106,134165.509924627,-121.822114504704,134.504115869648,0,0,118.054676622621,202.122227412276,-1.7007535607164,201.532441114688,60.003,0,97.1730041503906,108.886024475098,11.713020324707 +"2011-11-29 20:00:00.033",-121.437164844108,134161.558366696,-121.822114504704,134.504115869648,0,0,118.083183098675,201.933732930525,-1.64004614911509,201.526214123382,60.003,0,97.1589202880859,108.887268066406,11.7283477783203 +"2011-11-29 20:00:00.066",-121.394906728581,134165.487746247,-121.696877869753,134.573309596186,0,0,118.108089851492,202.222783747333,-1.57933505394269,201.520213386077,60.003,0,97.1499252319336,108.881088256836,11.7311630249023 +"2011-11-29 20:00:00.100",-121.354685446673,134161.671760849,-121.649154586672,134.755112726353,-90,0.21362,118.214756876277,202.424422865393,-1.51862041120524,201.514438922985,60.003,0,97.1751480102539,108.885147094727,11.7099990844727 +"2011-11-29 20:00:00.133",-121.317802204656,134162.680433555,-121.571770551777,134.64314560899,0,0,118.29665882075,202.337386330334,-1.45790235695655,201.50889075356,60.003,0,97.1443634033203,108.866333007813,11.7219696044922 +"2011-11-29 20:00:00.166",-121.275548062507,134166.815943599,-121.571770551777,134.64314560899,45,0.302104301194141,118.29665882075,202.337386330334,-1.45790235695655,201.50889075356,60.003,0,97.1742706298828,108.903137207031,11.7288665771484 +"2011-11-29 20:00:00.200",-121.233296548108,134171.024418128,-121.571770551777,134.64314560899,45,0.302104301194141,118.29665882075,202.337386330334,-1.39718102729638,201.503568896492,60.003,0,97.1682891845703,108.876564025879,11.7082748413086 +"2011-11-29 20:00:00.233",-121.193072529319,134167.474102373,-121.494257848747,134.531424507748,0,0.21362,118.349894501397,202.438737467527,-1.39570154839276,201.717125452516,60.003,0,97.163688659668,108.899597167969,11.7359085083008 +"2011-11-29 20:00:00.266",-121.152846401499,134163.989916196,-121.446793541708,134.71362290917,0,0,118.431848411871,202.352383635765,-1.33645655836857,201.498473369714,60.003,0,97.1545944213867,108.876022338867,11.7214279174805 +"2011-11-29 20:00:00.300",-121.112618204142,134160.57186475,-121.369217990962,134.602299330001,0,0,118.431848411871,202.352383635765,-1.27572908635927,201.493604190396,60.003,0,97.1567687988281,108.887855529785,11.731086730957 +"2011-11-29 20:00:00.333",-121.07037004924,134165.061670746,-121.369217990962,134.602299330001,0,0,118.431848411871,202.352383635765,-1.2743781243249,201.707171296508,60.003,0,97.1704940795898,108.884475708008,11.713981628418 +"2011-11-29 20:00:00.366",-121.030140133998,134161.779219684,-121.369217990962,134.602299330001,0,0,118.513872131848,202.266444158993,-1.21371205775381,201.702533396976,60.003,0,97.1675796508789,108.906814575195,11.7392349243164 +"2011-11-29 20:00:00.400",-120.98789518556,134166.411425808,-121.244310337483,134.673814543808,180,0.21362,118.567017212991,202.368507318222,-1.15304326925641,201.698121637478,60.003,0,97.1589508056641,108.89128112793,11.7323303222656 +"2011-11-29 20:00:00.433",-120.947663719226,134163.264579346,-121.244310337483,134.673814543808,0,0,118.595965413931,202.180919565591,-1.03279189260779,201.476391264503,60.003,0,97.1707229614258,108.882598876953,11.7118759155273 +"2011-11-29 20:00:00.466",-120.910784990079,134164.886741996,-121.16654499477,134.563136279617,-90,0.21362,118.649091454136,202.28325146902,-1.03279189260779,201.476391264503,60.003,0,97.164192199707,108.865310668945,11.7011184692383 +"2011-11-29 20:00:00.500",-120.867195223631,134157.169345768,-121.16654499477,134.563136279617,-90,0.21362,118.702163724694,202.385757108494,-1.03279189260779,201.476391264503,60.003,0,97.1677322387695,108.88249206543,11.7147598266602 +"2011-11-29 20:00:00.533",-120.824954664745,134162.082852902,-121.119535864135,134.745969129523,-90,0.21362,118.755182216261,202.488436220162,-0.97205144933527,201.472654053402,60.003,0,97.1568832397461,108.882308959961,11.7254257202148 +"2011-11-29 20:00:00.566",-120.784718281292,134159.203932539,-121.041709925489,134.635689121756,0,0,118.755182216261,202.488436220162,-0.97205144933527,201.472654053402,60.003,0,97.1584167480469,108.890975952148,11.7325592041016 +"2011-11-29 20:00:00.600",-120.742481449712,134164.259807976,-121.041709925489,134.635689121756,0,0,118.78428755523,202.301185246351,-0.910343613915931,201.682736285207,60.003,0,97.159782409668,108.903335571289,11.7435531616211 +"2011-11-29 20:00:00.633",-120.70224401141,134161.516507672,-121.041709925489,134.635689121756,135,0.302104301194141,118.866479909073,202.21702934668,-0.848764271553587,201.89305196978,60.003,0,97.1782150268555,108.886207580566,11.7079925537109 +"2011-11-29 20:00:00.666",-120.662004947391,134158.839377344,-120.917009917877,134.708880402113,0,0,118.866479909073,202.21702934668,-0.849663254506303,201.679455433271,60.003,0,97.1726455688477,108.88062286377,11.7079772949219 diff --git a/PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv b/PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv new file mode 100755 index 0000000..a09a173 --- /dev/null +++ b/PMUSimulator/DataDir/60Hz_measurement_files/Rect Floating Point - 5 phasors, 3 analogs.csv @@ -0,0 +1,439 @@ +"2011-11-29 19:40:43.633",-95.0310743232002,134161.730967817,-95.3216458058462,134.394078790761,152.082295719901,0.224515566615434,144.620902608586,202.174150342431,24.7951722724383,201.09485608737,60.0033798217773,-0.00143686775118113,97.1672668457031,108.887168884277,11.7199020385742 +"2011-11-29 19:40:43.666",-94.9904572707172,134162.222746533,-95.2942222018394,134.330284596241,164.916629940283,0.168585744473886,144.670616027105,201.981151164186,24.7884525561667,201.038616504483,60.0033645629883,0,97.1768341064453,108.871559143066,11.6947250366211 +"2011-11-29 19:40:43.700",-94.9484913081514,134161.379156871,-95.2638708705613,134.357145478983,-154.675963052207,0.178969453840998,144.763306427608,202.031457112628,24.7527349644707,200.94895356039,60.0033798217773,0.00091552734375,97.1564178466797,108.878135681152,11.7217178344727 +"2011-11-29 19:40:43.733",-94.9073668559927,134160.635667951,-95.1969162552389,134.419750106433,-61.0468455073268,0.106797205837561,144.767640537246,202.121296097205,24.8216331728244,201.049611556633,60.0034065246582,0.000521326437592506,97.1714477539063,108.876640319824,11.705192565918 +"2011-11-29 19:40:43.766",-94.8670899704525,134162.4825921,-95.1350454316096,134.432779383672,32.5759098009058,0.184333953029801,144.782452445129,202.146825496707,24.9063055162958,201.264532926077,60.0033874511719,-0.000737523660063744,97.1837844848633,108.868919372559,11.6851348876953 +"2011-11-29 19:40:43.800",-94.826637906337,134163.702365177,-95.1076532180205,134.482292595141,80.088461482231,0.105673171286607,144.85160402822,202.23466867411,24.9307552784911,201.317579000701,60.0034027099609,0.000597629696130753,97.1774597167969,108.882843017578,11.7053833007813 +"2011-11-29 19:40:43.833",-94.7850190031084,134162.517929697,-95.0671366540961,134.477395853483,-70.0299529070302,0.0368803866519226,144.882499313102,202.237658082874,24.9790511725274,201.161215112857,60.0034255981445,0.000457763671875,97.1944808959961,108.889358520508,11.6948776245117 +"2011-11-29 19:40:43.866",-94.7450897300249,134161.638699808,-95.0056512574809,134.398094627588,-59.2030769963558,0.121845243826427,144.924095610146,202.182686389489,25.04471747119,200.913014554698,60.0033950805664,-0.00113168265670538,97.1801147460938,108.90209197998,11.7219772338867 +"2011-11-29 19:40:43.900",-94.7058129127841,134162.486906616,-94.9637880661408,134.428632412013,-50.7831576856941,0.112778986952877,144.981191448447,202.205017683012,25.06915879494,201.000120764168,60.003360748291,-0.000928239896893501,97.1677017211914,108.861328125,11.6936264038086 +"2011-11-29 19:40:43.933",-94.6638690922965,134163.782027835,-94.9570474182345,134.499490398722,-28.8493154270065,0.158222297277681,144.963120933155,202.14314450037,25.0819429980463,201.291458322987,60.0033950805664,0.00122069846838713,97.1804656982422,108.876541137695,11.6960754394531 +"2011-11-29 19:40:43.966",-94.6220197945516,134162.9564704,-94.9480596916789,134.460245488877,-68.4183323480074,0.0976639853477601,144.986687662049,202.103883097152,25.1050646650457,201.189658546981,60.0034255981445,0.000699372030794621,97.1762847900391,108.857940673828,11.6816558837891 +"2011-11-29 19:40:44.000",-94.5808373625705,134161.199078223,-94.9241499290373,134.409285150266,-160.809661235492,0.193450207497738,145.053736543942,202.125760072331,25.1484111906267,201.023210242892,60.0034141540527,-0.000635781325399876,97.1669235229492,108.871627807617,11.704704284668 +"2011-11-29 19:40:44.033",-94.5401579804223,134161.3132107,-94.8588079941592,134.414038851786,-154.744296231574,0.2035663683276,145.098886358583,202.095734438724,25.2339007635334,201.044562105137,60.0034294128418,0.000762934796512127,97.1847534179688,108.884483337402,11.6997299194336 +"2011-11-29 19:40:44.066",-94.4989894809675,134161.62425985,-94.7954339944332,134.408726873819,-95.1365979432741,0.206603922549514,145.148623719382,201.964569038931,25.261110344009,201.055222440523,60.0034408569336,0.000508641824126244,97.1720581054688,108.875228881836,11.7031707763672 +"2011-11-29 19:40:44.100",-94.4587847010597,134160.707273445,-94.7442598441896,134.386445831922,-85.7649935386405,0.157510965484768,145.219562101664,201.94004023918,25.28507075013,201.063786531208,60.00341796875,-0.000762948766350746,97.1693267822266,108.879608154297,11.7102813720703 +"2011-11-29 19:40:44.133",-94.4192600375934,134160.120553969,-94.6991286282127,134.416269454222,-129.744963738586,0.184224947098007,145.276796329353,202.035486900985,25.3552110353973,201.062584192394,60.0033874511719,-0.00125882215797901,97.1715621948242,108.87922668457,11.7076644897461 +"2011-11-29 19:40:44.166",-94.3781150606582,134162.347329085,-94.6697117804961,134.439917226856,-137.056942703585,0.168037440724075,145.299400459623,202.136051787005,25.3936239361561,201.059758738138,60.0033836364746,"5.08641824126244E-05",97.1907501220703,108.882484436035,11.6917343139648 +"2011-11-29 19:40:44.200",-94.337040445026,134163.417617171,-94.6458194050476,134.40228217858,-155.813873208808,0.148440449017497,145.323499205501,202.063745035742,25.4220675160319,201.071696865484,60.0033950805664,0.000152592547237873,97.1713409423828,108.863510131836,11.6921691894531 +"2011-11-29 19:40:44.233",-94.2963398144119,134162.710900816,-94.6136849435805,134.454977541023,-149.80590606033,0.145887817863156,145.339572547345,202.025749889579,25.4673359442858,201.256156585962,60.0033836364746,-0.000432338565587997,97.1721038818359,108.878028869629,11.705924987793 +"2011-11-29 19:40:44.266",-94.2548432442981,134160.679829932,-94.5872771098478,134.484188739903,-131.084447116469,0.12002406390454,145.346956080851,202.039824276332,25.4990424518513,201.316615874967,60.0034103393555,0.00123339705169201,97.1785430908203,108.897315979004,11.7187728881836 +"2011-11-29 19:40:44.300",-94.2130117063426,134160.447644123,-94.557702202986,134.406999496908,177.574424036831,0.0578178899911743,145.38286902792,202.026679860059,25.5184274769381,201.192447206745,60.0034370422363,0.00080108642578125,97.1839828491211,108.880935668945,11.6969528198242 +"2011-11-29 19:40:44.333",-94.1728782861622,134162.378687192,-94.5042629946535,134.309775128573,71.529634484935,0.185071156643358,145.425322297764,201.988632841041,25.5537299123019,201.120551114076,60.0034255981445,-0.000635753385722637,97.1754531860352,108.871444702148,11.6959915161133 +"2011-11-29 19:40:44.366",-94.133777282001,134163.030477833,-94.4339384398064,134.358691077431,80.7694417974277,0.193307514733804,145.516298770465,202.07881806907,25.6114414969262,201.189977099591,60.0033988952637,-0.00110625755041838,97.1768341064453,108.877868652344,11.7010345458984 +"2011-11-29 19:40:44.400",-94.0928938136511,134161.37818328,-94.3589631522994,134.425270501989,141.725573747322,0.0807116046028729,145.628229268196,202.113794226942,25.672976015425,201.20707668169,60.0034027099609,0.000623054802417755,97.1763610839844,108.886962890625,11.7106018066406 +"2011-11-29 19:40:44.433",-94.0508085629656,134160.111967316,-94.3385206654808,134.468326933481,-159.620949116855,0.157338378983016,145.634596796706,202.049594777762,25.7291457744972,201.289737895807,60.0034141540527,0.000178031623363495,97.1847610473633,108.880973815918,11.6962127685547 +"2011-11-29 19:40:44.466",-94.0094375344308,134162.058495589,-94.3311992898102,134.444621610027,178.748889136165,0.121638022728872,145.637905142672,202.071266728882,25.7344019735779,201.256205950281,60.0033988952637,-0.00057220458984375,97.1832427978516,108.886177062988,11.7029342651367 +"2011-11-29 19:40:44.500",-93.9688489710612,134164.092241769,-94.2693936128932,134.353538107402,104.303517131175,0.144246754312523,145.710651973988,202.11382814135,25.7637537997236,201.083545743358,60.0034103393555,0.000826511532068253,97.1794128417969,108.872192382813,11.6927795410156 +"2011-11-29 19:40:44.533",-93.9281617815774,134165.550782778,-94.2345136613615,134.322119641582,88.9879878464451,0.243845516163105,145.737825213076,202.079379717069,25.7971812652365,201.130506090004,60.0034217834473,0.000165291130542755,97.1799087524414,108.875831604004,11.6959228515625 +"2011-11-29 19:40:44.566",-93.8877303208897,134165.065932838,-94.1922109384804,134.362395923581,67.2325744020417,0.0251067898487863,145.771076330516,202.024713664535,25.8423937108356,201.086327681144,60.0034065246582,-0.00080108642578125,97.1574859619141,108.876998901367,11.7195129394531 +"2011-11-29 19:40:44.600",-93.8471452128822,134162.47828073,-94.1440394147442,134.479460762775,-116.039184928105,0.315056324024734,145.812958169233,202.110709903113,25.9326781705408,201.035588165711,60.0033836364746,-0.000356035307049751,97.1762466430664,108.864761352539,11.6885147094727 +"2011-11-29 19:40:44.633",-93.8064295825013,134161.378531962,-94.1382311462402,134.540418063077,-154.726849257342,0.365639202296234,145.836386874828,202.253417058708,25.9779934519268,201.188701857816,60.0033836364746,0,97.1653823852539,108.884338378906,11.7189559936523 +"2011-11-29 19:40:44.666",-93.7653691895364,134162.031628747,-94.1187052706334,134.494961813024,164.88451009479,0.346039378033984,145.870176044781,202.255395057214,25.98915443059,201.295854804413,60.0033874511719,0.000279759988188744,97.1782073974609,108.877807617188,11.6996002197266 +"2011-11-29 19:40:44.700",-93.7247840171396,134162.872974943,-94.0234110275017,134.421129391827,135.97803926842,0.19426819700601,145.950251974182,202.196331851371,26.0454380945199,201.192075340884,60.0033874511719,-0.000190730206668377,97.1775588989258,108.871246337891,11.6936874389648 +"2011-11-29 19:40:44.733",-93.684138495425,134162.879988519,-93.9464030123037,134.374084516773,75.6482828204304,0.0650541159720172,146.004055392781,202.16319638399,26.1000693960942,201.023190671023,60.0033912658691,0.000216155312955379,97.176025390625,108.870178222656,11.6941528320313 +"2011-11-29 19:40:44.766",-93.6431148389992,134163.383492391,-93.9541469369287,134.403160633115,-126.059655213813,0.0748018767860808,146.003631044103,202.126550276385,26.0996372873881,201.019695360732,60.0034027099609,0.000356035307049751,97.1793518066406,108.89037322998,11.7110214233398 +"2011-11-29 19:40:44.800",-93.6019639517869,134162.778433517,-93.9093555449715,134.494113933072,-94.3224220075558,0.170449612495142,146.040191097316,202.203137263864,26.1417216628793,201.108901599775,60.0034103393555,0.000165319070219994,97.1462860107422,108.881278991699,11.734992980957 +"2011-11-29 19:40:44.833",-93.5614836224927,134161.57324323,-93.8397278136012,134.497451124105,-39.2709991246148,0.152255906235452,146.059973949444,202.2214332607,26.2257556183188,201.183091643179,60.0033988952637,-0.000432338565587997,97.1767349243164,108.860534667969,11.6837997436523 +"2011-11-29 19:40:44.866",-93.5211936481665,134163.483879781,-93.8062324198685,134.400763113309,9.86415543917293,0.0982742986082439,146.074397777491,202.07328160332,26.2864834636545,201.152919352617,60.0033950805664,"-7.62892886996269E-05",97.1872787475586,108.872047424316,11.6847686767578 +"2011-11-29 19:40:44.900",-93.4809234579765,134165.886162059,-93.7953632116952,134.390245632483,152.528979893894,0.0728746309735915,146.138422145419,202.067836960598,26.2901719676654,201.132493944249,60.0033836364746,-0.000432310625910759,97.1711654663086,108.876129150391,11.704963684082 +"2011-11-29 19:40:44.933",-93.4400687670375,134163.106671404,-93.7768451472028,134.482869832644,-174.316881512688,0.153059217603898,146.186914327661,202.133290203984,26.3025218097064,201.290409751564,60.0033798217773,"2.79396772384644E-08",97.1762847900391,108.872589111328,11.6963043212891 +"2011-11-29 19:40:44.966",-93.3986271896533,134161.362731642,-93.6955252972093,134.474595872795,157.928305248341,0.0696482121379085,146.266901129981,202.087209258349,26.3609911145363,201.358635456827,60.0033798217773,"1.27265229821205E-05",97.1451797485352,108.86572265625,11.7205429077148 +"2011-11-29 19:40:45.000",-93.3571694449046,134161.267742595,-93.6108469301446,134.388825349157,108.534006775428,0.079345772420714,146.347896884478,202.038799159059,26.4390978981123,201.201306829579,60.0034065246582,0.000953665003180504,97.1782989501953,108.885803222656,11.7075042724609 +"2011-11-29 19:40:45.033",-93.3169888520407,134159.913771664,-93.5740785263399,134.388731411732,-131.873368764119,0.0235452392197645,146.370328083481,202.071754150284,26.4859469709546,201.076147898231,60.0034065246582,"-6.35627657175064E-05",97.1798858642578,108.856033325195,11.6761474609375 +"2011-11-29 19:40:45.066",-93.2767565954633,134160.450080553,-93.5787542607399,134.451152247969,-147.67573607966,0.148780809327902,146.379029832679,202.121874902371,26.4979962322404,201.144572226999,60.0034103393555,0.000292444601655006,97.1577758789063,108.879211425781,11.721435546875 +"2011-11-29 19:40:45.100",-93.2351382024273,134162.058389414,-93.5602220675758,134.443119170013,-169.351593893099,0.226717294687116,146.392871606267,202.137712467719,26.5495254945199,201.136406673568,60.0034294128418,0.000330610200762749,97.1667022705078,108.865234375,11.6985321044922 +"2011-11-29 19:40:45.133",-93.1943838822346,134163.286881728,-93.4909754742364,134.408832635524,-116.465800070328,0.136064673203711,146.439572194592,202.018547693383,26.5939330716269,201.083047994418,60.0034103393555,-0.000890102237462997,97.1697692871094,108.884857177734,11.715087890625 +"2011-11-29 19:40:45.166",-93.1542816941546,134163.571887267,-93.4238179623373,134.459954644009,-66.469617987101,0.115714763364952,146.523862372264,202.095556521528,26.613802263061,201.181278090583,60.0033721923828,-0.00109355896711349,97.1782150268555,108.864547729492,11.6863327026367 +"2011-11-29 19:40:45.200",-93.1137655222721,134164.464483283,-93.3953089525046,134.532534334457,-136.359531931062,0.135286324672407,146.591806549609,202.254830838292,26.6438913137609,201.243800698386,60.0033798217773,0.000470490194857121,97.1662216186523,108.875450134277,11.709228515625 +"2011-11-29 19:40:45.233",-93.0725212521204,134163.314043274,-93.4166578555711,134.553310628577,-140.303460070949,0.283966230636533,146.590177225312,202.197754222855,26.6354877947937,201.268188552231,60.0034027099609,0.000737509690225124,97.1663284301758,108.864112854004,11.6977844238281 +"2011-11-29 19:40:45.266",-93.0311643349657,134162.031479972,-93.4025345412772,134.552053005123,-128.841833591464,0.32421497824512,146.601764001024,202.100624716385,26.6466599659446,201.29142838962,60.0033988952637,-0.000356049276888371,97.190559387207,108.871307373047,11.6807479858398 +"2011-11-29 19:40:45.300",-92.9916340625424,134164.781846796,-93.3310863039507,134.512606767117,-146.430109996269,0.235343155652227,146.642638788593,202.110154030481,26.7488664964686,201.286551844068,60.0033798217773,-0.000279732048511505,97.1825408935547,108.869934082031,11.6873931884766 +"2011-11-29 19:40:45.333",-92.9520882555624,134165.560051442,-93.248020708126,134.453653425718,174.194162113378,0.105290297478587,146.690362408384,202.17585579913,26.8438529902609,201.190168844326,60.0033798217773,"8.90158116817474E-05",97.1871185302734,108.866279602051,11.6791610717773 +"2011-11-29 19:40:45.366",-92.9096339798773,134162.394811721,-93.1993327892975,134.381625474802,92.8324497903678,0.149001733690765,146.719387290228,202.171610187156,26.8868311233843,201.121897054214,60.0034103393555,0.000813798978924751,97.1711883544922,108.874565124512,11.7033767700195 +"2011-11-29 19:40:45.400",-92.8676473558242,134159.827651591,-93.20327772294,134.368633101976,102.293160521314,0.209598518671207,146.710338825752,202.169006079052,26.8995004269257,201.139440476982,60.0034217834473,-0.000127153471112251,97.1585083007813,108.881759643555,11.7232513427734 +"2011-11-29 19:40:45.433",-92.8273436368254,134159.748725519,-93.1558664659838,134.396138101713,115.581892536453,0.127267248749613,146.768350433734,202.139027551947,26.9377151620391,201.161440035662,60.0033912658691,-0.000788387842476368,97.148796081543,108.873352050781,11.7245559692383 +"2011-11-29 19:40:45.466",-92.7868928534878,134160.110511494,-93.0576639590034,134.356467328627,138.358070932345,0.028215945380436,146.867420742751,202.117570923342,27.0239677521858,200.969783850335,60.0034027099609,0.000432338565587997,97.1795043945313,108.86882019043,11.6893157958984 +"2011-11-29 19:40:45.500",-92.7459613419152,134160.313074001,-93.0073892247641,134.319539978533,157.980088709024,0.0314285488999192,146.926731493825,202.096327533877,27.067366339634,200.872799132871,60.0034217834473,0.00057220458984375,97.1768341064453,108.86971282959,11.6928787231445 +"2011-11-29 19:40:45.533",-92.7052852843788,134159.705090564,-93.0139471019723,134.393065717561,174.327247976945,0.153004128422788,146.967419010424,202.140758687939,27.0483458789535,201.045651884649,60.0033950805664,-0.000686673447489738,97.1856231689453,108.898574829102,11.7129516601563 +"2011-11-29 19:40:45.566",-92.6650390777162,134160.290901027,-92.9773584850079,134.474765740267,175.905994008935,0.1559366330547,146.995977556642,202.225181519258,27.0938394189181,201.202309603796,60.0033760070801,-0.00057220458984375,97.1657104492188,108.8779296875,11.7122192382813 +"2011-11-29 19:40:45.600",-92.6248766465936,134161.608798821,-92.9129868297548,134.433044156912,158.085260809686,0.0668306940595424,147.007806992199,202.153609021338,27.1846040777778,201.167768643104,60.0033721923828,"7.62892886996269E-05",97.1608734130859,108.880699157715,11.7198257446289 +"2011-11-29 19:40:45.633",-92.5845457812975,134161.301149552,-92.8785621711283,134.337274853244,155.046373611585,0.0827478668127438,147.053002432658,201.98048676674,27.2120365434033,201.062833666206,60.0033683776855,-0.000317883677780628,97.1881713867188,108.873115539551,11.684944152832 +"2011-11-29 19:40:45.666",-92.5434299965929,134160.978338357,-92.8271913394368,134.321617486694,146.816513395837,0.114022352588437,147.114578342928,202.114357899633,27.2594470719787,200.908450453225,60.0033683776855,"-1.39698386192322E-08",97.1709289550781,108.856018066406,11.6850891113281 +"2011-11-29 19:40:45.700",-92.501330547581,134162.109786067,-92.7782329671411,134.380420719332,135.330807143711,0.17158350203804,147.166802334267,202.317353465959,27.3135304789373,200.938842910438,60.0033798217773,0.000813798978924751,97.1631317138672,108.875793457031,11.7126617431641 +"2011-11-29 19:40:45.733",-92.4608633416893,134162.883498049,-92.7591613628711,134.399018324044,134.215172804137,0.137136051088614,147.195556486453,202.153888025929,27.3149102159693,201.136967471936,60.0033950805664,0,97.1553802490234,108.864059448242,11.7086791992188 +"2011-11-29 19:40:45.766",-92.4215401620861,134162.382922313,-92.7277453725527,134.430866539961,14.1653513281858,0.0362668425495694,147.207643861366,202.060953255111,27.327248012136,201.242387861012,60.0033874511719,-0.000406885519623756,97.1701202392578,108.884994506836,11.7148742675781 +"2011-11-29 19:40:45.800",-92.3800445063005,134162.437770808,-92.6690314367624,134.437067890408,22.2213096025085,0.0472850542099801,147.247942150737,202.068055291648,27.4021172015141,201.263365496324,60.00341796875,0.00150045845657587,97.1780624389648,108.880561828613,11.7024993896484 +"2011-11-29 19:40:45.833",-92.3382197333711,134162.015460007,-92.6236113324362,134.42447426834,-21.0438639641826,0.0399931119162701,147.307222940743,202.09054467195,27.4350636987436,201.170451233307,60.0034370422363,"-7.63032585382462E-05",97.1662216186523,108.865074157715,11.6988525390625 +"2011-11-29 19:40:45.866",-92.2978531439538,134161.44196509,-92.5883824699938,134.427662278034,-42.3877762569903,0.115783098836221,147.357373771397,202.159507696576,27.4408094370306,201.049465994357,60.0033874511719,-0.00164032448083162,97.1801223754883,108.880699157715,11.7005767822266 +"2011-11-29 19:40:45.900",-92.2572272129492,134162.052666692,-92.538196720998,134.468624872034,-23.3085759164485,0.0765374345161258,147.409018221631,202.21516274435,27.4944815616454,201.163633598385,60.0033912658691,0.000890102237462997,97.1815948486328,108.875160217285,11.6935653686523 +"2011-11-29 19:40:45.933",-92.2162355559365,134162.635092467,-92.5000784673295,134.451615093452,120.528293106887,0.0398911773906751,147.441580441032,202.066710675957,27.5646647853771,201.321784322095,60.0034141540527,0.000534052960574627,97.1707229614258,108.89404296875,11.7233200073242 +"2011-11-29 19:40:45.966",-92.1752120309436,134164.643676579,-92.4819120259735,134.390531417336,95.0602151758246,0.105207074625319,147.492389597015,202.102021766162,27.5478375246782,201.173888603182,60.0034103393555,-0.000292444601655006,97.1636123657227,108.872611999512,11.7089996337891 +"2011-11-29 19:40:46.000",-92.134102969795,134165.290603118,-92.4477501899707,134.335490988022,94.2589486411102,0.106407356686507,147.55549243084,202.112207839376,27.5525305721933,200.999913875714,60.0034065246582,"-7.63032585382462E-05",97.1756973266602,108.862922668457,11.6872253417969 +"2011-11-29 19:40:46.033",-92.0934376012375,134162.338936002,-92.3941969453148,134.357794487735,-161.900383755847,0.140975966462318,147.607286905539,201.973674863645,27.6419462378528,201.050335062135,60.0034103393555,"-2.79396772384644E-08",97.1825714111328,108.892211914063,11.7096405029297 +"2011-11-29 19:40:46.066",-92.0523529108457,134161.405462732,-92.3531769172598,134.458051587297,-137.018713057571,0.181013395551935,147.603146136396,202.053596023603,27.7269241970141,201.192071153489,60.0034141540527,0.000190716236829758,97.1721343994141,108.896614074707,11.724479675293 +"2011-11-29 19:40:46.100",-92.0104870542504,134162.978336163,-92.3258489056594,134.495870108347,-143.358808171813,0.152130635597796,147.617867031943,202.153326112941,27.764366858978,201.23896514653,60.0034217834473,0.000241608358919621,97.1799392700195,108.872787475586,11.6928482055664 +"2011-11-29 19:40:46.133",-91.9690284580437,134164.123977844,-92.2886033979621,134.484147049617,-136.461224627434,0.14162927952803,147.679817633382,202.165076839709,27.7712358817168,201.18589529999,60.0034332275391,0.000139866024255753,97.1949310302734,108.863906860352,11.6689758300781 +"2011-11-29 19:40:46.166",-91.9286625388425,134162.893257736,-92.206245699797,134.44747126691,-101.262095571335,0.101572352609186,147.760562977075,202.118449742583,27.8316627718308,201.123754453733,60.0034217834473,-0.000279746018350124,97.1660919189453,108.870101928711,11.7040100097656 +"2011-11-29 19:40:46.200",-91.8893845517279,134162.23530149,-92.1639418393212,134.341834931772,175.267836359881,0.0578074409614177,147.825250316398,202.028193307849,27.8633833511162,200.999927587048,60.0034141540527,-0.000470490194857121,97.1824722290039,108.881530761719,11.6990585327148 +"2011-11-29 19:40:46.233",-91.8496210938084,134163.260822302,-92.1472386561604,134.361585427461,-169.896079225109,0.0620846287523393,147.848330039508,202.032949215668,27.8745037475974,201.038630028441,60.0033760070801,-0.0011189840734005,97.2001724243164,108.898338317871,11.6981658935547 +"2011-11-29 19:40:46.266",-91.8090057931572,134163.052909562,-92.0869311882766,134.47557721263,-81.0942248286638,0.0743083192564408,147.894068101069,202.157258830101,27.9281241355501,201.196563286048,60.0033531188965,-0.000305157154798508,97.1736450195313,108.862861633301,11.6892166137695 +"2011-11-29 19:40:46.300",-91.767433113117,134161.780221351,-92.0541712988383,134.46104060498,-77.2296375160192,0.0977581921813881,147.907505009208,202.044130900836,27.9771843528274,201.244583274294,60.0033531188965,"-1.39698386192322E-08",97.1490325927734,108.891441345215,11.7424087524414 +"2011-11-29 19:40:46.333",-91.7264376987325,134161.369295617,-92.0387142825879,134.451071961762,-95.9920508427176,0.155937096421113,147.909571464448,201.99869523505,28.016266305086,201.199108269475,60.0033721923828,0.000457763671875,97.1880569458008,108.877182006836,11.6891250610352 +"2011-11-29 19:40:46.366",-91.6864334777271,134161.751917573,-92.0052187620051,134.535600225674,-104.395550986281,0.197809733775715,147.932626169537,202.150846845097,28.069294178118,201.263061835916,60.0033798217773,"-1.39698386192322E-08",97.1741638183594,108.87671661377,11.7025527954102 +"2011-11-29 19:40:46.400",-91.646678537939,134163.045171359,-91.9707505374799,134.539936293904,-106.42999253219,0.167111921023857,147.956712981153,202.16074906228,28.1139736578683,201.297615312415,60.0033798217773,"-2.54251062870026E-05",97.1701507568359,108.870208740234,11.7000579833984 +"2011-11-29 19:40:46.433",-91.6058654724433,134163.630076029,-91.9203275517432,134.450569798513,-94.6255409298624,0.0767539999937714,147.993990478557,202.118805354337,28.1667939557541,201.156687641813,60.0033874511719,0.000165319070219994,97.1924667358398,108.878913879395,11.6864471435547 +"2011-11-29 19:40:46.466",-91.5641344275106,134162.958221334,-91.8917909919156,134.43637188699,69.6629007390817,0.0464897957089011,148.007438482106,202.116475645132,28.2052293466513,201.237341220525,60.0033874511719,0,97.1664428710938,108.875617980957,11.7091751098633 +"2011-11-29 19:40:46.500",-91.5225100898104,134162.395465352,-91.8552957342808,134.432410553298,139.416765783158,0.0553948924776034,148.069741382241,202.059653373246,28.232259641271,201.272618778757,60.0033988952637,0.000661206431686878,97.1793212890625,108.866470336914,11.6871490478516 +"2011-11-29 19:40:46.533",-91.4819704973431,134162.172418846,-91.7940911202979,134.436674923172,-125.436062907828,0.0792138917925809,148.154220557393,202.0392264775,28.2703088084885,201.20503782844,60.0034141540527,0.000292430631816387,97.177619934082,108.894561767578,11.7169418334961 +"2011-11-29 19:40:46.566",-91.4413508048112,134161.99619499,-91.7395444945823,134.44457332691,-56.97474381383,0.0584643157570072,148.196854118906,202.150375228171,28.314880977239,201.135534245178,60.00341796875,0.000356035307049751,97.1858825683594,108.889045715332,11.7031631469727 +"2011-11-29 19:40:46.600",-91.4000351578337,134162.23831051,-91.6810286210685,134.479552842254,-77.9201603050845,0.072166329324206,148.250949832099,202.392549088709,28.3825786192783,200.976275520701,60.0034332275391,0.000254306942224503,97.1878433227539,108.883041381836,11.695198059082 +"2011-11-29 19:40:46.633",-91.3585946193474,134163.262193605,-91.644506660578,134.524630452402,-86.1526973051771,0.130127503222549,148.280500345874,202.442879837975,28.427473618318,201.001806907848,60.0034332275391,0,97.1767807006836,108.874069213867,11.6972885131836 +"2011-11-29 19:40:46.666",-91.3179227883437,134161.865704056,-91.6464231359148,134.552816950896,-124.366804758814,0.147872880562715,148.280748296554,202.310851884055,28.4495573126091,201.223630882901,60.0034103393555,-0.000826511532068253,97.1685256958008,108.882675170898,11.7141494750977 +"2011-11-29 19:40:46.700",-91.2777846516657,134160.314669011,-91.5994286743579,134.477777949759,172.189570223723,0.0975072338321269,148.351269205968,202.187167283129,28.4776980520578,201.256959309068,60.0034065246582,0,97.1823577880859,108.863777160645,11.6814193725586 +"2011-11-29 19:40:46.733",-91.2369135738982,134161.511839359,-91.5024433016779,134.415687385152,39.7211761050188,0.143301239699778,148.435645418214,202.168317120509,28.5290771400788,201.173320669474,60.0034141540527,0.000267033465206623,97.1770477294922,108.887084960938,11.7100372314453 +"2011-11-29 19:40:46.766",-91.1961173087457,134163.687344447,-91.4851078185334,134.413848396061,27.7277802794282,0.0864526309207602,148.443334714696,202.111916867493,28.5652937019978,201.17206109586,60.0033988952637,-0.0006866455078125,97.17431640625,108.87621307373,11.7018966674805 +"2011-11-29 19:40:46.800",-91.1562202451741,134163.754081074,-91.4765054166574,134.442556992082,168.886969917052,0.130236968893499,148.461748542767,202.124570370942,28.6220763197072,201.225292952044,60.0033721923828,-0.000737523660063744,97.1788787841797,108.876182556152,11.6973037719727 +"2011-11-29 19:40:46.833",-91.1157669749313,134162.672770895,-91.4260713250915,134.463598852224,174.230288913772,0.151813966098477,148.520303007578,202.223976817659,28.6709462055602,201.178674551059,60.0033645629883,0.000356021337211132,97.1840438842773,108.887763977051,11.7037200927734 +"2011-11-29 19:40:46.866",-91.0739516635931,134160.004513931,-91.3894319834593,134.531986841651,-133.888005651876,0.0896587908726522,148.566823849013,202.311292541887,28.6717965501316,201.218724573139,60.0033912658691,0.000839210115373135,97.1651229858398,108.876724243164,11.7116012573242 +"2011-11-29 19:40:46.900",-91.0328661154813,134160.095263904,-91.3383921036136,134.495387110851,46.6447407340996,0.105999647081378,148.59169411798,202.322264969703,28.711696979407,201.242854085704,60.0033988952637,-0.000394186936318874,97.1840286254883,108.878776550293,11.6947479248047 +"2011-11-29 19:40:46.933",-90.992448880681,134161.579165159,-91.296023465091,134.406576071746,83.3933369700304,0.26511035468071,148.613522338158,202.246054876465,28.7878982289287,201.23809555454,60.0033874511719,"-6.35627657175064E-05",97.1611175537109,108.89330291748,11.7321853637695 +"2011-11-29 19:40:46.966",-90.9518772030847,134160.967232577,-91.2289556157224,134.381527953693,107.296864859727,0.184058497430567,148.707020864158,202.133601065471,28.8520259804377,201.1857903968,60.0033950805664,"6.35767355561256E-05",97.1761169433594,108.878829956055,11.7027130126953 +"2011-11-29 19:40:47.000",-90.9118938871737,134160.42887868,-91.1779080165022,134.435375496923,-109.000492502445,0.110045666197041,148.782184269072,202.122704922509,28.8718043125464,201.078802437856,60.0033912658691,-0.000356049276888371,97.1924743652344,108.883895874023,11.6914215087891 +"2011-11-29 19:40:47.033",-90.8706124166142,134161.878620997,-91.150658766171,134.507485686326,-81.2428025795992,0.200937316423496,148.78836513865,202.190241504265,28.9007876021993,201.134458451796,60.0033836364746,0,97.1760406494141,108.872016906738,11.6959762573242 +"2011-11-29 19:40:47.066",-90.8286750732082,134162.953834777,-91.1460408284798,134.51384622945,-115.734587712371,0.147469253350332,148.774334998952,202.285433867824,28.9515251365806,201.122511628524,60.0033950805664,0.000839224085211754,97.1721343994141,108.876968383789,11.704833984375 +"2011-11-29 19:40:47.100",-90.7875977830967,134161.862732972,-91.127978418503,134.391917910391,161.035805254818,0.254800047315537,148.814724787713,202.22488217645,28.9987903300512,201.029495392954,60.0034141540527,0.000419626012444496,97.1819610595703,108.89225769043,11.7102966308594 +"2011-11-29 19:40:47.133",-90.7472688607582,134160.144643699,-91.0815562942425,134.337639032462,153.390554825925,0.271910966930848,148.879115615812,202.070897740708,29.0278902893813,201.059587066321,60.0034065246582,-0.000330624170601368,97.1687469482422,108.876808166504,11.7080612182617 +"2011-11-29 19:40:47.166",-90.7074102344219,134161.194350365,-91.0208978879032,134.423346000174,-168.331518557244,0.0873708409964055,148.94818838258,202.048274483208,29.0344173943103,201.202701421065,60.0034065246582,"-1.27125531435013E-05",97.1712036132813,108.866592407227,11.6953887939453 +"2011-11-29 19:40:47.200",-90.6669931090124,134164.215739759,-90.9586436889009,134.470481733032,-44.4958339555654,0.0683361502923621,148.992172530948,202.108681220957,29.076644503041,201.255823983496,60.0033836364746,-0.000839238055050373,97.165397644043,108.879341125488,11.7139434814453 +"2011-11-29 19:40:47.233",-90.6259154353325,134162.630404999,-90.9210701409629,134.450310133351,-47.3953870205201,0.151229096641085,148.985472008388,201.954729870918,29.1430535422503,201.28694035146,60.0033836364746,"1.39698386192322E-08",97.1723175048828,108.884086608887,11.7117691040039 +"2011-11-29 19:40:47.266",-90.5853054516977,134159.85954676,-90.8850461160156,134.467092004373,-59.989394010673,0.182064411692753,149.029487462733,201.932831291567,29.1740750552572,201.312540737086,60.0033721923828,-0.000381460413336754,97.1721954345703,108.869621276855,11.6974258422852 +"2011-11-29 19:40:47.300",-90.5442152880159,134161.067493115,-90.8470647979172,134.50090463204,-94.5074813065045,0.113113127978605,149.106437293187,202.150390381648,29.2016982999922,201.239558947814,60.0033874511719,0.000864649191498756,97.1631088256836,108.87361907959,11.7105102539063 +"2011-11-29 19:40:47.333",-90.5021875594518,134163.200196859,-90.8242977354729,134.469665363242,146.851967532469,0.166596092053843,149.139740260494,202.161592023524,29.2518719822897,201.336710820309,60.0034141540527,0.000673946924507618,97.1640472412109,108.869468688965,11.7054214477539 +"2011-11-29 19:40:47.366",-90.4611205012562,134162.469925186,-90.760403024165,134.440703119419,144.271490228679,0.116760975543326,149.181236080475,202.052677476218,29.3253943681832,201.336625646194,60.0034255981445,0,97.1699600219727,108.866470336914,11.6965103149414 +"2011-11-29 19:40:47.400",-90.4213517877685,134161.518400713,-90.6935911033533,134.487209841071,-71.0781617416182,0.105348639920649,149.234420014338,202.171152977817,29.3686772742981,201.191496409889,60.0034103393555,-0.000457763671875,97.1664199829102,108.880584716797,11.7141647338867 +"2011-11-29 19:40:47.433",-90.380386960706,134162.659816731,-90.6518250567775,134.460452860423,-15.4208775376811,0.0427906333903123,149.284453489554,202.194899393676,29.400433246867,201.175746639219,60.0034217834473,0.000813812948763371,97.1822357177734,108.875679016113,11.6934432983398 +"2011-11-29 19:40:47.466",-90.3382201477489,134164.259416155,-90.6340979286181,134.375752322627,141.152856084333,0.124417794487365,149.329137150787,202.016004633407,29.430659491412,201.188396495884,60.0034446716309,0.000661220401525497,97.1835784912109,108.855445861816,11.6718673706055 +"2011-11-29 19:40:47.500",-90.2969222697853,134163.645291044,-90.605322885621,134.342061543626,138.206202626127,0.176523524546836,149.378445881001,201.997638407992,29.4488172076584,201.144900834493,60.0034255981445,-0.00108084641396999,97.172737121582,108.881317138672,11.7085800170898 +"2011-11-29 19:40:47.533",-90.2572574125815,134162.024225939,-90.5537716057357,134.422248319471,118.237029303784,0.0948550935535922,149.410210674087,202.137855290031,29.4954200521834,201.212118764895,60.0033912658691,-0.000610342249274254,97.1691970825195,108.865196228027,11.6959991455078 +"2011-11-29 19:40:47.566",-90.2174888923836,134162.185309302,-90.4980060031285,134.503051278083,-133.126035624667,0.0604649101256136,149.464981500712,202.199220408165,29.5508367511043,201.265545886937,60.0033950805664,0.000305199064314365,97.188850402832,108.893852233887,11.7050018310547 +"2011-11-29 19:40:47.600",-90.176908967371,134163.405150936,-90.4542093022114,134.475966233176,79.0325731507784,0.0212438030024965,149.502066565284,202.307983133425,29.5886642610694,201.140881203019,60.0033874511719,-0.000775661319494247,97.1630401611328,108.869750976563,11.7067108154297 +"2011-11-29 19:40:47.633",-90.1368127308824,134162.913731152,-90.4175664111842,134.442687784318,77.0960583590248,0.0653339103119637,149.528972717641,202.166695383392,29.6321240823783,201.225272875106,60.0033531188965,-0.000699358060956001,97.1675720214844,108.881271362305,11.7136993408203 +"2011-11-29 19:40:47.666",-90.0956829119725,134161.608952546,-90.3770937888341,134.496366925824,-154.243779306577,0.0924696490307016,149.571056673694,202.076110948883,29.6985589659916,201.372495769249,60.0033531188965,"1.39698386192322E-08",97.1724243164063,108.88501739502,11.7125930786133 +"2011-11-29 19:40:47.700",-90.0539424883638,134161.684458666,-90.3445039928854,134.543737608455,-107.632901599239,0.0153441530674608,149.590423073211,202.267928074377,29.7221628080062,201.348873205156,60.0033836364746,0.00127157662063837,97.1824493408203,108.865531921387,11.6830825805664 +"2011-11-29 19:40:47.733",-90.0134474212648,134160.83182012,-90.3293172965948,134.468331352663,63.5722600116512,0.106243129193275,149.616000897166,202.225065474057,29.7123175762549,201.275471375133,60.0033912658691,"5.08641824126244E-05",97.1825485229492,108.875938415527,11.6933898925781 +"2011-11-29 19:40:47.766",-89.9724902966876,134160.17171394,-90.3035222573985,134.403741357932,97.404623267171,0.106263900640299,149.672553329438,202.113292278731,29.7245703103459,201.203280237007,60.0034027099609,0.000635781325399876,97.1754837036133,108.879951477051,11.7044677734375 +"2011-11-29 19:40:47.800",-89.9307164458645,134160.363711498,-90.2670424682334,134.380594689235,103.717823570251,0.14424327338574,149.689255754467,202.145315105924,29.7868060804278,201.13656684654,60.0034408569336,0.000966377556324005,97.1874542236328,108.882904052734,11.6954498291016 +"2011-11-29 19:40:47.833",-89.8901894031469,134163.074528069,-90.2212595856401,134.380945843875,111.378231765455,0.16934924741944,149.710859576115,202.153599213366,29.8647171381207,201.147053870698,60.0034294128418,-0.000890102237462997,97.1804733276367,108.864143371582,11.6836700439453 +"2011-11-29 19:40:47.866",-89.8499201067929,134164.679014746,-90.1583766955604,134.409555854515,142.032404332403,0.0938135970355373,149.816980253692,202.136945572556,29.8874986526618,201.149322722457,60.0033912658691,-0.000940952450037003,97.1717681884766,108.871673583984,11.6999053955078 +"2011-11-29 19:40:47.900",-89.809344371037,134164.399031182,-90.0935319593301,134.43496306085,-154.335269505496,0.0858604087632557,149.882188176864,202.166712716727,29.9529086453109,201.100955122948,60.0033950805664,0.000292458571493626,97.1735076904297,108.866889953613,11.6933822631836 +"2011-11-29 19:40:47.933",-89.7689339481215,134163.450389839,-90.0550503400171,134.458008840148,-53.7039948795721,0.0892318932379093,149.849202975104,202.128777916284,30.026088874457,201.173881311155,60.0033798217773,-0.000775661319494247,97.1774520874023,108.875419616699,11.6979675292969 +"2011-11-29 19:40:47.966",-89.7282360054871,134161.915415992,-90.0414592422105,134.438694863841,56.7509000036517,0.0735895411144268,149.89814362656,202.128035387081,30.0077284464153,201.249782378641,60.0033760070801,"2.79396772384644E-08",97.1576232910156,108.868957519531,11.7113342285156 +"2011-11-29 19:40:48.000",-89.687086005966,134161.672667709,-90.0110569407544,134.378222106701,101.691708548021,0.180561703079932,149.964008187956,202.109057206795,30.0244204272045,201.20248264561,60.0033798217773,0.000305171124637127,97.1841583251953,108.865493774414,11.6813354492188 +"2011-11-29 19:40:48.033",-89.6455792114222,134162.160548479,-89.9707356024888,134.406145461347,-176.402184192342,0.10794843181181,149.984561749007,202.016795192778,30.1048307995668,201.195125133237,60.0033988952637,0.000712084583938122,97.1732482910156,108.87873840332,11.7054901123047 +"2011-11-29 19:40:48.066",-89.6050276698188,134160.031465216,-89.9287818292374,134.432965179462,-140.838591673864,0.159346955150717,150.018916637752,202.045879266275,30.1589789713269,201.152883821136,60.0034027099609,-0.000152606517076492,97.1843719482422,108.872177124023,11.6878051757813 +"2011-11-29 19:40:48.100",-89.5650249203594,134159.459846653,-89.8873097492715,134.405594437509,-154.32092825767,0.0660569449214884,150.037451593222,202.207001460056,30.2053755042501,200.98172463412,60.0033988952637,-0.000203456729650497,97.1600952148438,108.875061035156,11.7149658203125 +"2011-11-29 19:40:48.133",-89.5242166896055,134161.609983929,-89.8371375500083,134.422234941616,-72.7868724028673,0.0581539763680774,150.0634690433,202.214675522054,30.2579954311246,200.997033901172,60.0034027099609,0.000241580419242382,97.1582183837891,108.882827758789,11.724609375 +"2011-11-29 19:40:48.166",-89.4831627702491,134160.895773886,-89.7751771602488,134.408062936157,42.5273362286443,0.0964711249710038,150.1262985432,202.007993983829,30.3033929856212,201.281610199845,60.0033988952637,-0.000190744176506996,97.1710891723633,108.86882019043,11.6977310180664 +"2011-11-29 19:40:48.200",-89.4421567220991,134161.155636083,-89.7593907778446,134.380976172675,79.7157725895751,0.184682451395127,150.187455878833,201.983936222424,30.2843324592421,201.340706115884,60.0033988952637,"-6.35767355561256E-05",97.1788024902344,108.884773254395,11.7059707641602 +"2011-11-29 19:40:48.233",-89.4008808399729,134163.397181272,-89.7461851811822,134.326620138152,99.3416186202999,0.168708826369347,150.218548907761,202.038336411757,30.2968349150876,201.108194717705,60.0034141540527,0.000750194303691387,97.1708755493164,108.878120422363,11.7072448730469 +"2011-11-29 19:40:48.266",-89.3601728736049,134164.709094236,-89.6941258732949,134.33069531534,107.935696722147,0.120050561748799,150.257127590082,202.019047438845,30.3652076890469,201.08763620438,60.00341796875,"1.39698386192322E-08",97.1692504882813,108.866813659668,11.6975631713867 +"2011-11-29 19:40:48.300",-89.3199873617149,134164.964774738,-89.6255882415525,134.436265760441,125.691917509769,0.0609761047130533,150.325048350533,202.15948833222,30.434048098801,201.199259188431,60.0034103393555,-0.000534038990736008,97.1772842407227,108.869064331055,11.691780090332 +"2011-11-29 19:40:48.333",-89.278947943143,134164.217771739,-89.5990394100825,134.54308940843,-79.5461085778763,0.0332351539659192,150.327229293158,202.264969873222,30.4733836921633,201.331868548141,60.0034103393555,"3.81376594305038E-05",97.1791915893555,108.871711730957,11.6925201416016 +"2011-11-29 19:40:48.366",-89.2381598260336,134163.094223677,-89.5870309021918,134.527969481078,-114.417127430138,0.135034741592593,150.336817797619,202.097938442043,30.5055313216315,201.363821855626,60.0034027099609,-0.000228867866098881,97.1799926757813,108.884864807129,11.7048721313477 +"2011-11-29 19:40:48.400",-89.1975597000916,134162.173119226,-89.5321595104139,134.474484108038,-107.535010277202,0.0586641911922962,150.429461064911,202.064506646054,30.5115260807525,201.303230571312,60.0033912658691,-0.000279759988188744,97.1784439086914,108.878746032715,11.7003021240234 +"2011-11-29 19:40:48.433",-89.1570040932408,134164.083753461,-89.4518430036726,134.466206306173,36.1044401130139,0.136050916951629,150.504269836072,202.225093493167,30.5607446640405,201.252692024668,60.0033874511719,"1.27125531435013E-05",97.1848754882813,108.88655090332,11.7016754150391 +"2011-11-29 19:40:48.466",-89.1161267305269,134165.104403736,-89.3988450476275,134.445205298682,54.3785622501179,0.172546300211377,150.531830574527,202.307896316516,30.6418310442338,201.167120522908,60.0033950805664,0.000381460413336754,97.1823120117188,108.855911254883,11.6735992431641 +"2011-11-29 19:40:48.500",-89.0750459798551,134163.060021771,-89.3553387683615,134.40627362989,98.4635828943797,0.0490123708726267,150.561602034252,202.211136018548,30.7300986948196,201.056653583837,60.0033950805664,-0.000190730206668377,97.1820831298828,108.88306427002,11.7009811401367 +"2011-11-29 19:40:48.533",-89.0355047301978,134161.680170578,-89.327227984293,134.416630239259,-80.452554750668,0.0646008985227541,150.606960253594,202.079829094449,30.73606289119,201.106483718121,60.0033874511719,-0.0002288818359375,97.1827545166016,108.866439819336,11.6836853027344 +"2011-11-29 19:40:48.566",-88.9952423320522,134162.315960365,-89.3003216993823,134.384348546873,33.2629365377603,0.107388606089072,150.648913215342,202.147695712269,30.7249243363742,201.063220939496,60.0033760070801,"1.27125531435013E-05",97.1560974121094,108.862571716309,11.7064743041992 +"2011-11-29 19:40:48.600",-88.9540887002249,134164.056266621,-89.2556995551378,134.376847116318,89.7868312623194,0.245099616642461,150.688267982401,202.282360256268,30.7994948673717,201.093432034511,60.0033912658691,0.000597629696130753,97.1776580810547,108.881332397461,11.7036743164063 +"2011-11-29 19:40:48.633",-88.9131073750077,134165.092417313,-89.1993038910462,134.500361775061,94.334341140144,0.113630647532288,150.713570724357,202.348754052898,30.8902841912755,201.26622710217,60.0033950805664,-0.000216155312955379,97.1610794067383,108.883140563965,11.7220611572266 +"2011-11-29 19:40:48.666",-88.8723984437127,134163.949871323,-89.1417990470782,134.495586258779,-28.7466198509956,0.0499872482332828,150.783566389764,202.287926194643,30.9208724030207,201.174427097707,60.0033874511719,"-8.90158116817474E-05",97.1419143676758,108.879028320313,11.7371139526367 +"2011-11-29 19:40:48.700",-88.8309533372353,134161.441132877,-89.0945801385097,134.401546708661,-29.5364739561483,0.0261660094234826,150.857825543444,202.171590639568,30.9468569414829,201.019900969328,60.0034141540527,0.000457749702036381,97.1645355224609,108.875686645508,11.7111511230469 +"2011-11-29 19:40:48.733",-88.7899247817325,134160.075908046,-89.0847390681537,134.381143657741,-89.673596424608,0.0755313299723084,150.853484691626,202.057153150996,30.9775796400082,201.01100729086,60.0034217834473,0,97.169189453125,108.903800964355,11.7346115112305 +"2011-11-29 19:40:48.766",-88.7502601344397,134160.600803515,-89.0653967522204,134.400463738971,-106.183805547806,0.126345844831568,150.857669927845,202.109160916772,31.0225766135489,200.971896303337,60.0034065246582,-0.000483188778162003,97.1847839355469,108.882919311523,11.6981353759766 +"2011-11-29 19:40:48.800",-88.7095947397928,134163.055735981,-89.0220055194426,134.397248696356,178.137903774383,0.0929646192650591,150.909745887967,202.153725203496,31.0730820935861,201.043065454764,60.0033988952637,"2.54251062870026E-05",97.1852493286133,108.890625,11.7053756713867 +"2011-11-29 19:40:48.833",-88.6684077355292,134162.12140096,-88.9864902749656,134.417696823506,125.828883709799,0.08229531348924,150.928132380396,202.077180695244,31.1126166708511,201.244013397877,60.0034103393555,0.000508641824126244,97.1755218505859,108.865417480469,11.6898956298828 +"2011-11-29 19:40:48.866",-88.626336921059,134161.634192107,-88.9418518018832,134.486129963282,159.078980913973,0.0571160450264924,150.948789312938,202.092169629726,31.1829599750712,201.388452757777,60.0034141540527,0,97.1672973632813,108.876861572266,11.7095642089844 +"2011-11-29 19:40:48.900",-88.5847073031428,134164.085280935,-88.9139126182038,134.458161927555,179.664972211129,0.103053498715579,151.00173135741,202.058190575565,31.200073540908,201.31944522532,60.0034255981445,0.000457763671875,97.1693267822266,108.879806518555,11.7104797363281 +"2011-11-29 19:40:48.933",-88.5440136707844,134164.269572698,-88.8656270490154,134.42754508954,-145.218152597691,0.107704103297596,151.086958567507,202.023829144083,31.2075158340606,201.199341651861,60.0034294128418,"-1.39698386192322E-08",97.1789932250977,108.873413085938,11.6944198608398 +"2011-11-29 19:40:48.966",-88.5031313219841,134163.860992216,-88.7913706374861,134.517964937783,-104.208371061959,0.157438832418872,151.1724532361,202.233501880459,31.2569160197251,201.168725559627,60.0034332275391,"-2.54251062870026E-05",97.1872711181641,108.858375549316,11.6711044311523 +"2011-11-29 19:40:49.000",-88.4631308959639,134163.74663308,-88.7251029097744,134.52722876884,-62.8882820200784,0.11298640559424,151.233936922665,202.324819472698,31.302068925905,201.155215369385,60.00341796875,-0.000559478066861629,97.1639862060547,108.864051818848,11.700065612793 +"2011-11-29 19:40:49.033",-88.4234359242271,134161.630324045,-88.6738367546271,134.47863243255,-136.124129244511,0.0377844841373671,151.284592699084,202.241220920425,31.3758829686933,201.169247404517,60.0033798217773,-0.00113168265670538,97.1842193603516,108.882019042969,11.6977996826172 +"2011-11-29 19:40:49.066",-88.3827945487569,134160.907007123,-88.684340847119,134.460557504956,-161.004882983,0.243421135399351,151.299271373914,202.163476910619,31.3981918891239,201.144479742751,60.0033721923828,0,97.1724700927734,108.872718811035,11.7002487182617 +"2011-11-29 19:40:49.100",-88.341877262334,134161.473494053,-88.6590462509812,134.466818090083,-145.09964535138,0.220043622213906,151.328999029382,202.062753509678,31.4051705557214,201.21618007763,60.0033760070801,0.000165291130542755,97.1795806884766,108.882446289063,11.7028656005859 +"2011-11-29 19:40:49.133",-88.3011106327013,134163.160931455,-88.5895747547297,134.464841908459,-80.2411579269813,0.136773932206128,151.368075290851,202.043171561548,31.4472932908112,201.216087925166,60.0033760070801,-0.00021614134311676,97.1714096069336,108.857299804688,11.6858901977539 +"2011-11-29 19:40:49.166",-88.2598894007551,134163.338579468,-88.5266366164133,134.463828112271,-28.6789838966108,0.120466667235948,151.425761632119,202.257072321931,31.4915619351976,201.074005511294,60.0033950805664,0.000902814790606499,97.1818084716797,108.883041381836,11.7012329101563 +"2011-11-29 19:40:49.200",-88.2181477563283,134161.950900331,-88.5334982341925,134.488264342524,-9.06171210547912,0.00475549110946129,151.425399616981,202.36193247833,31.5065270090479,201.102073897862,60.00341796875,0.000712098553776741,97.178581237793,108.86279296875,11.684211730957 +"2011-11-29 19:40:49.233",-88.1785327738161,134159.647370762,-88.5284398529178,134.484874990317,-151.522437981969,0.055229081760316,151.415814666862,202.203340369939,31.5415866158453,201.226409485982,60.0034141540527,-0.000241608358919621,97.1784210205078,108.869682312012,11.6912612915039 +"2011-11-29 19:40:49.266",-88.1385751502964,134158.40320942,-88.4632472481447,134.490434829733,-137.808459901245,0.116430331477123,151.47367928243,202.210439541761,31.6253034674478,201.185387903657,60.0033950805664,-0.000317883677780628,97.1730499267578,108.880966186523,11.7079162597656 +"2011-11-29 19:40:49.300",-88.0965929914879,134160.023779023,-88.3836654708284,134.525434329253,-151.908380333775,0.0814776685155317,151.550041694624,202.362147350002,31.7037866090934,201.178173981077,60.0034217834473,0.000928239896893501,97.1698913574219,108.873626708984,11.7037353515625 +"2011-11-29 19:40:49.333",-88.0551554018481,134162.579924578,-88.3681894506272,134.506207949437,173.342096959505,0.145953625452681,151.595909429874,202.240595765664,31.7089884442035,201.29928066802,60.0034255981445,-0.000457763671875,97.1864624023438,108.866088867188,11.6796264648438 +"2011-11-29 19:40:49.366",-88.0145295905717,134163.23306509,-88.3396340847343,134.443211523575,175.269964241577,0.076486321889598,151.639841166119,202.110064473767,31.7026226324063,201.22812705676,60.0033988952637,-0.000635753385722637,97.1726531982422,108.876930236816,11.7042770385742 +"2011-11-29 19:40:49.400",-87.9728615286007,134162.820538445,-88.2679937103278,134.422711022329,-44.904221997551,0.138320918596107,151.657787638593,202.099399296034,31.7795426466829,201.06841047478,60.0034332275391,0.00106810592114925,97.1750183105469,108.890998840332,11.7159805297852 +"2011-11-29 19:40:49.433",-87.9317577210901,134162.009078049,-88.2516898585778,134.440314487156,-90.8101666553087,0.17360789632907,151.675993369164,202.020939249393,31.8231571322635,201.12688164805,60.0034484863281,0,97.1831283569336,108.896179199219,11.7130508422852 +"2011-11-29 19:40:49.466",-87.8928142147597,134160.642612785,-88.2065817075426,134.455250328657,-128.783722864074,0.102064060994251,151.754536570364,202.086099098682,31.8513791052183,201.202255347758,60.00341796875,-0.00106811989098787,97.1766052246094,108.890960693359,11.71435546875 +"2011-11-29 19:40:49.500",-87.8536271459267,134161.392109828,-88.1416042907173,134.475500314961,62.4649401547352,0.0148386059675978,151.822779215623,202.303863128578,31.8921454113245,201.135613263678,60.0033645629883,-0.00122069846838713,97.1872100830078,108.888168334961,11.7009582519531 +"2011-11-29 19:40:49.533",-87.8119096920252,134164.635391602,-88.1160304029888,134.458209534216,1.02852170342075,0.0907301829161989,151.818820257878,202.243701210691,31.9236362277149,201.129722101082,60.0033836364746,0.000712070614099503,97.1741409301758,108.878059387207,11.7039184570313 +"2011-11-29 19:40:49.566",-87.7696451755248,134165.247783186,-88.0550769470089,134.409737576737,13.1718317957163,0.144495349552961,151.836416506118,202.111956077605,32.0135798683076,201.1458732655,60.0033912658691,"3.81516292691231E-05",97.1694488525391,108.882652282715,11.7132034301758 +"2011-11-29 19:40:49.600",-87.7293841369895,134164.386673865,-88.0043933788995,134.437340672057,86.8018820025162,0.0197420060075476,151.876817928608,202.177935584401,32.1144925965935,201.154563273435,60.0033645629883,-0.000712070614099503,97.1769790649414,108.867782592773,11.690803527832 +"2011-11-29 19:40:49.633",-87.68927553851,134162.826750304,-87.9798827885445,134.448212518616,-112.688441379172,0.0768220016356268,151.919233137602,202.170735394586,32.1306845116637,201.104795522925,60.0033836364746,0.000699372030794621,97.1867065429688,108.877891540527,11.6911849975586 +"2011-11-29 19:40:49.666",-87.6477325939637,134160.782327859,-87.9311315996279,134.391114536669,-28.4995287775338,0.111578132885404,151.981252813313,202.114403262127,32.1295827206557,201.002545169479,60.0034332275391,0.00175476539880037,97.184211730957,108.878692626953,11.6944808959961 +"2011-11-29 19:40:49.700",-87.6063239871711,134157.856847879,-87.8861624806042,134.397730079946,-30.5035550691832,0.101553115308923,152.021612618266,202.096154299892,32.1821669772557,201.042720778673,60.0034332275391,-0.000762934796512127,97.1795043945313,108.87279510498,11.6932907104492 +"2011-11-29 19:40:49.733",-87.5662553903925,134157.260659128,-87.8731121521442,134.506145627425,-92.423399563679,0.196046792929313,152.058363180183,202.144290972722,32.2001736015569,201.179044364398,60.0033836364746,-0.00158944632858038,97.1935806274414,108.860412597656,11.6668319702148 +"2011-11-29 19:40:49.766",-87.5260813498242,134159.336884481,-87.8581232439171,134.545294763304,-109.88968303709,0.171568943053474,152.094578126708,202.257606883691,32.2077474720345,201.219418839513,60.0033798217773,0.000394172966480255,97.1724472045898,108.880561828613,11.7081146240234 +"2011-11-29 19:40:49.800",-87.4854551344518,134161.040846747,-87.7821377300487,134.483309774011,80.0181570925991,0.0444821674920484,152.170634945885,202.288982578933,32.2626645717893,201.2045849283,60.0033912658691,0.000228895805776119,97.1777725219727,108.882293701172,11.7045211791992 +"2011-11-29 19:40:49.833",-87.4445984504862,134160.959586576,-87.7283053065512,134.404242914234,110.848790440017,0.178080305944098,152.222584040029,202.160763706755,32.3371892810752,201.220979123935,60.0033836364746,"-8.90158116817474E-05",97.1819534301758,108.863998413086,11.6820449829102 +"2011-11-29 19:40:49.866",-87.4031774902057,134161.851079151,-87.6821483648957,134.416309125579,137.242400986101,0.201103565374664,152.263513009003,202.14509808952,32.4128650046518,201.246579754409,60.0033836364746,"1.39698386192322E-08",97.1865158081055,108.874740600586,11.6882247924805 +"2011-11-29 19:40:49.900",-87.3614944420007,134164.65545305,-87.6229714784312,134.519068736125,-150.788257791948,0.0769452821253128,152.291507090475,202.324792054726,32.4825819045858,201.19821587096,60.0034141540527,0.00100454315543175,97.1712036132813,108.890640258789,11.7194366455078 +"2011-11-29 19:40:49.933",-87.3205409024461,134164.963975153,-87.5916236309987,134.517256942615,-71.7320639962378,0.0926571416408092,152.28833804575,202.303109908596,32.521885462067,201.160343792338,60.0034255981445,"-2.79396772384644E-08",97.1850662231445,108.872848510742,11.6877822875977 +"2011-11-29 19:40:49.966",-87.2809777925827,134162.433300169,-87.5674789420141,134.433485351134,4.21330356963284,0.0193632311369967,152.334849658901,202.242155338391,32.5252527194163,201.059461607016,60.0034217834473,-0.000101742334663868,97.1673965454102,108.882606506348,11.7152099609375 +"2011-11-29 19:40:50.000",-87.2407245008632,134162.077916177,-87.492900175402,134.427974421406,-8.78295773296357,0.11697121794669,152.426346464003,202.255403479894,32.5556571139605,201.005895604375,60.0034065246582,-0.000152578577399254,97.1622924804688,108.875030517578,11.7127380371094 +"2011-11-29 19:40:50.033",-87.1994985921127,134163.370622636,-87.4649356587079,134.461196904712,-43.9911106580988,0.117621396935402,152.45646354857,202.241506921938,32.5910663448858,201.056985302819,60.0034027099609,-0.000267033465206623,97.1853790283203,108.874771118164,11.6893920898438 +"2011-11-29 19:40:50.066",-87.1586375252332,134163.783111994,-87.4519776506819,134.452282666699,154.017217316463,0.0790706676618609,152.474677513908,202.271673699975,32.6415745736675,201.123359632513,60.0033912658691,-0.000445037148892879,97.1695938110352,108.863121032715,11.6935272216797 +"2011-11-29 19:40:50.100",-87.1180562067078,134163.02624116,-87.3879127790871,134.496984134857,131.097625385266,0.0980193300204524,152.516212224954,202.368597499903,32.725889493025,201.199795483124,60.0033798217773,"-2.54390761256218E-05",97.1662445068359,108.870979309082,11.7047348022461 +"2011-11-29 19:40:50.133",-87.0774764816849,134161.663682136,-87.3652577474605,134.496732470876,-139.929656393639,0.0528117423330382,152.545890412049,202.273253379452,32.7360163598626,201.185376423971,60.0033912658691,0.000101714394986629,97.1632232666016,108.875648498535,11.7124252319336 +"2011-11-29 19:40:50.166",-87.0369608497658,134160.923809732,-87.3419133635401,134.452324617419,-118.618906168849,0.175232959260744,152.59860025826,202.176533699293,32.7438408176962,201.031006367968,60.0033912658691,-0.000152592547237873,97.1735916137695,108.89697265625,11.7233810424805 +"2011-11-29 19:40:50.200",-86.9959731602947,134162.202199092,-87.2779326128958,134.400581720288,-120.458448698773,0.161059328339368,152.663157622938,202.133071756974,32.8064641353118,200.934157510861,60.0033874511719,"1.39698386192322E-08",97.1769561767578,108.861366271973,11.6844100952148 +"2011-11-29 19:40:50.233",-86.954933967293,134163.618348976,-87.2556120165411,134.426683222458,-145.153776524322,0.15187650461739,152.668787925613,202.150183867198,32.8570663732667,201.049711937995,60.0033912658691,0.000216183252632618,97.1793670654297,108.877258300781,11.6978912353516 +"2011-11-29 19:40:50.266",-86.9138615589252,134163.386388026,-87.2301243093834,134.423956538153,179.915646010055,0.112725223579219,152.686314345861,202.119321448349,32.8859034899602,201.158813355666,60.0034065246582,0.000406913459300995,97.1873245239258,108.885055541992,11.6977310180664 +"2011-11-29 19:40:50.300",-86.8729571938972,134161.91869664,-87.1650004640193,134.420283360416,127.479786046988,0.118056074350971,152.739260195839,202.180178600364,32.9503307426987,201.178451183664,60.0034141540527,0.000254306942224503,97.1795349121094,108.875518798828,11.6959838867188 +"2011-11-29 19:40:50.333",-86.8316326706967,134161.309227331,-87.1300252175233,134.426266379693,136.71870000191,0.0987996080830243,152.783944765677,202.127405364193,32.9758780499685,201.223225582786,60.00341796875,0.000152578577399254,97.1714324951172,108.873573303223,11.7021408081055 +"2011-11-29 19:40:50.366",-86.7903966627288,134162.90186817,-87.0924901095334,134.433521479636,2.48855806109893,0.0182735103664011,152.839844369911,202.054380193253,32.970244735815,201.246294066831,60.0034255981445,0.00011444091796875,97.1602172851563,108.874153137207,11.7139358520508 +"2011-11-29 19:40:50.400",-86.7503376746497,134164.251115467,-87.0441447327906,134.491600626172,-127.598989306893,0.0343425816784331,152.877816980973,202.191729927684,33.04061187881,201.257383368176,60.0034217834473,-0.000203456729650497,97.1713409423828,108.86759185791,11.6962509155273 +"2011-11-29 19:40:50.433",-86.7104593447552,134164.780946981,-87.0120439289827,134.512029814347,-149.973468751136,0.173168192057891,152.908389634134,202.244112583892,33.1118484664929,201.213912142067,60.0033988952637,-0.000826525501906872,97.1890106201172,108.864654541016,11.6756439208984 +"2011-11-29 19:40:50.466",-86.6695805596364,134164.213053972,-86.946154953447,134.46082870146,-135.520373919598,0.11566339337367,152.984744296654,202.191674766949,33.1480236740261,201.114685863154,60.0033988952637,0.000279732048511505,97.1832427978516,108.893127441406,11.7098846435547 +"2011-11-29 19:40:50.500",-86.6272872732022,134162.891181005,-86.8782688774085,134.420721027885,27.2487457824344,0.070318216156367,153.036059341907,202.191847895482,33.1895846652004,201.099400858478,60.0033988952637,"1.39698386192322E-08",97.1635437011719,108.878570556641,11.7150268554688 +"2011-11-29 19:40:50.533",-86.5860307290984,134162.107914944,-86.8437149911418,134.391454824557,32.7686309875714,0.15923874131467,153.058854450102,202.106531663009,33.2147486486841,201.146887039716,60.0033988952637,-0.000457791611552238,97.1670761108398,108.872856140137,11.7057800292969 +"2011-11-29 19:40:50.566",-86.5463990335378,134163.355960723,-86.8181281193342,134.415775731902,12.6468909389453,0.224988148348958,153.080637021618,202.129264206953,33.2203844856708,201.155429441579,60.0033874511719,"1.39698386192322E-08",97.1791152954102,108.887870788574,11.7087554931641 +"2011-11-29 19:40:50.600",-86.5060235067636,134163.898010799,-86.8143424564795,134.482503684876,5.08041646518246,0.0938054964198629,153.112140695758,202.23149021254,33.232846593368,201.219353599677,60.0034027099609,0.000483202748000622,97.1811370849609,108.877334594727,11.6961975097656 +"2011-11-29 19:40:50.633",-86.4656006521969,134161.226075851,-86.7754841770832,134.451772550141,-126.072234572095,0.07052701057887,153.181233675163,202.08218577036,33.2807023673996,201.218700485688,60.0033912658691,-0.000788359902799129,97.1940841674805,108.858825683594,11.6647415161133 +"2011-11-29 19:40:50.666",-86.4251420508492,134160.802027758,-86.6915778238043,134.432151487381,-106.603917144551,0.086056692899083,153.249709820702,202.135180247066,33.3757924145282,201.080576442656,60.0033683776855,-0.000114426948130131,97.1656875610352,108.865814208984,11.7001266479492 +"2011-11-29 19:40:50.700",-86.3846059775217,134161.082549632,-86.6765861891745,134.461013751635,179.387237459464,0.0915179361344831,153.249222733286,202.331340936105,33.4240950808149,201.058447662615,60.0033645629883,"-2.79396772384644E-08",97.1639938354492,108.869972229004,11.7059783935547 +"2011-11-29 19:40:50.733",-86.3436789054409,134161.567038601,-86.6723417571081,134.415051056388,173.02141321766,0.133297130247005,153.268948978606,202.185708393867,33.4240591015055,201.083667167315,60.0033760070801,0.000241608358919621,97.1851196289063,108.857688903809,11.6725692749023 +"2011-11-29 19:40:50.766",-86.3019516591877,134162.977024353,-86.6067833358857,134.367861752497,141.112759537772,0.0493500536189487,153.356473565223,202.094806211213,33.4405579940888,201.042080538256,60.0033874511719,0.000470462255179882,97.1928024291992,108.873802185059,11.6809997558594 +"2011-11-29 19:40:50.800",-86.2605647737193,134162.934328594,-86.5301240103262,134.435295265103,-14.5955454350037,0.0445949456926267,153.413676112932,202.175057518844,33.5142916481771,201.117149060737,60.0034103393555,0.000495901331305504,97.1897888183594,108.866767883301,11.6769790649414 +"2011-11-29 19:40:50.833",-86.2202634530578,134161.869793114,-86.5254900827515,134.512496427777,-101.574853064974,0.159988885040719,153.404022998602,202.218405046887,33.5571975739944,201.164954787255,60.0034103393555,0,97.193733215332,108.875923156738,11.6821899414063 +"2011-11-29 19:40:50.866",-86.1798565584643,134161.984231637,-86.490928151583,134.394093175674,-154.584434991936,0.189258111550158,153.435585253753,202.116787638583,33.6330237712789,200.995524430194,60.0034103393555,0,97.1854934692383,108.87328338623,11.6877899169922 +"2011-11-29 19:40:50.900",-86.1388470960548,134162.197988759,-86.4098042626848,134.372934897386,-165.873717000992,0.205252567004418,153.518840627054,202.054019265536,33.7194291395653,201.027885462971,60.0034141540527,-0.00011444091796875,97.1873397827148,108.873992919922,11.686653137207 +"2011-11-29 19:40:50.933",-86.0984803292875,134161.391195532,-86.3766436658408,134.520517318114,-123.232317869467,0.154824047592715,153.543590281018,202.143167281001,33.729889956167,201.295012048222,60.0033874511719,-0.000699344091117382,97.1750259399414,108.877281188965,11.7022552490234 +"2011-11-29 19:40:50.966",-86.0586736254954,134159.824445392,-86.3712917963721,134.536832375126,-137.611929843912,0.148733323268704,153.571278977355,202.245322624989,33.7194314167805,201.272411998644,60.0033645629883,-0.000737495720386505,97.1949462890625,108.864654541016,11.6697082519531 +"2011-11-29 19:40:51.000",-86.0172949630908,134159.674919565,-86.343144897772,134.456441016952,-170.985866604656,0.171362783344286,153.629030075331,202.209009756525,33.7334265223431,201.144487836565,60.0033798217773,0.000661220401525497,97.1721801757813,108.879653930664,11.7074737548828 +"2011-11-29 19:40:51.033",-85.9745324042215,134162.031930042,-86.2887196585567,134.421957536059,161.844363041506,0.197616443080913,153.655931196958,202.133522066865,33.8191091637274,201.206393800177,60.0034103393555,0.00105539336800575,97.1907577514648,108.866363525391,11.6756057739258 +"2011-11-29 19:40:51.066",-85.9333498519731,134164.138178427,-86.2243820460755,134.491961946283,-171.279079264106,0.0362658040379948,153.685896089369,202.111141379077,33.8759536499615,201.362165505134,60.0034141540527,-0.000381474383175373,97.1712646484375,108.88729095459,11.7160263061523 +"2011-11-29 19:40:51.100",-85.8939121816086,134163.65513348,-86.1762749230204,134.495562182497,-38.2767118253382,0.0365899025833053,153.731498547559,202.142713627543,33.9086012229495,201.319898607788,60.0033988952637,-0.000381474383175373,97.1997451782227,108.861915588379,11.6621704101563 +"2011-11-29 19:40:51.133",-85.8540923480013,134162.799159039,-86.1320271039821,134.444765365229,-112.048500739504,0.0974339662257667,153.808336417985,202.106694408812,33.9400267408893,201.140216351331,60.0033988952637,"3.81376594305038E-05",97.1694564819336,108.860946655273,11.6914901733398 +"2011-11-29 19:40:51.166",-85.8134906391051,134161.812901094,-86.0899578533104,134.479526174247,-112.87312318704,0.101877906310221,153.874971909495,202.193487235483,33.9583675627708,201.154261789673,60.0033760070801,-0.000826525501906872,97.1832504272461,108.864212036133,11.6809616088867 +"2011-11-29 19:40:51.200",-85.7720060812815,134160.169335257,-86.0583252140013,134.557104328929,-139.7524475733,0.0473462262968487,153.909318160804,202.324284299301,33.9850512567901,201.319083688367,60.0033721923828,0,97.1842193603516,108.875350952148,11.6911315917969 +"2011-11-29 19:40:51.233",-85.7306235584995,134159.925582178,-86.0326445633677,134.574993589052,-66.4220549740864,0.1048314579439,153.893531163284,202.212699031255,34.0314628279851,201.413861581252,60.0033798217773,0.000470462255179882,97.1766815185547,108.867340087891,11.6906585693359 +"2011-11-29 19:40:51.266",-85.6901039558466,134162.890055473,-85.9915224158048,134.531892246372,-50.8475724540774,0.175939405290141,153.904888348664,202.044105206568,34.0835841611503,201.408180629181,60.0033988952637,0.000254306942224503,97.1735305786133,108.872192382813,11.6986618041992 +"2011-11-29 19:40:51.300",-85.6496224833604,134163.12586866,-85.9186901535091,134.511493702588,-51.2426016269982,0.142160491482458,153.983825159642,202.076350917247,34.1561335680982,201.341689201663,60.0034027099609,0.000317897647619247,97.1851577758789,108.870735168457,11.6855773925781 +"2011-11-29 19:40:51.333",-85.6086663858679,134160.787271359,-85.8680336275589,134.543041479018,-99.0883754491333,0.150818112768679,154.049013363427,202.125847234791,34.2250501747848,201.3569120441,60.0034141540527,"7.62892886996269E-05",97.1737976074219,108.875312805176,11.7015151977539 +"2011-11-29 19:40:51.366",-85.5676031969555,134161.200627734,-85.8504377522424,134.547654525483,-143.798421034858,0.195047476072391,154.079775766905,202.132980117044,34.2666285665521,201.407076421975,60.0034103393555,"-8.90018418431282E-05",97.1879425048828,108.880798339844,11.6928558349609 +"2011-11-29 19:40:51.400",-85.526359753954,134162.264512966,-85.8265136670067,134.487576816321,149.668870062565,0.117925459111617,154.089813096378,202.145020745585,34.2851234895173,201.385073207372,60.0034103393555,0,97.1618499755859,108.858840942383,11.6969909667969 +"2011-11-29 19:40:51.433",-85.4850931990703,134163.151534788,-85.7773827572047,134.423334771657,34.2136402722628,0.127192791901931,154.127466900266,202.014410574946,34.2867443831429,201.319591740574,60.00341796875,0.000317883677780628,97.18212890625,108.871810913086,11.6896820068359 +"2011-11-29 19:40:51.466",-85.4451249599077,134161.389456975,-85.7115722643774,134.480269967141,-30.7538304934622,0.211943477942657,154.207160616415,202.084756820758,34.3206321003183,201.23458345506,60.00341796875,0,97.1714553833008,108.871475219727,11.7000198364258 +"2011-11-29 19:40:51.500",-85.4052632998232,134158.841620693,-85.6859659678414,134.52843208387,-91.8889596039533,0.101469828046517,154.232681809419,202.228985961473,34.398900532764,201.255826535336,60.0033988952637,-0.000699330121278763,97.1783676147461,108.862144470215,11.6837768554688 +"2011-11-29 19:40:51.533",-85.364486160825,134158.397703508,-85.6680565407759,134.452313312568,119.762198381557,0.157922211139393,154.238667660536,202.180447750934,34.4449175957583,201.319756176003,60.0033912658691,-0.000127139501273632,97.1860580444336,108.867576599121,11.6815185546875 +"2011-11-29 19:40:51.566",-85.3243022886552,134160.134228556,-85.6346162039746,134.422716235095,119.268805883159,0.148162438817786,154.266712679568,202.17864586396,34.4822886251807,201.224585241213,60.0033645629883,-0.000953678973019123,97.1755523681641,108.883895874023,11.7083435058594 +"2011-11-29 19:40:51.600",-85.2839567092187,134163.065649545,-85.5675382492916,134.473910841332,-147.641563633961,0.0716371981568353,154.336324107505,202.173352598861,34.5470815767139,201.215488932907,60.0033531188965,"-7.62753188610077E-05",97.1586456298828,108.883628845215,11.724983215332 +"2011-11-29 19:40:51.633",-85.2427329367675,134163.334443041,-85.5268645921653,134.531056880319,-141.687683303114,0.139403802400988,154.386959436782,202.236765710046,34.592682255964,201.279438767692,60.0033721923828,0.000788359902799129,97.1720657348633,108.858070373535,11.6860046386719 +"2011-11-29 19:40:51.666",-85.2019759719821,134163.25169128,-85.5015069854794,134.578247924655,-157.390459837769,0.127542340189918,154.402978969548,202.462563364492,34.6291058282571,201.233303060369,60.0033912658691,0.000406913459300995,97.1818923950195,108.881103515625,11.6992111206055 +"2011-11-29 19:40:51.700",-85.160964795971,134162.064104276,-85.4588176118088,134.500027622385,169.084885967141,0.063482756157182,154.448282518389,202.384612320687,34.6520896855226,201.133029794977,60.0033950805664,0.000190716236829758,97.1981353759766,108.902954101563,11.7048187255859 +"2011-11-29 19:40:51.733",-85.1193371976101,134160.096082027,-85.412055185187,134.407239523444,120.599555583654,0.0543583571884976,154.520467505192,202.166734965437,34.6625715562661,201.104132635019,60.00341796875,0.000648521818220615,97.1749725341797,108.858283996582,11.6833114624023 +"2011-11-29 19:40:51.766",-85.0778280704791,134160.166467597,-85.3755762489466,134.419078809,130.110794885963,0.135795788501193,154.566853252207,202.21118175945,34.7047497481116,201.15689989097,60.0034370422363,0.000394200906157494,97.1719207763672,108.87109375,11.6991729736328 +"2011-11-29 19:40:51.800",-85.0371036646754,134159.441940249,-85.3094937614483,134.513587806016,149.487509425225,0.0656656076636416,154.602314595797,202.278356685109,34.7943993571531,201.300778317601,60.0034255981445,-0.000381474383175373,97.1543807983398,108.880149841309,11.7257690429688 +"2011-11-29 19:40:51.833",-84.9966248346674,134160.381662568,-85.2612707999703,134.476807925409,95.6234674391661,0.0406177136007042,154.640544234934,202.155696833331,34.8375033637969,201.315919859426,60.0034217834473,0,97.1758193969727,108.86840057373,11.6925811767578 +"2011-11-29 19:40:51.866",-84.9567310805522,134162.977304316,-85.2224701528483,134.410461998061,99.5718681579043,0.0925911166834037,154.710776321751,202.039041911471,34.8467374677214,201.284884919276,60.0034065246582,-0.000661206431686878,97.1838607788086,108.867965698242,11.6841049194336 +"2011-11-29 19:40:51.900",-84.9159421572353,134162.279586704,-85.1618787587494,134.434898431849,42.2542825993012,0.0686244417132617,154.751807063398,202.142651024008,34.9093174335227,201.20411118056,60.0033874511719,-0.000101728364825249,97.1787567138672,108.877052307129,11.6982955932617 +"2011-11-29 19:40:51.933",-84.8744365059238,134160.341345249,-85.1232841487706,134.47297765664,10.709161480952,0.144019804446556,154.742921660409,202.319524328486,34.9704926526272,201.114866051599,60.0033874511719,"1.39698386192322E-08",97.1778717041016,108.861282348633,11.6834106445313 +"2011-11-29 19:40:51.966",-84.833244570554,134159.850201269,-85.1058625160732,134.393880830798,39.3764096548628,0.100397715356083,154.813221572376,202.261174269732,34.9519766109202,200.977610590306,60.0034027099609,0.000597629696130753,97.1742706298828,108.886428833008,11.712158203125 +"2011-11-29 19:40:52.000",-84.7921411339061,134160.256700792,-85.1003556655565,134.434591451185,-133.500320741606,0.129044904719772,154.890477350727,202.210580490408,34.9363719411429,201.007546228072,60.00341796875,0.000457763671875,97.170166015625,108.888442993164,11.7182769775391 +"2011-11-29 19:40:52.033",-84.7522420867809,134160.049600428,-85.0759988654814,134.579163141814,-110.592894107639,0.34686035645754,154.879788809617,202.257991905105,35.0110122048938,201.166734303511,60.00341796875,0,97.1867370605469,108.88094329834,11.694206237793 +"2011-11-29 19:40:52.066",-84.7122856083753,134158.319420792,-85.0392763451725,134.589195430517,-129.493542069562,0.227084405022201,154.881579077732,202.225874126659,35.0854491260089,201.380259921235,60.0034027099609,-0.000864649191498756,97.1687622070313,108.88304901123,11.7142868041992 +"2011-11-29 19:40:52.100",-84.6711411326262,134156.615535062,-84.9687114362476,134.464692775973,151.715594502071,0.182139981612242,154.955828759598,202.210995485131,35.1504235646519,201.283732646318,60.0033950805664,"-1.39698386192322E-08",97.1756286621094,108.867523193359,11.69189453125 +"2011-11-29 19:40:52.133",-84.6299980077006,134157.805208081,-84.917062542051,134.432373189195,167.681778017698,0.0915616120585038,154.984914006542,202.252094471894,35.2064346644096,201.073126872628,60.0033950805664,-0.0002288818359375,97.1632385253906,108.87043762207,11.7071990966797 +"2011-11-29 19:40:52.166",-84.5892229666095,134159.186620605,-84.8971355060855,134.453269048399,-112.659830908309,0.153821663096779,155.002862680339,202.185690386092,35.2238577671866,201.038752730759,60.0033874511719,-0.000139866024255753,97.1684494018555,108.878089904785,11.7096405029297 +"2011-11-29 19:40:52.200",-84.5484631256555,134160.946693143,-84.8461120659387,134.366927782618,-121.098102273685,0.0588627963545455,155.06386862252,202.019518256626,35.2542697143399,201.034343843448,60.0034027099609,0.000419612042605877,97.1684722900391,108.883125305176,11.7146530151367 +"2011-11-29 19:40:52.233",-84.5078182816156,134163.314108368,-84.8063196764138,134.377017108052,96.9113833620946,0.0490174005695263,155.092577746932,202.018384232362,35.2956298455489,201.162283457732,60.0034027099609,"3.81516292691231E-05",97.1666870117188,108.879409790039,11.7127227783203 +"2011-11-29 19:40:52.266",-84.4667686969635,134163.313774327,-84.7839967411116,134.496917577033,156.851642640882,0.0448490633062377,155.111536609336,202.139018183669,35.3320970369972,201.373773963866,60.0034027099609,0,97.1868896484375,108.864456176758,11.6775665283203 +"2011-11-29 19:40:52.300",-84.4260307279213,134160.422439834,-84.7264835102987,134.572904277784,-167.174834064349,0.0420927390424325,155.183437837751,202.283831004373,35.3758467037457,201.4299318589,60.0033988952637,-0.000267033465206623,97.1807250976563,108.85285949707,11.6721343994141 +"2011-11-29 19:40:52.333",-84.3855314626157,134160.51094563,-84.6864093220304,134.514595498841,-39.4604492010947,0.0234168200305955,155.22278415615,202.255174349245,35.4001080106936,201.272596152268,60.0033950805664,"3.81516292691231E-05",97.1607055664063,108.877090454102,11.7163848876953 +"2011-11-29 19:40:52.366",-84.3438999013732,134161.965353856,-84.6711520822458,134.465060491094,131.839572987403,0.0641080002904515,155.243790441425,202.247783830456,35.4252082863494,201.199426009924,60.0034065246582,0.000368761830031872,97.1909561157227,108.880584716797,11.6896286010742 +"2011-11-29 19:40:52.400",-84.3030356160967,134162.19668162,-84.6276905039716,134.516898478245,157.803286399684,0.139131804238732,155.303497911621,202.330742101382,35.476585432543,201.284827251767,60.0034141540527,-0.000254292972385883,97.1752243041992,108.883270263672,11.7080459594727 +"2011-11-29 19:40:52.433",-84.2632206369503,134161.558471997,-84.5784745121322,134.584756227279,-121.564462964435,0.0931054467934837,155.354193249486,202.283647675121,35.5050904310162,201.396619743367,60.0033912658691,-0.000762962736189365,97.1862487792969,108.863052368164,11.6768035888672 +"2011-11-29 19:40:52.466",-84.2222576776584,134160.29893197,-84.5275983414932,134.537228794848,-95.8911974484166,0.0937865025909215,155.407272052838,202.237715302854,35.5431016266991,201.282280080507,60.0033988952637,0.000673946924507618,97.1557235717773,108.88835144043,11.7326278686523 +"2011-11-29 19:40:52.500",-84.1812170708284,134161.0110279,-84.4820028638629,134.49640421043,176.232093427389,0.123686566973437,155.433718902323,202.30315210615,35.6374958291622,201.206653540077,60.0034141540527,0.000139866024255753,97.1703491210938,108.875877380371,11.7055282592773 +"2011-11-29 19:40:52.533",-84.1403219725058,134163.484877666,-84.4330908295982,134.54976793868,-134.130032760464,0.135632881962285,155.472680873617,202.250898768937,35.6910161908714,201.311421679908,60.0034027099609,-0.000368747860193253,97.1574249267578,108.884346008301,11.726921081543 +"2011-11-29 19:40:52.566",-84.0996094139717,134165.967560107,-84.3680135652867,134.554877418512,-61.1285817128912,0.131263822574849,155.561473306203,202.244468071052,35.6880896998547,201.299790196361,60.0033988952637,0.000432324595749378,97.1891708374023,108.885231018066,11.6960601806641 +"2011-11-29 19:40:52.600",-84.0581721357846,134163.479449155,-84.324830386668,134.515603149985,82.8787818072358,0.0127713848519581,155.63048020164,202.334965353616,35.7192995248246,201.224401827789,60.0034141540527,0.000470490194857121,97.1691741943359,108.87474822998,11.7055740356445 +"2011-11-29 19:40:52.633",-84.0174449940724,134160.949716359,-84.3407429068154,134.505271837281,175.465067214595,0.148456188764915,155.605338898992,202.320238378276,35.7550757749281,201.222210558816,60.0034141540527,-0.000368775799870491,97.1834716796875,108.899543762207,11.7160720825195 +"2011-11-29 19:40:52.666",-83.9775927493236,134161.492160547,-84.3114787415491,134.537767126448,-132.089412782838,0.142149633382229,155.63752822803,202.287612874734,35.7697558293355,201.230441061463,60.0033988952637,-0.000534080900251865,97.1821365356445,108.872581481934,11.6904449462891 +"2011-11-29 19:40:52.700",-83.937203582712,134161.683173322,-84.2448167398968,134.517151666685,-101.301527244113,0.105652379988817,155.728029925052,202.214114996506,35.7912921294684,201.236390857983,60.0033836364746,-0.000127167440950871,97.1850662231445,108.86304473877,11.677978515625 +"2011-11-29 19:40:52.733",-83.8964508552143,134160.83764576,-84.197870989055,134.500422828305,-123.321272304135,0.0513226157376235,155.743379636331,202.184910105998,35.8703621331266,201.276786321477,60.0033836364746,-0.00011444091796875,97.1742782592773,108.882652282715,11.7083740234375 +"2011-11-29 19:40:52.766",-83.8557598660787,134161.851561598,-84.1485590822841,134.51165347077,-159.840748057532,0.0464546465599712,155.752447205549,202.234490665578,35.9637117494889,201.289683191178,60.0033760070801,"-3.81516292691231E-05",97.1660842895508,108.894889831543,11.7288055419922 +"2011-11-29 19:40:52.800",-83.8144855927361,134160.676699108,-84.0943466526581,134.545099441553,-152.016567732111,0.111931383826895,155.809431961138,202.413452182679,36.032007733326,201.180511437745,60.0033836364746,0.000445051118731499,97.1942596435547,108.882843017578,11.6885833740234 +"2011-11-29 19:40:52.833",-83.7736848539462,134159.151669397,-84.0429497010514,134.54143843584,-145.508152426416,0.0482284404221773,155.879780547253,202.485190901294,36.0469165501142,201.116524388582,60.0033950805664,"-1.39698386192322E-08",97.1705932617188,108.88484954834,11.7142562866211 +"2011-11-29 19:40:52.866",-83.7332043093602,134161.588995448,-84.0190408509234,134.480999241867,57.0443818180251,0.140938370012386,155.907556789414,202.288147820003,36.0295196869693,201.264704527696,60.0033950805664,"-1.27265229821205E-05",97.1788635253906,108.881530761719,11.7026672363281 +"2011-11-29 19:40:52.900",-83.6916400728311,134163.823969752,-84.0112673228624,134.455034696631,100.648632482395,0.0884217280336345,155.917688271916,202.108097118825,36.0620915137891,201.345441521154,60.0034103393555,0.000559506006538868,97.1734390258789,108.86009979248,11.6866607666016 +"2011-11-29 19:40:52.933",-83.6500239517535,134162.889091871,-83.9607383864934,134.539751303269,-148.153861117355,0.139499336671959,155.968383704834,202.175168760074,36.146149149452,201.383823064659,60.0034332275391,0.0006866455078125,97.1764907836914,108.873291015625,11.6968002319336 +"2011-11-29 19:40:52.966",-83.6090422717516,134162.455905304,-83.8727305506949,134.51303693117,-161.105661943231,0.0800773091877128,156.072338441259,202.308382045279,36.2047384007561,201.213273663503,60.0034255981445,-0.000610356219112873,97.1747970581055,108.876304626465,11.7015075683594 +"2011-11-29 19:40:53.000",-83.5692867619581,134163.984725853,-83.8025545274703,134.489815224215,53.7779119589268,0.0322048919513354,156.132760997891,202.392775865822,36.2563579128167,201.100659377511,60.0034141540527,-0.000203442759811878,97.1683807373047,108.888282775879,11.7199020385742 +"2011-11-29 19:40:53.033",-83.5290333337279,134164.845737205,-83.7916509537154,134.51107690742,44.3033004506612,0.0778806212808082,156.109242234235,202.344679289735,36.2905528698375,201.237068043462,60.0034103393555,"-3.81516292691231E-05",97.1885070800781,108.871124267578,11.6826171875 +"2011-11-29 19:40:53.066",-83.4881115967915,134161.894307088,-83.7941470087322,134.489335077229,51.4299379792418,0.0752301644487774,156.094008296516,202.226632446782,36.3031309061379,201.295457795354,60.0033950805664,-0.00057220458984375,97.1730499267578,108.879020690918,11.7059707641602 +"2011-11-29 19:40:53.100",-83.4478281835067,134161.371322196,-83.734836370815,134.507924344222,-11.0283159204169,0.0679586406878367,156.159500452329,202.269571872759,36.3528964364099,201.23454578479,60.0033683776855,-0.000712070614099503,97.1898193359375,108.857475280762,11.6676559448242 +"2011-11-29 19:40:53.133",-83.4069058123405,134163.336746439,-83.6691588650434,134.470702083034,14.5348996826101,0.0466864897778605,156.209811889215,202.35316512488,36.4394768388363,201.066440072058,60.0033683776855,0.000254320912063122,97.1683349609375,108.874839782715,11.7065048217773 +"2011-11-29 19:40:53.166",-83.3648616739001,134161.696693215,-83.6499504709414,134.457656298773,142.684088205007,0.063318198090376,156.251070313718,202.406377119424,36.4627720589719,201.010984301925,60.0033988952637,0.00110625755041838,97.1617889404297,108.866256713867,11.7044677734375 +"2011-11-29 19:40:53.200",-83.3241672758166,134158.295608923,-83.619996384665,134.489664837674,176.432152471308,0.1527328931473,156.327820201686,202.433548233362,36.4754128280586,201.062172176642,60.0034065246582,-0.00012718141078949,97.1968231201172,108.870864868164,11.6740417480469 +"2011-11-29 19:40:53.233",-83.2843196685154,134159.982966477,-83.5756637570004,134.514792860416,-169.031202997107,0.191671614222252,156.352804261759,202.317053573518,36.5506681713981,201.212775804524,60.0033874511719,-0.000712070614099503,97.1873168945313,108.879386901855,11.6920700073242 +"2011-11-29 19:40:53.266",-83.2430103068518,134162.581550303,-83.5360724152637,134.472496402048,-173.174375781429,0.144011365531206,156.357782217922,202.095900495004,36.6114663935364,201.321682890307,60.0034141540527,0.00142414122819901,97.1841659545898,108.887565612793,11.7033996582031 +"2011-11-29 19:40:53.300",-83.2022362201966,134163.291311303,-83.4963521364798,134.419526328097,151.748909806407,0.0609895870135253,156.381922825652,202.065011315454,36.6401450633171,201.22935526947,60.0034103393555,-0.00101725570857525,97.158935546875,108.877090454102,11.7181549072266 +"2011-11-29 19:40:53.333",-83.162526965141,134161.944661366,-83.4611127565098,134.479522723038,-177.612346048611,0.0675141513620757,156.437912141111,202.260398308893,36.6595805746498,201.183786426525,60.0033645629883,-0.00123341102153063,97.1736068725586,108.871810913086,11.6982040405273 +"2011-11-29 19:40:53.366",-83.121152279263,134160.534575692,-83.4122870361086,134.551722499818,-147.259708832068,0.0936656098512363,156.505074474565,202.309051071576,36.6946956848776,201.305379929271,60.0033760070801,0.000966377556324005,97.1912155151367,108.876823425293,11.6856079101563 +"2011-11-29 19:40:53.400",-83.0794909418895,134160.172838001,-83.3566497868146,134.546814075393,-136.418347451123,0.150822714499993,156.548260248304,202.251957690083,36.7732032342146,201.298632608002,60.0034255981445,0.00128427520394325,97.1701507568359,108.859817504883,11.6896667480469 +"2011-11-29 19:40:53.433",-83.0388792270439,134161.313388412,-83.3050876528327,134.473861279091,-124.143755546839,0.0983418512969598,156.570137785333,202.111811452292,36.8385419221551,201.236460493461,60.0034065246582,-0.001157121732831,97.1790161132813,108.88703918457,11.7080230712891 +"2011-11-29 19:40:53.466",-82.9985306196223,134162.493109759,-83.278708436311,134.416551504496,-107.592407812236,0.0202572661781905,156.632203199014,201.928816159147,36.8130343489082,201.302841142059,60.0033950805664,0.000178031623363495,97.1621398925781,108.873252868652,11.7111129760742 +"2011-11-29 19:40:53.500",-82.9579419323179,134160.329646585,-83.2576734231029,134.475631776163,151.719739784204,0.0481764410195539,156.683229335539,202.117227746957,36.8128800166216,201.337561546751,60.0033988952637,0.000165319070219994,97.1883316040039,108.891387939453,11.7030563354492 +"2011-11-29 19:40:53.533",-82.9174415050323,134159.041952883,-83.1951216349282,134.501261181291,-73.3232531593857,0.0342216016058347,156.711015136799,202.196814851142,36.8975015843554,201.273788922955,60.0033798217773,-0.000737509690225124,97.1750030517578,108.848754882813,11.6737518310547 +"2011-11-29 19:40:53.566",-82.8763302844406,134160.346038244,-83.1545772289303,134.527483732027,-86.1649213807705,0.142838870329027,156.734587420684,202.20625879277,36.9589305738903,201.234295995738,60.0033798217773,0,97.1744842529297,108.880813598633,11.7063293457031 +"2011-11-29 19:40:53.600",-82.8347197549162,134163.756168361,-83.1233612680355,134.611966248228,-115.89815809531,0.156646638858046,156.791097899997,202.416018294663,36.986796815267,201.288752084467,60.0033950805664,0.000750222243368626,97.1753082275391,108.88069152832,11.7053833007813 +"2011-11-29 19:40:53.633",-82.7939517777502,134165.098291106,-83.0901769051656,134.660540404044,-117.404024234621,0.130901184219132,156.848100267803,202.427221117212,36.9928332139814,201.446595599657,60.0034027099609,0,97.1564025878906,108.871864318848,11.715461730957 +"2011-11-29 19:40:53.666",-82.7541253999359,134163.456094059,-83.0469152669626,134.59452081202,-123.335739991241,0.16314344445234,156.917332034435,202.323063423198,37.0190344488633,201.336207562417,60.0033988952637,-0.000127167440950871,97.173698425293,108.875503540039,11.7018051147461 +"2011-11-29 19:40:53.700",-82.7138721762044,134162.179497541,-83.0164294166036,134.509315318698,-124.650600914365,0.0994572327528872,156.939384748529,202.318321175061,37.0468375981418,201.135494319565,60.0033950805664,"3.81376594305038E-05",97.1790466308594,108.882629394531,11.7035827636719 +"2011-11-29 19:40:53.733",-82.6720332792296,134163.210736983,-83.0100865155108,134.526005929663,169.967141352185,0.083509101131918,156.906972700388,202.332055915177,37.0960226379919,201.270940039937,60.0034065246582,0.000203456729650497,97.1675796508789,108.880577087402,11.7129974365234 +"2011-11-29 19:40:53.766",-82.630069660747,134162.728709772,-82.9723153221671,134.550069594576,173.91181456416,0.109006074842423,156.965237098303,202.277164524074,37.1206062361292,201.398131661601,60.0034103393555,0.000178017653524876,97.1894454956055,108.866622924805,11.6771774291992 +"2011-11-29 19:40:53.800",-82.5890773707739,134160.336748324,-82.9189666594914,134.479498499412,176.18664178852,0.0773725209666426,157.053439620406,202.237451266151,37.130401926326,201.215756224528,60.0034141540527,0.000178017653524876,97.1727752685547,108.879776000977,11.7070007324219 +"2011-11-29 19:40:53.833",-82.5486338949783,134160.665639181,-82.8409535168378,134.42830874829,-89.9305804504876,0.0376035437321454,157.085029360595,202.109890238678,37.2347431757108,201.138028695795,60.0034217834473,0,97.1814804077148,108.877395629883,11.695915222168 +"2011-11-29 19:40:53.866",-82.5088489601197,134162.387339593,-82.80168231085,134.466537048623,-122.053276319546,0.123641690655025,157.100699408629,202.110767493354,37.3186586233263,201.193823755394,60.00341796875,-0.000254334881901741,97.1734313964844,108.873565673828,11.7001342773438 +"2011-11-29 19:40:53.900",-82.4693469114955,134161.580488897,-82.7699795982171,134.517238138399,-126.186328042543,0.158398051712119,157.118999336785,202.222137925909,37.3725950695943,201.215512809221,60.0033683776855,-0.00174203887581825,97.1925811767578,108.87361907959,11.681037902832 +"2011-11-29 19:40:53.933",-82.428420004198,134161.107322797,-82.7170524309818,134.521877959108,-113.139491726791,0.0826912476986537,157.158036821535,202.205050288593,37.4203410687384,201.290363540913,60.0033569335938,0,97.1785659790039,108.875877380371,11.6973114013672 +"2011-11-29 19:40:53.966",-82.3868317688087,134161.461237264,-82.6899663716442,134.475054414765,-144.069484816123,0.0950406545984137,157.228347159653,202.128488154219,37.4158271614503,201.251661782076,60.0033645629883,0.000508627854287624,97.1694793701172,108.867401123047,11.6979217529297 +"2011-11-29 19:40:54.000",-82.3462620774709,134161.313140775,-82.6713733367657,134.44627542709,-146.243722345961,0.18842291669362,157.295075583581,202.14439894689,37.4104214808627,201.110792510779,60.0033683776855,0.000190730206668377,97.1901473999023,108.886199951172,11.6960525512695 +"2011-11-29 19:40:54.033",-82.3050992130925,134159.370239572,-82.6119555209619,134.540075818411,-103.208032900682,0.163193776410825,157.324856805529,202.198901454423,37.4678657421199,201.268843771153,60.0034065246582,0.00136059243232012,97.1809768676758,108.880973815918,11.6999969482422 +"2011-11-29 19:40:54.066",-82.2642024219108,134158.925357278,-82.5712384347177,134.599718521599,-72.8555919939155,0.169467089158603,157.332083460152,202.186082197903,37.5176591763455,201.446566836796,60.00341796875,0.00011444091796875,97.1746826171875,108.867965698242,11.6932830810547 +"2011-11-29 19:40:54.100",-82.2234951769356,134162.178323067,-82.5569068264741,134.502964468904,-121.271959746419,0.140760504224966,157.36667373199,202.158148256169,37.5449244670829,201.241401530098,60.0034103393555,-0.000432338565587997,97.1832427978516,108.866165161133,11.6829223632813 +"2011-11-29 19:40:54.133",-82.1828472575013,134164.739313171,-82.5162900466694,134.488354405795,-140.377870238088,0.0892331980030969,157.413186469748,202.239079012038,37.5761255692084,201.178928332902,60.0033950805664,-0.000470490194857121,97.1976089477539,108.882354736328,11.6847457885742 +"2011-11-29 19:40:54.166",-82.1422575982018,134162.743761102,-82.4640514960824,134.552526514135,-20.8561183400001,0.0745580913644814,157.456910712076,202.235126420516,37.5966598296166,201.387267050854,60.0033950805664,"5.08641824126244E-05",97.1632919311523,108.881500244141,11.7182083129883 +"2011-11-29 19:40:54.200",-82.10119605952,134160.006195606,-82.4101702536755,134.527210345513,-65.0557715314438,0.172397285465219,157.522915864835,202.054728594078,37.6423420305055,201.362569492808,60.0033912658691,0,97.1692352294922,108.889595031738,11.7203598022461 +"2011-11-29 19:40:54.233",-82.0588568759163,134159.316123257,-82.3289718791513,134.493646406912,-91.3828179210128,0.186529390978459,157.608631393759,202.03929878316,37.7420239417651,201.257706366791,60.0034027099609,0.000635795295238495,97.1873626708984,108.867622375488,11.6802597045898 +"2011-11-29 19:40:54.266",-82.0186967514552,134160.113703112,-82.2735857888835,134.534905796525,-121.801563220571,0.106029376335329,157.646763853638,202.183955413177,37.8256047379329,201.339446701603,60.0034027099609,-0.000241608358919621,97.1740188598633,108.893463134766,11.7194442749023 +"2011-11-29 19:40:54.300",-81.9786403373185,134160.690666772,-82.2387013700282,134.542780180745,-174.63737059686,0.0807143590809251,157.668468642853,202.309999323255,37.8775364455937,201.322351160567,60.0033988952637,"3.81376594305038E-05",97.1675720214844,108.884742736816,11.717170715332 +"2011-11-29 19:40:54.333",-81.937668237051,134161.021565217,-82.2111460218512,134.581770310315,-92.675517476511,0.0626147248071171,157.699955449216,202.313418749179,37.8814043695194,201.370796110518,60.0034103393555,0.000267019495368004,97.1703643798828,108.876106262207,11.7057418823242 +"2011-11-29 19:40:54.366",-81.8974474172822,134163.159286333,-82.1825160911664,134.623961870887,-61.8307392016184,0.129353861597088,157.737504189378,202.27992333924,37.8849903381187,201.471024039783,60.0033874511719,-0.001182546839118,97.1830520629883,108.868118286133,11.6850662231445 +"2011-11-29 19:40:54.400",-81.8575507476045,134164.055358587,-82.1590878153998,134.600587062328,-97.6280656117009,0.142468976203209,157.746867879498,202.297191324057,37.9462033845771,201.36787838074,60.0033569335938,-0.000826511532068253,97.1847381591797,108.874145507813,11.6894073486328 +"2011-11-29 19:40:54.433",-81.8167278793313,134162.755459874,-82.1443290555337,134.533217091416,-109.815663407592,0.196393953676045,157.753519107263,202.188932285764,37.9842715925021,201.237647660907,60.0033645629883,0.000890074297785759,97.1650848388672,108.863441467285,11.698356628418 +"2011-11-29 19:40:54.466",-81.7749215985986,134161.824670372,-82.0933382953969,134.50722705962,-91.6298373530481,0.119884853498855,157.830081684811,202.140991608098,37.9892301492417,201.262845444243,60.0033912658691,0.000546807423233986,97.1678237915039,108.870109558105,11.7022857666016 +"2011-11-29 19:40:54.500",-81.7333609567359,134162.365722478,-82.0193335369505,134.60384312524,-87.7492682200276,0.104859125363314,157.891302955163,202.346196902701,38.0734460403825,201.361491933773,60.0034065246582,0.000394200906157494,97.1863021850586,108.857292175293,11.6709899902344 +"2011-11-29 19:40:54.533",-81.6927102766106,134161.734699679,-81.9663266755923,134.596227677955,-76.60038543476,0.096905526664922,157.917717066011,202.341082462616,38.147623497139,201.351893418135,60.00341796875,0.000267047435045242,97.1882171630859,108.880729675293,11.692512512207 +"2011-11-29 19:40:54.566",-81.6528412455959,134159.954989745,-81.9137080423696,134.481235715465,-41.6172542194128,0.0852625220629783,157.980602198981,202.154299968468,38.1767677246961,201.224975640293,60.00341796875,"-1.39698386192322E-08",97.1876220703125,108.869857788086,11.6822357177734 +"2011-11-29 19:40:54.600",-81.6122104062988,134160.445543076,-81.8563376053676,134.482772751547,-30.9535144462454,0.107659685927964,158.048433984345,202.231854574044,38.215602158541,201.14900233333,60.0034103393555,-0.0002288818359375,97.1697845458984,108.892105102539,11.7223205566406 +"2011-11-29 19:40:54.633",-81.5709584399836,134162.056353593,-81.8110991271576,134.533529335745,-57.102933362565,0.071043734579909,158.110433990121,202.244532689623,38.2592869335803,201.291826523932,60.0034027099609,-0.000152578577399254,97.1766662597656,108.888427734375,11.7117614746094 +"2011-11-29 19:40:54.666",-81.5297965248234,134162.378685862,-81.7886371121105,134.524017216652,-177.655951225227,0.0495581793559517,158.141374234908,202.220337830891,38.2956802325807,201.357127385175,60.0034027099609,"-3.81516292691231E-05",97.1497955322266,108.875503540039,11.7257080078125 +"2011-11-29 19:40:54.700",-81.4887462634927,134163.378970331,-81.7733886402084,134.493497164373,152.105606747786,0.00678853310496793,158.167037201144,202.217595688171,38.2880274884538,201.267115102073,60.0034103393555,0.000597629696130753,97.1674499511719,108.88005065918,11.7126007080078 +"2011-11-29 19:40:54.733",-81.4479985370255,134163.409571699,-81.7277907214448,134.474523411014,56.1039901550192,0.0241907269072288,158.199284130473,202.226388514041,38.3408770321743,201.215406108646,60.0034217834473,0,97.169059753418,108.865264892578,11.6962051391602 +"2011-11-29 19:40:54.766",-81.4071540680396,134161.851419853,-81.6913534078001,134.531211710673,-160.14314849732,0.0797000548305149,158.249179438597,202.308833962468,38.3906501378979,201.269121366499,60.0034217834473,"5.08641824126244E-05",97.1956329345703,108.88200378418,11.6863708496094 +"2011-11-29 19:40:54.800",-81.3658624819339,134161.104839722,-81.6677270744093,134.570754272776,-156.268973845135,0.0836872163596755,158.281309624896,202.431341497069,38.4065011231908,201.258968320292,60.0034217834473,0,97.1523590087891,108.88111114502,11.7287521362305 +"2011-11-29 19:40:54.833",-81.3254158541354,134160.932009041,-81.646005722413,134.571666328701,-143.718602568391,0.14438409669506,158.283692832818,202.36049959951,38.4609869745484,201.287336274322,60.0034103393555,-0.000381474383175373,97.1819458007813,108.881362915039,11.6994171142578 +"2011-11-29 19:40:54.866",-81.2861971730717,134163.072551225,-81.6002951592833,134.491291082827,-164.155088715121,0.136731069459963,158.316191128302,202.194694007753,38.5222036052505,201.262123932112,60.0033912658691,-0.00090278685092926,97.1773681640625,108.882339477539,11.7049713134766 +"2011-11-29 19:40:54.900",-81.2456191495287,134164.438571013,-81.5404563857115,134.48506542677,128.467601091094,0.093571611550889,158.357471557403,202.272320619484,38.5754486498357,201.26461412908,60.0033836364746,0.000521340407431126,97.1781234741211,108.869750976563,11.6916275024414 +"2011-11-29 19:40:54.933",-81.2032625739059,134163.876181138,-81.5233283280819,134.528616596003,152.931256676054,0.120832875859293,158.362398063494,202.281195940625,38.619431414985,201.375926154289,60.0033988952637,0.000317883677780628,97.182373046875,108.870910644531,11.6885375976563 +"2011-11-29 19:40:54.966",-81.1620808911022,134163.860530383,-81.4698006584051,134.513124509728,159.507775216804,0.031375224667591,158.43966752271,202.206609913176,38.6289249368863,201.34854115362,60.0033950805664,-0.000508613884449005,97.1779937744141,108.851821899414,11.673828125 +"2011-11-29 19:40:55.000",-81.1212964486817,134163.00978713,-81.3855906088685,134.522527055957,-18.7334016256865,0.108013470636729,158.525308739239,202.258159037575,38.6766382752364,201.260186708934,60.0034027099609,0.000750222243368626,97.1646118164063,108.863975524902,11.6993637084961 +"2011-11-29 19:40:55.033",-81.0805287136164,134161.161012044,-81.3305049015226,134.542694594647,-1.85369790963037,0.169551559028047,158.53431061679,202.311491348963,38.7579174974636,201.286412319118,60.00341796875,0,97.1788635253906,108.859153747559,11.680290222168 +"2011-11-29 19:40:55.066",-81.0400915882955,134160.080234009,-81.3385214058709,134.519729549287,112.45172976158,0.0425792282785996,158.539290283362,202.329171566093,38.7871954143676,201.272323702247,60.0034103393555,-0.000508627854287624,97.1821899414063,108.867500305176,11.6853103637695 +"2011-11-29 19:40:55.100",-80.9994045605447,134160.250297328,-81.3416575706419,134.522420477542,-175.32087177698,0.252115260423483,158.591093664121,202.322317449037,38.7975461796345,201.263159291765,60.0033950805664,-0.000101728364825249,97.1776657104492,108.880523681641,11.7028579711914 +"2011-11-29 19:40:55.133",-80.9586854827656,134162.525163792,-81.3013157909169,134.557640502832,-148.399755122487,0.224493472178263,158.629899710361,202.257493027671,38.8266377372639,201.328725991646,60.0033912658691,0,97.1797866821289,108.858840942383,11.6790542602539 +"2011-11-29 19:40:55.166",-80.9177416624935,134162.309934262,-81.236988065487,134.554179846349,-91.7024313430181,0.118492677360215,158.685890624942,202.293720967846,38.8466580639878,201.252712206394,60.0033950805664,"-2.79396772384644E-08",97.1782150268555,108.88240814209,11.7041931152344 +"2011-11-29 19:40:55.200",-80.8770515562652,134163.302135782,-81.1646618113851,134.507696113905,-68.5826656232173,0.136365596982266,158.755748491285,202.206327564036,38.906871250751,201.184037795617,60.0033912658691,"-8.90018418431282E-05",97.1631011962891,108.882514953613,11.7194137573242 +"2011-11-29 19:40:55.233",-80.8365951834351,134163.625042779,-81.119277828922,134.49383058321,-95.5231357525263,0.099324680234063,158.797533098308,202.101981724122,38.9712827019996,201.283753504151,60.0033912658691,"1.39698386192322E-08",97.1819534301758,108.870292663574,11.6883392333984 +"2011-11-29 19:40:55.266",-80.7957954706239,134163.116321351,-81.0906896710472,134.555518833566,-151.825447576923,0.0950322615936742,158.804153193634,202.217060619895,39.0404032543251,201.418996357323,60.0033950805664,0.000127167440950871,97.1688003540039,108.863456726074,11.6946563720703 +"2011-11-29 19:40:55.300",-80.7549177021461,134162.262013126,-81.0480730885203,134.601167762724,175.840711787982,0.0725112877633775,158.826428469059,202.341391914357,39.0980443401788,201.479685619816,60.0033988952637,"-1.27404928207397E-05",97.1690063476563,108.892822265625,11.7238159179688 +"2011-11-29 19:40:55.333",-80.7146157988791,134161.983631391,-81.0127831198643,134.598527515771,174.411028399902,0.0830926012343497,158.868242885462,202.377836087332,39.129618836507,201.439685731829,60.0033836364746,-0.000445037148892879,97.1770782470703,108.873443603516,11.6963653564453 +"2011-11-29 19:40:55.366",-80.6742371692631,134162.101927581,-80.9745847361056,134.571267600509,175.895613751029,0.0862294475153796,158.925646867272,202.412628925878,39.1496242501778,201.321522019169,60.0033798217773,"-1.2698583304882E-05",97.1759872436523,108.864402770996,11.6884155273438 +"2011-11-29 19:40:55.400",-80.633525872486,134162.795445108,-80.9346102600876,134.584021032338,-111.766950324761,0.132128662137598,158.967676496349,202.352735422278,39.1828975296261,201.286563186132,60.0033874511719,0.0002288818359375,97.1748352050781,108.870216369629,11.6953811645508 +"2011-11-29 19:40:55.433",-80.5928038482622,134162.705778717,-80.882122351072,134.597601262146,-101.217451074884,0.20445952649002,159.031399196579,202.249090474771,39.2249593781396,201.352551974721,60.0033874511719,"-1.27265229821205E-05",97.163330078125,108.875427246094,11.7120971679688 +"2011-11-29 19:40:55.466",-80.5516779093923,134161.795830416,-80.8225482717268,134.551789594569,-100.990049896728,0.0640105208630057,159.089719546437,202.247021746807,39.2718548464133,201.348754264703,60.0033874511719,"1.39698386192322E-08",97.1800994873047,108.884178161621,11.7040786743164 +"2011-11-29 19:40:55.500",-80.5106514209865,134161.739642602,-80.7642992536453,134.528512704299,36.9714643919429,0.104944361230572,159.140936381727,202.314677070391,39.3044986578003,201.320094071822,60.0033988952637,0.000279746018350124,97.1808090209961,108.891571044922,11.7107620239258 +"2011-11-29 19:40:55.533",-80.4702132125704,134160.697110818,-80.7199367134346,134.544286329052,22.7337589447642,0.132594542488231,159.192051229781,202.40649870292,39.3318654561131,201.257539386774,60.0033988952637,"-1.39698386192322E-08",97.1742706298828,108.873588562012,11.6993179321289 +"2011-11-29 19:40:55.566",-80.4289276871421,134160.309224279,-80.6939647461117,134.519058699874,9.36693270178548,0.0730251793028394,159.206010332854,202.393136376494,39.3858721219753,201.164618470017,60.0034103393555,0.000381474383175373,97.1810760498047,108.874046325684,11.6929702758789 +"2011-11-29 19:40:55.600",-80.3875135992271,134161.468169006,-80.6694903157762,134.535368663351,-58.5569381007568,0.11053902641888,159.231951288234,202.259161297476,39.4177172596146,201.245049137521,60.0034294128418,0.000534052960574627,97.1750640869141,108.87565612793,11.7005920410156 +"2011-11-29 19:40:55.633",-80.3466920511033,134161.13013857,-80.651048611123,134.511144851537,-107.742738360828,0.049805749283763,159.252859423175,202.221431357727,39.4519545061323,201.268249081605,60.00341796875,-0.000546751543879509,97.164924621582,108.875885009766,11.7109603881836 +"2011-11-29 19:40:55.666",-80.3064880777374,134159.503521908,-80.6030181482746,134.490922698649,94.749374949425,0.0744355736329667,159.295415080393,202.321335703497,39.497385132434,201.226249543906,60.0034027099609,-0.000406885519623756,97.1718215942383,108.878021240234,11.7061996459961 +"2011-11-29 19:40:55.700",-80.2654455364457,134160.372042426,-80.56530252633,134.58808023569,-162.093978640253,0.064082470315239,159.35952806848,202.450770788591,39.5283373610866,201.304486359658,60.00341796875,0.000762934796512127,97.1666107177734,108.882263183594,11.7156524658203 +"2011-11-29 19:40:55.733",-80.2238700040633,134162.904062473,-80.5260395937373,134.667205831152,-114.16793430512,0.124622560754429,159.391314369644,202.434163239293,39.5766412115506,201.464215865295,60.0034255981445,"1.2698583304882E-05",97.1837768554688,108.876747131348,11.6929702758789 +"2011-11-29 19:40:55.766",-80.1836952304963,134164.131085596,-80.4927170547962,134.583109038126,175.6803245365,0.0444817655113661,159.394414143526,202.300789093962,39.6329086471286,201.460031237524,60.0033950805664,-0.00091552734375,97.1818008422852,108.874015808105,11.6922149658203 +"2011-11-29 19:40:55.800",-80.1442245246043,134162.568773628,-80.4675188455047,134.383058877326,129.476072460526,0.233748206727302,159.419621196744,202.10079146594,39.6790329961448,201.251975204324,60.0033721923828,-0.000699358060956001,97.1717681884766,108.885368347168,11.7136001586914 +"2011-11-29 19:40:55.833",-80.1031517794097,134161.581450568,-80.4052970297185,134.35607004078,137.162420694788,0.235603814650954,159.513194421835,202.067623458884,39.7174774365024,201.187975326083,60.0033950805664,0.00109354499727488,97.1643829345703,108.871429443359,11.7070465087891 +"2011-11-29 19:40:55.866",-80.0608182018586,134162.052607956,-80.3364507156227,134.525152519498,-166.985050060969,0.157984530716927,159.622458877592,202.259596788579,39.7497201954518,201.30693192327,60.0034103393555,0.000279746018350124,97.1757278442383,108.897285461426,11.7215576171875 +"2011-11-29 19:40:55.900",-80.0202468163953,134163.806534146,-80.3000374169709,134.596984633618,-122.339716992801,0.0475962566478991,159.633578209009,202.432914766662,39.7757838481452,201.323024394248,60.0033836364746,-0.00115713570266962,97.1798858642578,108.877380371094,11.6974945068359 +"2011-11-29 19:40:55.933",-79.980040138255,134164.43005952,-80.2694986548492,134.532092309009,3.71398256199148,0.0812496061166432,159.614340020244,202.246381273718,39.8241901812335,201.34206213497,60.0033836364746,0.000534052960574627,97.1827850341797,108.86888885498,11.6861038208008 +"2011-11-29 19:40:55.966",-79.9387898549856,134161.951109055,-80.2249398153089,134.489086844811,-46.5344595121897,0.0823116897508591,159.672188300597,202.112718057523,39.8653565569508,201.286643139219,60.00341796875,0.00124615151435137,97.189811706543,108.872177124023,11.6823654174805 +"2011-11-29 19:40:56.000",-79.8973007891257,134160.799283293,-80.1760125690895,134.46232767483,-171.293546781222,0.0337615196787737,159.75307323834,202.169112754297,39.9048473360475,201.218860955261,60.0034294128418,-0.000394186936318874,97.1674652099609,108.86799621582,11.7005310058594 +"2011-11-29 19:40:56.033",-79.8572432718263,134161.927341646,-80.1141879757944,134.497524987344,129.23949457066,0.0327121474980284,159.799652906734,202.294379378634,39.9769959268605,201.227159040127,60.0033912658691,-0.00124613754451275,97.1804275512695,108.889595031738,11.7091674804688 +"2011-11-29 19:40:56.066",-79.8177813930858,134162.823128654,-80.0879446489218,134.53693240728,-88.385904231476,0.0673356577335397,159.777053582155,202.250338089031,40.0504648765473,201.294948379055,60.0033721923828,-0.000330596230924129,97.1789627075195,108.886238098145,11.707275390625 +"2011-11-29 19:40:56.100",-79.7768968002147,134162.129008036,-80.0905498616489,134.487039470827,-149.243886476617,0.194724663898678,159.800216854816,202.115759281891,40.0709414480196,201.277208637292,60.0033874511719,0.000902800820767879,97.1796798706055,108.880165100098,11.7004852294922 +"2011-11-29 19:40:56.133",-79.7351189397965,134161.214880936,-80.0492387179839,134.509190816735,-156.361292384001,0.155785143147698,159.916391329363,202.229920913224,40.0283854408119,201.261024179864,60.0033988952637,"1.2698583304882E-05",97.1733551025391,108.878486633301,11.7051315307617 +"2011-11-29 19:40:56.166",-79.6942908680025,134161.190294261,-79.940634599425,134.581112102151,-6.96279311882396,0.0850412595356927,160.032693481495,202.50661887729,40.0630566773383,201.211804978897,60.0033836364746,-0.000546779483556747,97.1725311279297,108.879127502441,11.7065963745117 +"2011-11-29 19:40:56.200",-79.6543746670691,134162.337052432,-79.8816980355192,134.544583141157,15.7272854795484,0.126794094800484,160.028399954403,202.448085450779,40.172826831661,201.198403841819,60.0033798217773,"7.63172283768654E-05",97.1777267456055,108.8642578125,11.6865310668945 +"2011-11-29 19:40:56.233",-79.6140057047507,134162.901614789,-79.8678353606585,134.481434784891,28.4791724395933,0.143744425779637,160.007224203047,202.162465765758,40.2187931532339,201.327801349658,60.0033912658691,0.000648493878543377,97.1751861572266,108.88801574707,11.7128295898438 +"2011-11-29 19:40:56.266",-79.5720122336138,134161.516206844,-79.8580150937364,134.512977264594,24.5169522750377,0.00800908712390051,160.044761257806,202.219038984137,40.2374339274001,201.322430995013,60.0034141540527,0.000279759988188744,97.1770553588867,108.870010375977,11.6929550170898 +"2011-11-29 19:40:56.300",-79.5300767342913,134161.861711329,-79.8684296040177,134.505536819173,-131.087730208968,0.130242608318003,160.044856135833,202.182002550688,40.247586773044,201.253667444132,60.00341796875,0.000127167440950871,97.1764984130859,108.87858581543,11.7020874023438 +"2011-11-29 19:40:56.333",-79.4896793672572,134161.388460444,-79.830139619404,134.45466125111,-87.7806732866969,0.0388286939952644,160.075887216792,202.083674634116,40.2657554404441,201.24236339116,60.0034065246582,-0.000457763671875,97.1835784912109,108.882568359375,11.6989898681641 +"2011-11-29 19:40:56.366",-79.4498313496662,134161.139552327,-79.7482502141688,134.509096705598,111.024041340675,0.0478222876458789,160.16921734474,202.233261595782,40.3371917324888,201.341450003467,60.0034027099609,0,97.1723556518555,108.881019592285,11.7086639404297 +"2011-11-29 19:40:56.400",-79.4090578403446,134161.821645681,-79.6955504744068,134.548872323778,165.743506906338,0.211589820767183,160.225213886976,202.28812872006,40.4387499011013,201.447203294445,60.0034141540527,0.000292444601655006,97.1768035888672,108.873573303223,11.6967697143555 +"2011-11-29 19:40:56.433",-79.3677603118704,134160.655991751,-79.6557726604787,134.552023324891,158.055893213947,0.204161343023194,160.245025839431,202.289033928901,40.4929099695961,201.477062026774,60.0034027099609,-0.000483188778162003,97.1691665649414,108.888488769531,11.7193222045898 +"2011-11-29 19:40:56.466",-79.3275320252958,134160.72558669,-79.6140863942676,134.537352723942,99.3432504928675,0.0965855862193528,160.267037053116,202.3200855221,40.504839725958,201.389373635312,60.0033721923828,-0.000953651033341885,97.1660003662109,108.871383666992,11.7053833007813 +"2011-11-29 19:40:56.500",-79.2868206259813,134161.616032785,-79.5807407180049,134.546002926978,144.342780173874,0.0339320320231173,160.31018740051,202.313116514199,40.5355523079356,201.350093819377,60.0033798217773,0.00080108642578125,97.1604461669922,108.865661621094,11.7052154541016 +"2011-11-29 19:40:56.533",-79.2455180964166,134160.753892713,-79.5648616384969,134.57215074729,-128.558465526639,0.153114486765062,160.355709983,202.340637168848,40.5478750124412,201.275929083443,60.0034103393555,0.000712070614099503,97.1774978637695,108.876052856445,11.6985549926758 +"2011-11-29 19:40:56.566",-79.2048818217484,134160.140968805,-79.5469611408188,134.561746752823,-119.048318643745,0.20355265615029,160.388754915291,202.293677752032,40.5545220996404,201.234957799406,60.0034065246582,-0.000559478066861629,97.1651077270508,108.886444091797,11.7213363647461 +"2011-11-29 19:40:56.600",-79.1645100664768,134162.181289026,-79.4858715873221,134.589259946507,-107.893230667328,0.110568356158452,160.440973643913,202.309867287659,40.6025977126641,201.361033596842,60.0033836364746,-0.000610342249274254,97.1684722900391,108.893882751465,11.7254104614258 +"2011-11-29 19:40:56.633",-79.1234481347625,134164.121974762,-79.3975127009717,134.589577619802,57.5666242266225,0.0496192799769643,160.507410299363,202.32450933683,40.6883369275322,201.48094918733,60.0033988952637,0.000648493878543377,97.1816864013672,108.87385559082,11.6921691894531 +"2011-11-29 19:40:56.666",-79.082494298287,134163.871380304,-79.3637118328431,134.524865990265,106.016328866715,0.144089692592889,160.493735155404,202.25158904908,40.7832404281852,201.467740726413,60.0034065246582,-0.00011444091796875,97.1914672851563,108.865440368652,11.6739730834961 +"2011-11-29 19:40:56.700",-79.0419197167067,134163.612812307,-79.3437344502888,134.496311094684,158.806282932839,0.129338015686395,160.505666880772,202.2422588315,40.8388258060714,201.316609215075,60.0033912658691,-0.000394172966480255,97.1784439086914,108.873649597168,11.6952056884766 +"2011-11-29 19:40:56.733",-79.0013488391952,134162.894505308,-79.3101327194494,134.53715624778,-130.164881654117,0.159355806876899,160.582754655963,202.310846957031,40.8327674060221,201.200987208452,60.0033912658691,"6.35627657175064E-05",97.1742401123047,108.863975524902,11.6897354125977 +"2011-11-29 19:40:56.766",-78.96050661215,134161.857811617,-79.2748217799731,134.603929207651,-111.800329151662,0.144551184600096,160.645745178161,202.405258474123,40.8271779083669,201.285156433854,60.0033988952637,0.000394172966480255,97.1819763183594,108.885513305664,11.7035369873047 +"2011-11-29 19:40:56.800",-78.9194489297175,134161.592839544,-79.2456835454219,134.584856345044,-146.611569169932,0.179546482961502,160.690581677516,202.33283594103,40.8655197387932,201.353143366764,60.0033988952637,"-2.54251062870026E-05",97.1820678710938,108.870193481445,11.6881256103516 +"2011-11-29 19:40:56.833",-78.8789446295548,134161.428605588,-79.2169479014315,134.534071343577,-147.074445037304,0.259666790259744,160.740568137674,202.253933145371,40.894224028114,201.250835800643,60.0033912658691,-0.000241594389081001,97.1628875732422,108.882987976074,11.720100402832 +"2011-11-29 19:40:56.866",-78.8388096558841,134163.071900669,-79.1663574380527,134.475639726996,-149.762227037808,0.173460444083656,160.781751158705,202.151639321619,40.9323624826092,201.218008621072,60.0033874511719,-0.000203456729650497,97.1893463134766,108.881637573242,11.6922912597656 +"2011-11-29 19:40:56.900",-78.7974833666171,134162.928743433,-79.1040410054363,134.478137523763,-167.428835892387,0.117393513044378,160.8184739734,202.157464006089,41.0071879484912,201.274069995193,60.0033950805664,0.000445051118731499,97.188102722168,108.882385253906,11.6942825317383 +"2011-11-29 19:40:56.933",-78.7557778081458,134158.889902948,-79.0592157383738,134.510696121221,-139.669235899201,0.14011144033135,160.827898240274,202.221455895352,41.0889785840391,201.242941938037,60.0034065246582,0.000203456729650497,97.1823501586914,108.883674621582,11.7013244628906 +"2011-11-29 19:40:56.966",-78.7158216698932,134158.262118301,-79.0013555224389,134.515436950155,-105.615082205769,0.0884666206789427,160.889377379444,202.2087649923,41.1197085125723,201.259275569313,60.0033836364746,-0.000737509690225124,97.1759262084961,108.866905212402,11.6909790039063 +"2011-11-29 19:40:57.000",-78.6755716004372,134159.797273608,-78.9457320100037,134.50868758934,31.3871163317015,0.11621359416664,160.965414782067,202.228639241146,41.1125030141253,201.338144385972,60.0033798217773,0.000305171124637127,97.1834716796875,108.889846801758,11.7063751220703 +"2011-11-29 19:40:57.033",-78.6336486436997,134160.513019755,-78.9016751048074,134.540054574243,29.9353701777568,0.218668892985206,160.98303423559,202.343366031751,41.1552938581162,201.347902240242,60.0034255981445,0.00144956633448601,97.1733245849609,108.852897644043,11.679573059082 +"2011-11-29 19:40:57.066",-78.5918245535664,134160.744022195,-78.8858780790471,134.536435664922,14.8046188410863,0.219827188759658,160.946155744998,202.346026633948,41.2205313181564,201.27864799823,60.0034370422363,-0.000356021337211132,97.1799621582031,108.862800598145,11.6828384399414 +"2011-11-29 19:40:57.100",-78.5515270369024,134162.793679874,-78.8645520569305,134.522364668044,7.02250977643461,0.0691240000064165,160.986551946321,202.313471712904,41.2655038001628,201.249838497509,60.0033988952637,-0.0011189840734005,97.1541442871094,108.879776000977,11.7256317138672 +"2011-11-29 19:40:57.133",-78.5117539655014,134163.975092715,-78.7866877423108,134.539722565706,-7.91460724583119,0.156946036222088,161.079849789281,202.304806481068,41.3052534559569,201.26373895745,60.0033912658691,"5.08781522512436E-05",97.1947250366211,108.875823974609,11.6810989379883 +"2011-11-29 19:40:57.166",-78.4711403961737,134162.258175035,-78.7210350722113,134.512204001386,-20.2867864460101,0.248270738058796,161.160548526969,202.232440466491,41.3377566782987,201.174738231302,60.0034027099609,0.000190744176506996,97.1862716674805,108.879318237305,11.6930465698242 +"2011-11-29 19:40:57.200",-78.4300774573126,134163.582780701,-78.7108417220257,134.505324671898,-88.2420290099427,0.0884184655750411,161.221673263919,202.199148949128,41.3611384971544,201.229903682261,60.0033874511719,-0.000432338565587997,97.1866455078125,108.86328125,11.6766357421875 +"2011-11-29 19:40:57.233",-78.3892976005353,134165.446651176,-78.6862186243504,134.532173774486,-150.74866458663,0.118533782012739,161.247013609502,202.240733755271,41.4129497304527,201.319678782128,60.0033798217773,"-5.08502125740051E-05",97.1645278930664,108.876052856445,11.7115249633789 +"2011-11-29 19:40:57.266",-78.348149070049,134163.536717798,-78.6433050816801,134.485777736591,-156.513484362947,0.117714246373433,161.26566261863,202.187558723614,41.48092026995,201.245751838434,60.0033988952637,0.000979104079306126,97.1720962524414,108.883605957031,11.7115097045898 +"2011-11-29 19:40:57.300",-78.3072793444146,134159.99661699,-78.6046120881902,134.397380893536,165.23188294646,0.131875405147579,161.290492218008,202.082164587207,41.5344708895559,201.169049691814,60.0034103393555,"3.81376594305038E-05",97.1728057861328,108.868698120117,11.6958923339844 +"2011-11-29 19:40:57.333",-78.2668023492181,134161.072410531,-78.5659763413414,134.436820959047,156.908922413985,0.0957559799054689,161.329523264168,202.030285469279,41.5613345505823,201.335245640686,60.0034065246582,-0.000203456729650497,97.1813430786133,108.871856689453,11.6905136108398 +"2011-11-29 19:40:57.366",-78.2265168788033,134163.478679342,-78.5238319614498,134.538572107421,-67.1003463268607,0.0986959224858729,161.374888791574,202.081907989213,41.5722096827553,201.437648340037,60.0033912658691,-0.000483216717839241,97.1625823974609,108.867317199707,11.7047348022461 +"2011-11-29 19:40:57.400",-78.1862346225967,134162.278896052,-78.5172031833546,134.557739548772,-117.484214061705,0.205118198795067,161.408575585409,202.199548164306,41.5940574343502,201.314761216025,60.0033798217773,-0.000457763671875,97.1735763549805,108.874755859375,11.7011795043945 +"2011-11-29 19:40:57.433",-78.1454411697028,134162.210575354,-78.4537849486494,134.584345902335,-142.314242289105,0.196131351115225,161.475888839765,202.315257715897,41.6669785360368,201.351976000519,60.0033760070801,0,97.1703720092773,108.899719238281,11.7293472290039 +"2011-11-29 19:40:57.466",-78.1045501168475,134164.366158025,-78.3578596771933,134.555957251594,48.3071566460835,0.0719131866862356,161.545173752702,202.300206566994,41.7231311640852,201.411044346367,60.0033760070801,0.000101742334663868,97.1642303466797,108.882789611816,11.7185592651367 +"2011-11-29 19:40:57.500",-78.0636027120929,134163.344715866,-78.3469987906101,134.461005119377,37.0508685642568,0.143507740487987,161.562416659501,202.219632186171,41.707122197887,201.225230642311,60.0033874511719,0.000470476225018501,97.1769104003906,108.857086181641,11.68017578125 +"2011-11-29 19:40:57.533",-78.022759472246,134162.898800904,-78.3197166792833,134.468756818611,-30.2187021607853,0.0509033291701713,161.593454321305,202.236313594432,41.7567943030124,201.136379374658,60.0034027099609,0.000470490194857121,97.171760559082,108.898231506348,11.7264709472656 +"2011-11-29 19:40:57.566",-77.9813281800769,134162.302877049,-78.2627263129586,134.596907260711,-85.6024208612478,0.129887547336254,161.625680688496,202.462283038344,41.8542928836478,201.200428955647,60.0034103393555,0.000165305100381374,97.1724395751953,108.873596191406,11.7011566162109 +"2011-11-29 19:40:57.600",-77.9402501986553,134161.184762167,-78.2207317985318,134.641057642003,-97.4975527420224,0.157763722254849,161.6577448024,202.559368060893,41.9164321922099,201.215903673151,60.0034141540527,"7.62753188610077E-05",97.1853790283203,108.873344421387,11.6879653930664 +"2011-11-29 19:40:57.633",-77.8999751245171,134162.241080851,-78.1782996082965,134.624492121376,-111.659787458999,0.128931592581142,161.716415333266,202.48966970637,41.9478669830232,201.277096451283,60.0034141540527,-0.000127153471112251,97.1672592163086,108.864532470703,11.6972732543945 +"2011-11-29 19:40:57.666",-77.8596463731306,134163.598829378,-78.1530065370012,134.526328048101,-143.307336357651,0.00771613105998169,161.732757910193,202.343639215457,41.9638545344022,201.232889526827,60.0033988952637,-0.000356035307049751,97.1824417114258,108.892242431641,11.7098007202148 +"2011-11-29 19:40:57.700",-77.8186971865986,134161.356834908,-78.1245851129834,134.505385706885,131.314223832841,0.0451255102792305,161.776279683297,202.34847937802,41.9814310509836,201.207572611587,60.0034027099609,0.000190730206668377,97.1758422851563,108.875831604004,11.6999893188477 +"2011-11-29 19:40:57.733",-77.777441435927,134159.24225691,-78.0804659463446,134.576426798139,125.350638351783,0.0460061020633702,161.818522129121,202.337427650615,42.026203003504,201.434722400913,60.0034027099609,"1.39698386192322E-08",97.1664505004883,108.887313842773,11.7208633422852 +"2011-11-29 19:40:57.766",-77.7361267650382,134159.721000202,-78.0492960755376,134.569349697369,-70.2658350150752,0.0644608553283521,161.845832002439,202.192892391308,42.0534825159743,201.451921835695,60.0034065246582,0.000203442759811878,97.1818695068359,108.863395690918,11.681526184082 +"2011-11-29 19:40:57.800",-77.6956770259447,134160.835423516,-77.9943478326543,134.515706325871,-115.692131415317,0.0763969936287003,161.924715559479,202.161716692019,42.1002183320788,201.325438942,60.0034065246582,0,97.1853485107422,108.863418579102,11.6780700683594 +"2011-11-29 19:40:57.833",-77.6551712321856,134161.701904669,-77.9233891287354,134.510082727654,-158.148735726342,0.0671476147370777,161.9883997492,202.273755849108,42.1841135651001,201.245659254329,60.0034103393555,0.0002288818359375,97.18017578125,108.867919921875,11.687744140625 +"2011-11-29 19:40:57.866",-77.6143474574941,134162.271314186,-77.8897140493333,134.608954702336,-90.0014113817359,0.089784033623756,161.987543086094,202.398415415091,42.2390342830035,201.341638780416,60.0034103393555,-0.000330624170601368,97.1754760742188,108.877044677734,11.7015686035156 +"2011-11-29 19:40:57.900",-77.5740094480335,134163.002385693,-77.8889838955497,134.659215603767,-116.440307806593,0.184758417118277,162.004806372997,202.380233791028,42.2504628845384,201.453851069397,60.0033874511719,-0.000762920826673508,97.1542892456055,108.877754211426,11.7234649658203 +"2011-11-29 19:40:57.933",-77.5335243989287,134161.531976937,-77.8538828234888,134.57855141009,-141.894042959088,0.150656743908432,162.039620627063,202.315969310839,42.29166903939,201.354688421885,60.0033760070801,"-6.35767355561256E-05",97.1703796386719,108.857116699219,11.6867370605469 +"2011-11-29 19:40:57.966",-77.4923286653702,134159.905068189,-77.7762798875702,134.587050171078,-47.132447555957,0.0617711889921135,162.08836657998,202.377501732497,42.3508188986882,201.331526362193,60.0033874511719,0.000546779483556747,97.1721725463867,108.897857666016,11.7256851196289 +"2011-11-29 19:40:58.000",-77.4509112347503,134159.198896598,-77.7410751702366,134.651462948571,-37.4346426517329,0.144206772765873,162.137938505291,202.430976051341,42.3539894373627,201.414136517042,60.0034065246582,0.000495901331305504,97.1626815795898,108.884284973145,11.7216033935547 +"2011-11-29 19:40:58.033",-77.4095514831122,134160.157461845,-77.7215724458432,134.598123168637,-176.544305856694,0.0835089766927387,162.186275217287,202.434719722128,42.3945444610006,201.373144215486,60.00341796875,0.000483188778162003,97.1825408935547,108.873954772949,11.6914138793945 +"2011-11-29 19:40:58.066",-77.3688201719761,134160.288037263,-77.6549297397074,134.514802484402,135.063129669202,0.167137396295174,162.226350196612,202.388977679963,42.4901491024049,201.297115557987,60.0034255981445,0,97.1867980957031,108.862236022949,11.6754379272461 +"2011-11-29 19:40:58.100",-77.329073709997,134161.633544433,-77.5889594775802,134.474927374784,64.6040827418839,0.198043835007765,162.261223599755,202.295161409378,42.527050188544,201.287198069914,60.0034255981445,-0.000152564607560635,97.168327331543,108.866012573242,11.6976852416992 +"2011-11-29 19:40:58.133",-77.2888005975436,134162.032790637,-77.5643848403088,134.454914247992,39.3120368407962,0.17413130028864,162.294469068028,202.254274336997,42.5332741601333,201.190095291372,60.0033988952637,-0.000635795295238495,97.1804122924805,108.882621765137,11.7022094726563 +"2011-11-29 19:40:58.166",-77.2473969493642,134161.912074355,-77.533577370905,134.532667946039,-42.6783458373035,0.0640194383232498,162.336944998633,202.362126605601,42.5862412148879,201.184275126412,60.0033950805664,0,97.1969757080078,108.88956451416,11.6925888061523 +"2011-11-29 19:40:58.200",-77.2059887002601,134162.352530665,-77.499399300856,134.571254430074,-44.8480385903899,0.0239047373687354,162.375752855855,202.335939953747,42.6223853105416,201.358615835145,60.0033950805664,"1.27265229821205E-05",97.1824645996094,108.876083374023,11.6936187744141 +"2011-11-29 19:40:58.233",-77.1652844223869,134162.736041472,-77.45785678274,134.564616196142,-5.4669220739696,0.0976995325048141,162.413427246288,202.252956708632,42.644965426547,201.411522336083,60.0033950805664,0,97.19091796875,108.861289978027,11.6703720092773 diff --git a/PMUSimulator/Doxyfile b/PMUSimulator/Doxyfile new file mode 100755 index 0000000..48c46bb --- /dev/null +++ b/PMUSimulator/Doxyfile @@ -0,0 +1,1285 @@ + # ----------------------------------------------------------------------------- + # Doxyfile for documentation of PMU Simulator + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = PMU Simulator + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /usr/local/bin/dot + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/PMUSimulator/Makefile b/PMUSimulator/Makefile new file mode 100755 index 0000000..08bc08b --- /dev/null +++ b/PMUSimulator/Makefile @@ -0,0 +1,98 @@ + # ----------------------------------------------------------------------------- + # Makefile for building PMU Simulator + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + + +SHELL = /bin/sh +prefix = /usr/local +includedir = /usr/src/include + +INSTALL = /usr/bin/install -c +INSTALL_PREFIX = /usr/local/ +CREATE_DIR = /usr/local/share/ +DESKTOP_DIR = /usr/share/applications + +FILE1 = pmu.xml +FILE2 = PmuLogo.png +FILE3 = PSLab.PNG +FILE4 = PmuLogo1.png +FILE5 = logo.png +FILE6 = PMU.desktop +#FILE7 = DataDir + +CC = gcc +LIBS = -lpthread -lm -lrt +LDLIBS=`pkg-config --cflags --libs gtk+-2.0` +CFLAGS= -fcommon `pkg-config --cflags --cflags gtk+-2.0` + +SOURCES = \ + pmu.c \ + PmuGui.c PmuGui.h \ + function.c function.h \ + ServerFunction.c ServerFunction.h \ + CfgFunction.c CfgFunction.h \ + CfgGuiFunctions.c CfgGuiFunctions.h \ + +OBJECTS = pmu.c PmuGui.o function.o ServerFunction.o CfgFunction.o CfgGuiFunctions.o +CLEAN_OBJECTS = PmuGui.o function.o ServerFunction.o CfgFunction.o CfgGuiFunctions.o pmu.xml + +PROGRAM = PMU + +COMPILE = $(CC) + +$(PROGRAM): $(OBJECTS) + $(CC) $(OBJECTS) $(LDLIBS) $(LIBS) -o $@ + +%.o: %.c + $(COMPILE) $(CFLAGS) -c $< + +install: $(PROGRAM) + gtk-builder-convert pmu.glade pmu.xml + mkdir -p $(CREATE_DIR)PMU/$ + cp -f $(FILE1) $(CREATE_DIR)PMU/$(FILE1) + cp -f images/$(FILE2) $(CREATE_DIR)PMU/$(FILE2) + cp -f images/$(FILE3) $(CREATE_DIR)PMU/$(FILE3) + cp -f images/$(FILE4) $(CREATE_DIR)PMU/$(FILE4) + cp -f images/$(FILE5) $(CREATE_DIR)PMU/$(FILE5) + cp -f images/$(FILE6) $(DESKTOP_DIR)/$(FILE6) + cp $(PROGRAM) $(INSTALL_PREFIX)bin/$(PROGRAM) + mkdir -p $(HOME)/iPDC/DataDir + mkdir -p $(HOME)/iPDC/DataDir/50Hz_measurement_files + mkdir -p $(HOME)/iPDC/DataDir/60Hz_measurement_files + cp -f -r ./DataDir/50Hz_measurement_files/* $(HOME)/iPDC/DataDir/50Hz_measurement_files #-i -n for Debian based Linux + cp -f -r ./DataDir/60Hz_measurement_files/* $(HOME)/iPDC/DataDir/60Hz_measurement_files +# chmod 777 $(HOME)/iPDC/DataDir +# rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +uninstall: + rm -f $(INSTALL_PREFIX)bin/$(PROGRAM) + rm -rf $(CREATE_DIR)PMU$ + rm -rf $(DESKTOP_DIR)/$(FILE6) + rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +clean: + rm -f $(CLEAN_OBJECTS) $(PROGRAM) diff --git a/PMUSimulator/PmuGui.c b/PMUSimulator/PmuGui.c new file mode 100755 index 0000000..59ae456 --- /dev/null +++ b/PMUSimulator/PmuGui.c @@ -0,0 +1,1063 @@ +/* ----------------------------------------------------------------------------- + * PmuGui.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version." Not a valid port number! Try again "; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "PmuGui.h" +#include "ServerFunction.h" +#include "CfgFunction.h" +#include "CfgGuiFunctions.h" +#include "ShearedMemoryStructure.h" +#include "function.h" + +#define MAX_STRING_SIZE 5000 + +/* -------------------------------------------------------------------------------------- */ +/* Functions in PmuGui.c */ +/* -------------------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------------- */ +/* */ +/* 1. int isNumber(char *s); */ +/* 2. int checkip(char ip[]); */ +/* 3. void destroy (GtkWidget *widget, gpointer udata); */ +/* 4. GdkPixbuf *create_pixbuf(const gchar * filename); */ +/* 5. void about_pmu (GtkButton *widget, gpointer udata); */ +/* 6. void Pmu_Help (GtkButton *but, gpointer udata); */ +/* 7. void validation_result (char *msg); */ +/* 8. void pmu_colors(); */ +/* 9. int validation_pmu_server (GtkButton *button, gpointer udata); */ +/* 10. void pmu_server (); */ +/* 11. void manage_data_sources(); */ +/* 12. void Set_data_source(GtkWidget *widget, gpointer udata); */ +/* 13. void file_ok_sel(GtkWidget *w, GtkFileSelection *fs); */ +/* 14. void pmu_setup_file_selection(GtkWidget *widget, gpointer udata); */ +/* 15. void view_setup_file (GtkWidget *w, GtkFileSelection *fs); */ +/* 16. void apply_pmu_setup (GtkWidget *w, gpointer udata); */ +/* 17. void* display_time(); */ +/* */ +/* ---------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION isNumber(char *s): */ +/* It checks the passing character is a number or not, return 0 if its a */ +/* otherwise returns 1. */ +/* ---------------------------------------------------------------------------- */ + +int isNumber(char *s) +{ + int dot=0, num=0, end=0; + + while(isspace(*s))s++; + if(! *s)return 0; + while(*s) + if(isspace(*s)) + end=1, s++; + else if(end) + return 0; + else if(isdigit(*s)) + num=1, s++; + else if(*s=='.') + if(dot) + return 0; + else + dot=1,s++; + else + return 0; + return num; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkip(char ip[]) */ +/* It checks the IP address of passing argument with IP standards. */ +/* Returns 0 in case of correct otherwise 1. */ +/* ---------------------------------------------------------------------------- */ + +int checkip(char ip[]) +{ + struct sockaddr_in sa; + int result = inet_pton(AF_INET, ip, &(sa.sin_addr)); + + return result; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION destroy (GtkWidget *widget, gpointer udata) */ +/* It Destroy(& close) the PMU Simulator & his both processes. */ +/* ---------------------------------------------------------------------------- */ + +void destroy (GtkWidget *widget, gpointer udata) +{ + kill(pidLocal, SIGKILL); + + gtk_main_quit(); + + g_print ("PMU Simulator Closing Now.\n"); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION GdkPixbuf *create_pixbuf(const gchar * filename) */ +/* function creates a new pixbuf by loading an image from a file. */ +/* The file format is detected automatically. If NULL, error will be set. */ +/* ---------------------------------------------------------------------------- */ + +GdkPixbuf *create_pixbuf(const gchar * filename) +{ + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gdk_pixbuf_new_from_file(filename, &error); + + if(!pixbuf) + { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + + return pixbuf; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION about_pmu (GtkButton *widget, gpointer udata) */ +/* It display the information about PMU Simulator Software like authors, */ +/* licensing, features, usage, etc. */ +/* ---------------------------------------------------------------------------- */ + +void about_pmu (GtkButton *widget, gpointer udata) +{ + /* Create a about dialog for displaying about the iPDC. */ + about_dialog = gtk_about_dialog_new (); + + const gchar *auth[] = {"\nDr. A.M. Kulkarni ", "\nNitesh Pandit ", "\nKedar V. Khandeparkar ", "\nGopal Gajjar ", NULL}; + + /* Define the diffrent properties of about_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)about_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)about_dialog, "Authors :\nNitesh Pandit\nKedar Khandeparkar");//\n\nWide Aera Measurement System\nDepartment of Electrical Engineering\nIndian Institute of Technology, Bombay\nMumbai, INDIA"); + + gtk_about_dialog_set_license ((GtkAboutDialog *)about_dialog, "iPDC - A Phasor Data Concentrator & PMU Simulator\n\nGeneral Public License (GPL)\n\nAuthors:\n\t\tNitesh Pandit \n\t\tKedar V. Khandeparkar \n\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"); + + gtk_about_dialog_set_logo ((GtkAboutDialog *)about_dialog, create_pixbuf("/usr/local/share/PMU/PmuLogo1.png")); + gtk_about_dialog_set_website ((GtkAboutDialog *)about_dialog, "\nhttp://ipdc.codeplex.com/\n"); + gtk_about_dialog_set_copyright ((GtkAboutDialog *)about_dialog, "Copyright (C) 2011-2012 GPL3"); + gtk_about_dialog_set_authors ((GtkAboutDialog *)about_dialog, auth); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (about_dialog, "response", G_CALLBACK (gtk_widget_destroy), about_dialog); + + /* Finally show the about_dialog. */ + gtk_widget_show_all (about_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION Pmu_Help (GtkButton *but, gpointer udata) */ +/* It shows the general guidelines to user to fill the entries for connecting, */ +/* or disconnecting devices in PMU Simulator Software. */ +/* ---------------------------------------------------------------------------- */ + +void Pmu_Help (GtkButton *but, gpointer udata) +{ + /* Create the widgets */ + help_dialog = gtk_about_dialog_new (); + + gtk_about_dialog_set_program_name ((GtkAboutDialog *)help_dialog, "PMU HELP\n"); + gtk_about_dialog_set_comments ((GtkAboutDialog *)help_dialog, "1) ID Code should be integer i.e. 50, 60, etc.\t\t\t\n\n2) Port should be greater than 1500 and less than 65535.\t\n\n3) Channel Name could be upto 16 characters.\t\t\t\n\n4) Enter the integer value for phasors, analogs and digitals.\n\n5) Fixed/Floating point and Rectangular/Polar are the\t\trepresentation of measurements."); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (help_dialog, "response", G_CALLBACK (gtk_widget_destroy), help_dialog); + gtk_widget_show_all (help_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_result (char *msg) */ +/* It displays the status message of performed operation. */ +/* ---------------------------------------------------------------------------- */ + +void validation_result (char *msg) +{ + GtkWidget *val_dialog; + + /* Create the widgets a new dialog box */ + val_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of val_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)val_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)val_dialog, msg); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (val_dialog, "response", G_CALLBACK (gtk_widget_destroy), val_dialog); + + /* Finally show the val_dialog. */ + gtk_widget_show_all (val_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION pmu_colors() */ +/* It fills the colors in text on lables and set the images on given buttons. */ +/* It called in main only one time to initialized all the parameters. */ +/* ---------------------------------------------------------------------------- */ + +void pmu_colors() +{ + GtkTextBuffer *buffer, *buffer1; + GtkTextMark *cursor, *cursor1; + GtkTextIter iter, iter1; + + /* Set the font and color for the heading on 'welcome_pmu' lable, and others */ + markup = g_markup_printf_escaped ("Admin Operations"); + gtk_label_set_markup (GTK_LABEL (pmu_data->admin_label), markup); + g_free (markup); + + markup = g_markup_printf_escaped ("@All Rights Reserved"); + gtk_label_set_markup (GTK_LABEL (pmu_data->rights_lable), markup); + g_free (markup); + + /* Set the general image on a textview */ + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (pmu_data->text_view)); + cursor = gtk_text_buffer_get_insert (buffer); + gtk_text_buffer_get_iter_at_mark (buffer, &iter, cursor); + gtk_text_buffer_insert_pixbuf (buffer, &iter, create_pixbuf("/usr/local/share/PMU/PSLab.PNG")); + gtk_widget_show (pmu_data->text_view); + + /* Set the image (PMU-logo) on a specific textview1 */ + buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (pmu_data->text_view1)); + cursor1 = gtk_text_buffer_get_insert (buffer1); + gtk_text_buffer_get_iter_at_mark (buffer1, &iter1, cursor1); + gtk_text_buffer_insert_pixbuf (buffer1, &iter1, create_pixbuf("/usr/local/share/PMU/PmuLogo.png")); + gtk_widget_show (pmu_data->text_view1); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_pmu_server (GtkButton *button, gpointer udata) */ +/* It Validates the user enterd details for PMU Simulator. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_pmu_server (GtkButton *button, gpointer udata) +{ + /* local variables */ + int tmp_p; + char *msg; + const char *text1, *text2; + + /* Get the text entries filled by user */ + text1 = gtk_entry_get_text(GTK_ENTRY(udp_port)); + text2 = gtk_entry_get_text(GTK_ENTRY(tcp_port)); + + if(!isNumber((char *)text1) || !(atoi(text1) > 1500 && atoi(text1) < 65535) || (atoi(text2) == 9000)) + { + msg = " Not a valid UDP port number, must not be 9000! Try again "; + validation_result (msg); /* Show the failure message to user */ + return 0; + } + if(!isNumber((char *)text2) || !(atoi(text2) > 1500 && atoi(text2) < 65535) || (atoi(text2) == 9000)) + { + msg = " Not a valid TCP port number, must not be 9000! Try again "; + validation_result (msg); /* Show the failure message to user */ + return 0; + } + if(atoi(text1) == atoi(text2)) /* Check for valid port number */ + { + msg = " UDP and TCP ports cannot be identical! Try again "; + validation_result (msg); /* Show the failure message to user */ + return 0; + } + else + { + PMU_uport = atoi(text1); + PMU_tport = atoi(text2); + + p1 = *ShmPTR; + p1.cfg_bit_change_info = 0; + ShmPTR->cfg_bit_change_info = 0; + ShmPTR->UdpPort = atoi(text1); + ShmPTR->TcpPort = atoi(text2); + + p1.pid = ShmPTR->pid; + kill(p1.pid, SIGUSR2); + memset(pmuFilePath, '\0', 200); + printf("UDP and TCP ports value has been sent to PMU Server through signal.\n"); + + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_setup_cfg), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->start_server), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), FALSE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_data_source), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_header_frm), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_cfg_modify), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_stat_modify), FALSE); + + /* Close/destroy the pmu_server_window */ + gtk_widget_destroy(pmu_server_window); + + cfg_create_function (NULL, "PMU Configuration Setup"); + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION pmu_server () */ +/* It displays the windows for entring PMU Server details to user. */ +/* ---------------------------------------------------------------------------- */ + +void pmu_server () +{ + /* local variables */ + GtkWidget *table, *label, *cancel_button; + GtkWidget *valdbutton, *help_button; + + /* Create a new dialog window for PMU Server Setup */ + pmu_server_window = gtk_dialog_new (); + g_signal_connect (pmu_server_window, "destroy", G_CALLBACK (gtk_widget_destroy), pmu_server_window); + gtk_window_set_title (GTK_WINDOW (pmu_server_window), "PMU Server Setup"); + gtk_container_set_border_width (GTK_CONTAINER (pmu_server_window), 10); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 50 on x and 5 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(pmu_server_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Run"); + help_button = gtk_button_new_with_label ("Help"); + cancel_button = gtk_button_new_with_label ("Cancel"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Enter PMU Server Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + udp_port = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)udp_port, 5); + gtk_table_attach_defaults (GTK_TABLE (table), udp_port, 1, 2, 2, 3); + gtk_widget_show (udp_port); + + /* Create combo boxe for user with some fixed values */ + tcp_port = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)tcp_port, 5); + gtk_table_attach_defaults (GTK_TABLE (table), tcp_port, 1, 2, 3, 4); + gtk_widget_show (tcp_port); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Use the unreserved ports for PMU Server."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Signal handling for buttons on PMU Server Setup Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_pmu_server), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), pmu_server_window); + g_signal_connect_swapped (pmu_server_window, "response", G_CALLBACK (gtk_widget_destroy), pmu_server_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + + /* Finally show the pmu_server_window */ + gtk_widget_show (pmu_server_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION manage_data_sources() */ +/* It displays the option window to user for selection of data/measurement */ +/* source. Either auto generated or from measurement file. */ +/* ---------------------------------------------------------------------------- */ + +void manage_data_sources() +{ + /* local variables */ + GtkWidget *table; + GtkWidget *close_butn, *label; + GtkWidget *Addbutton, *Removebutton; + + /* Create a new dialog window for the Option Window */ + data_managing_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (data_managing_window), "Select Data Source"); + gtk_container_set_border_width (GTK_CONTAINER (data_managing_window), 10); + + /* Create a table of 4 by 2 squares */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(data_managing_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Select Measurement Source"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + /* Add few radio buttons on the dialog window */ + Addbutton = gtk_radio_button_new_with_label (NULL, "Auto Genetared"); + gtk_table_attach_defaults (GTK_TABLE (table), Addbutton, 0, 1, 2, 3); + if (ShmPTR->dataFileVar == 0 ) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Addbutton), TRUE); + } + gtk_widget_show (Addbutton); + + Removebutton = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (Addbutton), "Measurement File"); + gtk_table_attach_defaults (GTK_TABLE (table), Removebutton, 0, 1, 3, 4); + if (ShmPTR->dataFileVar == 1 ) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Removebutton), TRUE); + } + gtk_widget_show (Removebutton); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Auto Genetared Data may be raw measurements.\nMay use CSV file of Phasor measurements.\nFor CSV file format see our Sample measurements files."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6); + gtk_widget_show (label); + g_free (markup); + + /* Add 'Close' buttons on the dialog window */ + close_butn = gtk_button_new_with_label ("Close"); + + /* Signal handling for buttons on Option Window */ + g_signal_connect (Addbutton, "toggled", G_CALLBACK (Set_data_source), (gpointer) "1"); + g_signal_connect (Removebutton, "toggled", G_CALLBACK (Set_data_source), (gpointer) "2"); + g_signal_connect_swapped (close_butn, "clicked", G_CALLBACK (gtk_widget_destroy), data_managing_window); + g_signal_connect_swapped (data_managing_window, "response", G_CALLBACK (gtk_widget_destroy), data_managing_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_butn, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (data_managing_window)->action_area), close_butn, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_butn); + gtk_widget_show (close_butn); + + /* Finally show the data_managing_window */ + gtk_widget_show (data_managing_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION Set_data_source(GtkWidget *widget, gpointer udata) */ +/* It will show user the dialog box that have browser of his system to */ +/* choose the file for measurements reading, otherwise just raw data. */ +/* ---------------------------------------------------------------------------- */ + +void Set_data_source(GtkRadioButton *radiobutton, gpointer udata) +{ + char *file_path; + file_path = malloc(200*sizeof(char)); + strcpy(file_path, getenv("HOME")); + strcat(file_path,"/iPDC/DataDir/"); + + if(strcmp("Auto Genetared", gtk_button_get_label(GTK_BUTTON(radiobutton)))) + { + strcpy(ShmPTR->filePath, "nil"); + ShmPTR->dataFileVar = 0; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR1); + printf("Raw Data selection is new choice of user, sent to the PMU Server by signal.\n"); + + gtk_widget_destroy(data_managing_window); + } + else + { + /* Create a new file selection widget */ + gtk_widget_destroy(data_managing_window); + + data_managing_window = gtk_file_selection_new ("PMU Simulator measurement file selection"); + + /* Connect the ok_button to file_ok_sel function */ + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (data_managing_window)->ok_button), "clicked", (GtkSignalFunc) file_ok_sel, data_managing_window ); + + /* Connect the cancel_button to destroy the widget */ + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (data_managing_window)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (data_managing_window)); + + /* Lets set the filename, as if this were a save dialog, and we are giving a default filename */ + gtk_file_selection_set_filename (GTK_FILE_SELECTION(data_managing_window), file_path); + + gtk_widget_show(data_managing_window); + } +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION file_ok_sel(GtkWidget *w, GtkFileSelection *fs) */ +/* This function gets the user file and check whether it has proper number */ +/* of columns or not, if yes then sent signal to server. */ +/* ---------------------------------------------------------------------------- */ + +void file_ok_sel(GtkWidget *w, GtkFileSelection *fs) +{ + /* Local Variables */ + int total_column, count; + char *l1, *d3, *d4; + + size_t l2 = 0; + FILE *temp_fp; + ssize_t result; + + char *s = (char *)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + + /* 3 for UNIX time stamp, FREQ & DFREQ */ + total_column = cfg_info->cfg_phnmr_val*2 + cfg_info->cfg_annmr_val + 3; + + /* Open the user given measurements in read mode */ + temp_fp = fopen(s, "r"); + + if (temp_fp == NULL) + { + validation_result(" Measurement File doesn't exist! "); + } + else + { + if ((result = getdelim(&l1, &l2, ('\n'), temp_fp)) >0) + { + d3 = strtok (l1, ","); + + for(count=1; ; count++) //count<=total_column + { + if((d4 = strtok (NULL,",")) == NULL) + break; + } + + if(count == total_column) + { + strcpy(ShmPTR->filePath, s); + ShmPTR->dataFileVar = 1; + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR1); + + fclose(temp_fp); + gtk_widget_destroy(data_managing_window); + + printf("\nInform PMU Server that Data Source has been changed to measurement file by signal.\n"); + validation_result(" Now measurements are taken from measurement file. "); + } + else + { + fclose(temp_fp); + validation_result("File data does not match with configuration!\nPlease Select a proper file as per your configuration."); + } + } + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION pmu_setup_file_selection(GtkWidget *widget, gpointer udata) */ +/* It will display a file selector window to the user. User have the */ +/* responsibility to choose the correct previously saved file for PMU Setup. */ +/* ---------------------------------------------------------------------------- */ + +void pmu_setup_file_selection(GtkWidget *widget, gpointer udata) +{ + char *file_path; + file_path = malloc( 200*sizeof(char)); + memset(file_path,'\0',200); + strcpy(file_path,getenv("HOME")); + strcat(file_path,"/iPDC/PMU/"); + + /* Create a new file selection widget */ + pmu_setup_window = gtk_file_selection_new ("PMU Setup File Selector"); + + /* Connect the ok_button to view_setup_file function */ + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (pmu_setup_window)->ok_button), "clicked", (GtkSignalFunc) view_setup_file, pmu_setup_window); + + /* Connect the cancel_button to destroy the widget */ + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (pmu_setup_window)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT (pmu_setup_window)); + + /* Lets set the filename, as if this were a save dialog, and we are giving a default filename */ + gtk_file_selection_set_filename (GTK_FILE_SELECTION(pmu_setup_window), file_path); + + gtk_widget_show(pmu_setup_window); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION view_setup_file(GtkWidget *w, GtkFileSelection *fs) */ +/* This function displays the different attributes of selected PMU Setup File. */ +/* It will show the PMU Server & CFG details before apply. */ +/* ---------------------------------------------------------------------------- */ + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs) +{ + /* local variables */ + GtkWidget *table, *label; + GtkWidget *apply_button, *cancel_button; + + int tempi, i; + char stn[17], *s,*rline = NULL; + char *d1, buff[15], *markup; + unsigned int framesize; + unsigned char *line, tempC[2]; + size_t len = 0; + ssize_t read; + FILE *fp1; + + s = (char *)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + strcpy(fptr, s); + + gtk_widget_destroy(pmu_setup_window); + + fp1 = fopen(s, "rb"); + + if (fp1 == NULL) + { + validation_result(" PMU Setup file doesn't exist! Try again "); + } + else + { + /* If its available, then create a new dialog window for displaying the iPDC details. */ + setup_display_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (setup_display_window), "PMU Simulator Setup"); + gtk_container_set_border_width (GTK_CONTAINER (setup_display_window), 10); + + /* Create a table of ? by 2 squares */ + table = gtk_table_new (17, 2, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(setup_display_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + apply_button = gtk_button_new_with_label ("Apply"); + cancel_button = gtk_button_new_with_label ("cancel"); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("PMU Setup File Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Server Info"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Configuration Info"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 6, 7); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("PMU ID"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8); + gtk_widget_show (label); + + label = gtk_label_new ("Station Name"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9); + gtk_widget_show (label); + + label = gtk_label_new ("Pasor Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10); + gtk_widget_show (label); + + label = gtk_label_new ("Analog Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11); + gtk_widget_show (label); + + label = gtk_label_new ("Digital Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12); + gtk_widget_show (label); + + label = gtk_label_new ("Format Word"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 12, 13); + gtk_widget_show (label); + + label = gtk_label_new ("CFG Count"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 13, 14); + gtk_widget_show (label); + + label = gtk_label_new ("Data Rate "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 14, 15); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Note : Configuration information of selected PMU Setup file."); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 16, 17); + gtk_widget_show (label); + g_free (markup); + + tempi = 1; + while(tempi < 4) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + if(tempi == 1) + { + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + } + else if(tempi == 2) + { + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 4, 5); + gtk_widget_show (label); + } + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + tempi = atoi(d1); + + if (tempi == 1) + { + d1 = strtok (NULL,"\n"); + framesize = atoi(d1); + + line = malloc(framesize*sizeof(unsigned char)); + fread(line, sizeof(unsigned char), framesize, fp1); + + tempC[0] = line[4]; + tempC[1] = line[5]; + + tempi = tempC[0]; + tempi<<=8; + tempi |=tempC[1]; + + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 7, 8); + gtk_widget_show (label); + + for(i=0; i<16; i++) + { + stn[i] = line[20+i]; + } + stn[16] = '\0'; + + label = gtk_label_new (stn); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 8, 9); + gtk_widget_show (label); + + tempC[0] = line[38]; + tempC[1] = line[39]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 12, 13); + gtk_widget_show (label); + + tempC[0] = line[40]; + tempC[1] = line[41]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 9, 10); + gtk_widget_show (label); + + tempC[0] = line[42]; + tempC[1] = line[43]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 10, 11); + gtk_widget_show (label); + + tempC[0] = line[44]; + tempC[1] = line[45]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 11, 12); + gtk_widget_show (label); + + tempC[0] = line[framesize-6]; + tempC[1] = line[framesize-5]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 13, 14); + gtk_widget_show (label); + + tempC[0] = line[framesize-4]; + tempC[1] = line[framesize-3]; + tempi = c2i(tempC); + + memset(buff, '\0', 15); + sprintf(buff, "%d", tempi); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 14, 15); + gtk_widget_show (label); + } + } + fclose(fp1); + + /* Define signal on ok_button when it "clicked". */ + g_signal_connect_swapped (apply_button, "clicked", G_CALLBACK (apply_pmu_setup), setup_display_window); + g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), setup_display_window); + g_signal_connect (setup_display_window, "destroy", G_CALLBACK (gtk_widget_destroy), setup_display_window); + + /* This makes it so the ok_button is the default. */ + gtk_widget_set_can_default (cancel_button, TRUE); + gtk_widget_set_can_default (apply_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (setup_display_window)->action_area), apply_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (setup_display_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + gtk_widget_grab_default (apply_button); + gtk_widget_show (apply_button); + + /* Finally show the setup_display_window. */ + gtk_widget_show (setup_display_window); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION apply_pmu_setup (GtkWidget *w, gpointer udata) */ +/* This function apply the user selected PMU Setup File and go ahead with the */ +/* Setup file's information. */ +/* ---------------------------------------------------------------------------- */ + +void apply_pmu_setup (GtkWidget *w, gpointer udata) +{ + /* local variables */ + int tmp_p, tempi; + int tmudp_port, tmudp_port1; + char *d1, *rline=NULL; + + size_t len = 0; + FILE *fp1; + ssize_t read; + + gtk_widget_destroy(setup_display_window); + + /* Open the saved PMU Setup File and read the informations */ + fp1 = fopen (fptr,"rb"); + + if (fp1 != NULL) + { + tempi = 1; + + /* To get the PmuServer details from the setup file */ + while(tempi < 3) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + if(tempi == 1) + { + PMU_uport = atoi(rline); + tmudp_port = PMU_uport; + } + else + { + d1 = strtok (rline,"\n"); + PMU_tport = atoi(rline); + tmudp_port1 = PMU_tport; + } + tempi++; + } + + /* Make this file as a common file to operate on */ + memset(pmuFilePath,'\0',sizeof(pmuFilePath)); + strcpy(pmuFilePath, fptr); + fclose(fp1); + + if(read > 0) + { + /* Finally for starting the PMU Server */ + p1 = *ShmPTR; + p1.cfg_bit_change_info = 0; + ShmPTR->cfg_bit_change_info = 0; + ShmPTR->UdpPort = tmudp_port; + ShmPTR->TcpPort = tmudp_port1; + + PMU_uport = tmudp_port; + PMU_tport = tmudp_port1; + + p1.pid = ShmPTR->pid; + + kill(p1.pid, SIGUSR2); + printf("UDP Port = %d & TCP Port = %d, info sent to PMU Server by signal.\n", PMU_uport, PMU_tport); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->pmu_properties), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menu_setup_cfg), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->start_server), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), FALSE); + + /* Finally creating the CFG objects */ + cfg_create_call(); + } + else + { + validation_result(" Not a PMU Setup File. Try again! "); + } + } + else + { + validation_result(" PMU Setup File doesn't exist! "); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_time() */ +/* Display the time on time lable on main PMU Simulator window. */ +/* ---------------------------------------------------------------------------- */ + +void* display_time() +{ + struct timeval tv; + struct tm* ptm; + char time_string[40]; + + while(1) + { + /* Obtain the time of day, and convert it to a tm struct. */ + gettimeofday (&tv, NULL); + + /* Format the date and time, down to a single second. */ + memset(time_string, '\0', 40); + ptm = localtime (&tv.tv_sec); + strftime (time_string, sizeof (time_string), "%Y-%m-%d, %H:%M:%S", ptm); + + gtk_label_set_text(GTK_LABEL(pmu_data->time_lable), time_string); + sleep(1); + } + + /* Exit the display time thread at the time of PMU Closing */ + pthread_exit(NULL); +} + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/PmuGui.h b/PMUSimulator/PmuGui.h new file mode 100755 index 0000000..e51c3ed --- /dev/null +++ b/PMUSimulator/PmuGui.h @@ -0,0 +1,153 @@ +/* ----------------------------------------------------------------------------- + * PmuGui.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#ifndef __SUPPORT_H__ +#define __SUPPORT_H__ + +#include + +/* Convenience macros for obtaining objects from UI file */ +#define CH_GET_OBJECT(builder, name, type, data) \ + data->name = type(gtk_builder_get_object (builder, #name) ) +#define CH_GET_WIDGET(builder, name, data) \ + CH_GET_OBJECT(builder, name, GTK_WIDGET, data) + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +/* PMU's main data structure definition */ +typedef struct _pmuStruct pmuStruct; + +struct _pmuStruct +{ + /* Main application window */ + GtkWidget *Pmu_Simulator; + + /* Main window button widgets */ + GtkWidget *create_cfg_button; + GtkWidget *header_frm_button; + GtkWidget *pmu_details_button; + GtkWidget *stat_modification_button; + GtkWidget *cfg_modification_button; + GtkWidget *manage_data_source; + + /* Manubar button widgets */ + GtkWidget *pmu_menubar; + GtkWidget *start_server; + GtkWidget *open_cfg; + GtkWidget *pmu_properties; + GtkWidget *exit_menuitem; + GtkWidget *about_menuitem; + + GtkWidget * menuitem2; + GtkWidget * menu_setup_cfg; + GtkWidget * menu_data_source; + GtkWidget * menu_cfg_modify; + GtkWidget * menu_stat_modify; + GtkWidget * menu_header_frm; + + /* Main window extra widgets */ + GtkWidget *rights_lable; + GtkWidget *admin_label; + GtkWidget *E_button; + GtkWidget *text_view; + GtkWidget *text_view1; + GtkWidget *time_lable; +}; + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int srvr_entry; +long int ps_thrd_id; +char *markup; + +/* iPDC Setup File path globaly */ +char pmuFolderPath[200]; +char pmuFilePath[200]; +char fptr[200]; + +pid_t pidLocal; +pmuStruct *pmu_data; +GtkWidget *pmu_server_window; +GtkWidget *p_id, *p_udp, *p_tcp, *p_ip; +GtkWidget *udp_port, *tcp_port; +GtkWidget *CCWin, *setup_display_window; +GtkWidget *data_managing_window; +GtkWidget *new_window; +GtkWidget *about_dialog; +GtkWidget *help_dialog; +GtkWidget *pmu_setup_window; + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +int checkip(char ip[]); + +int isNumber(char *s); + +void destroy (GtkWidget *widget, gpointer udata); + +GdkPixbuf *create_pixbuf(const gchar * filename); + +void about_pmu (GtkButton *widget, gpointer udata); + +void Pmu_Help (GtkButton *but, gpointer udata); + +void validation_result (char *msg); + +void pmu_colors(); + +void pmu_server (); + +int validation_pmu_server (GtkButton *button, gpointer udata); + +void manage_data_sources(); + +void Set_data_source(GtkRadioButton *radiobutton, gpointer udata); + +void file_ok_sel(GtkWidget *w, GtkFileSelection *fs); + +void pmu_setup_file_selection(GtkWidget *widget, gpointer udata); + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs); + +void apply_pmu_setup (GtkWidget *w, gpointer udata); + +void* display_time(); + +#endif + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/ServerFunction.c b/PMUSimulator/ServerFunction.c new file mode 100755 index 0000000..ecf943a --- /dev/null +++ b/PMUSimulator/ServerFunction.c @@ -0,0 +1,1961 @@ +/* ----------------------------------------------------------------------------- + * ServerFunction.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "function.h" +#include "ServerFunction.h" +#include "ShearedMemoryStructure.h" + + +/* -------------------------------------------------------------------------------------- */ +/* Functions in ServerFunction.c */ +/* -------------------------------------------------------------------------------------- */ + +/* ----------------------------------------- */ +/* */ +/* 1. int get_header_frame(); */ +/* 2. void frame_size(); */ +/* 3. void generate_data_frame(); */ +/* 4. void* udp_send_data(); */ +/* 5. void* pmu_udp(); */ +/* 6. void* tcp_send_data(void * newfd); */ +/* 7. void* new_pmu_tcp(void * nfd); */ +/* 8. void* pmu_tcp(); */ +/* 9. void start_server(); */ +/* 10.void SIGUSR1_handler(int); */ +/* 11.void SIGUSR2_handler(int); */ +/* */ +/* ----------------------------------------- */ + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int df_pmu_id, df_fdf, df_af, df_pf, df_pn, df_phnmr, df_annmr, df_dgnmr; +int df_data_frm_size = 0, old_data_rate = 0, cfg_size, hdr_size=0; +int count = 0, pmuse=0, sc1 = 0, tcp_port, udp_port, tmp_wait = 1, df_fnom; +int UDP_sockfd, TCP_sockfd, TCP_sin_size, UDP_addr_len, PhasorType[50]; +int udp_cfg_flag = 0, tcp_cfg_flag = 0, tcp_data_flag = 0, udp_data_flag = 0; +int err, errno, udp_data_trans_off = 1, tcp_data_trans_off = 1, stat_flag = 0; + +int yes = 1; /* argument to setsockopt */ +int df_data_rate = 0; +int fsecNum = 0, PhasorType[50]; +long int df_soc, fsec = 0, curnt_soc = 0, prev_soc = 0,soc1,soc2; +long int send_thrd_id = 0; + +/* Initialize the pthread_mutex for PDC Objects */ +pthread_mutex_t mutex_pdc_object = PTHREAD_MUTEX_INITIALIZER; + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION get_header_frame(): */ +/* This function get the header frame from the PMU Setup File. */ +/* ---------------------------------------------------------------------------- */ + +int get_header_frame() +{ + /* Local variables */ + int tempi; + char *rline = NULL, *d1; + ssize_t read; + size_t len = 0; + FILE *fp1; + + /* Open the PMU Setup File to read the header frame, if present in file? */ + fp1 = fopen (pmuFilePath,"rb"); + + tempi = 1; + + /* Read all the unnecessary lines - PMUServer and CFG */ + while(tempi < 6) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if(tempi > 0) + { + fread(hdrline, sizeof(unsigned char), tempi, fp1); + fclose(fp1); + return 1; + } + } + else + { + printf("\nHeader Frame is not created by the PMU operator.\n"); + } + + return 0; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION frame_size(): */ +/* Function To calculate the recent data frame size via reading cfg frm. */ +/* Also initializing some of global variables. */ +/* ---------------------------------------------------------------------------- */ + +void frame_size() +{ + /* Local variables */ + int format, i, j; + int tempi,index=2; + long int temp_li; + char filename[200]; + char *rline = NULL, *d1; + ssize_t read; + size_t len = 0; + FILE *fp1; + + strcpy(filename, pmuFilePath); + + /* Open the PMU Setup File and read the last CFG frame */ + fp1 = fopen (filename,"rb"); + + if (fp1 != NULL) + { + tempi = 1; + + /* Read all the unnecessary lines - PMUServer only */ + while(tempi < 4) + { + read = getline(&rline, &len, fp1); + + if(read == 0) + break; + + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL," "); + tempi = atoi(d1); + + if (tempi == 1) + { + memset(cline,'\0',sizeof(cline)); + + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + /* Copy the complete Configuration frame into an unsigned charactor array called cline */ + fread(cline, sizeof(unsigned char), tempi, fp1); + fclose(fp1); + + /* Get the CFG size & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + cfg_size = c2i(df_temp); + cline[cfg_size] = '\0'; + + /* Get the PMU ID from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_pmu_id = c2i(df_temp); + index = index + 32; + + /* Get the FORMAT word from CFG FRM */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + format = c2i(df_temp); + + /* Initialize the format bits as in his appropriate global variable */ + if(format == 15) + { + df_fdf=1, df_af=1, df_pf=1, df_pn=1; + } + else if(format == 14) + { + df_fdf=1, df_af=1, df_pf=1, df_pn=0; + } + else if(format == 13) + { + df_fdf=1, df_af=1, df_pf=0, df_pn=1; + } + else if(format == 12) + { + df_fdf=1, df_af=1, df_pf=0, df_pn=0; + } + else if(format == 11) + { + df_fdf=1, df_af=0, df_pf=1, df_pn=1; + } + else if(format == 10) + { + df_fdf=1, df_af=0, df_pf=1, df_pn=0; + } + else if(format == 9) + { + df_fdf=1, df_af=0, df_pf=0, df_pn=1; + } + else if(format == 8) + { + df_fdf=1, df_af=0, df_pf=0, df_pn=0; + } + else if(format == 7) + { + df_fdf=0, df_af=1, df_pf=1, df_pn=1; + } + else if(format == 6) + { + df_fdf=0, df_af=1, df_pf=1, df_pn=0; + } + else if(format == 5) + { + df_fdf=0, df_af=1, df_pf=0, df_pn=1; + } + else if(format == 4) + { + df_fdf=0, df_af=1, df_pf=0, df_pn=0; + } + else if(format == 3) + { + df_fdf=0, df_af=0, df_pf=1, df_pn=1; + } + else if(format == 2) + { + df_fdf=0, df_af=0, df_pf=1, df_pn=0; + } + else if(format == 1) + { + df_fdf=0, df_af=0, df_pf=0, df_pn=1; + } + else + { + df_fdf=0, df_af=0, df_pf=0, df_pn=0; + } + + /* Get the PHNMR from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_phnmr = c2i(df_temp); + + /* Get the df_annmr from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_annmr = c2i(df_temp); + + /* Get the df_dgnmr from CFG FRM & store globally */ + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + df_dgnmr = c2i(df_temp); + + /* To escape the some of fields in cfg frame */ + index = index + (16*df_phnmr) + (16*df_annmr) + (256*df_dgnmr); + + /* Extract the value of PHUNIT for each Phasor channel */ + for(i=0, j=0; i<(df_phnmr); i++, j++) + { + if(cline[index++] == 0) + temp_pahsor_type[j] = 0; + else + temp_pahsor_type[j] = 1; + + temp_li =cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + + temp_PHUNIT_val[j] = temp_li; + } + + /* Extract the value of ANUNIT for each Analog channel */ + for(i=0, j=0; i<(df_annmr); i++, j++) + { + temp_analog_type[j] = (int)cline[index++]; + + temp_li =cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + temp_li<<=8; + temp_li |=cline[index++]; + + temp_ANUNIT_val[j] = temp_li; + } + index = index + (4*df_dgnmr); // for skiping 2 byte for DIGUNIT + + df_temp[0] = cline[index++]; + df_temp[1] = cline[index++]; + int temp_df_fnom = c2i(df_temp); + if(temp_df_fnom == 0) + { + df_fnom = 60; + printf("Set Fnom = 60\n"); + } + else + { + df_fnom = 50; + printf("Set Fnom = 50\n"); + } + + df_temp[0] = cline[cfg_size-4]; + df_temp[1] = cline[cfg_size-3]; + df_data_rate = c2i(df_temp); + + /* Calculate the data frame size */ + df_data_frm_size = 0; + df_data_frm_size = df_data_frm_size + 18; /* 18 Bytes or 36 char is sum of all static fields in data frame */ + + /* Calculate 4/8 bytes for each PHNMR & store globally */ + if (df_pf == 0) + { + df_data_frm_size = df_data_frm_size + (4*df_phnmr); + } + else + { + df_data_frm_size = df_data_frm_size + (8*df_phnmr); + } + + /* Calculate 2/4 bytes for each df_annmr & store globally */ + if (df_af == 0) + { + df_data_frm_size = df_data_frm_size + (2*df_annmr); + } + else + { + df_data_frm_size = df_data_frm_size + (4*df_annmr); + } + + /* Calculate 2/4 bytes for both (FREQ + DFREQ) & store globally */ + if (df_fdf == 0) + { + df_data_frm_size = df_data_frm_size + 4; + } + else + { + df_data_frm_size = df_data_frm_size + 8; + } + + /* Calculate 2 bytes for each DGNMR & store globally */ + df_data_frm_size = df_data_frm_size + (2*df_dgnmr); + printf("PMU Server : Calculated data frame would be %d Bytes.\n", df_data_frm_size); + } + } + } /* end of else of fopen*/ + + else + exit(1); +} /* end of function frame_size() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION generate_data_frame(): */ +/* Function to generate the data frame. Based on the Configuration Frame */ +/* attributes. */ +/* ---------------------------------------------------------------------------- */ + +void generate_data_frame() +{ + /* local variables */ + int freqI, phasorI, analogI; + int indx = 0, j, temp_i, freq, dfreq, dsw = 0, ka = 1; + int analog[3] = {100, 1000, 10000}, rand_ph, rand_ang; + long int freq_f, dfreq_f, analog_f; + + float freqF, phasorF, analogF; + float phasor = 100.85, angle, result, TB; + struct timespec *cal_timeSpec, *cal_timeSpec1; + cal_timeSpec = malloc(sizeof(struct timespec)); + cal_timeSpec1 = malloc(sizeof(struct timespec)); + + TB = powf(2,24); + + /* If configuration has changed then call the function "frame_size()" to read new CFG and + reinitialize global variables & generate new Data frames with STAT word bit-10(CFG change bit) + set to 1 till CFG request not received from connected PDC */ + + memset(data_frm,'\0',sizeof(df_data_frm_size)); + + /* Insert SYNC Word in data frame */ + data_frm[indx++] = 0xAA; + data_frm[indx++] = 0x01; + + /* Insert data frame size in data frame */ + i2c(df_data_frm_size, df_temp); + B_copy(data_frm, df_temp, indx, 2); + indx = indx + 2; + + /* Insert PMU ID in data frame */ + i2c(df_pmu_id, df_temp); + B_copy(data_frm, df_temp, indx, 2); + indx = indx + 2; + + /* Insert SOC value in data frame */ + /* No PPS so have to manage by seeing local time */ + clock_gettime(CLOCK_REALTIME, cal_timeSpec); + if (fsecNum >= df_data_rate) + { + cal_timeSpec->tv_sec ++; + fsecNum = 0; + } + df_soc = (long)cal_timeSpec->tv_sec; + li2c(df_soc, df_temp_1); + B_copy(data_frm, df_temp_1, indx, 4); + indx = indx + 4; + + /* Insert Time Quality flag + fraction of second in data frame */ + fsec = roundf(fsecNum*TB/df_data_rate); + li2c(fsec, df_temp_1); + B_copy(data_frm, df_temp_1, indx, 4); + indx = indx + 4; + fsecNum += 1; + + /* Insert STAT Word in data frame Default or Changed */ + time_t curnt_soc = time(NULL); + if(pmuse == 0) + { + prev_soc = curnt_soc; + } + + if((curnt_soc-prev_soc) > 1) + { + printf("\tSTAT word Changed due to PMU SYNC Error."); + data_frm[indx++] = 0x20; + data_frm[indx++] = 0x00; + } + else + { + /* If not insert default STAT Word: 0000 */ + data_frm[indx++] = 0x00; + data_frm[indx++] = 0x00; + } + + prev_soc = curnt_soc; + pmuse = 1; + + /*----------------Auto Generated Data------------------*/ + + if(dataFileVar == 0) + { + /* Insert Fix point phasor values in data frame */ + if(df_pf == 0) + { + /* For rendom phasor values */ + if(df_pn == 0) /* Rectangular */ + { + for(j=0; j> 8) & ~(~0<<8); /* CHKSUM high byte; */ + data_frm[indx++] = (df_chk ) & ~(~0<<8); /* CHKSUM low byte; */ + } + else + { + printf("\nInvalid CheckSum in a sending Data Frame.\n"); + data_frm[indx++] = (df_chk ) & ~(~0<<8); /* CHKSUM low byte; */ + data_frm[indx++] = (df_chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cfg_crc_error = 0; + } + +} /* end of function generate_data_frame() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void* SEND_DATA */ +/* This function run by a seprate thread only for data transmission. */ +/* Function to generate and send the data frame periodically to client's */ +/* destination address or to PDC (client). */ +/* ---------------------------------------------------------------------------- */ + +void* SEND_DATA() +{ + /* Wait till server will get Setup file path */ + while(df_data_rate == 0) usleep(1000); + + /* Calculate the waiting time during sending data frames */ + int data_waiting = 1e9/df_data_rate, i=0; + struct PDC_Details *temp_pdc; + send_thrd_id = pthread_self(); + + struct timespec *cal_timeSpec, *cal_timeSpec1; + cal_timeSpec = malloc(sizeof(struct timespec)); + cal_timeSpec1 = malloc(sizeof(struct timespec)); + + clock_gettime(CLOCK_REALTIME, cal_timeSpec); + + while(1) + { + clock_gettime(CLOCK_REALTIME, cal_timeSpec1); + clock_gettime(CLOCK_REALTIME, cal_timeSpec); + + if (cal_timeSpec->tv_sec > cal_timeSpec1->tv_sec) + { + fsecNum = 1; + break; + } + } + + + while(1) + { + if (i != 0) + { + cal_timeSpec->tv_nsec += data_waiting; + } + else + { + cal_timeSpec->tv_nsec = data_waiting; + } + if ((cal_timeSpec->tv_nsec) >= 1e9) + { + cal_timeSpec->tv_sec++; + cal_timeSpec->tv_nsec-=1e9; + } + + /* Call the function generate_data_frame() to create a fresh new Data Frame */ + generate_data_frame(); + + clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, cal_timeSpec, cal_timeSpec1); + + temp_pdc = PDCfirst; + + pthread_mutex_lock(&mutex_pdc_object); + + while(temp_pdc != NULL) + { + if(!strncasecmp(temp_pdc->protocol, "UDP", 3) && (temp_pdc->data_transmission == 0)) + { + /* If STAT Word bits got changed by user */ + if(temp_pdc->STAT_change != 0) + { + switch (temp_pdc->STAT_change) + { + case 1: + data_frm[14] = 0x04; //CFG changed + data_frm[15] = 0x00; + break; + case 2: + data_frm[14] = 0x80; + data_frm[15] = 0x00; + temp_pdc->STAT_change = 0; + break; + case 3: + data_frm[14] = 0x40; //PMU error + data_frm[15] = 0x00; + break; + case 4: + data_frm[14] = 0x10; + data_frm[15] = 0x00; + temp_pdc->STAT_change = 0; + break; + case 5: + data_frm[14] = 0x08; + data_frm[15] = 0x00; + temp_pdc->STAT_change = 0; + break; + } + } + + /* UDP-Send the newly created data frame to connected PDC address */ + if (sendto (temp_pdc->sockfd,data_frm, df_data_frm_size, 0, + (struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + + perror("sendto"); + } + } + else if(!strncasecmp(temp_pdc->protocol, "TCP", 3) && (temp_pdc->data_transmission == 0)) + { + if(temp_pdc->tcpup == 1) + { + /* TCP-Send the newly created data frame to connected PDC address */ + if (send(temp_pdc->sockfd, data_frm, df_data_frm_size, 0) == -1) { + + perror("sendto"); + } + } + } + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_pdc_object); + + i++; + clock_gettime(CLOCK_REALTIME, cal_timeSpec1); + + } //while-2 ends here + +} /* end of function udp_send_data() */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void PDC_MATCH(int proto, int newfd): */ +/* This function will maintain the linked list of communicated PDC for */ +/* UDP and TCP PDC clients. */ +/* ---------------------------------------------------------------------------- */ + +void PDC_MATCH(int proto, int newfd) +{ + int flag = 1; + struct PDC_Details *temp_pdc; + + pthread_mutex_lock(&mutex_pdc_object); + + if(PDCfirst != NULL) + { + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) { + + if(!strncasecmp(temp_pdc->protocol,"UDP",3)) + { + if(!strcmp(temp_pdc->ip,inet_ntoa(UDP_addr.sin_addr))) + { + /* Only replace the new conn details with old? */ + strcpy(temp_pdc->ip, inet_ntoa(UDP_addr.sin_addr)); // ip + strncpy(temp_pdc->protocol,"UDP",3); // protocol + temp_pdc->protocol[3] = '\0'; + temp_pdc->port = ntohs(UDP_addr.sin_port); //UDP_addr.sin_port + + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->sockfd = UDP_sockfd; + temp_pdc->cmd_received = 1; + + flag = 0; + break; + } + } + temp_pdc = temp_pdc->next; + }//while ends + }//end of if + + if(flag) + { + temp_pdc = malloc(sizeof(struct PDC_Details)); + if(!temp_pdc) { + + printf("Not enough memory temp_pdc\n"); + exit(1); + } + + if(proto == 0) + { + strcpy(temp_pdc->ip, inet_ntoa(UDP_addr.sin_addr)); // ip + strncpy(temp_pdc->protocol,"UDP",3); // protocol + temp_pdc->protocol[3] = '\0'; + temp_pdc->port = ntohs(UDP_addr.sin_port); //UDP_addr.sin_port + temp_pdc->sockfd = UDP_sockfd; + temp_pdc->cmd_received = 1; //received a cmd frame from pdc? only for UDP + } + else + { + printf("TCP new?\n"); + strcpy(temp_pdc->ip, inet_ntoa(TCP_addr.sin_addr)); // ip + strncpy(temp_pdc->protocol,"TCP",3); // protocol + temp_pdc->protocol[3] = '\0'; + temp_pdc->port = ntohs(TCP_addr.sin_port); //UDP_addr.sin_port + temp_pdc->sockfd = newfd; //new_sockfd + temp_pdc->tcpup = 0; + } + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->STAT_change = 0; //no change + temp_pdc->pmu_cfgsent = 0; //not sent + temp_pdc->data_transmission = 1; //off + temp_pdc->address_set = 0; + + if(PDCfirst == NULL) { + + PDCfirst = temp_pdc; + temp_pdc->prev = NULL; + + } else { + + PDClast->next = temp_pdc; + temp_pdc->prev = PDClast; + } + + PDClast = temp_pdc; + temp_pdc->next = NULL; + } + + pthread_mutex_unlock(&mutex_pdc_object); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void* UDP_PMU(): */ +/* This is a UDP Server of PMU and it will continuously on listening mode. */ +/* Function for receives frames from authentic PDC & reply back the */ +/* requested frame (if available) to PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* UDP_PMU() +{ + /* local variables */ + unsigned char c; + int n, ind; + char udp_command[18],filename1[200]; + FILE *fp1; + struct PDC_Details *temp_pdc; + + /* Apply 1 ms delay if required to allow the other thread to complete its + * work + */ + while(strlen(pmuFilePath) == 0) usleep(1000); + + strcpy(filename1, pmuFilePath); + + /* This while is always in listening mode to receiving frames from PDC and their respective reply */ + while(1) + { + ind = 2; + memset(udp_command,'\0',18); + + /* UDP data Received */ + if ((numbytes = recvfrom(UDP_sockfd, udp_command, 18, 0, (struct sockaddr *)&UDP_addr, (socklen_t *)&UDP_addr_len)) == -1) + { + perror("recvfrom"); + exit(1); + } + else /* New datagram has been received */ + { + PDC_MATCH(0, 0); + + c = udp_command[1]; + c <<= 1; + c >>= 5; + + if(c == 0x04) /* Check if it is a command frame from PDC */ + { + c = udp_command[15]; + + if((c & 0x05) == 0x05) /* Command frame for Configuration Frame from PDC */ + { + printf("\nCommand Frame for Configuration Frame-2 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + perror (filename1); + printf("\nPMU IS NOT Configured!\n"); + exit(1); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind]; + cfg_size = c2i(df_temp); + cline[cfg_size] = '\0'; + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + /* Send Configuration frame to PDC Device */ + if (sendto(temp_pdc->sockfd,cline, cfg_size, 0,(struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + perror("sendto"); + } + temp_pdc->STAT_change = 0; + temp_pdc->pmu_cfgsent = 1; + temp_pdc->cmd_received = 0; + + pthread_mutex_unlock(&mutex_pdc_object); + printf("\nPMU CFG-2 frame [of %d Bytes] is sent to the PDC.\n", cfg_size); + break; + } + temp_pdc = temp_pdc->next; + } + } + } + else if((c & 0x03) == 0x03) /* Command frame for Header frame request from PDC */ + { + printf("\nCommand Frame for Header frame is received from PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nHeader Frame is not present in PMU Setup File.\n"); + exit(1); + } + else + { + fclose(fp1); + + if(get_header_frame() == 1) + { + /* Get the CFG size & store in global variable */ + df_temp[0] = hdrline[2]; + df_temp[1] = hdrline[3]; + hdr_size = c2i(df_temp); + hdrline[hdr_size] = '\0'; + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + pthread_mutex_lock(&mutex_pdc_object); + + if(temp_pdc->cmd_received == 1) + { + if (sendto(temp_pdc->sockfd,hdrline, hdr_size, 0,(struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + perror("sendto"); + } + + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + + printf("\nPMU Header Frame is sent to the PDC.\n"); + break; + } + temp_pdc = temp_pdc->next; + } + } + } + } + else if((c & 0x01) == 0x01) /* Command frame for Turn off transmission request from PDC */ + { + printf("\nCommand Frame for Turn OFF data received from PDC.\n"); + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + if(temp_pdc->data_transmission == 1) + printf("Data Transmission is already in OFF mode for PDC.\n"); + else + { + temp_pdc->data_transmission = 1; + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + + printf("Data Transmission Started for PDC.\n"); + break; + } + } + temp_pdc = temp_pdc->next; + } + } + else if((c & 0x02) == 0x02) /* Command frame for Turn ON transmission request from PDC */ + { + printf("\nCommand Frame for Turn ON data received from PDC.\n"); + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + if(temp_pdc->data_transmission == 0) + printf("Data Transmission is already in ON mode for PDC.\n"); + else + { + if(temp_pdc->pmu_cfgsent == 1) + { + printf("Turn ON Data Transmission for PDC.\n"); + temp_pdc->data_transmission = 0; + } + else + printf("Data Transmission can't be turn on for PDC. As CMD frame has not received for CFG?\n"); + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + break; + } + } + temp_pdc = temp_pdc->next; + } + } + else if((c & 0x04) == 0x04) /* Command frame for Configuration frame-1 request from PDC */ + { + printf("\nCommand Frame for CFG Frame-1 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nConfiguration Frame-1 is not present in PMU Setup File.\n"); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind++]; + cfg_size = c2i(df_temp); + cline[cfg_size] = '\0'; + + temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if(temp_pdc->cmd_received == 1) + { + pthread_mutex_lock(&mutex_pdc_object); + + if (sendto(temp_pdc->sockfd,cline, cfg_size, 0,(struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) { + perror("sendto"); + } + + temp_pdc->cmd_received = 0; + pthread_mutex_unlock(&mutex_pdc_object); + printf("\nPMU CFG-1 frame [of %d Bytes] is sent to the PDC.\n", cfg_size); + break; + } + temp_pdc = temp_pdc->next; + } + } + } + + } /* end of processing with received Command frame */ + + else /* If it is other than command frame */ + { + printf("\nReceived Frame is not a command frame!\n"); + continue; + } + } /* end of if-else-if */ + } /* end of while */ +} /* end of pmu_udp(); */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION void* TCP_CONNECTIONS(void * temp_pdc): */ +/* This is a TCP Server of PMU and it will continuously on listening mode. */ +/* Function for receives frames from authentic PDC & reply back the */ +/* requested frame (if available) to PDC. For each and every new connection */ +/* acceptance new thread will create with this function and handle all */ +/* type of frame requeste from communicating PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* TCP_CONNECTIONS(void * temp_pdc) +{ + /* local variables */ + unsigned char c; + int n,sin_size,ind; + char tcp_command[19], filename1[200]; + FILE *fp1; + + struct PDC_Details *single_pdc_node = (struct PDC_Details *) temp_pdc; + int new_fd = single_pdc_node->sockfd; + single_pdc_node->thread_id = pthread_self(); + + while(pmuFilePath == NULL) usleep(1000); + strcpy(filename1, pmuFilePath); + + /* This will wait until CFG has not been set by user. */ + while(1) + { + ind = 2; + memset(tcp_command,19,0); + + /* TCP data Received For new_fd */ + int bytes_read = recv(new_fd,tcp_command,18,0); + + if(bytes_read == -1) + { + perror("recv"); + single_pdc_node->tcpup = 0; + remove_tcp_node(single_pdc_node); //remove the node in pdc_list? + pthread_exit(NULL); + + } + else if(bytes_read == 0) + { + printf("The PDC Client close the connection!\n"); + single_pdc_node->tcpup = 0; + remove_tcp_node(single_pdc_node); //remove the node in pdc_list? + pthread_exit(NULL); + + } + else /* New dat has been received */ + { + c = tcp_command[1]; + c <<= 1; + c >>= 5; + + if(c == 0x04) /* Check if it is a command frame from PDC */ + { + c = tcp_command[15]; + + if((c & 0x05) == 0x05) /* Command frame for Configuration Frame-2 request from PDC */ + { + printf("\nCommand Frame for Configuration Frame-2 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + perror (filename1); + printf("\nPMU IS NOT Configured!\n"); + exit(1); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind]; + cfg_size = c2i(df_temp); + + /* Send Configuration frame to PDC Device */ + pthread_mutex_lock(&mutex_pdc_object); + + if (send(new_fd,cline, cfg_size, 0) == -1) + { + perror("sendto"); + } + single_pdc_node->STAT_change = 0; + single_pdc_node->pmu_cfgsent = 1; + + pthread_mutex_unlock(&mutex_pdc_object); + + printf("\nPMU CFG-2 frame [of %d Bytes] is sent to PDC.\n", cfg_size); + } + } + else if((c & 0x03) == 0x03) /* Command frame for Header frame request from PDC */ + { + printf("\nCommand Frame for Header frame is received from PDC.\n"); + fp1 = fopen(filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nHeader Frame is not present in PMU Setup File.\n"); + exit(1); + } + else + { + fclose(fp1); + + if(get_header_frame() == 1) + { + /* Get the CFG size & store in global variable */ + df_temp[0] = hdrline[2]; + df_temp[1] = hdrline[3]; + hdr_size = c2i(df_temp); + hdrline[hdr_size] = '\0'; + + /* Send Header frame to PDC Device */ + if (send(new_fd,hdrline, hdr_size, 0) == -1) + { + perror("sendto"); + } + printf("\nPMU Header Frame is sent to PDC.\n"); + } + } + } + else if((c & 0x01) == 0x01) /* Command frame for Turn off transmission request from PDC */ + { + printf("\nCommand Frame for Turn OFF data received from PDC.\n"); + + pthread_mutex_lock(&mutex_pdc_object); + + if(single_pdc_node->data_transmission == 1) + printf("Data Transmission is already in OFF mode for PDC.\n"); + else + { + printf("Turn ON Data Transmission for PDC.\n"); + single_pdc_node->data_transmission = 1; + } + pthread_mutex_unlock(&mutex_pdc_object); + } + else if((c & 0x02) == 0x02) /* Command frame for Turn ON transmission request from PDC */ + { + printf("\nRequest received for data transmission ON.\n"); + + /* Send data frames if and Only if cfg is sent to PDC */ + pthread_mutex_lock(&mutex_pdc_object); + + if(single_pdc_node->data_transmission == 0) + printf("Data Transmission is already in ON mode for PDC.\n"); + else + { + if(single_pdc_node->pmu_cfgsent == 1) + { + single_pdc_node->data_transmission = 0; + single_pdc_node->tcpup = 1; + printf("Turn ON Data Transmission for PDC.\n"); + } + else + printf("Data Transmission can't be turn on for PDC. As CMD frame has not received for CFG?\n"); + } + pthread_mutex_unlock(&mutex_pdc_object); + } + else if((c & 0x04) == 0x04) /* Command frame for Configuration frame-1 request from PDC */ + { + printf("\nCommand Frame for CFG Frame-1 is received fron PDC.\n"); + fp1 = fopen (filename1,"rb"); + + if (fp1 == NULL) + { + printf("\nConfiguration Frame-1 is not present in PMU Setup File.\n"); + } + else + { + fclose(fp1); + + /* Get the CFG size & store in global variable */ + df_temp[0] = cline[ind++]; + df_temp[1] = cline[ind++]; + cfg_size = c2i(df_temp); + + if (send(new_fd,cline, cfg_size, 0)== -1) + { + perror("sendto"); + } + printf("\nPMU CFG-1 frame [of %d Bytes] is sent to PDC.\n", cfg_size); + } + } + } /* end of processing with received Command frame */ + + else /* If it is other than command frame */ + { + printf("\nReceived Frame is not a command frame!\n"); + continue; + } + + } /* end of processing with received Command frame */ + + } /*end of While */ + + close(new_fd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_tcp_node(void * node); */ +/* This function will remove the connection nodes from PDC linked list, */ +/* based on other-end connection lost. */ +/* ---------------------------------------------------------------------------- */ + +void remove_tcp_node(void * node) +{ + struct PDC_Details *pdc_node = (struct PDC_Details *) node; + + if(PDCfirst == NULL) + { + printf("No connected-PDC Present?\n"); + } + else + { + struct PDC_Details *temp_pdc = PDCfirst; + pthread_mutex_lock(&mutex_pdc_object); + + while(temp_pdc != NULL) + { + if((!strcmp(temp_pdc->ip,pdc_node->ip)) && + (!strncasecmp(temp_pdc->protocol,pdc_node->protocol,3)) && (temp_pdc->port == pdc_node->port)) + { + if(temp_pdc->prev == NULL) { + + PDCfirst = temp_pdc->next; + if(PDCfirst != NULL) PDCfirst->prev = NULL; + + } else { + + temp_pdc->prev->next = temp_pdc->next; + } + + if(temp_pdc->next == NULL) { + + PDClast = temp_pdc->prev; + + } else { + if(temp_pdc->prev != NULL) + temp_pdc->prev->next = temp_pdc->next; + } + + break; + } + else + temp_pdc = temp_pdc->next; + } + } + pthread_mutex_unlock(&mutex_pdc_object); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION TCP_PMU(); */ +/* This function will call by the thread for TCP communication for PMU Server. */ +/* It will accept new connections from PDC-clients and create thread for every */ +/* PDC via function call of TCP_CONNECTIONS. */ +/* ---------------------------------------------------------------------------- */ + +void* TCP_PMU() +{ + int err; + int sin_size,new_fd,pdc_flag = 0; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); /* pthread_join(3) cannot be used to synchronize */ + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + + while (1) { + + sin_size = sizeof(struct sockaddr_in); + + if (((new_fd = accept(TCP_sockfd, (struct sockaddr *)&TCP_addr, (socklen_t *)&sin_size)) == -1)) + { + perror("accept"); + + } + else /* New TCP connection has been received*/ + { + + /* PDC is authentic */ + printf("\nPMU server: got connection from %s, & on Port = %d.\n",inet_ntoa(TCP_addr.sin_addr), ntohs(TCP_addr.sin_port)); + + /* Add the new TCP connection details to PDC linked list */ + PDC_MATCH(1, new_fd); + + struct PDC_Details *temp_pdc = PDCfirst; + + while(temp_pdc != NULL ) + { + if((!strcmp(temp_pdc->ip,inet_ntoa(TCP_addr.sin_addr))) && + (!strncasecmp(temp_pdc->protocol,"TCP",3)) && (temp_pdc->port == ntohs(TCP_addr.sin_port))) { + + pdc_flag = 1; + break; + + } else { + + temp_pdc = temp_pdc->next; + } + } + + if(pdc_flag) + { + pthread_t t; + + /* Creates a new thread for each TCP connection. */ + if((err = pthread_create(&t,&attr,TCP_CONNECTIONS,(void *)temp_pdc))) { + + perror(strerror(err)); + exit(1); + } + + } + else + { + printf("Request from %s TCP which is un-authentic\n",inet_ntoa(TCP_addr.sin_addr)); + } + } // main if ends + + } // While ends + pthread_attr_destroy(&attr); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION start_server(): */ +/* Function for Start PMU Server as per user given Ports. */ +/* ---------------------------------------------------------------------------- */ + +void start_server() +{ + /* Initialy create the shared memory ID */ + int ShmID, err; + char *ptr1; + + dataFileVar = 0; + cfg_crc_error = 0; + + p1.pid = getpid(); + + key_t MyKey; + + if (signal(SIGUSR1, SIGUSR1_handler) == SIG_ERR) + { + printf("SIGUSR-1 install error\n"); + exit(1); + } + + if (signal(SIGUSR2, SIGUSR2_handler) == SIG_ERR) + { + printf("SIGUSR-2 install error\n"); + exit(1); + } + + MyKey = 12345; /* obtain the shared memory */ + ShmID = shmget(MyKey, sizeof(struct P_id), IPC_CREAT | 0666); + ShmPTR = (struct P_id *) shmat(ShmID, NULL, 0); + *ShmPTR = p1; /* save my pid there */ + + /* This will wait until Port and Protocol have not been set by user. */ + while(tmp_wait) + { + usleep(1000); + } + + fp_DataFile = NULL; + + /* Get the user's name for storing the PMU Setup File */ + ptr1 = getenv ("HOME"); + + if (ptr1 == NULL) + { + printf("user not found\n"); + exit(1); + } + strcat(pmuFolderPath, ptr1); + strcat(pmuFolderPath, "/iPDC/PMU"); + + printf("\n\t\t|-------------------------------------------------------|\n"); + printf("\t\t|\t\tPMU Simulator SERVER\t\t\t|\n"); + printf("\t\t|-------------------------------------------------------|\n"); + + /* Create UDP socket and bind to port */ + if ((UDP_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("\nUDP Socket : Sucessfully Created\n"); + + } + + if (setsockopt(UDP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + UDP_my_addr.sin_family = AF_INET; // host byte order + UDP_my_addr.sin_port = htons(udp_port); // short, network byte order + UDP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(UDP_my_addr.sin_zero),'\0', 8); // zero the rest of the struct + + if (bind(UDP_sockfd, (struct sockaddr *)&UDP_my_addr, + sizeof(struct sockaddr)) == -1) { + perror("bind"); + exit(1); + } else { + + printf("UDP Socket Bind : Sucessfull\n"); + } + + /* UDP created socket and is litening for connections */ + printf("PMU UDP SERVER Listening on port: %d\n\n",udp_port); + + /* Create TCP socket and bind and listen on port */ + if ((TCP_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } else { + + printf("TCP Socket : Sucessfully created\n"); + } + + if (setsockopt(TCP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + TCP_my_addr.sin_family = AF_INET; // host byte order + TCP_my_addr.sin_port = htons(tcp_port); // short, network byte order + TCP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(TCP_my_addr.sin_zero), '\0', 8); // zero the rest of the struct + + if (bind(TCP_sockfd, (struct sockaddr *)&TCP_my_addr, sizeof(struct sockaddr)) + == -1) { + perror("bind"); + exit(1); + + } else { + + printf("TCP Socket Bind : Sucessfull\n"); + } + + if (listen(TCP_sockfd, BACKLOG) == -1) { + + perror("listen"); + exit(1); + + } else { + + printf("TCP Listen : Sucessfull\n"); + } + + sa.sa_handler = sigchld_handler; // reap all dead processes + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + if (sigaction(SIGCHLD, &sa, NULL) == -1) { + perror("sigaction"); + exit(1); + } + + /* TCP created socket and is litening for connections */ + printf("PMU TCP SERVER Listening on port: %d\n",tcp_port); + + TCP_sin_size = sizeof(struct sockaddr_in); + UDP_addr_len = sizeof(struct sockaddr); + + /* Threads are created for UDP and TCP to listen on ports given by user */ + if((err = pthread_create(&UDP_thread,NULL,UDP_PMU,NULL))) { + + perror(strerror(err)); + exit(1); + } + + if((err = pthread_create(&TCP_thread,NULL,TCP_PMU,NULL))) { + + perror(strerror(err)); + exit(1); + } + + pthread_join(UDP_thread, NULL); + pthread_join(TCP_thread, NULL); + + close(UDP_sockfd); + close(TCP_sockfd); + +} /* end of start_server() */ + + +/* ------------------------------------------------------------------ */ +/* FUNCTION SIGUSR1_handler(int sig): */ +/* SIGUSR1 signal handler will give the user's choice regarding data */ +/* data source. Give also the file path when data measurements from */ +/* file. */ +/* ------------------------------------------------------------------ */ + +void SIGUSR1_handler(int sig) +{ + signal(sig, SIG_IGN); + printf("PMU Server SIGUSR-1 Received.\n"); + + if(ShmPTR->dataFileVar == 1) + { + fp_DataFile = fopen (ShmPTR->filePath, "r"); + + if (fp_DataFile == NULL) + { + perror (ShmPTR->filePath); + } + else + { + dataFileVar = ShmPTR->dataFileVar; + } + } + else if(ShmPTR->dataFileVar == 0) + { + dataFileVar = ShmPTR->dataFileVar; + + if(fp_DataFile != NULL) + fclose(fp_DataFile); + } + else if(ShmPTR->dataFileVar == 2) /* When sends a complete setup file path */ + { + strcpy(pmuFilePath, ShmPTR->cfgPath); + + /* Call the function frame_size() to initialized all globals as Configuration frame */ + frame_size(); + + /* Create the SEND_DATA thread for sending Data */ + if((err = pthread_create(&DATA_thread,NULL,SEND_DATA,NULL))) { + + perror(strerror(err)); + exit(1); + } + } + + signal(sig, SIGUSR1_handler); +} + + +/* ------------------------------------------------------------------ */ +/* FUNCTION SIGUSR2_handler(int sig): */ +/* SIGUSR2 signal handler will give the user's choice regarding data */ +/* STAT Word change. Gives what kind of error has been introduced and */ +/* which bit should be change from 0 to 1 in data frame's STAT Word. */ +/* ------------------------------------------------------------------ */ + +void SIGUSR2_handler(int sig) +{ + signal(sig, SIG_IGN); + printf("PMU Server SIGUSR-2 Received.\n"); + + if(ShmPTR->cfg_bit_change_info == 0) + { + udp_port = ShmPTR->UdpPort; + tcp_port = ShmPTR->TcpPort; + tmp_wait = 0; + } + else if(ShmPTR->cfg_bit_change_info == 6) /* for CheckSum Error */ + { + cfg_crc_error = 1; + printf("Invalid CheckSum!\n"); + } + else + { + struct PDC_Details *temp_pdc = PDCfirst; + + pthread_mutex_lock(&mutex_pdc_object); + + while(temp_pdc != NULL ) + { + if(ShmPTR->cfg_bit_change_info == 1) /* for configuration change bit */ + { + temp_pdc->STAT_change = 1; + printf("STAT - Configuration changed!\n"); + } + + else if(ShmPTR->cfg_bit_change_info == 2) /* for invalid data bit */ + { + temp_pdc->STAT_change = 2; + printf("STAT - Invalid data!\n"); + + } + else if(ShmPTR->cfg_bit_change_info == 3) /* for PMU error bit */ + { + temp_pdc->STAT_change = 3; + printf("STAT - PMU error!\n"); + } + else if(ShmPTR->cfg_bit_change_info == 4) /* for data sorting bit */ + { + temp_pdc->STAT_change = 4; + printf("STAT - Data Sorting!\n"); + } + else if(ShmPTR->cfg_bit_change_info == 5) /* for PMU trigger bit */ + { + temp_pdc->STAT_change = 5; + printf("STAT - PMU Trigger!\n"); + } + + temp_pdc = temp_pdc->next; + } + + if(ShmPTR->cfg_bit_change_info == 1) + { + /* As configuration has been changed, fill the global variables with new values for Data and CFG frames */ + frame_size(); + + /* Needs to cancle the existing thread for data sending and create new one */ + int n = pthread_cancel(send_thrd_id); + + if (n == 0) + { + if((err = pthread_create(&DATA_thread,NULL,SEND_DATA,NULL))) + { + perror(strerror(err)); + exit(1); + } + printf("Now PMU sending Data Frames according to new configuration."); + //pthread_join(DATA_thread, NULL); + } + else + printf("PMU unable to send Data Frames according to new configuration??"); + } + + pthread_mutex_unlock(&mutex_pdc_object); + } + signal(sig, SIGUSR2_handler); +} + +/**************************************** End of File *******************************************************/ + diff --git a/PMUSimulator/ServerFunction.h b/PMUSimulator/ServerFunction.h new file mode 100755 index 0000000..d30543a --- /dev/null +++ b/PMUSimulator/ServerFunction.h @@ -0,0 +1,116 @@ +/* ----------------------------------------------------------------------------- + * ServerFunction.h + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include + +#define BACKLOG 10 /* How many pending connections queue will hold */ +#define MAX_STRING_SIZE 5000 + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int dataFileVar, cfg_crc_error; +int temp_pahsor_type[50], temp_analog_type[50]; +long int temp_PHUNIT_val[50], temp_ANUNIT_val[50]; + +char pmuFolderPath[200]; +char pmuFilePath[200]; + +unsigned char cline[MAX_STRING_SIZE]; +unsigned char hdrline[MAX_STRING_SIZE]; +unsigned char data_frm[MAX_STRING_SIZE], df_temp[2], df_temp_1[4]; + +struct sockaddr_in UDP_my_addr,TCP_my_addr; /* my address information */ +struct sockaddr_in UDP_addr,TCP_addr; /* connector’s address information */ +struct sigaction sa; + +int UDP_sockfd,TCP_sockfd; /* socket descriptors */ +int UDP_addr_len,TCP_sin_size, numbytes; + +pthread_t UDP_thread,TCP_thread,DATA_thread;; +FILE *fp_DataFile; +uint16_t df_chk; + +//pthread_mutex_t mutex_pdc_object; /* To lock cfg data objects */ + +/* ------------------------------------------------------------------ */ +/* Global Datastructure */ +/* ------------------------------------------------------------------ */ + +struct PDC_Details { + + int port; + char ip[16]; + char protocol[4]; + int sockfd; + int tcpup; + int STAT_change; //0-no change, 1-changed + int pmu_cfgsent; //0- not sent, 1- sent + int data_transmission; //0 maens ON, 1 maeans OFF + int cmd_received; ////0 maens Not-received, 1 maeans received + int address_set; + pthread_t thread_id; + struct sockaddr_in pdc_addr; + struct PDC_Details *next; + struct PDC_Details *prev; + +}*PDCfirst,*PDClast; + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void frame_size(); + +void generate_data_frame(); + +void* SEND_DATA(); + +void PDC_MATCH(int proto, int newfd); + +void* UDP_PMU(); + +void* TCP_CONNECTIONS(void * temp_pdc); + +void remove_tcp_node(void * node); + +void* TCP_PMU(); + +void start_server(); + +int get_header_frame(); + +void SIGUSR1_handler(int); /* Signal handler */ + +void SIGUSR2_handler(int); /* Signal handler */ + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/ShearedMemoryStructure.h b/PMUSimulator/ShearedMemoryStructure.h new file mode 100755 index 0000000..bbe46a0 --- /dev/null +++ b/PMUSimulator/ShearedMemoryStructure.h @@ -0,0 +1,48 @@ +/* ----------------------------------------------------------------------------- + * function.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* global Data Structure for Shared Memory */ +/* ------------------------------------------------------------------ */ + +struct P_id { + + pid_t pid; /* Single pid */ + + int dataFileVar; /* For data source options : 0-Auto & 1-File Measurements */ + char filePath[400]; /* File path of user selected measurement file */ + int UdpPort; /* User given UDP port number for server */ + int TcpPort; /* User given TCP port number for server */ + int cfg_bit_change_info; /* STAT Word change bit status if any otherwise default set to 0 */ + char cfgPath[200]; /* Its a PMU Setup File path given by use */ + int phasor_type[50]; /* save the phasor type (currently not useful) */ + +}p1, *ShmPTR; + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/function.c b/PMUSimulator/function.c new file mode 100755 index 0000000..17367ce --- /dev/null +++ b/PMUSimulator/function.c @@ -0,0 +1,240 @@ +/* ----------------------------------------------------------------------------- + * function.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* -------------------------------------------------------------------------------------- */ +/* Functions defined in function.c */ +/* -------------------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- */ +/* */ +/* 1. void B_copy(unsigned char main[],unsigned char tmp[],int ind,int n) */ +/* 2. char* measurement_Return () */ +/* 3. void H2S(char a[], unsigned char temp_6[]) */ +/* 4. void i2c (int t, unsigned char temp[]) */ +/* 5. void li2c (long int t1, unsigned char temp_1[]) */ +/* 6. void f2c (float f, unsigned char temp_4[]) */ +/* 7. int c2i (unsigned char temp_2[]) */ +/* 8. long int c2li (unsigned char temp_3[]) */ +/* 9. uint16_t compute_CRC(unsigned char *message,char length) */ +/* 10.void sigchld_handler(int s) */ +/* */ +/* ---------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include "function.h" +#include "ServerFunction.h" + +#define channel_name 100 + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION B_copy(unsigned char main[], unsigned char tmp[], int ind, int n): */ +/* Function copies unsigned char or Bytes in a main array from tmp array. */ +/* ---------------------------------------------------------------------------- */ + +void B_copy(unsigned char main[], unsigned char tmp[], int ind, int n) +{ + int k; + for(k=0; k0) + { + return l1; + } + fseek(fp_DataFile, 0, SEEK_SET); + result = 1; + } + fclose(fp_DataFile); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION H2S(char a[], unsigned char temp_6[]): */ +/* Function for unsigned/Hexa char to String Conversion. */ +/* ---------------------------------------------------------------------------- */ + +void H2S(char a[], unsigned char temp_6[]) +{ + int k; + + for(k=0; k<16; k++) + { + a[k] = temp_6[k]; + } + a[16] = '\0'; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION i2c (int t, unsigned char temp[]): */ +/* Function for Integer to unsigned Character Conversion */ +/* ---------------------------------------------------------------------------- */ + +void i2c (int t, unsigned char temp[]) +{ + temp[0] = t>>8; + temp[1] = t; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION li2c (long int t1, unsigned char temp_1[]): */ +/* Function for Long Integer to unsigned Character Conversion. */ +/* ---------------------------------------------------------------------------- */ + +void li2c (long int t1, unsigned char temp_1[]) +{ + temp_1[0] = t1>>24; + temp_1[1] = t1>>16; + temp_1[2] = t1>>8; + temp_1[3] = t1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION li2c (long int t1, unsigned char temp_1[]): */ +/* Function for float to unsigned Character Conversion */ +/* ---------------------------------------------------------------------------- */ + +void f2c (float f, unsigned char temp_1[]) +{ + int i, j; + float fv; + unsigned char a1[sizeof fv]; + + fv = f; + memcpy(a1, &fv, sizeof fv); + for (i=0, j=3; i>8)^message[i]; + crc<<=8; + quick=temp ^ ( temp >>4); + crc ^=quick; + quick<<=5; + crc ^=quick; + quick <<=7; + crc ^= quick; + } + return crc; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION sigchld_handler(int s): */ +/* Function for TCP connection signal handling */ +/* ---------------------------------------------------------------------------- */ + +void sigchld_handler(int s) +{ + while(wait(NULL) > 0); +} + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/function.h b/PMUSimulator/function.h new file mode 100755 index 0000000..630494a --- /dev/null +++ b/PMUSimulator/function.h @@ -0,0 +1,64 @@ +/* ----------------------------------------------------------------------------- + * function.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +/* Function copies Bytes in a main array */ +void B_copy(unsigned char main[], unsigned char tmp[], int ind, int n); + +/* Function to read the measurement file and return measurements for a singel timestamp */ +char* measurement_Return (); + +/* Function for Hexa to String Conversion */ +void H2S(char a[], unsigned char temp_6[]); + +/* Function for Integer to Character Conversion */ +void i2c (int t, unsigned char temp[]); + +/* Function for Long Integer to Character Conversion */ +void li2c (long int t1, unsigned char temp_1[]); + +/* Function for float to Character Conversion */ +void f2c (float f, unsigned char temp_4[]); + +/* Function for Character to Integer Conversion */ +int c2i (unsigned char temp_2[]); + +/* Function for Character to Long Integer Conversion */ +long int c2li (unsigned char temp_3[]); + +/* Function for calculation of CHECKSUM CRC-CCITT (0xffff) */ +uint16_t compute_CRC(unsigned char *message,int length); + +/* Function for TCP connection signal handling */ +void sigchld_handler(int s); + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/images/PMU.desktop b/PMUSimulator/images/PMU.desktop new file mode 100755 index 0000000..f20c915 --- /dev/null +++ b/PMUSimulator/images/PMU.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Encoding=UTF-8 +Name=PMU Simulator +Comment=Phasor Measurement Unit Simulator +Exec=/usr/local/bin/PMU +Icon=/usr/local/share/PMU/logo.png +Terminal=true +Categories=Education diff --git a/PMUSimulator/images/PSLab.PNG b/PMUSimulator/images/PSLab.PNG new file mode 100755 index 0000000..2e32619 Binary files /dev/null and b/PMUSimulator/images/PSLab.PNG differ diff --git a/PMUSimulator/images/PmuLogo.png b/PMUSimulator/images/PmuLogo.png new file mode 100755 index 0000000..36360a1 Binary files /dev/null and b/PMUSimulator/images/PmuLogo.png differ diff --git a/PMUSimulator/images/PmuLogo1.png b/PMUSimulator/images/PmuLogo1.png new file mode 100755 index 0000000..995c3ae Binary files /dev/null and b/PMUSimulator/images/PmuLogo1.png differ diff --git a/PMUSimulator/images/logo.png b/PMUSimulator/images/logo.png new file mode 100755 index 0000000..1201b40 Binary files /dev/null and b/PMUSimulator/images/logo.png differ diff --git a/PMUSimulator/pmu.c b/PMUSimulator/pmu.c new file mode 100755 index 0000000..9e40642 --- /dev/null +++ b/PMUSimulator/pmu.c @@ -0,0 +1,304 @@ +/* ----------------------------------------------------------------------------- + * pmu.c + * + * PMU Simulator - Phasor Measurement Unit Simulator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "PmuGui.h" +#include "ServerFunction.h" +#include "CfgGuiFunctions.h" +#include "CfgFunction.h" +#include "ShearedMemoryStructure.h" + +/* Common fixed path for storage of few common files */ +#define UI_fILE "/usr/local/share/PMU/pmu.xml" + + +/* ---------------------------------------------------------------- */ +/* main program starts here */ +/* ---------------------------------------------------------------- */ + +int main(int argc, char **argv) +{ + /* local variables */ + GtkBuilder *builder; + GError *error = NULL; + + int ShmID, err; + char *ptr1; + struct stat st; + key_t MyKey; + + system("clear"); + + pidLocal = fork(); + + if (pidLocal == 0) + { + start_server(); + } + else + { + /* Main process for PMU Configuration Setup */ + usleep(1000); + + MyKey = 12345; /* obtain the shared memory */ + ShmID = shmget(MyKey, sizeof(pid_t), 0666); + ShmPTR = (struct P_id *) shmat(ShmID, NULL, 0); + p1 = *ShmPTR; /* get process-a's ID */ + + /* Init GTK+ */ + gtk_init(&argc, &argv); + + /* Create new GtkBuilder object */ + builder = gtk_builder_new(); + + /* Add glade file to GtkBuilder */ + if(!gtk_builder_add_from_file(builder, UI_fILE, &error)) + { + g_free(error); + return(1); + } + + /* Allocate data structure */ + pmu_data = g_slice_new(pmuStruct); + + /* Get objects from UI */ + #define GW(name) CH_GET_WIDGET(builder, name, pmu_data) + GW(Pmu_Simulator); + GW(create_cfg_button); + GW(header_frm_button); + GW(pmu_details_button); + GW(stat_modification_button); + GW(cfg_modification_button); + GW(pmu_menubar); + GW(menuitem2); + GW(rights_lable); + GW(admin_label); + GW(about_menuitem); + GW(exit_menuitem); + GW(E_button); + GW(manage_data_source); + GW(pmu_properties); + GW(start_server); + GW(menu_setup_cfg); + GW(menu_data_source); + GW(menu_cfg_modify); + GW(menu_stat_modify); + GW(menu_header_frm); + GW(text_view); + GW(text_view1); + GW(open_cfg); + GW(time_lable); + #undef GW + + /* Connect signal to builder */ + gtk_builder_connect_signals(builder, pmu_data); + gtk_builder_connect_signals(builder, NULL); + + // Changes how a toplevel window deals with its size request and user resize attempts. + gtk_window_set_policy (GTK_WINDOW (pmu_data->Pmu_Simulator), FALSE, TRUE, TRUE); + gtk_window_set_position(GTK_WINDOW(pmu_data->Pmu_Simulator), GTK_WIN_POS_CENTER); + gtk_window_set_icon(GTK_WINDOW(pmu_data->Pmu_Simulator), create_pixbuf("/usr/local/share/PMU/logo.png")); + + /* Set the Title of Main Window */ + gtk_window_set_title (GTK_WINDOW (pmu_data->Pmu_Simulator), "PMU SIMULATOR"); + + /* Disable all buttons except create Configuration button because cfg is not present in the system */ + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->manage_data_source), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->header_frm_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->cfg_modification_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->stat_modification_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->pmu_details_button), FALSE); + + gtk_widget_set_visible(GTK_WIDGET(pmu_data->menuitem2), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->pmu_properties), FALSE); + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), FALSE); + + /* Get the user's name for storing the PMU Setup File */ + ptr1 = malloc( 200*sizeof(char)); + memset(ptr1,'\0',200); + strcpy(ptr1,getenv("HOME")); + + if (ptr1 == NULL) + { + printf("user not found\n"); + exit(1); + } + strcat(ptr1, "/iPDC"); + + + if(stat(ptr1,&st) == 0) + { + strcat(ptr1, "/PMU"); + + if(stat(ptr1,&st) == 0) + { + strcat(pmuFolderPath, ptr1); + + FILE * output; + int check; + char buff[200], is_empty[100]; + + strcpy(buff, "ls "); + strcat(buff, pmuFolderPath); + strcat(buff, " | wc -l"); + + output = popen(buff,"r"); + fgets (is_empty, 100, output); //write to the char + pclose (output); + + check = atoi(is_empty); + + if (check == 0) //No Setup files is present + { + /* Setup files is not present in the system, so start with building new PMU Setup file */ + pmu_server (); + } + else + { + gtk_widget_set_visible(GTK_WIDGET(pmu_data->open_cfg), TRUE); + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("cannot create directory `%s': %s\n", pmuFolderPath, strerror (errno)); + validation_result ("cannot create iPDC directory on proposed path!"); + } + else + { + strcat(pmuFolderPath, ptr1); + + /* Setup files is not present in the system, so start with building new PMU Setup file */ + pmu_server (); + } + } + + strcpy(ptr1,getenv("HOME")); + strcat(ptr1,"/iPDC/DataDir"); + + if(stat(ptr1,&st) != 0) + { + if (mkdir (ptr1, 0700)) + { + printf("Cannot create directory '%s': %s\n", ptr1, strerror(errno)); + } + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("cannot create directory `%s': %s", pmuFolderPath, strerror (errno)); + } + else + { + strcat(ptr1, "/PMU"); + + if (mkdir (ptr1, 0700)) + { + printf ("cannot create directory `%s': %s", pmuFolderPath, strerror (errno)); + validation_result ("cannot create PMU directory on proposed path!"); + } + else + { + strcat(pmuFolderPath, ptr1); + + /* Setup files is not present in the system, so start with building new PMU Setup file */ + pmu_server (); + } + } + } + + /* Decorate the GUI */ + pmu_colors(); + + /* Signal handling for buttons on Main PMU Window */ + g_signal_connect (pmu_data->create_cfg_button, "clicked", G_CALLBACK(cfg_create_function), NULL); + g_signal_connect (pmu_data->menu_setup_cfg, "activate", G_CALLBACK(cfg_create_function), NULL); + + g_signal_connect (pmu_data->manage_data_source, "clicked", G_CALLBACK(manage_data_sources), NULL); + g_signal_connect (pmu_data->menu_data_source, "activate", G_CALLBACK(manage_data_sources), NULL); + + g_signal_connect (pmu_data->header_frm_button, "clicked", G_CALLBACK(hdr_create_function), NULL); + g_signal_connect (pmu_data->menu_header_frm, "activate", G_CALLBACK(hdr_create_function), NULL); + + g_signal_connect (pmu_data->stat_modification_button, "clicked", G_CALLBACK(stat_chng_options), NULL); + g_signal_connect (pmu_data->menu_stat_modify, "activate", G_CALLBACK(stat_chng_options), NULL); + + g_signal_connect (pmu_data->cfg_modification_button, "clicked", G_CALLBACK(Change_pmu_configuration), NULL); + g_signal_connect (pmu_data->menu_cfg_modify, "activate", G_CALLBACK(Change_pmu_configuration), NULL); + + g_signal_connect (pmu_data->pmu_details_button, "clicked", G_CALLBACK(show_pmu_details), NULL); + g_signal_connect (pmu_data->start_server, "activate", G_CALLBACK(pmu_server), NULL); + g_signal_connect (pmu_data->open_cfg, "activate", G_CALLBACK(pmu_setup_file_selection), NULL); + g_signal_connect (pmu_data->pmu_properties, "activate", G_CALLBACK(show_pmu_details), NULL); + g_signal_connect (pmu_data->about_menuitem, "activate", G_CALLBACK(about_pmu), NULL); + g_signal_connect (pmu_data->exit_menuitem, "activate", G_CALLBACK(destroy), NULL); + g_signal_connect (pmu_data->E_button, "clicked", G_CALLBACK(destroy), NULL); + g_signal_connect_swapped (pmu_data->Pmu_Simulator, "destroy", G_CALLBACK (destroy), NULL); + + /* Destroy builder, since we don't need it anymore */ + g_object_unref(G_OBJECT(builder)); + + /* Show window. All other widgets are automatically shown by GtkBuilder */ + gtk_widget_show(pmu_data->Pmu_Simulator); + + pthread_t t; + if((err = pthread_create(&t,NULL,display_time,NULL))) + { + perror(strerror(err)); + exit(1); + } + + /* GTK Main */ + gtk_main(); + + /* Free any allocated data */ + g_slice_free(pmuStruct, pmu_data); + } + return(0); +} + +/**************************************** End of File *******************************************************/ diff --git a/PMUSimulator/pmu.glade b/PMUSimulator/pmu.glade new file mode 100755 index 0000000..55edcdf --- /dev/null +++ b/PMUSimulator/pmu.glade @@ -0,0 +1,454 @@ + + + + + + + True + + + 10 + + + + True + gtk-network + 1 + + + True + gtk-execute + 1 + + + True + gtk-new + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-directory + 1 + + + True + gtk-dialog-authentication + 1 + + + True + gtk-dialog-warning + 1 + + + True + gtk-justify-fill + 1 + + + PMU SIMULATOR - v1.3 + center-always + 710 + 590 + calibrate + False + center + + + True + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to create a new PMU setup file. + 5 + image3 + False + True + + + + + Open PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved PMU setup file. + 5 + image4 + False + True + + + + + PMU Properties + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the PMU setup informations. + 5 + image5 + False + True + + + + + gtk-quit + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the PMU Simulator Software. + True + True + True + + + + + + + + + True + Edit + True + + + True + + + Setup Configuration + True + Create Configuration Frame for PMU Simulator +with variable parameters. + image2 + False + True + + + + + Manage Data Source + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + image6 + False + True + + + + + Configuration Modification + True + Modify the configuration of running PMU, with the STAT Word's bit change. + image7 + False + True + + + + + STAT Word Modification + True + Introduce diffrent STAT bits errors during data frame transmission. + image8 + False + True + + + + + Header Frame Setup + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + image9 + False + True + + + + + + + + + True + _Help + True + + + True + + + gtk-about + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to see the publisher, licensing, and version details. + True + True + True + + + + + + + + + + + Setup Configuration + 240 + 40 + True + True + True + Create Configuration Frame for PMU Simulator +with variable parameters. + 0 + + + 20 + 225 + + + + + Header Frame Setup + 240 + 40 + True + True + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + 0 + + + 20 + 425 + + + + + STAT Word Modification + 240 + 40 + True + True + True + Introduce diffrent STAT bits errors during data frame transmission. + 0 + + + 20 + 375 + + + + + PMU Properties + 240 + 40 + True + True + True + View the details of PMU Configuration, +and PMU Server informations. + 0 + + + 20 + 475 + + + + + Configuration Modification + 240 + 40 + True + True + True + Modify the configuration of running PMU, with the STAT Word's bit change. + 0 + + + 20 + 325 + + + + + Go online + 110 + 40 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 550 + + + + + EXIT + 100 + 40 + True + True + True + + Click to exit the PMU Simulator Software. + + + 603 + 550 + + + + + Manage Data Source + 240 + 40 + True + True + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + 0 + + + 20 + 275 + + + + + 150 + 40 + True + + + 289 + 552 + + + + + 235 + 40 + True + + + 20 + 187 + + + + + 800 + 20 + True + + + -1 + 525 + + + + + 720 + 105 + True + False + False + fill + False + + + 39 + + + + + 410 + 287 + True + False + Simulation of Phasor Measurement Unit. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + False + False + + + 290 + 225 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 548 + 145 + + + + + + diff --git a/PMUSimulator/pmu.xml b/PMUSimulator/pmu.xml new file mode 100644 index 0000000..51a0355 --- /dev/null +++ b/PMUSimulator/pmu.xml @@ -0,0 +1,454 @@ + + + + + + + True + + + 10 + + + + True + gtk-network + 1 + + + True + gtk-execute + 1 + + + True + gtk-new + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-directory + 1 + + + True + gtk-dialog-authentication + 1 + + + True + gtk-dialog-warning + 1 + + + True + gtk-justify-fill + 1 + + + PMU SIMULATOR - v1.3 + center-always + 710 + 590 + calibrate + False + center + + + True + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to create a new PMU setup file. + 5 + image3 + False + True + + + + + Open PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved PMU setup file. + 5 + image4 + False + True + + + + + PMU Properties + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the PMU setup informations. + 5 + image5 + False + True + + + + + gtk-quit + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the PMU Simulator Software. + True + True + True + + + + + + + + + True + Edit + True + + + True + + + Setup Configuration + True + Create Configuration Frame for PMU Simulator +with variable parameters. + image2 + False + True + + + + + Manage Data Source + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + image6 + False + True + + + + + Configuration Modification + True + Modify the configuration of running PMU, with the STAT Word's bit change. + image7 + False + True + + + + + STAT Word Modification + True + Introduce diffrent STAT bits errors during data frame transmission. + image8 + False + True + + + + + Header Frame Setup + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + image9 + False + True + + + + + + + + + True + _Help + True + + + True + + + gtk-about + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to see the publisher, licensing, and version details. + True + True + True + + + + + + + + + + + Setup Configuration + 240 + 40 + True + True + True + Create Configuration Frame for PMU Simulator +with variable parameters. + 0 + + + 20 + 225 + + + + + Header Frame Setup + 240 + 40 + True + True + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + 0 + + + 20 + 425 + + + + + STAT Word Modification + 240 + 40 + True + True + True + Introduce diffrent STAT bits errors during data frame transmission. + 0 + + + 20 + 375 + + + + + PMU Properties + 240 + 40 + True + True + True + View the details of PMU Configuration, +and PMU Server informations. + 0 + + + 20 + 475 + + + + + Configuration Modification + 240 + 40 + True + True + True + Modify the configuration of running PMU, with the STAT Word's bit change. + 0 + + + 20 + 325 + + + + + Go online + 110 + 40 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 550 + + + + + EXIT + 100 + 40 + True + True + True + + Click to exit the PMU Simulator Software. + + + 603 + 550 + + + + + Manage Data Source + 240 + 40 + True + True + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + 0 + + + 20 + 275 + + + + + 150 + 40 + True + + + 289 + 552 + + + + + 235 + 40 + True + + + 20 + 187 + + + + + 800 + 20 + True + + + -1 + 525 + + + + + 720 + 105 + True + False + False + fill + False + + + 39 + + + + + 410 + 287 + True + False + Simulation of Phasor Measurement Unit. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + False + False + + + 290 + 225 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 548 + 145 + + + + + + diff --git a/PMUSimulator/pmu.xml$ b/PMUSimulator/pmu.xml$ new file mode 100644 index 0000000..51a0355 --- /dev/null +++ b/PMUSimulator/pmu.xml$ @@ -0,0 +1,454 @@ + + + + + + + True + + + 10 + + + + True + gtk-network + 1 + + + True + gtk-execute + 1 + + + True + gtk-new + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-directory + 1 + + + True + gtk-dialog-authentication + 1 + + + True + gtk-dialog-warning + 1 + + + True + gtk-justify-fill + 1 + + + PMU SIMULATOR - v1.3 + center-always + 710 + 590 + calibrate + False + center + + + True + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to create a new PMU setup file. + 5 + image3 + False + True + + + + + Open PMU Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved PMU setup file. + 5 + image4 + False + True + + + + + PMU Properties + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the PMU setup informations. + 5 + image5 + False + True + + + + + gtk-quit + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the PMU Simulator Software. + True + True + True + + + + + + + + + True + Edit + True + + + True + + + Setup Configuration + True + Create Configuration Frame for PMU Simulator +with variable parameters. + image2 + False + True + + + + + Manage Data Source + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + image6 + False + True + + + + + Configuration Modification + True + Modify the configuration of running PMU, with the STAT Word's bit change. + image7 + False + True + + + + + STAT Word Modification + True + Introduce diffrent STAT bits errors during data frame transmission. + image8 + False + True + + + + + Header Frame Setup + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + image9 + False + True + + + + + + + + + True + _Help + True + + + True + + + gtk-about + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + True + Click to see the publisher, licensing, and version details. + True + True + True + + + + + + + + + + + Setup Configuration + 240 + 40 + True + True + True + Create Configuration Frame for PMU Simulator +with variable parameters. + 0 + + + 20 + 225 + + + + + Header Frame Setup + 240 + 40 + True + True + True + This frame shall be human readable information about +the PMU, the data sources, scaling, algorithms, filtering, or other related information filled by Admin or PMU vendor. + 0 + + + 20 + 425 + + + + + STAT Word Modification + 240 + 40 + True + True + True + Introduce diffrent STAT bits errors during data frame transmission. + 0 + + + 20 + 375 + + + + + PMU Properties + 240 + 40 + True + True + True + View the details of PMU Configuration, +and PMU Server informations. + 0 + + + 20 + 475 + + + + + Configuration Modification + 240 + 40 + True + True + True + Modify the configuration of running PMU, with the STAT Word's bit change. + 0 + + + 20 + 325 + + + + + Go online + 110 + 40 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 550 + + + + + EXIT + 100 + 40 + True + True + True + + Click to exit the PMU Simulator Software. + + + 603 + 550 + + + + + Manage Data Source + 240 + 40 + True + True + True + Open the measurement data csv file respective with you running configuration. By default it will send auto generated raw measurement data. + 0 + + + 20 + 275 + + + + + 150 + 40 + True + + + 289 + 552 + + + + + 235 + 40 + True + + + 20 + 187 + + + + + 800 + 20 + True + + + -1 + 525 + + + + + 720 + 105 + True + False + False + fill + False + + + 39 + + + + + 410 + 287 + True + False + Simulation of Phasor Measurement Unit. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + False + False + + + 290 + 225 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 548 + 145 + + + + + + diff --git a/README b/README new file mode 100755 index 0000000..beae887 --- /dev/null +++ b/README @@ -0,0 +1,275 @@ +/* ----------------------------------------------------------------- + * README + * + * iPDC - A Free Phasor Data Concentrator + * Covered under the GPL License 3.0. + * + * Copyright (C) 2012 Nitesh Pandit + * Copyright (C) 2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * --------------------------------------------------------------- */ + + +Be up to date with about iPDC new + +By visiting + http://ipdc.codeplex.com/ + http://sourceforge.net/projects/iitbpdc/ + http://freecode.com/projects/ipdc + + You can also JOIN us on FaceBook at "http://www.facebook.com/pages/PhasorDataConcentrator". + + Visit Our another project regarding Wide Area Frequency Measurement System" developed at IIT BOmbay: "http://www.ee.iitb.ac.in/~anil/" + + +iPDC.x.y.z +----------- + + 4-files and 4-folders are present in iPDC.x.y.z.tar.gz, they are + + 1. iPDC-1.3.1 + 2. PMUSimulator-1.3.1 + 3. DBServer-1.1 + 4. DataDir + 5. Release Notes 1.3.1 + 6. change.log + 7. README + 8. COPYING + + +General Information +------------------- + + iPDC consists of 3 different modules, + + iPDC - Phasor Data Concentrator compliant with IEEEC37.118 synchrophasor standard, + DBServer - which is used to store the data in MySQL database, and + PMUSimulator - which simulates the Phasor Measurement Unit compliant with IEEEC37.118 synchrophasor standard. + + This version works in Unix and Unix-like operating systems. It uses GCC compiler, GTK+ graphical user interface library & also POSIX thread library, and MySQL as database server. + + +Dependencies +------------- + + gcc + mysql-server-5.0 + mysql-client-5.0. + mysql-common + libmysqlclient16* + GTK+2.5 + glade 3.6.7 (optional for development) + NTP-client (For synchronization of system clock) + + +INSTALLATION: +------------ + + Dependencies installation: Installation of glade internally installed the GTK+ libraries and there is no need to explicit installation of GTK+. NTP is recommended for better results by iPDC and PMU Simulator. + + su/sudo apt-get update (recommended) + su/sudo apt-get install mysql-server-5.0 (or latest available version) + su/sudo apt-get install mysql-client-5.0 (or latest available version) + su/sudo apt-get install mysql-common + su/sudo apt-get install libmysqlclient16 (or latest available version) + su/sudo apt-get install libmysqlclient16-dev (or latest available version) + su/sudo apt-get install glade + su/sudo apt-get install ntp (http://howto.eyeoncomputers.com/ubuntu/install-ntp/) + + For detailed explanation of iPDC, DBServer, and PMUSimulator working refer the User Manual. Available on website. Make sure you have done with the dependency installation before go for installation of iPDC software. + + A) iPDC Installation -> + + Multiple instance can be run on same machine by ONLY one time installation. + First go to the source folder on terminal then, + + 1. Extract iPDC.x.y.tar.gz. + 2. cd iPDC.x.y/iPDC.x + 3. su/sudo make install (It will be needing root permision to create folder & copying file on them) + 4. Run iPDC via terminal or you could found its shortcut on menu named iPDC. + + + B) Install DBServer -> + + DBServer can be installed on the same machine or a different machine. + If DBServer is to be installed on a different machine then copy iPDC.x.y/DBServer to that machine(cp iPDC.x.y/DBServer /PATH....). Install dependencies like demysql-server-5.0, mysql-common, libmysqlclient15off, mysql-client-5.0. on that machine and Then follow the steps given below. + + 1. cd /PATH/iPDC.x.y/DBServer.x.y + 2. mysql -u root -p <"Db.sql" + 3. make + 4. ./DBServer or DBServer (accesseble only from folder) + + C) Install PMUSimulator -> + + If you need to run simulator on different from iPDC machine then Copy the PMU Simulator on that machine. + Single installation of PMU Simulator will work in case you need to simulate multiple PMUSimulator on the same machine. + + 1. cd /PATH/iPDC.x.y/PMUSimulator.x.y + 2. su/sudo make install (It will be needing root permision to create folder & copying file on them) + 3. Run - PMU via terminal or you could found its shortcut on menu name PMU Simulator. + + +USAGE +------ + + i) When iPDC acts as a Client -> + + 1. Run DBServer on terminal of the machine where DBServer is installed. This will be listening on port 9000 for data & CFG frames from iPDC. + + 2. Run PMU Simulator in the machine where PMUSimulator is installed. You can run the PMU Simulator from anywhere in the system. Enter the PMU Port numbers for TCP and UDP. Port should be other than 9000, as 9000 is used by DBServer. + + 3. Run iPDC and enter the details like TCP Port, UDP Port. + These are the ports on which PDC would listen to command frames from other PDC's, or applications. + Also enter PDC ID, that will be use for authenticate to other ends PDC's. + Enter the IP Address of the machine where DBServer is running. (if local, may use like 127.0.0.1) + Now add the PMU/Source devices by entring their minimal details. + As soon as the PMU details are entered, a command frame is sent to machine where the PMU/Simulator is running. + And communication between iPDC and PMUSimulator (PMU) will take place as follows. + + + 4. Communications + + 1. iPDC sends a command frame to PMU, requesting its configuration. + + 2. At PMU on receiving of a request for Configuration frame, PMU send back the latest configuration frame iPDC. + + 3. iPDC then send a command frame to requesting PMU to start data frames transmission. + + 4. PMU on reception of the command frame for send data would reply with data frames. + + iPDC -----------> PMU (Command to send CFG) + iPDC <----------- PMU (CFG Sent) + iPDC -----------> PMU (Command to send Data) + iPDC <----------- PMU (Data Sent) + iPDC <----------- PMU (Data Sent) + iPDC <----------- PMU (Data Sent) + iPDC -----------> PMU (Command to stop Data) + + 5. In the above mentioned PMU-iPDC communication, iPDC would act as a client and PMU as server. + + ii) When iPDC acts as a Server -> + + When iPDC acts as a Server, it sends the combined frames (data and Configuration) to other iPDC on requesting. + The details of these other end iPDC's need to be entered first. In this case the iPDC would work like as PMU Server. + iPDC receives a command frames from other iPDC it would first authenticate the request. + If the request is from authentic iPDC then combined frame would sent to respective iPDC. Remaining same as iPDC-PMU Communication. + / + More details of the s/w can be found in the Technical Report on iPDC on the website. + + +UNINSTALL +---------- + + Uninstall iPDC -> + cd iPDC.x.y/iPDC.x/ + su/sudo make uninstall (will be needing roots permission) + + Uninstall DBServer -> + cd iPDC.x.y/DBServer.x/ + make clean + + Uninstall PMUSimulator -> + cd iPDC.x.y/PMUSimulator.x/ + su/sudo make uninstall (will be needing roots permission) + + +Future Planning +-------------- + + We are planning of having following major Future milestone. Help and suggestions are required from open source community. + + 1. Visualization applications for phasor data. + 2. Porting of complete iPDC software on Windows Environment + 3. Import/export Data file in comtrade format. + + These are our major thrust area, currently the only way to study the data is in MySQL database, or in DBserver terminal, but it is not sufficient! We intend to develop a interface (something like charting Visualization) in which we can render the data in real time. + + To increase the usability and versatility of the application second objective is also appears to be quite essential due to the popularity of the windows environment. + + +Can I HELP?? +----------------- + + Yes, SURE you can help us..!! in fact we really NEED you and will be happy to have your support. + We have brought the project up to this level but as all other open source software project + this project also needs programmer/developer community's Love, Care & Support. + So please FEEL FREE to join us - support us – Contact us in any ways you wish... + + +How Can I HELP? +------------------ + + Currently you can help us (mainly) in following ways + + 1. If you are good UI designer (QT, JNI, GTK, Pyton, etc... anything) then please help us design more user friendly and attractive GUI for iPDC. + 2. If you are good (or even rookie will also do, because no body is a born programmer!!) at Visualization programming like charting API, graphics or any other data rendering methods which can handle large amount of data and possibilily in real time using python, C/C++, Perl etc. + 3. Apart from above mentioned things, if there is anything else you think needs to be done for improvement(OBVIOUSLY!!) of the project and in that you can help us, please DO CONTACT US. We will be more than happy to have your support. + 4. If possible please let us know where you are using iPDC software. This really help us. + + +PROBLEMS & FAQ +--------------- + + If you get into problems, find this application useful or find bug in the software, just feel anything except nothing about it. + Please feel free to contact us through bug report on website's discussions page or issue tracker page or via email. + Our motivation for further work grows with every mail. + Join the forum/issue tracker on the iPDC websites to get latest updates about iPDC software. + + +How to Reach Us:- +------------------ + + Nitesh Pandit : panditnitesh@gmail.com + + Gopal Gajjar: gopal@ee.iitb.ac.in + + Kedar Khandeparkar: kedark@ee.iitb.ac.in + + Rathin Dholakia: rathindholakia@gmail.com + + Or you can visit our sites: + "http://ipdc.codeplex.com/", + "http://sourceforge.net/projects/iitbpdc/", + "http://wafms.co.cc" + + +Credits +-------- + + C and GCC for programming language and compiler respectively. + MySQL database for iPDC Database. + GDB as debugging tool for software. + Glade & GTK+ for GUI functionality of software. + Dia software for image creation for report and docs. + Kile for report generation and also for presentation. + Wireshark for IEEE C37.118 protocol understanding and testing. + www.photoserch.com for Royalty Free Images. + www.onlinelogomaker.com for logo creation of software. + And many other open source softwares and websites/forums that has been contributed to iPDC project directly or indirectly. + + +Note +----- + + CFG stands for Configuration Frame. + If NTP Client is not running on the machines where iPDC, PMU Simulator, and DBserver running, so they will not be time synchronized. Your final results may be incorrected. + NTP Client and your near server of NTP is highly recommended. You can also use IIT Bombay's NTP Server. + Commands for NTP has not been added into makefile, so if you want NTP synchronization then please install NTP client and start it. For installation of NTP-client and NTP-server configuration on your Linux machine please visit respective community website. diff --git a/Release Notes 1.3.1 b/Release Notes 1.3.1 new file mode 100755 index 0000000..e97a93b --- /dev/null +++ b/Release Notes 1.3.1 @@ -0,0 +1,78 @@ +/* ----------------------------------------------------------------- + * Release Notes* + * + * iPDC - A Free Phasor Data Concentrator + * Covered under the GPL License 3.0. + * + * Copyright (C) 2012 Nitesh Pandit + * Copyright (C) 2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * --------------------------------------------------------------- */ + +-------------------------------------------------------------------------- +04.09.2012 : iPDC suite version-1.3.1 Changes and Bug Fixed (from v 1.3.0) +-------------------------------------------------------------------------- + + New User Manual for iPDC-v1.3.1 available on websites. + + Bug resolved : PMU Simulator TCP connection error and hang connection for client (PDC). + + Now PMU Simulator (server) can communicate more than one PDCs (clients) over TCP and UDP parallely. + + PMU Simulator is now sending the exact data frames as mentioned in data rate by user. + + PMU Simulator data rate has been verified by iPDC database entries and PMU Connection Tester. + + PMU Simulator is now having an option to introduce CheckSum error in a sending data frame. + + Bug resolved : Digital word resolution for configuration parser in parser.c from iPDC & DBServer modules. + + New table has added to DBServer modules named RECEIVED_FRAME_TIME. This table stores REceived frame time log in iPDC Database. + + Stability increased of iPDC Database Server for handling dynamic changes and continuous storage of data. + + Now PHASOR_MEASUREMENTS are storing in Polar format AMPLITUDE and ANGLE. + + Table attributes and Primary Key have been changed for some tables in iPDC Database. + + Now the measurements are storing in the file also along with MySQL database by DBServer. + + The 'images' folder is added in iPDC and PMUSimulator packages to store project images. + + iPDC.desktop and PMU.desktop files are added to iPDC and PMUSimulator respectively. These files will create Menu shortcuts. + + File overwite feature for iPDC and PMU Configuration has been added. + + Makefile has been updated for new version installation. + + GUI modifications for iPDC and PMUSimulator have been done in many aspects. + + iPDC, DBServer and PMUSimulator are successfully tested with physical devices individually. + + Sample Measurement files for 50 and 60 Hz are present in the PMUSimulator folder, and will be copied to /home/$USER/iPDC/DataDir* during installation of Simulator. + + iPDC_DB_Queries is removed from iPDC. + + In DBServer folder 'Sample DBConnect.c' (earlier db.c) is a sample file having the C program to connect the MySQL-Database. The same file is also having the iPDC-Database tables and different queries. + + For more details please refer the UserManual-1.3.1. + +-----------------------------------------------Enf of File---------------------------------------- diff --git a/change.log b/change.log new file mode 100755 index 0000000..1608967 --- /dev/null +++ b/change.log @@ -0,0 +1,209 @@ +/* ----------------------------------------------------------------- + * Change.log + * + * iPDC - A Free Phasor Data Concentrator + * Covered under the GPL License 3.0. + * + * Copyright (C) 2012 Nitesh Pandit + * Copyright (C) 2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * --------------------------------------------------------------- */ + + +10.05.2011 : First release, version 1.0.0 + + + Size of variable char buff[] changed from 2000 to 10000 in file ipdcGui.h. + + Size of MAXBUFLEN from from file global.h has been changed to 10000. + + A member variable int tcpup has been added to struct Upper_Layer_Details in file connections.h + + [for more info read the Release Notes] +--------------------------- + +5.11.2011 : Second release, version 1.1.0 + + Bugs fixed and no modification for DBServer-1.0. + [for more info read the Release Notes] + +--------------------------- + +08.12.2011 : Third release, version 1.2.0 + + No modifications iPDC-v1.1 and not also for DBServer-1.0. + New features are added in PMUSimulator-1.2 i.e. read measurements + from csv file, etc. [for more info read the Release Notes] + +--------------------------- + +09.02.2012 : Forth release, version 1.2.1 + + Changes in iPDC : + + Removed opening of extra terminal for displaying the received data. + + No changes in DBServer. + + New features to PMU Simulator-1.2.1 + + Major changes in PMU Simulator : + + Bug Resolution : + + Resolved bug causing unexpected crash in PMU Simulator on some operating systems. + + Resolved bug in reporting of frequency. + + New Features: + + Now the configuration file can be saved for future use. The files are saved in ~/iPDC/ directory and can be reloaded again. + + Simplified the work flow for starting the PMU simulator server and reading the data for simulation from a CSV file. + + Now multiple PMU simulators can be run on single machine simultaneously. + + The simulator would loop through the data file continuously until stopped through PDC command or exiting PMU Simulator. + + [for more info read the Release Notes] + +--------------------------- + +23.05.2012 : Fifth release, version 1.3.0 + + Now ChangeLog, COPYING, and Release_note files are become common. Previously these three files have seprate copy in each individual folders. + + Changes in iPDC-1.3 : + + Bug Resolution : + + None. + + New Features: + + Now iPDC has a centralized file structure. + + Only a single file for each iPDC and that will store with iPDC-ID. File structure will be explained in release notes document. + + A setup file for a iPDC will contains the information about + iPDC Server, + Connected Source Devices, + Connected Destination Devices, and + finally configuration frames of sources. + + Because of this single Setup File previously generated four local file will not be crated in the iPDC source folder, they are + pdc.txt + ipaddress.txt + upperpdc_ip.txt + cfg.bin + + Now the iPDC setup is already saved and could be reload on restart of iPDC. The files are saved in $HOME~/iPDC/iPDC/ directory. + + Installation of iPDC will create folder name iPDC at /usr/local/share/iPDC & copy the four files into it, for global run + iPDC.xml + ipdcLogo.png + ipdcLogo1.png + PSLAB.PNG + + Now multiple iPDC can be run on single machine simultaneously through only single installation. + + User is able to view the Setup File before uploading on iPDC. + + Setup File will only used for reloading. All operations are based on memory objects and only certain changes will lead to setup file access. + + + No changes in DBServer-1.0. + + + Changes in PMU Simulator : + + Bug Resolution : + + TCP server error has been resolved. Now it will be remain in listening mode after iPDC connection got closed. + + New Features: + + Now PMU Simulator has a centralized file structure. + + Only a single file for each PMU Simulator and that will store with PMU-ID. File structure will be explained in release notes document. + + A setup file for a PMU Simulator will contains the information about + PMU Server, and + Configuration frame. + + Because of this single Setup File previously generated three local file will not be crated in the PMU Simulator source folder, they are + pmuServer.txt + cfg2.bin + header.bin + + Now the PMU Simulator setup is already saved and could be reload on restart of PMU. The files are saved in $HOME~/iPDC/PMU/ directory. + + Installation of PMU Simulator will create folder name PMU at /usr/local/share/PMU & copy the four files into it, for global run + pmu.xml + pmuLogo.png + pmuLogo1.png + PSLab.PNG + + Now multiple PMU Simulator can be run on single machine simultaneously through only single installation. + + User is able to view the Setup File before uploading on PMU Simulator. + + Setup File will only used for reloading. All operations are based on memory objects and only certain changes will lead to setup file access. + + [for more info read the Release Notes] + + iPDC and PMU Simulator logos and slight GUI modification has been done. + + +--------------------------- + +04.09.2012 : Sixth release, version 1.3.1 + +1. Updated iPDC modules +2. Changed iPDC GUI + 2.1 Removed image buttons + 2.2 Changed the dashboard image + 2.3 Disabled Fields now invisible + 2.4 Added "Select All" Function + 2.5 Added local System Time Display + 2.6 Added Setup file overwrite warrning +3. Modified the make file, required for software icon in status bar. +4. Added menu item support +5. Fixed Ubuntu Unity Global menu error +6. PMU GUI changes:- + 4.1 Added Local System Time display + 4.2 Removed image buttons + 4.3 Added Setup file overwrite warrning +7. Changed PMU algorithm for multiple connection by PDC client at PMU Server. +8. Fixed: GUI crashing when selecting "Change Data Rate" +9. Fixed: Rectangular to Polar conversion bug, +10. Added: Received Frame Time in Database +11. Fixed: n-phasors & n-analogs configuration was showing wrong phasor magnitude. +12. Added: Overwrite Function for iPDC and PMU configuration file. +13. Added: new Measurement files with proper directory structure. +14. Pending: In Float-Float-Rec Combination, even if POW is selected, database logs it as PEAK only + +Future Milestones:- + +What we are (and you should) EXPECT in our Future Release:- + 1. Visualization facility to see and Rendering data visibilly + 2. Port the Programme to Windows Environment + 3. Import/Exort data in COMTRADE format. + 4. Check and implement Real Time Application Interface + +-----------------------------------------------Enf of File---------------------------------------- diff --git a/iPDC/Doxyfile b/iPDC/Doxyfile new file mode 100755 index 0000000..e6dc49a --- /dev/null +++ b/iPDC/Doxyfile @@ -0,0 +1,1285 @@ + # ----------------------------------------------------------------------------- + # Doxyfile for documentation of iPDC + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = iPDC - (Phasor Data Concentrator) + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /usr/local/bin/dot + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/iPDC/Makefile b/iPDC/Makefile new file mode 100755 index 0000000..04e0448 --- /dev/null +++ b/iPDC/Makefile @@ -0,0 +1,94 @@ + # ----------------------------------------------------------------------------- + # Makefile for building iPDC + + # iPDC - Phasor Data Concentrator + # + # Copyright (C) 2011 Nitesh Pandit + # Copyright (C) 2011 Kedar V. Khandeparkar + + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # Authors: + # Nitesh Pandit + # Kedar V. Khandeparkar + # + # ----------------------------------------------------------------------------- + + +SHELL = /bin/sh +prefix = /usr/local +includedir = /usr/src/include + +INSTALL = /usr/bin/install -c +INSTALL_PREFIX = /usr/local/ +CREATE_DIR = /usr/local/share/ +DESKTOP_DIR = /usr/share/applications + +FILE1 = iPDC.xml +FILE2 = ipdcLogo.png +FILE3 = PSLab.PNG +FILE4 = ipdcLogo1.png +FILE5 = logo.png +FILE6 = iPDC.desktop + +CC = gcc +LIBS = -lpthread +LDLIBS=`pkg-config --cflags --libs gtk+-2.0` +CFLAGS=-g -fcommon `pkg-config --cflags --cflags gtk+-2.0` + +SOURCES = \ + ipdc.c \ + recreate.c recreate.h \ + connections.c connections.h \ + new_pmu_or_pdc.c new_pmu_or_pdc.h \ + parser.c parser.h \ + dallocate.c dallocate.h \ + align_sort.c align_sort.h \ + ipdcGui.c ipdcGui.h + +OBJECTS = ipdc.c recreate.o connections.o new_pmu_or_pdc.o parser.o dallocate.o align_sort.o ipdcGui.o + +CLEAN_OBJECTS = recreate.o connections.o new_pmu_or_pdc.o parser.o dallocate.o align_sort.o ipdcGui.o iPDC.xml + +PROGRAM = iPDC + +COMPILE = $(CC) + +$(PROGRAM): $(OBJECTS) + $(CC) $(OBJECTS) $(LDLIBS) $(LIBS) -o $@ + +%.o: %.c + $(COMPILE) $(CFLAGS) -c $< + +install: $(PROGRAM) + gtk-builder-convert iPDC.glade iPDC.xml + mkdir -p $(CREATE_DIR)iPDC/$ + cp -f $(FILE1) $(CREATE_DIR)iPDC/$(FILE1) + cp -f images/$(FILE2) $(CREATE_DIR)iPDC/$(FILE2) + cp -f images/$(FILE3) $(CREATE_DIR)iPDC/$(FILE3) + cp -f images/$(FILE4) $(CREATE_DIR)iPDC/$(FILE4) + cp -f images/$(FILE5) $(CREATE_DIR)iPDC/$(FILE5) + cp -f images/$(FILE6) $(DESKTOP_DIR)/$(FILE6) + cp $(PROGRAM) $(INSTALL_PREFIX)bin/$(PROGRAM) +# rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +uninstall: + rm -f $(INSTALL_PREFIX)bin/$(PROGRAM) + rm -rf $(CREATE_DIR)iPDC$ + rm -rf $(DESKTOP_DIR)/$(FILE6) + rm -f $(CLEAN_OBJECTS) $(PROGRAM) + +clean: + rm -f $(CLEAN_OBJECTS) $(PROGRAM) diff --git a/iPDC/align_sort.c b/iPDC/align_sort.c new file mode 100755 index 0000000..78aaa64 --- /dev/null +++ b/iPDC/align_sort.c @@ -0,0 +1,1016 @@ +/* ----------------------------------------------------------------------------- + * align_sort.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "align_sort.h" +#include "connections.h" +#include "dallocate.h" + + +/* ------------------------------------------------------------------------------------ */ +/* Functions in align_sort.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. void time_align(struct data_frame *df) */ +/* 2. void assign_df_to_TSB(struct data_frame *df,int index) */ +/* 3. void dispatch(int index) */ +/* 4. void sort_data_inside_TSB(int index) */ +/* 5. void clear_TSB(int index) */ +/* 6. void create_dataframe(int index) */ +/* 7. void create_cfgframe() */ + +/* -----------------------------------------------------------------------------*/ + + +int i; +int front = -1; +int rear = -1; +pthread_mutex_t mutex_on_TSB = PTHREAD_MUTEX_INITIALIZER; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION time_align(): */ +/* It searches for the correct TSB[index] where data frame df is to be */ +/* assigned. If the df has soc and fracsec which is older then soc and fracsec */ +/* of TSB[first] then we discard the data frame */ +/* ---------------------------------------------------------------------------- */ + +void time_align(struct data_frame *df) { + + int flag = 0; + + pthread_mutex_lock(&mutex_on_TSB); + if(front == -1) { // TSB is used for the first time + + front = rear = 0; + assign_df_to_TSB(df,front); + pthread_mutex_unlock(&mutex_on_TSB); + return; + + } else { + + unsigned long int df_soc,df_fracsec,tsb_soc,tsb_fracsec; + + df_soc = to_long_int_convertor(df->soc); + df_fracsec = to_long_int_convertor(df->fracsec); + tsb_soc = to_long_int_convertor((unsigned char *)TSB[front].soc); + tsb_fracsec = to_long_int_convertor((unsigned char *)TSB[front].fracsec); + + if((df_soc < tsb_soc) || ((df_soc == tsb_soc) && (df_fracsec < tsb_fracsec))) { + + pthread_mutex_unlock(&mutex_on_TSB); + return; + } + + if(rear >= front) { + for(i = rear; i>= front; i--) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].soc,df->soc,4)) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].fracsec,df->fracsec,3)) { /* 3 bytes is actual fraction of seconds and 1 byte is Time quality */ + + flag = 1; + break; + + } + + } else { + + continue; + + } //if for soc ends + }// for ends + } else { + + for(i = rear; i< front; i++) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].soc,df->soc,4)) { + + if(!ncmp_cbyc ((unsigned char *)TSB[i].fracsec,df->fracsec,3)) { /* 3 bytes is actual fraction of seconds and 1 byte is Time quality */ + + flag = 1; + break; + } + + } else { + + continue; + + } //if for soc ends + }// for ends + } + + } // if other than the front = -1 + + if(flag) { + + //Assign to existing TSB + assign_df_to_TSB(df,i); + + } else { + + rear = (rear + 1) % MAXTSB; + + if(front == rear) { // All TSB are full. Dispatch the TSB[rear] and use it to assign new df + + dispatch(rear); + front = (front + 1) % MAXTSB; + assign_df_to_TSB(df,rear); + + } else { + + assign_df_to_TSB(df,rear); + + } + } + pthread_mutex_unlock(&mutex_on_TSB); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION assign_df_to_TSB(): */ +/* It assigns the arrived data frame df to TSB[index] */ +/* ---------------------------------------------------------------------------- */ + +void assign_df_to_TSB(struct data_frame *df,int index) { + + /* Check if the TSB is used for the first time. If so we need to + allocate memory to its member variables */ + if(TSB[index].soc == NULL) { // 1 if + + struct cfg_frame *temp_cfg = cfgfirst; + + TSB[index].soc = malloc(5); + TSB[index].fracsec = malloc(5); + + memset(TSB[index].soc,'\0',5); + memset(TSB[index].fracsec,'\0',5); + + copy_cbyc((unsigned char *)TSB[index].soc,df->soc,4); + copy_cbyc((unsigned char *)TSB[index].fracsec,df->fracsec,4); + + TSB[index].first_data_frame = df; /* Assign df to the 'first_data_frame' in the data frame linked list of TSB[index] */ + + /* Now we need to store the pmu/pdc id in the pmupdc_id_list that would be required while sorting */ + struct pmupdc_id_list *temp_pmuid; + while(temp_cfg != NULL) { + + /* Create a node of the type 'pmupdc_id_list' and copy the pmu/pde id from the cfg to it */ + struct pmupdc_id_list *pmuid = malloc(sizeof(struct pmupdc_id_list)); + pmuid->idcode = malloc(3); + memset(pmuid->idcode,'\0',3); + copy_cbyc((unsigned char *)pmuid->idcode,temp_cfg->idcode,2); + pmuid->num_pmu = to_intconvertor(temp_cfg->num_pmu); + pmuid->nextid = NULL; + + if(TSB[index].idlist == NULL) { /* Assign the pmuid to the idlist as it is the first id in the list */ + + TSB[index].idlist = temp_pmuid = pmuid; + + } else { + + temp_pmuid->nextid = pmuid; + temp_pmuid = pmuid; + + } + + temp_cfg = temp_cfg->cfgnext; + } // while ends . A pmu/pdc id list is created for the TSB[index] + + } else { // 1 if else + + struct cfg_frame *temp_cfg = cfgfirst; + if(TSB[index].first_data_frame == NULL) { // 2 if + + /* After TSB[index] is cleared this is the first data frame for it. + The memory for the member variables of TSB[index] has already + been allocated. Hence after dispatch() and clear_TSB() operation + this TSB is to be assigned the data_frame for the first time. */ + + copy_cbyc((unsigned char *)TSB[index].soc,df->soc,4); + copy_cbyc((unsigned char *)TSB[index].fracsec,df->fracsec,4); + + TSB[index].first_data_frame = df; /* Assign df to the 'first_data_frame' in the data frame linked list of TSB[index] */ + + /* Now we need to store the pmu/pdc id in the pmupdc_id_list + that would be required while sorting */ + struct pmupdc_id_list *temp_pmuid; + while(temp_cfg != NULL) { + + /* Create a node of the type 'pmupdc_id_list' and + copy the pmu/pde id from the cfg to it */ + + struct pmupdc_id_list *pmuid = malloc(sizeof(struct pmupdc_id_list)); + pmuid->idcode = malloc(3); + memset(pmuid->idcode,'\0',3); + copy_cbyc((unsigned char *)pmuid->idcode,temp_cfg->idcode,2); + pmuid->num_pmu = to_intconvertor(temp_cfg->num_pmu); + pmuid->nextid = NULL; + + if(TSB[index].idlist == NULL) { /* Assign the pmuid to the idlist as it is the first id in the list */ + + TSB[index].idlist = temp_pmuid = pmuid; + + } else { + + temp_pmuid->nextid = pmuid; + temp_pmuid = pmuid; + + } + + temp_cfg = temp_cfg->cfgnext; + } // while ends + + } else { // 2 if else + + /* Traverse the data frames of TSB[index] and assign the df to 'dnext' of + the last element in the data frame LL.*/ + struct data_frame *temp_df,*check_df; + + /* Need to check if df with same idcode and soc is already assigned to + the TSB[index] */ + check_df = TSB[index].first_data_frame; + while(check_df != NULL) { + + if(!ncmp_cbyc(check_df->idcode,df->idcode,2)) { + + free_dataframe_object(df); + return; + + } else { + + check_df = check_df->dnext; + + } + } + + temp_df = TSB[index].first_data_frame; + while(temp_df->dnext != NULL) { + + temp_df = temp_df->dnext; + + } + + temp_df->dnext = df; + } // 2 if ends + + } // 1 if ends +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dispatch(): */ +/* It dispatches the combined data frame to all the destination devices */ +/* ---------------------------------------------------------------------------- */ + +void dispatch(int index) { + + int size,flag = 0; + sort_data_inside_TSB(index); + dataframe = NULL; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + struct Upper_Layer_Details *temp_pdc = ULfirst; + + while(temp_pdc != NULL ) { + + if((temp_pdc->UL_upper_pdc_cfgsent == 1) && (temp_pdc->UL_data_transmission_off == 0)) { + + if(flag == 0) { + + size = create_dataframe(index); + flag = 1; + } + + if(temp_pdc->config_change == 1) { + + dataframe[14] = 0x04; + dataframe[15] = 0x00; + + } else { + + dataframe[14] = 0x00; + dataframe[15] = 0x00; + + } + + if(temp_pdc->port == UDPPORT) { + + if (sendto(temp_pdc->sockfd,dataframe, size, 0, + (struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1) + perror("sendto"); + + } else if((temp_pdc->port == TCPPORT) && (temp_pdc->tcpup == 1)) { + + if(send(temp_pdc->sockfd,dataframe,size, 0)== -1) { + perror("send"); + printf("TCP connection closed\n"); + temp_pdc->tcpup = 0; + pthread_cancel(temp_pdc->thread_id); + } + } + } + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + if(dataframe != NULL) free(dataframe); + + clear_TSB(index); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION sort_data_inside_TSB(): */ +/* This function sorts the data frames in the TSB[index] in the order of the */ +/* Idcodes present in the 'struct pmupdc_id_list list' of the TSB[index] */ +/* ---------------------------------------------------------------------------- */ + +void sort_data_inside_TSB(int index) { + + struct pmupdc_id_list *temp_list; + struct data_frame *prev_df,*curr_df,*sorted_df,*r_df,*s_df,*last_df,*p_df; + int match = 0; + unsigned int id_check; + + /* Pointer track_df will hold the address of the last sorted data_frame object. + Thus we assign to the 'track_df->dnext ' the next sorted data_frame object and so on */ + + temp_list = TSB[index].idlist; /* Starting ID required for sorting */ + last_df = TSB[index].first_data_frame; + p_df = TSB[index].first_data_frame; + + curr_df = last_df; + sorted_df = prev_df = NULL; + + while(temp_list != NULL) { // 1 while + + match = 0; + while(curr_df != NULL) { // 2. Traverse the pmu id in TSB and sort + + if(!ncmp_cbyc(curr_df->idcode,(unsigned char *)temp_list->idcode,2)){ + + match = 1; + break; + + } else { + + prev_df = curr_df; + curr_df = curr_df->dnext; + + } + + } // 2 while ends + + if (match == 1) { + + if(prev_df == NULL) { + + r_df = curr_df; + s_df = curr_df->dnext; + if(sorted_df == NULL) { + + sorted_df = r_df; + TSB[index].first_data_frame = sorted_df; + } else { + + sorted_df->dnext = r_df; + sorted_df = r_df; + } + sorted_df->dnext = s_df ; + curr_df = last_df = s_df; + + } else { + + if(sorted_df == NULL) { + + r_df = curr_df; + s_df = r_df->dnext; + prev_df->dnext = s_df; + sorted_df = r_df; + TSB[index].first_data_frame = sorted_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + + } else {//if(sorted_df != NULL) { + + r_df = curr_df; + s_df = r_df->dnext; + prev_df->dnext = s_df; + sorted_df->dnext = r_df; + sorted_df = r_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + } + } + + } else { // id whose data frame didnot arrive No match + + char *idcode; + idcode = malloc(3); + + struct data_frame *df = malloc(sizeof(struct data_frame)); + if(!df) { + + printf("Not enough memory data_frame.\n"); + } + df->dnext = NULL; + + // Allocate memory for df->framesize + df->framesize = malloc(3); + if(!df->framesize) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->idcode + df->idcode = malloc(3); + if(!df->idcode) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->soc + df->soc = malloc(5); + if(!df->soc) { + + printf("Not enough memory df->soc\n"); + exit(1); + } + + // Allocate memory for df->fracsec + df->fracsec = malloc(5); + if(!df->fracsec) { + + printf("Not enough memory df->fracsec\n"); + exit(1); + } + + /* 16 for sync,fsize,idcode,soc,fracsec,checksum */ + unsigned int size = (16 + (temp_list->num_pmu)*2)*sizeof(unsigned char); + + df->num_pmu = temp_list->num_pmu ; + + //Copy FRAMESIZE + int_to_ascii_convertor(size,df->framesize); + df->framesize[2] = '\0'; + + //Copy IDCODE + copy_cbyc (df->idcode,(unsigned char *)temp_list->idcode,2); + df->idcode[2] = '\0'; + + //Copy SOC + copy_cbyc (df->soc,(unsigned char *)TSB[index].soc,4); + df->soc[4] = '\0'; + + //Copy FRACSEC + copy_cbyc (df->fracsec,(unsigned char *)TSB[index].fracsec,4); + df->fracsec[4] = '\0'; + + df->dpmu = malloc(temp_list->num_pmu * sizeof(struct data_for_each_pmu *)); + if(!df->dpmu) { + + printf("Not enough memory df->dpmu[][]\n"); + exit(1); + } + + for (i = 0; i < temp_list->num_pmu; i++) { + + df->dpmu[i] = malloc(sizeof(struct data_for_each_pmu)); + } + + int j = 0; + + // PMU data has not come + while(j < temp_list->num_pmu) { + + df->dpmu[j]->stat = malloc(3); + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + df->dpmu[j]->stat[0] = 0x00; + df->dpmu[j]->stat[1] = 0x0F; + df->dpmu[j]->stat[2] = '\0'; + j++; + } + + if(sorted_df == NULL) { + + r_df = df; + sorted_df = r_df; + TSB[index].first_data_frame = sorted_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + + } else { + + r_df = df; + sorted_df->dnext = r_df; + sorted_df = r_df; + sorted_df->dnext = last_df ; + curr_df = last_df; + prev_df = NULL; + } + } + + temp_list = temp_list->nextid; //go for next ID + + } // 1. while ends + + p_df = TSB[index].first_data_frame; + while(p_df != NULL){ + + id_check = to_intconvertor(p_df->idcode); + p_df = p_df->dnext; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION clear_TSB(): */ +/* It clears TSB[index] and frees all data frame objects after the data frames */ +/* in TSB[index] have been dispatched to destination device */ +/* ---------------------------------------------------------------------------- */ + +void clear_TSB(int index) { // + + unsigned long int tsb_soc,tsb_fracsec; + tsb_soc = to_long_int_convertor((unsigned char *)TSB[front].soc); + tsb_fracsec = to_long_int_convertor((unsigned char *)TSB[front].fracsec); + + memset(TSB[index].soc,'\0',5); + memset(TSB[index].fracsec,'\0',5); + + struct pmupdc_id_list *t_list,*r_list; + t_list = TSB[index].idlist; + + while(t_list != NULL) { + + r_list = t_list->nextid; + free(t_list->idcode); + free(t_list); + t_list = r_list; + } + + struct data_frame *t,*r; + t = TSB[index].first_data_frame; + + while(t != NULL) { + + r = t->dnext; + free_dataframe_object(t); + t = r; + } + + TSB[index].first_data_frame = NULL; + TSB[index].idlist = NULL; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_dataframe(): */ +/* It creates the IEEEC37.118 Standard based combined data frame from the data */ +/* frames received from all the source devices to be sent to destination */ +/* devices */ +/* ---------------------------------------------------------------------------- */ + +int create_dataframe(int index) { + + int total_frame_size = 0; + unsigned char temp[3]; + struct data_frame *temp_df; + unsigned int fsize; + uint16_t chk; + + temp_df = TSB[index].first_data_frame; + + while(temp_df != NULL) { + + fsize = to_intconvertor(temp_df->idcode); + fsize = to_intconvertor(temp_df->framesize); + total_frame_size = total_frame_size + fsize; + total_frame_size -= 16; // skip SYNC + FRAMESIZE + idcode + soc + fracsec + checksum + temp_df = temp_df->dnext; + } + + total_frame_size = total_frame_size + 18/* SYNC + FRAMESIZE + idcode + soc + fracsec + checksum + outer stat */; + + dataframe = malloc((total_frame_size + 1)*sizeof(char)); // Allocate memory for data frame + if(!dataframe) { + + printf("No enough memory for dataframe\n"); + } + dataframe[total_frame_size] = '\0'; + + // Start the data frame creation + int z = 0; + byte_by_byte_copy(dataframe,DATASYNC,z,2); // SYNC + z += 2; + + memset(temp,'\0',3); + int_to_ascii_convertor(total_frame_size,temp); + byte_by_byte_copy(dataframe,temp,z,2); // FRAME SIZE + z += 2; + + memset(temp,'\0',3); + int_to_ascii_convertor(PDC_IDCODE,temp); + byte_by_byte_copy(dataframe,temp,z,2); // PDC ID + z += 2; + + byte_by_byte_copy(dataframe,(unsigned char *)TSB[index].soc,z,4); //SOC + z += 4; + byte_by_byte_copy(dataframe,(unsigned char *)TSB[index].fracsec,z,4); //FRACSEC + z += 4; + + unsigned char stat[2]; //Outer Stat + stat[0] = 0x00; + stat[1] = 0x00; + byte_by_byte_copy(dataframe,stat,z,2); //outer stat + z += 2; + + temp_df = TSB[index].first_data_frame; + while(temp_df != NULL) { // 1 + + int j = 0; + while(j < temp_df->num_pmu) { // 2 + + if(temp_df->dpmu[j]->stat[1] == 0x0f) { + + // Copy STAT + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->stat,z,2); + z += 2; + j++; + continue; + } + + //Copy STAT + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->stat,z,2); + + z += 2; + + int i = 0; + + //Copy Phasors + if(temp_df->dpmu[j]->phnmr != 0) { + + if(temp_df->dpmu[j]->fmt->phasor == '1') { + + while(i < temp_df->dpmu[j]->phnmr) { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->phasors[i],z,8); // Phasors + z += 8; + i++; + } + + } else { + + while(i < temp_df->dpmu[j]->phnmr) { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->phasors[i],z,4); // Phasors + z += 4; + i++; + } + } + } + + //Copy FREQ + if(temp_df->dpmu[j]->fmt->freq == '1') { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->freq,z,4); // FREQ + z += 4; + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->dfreq,z,4); // FREQ + z += 4; + + } else { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->freq,z,2); // FREQ + z += 2; + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->dfreq,z,2); // FREQ + z += 2; + + } + + // Copy Analogs + if(temp_df->dpmu[j]->annmr != 0) { + + if(temp_df->dpmu[j]->fmt->analog == '1') { + + for(i = 0; idpmu[j]->annmr; i++){ + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->analog[i],z,4); // ANALOGS + z += 4; + } + + } else { + + for(i = 0; idpmu[j]->annmr; i++){ + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->analog[i],z,2); // ANALOGS + z += 2; + } + } + } + + i = 0; + + //Copy DIGITAL + if(temp_df->dpmu[j]->dgnmr != 0) { + + while(i < temp_df->dpmu[j]->dgnmr) { + + byte_by_byte_copy(dataframe,temp_df->dpmu[j]->digital[i],z,2); // DIGITAL + z += 2; + i++; + } + } + j++; + } // 2 while + + temp_df = temp_df->dnext; + } // 1 while + + // Attach a checksum + chk = compute_CRC(dataframe,z); + dataframe[z++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + dataframe[z++] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + + return z; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_cfgframe(): */ +/* It creates the IEEEC37.118 Standard based combined configuration frame from */ +/* the configuration frames received from all the source devices to be sent to */ +/* destination devices */ +/* ---------------------------------------------------------------------------- */ + +int create_cfgframe() { + + struct cfg_frame *temp_cfg; + int total_frame_size = 0,count = 0; + unsigned char datarate[2],soc[4],fracsec[4]; // hard coded + int total_num_pmu = 0; + unsigned char time_base[4]; + unsigned int fsize,num_pmu,phnmr,dgnmr,annmr; + unsigned int data_rate,temp_data_rate; + unsigned long int sec,frac = 0,temp_tb,tb; + uint16_t chk; + + sec = (long int)time (NULL); + long_int_to_ascii_convertor(sec,soc); + long_int_to_ascii_convertor(frac,fracsec); + + temp_cfg = cfgfirst; + + while(temp_cfg != NULL) { + + if(count == 0) { // Copy the soc,fracsec,timebase from the first CFG to the combined CFG + + //SEPARATE TIMBASE + tb = to_long_int_convertor(temp_cfg->time_base); + copy_cbyc (time_base,temp_cfg->time_base,4); + + data_rate = to_intconvertor(temp_cfg->data_rate); + copy_cbyc (datarate,temp_cfg->data_rate,2); + + fsize = to_intconvertor(temp_cfg->framesize); + total_frame_size += fsize; + count++; // count used to count num of cfg + + num_pmu = to_intconvertor(temp_cfg->num_pmu); + total_num_pmu += num_pmu; + temp_cfg = temp_cfg->cfgnext; + + } else { + + fsize = to_intconvertor(temp_cfg->framesize); + total_frame_size += fsize; + total_frame_size -= 24; + + // take the Lowest Timebase + temp_tb = to_long_int_convertor(temp_cfg->time_base); + if(temp_tb < tb) { + + copy_cbyc (time_base,temp_cfg->time_base,4); + tb = temp_tb; + + } + + // take the highest data rate + temp_data_rate = to_intconvertor(temp_cfg->data_rate); + if(temp_data_rate > data_rate) { + + copy_cbyc (datarate,temp_cfg->data_rate,2); + data_rate = temp_data_rate; + } + count++; // count used to count num of cfg + + num_pmu = to_intconvertor(temp_cfg->num_pmu); + total_num_pmu += num_pmu; + temp_cfg = temp_cfg->cfgnext; + } + + } // While ENDS + + cfgframe = malloc((total_frame_size + 1)*sizeof(unsigned char)); // Allocate memory for data frame + cfgframe[total_frame_size] = '\0'; + + // Start the Combined CFG frame creation + int z = 0; + byte_by_byte_copy(cfgframe,CFGSYNC,z,2); // SYNC + z += 2; + + unsigned char temp[3]; + memset(temp,'\0',3); + int_to_ascii_convertor(total_frame_size,temp); + byte_by_byte_copy(cfgframe,temp,z,2); // FRAME SIZE + z += 2; + + unsigned char tmp[2]; + tmp[0]= cfgframe[2]; + tmp[1]= cfgframe[3]; + int newl; + newl = to_intconvertor(tmp); + printf("CFG Frame Len %d.\n",newl); + + memset(temp,'\0',3); + int_to_ascii_convertor(PDC_IDCODE,temp); + byte_by_byte_copy(cfgframe,temp,z,2); // PDC ID + z += 2; + + byte_by_byte_copy(cfgframe,soc,z,4); //SOC + z += 4; + byte_by_byte_copy(cfgframe,fracsec,z,4); //FRACSEC + z += 4; + byte_by_byte_copy(cfgframe,time_base,z,4); //TIMEBASE + z += 4; + + memset(temp,'\0',3); + int_to_ascii_convertor(total_num_pmu,temp); + byte_by_byte_copy(cfgframe,temp,z,2); // No of PMU + z += 2; + + int i,j; + temp_cfg = cfgfirst; + + while(temp_cfg != NULL) { // 1 + + num_pmu = to_intconvertor(temp_cfg->num_pmu); + j = 0; + + while (j < num_pmu) { //2 + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->stn,z,16); // STN + z += 16; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->idcode,z,2); // IDCODE + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->data_format,z,2); // FORMAT + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->phnmr,z,2); // PHNMR + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->annmr,z,2); // ANNMR + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->dgnmr,z,2); // DGNMR + z += 2; + + phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); + annmr = to_intconvertor(temp_cfg->pmu[j]->annmr); + dgnmr = to_intconvertor(temp_cfg->pmu[j]->dgnmr); + + // Copy Phasor Names + if(phnmr != 0){ + + for(i = 0; ipmu[j]->cnext->phnames[i],z,16); // Phasor Names + z += 16; + } + } + + // Copy Analog Names + if(annmr != 0){ + + for(i = 0; ipmu[j]->cnext->angnames[i],z,16); // Analog Names + z += 16; + } + } + + // Copy Digital Names + if(dgnmr != 0) { + + struct dgnames *temp_dgname = temp_cfg->pmu[j]->cnext->first; + while (temp_dgname != NULL) { + + for(i = 0;i<16;i++) { + + byte_by_byte_copy(cfgframe,temp_dgname->dgn[i],z,16); // Digital Names + z += 16; + + } // Copy 16 channel names of digital word + + temp_dgname = temp_dgname->dg_next; + } // Go to next Digital word + + } + + // PHUNIT + if(phnmr != 0){ + + for (i = 0; ipmu[j]->phunit[i],z,4); // PHUNIT + z += 4; + } + } + + // ANUNIT + if(annmr != 0){ + + for (i = 0; ipmu[j]->anunit[i],z,4); // ANUNIT + z += 4; + + } + } + + // DGUNIT + if(dgnmr != 0){ + + for (i = 0; ipmu[j]->dgunit[i],z,4); // DGUNIT + z += 4; + } + + } + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->fnom,z,2); // FNOM + z += 2; + + byte_by_byte_copy(cfgframe,temp_cfg->pmu[j]->cfg_cnt,z,2); // CFGCNT + z += 2; + + j++; // index for pmu_num + + } // while 2 + + temp_cfg = temp_cfg->cfgnext; // Take next CFG + + } // while 1 + + + byte_by_byte_copy(cfgframe,datarate,z,2); // DATA RATE + z += 2; + + chk = compute_CRC(cfgframe,z); + cfgframe[z++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cfgframe[z++] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + return z; +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/align_sort.h b/iPDC/align_sort.h new file mode 100755 index 0000000..73cf615 --- /dev/null +++ b/iPDC/align_sort.h @@ -0,0 +1,79 @@ +/* ----------------------------------------------------------------------------- + * align_sort.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#define MAXTSB 5 + +/* ---------------------------------------------------------------- */ +/* global variable */ +/* ---------------------------------------------------------------- */ + +int front,rear; + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +/* Data Structure for Time Stamp Buffer */ +struct TimeStampBuffer { + + char *soc; + char *fracsec; + struct pmupdc_id_list *idlist; + struct data_frame *first_data_frame; + +}TSB[MAXTSB]; + +struct pmupdc_id_list { + + char *idcode; + int num_pmu; + struct pmupdc_id_list *nextid; +}; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void time_align(struct data_frame *df); + +void assign_df_to_TSB(struct data_frame *df,int index); + +void dispatch(int index); + +void sort_data_inside_TSB(int index); + +void clear_TSB(int index); + +int create_dataframe(int index); + +int create_cfgframe(); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/connections.c b/iPDC/connections.c new file mode 100755 index 0000000..5be9af9 --- /dev/null +++ b/iPDC/connections.c @@ -0,0 +1,623 @@ +/* ----------------------------------------------------------------------------- + * connections.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipdcGui.h" +#include "connections.h" +#include "parser.h" +#include "global.h" +#include "new_pmu_or_pdc.h" +#include "align_sort.h" + + +/* ---------------------------------------------------------------------*/ +/* Functions defined in connections.c */ +/* ---------------------------------------------------------------------*/ + +/* 1. void setup() */ +/* 2. void* UL_udp() */ +/* 3. void* UL_tcp() */ +/* 4. void* UL_tcp_connection() */ +/* 5. void PMU_process_UDP() */ +/* 6. void PMU_process_TCP() */ +/* 7. void sigchld_handler() */ + +/* -------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +int yes = 1; /* argument to setsockopt */ +char display_buf[200]; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION setup(): */ +/* It creates two threads by calling tcp() and udp() in each thread. */ +/* ---------------------------------------------------------------------------- */ + + +void setup(){ + + /* ---------------------------------------------------------------- */ + /* Initialize Global Mutex Variables from global.h */ + /* ---------------------------------------------------------------- */ + + int err; + + /* Create UDP socket and bind to port */ + + if ((UL_UDP_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("UDP Socket:Sucessfully created\n"); + + } + + if (setsockopt(UL_UDP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + UDP_my_addr.sin_family = AF_INET; // host byte order + UDP_my_addr.sin_port = htons(UDPPORT); // short, network byte order + UDP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(UDP_my_addr.sin_zero),'\0', 8); // zero the rest of the struct + + if (bind(UL_UDP_sockfd, (struct sockaddr *)&UDP_my_addr, + sizeof(struct sockaddr)) == -1) { + perror("bind"); + exit(1); + } else { + + printf("UDP Socket Bind :Sucessfull\n"); + } + + + /* Created socket and bound to port */ + /* Create TCP socket and bind and listen on port */ + + if ((UL_TCP_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } else { + + printf("TCP Socket:Sucessfully created\n"); + } + + if (setsockopt(UL_TCP_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + TCP_my_addr.sin_family = AF_INET; // host byte order + TCP_my_addr.sin_port = htons(TCPPORT); // short, network byte order + TCP_my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP + memset(&(TCP_my_addr.sin_zero), '\0', 8); // zero the rest of the struct + + if (bind(UL_TCP_sockfd, (struct sockaddr *)&TCP_my_addr, sizeof(struct sockaddr)) + == -1) { + perror("bind"); + exit(1); + + } else { + + printf("TCP Socket Bind :Sucessfull\n"); + } + + if (listen(UL_TCP_sockfd, BACKLOG) == -1) { + + perror("listen"); + exit(1); + + } else { + + printf("TCP Listen :Sucessfull\n"); + } + + sa.sa_handler = sigchld_handler; // reap all dead processes + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + if (sigaction(SIGCHLD, &sa, NULL) == -1) { + perror("sigaction"); + exit(1); + } + + /* TCP created socket and is litening for connections */ + + printf("\nUDP Listening on port %d for command frames from Upper PDC\n",UDPPORT); + printf("\nTCP Listening on port %d for command frames from Upper PDC\n",TCPPORT); + printf("\nPort %d for Sending the data frames for archival from iPDC\n",DBPORT); + + UL_TCP_sin_size = sizeof(struct sockaddr_in); + UL_UDP_addr_len = sizeof(struct sockaddr); + DB_addr_len = sizeof(struct sockaddr); + + /* Threads are created for UDP and TCP to listen on port 6001 and 6000 respectively in default attr mode*/ + if((err = pthread_create(&UDP_thread,NULL,UL_udp,NULL))) { + + perror(strerror(err)); + exit(1); + } + + if((err = pthread_create(&TCP_thread,NULL,UL_tcp,NULL))) { + + perror(strerror(err)); + exit(1); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION UL_udp(): */ +/* Handles upper layer PDC command frames */ +/* ---------------------------------------------------------------------------- */ + +void* UL_udp(){ + + /* UDP data Received */ + while(1) { + + memset(UL_udp_command,'\0',19); + memset(display_buf,'\0',200); + + if ((numbytes = recvfrom(UL_UDP_sockfd,UL_udp_command, 18, 0,(struct sockaddr *)&UL_UDP_addr, (socklen_t *)&UL_UDP_addr_len)) == -1) { + // Main if + perror("recvfrom"); + exit(1); + + } else { /* New datagram has been received */ + + int pdc_flag = 0; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + struct Upper_Layer_Details *temp_pdc = ULfirst; + + if(ULfirst == NULL) { + + pdc_flag = 0; + + } else { + + while(temp_pdc != NULL ) { + + if((!strcmp(temp_pdc->ip,inet_ntoa(UL_UDP_addr.sin_addr))) && + (!strncasecmp(temp_pdc->protocol,"UDP",3)) && (temp_pdc->port == UDPPORT)) { + + pdc_flag = 1; + break; + } else { + + temp_pdc = temp_pdc->next; + } + } + } + + if(pdc_flag){ + + unsigned char c = UL_udp_command[1]; + c <<= 1; + c >>= 5; + temp_pdc->sockfd = UL_UDP_sockfd; + + if(c == 0x04) { /* Check if it is a command frame from Upper PDC */ + + printf("\nCommand frame Received at iPDC.\n"); + c = UL_udp_command[15]; + + if((c & 0x05) == 0x05){ //Send CFg frame to PDC + + printf("\nCommand frame for CFG Received\n"); + + while(root_pmuid != NULL); // Wait till all the status change has been cleared + + printf("sockfd = %d,ipaddress = %s\n",temp_pdc->sockfd,inet_ntoa(temp_pdc->pdc_addr.sin_addr)); + + if(temp_pdc->address_set == 0) { + + memcpy(&temp_pdc->pdc_addr,&UL_UDP_addr,sizeof(UL_UDP_addr)); + + } + numbytes = create_cfgframe(); + + if ((numbytes = sendto (temp_pdc->sockfd,cfgframe, numbytes, 0, + (struct sockaddr *)&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)) == -1)) { + + perror("sendto"); + + } else { + + printf("Sent iPDC Configuration Frame\n"); + } + free(cfgframe); + + temp_pdc->UL_upper_pdc_cfgsent = 1; + temp_pdc->config_change = 0; + + } else if((c & 0x02) == 0x02) { // if data frame + + if(temp_pdc->UL_upper_pdc_cfgsent == 1) { // Only if cfg is sent send the data + + temp_pdc->UL_data_transmission_off = 0; + + } else { + + printf("Data cannot be sent as CMD for CFG not received\n"); + + } + + } else if ((c & 0x01) == 0x01){ + + temp_pdc->UL_data_transmission_off = 1; + + } + + } else { /* If it is a frame other than command frame */ + + printf("Not a command frame\n"); + } + + + } else { /* If the command frame is not from authentic PDC*/ + + printf("Command frame from un-authentic PDC\n"); + } + + } // Main if ends + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + } // while ends +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION UL_tcp(): */ +/* It Handles Upper Layer PDC connections. */ +/* ---------------------------------------------------------------------------- */ + +void* UL_tcp() { + + int err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { // In the detached state, the thread resources are + + // immediately freed when it terminates, but + perror(strerror(err)); // pthread_join(3) cannot be used to synchronize + exit(1); // on the thread termination. + } + + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { // Shed policy = SCHED_FIFO (realtime, first-in first-out) + + perror(strerror(err)); + exit(1); + } + + int sin_size,new_fd,pdc_flag = 0; + + while (1) { + + sin_size = sizeof(struct sockaddr_in); + + if (((new_fd = accept(UL_TCP_sockfd, (struct sockaddr *)&UL_TCP_addr, + (socklen_t *)&sin_size)) == -1)) { // main if starts + perror("accept"); + + } else { /* New TCP connection has been received*/ + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + struct Upper_Layer_Details *temp_pdc = ULfirst; + if(ULfirst == NULL) { + + pdc_flag = 0; + + } else { + + while(temp_pdc != NULL ) { + + if((!strcmp(temp_pdc->ip,inet_ntoa(UL_TCP_addr.sin_addr))) && + (!strncasecmp(temp_pdc->protocol,"TCP",3)) && (temp_pdc->port == TCPPORT)) { + + pdc_flag = 1; + break; + } else { + + temp_pdc = temp_pdc->next; + } + } + } + if(pdc_flag) { + + temp_pdc->sockfd = new_fd; + pthread_t t; + + /* PDC is authentic. Send the command frame for cfg frame */ + printf("server: got connection from %s\n", + inet_ntoa(temp_pdc->pdc_addr.sin_addr)); + + /* Creates a new thread for each TCP connection. */ + if((err = pthread_create(&t,&attr,UL_tcp_connection,(void *)temp_pdc))) { + + perror(strerror(err)); + exit(1); + } + + } else { /* If PMU ip is not in the ipdcINFO.bin */ + + printf("Request from %s TCP which is un-authentic\n", + inet_ntoa(UL_TCP_addr.sin_addr)); + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + } // main if ends + + } // While ends + + pthread_attr_destroy(&attr); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION UL_tcp_connection(): */ +/* It handles command frames from upper layer PDC on TCP . */ +/* ---------------------------------------------------------------------------- */ + +void* UL_tcp_connection(void * temp_pdc) { + + struct Upper_Layer_Details *udetails = (struct Upper_Layer_Details *) temp_pdc; + int UL_new_fd = udetails->sockfd; + udetails->thread_id = pthread_self(); + + while(1) { + + memset(UL_tcp_command,19,0); + int bytes_read = recv(UL_new_fd,UL_tcp_command,18,0); + if(bytes_read == -1) { + + perror("recv"); + udetails->tcpup = 0; + pthread_exit(NULL); + + } else if(bytes_read == 0){ + + printf("The Client connection exit.\n"); + udetails->tcpup = 0; + pthread_exit(NULL); + + } else { + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + unsigned char c = UL_tcp_command[1]; + c <<= 1; + c >>= 5; + + if(c == 0x04) { /* Check if it is a command frame from Upper PDC*/ + + printf("Command frame Received\n"); // Need to further check if the command is for cfg or data + c = UL_tcp_command[15]; + + if((c & 0x05) == 0x05){ //Send CFg frame to PDC + + while(root_pmuid != NULL); // Wait till the staus chage list becomes empty + numbytes = create_cfgframe(); + udetails->tcpup = 1; + + if (send(UL_new_fd,cfgframe,numbytes, 0)== -1) + perror("send"); + free(cfgframe); + + udetails->UL_upper_pdc_cfgsent = 1; + udetails->config_change = 0; + + } else if((c & 0x02) == 0x02) { + + if(udetails->UL_upper_pdc_cfgsent == 1) { // Only if cfg is sent send the data + + udetails->UL_data_transmission_off = 0; + + } else { + + printf("Data cannot be sent as CMD for CFG not received\n"); + + } + + } else if ((c & 0x01) == 0x01){ // Put the data transmission off + + udetails->UL_data_transmission_off = 1; + } + } else { /* If it is a frame other than command frame */ + + printf("Not a command frame\n"); + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + } + + } // while + close(UL_new_fd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION PMU_process_UDP(): */ +/* This function processes the frames as per their type( data, config). */ +/* The received frames are from Lower Layer PMU/PDC on UDP. */ +/* ---------------------------------------------------------------------------- */ + +void PMU_process_UDP(unsigned char *udp_buffer,struct sockaddr_in PMU_addr,int sockfd){ + + int stat_status; + unsigned int id; + unsigned char id_char[2]; + + id_char[0] = udp_buffer[4]; + id_char[1] = udp_buffer[5]; + id = to_intconvertor(id_char); + + unsigned char c = udp_buffer[1]; + c <<= 1; + c >>= 5; + if(c == 0x00){ /* If data frame */ + + stat_status = dataparser(udp_buffer); + + /* Change in cfg frame is handled */ + if((stat_status == 10)||(stat_status == 14)) { + + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,id,(char *)cmdframe); + + if (sendto(sockfd,cmdframe,18, 0, + (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1) + perror("sendto"); + free(cmdframe); + + } else if (stat_status == 15) { /* Data Invalid */ + + printf("Data Invalid\n"); + + } + + } else if(c == 0x03) { /* If configuration frame */ + + printf("\nConfiguration frame received.\n"); + cfgparser(udp_buffer); + + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(2,id,(char *)cmdframe); + printf("\nReturn from create_command_frame\n"); + + /* Command frame sent to send the data frames */ + if (sendto(sockfd,cmdframe, 18, 0, + (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1) + perror("sendto"); + free(cmdframe); + + } else { + + printf("Erroneous frame\n"); + + } + fflush(stdout); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION PMU_process_TCP(): */ +/* This function processes the frames as per their type( data, config). */ +/* The received frames are from Lower Layer PMU/PDC on TCP. */ +/* ---------------------------------------------------------------------------- */ + +void PMU_process_TCP(unsigned char tcp_buffer[],int sockfd) { + + int stat_status; + unsigned int id; + unsigned char id_char[2]; + + id_char[0] = tcp_buffer[4]; + id_char[1] = tcp_buffer[5]; + id = to_intconvertor(id_char); + + unsigned char c = tcp_buffer[1]; + c <<= 1; + c >>= 5; + + if(c == 0x00){ /* If data frame */ + + stat_status = dataparser(tcp_buffer); + + /* Handle the Stat word */ + if((stat_status == 10)||(stat_status == 14)) { + + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,id,(char *)cmdframe); + + if (send(sockfd,cmdframe,18, 0)== -1) + perror("send"); + free(cmdframe); + + } else if (stat_status == 15) { /* Data Invalid */ + + printf("Data Invalid\n"); + } + + } else if(c == 0x03) { /* If configuration frame */ + + printf("\nConfiguration frame received.\n"); + cfgparser(tcp_buffer); + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(2,id,(char *)cmdframe); + printf("Return from create_command_frame().\n"); + + /* Command frame sent to send the data frames */ + if (send(sockfd,cmdframe,18, 0)== -1) + perror("send"); + free(cmdframe); + + } else { + + printf("\nErroneous frame\n"); + } + fflush(stdout); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION sigchld_handler(): */ +/* ---------------------------------------------------------------------------- */ + +void sigchld_handler(int s) { + while(wait(NULL) > 0); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/connections.h b/iPDC/connections.h new file mode 100755 index 0000000..b87d944 --- /dev/null +++ b/iPDC/connections.h @@ -0,0 +1,109 @@ +/* ----------------------------------------------------------------------------- + * connections.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include + + +/* ---------------------------------------------------------------- */ +/* global variable */ +/* ---------------------------------------------------------------- */ + +#define DBPORT 9000 /* The port users will be connecting to */ +#define BACKLOG 10 /* How many pending connections queue will hold */ +#define MAXBUFLEN 2000 + +int UL_UDP_addr_len,UL_TCP_sin_size, numbytes; +unsigned char UL_udp_command[19]; +unsigned char UL_tcp_command[19]; + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +struct sigaction sa; + +struct Lower_Layer_Details { + + unsigned int pmuid; + char ip[16]; + int port; + char protocol[4]; + int sockfd; + int up; /* used only in tcp */ + struct sockaddr_in llpmu_addr; + pthread_t thread_id; + int data_transmission_off; + int pmu_remove; + int request_cfg_frame; + struct Lower_Layer_Details *next; + struct Lower_Layer_Details *prev; + +}*LLfirst,*LLlast; + + +struct Upper_Layer_Details { + + char ip[16]; + int port; + char protocol[4]; + int sockfd; + int tcpup; + pthread_t thread_id; + struct sockaddr_in pdc_addr; + int config_change; + int UL_upper_pdc_cfgsent; + int UL_data_transmission_off; + int address_set; + struct Upper_Layer_Details *next; + struct Upper_Layer_Details *prev; + +}*ULfirst,*ULlast; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void setup(); + +void* UL_tcp(); + +void* UL_tcp_connection(void * newfd); + +void* UL_udp(); + +void PMU_process_UDP(unsigned char *,struct sockaddr_in,int sockfd); + +void PMU_process_TCP(unsigned char tcp_buffer[],int sockfd); + +void sigchld_handler(int s); /* TCP signal handler */ + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/dallocate.c b/iPDC/dallocate.c new file mode 100755 index 0000000..a03e794 --- /dev/null +++ b/iPDC/dallocate.c @@ -0,0 +1,170 @@ +/* ----------------------------------------------------------------------------- + * dallocate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include "parser.h" +#include "dallocate.h" +#include "global.h" + + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in dallocate.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. void free_cfgframe_object(struct cfg_frame *cfg) */ +/* 2. void free_dataframe_object(struct data_frame *df) */ +/* 3. void free_2darray(char** array, int x) */ + +/* ------------------------------------------------------------------------------------ */ + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_cfgframe_object(): */ +/* It frees memory allocated to cfg objects. */ +/* ------------------------------------------------------------ */ + +void free_cfgframe_object(struct cfg_frame *cfg) { + + int j = 0; + unsigned int phn,ann,dgn,num_pmu; + struct dgnames *t_dgnames,*r_dgnames; + + num_pmu = to_intconvertor(cfg->num_pmu); + + while(jpmu[j]->stn); + free(cfg->pmu[j]->idcode); + free(cfg->pmu[j]->data_format); + free(cfg->pmu[j]->fmt); + + // Extract PHNMR, DGNMR, ANNMR + phn = to_intconvertor(cfg->pmu[j]->phnmr); + ann = to_intconvertor(cfg->pmu[j]->annmr); + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + + if(phn != 0) + free_2darray(cfg->pmu[j]->cnext->phnames,phn); + if(ann != 0) + free_2darray(cfg->pmu[j]->cnext->angnames,ann); + + if(dgn != 0) { + t_dgnames = cfg->pmu[j]->cnext->first; + + while(t_dgnames != NULL) { + + r_dgnames = t_dgnames->dg_next; + free_2darray(t_dgnames->dgn,16); + t_dgnames = r_dgnames; + } + } + + if(phn != 0) + free_2darray(cfg->pmu[j]->phunit,phn); + if(ann != 0) + free_2darray(cfg->pmu[j]->anunit,ann); + if(dgn != 0) + free_2darray(cfg->pmu[j]->dgunit,dgn); + + free(cfg->pmu[j]->phnmr); + free(cfg->pmu[j]->annmr); + free(cfg->pmu[j]->dgnmr); + free(cfg->pmu[j]->fnom); + free(cfg->pmu[j]->cfg_cnt); + + j++; + } // End of While + + free(cfg->framesize); + free(cfg->idcode); + free(cfg->soc); + free(cfg->fracsec); + free(cfg->time_base); + free(cfg->data_rate); + free(cfg->num_pmu); + free(cfg); +} + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_dataframe_object(): */ +/* It frees memory allocated to data objects. */ +/* -------------------------------------------------------------*/ + +void free_dataframe_object(struct data_frame *df) { + + int j = 0; + + // Free the blocks + while(j < df->num_pmu) { + + if(df->dpmu[j]->stat[1] == 0x0F) { + + free(df->dpmu[j]->stat); + j++; + continue; + } + + free(df->dpmu[j]->stat); + free(df->dpmu[j]->freq); + free(df->dpmu[j]->dfreq); + + if(df->dpmu[j]->phnmr != 0) + free_2darray(df->dpmu[j]->phasors,df->dpmu[j]->phnmr); + if(df->dpmu[j]->annmr != 0) + free_2darray(df->dpmu[j]->analog,df->dpmu[j]->annmr); + if(df->dpmu[j]->dgnmr != 0) + free_2darray(df->dpmu[j]->digital,df->dpmu[j]->dgnmr); + j++; + } // End of While + + free(df->framesize); + free(df->idcode); + free(df->soc); + free(df->fracsec); + free(df); +} + + +/* -------------------------------------------------------------*/ +/* FUNCTION free_2darray: */ +/* It frees memory allocated to 2D Arrays. */ +/* -------------------------------------------------------------*/ + +void free_2darray(unsigned char** array, int n){ + + int i; + for(i = 0; i < n; i++) + free(array[i]); + free(array); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/dallocate.h b/iPDC/dallocate.h new file mode 100755 index 0000000..07fa446 --- /dev/null +++ b/iPDC/dallocate.h @@ -0,0 +1,43 @@ +/* ----------------------------------------------------------------------------- + * dallocate.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +/* Frees memory allocated to cfg objects */ +void free_cfgframe_object(struct cfg_frame *cfg); + +/* Frees memory allocated to data objects */ +void free_dataframe_object(struct data_frame *); + +/* frees memory allocated to 2D arrays */ +void free_2darray(unsigned char** array, int x); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/global.h b/iPDC/global.h new file mode 100755 index 0000000..baf5440 --- /dev/null +++ b/iPDC/global.h @@ -0,0 +1,74 @@ +/* ----------------------------------------------------------------------------- + * global.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include + +#define MAX_STRING_SIZE 5000 + + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +pthread_mutex_t mutex_cfg; /* To lock cfg data objects */ +pthread_mutex_t mutex_file; /* To lock PMU Setup File */ +pthread_mutex_t mutex_Lower_Layer_Details; /* To lock objects of connection table that hold lower layer PMU/PDC ip and protocol */ +pthread_mutex_t mutex_Upper_Layer_Details; /* To lock objects of connection table that hold upper layer PDC ip and protocol */ +pthread_mutex_t mutex_status_change; + +unsigned char *cfgframe,*dataframe; + +struct sockaddr_in UDP_my_addr,TCP_my_addr; /* my address information */ +struct sockaddr_in UL_UDP_addr,UL_TCP_addr; /* connector’s address information */ +int UL_UDP_sockfd,UL_TCP_sockfd; /* socket descriptors */ +pthread_t UDP_thread,TCP_thread,p_thread; + +FILE *fp_log,*fp_updc; +char tname[20]; + +/* iPDC Setup File path globaly */ +char ipdcFolderPath[200]; +char ipdcFilePath[200]; + + +/* -------------------------------------------------------------------- */ +/* global DataBase variables */ +/* -------------------------------------------------------------------- */ + +struct sockaddr_in DB_Server_addr; // address information +int DB_sockfd,DB_addr_len; + +int PDC_IDCODE,TCPPORT,UDPPORT; +char dbserver_ip[20]; + +unsigned char DATASYNC[3],CFGSYNC[3],CMDSYNC[3],CMDDATASEND[3],CMDDATAOFF[3],CMDCFGSEND[3]; + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/iPDC.glade b/iPDC/iPDC.glade new file mode 100755 index 0000000..8b4892b --- /dev/null +++ b/iPDC/iPDC.glade @@ -0,0 +1,546 @@ + + + + + + + True + gtk-properties + + + True + gtk-go-up + 10 + 1 + + + True + gtk-go-down + 1 + + + True + gtk-select-color + 1 + + + True + gtk-close + 1 + + + True + gtk-add + 1 + + + True + gtk-about + 1 + + + True + gtk-missing-image + + + True + gtk-quit + 10 + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-new + 1 + + + True + gtk-sort-ascending + 1 + + + True + gtk-remove + 1 + + + True + gtk-media-stop + 1 + + + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + iPDC - v1.3 + center-on-parent + 710 + 590 + gnome-obex-server + False + center + + + True + + + Add a Source Device + 240 + 35 + True + True + True + PMU/PDC device from which configuration +and data frames would be received. + 0 + + + 20 + 180 + + + + + Remove a Source Device + 240 + 35 + True + True + True + Remove PMU/PDC device from which +data frames are being received. + 0 + + + 20 + 225 + + + + + Turn OFF Data Transmission + 240 + 35 + True + True + True + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + 0 + + + 20 + 270 + + + + + Turn ON Data Transmission + 240 + 35 + True + True + True + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + 0 + + + 20 + 315 + + + + + Request Configuration Frame + 240 + 35 + True + True + True + Send Command frame to PMU/PDC device +to get configuration frame. + 0 + + + 20 + 360 + + + + + Add a Destination Device + 240 + 35 + True + True + True + PDC device to whom iPDC sends +configuration and data frames. + 0 + + + 20 + 405 + + + + + Remove a Destination Device + 240 + 35 + True + True + True + Remove PDC device to whom iPDC +sends data frames. + 0 + + + 20 + 449 + + + + + iPDC Connection Table + 240 + 35 + True + True + True + Display source and destination devices connection tables. + 0 + + + 20 + 495 + + + + + EXIT + 100 + 35 + True + True + True + Click to exit the iPDC Software. + + + 603 + 555 + + + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to create a new iPDC setup file. + image6 + False + True + + + + + Open iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved iPDC setup file. + image4 + False + True + + + + + iPDC Properties + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the iPDC setup informations. + image5 + False + True + + + + + Connection Table + True + Display source and destination devices connection tables. + image12 + False + True + + + + + Quit + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the iPDC Software. + image3 + False + True + + + + + + + + + True + Edit + True + + + True + + + Add Source + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + PMU/PDC device from which configuration +and data frames would be received. + image7 + False + True + + + + + Remove Source + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Remove PMU/PDC device from which +data frames are being received. + image8 + False + True + + + + + Data OFF + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + image9 + False + True + + + + + Data ON + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + image10 + False + True + + + + + Request CFG + True + Send Command frame to PMU/PDC device +to get configuration frame. + image11 + False + True + + + + + Add Destination + True + PDC device to whom iPDC sends +configuration and data frames. + image14 + False + True + + + + + Remove Destination + True + Remove PDC device to whom iPDC +sends data frames. + image13 + False + True + + + + + + + + + True + _Help + True + + + True + + + About + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to see the publisher, licensing, and version details. + image15 + False + True + + + + + + + + + + + Go online + 100 + 35 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 555 + + + + + 235 + 40 + True + + + 20 + 143 + + + + + 180 + 28 + True + True + + + 260 + 560 + + + + + 421 + 350 + True + False + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + + + 285 + 181 + + + + + 720 + 70 + True + False + False + fill + False + + + 36 + + + + + 800 + 20 + True + + + -20 + 536 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 545 + 107 + + + + + + diff --git a/iPDC/iPDC.xml b/iPDC/iPDC.xml new file mode 100644 index 0000000..5bc42e1 --- /dev/null +++ b/iPDC/iPDC.xml @@ -0,0 +1,546 @@ + + + + + + + True + gtk-properties + + + True + gtk-go-up + 10 + 1 + + + True + gtk-go-down + 1 + + + True + gtk-select-color + 1 + + + True + gtk-close + 1 + + + True + gtk-add + 1 + + + True + gtk-about + 1 + + + True + gtk-missing-image + + + True + gtk-quit + 10 + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-new + 1 + + + True + gtk-sort-ascending + 1 + + + True + gtk-remove + 1 + + + True + gtk-media-stop + 1 + + + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + iPDC - v1.3 + center-on-parent + 710 + 590 + gnome-obex-server + False + center + + + True + + + Add a Source Device + 240 + 35 + True + True + True + PMU/PDC device from which configuration +and data frames would be received. + 0 + + + 20 + 180 + + + + + Remove a Source Device + 240 + 35 + True + True + True + Remove PMU/PDC device from which +data frames are being received. + 0 + + + 20 + 225 + + + + + Turn OFF Data Transmission + 240 + 35 + True + True + True + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + 0 + + + 20 + 270 + + + + + Turn ON Data Transmission + 240 + 35 + True + True + True + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + 0 + + + 20 + 315 + + + + + Request Configuration Frame + 240 + 35 + True + True + True + Send Command frame to PMU/PDC device +to get configuration frame. + 0 + + + 20 + 360 + + + + + Add a Destination Device + 240 + 35 + True + True + True + PDC device to whom iPDC sends +configuration and data frames. + 0 + + + 20 + 405 + + + + + Remove a Destination Device + 240 + 35 + True + True + True + Remove PDC device to whom iPDC +sends data frames. + 0 + + + 20 + 449 + + + + + iPDC Connection Table + 240 + 35 + True + True + True + Display source and destination devices connection tables. + 0 + + + 20 + 495 + + + + + EXIT + 100 + 35 + True + True + True + Click to exit the iPDC Software. + + + 603 + 555 + + + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to create a new iPDC setup file. + image6 + False + True + + + + + Open iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved iPDC setup file. + image4 + False + True + + + + + iPDC Properties + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the iPDC setup informations. + image5 + False + True + + + + + Connection Table + True + Display source and destination devices connection tables. + image12 + False + True + + + + + Quit + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the iPDC Software. + image3 + False + True + + + + + + + + + True + Edit + True + + + True + + + Add Source + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + PMU/PDC device from which configuration +and data frames would be received. + image7 + False + True + + + + + Remove Source + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Remove PMU/PDC device from which +data frames are being received. + image8 + False + True + + + + + Data OFF + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + image9 + False + True + + + + + Data ON + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + image10 + False + True + + + + + Request CFG + True + Send Command frame to PMU/PDC device +to get configuration frame. + image11 + False + True + + + + + Add Destination + True + PDC device to whom iPDC sends +configuration and data frames. + image14 + False + True + + + + + Remove Destination + True + Remove PDC device to whom iPDC +sends data frames. + image13 + False + True + + + + + + + + + True + _Help + True + + + True + + + About + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to see the publisher, licensing, and version details. + image15 + False + True + + + + + + + + + + + Go online + 100 + 35 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 555 + + + + + 235 + 40 + True + + + 20 + 143 + + + + + 180 + 28 + True + True + + + 260 + 560 + + + + + 421 + 350 + True + False + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + + + 285 + 181 + + + + + 720 + 70 + True + False + False + fill + False + + + 36 + + + + + 800 + 20 + True + + + -20 + 536 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 545 + 107 + + + + + + diff --git a/iPDC/iPDC.xml$ b/iPDC/iPDC.xml$ new file mode 100644 index 0000000..5bc42e1 --- /dev/null +++ b/iPDC/iPDC.xml$ @@ -0,0 +1,546 @@ + + + + + + + True + gtk-properties + + + True + gtk-go-up + 10 + 1 + + + True + gtk-go-down + 1 + + + True + gtk-select-color + 1 + + + True + gtk-close + 1 + + + True + gtk-add + 1 + + + True + gtk-about + 1 + + + True + gtk-missing-image + + + True + gtk-quit + 10 + 1 + + + True + gtk-open + 1 + + + True + gtk-properties + 1 + + + True + gtk-new + 1 + + + True + gtk-sort-ascending + 1 + + + True + gtk-remove + 1 + + + True + gtk-media-stop + 1 + + + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + iPDC - v1.3 + center-on-parent + 710 + 590 + gnome-obex-server + False + center + + + True + + + Add a Source Device + 240 + 35 + True + True + True + PMU/PDC device from which configuration +and data frames would be received. + 0 + + + 20 + 180 + + + + + Remove a Source Device + 240 + 35 + True + True + True + Remove PMU/PDC device from which +data frames are being received. + 0 + + + 20 + 225 + + + + + Turn OFF Data Transmission + 240 + 35 + True + True + True + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + 0 + + + 20 + 270 + + + + + Turn ON Data Transmission + 240 + 35 + True + True + True + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + 0 + + + 20 + 315 + + + + + Request Configuration Frame + 240 + 35 + True + True + True + Send Command frame to PMU/PDC device +to get configuration frame. + 0 + + + 20 + 360 + + + + + Add a Destination Device + 240 + 35 + True + True + True + PDC device to whom iPDC sends +configuration and data frames. + 0 + + + 20 + 405 + + + + + Remove a Destination Device + 240 + 35 + True + True + True + Remove PDC device to whom iPDC +sends data frames. + 0 + + + 20 + 449 + + + + + iPDC Connection Table + 240 + 35 + True + True + True + Display source and destination devices connection tables. + 0 + + + 20 + 495 + + + + + EXIT + 100 + 35 + True + True + True + Click to exit the iPDC Software. + + + 603 + 555 + + + + + 710 + 40 + True + True + True + immediate + + + True + _File + True + + + True + + + New iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to create a new iPDC setup file. + image6 + False + True + + + + + Open iPDC Setup + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to open the saved iPDC setup file. + image4 + False + True + + + + + iPDC Properties + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to view the iPDC setup informations. + image5 + False + True + + + + + Connection Table + True + Display source and destination devices connection tables. + image12 + False + True + + + + + Quit + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to exit the iPDC Software. + image3 + False + True + + + + + + + + + True + Edit + True + + + True + + + Add Source + True + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + PMU/PDC device from which configuration +and data frames would be received. + image7 + False + True + + + + + Remove Source + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Remove PMU/PDC device from which +data frames are being received. + image8 + False + True + + + + + Data OFF + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn OFF data transmission of PMU/PDC device from +which data frames are being received. + image9 + False + True + + + + + Data ON + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Turn ON data transmission of PMU/PDC device whose +data transmission is put OFF. + image10 + False + True + + + + + Request CFG + True + Send Command frame to PMU/PDC device +to get configuration frame. + image11 + False + True + + + + + Add Destination + True + PDC device to whom iPDC sends +configuration and data frames. + image14 + False + True + + + + + Remove Destination + True + Remove PDC device to whom iPDC +sends data frames. + image13 + False + True + + + + + + + + + True + _Help + True + + + True + + + About + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK + Click to see the publisher, licensing, and version details. + image15 + False + True + + + + + + + + + + + Go online + 100 + 35 + True + True + True + True + For more information visit the iPDC official web +'ipdc.codeplex.com/'. + image1 + none + http://ipdc.codeplex.com/ + + + 20 + 555 + + + + + 235 + 40 + True + + + 20 + 143 + + + + + 180 + 28 + True + True + + + 260 + 560 + + + + + 421 + 350 + True + False + iPDC - A Free Phasor Data Concentrator. +Supportive IEEE C37.118 Synchrophasor std. + False + fill + + + 285 + 181 + + + + + 720 + 70 + True + False + False + fill + False + + + 36 + + + + + 800 + 20 + True + + + -20 + 536 + + + + + 162 + 20 + True + False + Local Time of System + 0 + 0 + right + False + + + + + + + + + 545 + 107 + + + + + + diff --git a/iPDC/images/PSLab.PNG b/iPDC/images/PSLab.PNG new file mode 100755 index 0000000..bc47b48 Binary files /dev/null and b/iPDC/images/PSLab.PNG differ diff --git a/iPDC/images/iPDC.desktop b/iPDC/images/iPDC.desktop new file mode 100755 index 0000000..6663c8c --- /dev/null +++ b/iPDC/images/iPDC.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Encoding=UTF-8 +Name=iPDC +Comment=A Phasor Data Concentrator +Exec=/usr/local/bin/iPDC +Icon=/usr/local/share/iPDC/logo.png +Terminal=true +Categories=Education diff --git a/iPDC/images/ipdcLogo.png b/iPDC/images/ipdcLogo.png new file mode 100755 index 0000000..0fc05e3 Binary files /dev/null and b/iPDC/images/ipdcLogo.png differ diff --git a/iPDC/images/ipdcLogo1.png b/iPDC/images/ipdcLogo1.png new file mode 100755 index 0000000..ec1a43d Binary files /dev/null and b/iPDC/images/ipdcLogo1.png differ diff --git a/iPDC/images/logo.png b/iPDC/images/logo.png new file mode 100755 index 0000000..757d992 Binary files /dev/null and b/iPDC/images/logo.png differ diff --git a/iPDC/ipdc.c b/iPDC/ipdc.c new file mode 100755 index 0000000..cf92447 --- /dev/null +++ b/iPDC/ipdc.c @@ -0,0 +1,315 @@ +/* ----------------------------------------------------------------------------- + * ipdc.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "connections.h" +#include "parser.h" +#include "global.h" +#include "ipdcGui.h" + +/* Common fixed path for storage of few common files */ +#define UI_fILE "/usr/local/share/iPDC/iPDC.xml" + + +/* ---------------------------------------------------------------- */ +/* main program starts here */ +/* ---------------------------------------------------------------- */ + +int main(int argc, char **argv) +{ + /* local variables */ + int err; + char *ptr1; + struct stat st; + + memset(tname,'\0',20); + strcpy(tname,"/dev/pts/"); + + GtkBuilder *builder; + GError *error = NULL; + + PDC_IDCODE = 0; + system("clear"); + + /* Init GTK+ */ + gtk_init(&argc, &argv); + + /* Create new GtkBuilder object */ + builder = gtk_builder_new(); + + if(!gtk_builder_add_from_file(builder, UI_fILE, &error)) + { + g_warning("%s", error->message); + g_free(error); + return(1); + } + + /* Allocate data structure */ + data = g_slice_new(ChData); + + /* Get objects from UI */ + #define GW(name) CH_GET_WIDGET(builder, name, data) + GW(ipdc); + GW(add_pmu_button); + GW(remove_pmu_button); + GW(cmd_data_off_button); + GW(cmd_data_on_button); + GW(cmd_cfg_button); + GW(add_pdc_button); + GW(remove_pdc_button); + GW(display_conn_table_button); + GW(enter_pdc_detail_menuitem); + GW(exit_button); + GW(menubar); + GW(menuitem2); + GW(open_ipdc_setup); + GW(pdc_details_menuitem); + GW(menu_add_source); + GW(menu_remove_source); + GW(menu_data_off); + GW(menu_data_on); + GW(menu_request_cfg); + GW(menu_add_destination); + GW(menu_remove_destination); + GW(menu_conn_table); + GW(about_menuitem); + GW(exit_menuitem); + GW(text_view); + GW(text_view1); + GW(rights_label); + GW(admin_label); + GW(time_lable); + #undef GW + + /* Connect signals */ + gtk_builder_connect_signals(builder, data); + gtk_builder_connect_signals(builder, NULL); + + // Changes how a toplevel window deals with its size request and user resize attempts. + gtk_window_set_policy (GTK_WINDOW (data->ipdc), FALSE, TRUE, TRUE); + gtk_window_set_position(GTK_WINDOW(data->ipdc), GTK_WIN_POS_CENTER); + gtk_window_set_icon(GTK_WINDOW(data->ipdc), create_pixbuf("/usr/local/share/iPDC/logo.png")); + + /* Set the Title of Main Window */ + gtk_window_set_title (GTK_WINDOW (data->ipdc), "iPDC"); + + /* Disable all the (mentioned) buttons on main ipdc window */ + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pmu_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pmu_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_off_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_on_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_cfg_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pdc_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pdc_button), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(data->display_conn_table_button), FALSE); + + gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->menu_conn_table), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->pdc_details_menuitem), FALSE); + + memset(ipdcFilePath, '\0', 200); + ptr1 = malloc(200*sizeof(char)); + memset(ptr1, '\0', 200); + + /* Get the user's name for storing the iPDC Setup File */ + strcpy(ptr1,getenv ("HOME")); + + if (ptr1 == NULL) + { + printf("user not found\n"); + exit(1); + } + strcat(ptr1, "/iPDC"); + + if(stat(ptr1,&st) == 0) /* If main iPDC folder not present in the system? */ + { + strcat(ptr1, "/iPDC"); + + if(stat(ptr1,&st) == 0) + { + strcat(ipdcFolderPath, ptr1); + + FILE * output; + int check; + char buff[200], is_empty[100]; + + strcpy(buff, "ls "); + strcat(buff, ipdcFolderPath); + strcat(buff, " | wc -l"); + + output = popen(buff,"r"); + fgets (is_empty, 100, output); //write to the char + pclose (output); + + check = atoi(is_empty); + + if (check == 0) //No Setup files are present + { + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* fill the iPDC details */ + fill_pdc_details (NULL); + } + else + { + char ch[300]; + + //ptr1 = getenv ("HOME"); + strcpy(ch, "Fill the iPDC setup details manualy or open the iPDC setup file\nfrom the "); + //strcat(ch, ptr1); + //strcat(ch, "/"); + strcat(ch, ipdcFolderPath); + + //validation_result (ch); + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("Cannot create directory `%s': %s\n", ipdcFolderPath, strerror (errno)); + validation_result ("Cannot create iPDC directory on proposed path! "); + } + else + { + strcat(ipdcFolderPath, ptr1); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* fill the iPDC details */ + fill_pdc_details (NULL); + } + } + } + else + { + if (mkdir (ptr1, 0700)) + { + printf ("Cannot create directory `%s': %s", ipdcFolderPath, strerror (errno)); + validation_result ("Cannot create iPDC directory on proposed path! "); + } + else + { + strcat(ptr1, "/iPDC"); + + if (mkdir (ptr1, 0700)) + { + printf ("Cannot create directory `%s': %s", ipdcFolderPath, strerror (errno)); + validation_result ("Cannot create iPDC sub-directory on proposed path! "); + } + else + { + strcat(ipdcFolderPath, ptr1); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* fill the iPDC details */ + fill_pdc_details (NULL); + } + } + } + + /* Decorate the main window of iPDC */ + ipdc_colors(); + + /* Signals Definitions*/ + g_signal_connect (data->add_pmu_button, "clicked", G_CALLBACK(add_pmu), NULL); + g_signal_connect (data->menu_add_source, "activate", G_CALLBACK(add_pmu), NULL); + + g_signal_connect (data->remove_pmu_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "1"); + g_signal_connect (data->menu_remove_source, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "1"); + + g_signal_connect (data->cmd_data_off_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "2"); + g_signal_connect (data->menu_data_off, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "2"); + + g_signal_connect (data->cmd_data_on_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "3"); + g_signal_connect (data->menu_data_on, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "3"); + + g_signal_connect (data->cmd_cfg_button, "clicked", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "4"); + g_signal_connect (data->menu_request_cfg, "activate", G_CALLBACK(cmd_or_remove_pmu), (gpointer) "4"); + + g_signal_connect (data->add_pdc_button, "clicked", G_CALLBACK(add_new_pdc), NULL); + g_signal_connect (data->menu_add_destination, "activate", G_CALLBACK(add_new_pdc), NULL); + + g_signal_connect (data->remove_pdc_button, "clicked", G_CALLBACK(remove_pdc), NULL); + g_signal_connect (data->menu_remove_destination, "activate", G_CALLBACK(remove_pdc), NULL); + + g_signal_connect (data->display_conn_table_button, "clicked", G_CALLBACK(connection_table), NULL); + g_signal_connect (data->menu_conn_table, "activate", G_CALLBACK(connection_table), NULL); + + g_signal_connect (data->exit_button, "clicked", G_CALLBACK(destroy), NULL); + g_signal_connect (data->open_ipdc_setup, "activate", G_CALLBACK(ipdc_setup_fileSelector), NULL); + g_signal_connect (data->pdc_details_menuitem, "activate", G_CALLBACK(display_pdc_detail), NULL); + g_signal_connect_swapped (data->enter_pdc_detail_menuitem, "activate", G_CALLBACK(fill_pdc_details), NULL); + g_signal_connect (data->exit_menuitem, "activate", G_CALLBACK(destroy), NULL); + g_signal_connect (data->about_menuitem, "activate", G_CALLBACK(about_ipdc), NULL); + g_signal_connect (data->ipdc, "destroy", G_CALLBACK(destroy), NULL); + + /* Destroy builder, since we don't need it anymore */ + g_object_unref(G_OBJECT(builder)); + + /* Show window. All other widgets are automatically shown by GtkBuilder */ + gtk_widget_show(data->ipdc); + + pthread_t t; + if((err = pthread_create(&t,NULL,display_time,NULL))) + { + perror(strerror(err)); + exit(1); + } + + /* GTK Main */ + gtk_main(); + + pthread_join(UDP_thread, NULL); + pthread_join(TCP_thread, NULL); + pthread_join(p_thread, NULL); +// pthread_join(t, NULL); + + close(UL_UDP_sockfd); + close(UL_TCP_sockfd); + + /* Free any allocated data */ + g_slice_free(ChData, data); + + return(0); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/ipdcGui.c b/iPDC/ipdcGui.c new file mode 100755 index 0000000..71deac4 --- /dev/null +++ b/iPDC/ipdcGui.c @@ -0,0 +1,2633 @@ +/* ----------------------------------------------------------------------------- + * ipdcGui.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipdcGui.h" +#include "global.h" +#include "connections.h" +#include "new_pmu_or_pdc.h" +#include "recreate.h" + +/* ------------------------------------------------------------------------------------ */ +/* Functions in ipdcGui.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. int isNumber(char *s); */ +/* 2. void destroy (GtkWidget *widget, gpointer udata); */ +/* 3. GdkPixbuf *create_pixbuf(const gchar * filename); */ +/* 4. void display_pdc_detail (GtkButton *widget, gpointer udata); */ +/* 5. void about_ipdc (GtkButton *widget, gpointer udata); */ +/* 6. void ipdc_help (GtkButton *but, gpointer udata); */ +/* 7. void validation_result (char *msg); */ +/* 8. void ipdc_colors(); */ +/* 9. void final_pdc_setup_call(); */ + +/* 10. int validation_pdc_detail (GtkButton *button, gpointer udata); */ +/* 11. void validation_setup_file_name (GtkWidget *widget, gpointer data); */ +/* 12. int add_pmu_validation (GtkButton *but, gpointer udata); */ +/* 13. int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata); */ +/* 14. int new_pdc_validation (GtkButton *but, gpointer udata); */ +/* 15. int remove_pdc_validation (GtkButton *but, gpointer udata); */ + +/* 16. void fill_pdc_details (char *filePath); */ +/* 17. void add_pmu (GtkButton *but, gpointer udata); */ +/* 18. void cmd_or_remove_pmu (GtkButton *but, gpointer udata); */ +/* 19. void add_new_pdc (GtkButton *but, gpointer udata); */ +/* 20. void remove_pdc (GtkButton *but, gpointer udata); */ +/* 21. void connection_table (GtkButton *but, gpointer udata); */ +/* 22. void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata); */ +/* 23. void view_setup_file (GtkWidget *w, GtkFileSelection *fs); */ +/* 24. void apply_ipdc_setup (GtkWidget *w, gpointer udata); */ +/* 25. void* display_time(); */ +/* */ +/* ------------------------------------------------------------------------------------ */ + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION isNumber(char *s): */ +/* It checks the passing character is a number or not, return 0 if its a */ +/* otherwise returns 1. */ +/* ---------------------------------------------------------------------------- */ + +int isNumber(char *s) +{ + int dot=0, num=0, end=0; + + while(isspace(*s))s++; + if(*s == '-')s++; + if(! *s)return 0; + while(*s) + if(isspace(*s)) + end=1, s++; + else if(end) + return 0; + else if(isdigit(*s)) + num=1, s++; + else if(*s=='.') + if(dot) + return 0; + else + dot=1,s++; + else + return 0; + return num; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION destroy (GtkWidget *widget, gpointer udata): */ +/* It Destroy(close) the iPDC main window with child (if any open) and */ +/* also close the opened terminal. */ +/* ---------------------------------------------------------------------------- */ + +void destroy (GtkWidget *widget, gpointer udata) +{ + FILE *f; + char name[20],*psid,*psname,psN[15]; + + g_print ("\niPDC Closing Now.\n\n"); + gtk_main_quit(); + exit(1); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION GdkPixbuf *create_pixbuf(const gchar * filename) */ +/* function creates a new pixbuf by loading an image from a file. */ +/* The file format is detected automatically. If NULL, error will be set. */ +/* ---------------------------------------------------------------------------- */ + +GdkPixbuf *create_pixbuf(const gchar * filename) +{ + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gdk_pixbuf_new_from_file(filename, &error); + + if(!pixbuf) + { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + + return pixbuf; +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_pdc_detail (GtkButton *widget, gpointer udata) */ +/* It displays the details of running iPDC software on your machine */ +/* to user at any time. */ +/* ---------------------------------------------------------------------------- */ + +void display_pdc_detail (GtkButton *widget, gpointer udata) +{ + /* local variables */ + int rows=0; + char line[20]; + char *markup; + GtkWidget *new_window, *table; + GtkWidget *label, *ok_button; + FILE *file_1; + + /* Open the file 'ipdc?.bin' in read mode */ + file_1 = fopen (ipdcFilePath,"rb"); + + if (file_1 != NULL) + { + /* If its available, then create a new dialog window for displaying the iPDC details. */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "iPDC Details"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + gtk_window_set_resizable ( GTK_WINDOW (new_window), FALSE); + + /* create a table of 8 by 2 squares. */ + rows = 6; + table = gtk_table_new (rows, 2, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + ok_button = gtk_button_new_from_stock (GTK_STOCK_OK);// or GTK_STOCK_APPLY); + + /* This simply creates a grid of labels on the table to demonstrate the window. + g_markup_printf_escaped (): function to display diffrent color and font of text on label */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("iPDC ID Code"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server IP"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + /* This simply read from file and print on label in the table. */ + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + memset(line,'\0',sizeof(line)); + fgets(line,20,file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + + memset(line,'\0',sizeof(line)); + fgets(line,20,file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + label = gtk_label_new (line); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 4, 5); + gtk_widget_show (label); + fclose (file_1); + + /* This is print static text (9000) on label in the table. */ + label = gtk_label_new ("9000"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + /* Define signal on ok_button when it "clicked". */ + g_signal_connect_swapped (ok_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the ok_button is the default. */ + gtk_widget_set_can_default (ok_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), ok_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (ok_button); + gtk_widget_show (ok_button); + + /* Finally show the new_window. */ + gtk_widget_show (new_window); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION about_ipdc (GtkButton *widget, gpointer udata) */ +/* It display the information about iPDC Software like authors, licensing, etc. */ +/* ---------------------------------------------------------------------------- */ + +void about_ipdc (GtkButton *widget, gpointer udata) +{ + /* local variables */ + GtkWidget *about_dialog; + + const gchar *auth[] = {"\nDr. A.M. Kulkarni ", "\nNitesh Pandit ", "\nKedar V. Khandeparkar ", "\nGopal Gajjar ", NULL}; + + /* Create a about dialog for displaying about the iPDC. */ + about_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of about_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)about_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)about_dialog, "Authors :\nNitesh Pandit\nKedar Khandeparkar");//nWide Aera Measurement System\nDepartment of Electrical Engineering\nIndian Institute of Technology, Bombay\nMumbai, INDIA"); + + gtk_about_dialog_set_license ((GtkAboutDialog *)about_dialog, "iPDC - A Free Phasor Data Concentrator & PMU Simulator\n\nGeneral Public License (GPL)\n\nAuthors:\n\t\tNitesh Pandit \n\t\tKedar V. Khandeparkar \n\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"); + + gtk_about_dialog_set_logo ((GtkAboutDialog *)about_dialog, create_pixbuf("/usr/local/share/iPDC/ipdcLogo1.png")); + gtk_about_dialog_set_website ((GtkAboutDialog *)about_dialog, "\nhttp://ipdc.codeplex.com/\n"); + gtk_about_dialog_set_copyright ((GtkAboutDialog *)about_dialog, "Copyright (C) 2011-2012 GPL3"); + gtk_about_dialog_set_authors ((GtkAboutDialog *)about_dialog, auth); + gtk_about_dialog_set_logo ((GtkAboutDialog *)about_dialog, NULL); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (about_dialog, "response", G_CALLBACK (gtk_widget_destroy), about_dialog); + + /* Finally show the about_dialog. */ + gtk_widget_show_all (about_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ipdc_help (GtkButton *but, gpointer udata) */ +/* It shows the general guidelines to user to fill the entries for connecting, */ +/* or disconnecting devices in iPDC Software. */ +/* ---------------------------------------------------------------------------- */ + +void ipdc_help (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *help_dialog; + + /* Create a about dialog for displaying iPDC help. */ + help_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of about_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)help_dialog, "iPDC HELP\n"); + gtk_about_dialog_set_comments ((GtkAboutDialog *)help_dialog, "1) ID Code should be integer i.e. 50, 60, etc.\n2) Port should be >1500 && < 65535.\t\t\n3) IP Address should be like 192.168.23.10. "); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (help_dialog, "response", G_CALLBACK (gtk_widget_destroy), help_dialog); + + /* Finally show the about_dialog. */ + gtk_widget_show_all (help_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_result (char *msg) */ +/* It displays the status message of last performed operation. */ +/* ---------------------------------------------------------------------------- */ + +void validation_result (char *msg) +{ + /* local variables */ + GtkWidget *val_dialog; + + /* Create a new about dialog to displaying the status message of last performed operation. */ + val_dialog = gtk_about_dialog_new (); + + /* Define the diffrent properties of val_dialog. */ + gtk_about_dialog_set_program_name ((GtkAboutDialog *)val_dialog, " "); + gtk_about_dialog_set_comments ((GtkAboutDialog *)val_dialog, msg); + + /* Ensure that the dialog box is destroyed when the user responds */ + g_signal_connect_swapped (val_dialog, "response", G_CALLBACK (gtk_widget_destroy), val_dialog); + + /* Finally show the val_dialog. */ + gtk_widget_show_all (val_dialog); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ipdc_colors(): */ +/* It fills the colors in text on lables and set the images on given buttons. */ +/* It called in main only one time to initialized all the parameters. */ +/* ---------------------------------------------------------------------------- */ + +void ipdc_colors() +{ + GtkTextBuffer *buffer, *buffer1; + GtkTextMark *cursor, *cursor1; + GtkTextIter iter, iter1; + char *markup11; + + markup11 = g_markup_printf_escaped ("Admin Operations"); + gtk_label_set_markup (GTK_LABEL (data->admin_label), markup11); + g_free (markup11); + + markup11 = g_markup_printf_escaped ("@All Rights Reserved"); + gtk_label_set_markup (GTK_LABEL (data->rights_label), markup11); + g_free (markup11); + + /* Set the image (iPDC-logo) on a specific textview1 */ + buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data->text_view1)); + cursor1 = gtk_text_buffer_get_insert (buffer1); + gtk_text_buffer_get_iter_at_mark (buffer1, &iter1, cursor1); + gtk_text_buffer_insert_pixbuf (buffer1, &iter1, create_pixbuf("/usr/local/share/iPDC/ipdcLogo.png")); + gtk_widget_show (data->text_view1); + + /* Set the general image on a textview */ + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data->text_view)); + cursor = gtk_text_buffer_get_insert (buffer); + gtk_text_buffer_get_iter_at_mark (buffer, &iter, cursor); + gtk_text_buffer_insert_pixbuf (buffer, &iter, create_pixbuf("/usr/local/share/iPDC/PSLab.PNG")); + gtk_widget_show (data->text_view); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_pdc_detail (GtkButton *button, gpointer udata) */ +/* It Validates the user enterd details for iPDC device. It gives the */ +/* successful message and go ahead with entered data if all entries */ +/* were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int validation_pdc_detail (GtkButton *button, gpointer udata) +{ + /* local variables */ + char *errmsg1, ip[20]; + const char *text, *text1, *text2, *text3; + + /* Get the text entries filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_udp)); + text2 = gtk_entry_get_text(GTK_ENTRY(p_tcp)); + text3 = gtk_entry_get_text(GTK_ENTRY(p_ip)); + memset(ip,'\0',20); + strcat(ip, text3); + + if(!isNumber((char *)text) || !(atoi(text) > 0) || (PDC_IDCODE == atoi(text))) + { + errmsg1 = " Not a valid iPDC ID value! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!isNumber((char *)text1) || !(atoi(text1) > 1500 && atoi(text1) < 65535) || (atoi(text1) == 9000)) + { + errmsg1 = " Not a valid iPDC UDP Port, must not be 9000! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!isNumber((char *)text2) || !(atoi(text2) > 1500 && atoi(text2) < 65535) || (atoi(text2) == atoi(text1)) || (atoi(text2) == 9000)) + { + errmsg1 = " Not a valid iPDC TCP Port!\nMust be different from UDP port & 9000. Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess for iPDC-Database Server! Try again \n"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + PDC_IDCODE = atoi(text); + UDPPORT = atoi(text1); + TCPPORT = atoi(text2); + memset(dbserver_ip, '\0', 20); + strcpy(dbserver_ip, (char *) text3); + + FILE *fp_ptr; + + /* Open the file "ipdc?.bin" and write all the enterd informations */ + memset(ipdcFilePath, '\0', 200); + strcpy(ipdcFilePath, ipdcFolderPath); + strcat(ipdcFilePath, "/"); + strcat(ipdcFilePath, "ipdc"); + strcat(ipdcFilePath, text); + strcat(ipdcFilePath, ".bin"); + ipdcFilePath[strlen(ipdcFilePath)] = '\0'; + + /* Close/destroy the pdc_detail_window */ + gtk_widget_destroy (pdc_detail_window); + + fp_ptr = fopen (ipdcFilePath,"rb"); + + if(fp_ptr == NULL) + { + final_pdc_setup_call(); + } + else + { + /* Close the open iPDC Setup file */ + fclose(fp_ptr); + + GtkWidget *table, *label, *yes, *no; + + /* Create a new dialog window for PMU Server Setup */ + new_window = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (new_window), "Warning!"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (4, 3, FALSE); + + /* Set the spacing to 50 on x and 5 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 15); + gtk_table_set_col_spacings (GTK_TABLE (table), 5); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + yes = gtk_button_new_with_label ("YES"); + no = gtk_button_new_with_label ("NO"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Warning!"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Setup File with the given ID code is alredy present\nin the system. Do you want to overwrite it?"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 3, 4); + gtk_widget_show (label); + + /* Signal handling for buttons on PMU Server Setup Window */ + g_signal_connect (yes, "clicked", G_CALLBACK(validation_setup_file_name), (gpointer) "yes"); + g_signal_connect (no, "clicked", G_CALLBACK(validation_setup_file_name), (gpointer) "no"); + g_signal_connect (new_window, "destroy", G_CALLBACK(gtk_widget_destroy), new_window); + g_signal_connect_swapped (new_window, "response", G_CALLBACK(gtk_widget_destroy), new_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (yes, TRUE); + gtk_widget_set_can_default (no, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), yes, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), no, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (yes); + gtk_widget_show (yes); + gtk_widget_grab_default (no); + gtk_widget_show (no); + + /* Finally show the new_window */ + gtk_widget_show (new_window); + } + + return 1; + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION validation_setup_file_name (GtkWidget *widget, gpointer data) */ +/* It Validates the user's choice, whether he wants to go with new iPDC setup, */ +/* or want to fill the new iPDC setup details? */ +/* ---------------------------------------------------------------------------- */ + +void validation_setup_file_name (GtkWidget *widget, gpointer data) +{ + char t[4]; + strcpy(t, (char *) data); + + /* destroy the warning window */ + gtk_widget_destroy (new_window); + + /* Match the user's choice and take appropiate action? */ + if(!strcmp(t, "yes")) + { + /* User with ok with overwtithing new iPDC setup, then call the final setup call*/ + final_pdc_setup_call(); + } + else + { + /* User do not want to overwtithing new iPDC setup, then again call iPDC setup window */ + fill_pdc_details (NULL); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION final_pdc_setup_call() */ +/* It will create the iPDC setup file and intialize the few global variable. */ +/* ---------------------------------------------------------------------------- */ + +void final_pdc_setup_call() +{ + /* local variables */ + char buff[50]; + FILE *fp_ptr; + + fp_ptr = fopen (ipdcFilePath,"wb"); + + fputs("ipdcServer", fp_ptr); + fputs(" 1", fp_ptr); + fputc('\n',fp_ptr); + memset(buff, '\0', 50); + sprintf(buff, "%d", PDC_IDCODE); + fputs(buff, fp_ptr); + fputc('\n',fp_ptr); + + memset(buff, '\0', 50); + sprintf(buff, "%d", UDPPORT); + fputs(buff, fp_ptr); + fputc('\n',fp_ptr); + + memset(buff, '\0', 50); + sprintf(buff, "%d", TCPPORT); + fputs(buff, fp_ptr); + fputc('\n',fp_ptr); + + fputs(dbserver_ip, fp_ptr); + fputc('\n',fp_ptr); + + fputs("LowerDevices 0", fp_ptr); + fputc('\n',fp_ptr); + + fputs("UpperDevices 0", fp_ptr); + fputc('\n',fp_ptr); + + fputs("SourcesCFG 0", fp_ptr); + fputc('\n',fp_ptr); + fclose(fp_ptr); + + /* Enable all (mentioned) buttons on main ipdc window */ + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_off_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_on_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_cfg_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->display_conn_table_button), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->menu_conn_table), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->pdc_details_menuitem), TRUE); + + /* Disable the menuitem for iPDC details entries */ + gtk_widget_set_visible(GTK_WIDGET(data->enter_pdc_detail_menuitem), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* setup() call to stablish the connections at iPDC restart */ + recreate_cfg_objects(); + setup(); + + validation_result (" iPDC Setup is successfully done. "); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_pmu_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for add Source devices (PMU/PDC). */ +/* It gives the successful message and go ahead with entered data if */ +/* all entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int add_pmu_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + char *errmsg1, ip[20], tmp[4]; + const char *text, *text1, *text2, *text3; + + /* Get the text entries filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_ip)); + text2 = gtk_entry_get_text(GTK_ENTRY(p_port)); + text3 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(ip,'\0',20); + strcat(ip, text1); + strcpy (tmp, text3); + + if ((!isNumber((char *)text)) || !(atoi(text) > 0) || (atoi(text) == PDC_IDCODE)) /* Check text_box entry for valid integer or not? */ + { + errmsg1 = " Not a valid Source Device ID code! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!isNumber((char *)text2) || !(atoi(text2) > 1500 && atoi(text2) < 65535) || (atoi(text2) == TCPPORT) || (atoi(text2) == UDPPORT) || (atoi(text2) == DBPORT)) /* TCP and UDP port of iPDC should not match with it */ + { + errmsg1 = " Not a valid Port for Source Device! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess of Source Device! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* call add_PMU() to actual add pmu/pdc and start communication */ + ret = add_PMU((char *)text, (char *)text1, (char *)text2, (char *)text3); + if (ret == 0) + { + /* Close/destroy the add_pmu_window */ + gtk_widget_destroy (add_pmu_window); + + errmsg1 = " Source Device Successfully Added. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Device details already exists! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for function Removes the Source devices */ +/* or send command frames to Source devices. It gives the successful message */ +/* and go ahead with entered data if all entries were right, */ +/* else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + char *errmsg1, tmp[4]; + + /* Get the text entries filled by user */ + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn)) == TRUE) + { + set_all = 1; + + if(!strcmp(find_butn, "1")) /* If function called by 'Remove source device' */ + { + /* call remove_Lower_Node() to remove source device */ + ret = remove_Lower_Node(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Source remove window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Source device successfully removed. "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); + return 0; + } + } + else if(!strcmp(find_butn, "2")) /* If function called by 'Send Data Transmission OFF' */ + { + /* call put_data_transmission_off() to put OFF data of source device */ + ret = put_data_transmission_off(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission OFF now for given device. "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "3")) /* If function called by 'Send Data Transmission ON' */ + { + /* call put_data_transmission_on() to put ON data of source device */ + ret = put_data_transmission_on(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission ON now for given device. "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); + return 0; + } + } + else if(!strcmp(find_butn, "4")) /* If function called by Send Configuration request */ + { + /* call configuration_request() to send Configuration request */ + ret = configuration_request(NULL, NULL); + + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Configuration Frame request sent to given device "; + validation_result (errmsg1); + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); + return 0; + } + } + else + { + errmsg1 = " UNKNOWN FUNCTION CALL??? Try again"; + validation_result (errmsg1); + return 1; + } + } + else + { + const char *text, *text1; + + text = gtk_entry_get_text(GTK_ENTRY(p_id)); + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(tmp, '\0', 4); + strcpy (tmp, text1); + + if ((!isNumber((char *)text)) || !(atoi(text) > 0) || (atoi(text) == PDC_IDCODE)) /* Check text_box entry for valid integer or not? */ + { + errmsg1 = " Not a valid Source Device ID code! Try again "; + validation_result (errmsg1); + return 0; + } + else /* Only if all the text_box entries were right */ + { + if(!strcmp(find_butn, "1")) /* If function called by 'Remove source device' */ + { + /* call remove_Lower_Node() to remove source device */ + ret = remove_Lower_Node((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Source remove window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Source device successfully removed. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "2")) /* If function called by 'Send Data Transmission OFF' */ + { + /* call put_data_transmission_off() to put OFF data of source device */ + ret = put_data_transmission_off((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission OFF now for given device. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "3")) /* If function called by 'Send Data Transmission ON' */ + { + /* call put_data_transmission_on() to put ON data of source device */ + ret = put_data_transmission_on((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Data Transmission ON now for given device. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else if(!strcmp(find_butn, "4")) /* If function called by Send Configuration request */ + { + /* call configuration_request() to send Configuration request */ + ret = configuration_request((char *)text, (char *)text1); + if (ret == 0) + { + /* Close/destroy the Send command frame window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Configuration Frame request sent to given device "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Entered Source device not found! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } + else + { + errmsg1 = " UNKNOWN FUNCTION CALL??? Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 1; + } + } + } + +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION new_pdc_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for add Destination devices as PDC. */ +/* It gives the successful message and go ahead with entered data if */ +/* all entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int new_pdc_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + const char *text, *text1; + char *errmsg1, ip[20], tmp[6]; + + /* Get the text entries for PDC, filled by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_ip)); + text1 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(ip,'\0',20); + strcat(ip, text); + strcpy (tmp, text1); + + if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess for Destination Device! Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* call add_PDC() to actual add pdc and start communication */ + ret = add_PDC((char *)text, (char *)text1); + if (ret == 0) + { + gtk_widget_destroy (new_window); + + errmsg1 = " Destination device is successfully added. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = " Device details already exists! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_pdc_validation (GtkButton *but, gpointer udata) */ +/* It Validates the user enterd details for remove Destination devices as PDC. */ +/* It gives the successful message and go ahead with entered data if */ +/* all entries were right, else it shows the validation error message to user. */ +/* ---------------------------------------------------------------------------- */ + +int remove_pdc_validation (GtkButton *but, gpointer udata) +{ + /* local variables */ + int ret; + const char *text, *text1, *text2; + char *errmsg1, ip[20], tmp[6]; + + /* Get the text entries for remove source device by user */ + text = gtk_entry_get_text(GTK_ENTRY(p_ip)); + text1 = gtk_entry_get_text(GTK_ENTRY(p_port)); + text2 = gtk_combo_box_get_active_text(GTK_COMBO_BOX(p_protocol)); + memset(ip,'\0',20); + strcat(ip, text); + strcpy (tmp, text2); + + if(!isNumber((char *)text) || !(atoi(text1) > 1500 || (atoi(text1) < 65535)) || (atoi(text) == PDC_IDCODE)) + { + errmsg1 = " Not a valid port of Destination Device! Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else if(!checkip(ip)) /* Check text_box entry for valid IP Address or not? */ + { + errmsg1 = " Not a valid IP Addess of Destination Device! Try again "; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + else /* Only if all the text_box entries were right */ + { + /* Call remove_PDC() to remove PDC device entry as well as objects if it presents */ + ret = remove_PDC((char *)text, (char *)text1, (char *)text2); + if (ret == 0) + { + /* Close/destroy the remove PDC window */ + gtk_widget_destroy (new_window); + + errmsg1 = " Destination device is successfully removed. "; + validation_result (errmsg1); /* Show the success message to user */ + return 1; + } + else + { + errmsg1 = "Entered destination device not found! Try again"; + validation_result (errmsg1); /* Show the unsuccess message to user */ + return 0; + } + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION fill_pdc_details () */ +/* This function called by main once to accept the iPDC details from user */ +/* on a 'iPDC Setup' window. If teher is already a file 'ipdcINFO.bin' available */ +/* then it read the file and initialized them globally. */ +/* ---------------------------------------------------------------------------- */ + +void fill_pdc_details (char *filePath) +{ + if(filePath != NULL) + { + /* Open the file 'ipdcINFO.bin' in read mode */ + FILE *file_1 = fopen (filePath,"rb"); + + if (file_1 != NULL) + { + char line[20]; + + /* If file is present initialize the global varialbes by details in file */ + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + PDC_IDCODE = atoi(line); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + UDPPORT = atoi(line); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + TCPPORT = atoi(line); + + memset(line,'\0',sizeof(line)); + fgets (line, 20, file_1); + strcpy(dbserver_ip, line); + fclose (file_1); + + /* Disable all the (mentioned) buttons on main ipdc window */ + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pmu_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_off_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_data_on_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->cmd_cfg_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->add_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->remove_pdc_button), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(data->display_conn_table_button), TRUE); + + gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->menu_conn_table), TRUE); + gtk_widget_set_visible(GTK_WIDGET(data->pdc_details_menuitem), TRUE); + + /* Desable the menuitem button if there is already enty for iPDC */ + gtk_widget_set_visible(GTK_WIDGET(data->enter_pdc_detail_menuitem), FALSE); + gtk_widget_set_visible(GTK_WIDGET(data->open_ipdc_setup), FALSE); + + /* Recreate the configuration objects and connection table */ + recreate_cfg_objects(); + recreate_Connection_Table(); + + /* setup() call to stablish the connections if any */ + setup(); + } + } + else + { + /* local variables for iPDC Detail windows */ + char *markup15; + GtkWidget *table, *label; + GtkWidget *valdbutton, *help_button, *cancle_button; + + /* Create a new dialog window for iPDC Setup */ + pdc_detail_window = gtk_dialog_new (); + g_signal_connect (pdc_detail_window, "destroy", G_CALLBACK (gtk_widget_destroy), pdc_detail_window); + gtk_window_set_title (GTK_WINDOW (pdc_detail_window), "iPDC Setup"); + gtk_container_set_border_width (GTK_CONTAINER (pdc_detail_window), 10); + + /* Create a table of 6 by 2 squares. */ + table = gtk_table_new (6, 2, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(pdc_detail_window)->vbox), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Add few button to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Add"); + cancle_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); + help_button = gtk_button_new_from_stock (GTK_STOCK_HELP);// or GTK_STOCK_APPLY); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new (" "); + markup15 = g_markup_printf_escaped ("Fill iPDC Details"); + gtk_label_set_markup (GTK_LABEL (label), markup15); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup15); + + label = gtk_label_new ("iPDC ID Code"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC UDP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC TCP Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server IP "); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + label = gtk_label_new ("Database Server Port"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 1, 2); + gtk_widget_show (p_id); + + p_udp = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_udp, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_udp, 1, 2, 2, 3); + gtk_widget_show (p_udp); + + p_tcp = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_tcp, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_tcp, 1, 2, 3, 4); + gtk_widget_show (p_tcp); + + p_ip = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_ip, 15); + gtk_table_attach_defaults (GTK_TABLE (table), p_ip, 1, 2, 4, 5); + gtk_widget_show (p_ip); + + label = gtk_label_new (" "); + markup15 = g_markup_printf_escaped ("9000"); + gtk_label_set_markup (GTK_LABEL (label), markup15); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + /* Signal handling for buttons on iPDC Setup Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_pdc_detail), NULL); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect_swapped (cancle_button, "clicked", G_CALLBACK (gtk_widget_destroy), pdc_detail_window); + g_signal_connect_swapped (pdc_detail_window, "destroy", G_CALLBACK (gtk_widget_destroy), pdc_detail_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (cancle_button, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdc_detail_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdc_detail_window)->action_area), cancle_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdc_detail_window)->action_area), help_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (cancle_button); + gtk_widget_show (cancle_button); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + + /* Finally show the pdc_detail_window */ + gtk_widget_show (pdc_detail_window); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_pmu (GtkButton *but, gpointer udata) */ +/* It open the add source device dialog window, and user have to enter */ +/* the source device details of which he wants to connect. */ +/* ---------------------------------------------------------------------------- */ + +void add_pmu (GtkButton *but, gpointer udata) +{ + /* local variables */ + char *markup1; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button, *label; + + /* Create a new dialog window for Source Device Details */ + add_pmu_window = gtk_dialog_new (); + g_signal_connect (add_pmu_window, "destroy", G_CALLBACK (gtk_widget_destroy), add_pmu_window); + gtk_window_set_title (GTK_WINDOW (add_pmu_window), "Add Source Device"); + gtk_container_set_border_width (GTK_CONTAINER (add_pmu_window), 10); + gtk_window_set_resizable ( GTK_WINDOW (add_pmu_window), FALSE); + + /* Create a table of 5 by 2 squares. */ + table = gtk_table_new (5, 2, FALSE); + + /* Set the spacing to 20 on x and 30 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the window */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(add_pmu_window)->vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + + /* Add few button to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("close"); + valdbutton = gtk_button_new_with_label ("Add"); + help_button = gtk_button_new_with_label ("Help"); + + /* This simply creates a grid of toggle buttons on the table */ + label = gtk_label_new ("-"); + markup1 = g_markup_printf_escaped ("Enter Source Device Details"); + gtk_label_set_markup (GTK_LABEL (label), markup1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free (markup1); + + label = gtk_label_new ("Source ID Code"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Source IP Address"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Source Port Number"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_id, 1, 2, 1, 2); + gtk_widget_show (p_id); + + p_ip = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_ip, 15); + gtk_table_attach_defaults (GTK_TABLE (table), p_ip, 1, 2, 2, 3); + gtk_widget_show (p_ip); + + p_port = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_port, 5); + gtk_table_attach_defaults (GTK_TABLE (table), p_port, 1, 2, 3, 4); + gtk_widget_show (p_port); + + /* Create combo boxe for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_protocol, 1, 2, 4, 5); + gtk_widget_show (p_protocol); + + /* Signal handling for buttons on Source Device Details Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (add_pmu_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), add_pmu_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_button, TRUE); + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (add_pmu_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (add_pmu_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (add_pmu_window)->action_area), close_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the add_pmu_window */ + gtk_widget_show (add_pmu_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cmd_or_remove_pmu (GtkButton *but, gpointer udata) */ +/* It is a common function for Remove Source Device and Send Different command */ +/* frames to Source devices. */ +/* ---------------------------------------------------------------------------- */ + +void cmd_or_remove_pmu (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *scrolled_window, *window2, *hbox1; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button, *label; + + int on_flag = 0, off_flag = 0, min_rows = 6; + char *markup2; + char *p_buff, tmp_str[20]; + + /* Copy the 'udata' that came along with signal to identifies which function should execute */ + strcpy(find_butn,(char *) udata); + memset(buff, '\0', strlen(buff)); + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + + /* Set the window title according to fired signal */ + if(!strcmp(find_butn, "1")) + { + gtk_window_set_title (GTK_WINDOW (new_window), "Remove Source Device"); + } + else if(!strcmp(find_butn, "2")) + { + gtk_window_set_title (GTK_WINDOW (new_window), "Turn OFF Data Transmission"); + } + else if(!strcmp(find_butn, "3")) + { + gtk_window_set_title (GTK_WINDOW (new_window), "Turn ON Data Transmission"); + } + else + { + gtk_window_set_title (GTK_WINDOW (new_window), "Configuration Frame Request"); + } + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 350); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, FALSE, TRUE, 0); + gtk_widget_show (scrolled_window); + + hbox1 = gtk_hbox_new (FALSE, 16); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), hbox1, FALSE, TRUE, 0); + gtk_widget_show (hbox1); + + window2 = gtk_alignment_new (0,0,0,0); + gtk_box_pack_start (GTK_BOX (hbox1), window2, FALSE, TRUE, 0); + gtk_widget_show (window2); + + /* create a table of 4 by 2 squares. */ + table = gtk_table_new (20, 4, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_table_set_col_spacings (GTK_TABLE (table), 8); + + /* Pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Open the file 'ipdcINFO.bin' in read mode */ + set_all = 0; + struct Lower_Layer_Details *t = LLfirst; + + if (t == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("No records were found.\n-------------------------------------------------------------------\n"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 4, 1, 2); + gtk_widget_show (label); + g_free(markup2); + } + else + { + /* Check wether fired signal from remove source or send CFG request */ + /* Add the button with title according to fired signal */ + + if(!strcmp(find_butn, "4")) + { + valdbutton = gtk_button_new_with_label ("Send"); + } + else if(!strcmp(find_butn, "1")) + { + valdbutton = gtk_button_new_with_label ("Remove"); + } + else if(!strcmp(find_butn, "2")) /* if signal fired from send Transmission OFF request to Source device */ + { + /* Add a "Send" button to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Send"); + } + else if(!strcmp(find_butn, "3")) /* if signal fired from send Transmission ON request to Source device */ + { + /* Add a "Send" button to the bottom of the dialog */ + valdbutton = gtk_button_new_with_label ("Send"); + } + + t = LLfirst; + int i = 2; + + while(t != NULL) + { + if((!strcmp(find_butn, "1")) || (!strcmp(find_butn, "4")) || (!strcmp(find_butn, "2") && (t->data_transmission_off == 0)) || (!strcmp(find_butn, "3") && (t->data_transmission_off == 1))) + { + /* Concate all the data into a big buffer */ + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->pmuid); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strcpy(tmp_str, t->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncpy(tmp_str, t->protocol,3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + i++; + } + t = t->next; + } // while ends + + if (i != 2) + { + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("Connections Detail"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, 0, 1); + gtk_widget_show (label); + g_free(markup2); + + label = gtk_label_new ("Source ID"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 1, 2); + gtk_widget_show (label); + } + else + { + gtk_widget_set_sensitive (valdbutton, FALSE); + if (!strcmp(find_butn, "2")) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("No records were found.\n"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + g_free(markup2); + } + else if (!strcmp(find_butn, "3")) /* Simply check for source objects whose Transmission is not ON (or OFF) */ + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup2 = g_markup_printf_escaped ("No records were found.\n"); + gtk_label_set_markup (GTK_LABEL (label), markup2); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 1, 2); + gtk_widget_show (label); + g_free(markup2); + } + } + if (i < min_rows) + { + int jj; + for (jj = i; jj < min_rows; jj++) + { + label = gtk_label_new (" "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Create combo boxe for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_box_pack_end (GTK_BOX (hbox1), p_protocol, FALSE, TRUE, 0); + gtk_widget_show (p_protocol); + + label = gtk_label_new ("Protocol"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + p_id = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_id, 5); + gtk_box_pack_end (GTK_BOX (hbox1), p_id, FALSE, TRUE, 0); + gtk_widget_show (p_id); + + label = gtk_label_new ("Source ID Code"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + chkBtn = gtk_check_button_new_with_label("Select All"); + gtk_box_pack_end (GTK_BOX (hbox1), chkBtn, FALSE, TRUE, 0); + gtk_widget_show (chkBtn); + + /* Add a "Help" button to the bottom of the dialog */ + help_button = gtk_button_new_with_label ("Help"); + + /* Signal handling for buttons on Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (cmd_or_remove_pmu_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect (chkBtn, "toggled", G_CALLBACK (select_function), NULL); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), help_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + } + + /* Add a "Close" button to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("Close"); + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_widget_set_can_default (close_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + on_flag = 0, off_flag = 0; + + /* Finally show the new_window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkbox_function(GtkWidget *widget, gpointer data) */ +/* This is called when checkboxes are selected, and do the appropriate */ +/* changes in the other checkbox or widget? */ +/* ---------------------------------------------------------------------------- */ + +void select_function(GtkWidget *widget, gpointer data) +{ + if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chkBtn)) == TRUE) + { + gtk_widget_set_sensitive(GTK_WIDGET(p_id), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(p_protocol), FALSE); + } + else + { + gtk_widget_set_sensitive(GTK_WIDGET(p_protocol), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(p_id), TRUE); + gtk_entry_set_text(GTK_ENTRY(p_id), " "); + } +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_new_pdc (GtkButton *but, gpointer udata) */ +/* It open the Destination Details window, and user have to enter */ +/* the Destination details of which he wants to connect. */ +/* ---------------------------------------------------------------------------- */ + +void add_new_pdc (GtkButton *but, gpointer udata) +{ + /* local variables */ + char *markup3; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button, *label; + + /* Create a new dialog window for Destination Detail */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "Add Destination"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + gtk_window_set_resizable ( GTK_WINDOW (new_window), FALSE); + + /* Create a table of 4 by 2 squares. */ + table = gtk_table_new (4, 2, FALSE); + + /* Set the spacing to 50 on x and 35 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 16); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("close"); + valdbutton = gtk_button_new_with_label ("Add"); + help_button = gtk_button_new_with_label ("Help"); + + /* this simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */ + label = gtk_label_new (" "); + markup3 = g_markup_printf_escaped ("Enter Destination Device Details"); + gtk_label_set_markup (GTK_LABEL (label), markup3); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1); + gtk_widget_show (label); + g_free(markup3); + + label = gtk_label_new ("Destination IP Address"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_misc_set_alignment (GTK_MISC(label),0,0); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_ip = gtk_entry_new(); + gtk_entry_set_max_length ((GtkEntry *)p_ip, 15); + gtk_table_attach_defaults (GTK_TABLE (table), p_ip, 1, 2, 2, 3); + gtk_widget_show (p_ip); + + /* Create combo boxe for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_table_attach_defaults (GTK_TABLE (table), p_protocol, 1, 2, 3, 4); + gtk_widget_show (p_protocol); + + /* Signal handling for buttons on Destination Details Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (new_pdc_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_button, TRUE); + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), help_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the new_window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_pdc (GtkButton *but, gpointer udata) */ +/* It open the Destination Details window, and user have to enter */ +/* the Destination details of which he wants to remove. */ +/* ---------------------------------------------------------------------------- */ + +void remove_pdc (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *scrolled_window, *label, *hbox1, *window2; + GtkWidget *table, *close_button; + GtkWidget *valdbutton, *help_button; + + char *markup4; + char *p_buff, tmp_str[20]; + int i, min_rows = 10; + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "Remove Destination"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 350); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it. */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + hbox1 = gtk_hbox_new (FALSE, 16); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), hbox1, FALSE, TRUE, 0); + gtk_widget_show (hbox1); + + window2 = gtk_alignment_new (0,0,0,0); + gtk_box_pack_start (GTK_BOX (hbox1), window2, FALSE, TRUE, 0); + gtk_widget_show (window2); + + /* create a table of 6 by 2 squares. */ + table = gtk_table_new (20, 3, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add few buttons to the bottom of the dialog */ + close_button = gtk_button_new_with_label ("close"); + valdbutton = gtk_button_new_with_label ("Remove"); + help_button = gtk_button_new_with_label ("Help"); + + struct Upper_Layer_Details *t1 = ULfirst; + memset(buff, '\0', strlen(buff)); + + if (t1 == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup4 = g_markup_printf_escaped ("No Higher Level PDC is Registered With This iPDC."); + gtk_label_set_markup (GTK_LABEL (label), markup4); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 3, 1, 2); + gtk_widget_show (label); + g_free(markup4); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 2, 3); + gtk_widget_show (label); + } + else + { + i = 4; + while(t1 != NULL) + { + memset(tmp_str,'\0',sizeof(tmp_str)); + strcat(tmp_str, t1->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t1->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncat(tmp_str, t1->protocol, 3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + i++; + t1 = t1->next; + } + + if (i != 4) + { + /* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */ + label = gtk_label_new (" "); + markup4 = g_markup_printf_escaped ("Destination Connections Detail"); + gtk_label_set_markup (GTK_LABEL (label), markup4); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 0, 1); + gtk_widget_show (label); + g_free(markup4); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 2, 3); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, 3, 4); + gtk_widget_show (label); + } + if (i < min_rows) + { + int jj; + for (jj = i; jj < min_rows; jj++) + { + label = gtk_label_new (" "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 3, jj, jj+1); + gtk_widget_show (label); + } + } + + /* Create combo box for user with some fixed values */ + p_protocol = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "UDP"); + gtk_combo_box_append_text(GTK_COMBO_BOX(p_protocol), "TCP"); + gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0); + gtk_box_pack_end (GTK_BOX (hbox1), p_protocol, FALSE, TRUE, 0); + gtk_widget_show (p_protocol); + + label = gtk_label_new ("Protocol"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + /* Create text boxes for user to enter appropriate values */ + p_port = gtk_entry_new(); + gtk_box_pack_end (GTK_BOX (hbox1), p_port, FALSE, TRUE, 0); + gtk_widget_show (p_port); + + label = gtk_label_new ("Port"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + p_ip = gtk_entry_new(); + gtk_box_pack_end (GTK_BOX (hbox1), p_ip, FALSE, TRUE, 0); + gtk_widget_show (p_ip); + + label = gtk_label_new ("IP Address"); + gtk_box_pack_end (GTK_BOX (hbox1), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + /* Signal handling for buttons on Remove PDC Window */ + g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (remove_pdc_validation), valdbutton); + g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (ipdc_help), NULL); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (valdbutton, TRUE); + gtk_widget_set_can_default (help_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), valdbutton, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), help_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (valdbutton); + gtk_widget_show (valdbutton); + gtk_widget_grab_default (help_button); + gtk_widget_show (help_button); + } + + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_widget_set_can_default (close_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the new_window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION connection_table (GtkButton *but, gpointer udata) */ +/* It Displays the connection tables, first is Source device connection table, */ +/* another one is Destination device connection table. */ +/* ---------------------------------------------------------------------------- */ + +void connection_table (GtkButton *but, gpointer udata) +{ + /* local variables */ + GtkWidget *scrolled_window; + GtkWidget *table, *close_button; + GtkWidget *label; + + char *p_buff, tmp_str[20]; + char *markup5, *markup6, *markup7, *markup8; + int i = 1; + + /* Create a new dialog window for the scrolled window to be packed into */ + new_window = gtk_dialog_new (); + g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window); + gtk_window_set_title (GTK_WINDOW (new_window), "iPDC Connections"); + gtk_container_set_border_width (GTK_CONTAINER (new_window), 10); + + /* Create a new scrolled window. */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 350); + + /* the policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it. */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, FALSE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of 20 by 5 squares */ + table = gtk_table_new (20, 5, FALSE); + + /* Set the spacing to 15 on x and 25 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the scrolled window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + close_button = gtk_button_new_from_stock (GTK_STOCK_OK);// or GTK_STOCK_APPLY); + + /* Print some text on lable with color and proper font */ + label = gtk_label_new ("-"); + markup5 = g_markup_printf_escaped ("Source Devices Connection Table\t\t"); + gtk_label_set_markup (GTK_LABEL (label), markup5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 1, 2); + gtk_widget_show (label); + + struct Lower_Layer_Details *t = LLfirst; + memset(buff, '\0', strlen(buff)); + + if (t == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup6 = g_markup_printf_escaped ("No Lower Level PMU/PDC is Registered With This iPDC."); + gtk_label_set_markup (GTK_LABEL (label), markup6); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 2, 3); + gtk_widget_show (label); + g_free(markup6); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 3, 4); + gtk_widget_show (label); + } + else + { + i = 2; + label = gtk_label_new ("ID Code"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1,i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + i++; + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + + while(t != NULL) + { + /* Concate all the data into a big buffer */ + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->pmuid); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strcpy(tmp_str, t->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncpy(tmp_str, t->protocol,3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, i, i+1); + gtk_widget_show (label); + + i++; + t = t->next; + } + } + + /* Print some text on lable with color and proper font */ + label = gtk_label_new ("-"); + markup7 = g_markup_printf_escaped ("\nDestination Devices Connection Table"); + gtk_label_set_markup (GTK_LABEL (label), markup7); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i+2, i+3); + gtk_widget_show (label); + g_free (markup7); + + i = i+3; + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + + struct Upper_Layer_Details *t1 = ULfirst; + memset(buff, '\0', strlen(buff)); + + if (t1 == NULL) + { + /* Place lable on a spacific position on table with text 'No records were found'*/ + label = gtk_label_new (" "); + markup8 = g_markup_printf_escaped ("No Higher Level PDC is Registered With This PDC."); + gtk_label_set_markup (GTK_LABEL (label), markup8); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, i, i+1); + gtk_widget_show (label); + g_free(markup8); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + } + else + { + label = gtk_label_new ("IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + i++; + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, i, i+1); + gtk_widget_show (label); + i++; + + while(t1 != NULL) + { + memset(tmp_str,'\0',sizeof(tmp_str)); + strcpy(tmp_str, t1->ip); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + sprintf(tmp_str, "%d", t1->port); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, i, i+1); + gtk_widget_show (label); + + memset(tmp_str,'\0',sizeof(tmp_str)); + strncpy(tmp_str, t1->protocol,3); + label = gtk_label_new (tmp_str); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, i, i+1); + gtk_widget_show (label); + + i++; + t1 = t1->next; + } + } + + /* Signal handling when Window will distroy or closed */ + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_widget_destroy), new_window); + + /* This makes it so the button is the default. */ + gtk_widget_set_can_default (close_button, TRUE); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (close_button); + gtk_widget_show (close_button); + + /* Finally show the new_window or Connection window */ + gtk_widget_show (new_window); +}; + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ipdc_setup_fileSelector(GtkWidget *widget, gpointer udata) */ +/* It will display a file selector window to the user. User have the */ +/* responsibility to choose the correct previously saved file for iPDC Setup. */ +/* ---------------------------------------------------------------------------- */ + +void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata) +{ + strcat(ipdcFolderPath,"/"); + + /* Create a new file selection widget */ + ipdc_setup_window = gtk_file_selection_new ("iPDC Setup file selection"); + + /* Connect the ok_button to view_setup_file function */ + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (ipdc_setup_window)->ok_button), "clicked", (GtkSignalFunc) view_setup_file, ipdc_setup_window ); + + /* Connect the cancel_button to destroy the widget */ + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (ipdc_setup_window)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (ipdc_setup_window)); + + /* Lets set the filename, as if this were a save dialog, and we are giving a default filename */ + gtk_file_selection_set_filename (GTK_FILE_SELECTION(ipdc_setup_window), ipdcFolderPath); + + gtk_widget_show(ipdc_setup_window); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION view_setup_file(GtkWidget *w, GtkFileSelection *fs) */ +/* This function displays the different attributes of selected iPDC Setup File. */ +/* It will show the iPDC connectoin details before apply. */ +/* ---------------------------------------------------------------------------- */ + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs) +{ + /* local variables */ + GtkWidget *label, *hsep; + GtkWidget *table, *scrolled_window; + GtkWidget *apply_button, *cancel_button; + + int tempi, rowCount; + int sDevices, dDevices, rowi; + char *d1, buff[200], *s; + char *markup,*rline = NULL; + + size_t len = 0; + ssize_t read; + FILE *fp1; + + s = (char *)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + strcpy(fptr, s); + + gtk_widget_destroy(ipdc_setup_window); + + fp1 = fopen(s, "rb"); + + if (fp1 == NULL) + { + validation_result(" Setup file doesn't exist! Try again"); + } + else + { + rowCount = 11; + sDevices = 0; + dDevices = 0; + tempi = 0; + + while(tempi < 6) //iPDCServer + { + read = getline(&rline, &len, fp1); + tempi++; + } + + if(read > 0) //LowerDevices + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + sDevices = tempi; + rowCount = rowCount + 5*sDevices; + + while (tempi > 0) + { + read = getline(&rline, &len, fp1); + tempi--; + } + } + + read = getline(&rline, &len, fp1); //UpperDevices + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + dDevices = tempi; + rowCount = rowCount + 4*dDevices; + + while (tempi > 0) + { + read = getline(&rline, &len, fp1); + tempi--; + } + } + fclose (fp1); + + /* Open the iPDC Setup File in read mode */ + fp1 = fopen(s, "rb"); + + /* If its available, then create a new dialog window for displaying the iPDC details. */ + setup_display_window = gtk_dialog_new (); + g_signal_connect (setup_display_window, "destroy", G_CALLBACK (gtk_widget_destroy), setup_display_window); + gtk_window_set_title (GTK_WINDOW (setup_display_window), "iPDC Setup"); + gtk_container_set_border_width (GTK_CONTAINER (setup_display_window), 10); + + /* Create a new scrolled window */ + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); + gtk_widget_set_size_request (scrolled_window, -1, 450); + + /* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + + /* The dialog window is created with a vbox packed into it */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(setup_display_window)->vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + /* Create a table of ? by 2 squares */ + rowCount = dDevices + sDevices + 15; + table = gtk_table_new (rowCount, 5, FALSE); + + /* set the spacing to 10 on x and 10 on y */ + gtk_table_set_row_spacings (GTK_TABLE (table), 8); + gtk_table_set_col_spacings (GTK_TABLE (table), 16); + + /* Pack the table into the window */ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); + gtk_widget_show (table); + + /* Add a "close" button to the bottom of the dialog */ + apply_button = gtk_button_new_from_stock (GTK_STOCK_APPLY); + cancel_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); + + /* This simply creates a grid of labels on the table to demonstrate the window. + g_markup_printf_escaped (): function to display diffrent color and font of text on label */ + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Setup File Details"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 0, 1); + gtk_widget_show (label); + g_free (markup); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 1, 2); + gtk_widget_show (label); + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("iPDC Server "); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 2, 3); + gtk_widget_show (label); + g_free (markup); + + label = gtk_label_new ("iPDC ID Code"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC UDP Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("iPDC TCP Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("DB Server IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new ("DB Server Port "); + gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 3, 4); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 4, 5); + gtk_widget_show (label); + + /* This simply read from file and print on label in the table. */ + getline(&rline, &len, fp1); //To read 'ipdcServer 1' line + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6); + gtk_widget_show (label); + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6); + gtk_widget_show (label); + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 5, 6); + gtk_widget_show (label); + + getline(&rline, &len, fp1); + label = gtk_label_new (rline); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 5, 6); + gtk_widget_show (label); + + /* This is print static text (9000) on label in the table. */ + sprintf(buff, "9000"); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 5, 6); + gtk_widget_show (label); + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 6, 7); + gtk_widget_show (label); + + getline(&rline, &len, fp1); //To read 'LowerDevices' line + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Source Devices "); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 7, 8); + gtk_widget_show (label); + g_free (markup); + + sprintf(buff, "Measurement Received From Total : %d Devices", sDevices); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, 8, 9 ); + gtk_widget_show (label); + + rowi = 9; + if (sDevices > 0) + { + label = gtk_label_new ("Source ID"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Source IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi+1; + } + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi+1; + int i = 1; + + for(i; i <= sDevices; i++) + { + + getline(&rline, &len, fp1); + + d1 = strtok (rline,","); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, rowi, rowi+1); + gtk_widget_show (label); + + d1 = strtok (NULL,","); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, rowi, rowi+1); + gtk_widget_show (label); + + d1 = strtok (NULL,","); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, rowi, rowi+1); + gtk_widget_show (label); + + d1 = strtok (NULL,"\n"); + label = gtk_label_new (d1); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi + 1; + } + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi+1; + getline(&rline, &len, fp1); //To read 'UpperDevices' line + + label = gtk_label_new (" "); + markup = g_markup_printf_escaped ("Destination Devices"); + gtk_label_set_markup (GTK_LABEL (label), markup); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + g_free (markup); + + rowi = rowi + 1; + + sprintf(buff, "Consolidated Measurement Provided To Total : %d Devices", dDevices); + label = gtk_label_new (buff); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi + 1; + if (dDevices > 0) + { + label = gtk_label_new ("Destination IP"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Port"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, rowi, rowi+1); + gtk_widget_show (label); + + label = gtk_label_new ("Protocol"); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, rowi, rowi+1); + gtk_widget_show (label); + + rowi = rowi + 1; + } + + label = gtk_hseparator_new(); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 5, rowi, rowi+1); + gtk_widget_show (label); + rowi = rowi+1; + + for(i=0; iaction_area), apply_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (setup_display_window)->action_area), cancel_button, TRUE, TRUE, 0); + + /* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */ + gtk_widget_grab_default (cancel_button); + gtk_widget_show (cancel_button); + gtk_widget_grab_default (apply_button); + gtk_widget_show (apply_button); + + /* Finally show the setup_display_window. */ + gtk_widget_show (setup_display_window); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION apply_ipdc_setup (GtkWidget *w, gpointer udata) */ +/* This function apply the user selected iPDC Setup File and go ahead with the */ +/* Setup file's information. */ +/* ---------------------------------------------------------------------------- */ + +void apply_ipdc_setup (GtkWidget *w, gpointer udata) +{ + gtk_widget_destroy(setup_display_window); + + int flag=0; + char *s = fptr; + char *l1, *d3, *d4; + + size_t l2 = 0; + ssize_t result; + FILE *fp; + + fp = fopen(s, "rb"); + + if (fp == NULL) + { + validation_result(" iPDC Setup file doesn't exist! Try again "); + } + else + { + if ((result = getline(&l1, &l2, fp)) > 0) + { + d3 = strtok (l1, " "); + d4 = strtok (NULL, "\n"); + + if((!(strcmp(d3, "ipdcServer"))) && (atoi(d4) == 1)) + { + strcpy(ipdcFilePath, s); + ipdcFilePath[strlen(ipdcFilePath)] = '\0'; + flag = 1; + } + else + { + fclose(fp); + validation_result(" Setup file data does not matched? Try a proper file "); + } + } + else + { + fclose(fp); + validation_result("Setup file is empty?? Try a proper file "); + } + } + + if(flag == 1) + fill_pdc_details (ipdcFilePath); +} + + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_time() */ +/* Display the time on time lable on main PMU Simulator window. */ +/* ---------------------------------------------------------------------------- */ + +void* display_time() +{ + struct timeval tv; + struct tm* ptm; + char time_string[40]; + + while(1) + { + /* Obtain the time of day, and convert it to a tm struct. */ + gettimeofday (&tv, NULL); + + /* Format the date and time, down to a single second. */ + memset(time_string, '\0', 40); + ptm = localtime (&tv.tv_sec); + strftime (time_string, sizeof (time_string), "%Y-%m-%d, %H:%M:%S", ptm); + + gtk_label_set_text(GTK_LABEL(data->time_lable), time_string); + sleep(1); + } + + /* Exit the display time thread at the time of PMU Closing */ + pthread_exit(NULL); +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/ipdcGui.h b/iPDC/ipdcGui.h new file mode 100755 index 0000000..d171a3d --- /dev/null +++ b/iPDC/ipdcGui.h @@ -0,0 +1,171 @@ +/* ----------------------------------------------------------------------------- + * ipdcGui.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#ifndef __SUPPORT_H__ +#define __SUPPORT_H__ + +#include + +/* Convenience macros for obtaining objects from UI file */ +#define CH_GET_OBJECT(builder, name, type, data) \ + data->name = type(gtk_builder_get_object (builder, #name) ) +#define CH_GET_WIDGET(builder, name, data) \ + CH_GET_OBJECT(builder, name, GTK_WIDGET, data) + + +/* ---------------------------------------------------------------- */ +/* global Data Structure */ +/* ---------------------------------------------------------------- */ + +/* Main data structure definition */ +typedef struct _ChData ChData; + +struct _ChData +{ + /* Main application window */ + GtkWidget *ipdc; + + /* Main window button widgets */ + GtkWidget *add_pmu_button; + GtkWidget *remove_pmu_button; + GtkWidget *cmd_data_off_button; + GtkWidget *cmd_data_on_button; + GtkWidget *cmd_cfg_button; + GtkWidget *add_pdc_button; + GtkWidget *remove_pdc_button; + GtkWidget *display_conn_table_button; + GtkWidget *exit_button; + + /* Manubar button widgets */ + GtkWidget *menubar; + GtkWidget *open_ipdc_setup; + GtkWidget *enter_pdc_detail_menuitem; + GtkWidget *pdc_details_menuitem; + GtkWidget *exit_menuitem; + GtkWidget *about_menuitem; + + GtkWidget *menuitem2; + GtkWidget *menu_add_source; + GtkWidget *menu_remove_source; + GtkWidget *menu_data_off; + GtkWidget *menu_data_on; + GtkWidget *menu_request_cfg; + GtkWidget *menu_add_destination; + GtkWidget *menu_remove_destination; + GtkWidget *menu_conn_table; + + /* Main window extra widgets */ + GtkWidget *admin_label; + GtkWidget *rights_label; + GtkWidget *time_lable; + GtkWidget *text_view; + GtkWidget *text_view1; +}; + +/* ---------------------------------------------------------------- */ +/* global variables */ +/* ---------------------------------------------------------------- */ + +char find_butn[2]; +char buff[8000]; +char fptr[200]; +char *markup; +long int time_thrd_id; +int set_all; + + +ChData *data; +GtkWidget *ipdc_setup_window; +GtkWidget *pdc_detail_window; +GtkWidget *add_pmu_window, *chkBtn; +GtkWidget *new_window, *setup_display_window; +GtkWidget *p_id, *p_udp, *p_tcp, *p_ip; +GtkWidget *p_port, *p_protocol; +pthread_t show_sys_time; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +int isNumber(char *s); + +void destroy (GtkWidget *widget, gpointer udata); + +GdkPixbuf *create_pixbuf(const gchar * filename); + +void display_pdc_detail (GtkButton *widget, gpointer udata); + +void about_ipdc (GtkButton *widget, gpointer udata); + +void ipdc_help (GtkButton *but, gpointer udata); + +void validation_result (char *msg); + +void ipdc_colors(); + +void fill_pdc_details (char *filePath); + +int validation_pdc_detail (GtkButton *button, gpointer udata); + +void validation_setup_file_name (GtkWidget *widget, gpointer data); + +void final_pdc_setup_call(); + +void add_pmu (GtkButton *but, gpointer udata); + +int add_pmu_validation (GtkButton *but, gpointer udata); + +void cmd_or_remove_pmu (GtkButton *but, gpointer udata); + +void select_function(GtkWidget *widget, gpointer data); // + +int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata); + +void add_new_pdc (GtkButton *but, gpointer udata); + +int new_pdc_validation (GtkButton *but, gpointer udata); + +void remove_pdc (GtkButton *but, gpointer udata); + +int remove_pdc_validation (GtkButton *but, gpointer udata); + +void connection_table (GtkButton *but, gpointer udata); + +void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata); + +void view_setup_file (GtkWidget *w, GtkFileSelection *fs); + +void apply_ipdc_setup (GtkWidget *w, gpointer udata); + +void* display_time(); + +#endif + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/new_pmu_or_pdc.c b/iPDC/new_pmu_or_pdc.c new file mode 100755 index 0000000..1910e84 --- /dev/null +++ b/iPDC/new_pmu_or_pdc.c @@ -0,0 +1,1591 @@ +/* ----------------------------------------------------------------------------- + * new_pmu_or_pdc.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------------------------*/ +/* Functions defined in new_pmu_or_pdc.c */ +/* ---------------------------------------------------------------------------------------------*/ + +/* 1. int add_PMU(char pmuid[], char ip[], char port[], char protocol[]) */ +/* 2. void* connect_pmu_tcp(void *temp) */ +/* 3. void* connect_pmu_udp(void *temp) */ +/* 4. void add_PMU_Node(struct Lower_Layer_Details *temp_pmu) */ +/* 5. int remove_Lower_Node(char pmuid[], char protocol[]) */ +/* 6. void* remove_llnode(void*) */ +/* 7. int put_data_transmission_off(char pmuid[], char protocol[]) */ +/* 8. void* data_off_llnode(void* temp) */ +/* 9. int put_data_transmission_on(char pmuid[], char protocol[]) */ +/* 10. void* data_on_llnode(void* temp) */ +/* 11. int configuration_request(char pmuid[], char protocol[]) */ +/* 12. void* config_request(void* temp) */ +/* 13. int add_PDC(char ip[], char protocol[]) */ +/* 14. int remove_PDC(char ip[], char port_num[], char protocol[]) */ +/* 15. void display_CT() */ +/* 16. void create_command_frame(int type,int pmuid,char *) */ +/* 17. int checkip(char ip[]) */ + +/* ---------------------------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipdcGui.h" +#include "connections.h" +#include "parser.h" +#include "global.h" +#include "new_pmu_or_pdc.h" +#include "dallocate.h" + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_PMU(): */ +/* It Makes an entry in iPDC Setup File for each new Lower layer PMU/PDC. */ +/* A node is created of the type Lower_Layer_Details. A separate thread is */ +/* created for each added lower layer PMU/PDC accoring to the protcol (TCP/UDP).*/ +/* ---------------------------------------------------------------------------- */ + +int add_PMU(char pmuid[], char ip[], char port[], char protocol[]) { + + int err; + int flag = 0; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + if(LLfirst != NULL) + { + struct Lower_Layer_Details *temp_ptr; + + temp_ptr = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_ptr) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + temp_ptr = LLfirst; + + while (temp_ptr != NULL) + { + if(temp_ptr->pmuid == atoi(pmuid)) { + + flag = 1; + break; + + } else { + + temp_ptr = temp_ptr->next; + continue; + } + } + } + + if(flag) /* 2 if there is a match */ + { + printf("%s %s is already in the LowerDevices list Enter another PMU\n",pmuid,protocol); + return 1; + + } + else if(!flag) + { + /* Make a node that contains PMU IP, Port and Protocol details */ + struct Lower_Layer_Details *temp_pmu; + + temp_pmu = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_pmu) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + temp_pmu->pmuid = atoi(pmuid); // PMUID + strcpy(temp_pmu->ip,ip); // ip + temp_pmu->port = atoi(port); // port + strcpy(temp_pmu->protocol,protocol); // protocol + temp_pmu->protocol[3] = '\0'; + temp_pmu->up = 1; + temp_pmu->data_transmission_off = 0; + temp_pmu->pmu_remove = 0; + temp_pmu->request_cfg_frame = 0; + temp_pmu->next = NULL; + temp_pmu->prev = NULL; + + pthread_t t; + + if(!strncasecmp(protocol,"UDP",3)) { + + if((err = pthread_create(&t,&attr,connect_pmu_udp,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + + } else if(!strncasecmp(protocol,"TCP",3)) { + + if((err = pthread_create(&t,&attr,connect_pmu_tcp,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + struct Upper_Layer_Details *temp_pdc = ULfirst; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + return 0; + } // If no match + + return 1; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION connect_pmu_tcp(): */ +/* It Makes a new tcp connections with each added Lower Layer PMU/PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* connect_pmu_tcp(void *temp) { + + int tcp_sockfd,port_num,yes = 1; + struct sockaddr_in PMU_addr; + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + unsigned char *tcp_BUF,*ptr,length[2]; + unsigned int flen; + uint16_t cal_crc,frame_crc; + + port_num = temp_pmu->port; + + if ((tcp_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + if (setsockopt(tcp_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + bzero(&PMU_addr,sizeof(PMU_addr)); + PMU_addr.sin_family = AF_INET; + PMU_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + PMU_addr.sin_port = htons(port_num); + memset(&(PMU_addr.sin_zero), '\0', 8); // zero the rest of the struct + + /* Copy the information of Lower Layer PMU/PDC to the node */ + temp_pmu->thread_id = pthread_self(); + bzero(&temp_pmu->llpmu_addr,sizeof(PMU_addr)); + temp_pmu->llpmu_addr.sin_family = AF_INET; + temp_pmu->llpmu_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + temp_pmu->llpmu_addr.sin_port = htons(port_num); + memset(&(temp_pmu->llpmu_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pmu->sockfd = tcp_sockfd; + temp_pmu->up = 1; + + if (connect(tcp_sockfd, (struct sockaddr *)&PMU_addr, + sizeof(PMU_addr)) == -1) { // Main if + + perror("connect"); + temp_pmu->up = 0; + add_PMU_Node(temp_pmu); + pthread_exit(NULL); + + } else { + /* Add PMU*/ + add_PMU_Node(temp_pmu); + + tcp_BUF = malloc(MAXBUFLEN* sizeof(unsigned char)); + + /* Sending Command for obtaining CFG */ + int n,bytes_read; + char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,temp_pmu->pmuid,cmdframe); + if ((n = send (tcp_sockfd,cmdframe,18,0) == -1)) { + + perror("send"); + + } else { + + free(cmdframe); + while(1) { + + memset(tcp_BUF, '\0', MAXBUFLEN * sizeof(unsigned char)); + bytes_read = recv (tcp_sockfd, tcp_BUF,MAXBUFLEN-1,0); + + if(bytes_read == 0) { /* When TCP Peer Terminates */ + + printf("No data received Closing tcp socket %d\n",tcp_sockfd); + temp_pmu->up = 0; + + struct Upper_Layer_Details *temp_pdc = ULfirst; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + pthread_exit(NULL); + + } else if(bytes_read == -1) {/* When TCP Peer Terminates */ + + perror("recv"); + temp_pmu->up = 0; + + struct Upper_Layer_Details *temp_pdc = ULfirst; + pthread_mutex_lock(&mutex_Upper_Layer_Details); + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + } else { + + ptr = tcp_BUF; + ptr += 2; + copy_cbyc(length,ptr,2); + flen = to_intconvertor(length); + cal_crc = compute_CRC(tcp_BUF,flen-2); + ptr += flen -4; + frame_crc = *ptr; + frame_crc <<= 8; + frame_crc |= *(ptr + 1); + + if(frame_crc != cal_crc) { + + continue; + } + if (sendto(DB_sockfd,tcp_BUF, MAXBUFLEN-1, 0, + (struct sockaddr *)&DB_Server_addr,sizeof(DB_Server_addr)) == -1) { + perror("sendto"); + } + + tcp_BUF[bytes_read] = '\0'; + PMU_process_TCP(tcp_BUF,tcp_sockfd); + } + + } // while ends + } + }// Main if + + close(tcp_sockfd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION connect_pmu_udp(): */ +/* It Makes a new udp connections with each added Lower Layer PMU/PDC. */ +/* ---------------------------------------------------------------------------- */ + +void* connect_pmu_udp(void *temp) { + + int udp_sockfd,port_num,addr_len,yes = 1; + unsigned char *udp_BUF,*ptr,length[2]; + unsigned int flen; + uint16_t cal_crc,frame_crc; + + struct sockaddr_in PMU_addr,their_addr; + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + struct Lower_Layer_Details *t ; + + port_num = temp_pmu->port; + + if ((udp_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + if (setsockopt(udp_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + bzero(&PMU_addr,sizeof(PMU_addr)); + PMU_addr.sin_family = AF_INET; + PMU_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + PMU_addr.sin_port = htons(port_num); + memset(&(PMU_addr.sin_zero), '\0', 8); // zero the rest of the struct + + /* Copy the information of Lower Layer PMU/PDC to the node */ + temp_pmu->thread_id = pthread_self(); + bzero(&temp_pmu->llpmu_addr,sizeof(PMU_addr)); + temp_pmu->llpmu_addr.sin_family = AF_INET; + temp_pmu->llpmu_addr.sin_addr.s_addr = inet_addr(temp_pmu->ip); + temp_pmu->llpmu_addr.sin_port = htons(port_num); + memset(&(temp_pmu->llpmu_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pmu->sockfd = udp_sockfd; + temp_pmu->up = 1; + + /* Add PMU*/ + add_PMU_Node(temp_pmu); + + udp_BUF = malloc(MAXBUFLEN* sizeof(unsigned char)); + + /* Sending Command fro obtaining CFG */ + addr_len = sizeof(struct sockaddr); + int n,bytes_read; + unsigned char *cmdframe = malloc(19); + cmdframe[18] = '\0'; + create_command_frame(1,temp_pmu->pmuid,(char *)cmdframe); + + if ((n = sendto(udp_sockfd,cmdframe, 18, 0, (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1)) { + + perror("sendto"); + + } else { + + free(cmdframe); + + /* UDP data Received */ + while(1) { + + memset(udp_BUF,'\0',MAXBUFLEN * sizeof(unsigned char)); + bytes_read = recvfrom (udp_sockfd, udp_BUF,MAXBUFLEN-1,0,(struct sockaddr *)&their_addr,(socklen_t *)&addr_len); + if(bytes_read == -1) { + + perror("recvfrom"); + exit(1); + + } else { // New Datagram received + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + int flag = 0; + if(LLfirst == NULL) { + + flag = 0; + + } else { + + t = LLfirst; + while(t != NULL) { + + if((!strcmp(t->ip,inet_ntoa(their_addr.sin_addr))) + && (!strncasecmp(t->protocol,"UDP",3))) { + + flag = 1; + break; + + } else { + + t = t->next; + } + } + } + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + ptr = udp_BUF; + ptr += 2; + copy_cbyc(length,ptr,2); + flen = to_intconvertor(length); + cal_crc = compute_CRC(udp_BUF,flen-2); + ptr += flen -4; + frame_crc = *ptr; + frame_crc <<= 8; + frame_crc |= *(ptr + 1); + + if(frame_crc != cal_crc) { + + continue; + } + + //process the frame + int n; + + if ((n = sendto(DB_sockfd,udp_BUF, MAXBUFLEN-1, 0, + (struct sockaddr *)&DB_Server_addr,sizeof(DB_Server_addr)) == -1)) { + perror("sendto"); + } + + udp_BUF[bytes_read] = '\0'; + + //Call the udphandler + PMU_process_UDP(udp_BUF,PMU_addr,udp_sockfd); + + } else { + + printf("Datagram PMU not authentic. We donot pass the buffer for further processing %s\n",inet_ntoa(their_addr.sin_addr)); + } + } // Main if ends + + } // while ends + } + + close(udp_sockfd); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_PMU_Node(): */ +/* It creates a node of the type Lower_Layer_Details for each newly added */ +/* Lower Layer PMU/PDC. */ +/* ---------------------------------------------------------------------------- */ + +void add_PMU_Node(struct Lower_Layer_Details *temp_pmu) { + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + temp_pmu->prev = NULL; + LLfirst = temp_pmu; + + } else { + + LLlast->next = temp_pmu; + temp_pmu->prev = LLlast; + } + + temp_pmu->next = NULL; + + LLlast = temp_pmu; + + write_cfg_to_file(); + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_Lower_Node(): */ +/* It sets the remove flag for a Lower Layer PMU/PDC do that it can be removed */ +/* later. */ +/* ---------------------------------------------------------------------------- */ + +int remove_Lower_Node(char pmuid[], char protocol[]) { + + int flag = 0, err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + if(LLfirst == NULL) { + + printf("No PMU present?\n"); + return 1; + + } else { + + flag = 1; + } + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + if((err = pthread_create(&t,&attr,remove_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + if((err = pthread_create(&t,&attr,remove_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + struct Upper_Layer_Details *temp_pdc = ULfirst; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_llnode(): */ +/* ---------------------------------------------------------------------------- */ + +void* remove_llnode(void* temp) { + + int flag=0; + + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + struct Lower_Layer_Details *temp_ptr; + pthread_t tid = temp_pmu->thread_id; + + /* Remove the object from structure 'Lower Layer Details'*/ + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + /* remove the entry from CFG linked list and remove that CFG objects */ + /* remove the entry from iPDC Setup File */ + if(LLfirst != NULL) + { + temp_ptr = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_ptr) + { + printf("Not enough memory temp_pmu\n"); + exit(1); + } + temp_ptr = LLfirst; + + while (temp_ptr != NULL) + { + if(((temp_ptr->pmuid == temp_pmu->pmuid)) && (!strcmp(temp_ptr->protocol,temp_pmu->protocol))) + { + if((temp_ptr->prev != NULL) && (temp_ptr->next != NULL)) //deletion of inbetween node + { + temp_ptr->prev->next = temp_ptr->next; + temp_ptr->next->prev = temp_ptr->prev; + temp_ptr = temp_ptr->next; + } + else if((temp_ptr->prev == NULL) && (temp_ptr->next != NULL)) //deletion of first node + { + temp_ptr = temp_ptr->next; + temp_ptr->prev = NULL; + LLfirst = temp_ptr; + } + else if((temp_ptr->prev != NULL) && (temp_ptr->next == NULL)) //deletion of last node + { + temp_ptr = temp_ptr->prev; + temp_ptr->next = NULL; + LLlast = temp_ptr; + } + else + { + LLfirst = NULL; + LLlast = NULL; + } + flag = 1; + break; + } + else + { + temp_ptr = temp_ptr->next; + continue; + } + } + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag == 1) + { + /* remove the cfg object from memory */ + int ind = 0,match = 0; + struct cfg_frame *temp_cfg = cfgfirst,*tprev_cfg; + unsigned char id_CODE[2]; + tprev_cfg = temp_cfg; + + id_CODE[0] = temp_pmu->pmuid >> 8; + id_CODE[1] = temp_pmu->pmuid ; + + while(temp_cfg != NULL){ + if(!ncmp_cbyc(id_CODE,temp_cfg->idcode,2)) { + + match = 1; + break; + + } else { + + ind++; + tprev_cfg = temp_cfg; + temp_cfg = temp_cfg->cfgnext; + } + }// While ends + + if(match) { + + pthread_mutex_lock(&mutex_cfg); + + if(!ind) { + + // Replace the cfgfirst + cfgfirst = cfgfirst->cfgnext; + free_cfgframe_object(temp_cfg); + + } else { + + // Replace in between cfg + tprev_cfg->cfgnext = temp_cfg->cfgnext; + free_cfgframe_object(temp_cfg); + } + + pthread_mutex_unlock(&mutex_cfg); + } + } + + pthread_cancel(tid); + + /* Close the socket connection */ + close(temp_pmu->sockfd); + + free(temp_pmu); + + write_cfg_to_file(); + + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION put_data_transmission_off(): */ +/* ---------------------------------------------------------------------------- */ + +int put_data_transmission_off(char pmuid[], char protocol[]) { + + int flag = 0,err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU present?\n"); + return 1; + + } else { + + flag = 1; + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + temp_pmu->data_transmission_off = 1; + + if((err = pthread_create(&t,&attr,data_off_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + temp_pmu->data_transmission_off = 1; + + if((err = pthread_create(&t,&attr,data_off_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION data_off_llnode(): */ +/* ---------------------------------------------------------------------------- */ + +void* data_off_llnode(void* temp) { + + char *cmdframe = malloc(19); + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + + create_command_frame(3,temp_pmu->pmuid,cmdframe); + cmdframe[18] = '\0'; + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { + + int n; + + if ((n = sendto(temp_pmu->sockfd,cmdframe, 18, 0,(struct sockaddr *)&temp_pmu->llpmu_addr,sizeof(temp_pmu->llpmu_addr)) == -1)) { + + perror("sendto"); + + } else { + + printf("Sent CMD to put data transmission OFF\n"); + } + + } else if(!strncasecmp(temp_pmu->protocol,"TCP",3)){ + + int n; + + if(temp_pmu->up == 1) { + if ((n = send(temp_pmu->sockfd,cmdframe, 18,0) == -1)) { + + perror("send"); + + } else { + + printf("Sent CmD to put data transmission OFF\n"); + } + } + } + + free(cmdframe); + pthread_exit(NULL); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION put_data_transmission_on(): */ +/* ---------------------------------------------------------------------------- */ + +int put_data_transmission_on(char pmuid[], char protocol[]) { + + int flag = 0,err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU Present?\n"); + return 1; + + } else { + + flag = 1; + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + temp_pmu->data_transmission_off = 0; + + if((err = pthread_create(&t,&attr,data_on_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + temp_pmu->data_transmission_off = 0; + + if((err = pthread_create(&t,&attr,data_on_llnode,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION data_on_llnode(): */ +/* ---------------------------------------------------------------------------- */ + +void* data_on_llnode(void* temp) { + + char *cmdframe = malloc(19); + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + + create_command_frame(2,temp_pmu->pmuid,cmdframe); + cmdframe[18] = '\0'; + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { + + int n; + + if ((n = sendto(temp_pmu->sockfd,cmdframe, 18, 0,(struct sockaddr *)&temp_pmu->llpmu_addr,sizeof(temp_pmu->llpmu_addr)) == -1)) { + + perror("sendto"); + + } else { + + printf("Sent CMD to put data transmission ON.\n"); + } + + } else if(!strncasecmp(temp_pmu->protocol,"TCP",3)){ + + int n; + + if(temp_pmu->up == 1) { + + if ((n = send(temp_pmu->sockfd,cmdframe, 18,0) == -1)) { + + perror("send"); + + } else { + + printf("Sent CmD to put data transmission ON.\n"); + } + } + } + + free(cmdframe); + pthread_exit(NULL); +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION configuration_request(): */ +/* ---------------------------------------------------------------------------- */ + +int configuration_request(char pmuid[], char protocol[]) { + + int flag = 0,err; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU Present?\n"); + return 1; + + } else { + + flag = 1; + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + if(flag) { + + int match = 0; + struct Lower_Layer_Details *temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + if(set_all == 1) { + + match = 1; + break; + + } else { + + if((temp_pmu->pmuid == atoi(pmuid)) && (!strncasecmp(temp_pmu->protocol,protocol,3))) { + + match = 1; + break; + + } else { + temp_pmu = temp_pmu->next; + } + } + } + + if(match) { + + if(set_all == 1) { + + temp_pmu = LLfirst; + + while(temp_pmu != NULL) { + + pthread_t t; + + if((err = pthread_create(&t,&attr,config_request,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + temp_pmu = temp_pmu->next; + } + + } else { + + pthread_t t; + + if((err = pthread_create(&t,&attr,config_request,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + } + + return 0; + + } else { + + printf("No match for entered PMU\n"); + return 1; + } + } + + return 1; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION config_request(): */ +/* ---------------------------------------------------------------------------- */ + +void* config_request(void* temp) { + + int err; + char *cmdframe = malloc(19); + struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp; + + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { /* If Peer is UDP */ + + int n; + cmdframe[18] = '\0'; + + create_command_frame(1,temp_pmu->pmuid,cmdframe); + + if ((n = sendto(temp_pmu->sockfd,cmdframe, 18, 0,(struct sockaddr *)&temp_pmu->llpmu_addr,sizeof(temp_pmu->llpmu_addr)) == -1)) { + + perror("sendto"); + + } else { + + free(cmdframe); + temp_pmu->data_transmission_off = 0; + } + + } else if(!strncasecmp(temp_pmu->protocol,"TCP",3)){ /* If Peer is TCP */ + + int n; + + if(temp_pmu->up == 0) { /* If TCP Peer is DOWN */ + + pthread_t t; + + if((err = pthread_create(&t,&attr,connect_pmu_tcp,(void *)temp_pmu))) { + + perror(strerror(err)); + exit(1); + } + + struct Upper_Layer_Details *temp_pdc = ULfirst; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + while(temp_pdc != NULL ) { + + temp_pdc->config_change = 1; + temp_pdc = temp_pdc->next; + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + } else { /* If TCP Peer is UP */ + + cmdframe[18] = '\0'; + + create_command_frame(1,temp_pmu->pmuid,cmdframe); + + if ((n = send(temp_pmu->sockfd,cmdframe, 18,0) == -1)) { + + printf("temp_pmu->sockfd %d \n",temp_pmu->sockfd); + perror("send"); + + } else { + + printf("CMD to send CFG \n"); + free(cmdframe); + temp_pmu->data_transmission_off = 0; + } + } + } + + pthread_exit(NULL); +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_PDC((char ip[], char protocol[]): */ +/* It Makes an entry in iPDC Setup File for the upper PDC. The pre-existing */ +/* entry will be removed from the file and also the list Upper_Layer_Details */ +/* ---------------------------------------------------------------------------- */ + +int add_PDC(char ip[], char protocol[]) { + + int flag = 0; + struct Upper_Layer_Details *temp_ptr; + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + if(ULfirst != NULL) + { + temp_ptr = malloc(sizeof(struct Upper_Layer_Details)); + + if(!temp_ptr) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + temp_ptr = ULfirst; + + while (temp_ptr != NULL) + { + if((!strcmp(temp_ptr->ip, ip)) && (!strncasecmp(temp_ptr->protocol, protocol, 3))) { + + flag = 1; + break; + + } else { + + temp_ptr = temp_ptr->next; + continue; + } + } + } + + if(flag) /* 2 if there is a match */ + { + printf("%s %s is already in the UpperDevices list Enter another PDC.\n",ip,protocol); + return 1; + + } + else if(!flag) + { + /* Make a node that contains PMU IP, Port and Protocol details */ + struct Upper_Layer_Details *temp_pdc; + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + + if(!temp_pdc) { + + printf("Not enough memory temp_pdc\n"); + exit(1); + } + + strcpy(temp_pdc->ip,ip); // ip + + if(!strncasecmp(protocol,"UDP",3)) { + + temp_pdc->port = UDPPORT; // port + + } else { + + temp_pdc->port = TCPPORT; // port + } + + strncpy(temp_pdc->protocol,protocol,3); // protocol + temp_pdc->protocol[3] = '\0'; + + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->config_change = 0; + temp_pdc->tcpup = 1; + temp_pdc->UL_upper_pdc_cfgsent = 0; + temp_pdc->UL_data_transmission_off = 1; + temp_pdc->address_set = 0; + + if(ULfirst == NULL) { + + ULfirst = temp_pdc; + temp_pdc->prev = NULL; + + } else { + + ULlast->next = temp_pdc; + temp_pdc->prev = ULlast; + } + + ULlast = temp_pdc; + temp_pdc->next = NULL; + + write_cfg_to_file(); + } + + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + return 0; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_PDC((char ip[], char port_num[], char protocol[]): */ +/* ---------------------------------------------------------------------------- */ + +int remove_PDC(char ip[], char port_num[], char protocol[]) { + + int flag = 0; + struct Upper_Layer_Details *temp_pdc; + + if(ULfirst == NULL) { + + printf("No PDC Present?\n"); + return 1; + + } else { + + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + temp_pdc = ULfirst; + + while(temp_pdc != NULL) { + + if(!strcmp(temp_pdc->ip,ip)) { + + if(((!strncasecmp(temp_pdc->protocol,"UDP",3)) && (temp_pdc->port == UDPPORT)) || ((!strncasecmp(temp_pdc->protocol,"TCP",3)) && (temp_pdc->port == TCPPORT))) { + + flag = 1; + break; + } + } + temp_pdc = temp_pdc->next; + } + + if(flag == 1) { + + pthread_mutex_lock(&mutex_Upper_Layer_Details); + + if(temp_pdc->prev == NULL) { + + ULfirst = temp_pdc->next; + if(ULfirst != NULL) ULfirst->prev = NULL; + + } else { + + temp_pdc->prev->next = temp_pdc->next; + } + + if(temp_pdc->next == NULL) { + + ULlast = temp_pdc->prev; + + } else { + if(temp_pdc->prev != NULL) + temp_pdc->prev->next = temp_pdc->next; + } + + write_cfg_to_file(); + pthread_mutex_unlock(&mutex_Upper_Layer_Details); + + return 0; + } + return 1; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION display_CT(): */ +/* ---------------------------------------------------------------------------- */ + +void display_CT() { + + printf("#### CONNECTION TABLE OF SOURCE DEVICES ####\n"); + printf("--------------------------------------------------------------------------------\n"); + printf("| PMU ID | IP | Port | Protocol | Up |\n"); + printf("--------------------------------------------------------------------------------\n"); + + pthread_mutex_lock(&mutex_Lower_Layer_Details); + + if(LLfirst == NULL) { + + printf("No PMU Present?\n"); + + } else { + + struct Lower_Layer_Details *t = LLfirst; + + while(t != NULL) { + + printf("|\t%d\t|%s\t|\t%d\t|\t%s\t|\t%d\t|\n",t->pmuid,t->ip,t->port,t->protocol,t->up); + t = t->next; + + } + printf("--------------------------------------------------------------------------------\n"); + } + + pthread_mutex_unlock(&mutex_Lower_Layer_Details); + + printf("#### CONNECTION TABLE OF DESTINATION DEVICES ####\n"); + printf("-------------------------------------------------\n"); + printf("| IP | Port | Protocol |\n"); + printf("-------------------------------------------------\n"); + + if(ULfirst == NULL) { + + printf("No PDC Present?\n"); + + + } else { + + struct Upper_Layer_Details *t = ULfirst; + + while(t != NULL) { + + printf("|%s\t|\t%d\t|\t%s\t|\n",t->ip,t->port,t->protocol); + t = t->next; + } + printf("-------------------------------------------------\n"); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION create_command_frame(): */ +/* ---------------------------------------------------------------------------- */ + +void create_command_frame(int type,int pmu_id,char cmdframe[]) { + + int f = 18; + long int sec,frac = 0; + unsigned char fsize[2],pmuid[2],soc[4],fracsec[4]; + uint16_t chk; + + memset(cmdframe,'\0',19); + memset(fsize,'\0',2); + + int_to_ascii_convertor(f,fsize); + int_to_ascii_convertor(pmu_id,pmuid); + + sec = (long int)time (NULL); + long_int_to_ascii_convertor(sec,soc); + long_int_to_ascii_convertor(frac,fracsec); + + int index = 0; + + switch(type) { + + case 1 : byte_by_byte_copy((unsigned char *)cmdframe,CMDSYNC,index,2); // SEND CFG + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,fsize,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,pmuid,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,soc,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,fracsec,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,CMDCFGSEND,index,2); + index += 2; + chk = compute_CRC((unsigned char *)cmdframe,index); + cmdframe[index++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cmdframe[index] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + break; + + case 2 : byte_by_byte_copy((unsigned char *)cmdframe,CMDSYNC,index,2); // SEND DATA ON + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,fsize,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,pmuid,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,soc,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,fracsec,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,CMDDATASEND,index,2); + index += 2; + chk = compute_CRC((unsigned char *)cmdframe,index); + cmdframe[index++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cmdframe[index] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + break; + + case 3 : byte_by_byte_copy((unsigned char *)cmdframe,CMDSYNC,index,2); // PUT OFF DATA TRANSMISSION + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,fsize,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,pmuid,index,2); + index += 2; + byte_by_byte_copy((unsigned char *)cmdframe,soc,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,fracsec,index,4); + index += 4; + byte_by_byte_copy((unsigned char *)cmdframe,CMDDATAOFF,index,2); + index += 2; + chk = compute_CRC((unsigned char *)cmdframe,index); + cmdframe[index++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cmdframe[index] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + break; + + default: printf("Please enter a valid request?\n"); + break; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION checkip(): */ +/* ---------------------------------------------------------------------------- */ + +int checkip(char ip[]) { + + struct sockaddr_in sa; + int result = inet_pton(AF_INET, ip, &(sa.sin_addr)); + return result; +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/new_pmu_or_pdc.h b/iPDC/new_pmu_or_pdc.h new file mode 100755 index 0000000..f347996 --- /dev/null +++ b/iPDC/new_pmu_or_pdc.h @@ -0,0 +1,68 @@ +/* ----------------------------------------------------------------------------- + * new_pmu_or_pdc.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +int add_PMU(char pmuid[], char ip[], char port[], char protocol[]); + +void add_PMU_Node(struct Lower_Layer_Details *temp_pmu); + +void* connect_pmu_tcp(void *); + +void* connect_pmu_udp(void *); + +int remove_Lower_Node(char pmuid[], char protocol[]); + +void* remove_llnode(void*); + +int put_data_transmission_off(char pmuid[], char protocol[]); + +void* data_off_llnode(void* temp); + +int put_data_transmission_on(char pmuid[], char protocol[]); + +void* data_on_llnode(void* temp); + +int configuration_request(char pmuid[], char protocol[]); + +void* config_request(void* temp); + +int add_PDC(char ip[], char protocol[]); + +int remove_PDC(char ip[], char port_num[], char protocol[]); + +void display_CT(); + +void create_command_frame(int type,int pmuid,char *); + +int checkip(char ip[]); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/parser.c b/iPDC/parser.c new file mode 100755 index 0000000..dd6793d --- /dev/null +++ b/iPDC/parser.c @@ -0,0 +1,1548 @@ +/* ----------------------------------------------------------------------------- + * parser.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in parser.c */ +/* -------------------------------------------------------------------------------------*/ + +/* 1. void cfgparser(char []) */ +/* 2. void write_cfg_to_file() */ +/* 3. void dataparser(char[]) */ +/* 4. int check_statword(char stat[]) */ +/* 5. void add_id_to_status_change_list(unsigned char idcode[]); */ +/* 6. void remove_id_from_status_change_list(unsigned char idcode[]) */ +/* 7. unsigned int to_intconvertor(unsigned char []) */ +/* 8. void long_int_to_ascii_convertor (long int n,unsigned char hex[]); */ +/* 9. void int_to_ascii_convertor(unsigned int n,unsigned char hex[]); */ +/* 10.void copy_cbyc(unsigned char dst[],unsigned char *s,int size) */ +/* 11.int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size) */ +/* 12.void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n) */ +/* 13.unsigned long int to_long_int_convertor(unsigned char array[]) */ +/* 14.uint16_t compute_CRC(unsigned char *message,int length) */ + +/* ------------------------------------------------------------------------------------ */ + + +#include +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "dallocate.h" +#include "align_sort.h" +#include "connections.h" +#include "recreate.h" + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION cfgparser(): */ +/* It creates configuration objects for the received configuration frames. */ +/* Configuration frame is also written in the file `cfg.bin`. */ +/* If the object is already present, it will replace in cfg_frame LL and */ +/* also in the file `cfg.bin` by calling */ +/* ---------------------------------------------------------------------------- */ + +void cfgparser(unsigned char st[]){ + + unsigned char *s; + unsigned char sync[3]; + unsigned int num_pmu,phn,ann,dgn; + int i,j,dgchannels,match = 0; + + struct cfg_frame *cfg; + struct channel_names *cn; + + /******************** PARSING BEGINGS *******************/ + + pthread_mutex_lock(&mutex_file); + + cfg = malloc(sizeof(struct cfg_frame)); + + if(!cfg) { + + printf("No enough memory for cfg\n"); + } + + printf("Inside cfgparser()\n"); + s = st; + + /* Memory Allocation Begins - Allocate memory to framesize */ + cfg->framesize = malloc(3*sizeof(unsigned char)); + if(!cfg->framesize) { + + printf("No enough memory for cfg->framesize\n"); + } + + // Allocate memory to idcode + cfg->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->idcode) { + printf("No enough memory for cfg->idcode\n"); + } + + // Allocate memory to soc + cfg->soc = malloc(5*sizeof(unsigned char)); + if(!cfg->soc) { + printf("Not enough memory for cfg->soc\n"); + } + + // Allocate memory to fracsec + cfg->fracsec = malloc(5*sizeof(unsigned char)); + if(!cfg->fracsec) { + printf("Not enough memory for cfg->fracsec\n"); + } + + // Allocate memory to time_base + cfg->time_base = malloc(5*sizeof(unsigned char)); + if(!cfg->time_base) { + printf("Not enough memory for cfg->time_base\n"); + } + + // Allocate memory to time_base + cfg->time_base = malloc(5*sizeof(unsigned char)); + if(!cfg->time_base) { + printf("No enough memory for cfg->time_base\n"); + } + + // Allocate memory to num_pmu + cfg->num_pmu = malloc(3*sizeof(unsigned char)); + if(!cfg->num_pmu) { + printf("No enough memory for cfg->num_pmu\n"); + } + + // Allocate memory to data_rate + cfg->data_rate = malloc(3*sizeof(unsigned char)); + if(!cfg->data_rate) { + printf("No enough memory for cfg->data_rate\n"); + } + + //Copy sync word to file + copy_cbyc(sync,(unsigned char *)s,2); + sync[2] = '\0'; + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc(cfg->framesize,(unsigned char *)s,2); + cfg->framesize[2] = '\0'; + unsigned int framesize; + framesize = to_intconvertor(cfg->framesize); + s = s + 2; + + //SEPARATE IDCODE + copy_cbyc(cfg->idcode,(unsigned char *)s,2); + cfg->idcode[2] = '\0'; + int id = to_intconvertor(cfg->idcode); + printf("ID Code %d\n",id); + s = s + 2; + + /**** Remove the id from the list of Stat change if it is present ****/ + remove_id_from_status_change_list(cfg->idcode); + + //SEPARATE SOC + copy_cbyc(cfg->soc,(unsigned char *)s,4); + cfg->soc[4] = '\0'; + s =s + 4; + + //SEPARATE FRACSEC + copy_cbyc(cfg->fracsec,(unsigned char *)s,4); + cfg->fracsec[4] = '\0'; + s = s + 4; + + //SEPARATE TIMEBASE + copy_cbyc (cfg->time_base,(unsigned char *)s,4); + cfg->time_base[4]='\0'; + s = s + 4; + + //SEPARATE PMU NUM + copy_cbyc (cfg->num_pmu,(unsigned char *)s,2); + cfg->num_pmu[2] = '\0'; + s = s + 2; + + num_pmu = to_intconvertor(cfg->num_pmu); + printf("Number of PMU's %d\n",num_pmu); + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory for pmu[][]\n"); + exit(1); + } + + for (i = 0; i < num_pmu; i++) { + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jpmu[j]->stn = malloc(17*sizeof(unsigned char)); + if(!cfg->pmu[j]->stn) { + printf("Not enough memory cfg->pmu[j]->stn\n"); + exit(1); + } + + // Memory Allocation for idcode + cfg->pmu[j]->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->idcode) { + printf("Not enough memory cfg->pmu[j]->idcode\n"); + exit(1); + } + + // Memory Allocation for format + cfg->pmu[j]->data_format = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->data_format) { + printf("Not enough memory cfg->pmu[j]->data_format\n"); + exit(1); + } + + // Memory Allocation for phnmr + cfg->pmu[j]->phnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->phnmr) { + printf("Not enough memory cfg->pmu[j]->phnmr\n"); + exit(1); + } + + // Memory Allocation for annmr + cfg->pmu[j]->annmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->annmr) { + printf("Not enough memory cfg->pmu[j]->annmr\n"); + exit(1); + } + + // Memory Allocation for dgnmr + cfg->pmu[j]->dgnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->dgnmr) { + printf("Not enough memory cfg->pmu[j]->dgnmr\n"); + exit(1); + } + + // Memory Allocation for fnom + cfg->pmu[j]->fnom = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->fnom) { + printf("Not enough memory cfg->pmu[j]->fnom\n"); + exit(1); + } + + // Memory Allocation for cfg_cnt + cfg->pmu[j]->cfg_cnt = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->cfg_cnt) { + printf("Not enough memory cfg->pmu[j]->cfg_cnt\n"); + exit(1); + } + + //SEPARATE STATION NAME + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16] = '\0'; + s = s + 16; + + //SEPARATE IDCODE + copy_cbyc (cfg->pmu[j]->idcode,(unsigned char *)s,2); + cfg->pmu[j]->idcode[2] = '\0'; + s = s + 2; + + //SEPARATE DATA FORMAT + copy_cbyc (cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + s = s + 2; + printf("Data Format Word %d\n", to_intconvertor(cfg->pmu[j]->data_format)); + + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = '1'; else cfg->pmu[j]->fmt->freq = '0'; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = '1'; else cfg->pmu[j]->fmt->analog = '0'; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = '1'; else cfg->pmu[j]->fmt->phasor = '0'; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = '1'; else cfg->pmu[j]->fmt->polar = '0'; + + //SEPARATE PHASORS + copy_cbyc (cfg->pmu[j]->phnmr,(unsigned char *)s,2); + cfg->pmu[j]->phnmr[2]='\0'; + phn = to_intconvertor(cfg->pmu[j]->phnmr); + s = s + 2; + + //SEPARATE ANALOGS + copy_cbyc (cfg->pmu[j]->annmr,(unsigned char *)s,2); + cfg->pmu[j]->annmr[2]='\0'; + ann = to_intconvertor(cfg->pmu[j]->annmr); + s = s + 2; + + //SEPARATE DIGITALS + copy_cbyc (cfg->pmu[j]->dgnmr,(unsigned char *)s,2); + cfg->pmu[j]->dgnmr[2]='\0'; + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + s = s + 2; + + printf("CFG consist Phasor = %d, Analogs = %d Digitals = %d.\n",phn,ann,dgn); + + cn = malloc(sizeof(struct channel_names)); + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(phn != 0){ + + cn->phnames = malloc(phn*sizeof(unsigned char*)); + + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cn->phnames[i] = malloc(17*sizeof(unsigned char)); + } + + i = 0; //Index for PHNAMES + + while(iphnames[i],(unsigned char *)s,16); + cn->phnames[i][16]='\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(ann != 0){ + + cn->angnames = malloc(ann*sizeof(unsigned char*)); + + if(!cn->angnames) { + + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cn->angnames[i] = malloc(17*sizeof(unsigned char)); + } + + + i=0; //Index for ANGNAMES + + while(iangnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s = s + 16; + i++; + } + } + + int di; + struct dgnames *q; + i = 0; //Index for number of dgwords + + while(i < dgn) { + + struct dgnames *temp1 = malloc(sizeof(struct dgnames)); + + temp1->dgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (di = 0; di < 16; di++) { + + temp1->dgn[di] = malloc(17*sizeof(unsigned char)); + } + + temp1->dg_next = NULL; + + for(dgchannels = 0;dgchannels < 16; dgchannels++){ + + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16]='\0'; + s += 16; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + + cn->first = q = temp1; + + } else { + + while(q->dg_next!=NULL){ + + q = q->dg_next; + } + q->dg_next = temp1; + } + + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(phn != 0){ + + cfg->pmu[j]->phunit = malloc(phn*sizeof(unsigned char*)); + + if(!cfg->pmu[j]->phunit) { + + printf("Not enough memory cfg->pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cfg->pmu[j]->phunit[i] = malloc(5); + } + + i = 0; + + while(ipmu[j]->phunit[i],(unsigned char *)s,4); + cfg->pmu[j]->phunit[i][4] = '\0'; + s = s + 4; + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(ann != 0){ + + cfg->pmu[j]->anunit = malloc(ann*sizeof(unsigned char*)); + + if(!cfg->pmu[j]->anunit) { + + printf("Not enough memory cfg->pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cfg->pmu[j]->anunit[i] = malloc(5); + } + + i = 0; + + while(ipmu[j]->anunit[i],(unsigned char *)s,4); + cfg->pmu[j]->anunit[i][4] = '\0'; + s = s + 4; + i++; + } + } // if for ANALOG Factors ends + + if(dgn != 0){ + + cfg->pmu[j]->dgunit = malloc(dgn*sizeof(unsigned char*)); + + if(!cfg->pmu[j]->dgunit) { + + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < dgn; i++) { + + cfg->pmu[j]->dgunit[i] = malloc(5); + } + + i=0; + + while(ipmu[j]->dgunit[i],(unsigned char *)s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + s = s + 4; + i++; + } + } //if for Digital Words FActtors ends + + copy_cbyc (cfg->pmu[j]->fnom,(unsigned char *)s,2); + cfg->pmu[j]->fnom[2]='\0'; + s = s + 2; + + copy_cbyc (cfg->pmu[j]->cfg_cnt,(unsigned char *)s,2); + cfg->pmu[j]->cfg_cnt[2]='\0'; + s = s + 2; + j++; + }//While for PMU number ends + + copy_cbyc (cfg->data_rate,(unsigned char *)s,2); + cfg->data_rate[2] = '\0'; + s += 2; + cfg->cfgnext = NULL; + printf("Data Rate %d\n", to_intconvertor(cfg->data_rate)); + + /* Adjust the configuration object pointers and Lock the mutex_cfg */ + pthread_mutex_lock(&mutex_cfg); + + // Index is kept to replace the cfgfirst if it matches + int index = 0; + + if (cfgfirst == NULL) { // Main if + + cfgfirst = cfg; + + } else { + + struct cfg_frame *temp_cfg = cfgfirst,*tprev_cfg; + tprev_cfg = temp_cfg; + + //Check if the configuration frame already exists + while(temp_cfg!=NULL){ + if(!ncmp_cbyc(cfg->idcode,temp_cfg->idcode,2)) { + + match = 1; + break; + + } else { + + index++; + tprev_cfg = temp_cfg; + temp_cfg = temp_cfg->cfgnext; + } + }// While ends + + if(match) { + + if(!index) { + + // Replace the cfgfirst + cfg->cfgnext = cfgfirst->cfgnext; + free_cfgframe_object(cfgfirst); + cfgfirst = cfg; + + } else { + + // Replace in between cfg + tprev_cfg->cfgnext = cfg; + cfg->cfgnext = temp_cfg->cfgnext; + free_cfgframe_object(temp_cfg); + } + + } else { // No match and not first cfg + + tprev_cfg->cfgnext = cfg; + } + } //Main if ends + + pthread_mutex_unlock(&mutex_cfg); + pthread_mutex_unlock(&mutex_file); + + write_cfg_to_file(); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION write_cfg_to_file(): */ +/* This function will perform the writing of iPDC Setup File. It will simply */ +/* delete the put the information in it by the all available objects. */ +/* ---------------------------------------------------------------------------- */ + +void write_cfg_to_file() +{ + int tmpi, indx, i, j; + unsigned int num_pmu,phn,ann,dgn; + unsigned char cline[MAX_STRING_SIZE]; + char tLine[50]; + char fileName[200]; + FILE *fp, *fp1; + + struct Lower_Layer_Details *temp_pmu; + struct Upper_Layer_Details *temp_pdc; + struct cfg_frame *cfg; + + pthread_mutex_lock(&mutex_file); + + if(cfgfirst != NULL) + { + fp = fopen(ipdcFilePath,"rb"); + + strcpy(fileName, ipdcFolderPath); + strcat(fileName, "/tempFile.bin"); + + fp1 = fopen(fileName, "wb"); + + for(tmpi=5; tmpi>0; tmpi--) + { + memset(tLine,'\0',sizeof(tLine)); + fgets (tLine, 50, fp); + + fputs(tLine, fp1); + } + + temp_pmu = malloc(sizeof(struct Lower_Layer_Details)); + + if(LLfirst != NULL) + { + temp_pmu = LLfirst; + tmpi = 0; + + while (temp_pmu != NULL) + { + tmpi++; + temp_pmu = temp_pmu->next; + } + + sprintf(tLine, "LowerDevices %d\n", tmpi); + fputs(tLine, fp1); + temp_pmu = LLfirst; + + while (temp_pmu != NULL) + { + fprintf(fp1,"%d",temp_pmu->pmuid); + fputc(',',fp1); + fprintf(fp1,"%s",temp_pmu->ip); + fputc(',',fp1); + fprintf(fp1,"%d",temp_pmu->port); + fputc(',',fp1); + fprintf(fp1,"%s",temp_pmu->protocol); + fputc('\n',fp1); + + temp_pmu = temp_pmu->next; + } + } + else + { + fputs("LowerDevices 0\n", fp1); + } + + + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + + if(ULfirst != NULL) + { + temp_pdc = ULfirst; + tmpi = 0; + + while (temp_pdc != NULL) + { + tmpi++; + temp_pdc = temp_pdc->next; + } + sprintf(tLine, "UpperDevices %d\n", tmpi); + fputs(tLine, fp1); + temp_pdc = ULfirst; + + while (temp_pdc != NULL) + { + fprintf(fp1,"%s",temp_pdc->ip); + fputc(',',fp1); + fprintf(fp1,"%d",temp_pdc->port); + fputc(',',fp1); + fprintf(fp1,"%s",temp_pdc->protocol); + fputc('\n',fp1); + + temp_pdc = temp_pdc->next; + } + } + else + { + fputs("UpperDevices 0\n", fp1); + } + + cfg = malloc(sizeof(struct cfg_frame)); + + if(cfgfirst != NULL) + { + cfg = cfgfirst; + tmpi = 0; + + while (cfg != NULL) + { + tmpi++; + cfg = cfg->cfgnext; + } + sprintf(tLine, "SourcesCFG %d\n", tmpi); + fputs(tLine, fp1); + cfg = cfgfirst; + + while (cfg != NULL) + { + indx = 0; + + //Copy sync word to file + byte_by_byte_copy(cline,CFGSYNC,indx, 2); + indx = indx + 2; + + // Separate the FRAME SIZE + byte_by_byte_copy(cline, cfg->framesize, indx, 2); + indx = indx + 2; + + unsigned int framesize; + framesize = to_intconvertor(cfg->framesize); + printf("CFG-framesize %d\n",framesize); + + //SEPARATE IDCODE + byte_by_byte_copy(cline, cfg->idcode, indx, 2); + indx = indx + 2; + + int id = to_intconvertor(cfg->idcode); + printf("CFG-ID Code %d\n",id); + + //SEPARATE SOC + byte_by_byte_copy(cline, cfg->soc, indx, 4); + indx = indx + 4; + + //SEPARATE FRACSEC + byte_by_byte_copy(cline, cfg->fracsec, indx, 4); + indx = indx + 4; + + //SEPARATE TIMEBASE + byte_by_byte_copy(cline, cfg->time_base, indx, 4); + indx = indx + 4; + + //SEPARATE PMU NUM + byte_by_byte_copy(cline, cfg->num_pmu, indx, 2); + cfg->num_pmu[2] = '\0'; + indx = indx + 2; + + num_pmu = to_intconvertor(cfg->num_pmu); + printf("CFG-Number of PMU's %d\n",num_pmu); + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jpmu[j]->stn, indx, 16); + indx = indx + 16; + + // Memory Allocation for idcode + byte_by_byte_copy(cline, cfg->pmu[j]->idcode, indx, 2); + indx = indx + 2; + + // Memory Allocation for format + byte_by_byte_copy(cline, cfg->pmu[j]->data_format, indx, 2); + indx = indx + 2; + + // Memory Allocation for phnmr + byte_by_byte_copy(cline, cfg->pmu[j]->phnmr, indx, 2); + indx = indx + 2; + + phn = to_intconvertor(cfg->pmu[j]->phnmr); + + // Memory Allocation for annmr + byte_by_byte_copy(cline, cfg->pmu[j]->annmr, indx, 2); + indx = indx + 2; + + ann = to_intconvertor(cfg->pmu[j]->annmr); + + // Memory Allocation for dgnmr + byte_by_byte_copy(cline, cfg->pmu[j]->dgnmr, indx, 2); + indx = indx + 2; + + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + + printf("CGF consist Phasor %d Analogs %d Digitals %d\n",phn,ann,dgn); + + // Copy Phasor Names + i = 0; + while(i < phn) + { + byte_by_byte_copy(cline, cfg->pmu[j]->cnext->phnames[i], indx, 16); + indx = indx + 16; + i++; + } + + // Copy Analog Names + i = 0; + while(i < ann) + { + byte_by_byte_copy(cline, cfg->pmu[j]->cnext->angnames[i], indx, 16); + indx = indx + 16; + i++; + } + + // Copy Digital Names + i = 0; + while(i < dgn) + { + struct dgnames *temp_dgname = cfg->pmu[j]->cnext->first; + while (temp_dgname != NULL) { + + for(i = 0;i<16;i++) { + + byte_by_byte_copy(cline, temp_dgname->dgn[i], indx, 16); + indx = indx + 16; + } // Copy 16 channel names of digital word + + temp_dgname = temp_dgname->dg_next; + } // Go to next Digital word + i++; + } + + //Copy Phasor Units + i = 0; + while(i < phn) + { + byte_by_byte_copy(cline, cfg->pmu[j]->phunit[i], indx, 4); + indx = indx + 4; + i++; + } + + //Copy Analog Units + i = 0; + while(i < ann) + { + byte_by_byte_copy(cline, cfg->pmu[j]->anunit[i], indx, 4); + indx = indx + 4; + i++; + } + + //Copy Digital Units + i = 0; + while(i < dgn) + { + byte_by_byte_copy(cline, cfg->pmu[j]->dgunit[i], indx, 4); + indx = indx + 4; + i++; + } + + // Memory Allocation for fnom + byte_by_byte_copy(cline, cfg->pmu[j]->fnom, indx, 2); + indx = indx + 2; + + // Memory Allocation for cfg_cnt + byte_by_byte_copy(cline, cfg->pmu[j]->cfg_cnt, indx, 2); + indx = indx + 2; + + j++; + }//While for PMU number ends + + byte_by_byte_copy(cline, cfg->data_rate, indx, 2); + indx = indx + 2; + + uint16_t chk = compute_CRC(cline,indx); + cline[indx++] = (chk >> 8) & ~(~0<<8); /* CHKSUM high byte; */ + cline[indx++] = (chk ) & ~(~0<<8); /* CHKSUM low byte; */ + + char buff[15]; + + sprintf(buff, "%d", framesize); + fputs(buff,fp1); + fputc('\n',fp1); + + fwrite(cline, sizeof(unsigned char),framesize,fp1); + fputc('\n',fp1); + + cfg = cfg->cfgnext; + } + } + else + { + fputs("SourcesCFG 0\n", fp1); + } + + free(temp_pmu); + free(temp_pdc); + free(cfg); + + fclose(fp); + fclose(fp1); + + if (remove(ipdcFilePath) == -1) + perror("Error in deleting a file"); + else + rename(fileName, ipdcFilePath); + } + + pthread_mutex_unlock(&mutex_file); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION dataparser(): */ +/* Parses the data frames and creates data objects. It searches for config- */ +/* uration objects that matches with the IDCODE and then creates data objects. */ +/* ---------------------------------------------------------------------------- */ + +int dataparser(unsigned char data[]) { + + int match=0,i,j=0; + int stat_status,config_change = 0; + unsigned int num_pmu,phnmr,annmr,dgnmr; + unsigned char framesize[3],idcode[3],stat[3],outer_stat[3],*d; + struct cfg_frame *temp_cfg; + struct data_frame *df; + + d = data; + d += 2; // Skip SYN + + //SEPARATE FRAMESIZE + copy_cbyc (framesize,d,2); + framesize[2]='\0'; + d += 2; + + //SEPARATE IDCODE + copy_cbyc (idcode,d,2); + idcode[2]='\0'; + + unsigned int id = to_intconvertor(idcode); + + pthread_mutex_lock(&mutex_cfg); + + temp_cfg = cfgfirst; + + // Check for the IDCODE in Configuration Frame + while(temp_cfg != NULL){ + + if(!ncmp_cbyc(idcode,temp_cfg->idcode,2)) { + + match = 1; + break; + + } else { + + temp_cfg = temp_cfg->cfgnext; + } + } + pthread_mutex_unlock(&mutex_cfg); + + // If idcode matches with cfg idcode + if(match){ + + //Allocate memory for data frame + df = malloc(sizeof(struct data_frame)); + + if(!df) { + + printf("Not enough memory df\n"); + exit(1); + } + df->dnext = NULL; + + // Allocate memory for df->framesize + df->framesize = malloc(3*sizeof(unsigned char)); + + if(!df->framesize) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->idcode + df->idcode = malloc(3*sizeof(unsigned char)); + + if(!df->idcode) { + + printf("Not enough memory df->idcode\n"); + exit(1); + } + + // Allocate memory for df->soc + df->soc = malloc(5*sizeof(unsigned char)); + + if(!df->soc) { + + printf("Not enough memory df->soc\n"); + exit(1); + } + + // Allocate memory for df->fracsec + df->fracsec = malloc(5*sizeof(unsigned char)); + + if(!df->fracsec) { + + printf("Not enough memory df->fracsec\n"); + exit(1); + } + + // Allocate Memeory For Each PMU + num_pmu = to_intconvertor(temp_cfg->num_pmu); + d += 12; + + if(num_pmu > 1 ) { + + copy_cbyc (outer_stat,d,2); + + if((outer_stat[0] & 0x04) == 0x04) { + + add_id_to_status_change_list(idcode); //idcode = PMU/PDC + return 14; + } + } + + df->dpmu = malloc(num_pmu* sizeof(struct data_for_each_pmu *)); + + if(!df->dpmu) { + + printf("Not enough memory df->dpmu[][]\n"); + exit(1); + } + + for (i = 0; i < num_pmu; i++) { + + df->dpmu[i] = malloc(sizeof(struct data_for_each_pmu)); + } + + /* Now start separating the data from data frame - Copy Framesize */ + d -= 14; + copy_cbyc (df->framesize,d,2); + df->framesize[2] = '\0'; + d += 2; + + //Copy IDCODE + copy_cbyc (df->idcode,idcode,2); + df->idcode[2] = '\0'; + d += 2; + + //Copy SOC + copy_cbyc (df->soc,d,4); + df->soc[4] = '\0'; + d += 4; + + //Copy FRACSEC + copy_cbyc (df->fracsec,d,4); + df->fracsec[4] = '\0'; + d += 4; + + //Copy NUM PMU + df->num_pmu = num_pmu; + + if(num_pmu > 1 ) + d += 2; + + // Separate the data for each PMU + while(jdpmu[j]->stat = malloc(3*sizeof(unsigned char)); + + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + copy_cbyc(df->dpmu[j]->stat,stat,2); + df->dpmu[j]->stat[2] = '\0'; + memset(stat,'\0',3); + j++; + continue; + + } else if((stat_status == 14)||(stat_status == 10)) { + + //Status for configuration bits have been changed. Add the pmu id to the 'status_change_pmupdcid linked list'. + add_id_to_status_change_list(idcode); //idcode = PMU/PDC + + // Allocate memory for stat + df->dpmu[j]->stat = malloc(3*sizeof(unsigned char)); + + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + copy_cbyc(df->dpmu[j]->stat,stat,2); + df->dpmu[j]->stat[2] = '\0'; + memset(stat,'\0',3); + + config_change = stat_status; + j++; + continue; + } + + // Extract PHNMR, DGNMR, ANNMR + phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); + annmr = to_intconvertor(temp_cfg->pmu[j]->annmr); + dgnmr = to_intconvertor(temp_cfg->pmu[j]->dgnmr); + + //Allocate memory for stat, Phasors, Analogs,Digitals and Phasors and Frequencies + /* Memory Allocation Begins */ + + // Allocate memory for stat + df->dpmu[j]->stat = malloc(3*sizeof(unsigned char)); + + if(!df->dpmu[j]->stat) { + + printf("Not enough memory for df->dpmu[j]->stat\n"); + } + + df->dpmu[j]->phasors = malloc(phnmr*sizeof(unsigned char *)); + + if(!df->dpmu[j]->phasors) { + + printf("Not enough memory df->dpmu[j]->phasors[][]\n"); + exit(1); + } + + if(temp_cfg->pmu[j]->fmt->phasor == '1') { + + for (i = 0; i < phnmr; i++) + + df->dpmu[j]->phasors[i] = malloc(9*sizeof(unsigned char)); + } else { + + for (i = 0; i < phnmr; i++) + + df->dpmu[j]->phasors[i] = malloc(5*sizeof(unsigned char)); + } + + + /* For Analogs */ + + df->dpmu[j]->analog = malloc(annmr*sizeof(unsigned char *)); + + if(!df->dpmu[j]->analog) { + + printf("Not enough memory df->dpmu[j]->analog[][]\n"); + exit(1); + } + + if(temp_cfg->pmu[j]->fmt->analog == '1') { + + for (i = 0; i < annmr; i++) + + df->dpmu[j]->analog[i] = malloc(9*sizeof(unsigned char)); + } else { + + for (i = 0; i < annmr; i++) + + df->dpmu[j]->analog[i] = malloc(5*sizeof(unsigned char)); + } + + /* For Frequency */ + if(temp_cfg->pmu[j]->fmt->freq == '1') { + + df->dpmu[j]->freq = malloc(5*sizeof(unsigned char)); + df->dpmu[j]->dfreq = malloc(5*sizeof(unsigned char)); + + } else { + + df->dpmu[j]->freq = malloc(3*sizeof(unsigned char)); + df->dpmu[j]->dfreq = malloc(3*sizeof(unsigned char)); + } + + /* For Digital */ + df->dpmu[j]->digital = malloc(dgnmr* sizeof(unsigned char*)); + + if(!df->dpmu[j]->digital) { + + printf("Not enough memory df->dpmu[j]->digital[][]\n"); + exit(1); + } + + for (i = 0; i < dgnmr; i++) { + + df->dpmu[j]->digital[i] = malloc(3*sizeof(unsigned char)); + } + /* Memory Allocation Ends */ + + //Check stat word of each PMU data block + copy_cbyc (df->dpmu[j]->stat,stat,2); + df->dpmu[j]->stat[2] = '\0'; + memset(stat,'\0',3); + + // Copy FMT + df->dpmu[j]->fmt = malloc(sizeof(struct format)); + df->dpmu[j]->fmt->freq = temp_cfg->pmu[j]->fmt->freq; + df->dpmu[j]->fmt->analog = temp_cfg->pmu[j]->fmt->analog; + df->dpmu[j]->fmt->phasor = temp_cfg->pmu[j]->fmt->phasor; + df->dpmu[j]->fmt->polar = temp_cfg->pmu[j]->fmt->polar; + + // Copy num of phasors analogs and digitals + df->dpmu[j]->phnmr = phnmr; + df->dpmu[j]->annmr = annmr; + df->dpmu[j]->dgnmr = dgnmr; + + //Phasors + if(temp_cfg->pmu[j]->fmt->phasor == '1') { + + for(i=0;idpmu[j]->phasors[i],d,8); + df->dpmu[j]->phasors[i][8] = '\0'; + d += 8; + } + } else { + + for(i=0;idpmu[j]->phasors[i],d,4); + df->dpmu[j]->phasors[i][4] = '\0'; + d += 4; + } + } + + /* For Freq */ + if(temp_cfg->pmu[j]->fmt->freq == '1') { + + copy_cbyc (df->dpmu[j]->freq,d,4); + df->dpmu[j]->freq[4] = '\0'; + d += 4; + + copy_cbyc (df->dpmu[j]->dfreq,d,4); + df->dpmu[j]->dfreq[4] = '\0'; + d += 4; + + } else { + + copy_cbyc (df->dpmu[j]->freq,d,2); + df->dpmu[j]->freq[2] = '\0'; + d += 2; + + copy_cbyc (df->dpmu[j]->dfreq,d,2); + df->dpmu[j]->dfreq[2] = '\0'; + d += 2; + } + + /* For Analogs */ + if(temp_cfg->pmu[j]->fmt->analog == '1') { + + for(i = 0; idpmu[j]->analog[i],d,4); + df->dpmu[j]->analog[i][4] = '\0'; + d += 4; + } + } else { + for(i = 0; idpmu[j]->analog[i],d,2); + df->dpmu[j]->analog[i][2] = '\0'; + d += 2; + } + } + + /* For Digital */ + for(i = 0; idpmu[j]->digital[i],d,2); + df->dpmu[j]->digital[i][2] = '\0'; + d += 2; + } + + j++; + } //While ends + + // Now start Time aligning and Sorting Operation for data_frame df + time_align(df); + + } else { + + //No match for configuration frame + printf("Configuration is not fresent for received data frame!\n"); + } + + if((config_change == 14) ||(config_change == 10)) + return config_change; + else + return stat_status; +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION check_statword(): */ +/* Check the STAT word of the data frames for any change in the data block. */ +/* Some of the prime errors are handled. */ +/* ---------------------------------------------------------------------------- */ + +int check_statword(unsigned char stat[]) { + + int ret = 0; + + /* Programmer has used these bits as an indication for PMU data that has not arrived */ + if(stat[1] == 0x0f) { + + ret = 16; + return ret; + + } else if ((stat[0] & 0x04) == 0x04) { + + printf("Configuration Change error\n"); + ret = 10; + return ret; + + } else if ((stat[0] & 0x40) == 0x40) { + + printf("PMU error may includ configuration error\n"); + ret = 14; + return ret; + + } else if((stat[0] & 0x80) == 0x80) { + + printf("Data invalid\n"); + ret = 15; + return ret; + + } else if ((stat[0] & 0x20) == 0x20) { + + printf("PMU Sync error\n"); + ret = 13; + return ret; + + } else if ((stat[0] & 0x10) == 0x10) { + + printf("Data sorting error\n"); + ret = 12; + return ret; + + } else if ((stat[0] & 0x08) == 0x08) { + + printf("PMU Trigger error\n"); + ret = 11; + return ret; + + } + + return ret; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION add_id_to_status_change_list(): */ +/* Status of data block has been changed. It adds the IDCODE of the PMU/PDC */ +/* from which the data block is received to the status_change_pmupdcid' LL */ +/* ---------------------------------------------------------------------------- */ + +void add_id_to_status_change_list(unsigned char idcode[]) { + + struct status_change_pmupdcid *t; + + t = malloc(sizeof(struct status_change_pmupdcid)); + + if(!t) { + + printf("No enough memory for struct (status_change_pmupdcid) t\n"); + } + + copy_cbyc(t->idcode,idcode,2); + t->idcode[2] = '\0'; + t->pmuid_next = NULL; + + pthread_mutex_lock(&mutex_status_change); + + if(root_pmuid == NULL) { + + t = root_pmuid; + + } else { + + struct status_change_pmupdcid *temp = root_pmuid; + while(temp->pmuid_next!=NULL) { + temp = temp->pmuid_next; + } + + temp->pmuid_next = t; + } + + pthread_mutex_unlock(&mutex_status_change); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION remove_id_from_status_change_list(): */ +/* It removes the IDCODE of PMU/PDC from status_change_pmupdcid' LL */ +/* on receipt of configuration frame of corresponding PMU/PDC */ +/* ---------------------------------------------------------------------------- */ + +void remove_id_from_status_change_list(unsigned char idcode[]) { + + struct status_change_pmupdcid *tprev; + + pthread_mutex_lock(&mutex_status_change); + + if(root_pmuid == NULL) { + + printf("***No Stat change***\n"); + + } else { + + struct status_change_pmupdcid *temp = root_pmuid; + + while(temp != NULL) { + + if(!ncmp_cbyc(temp->idcode,idcode,2)) { + + break; + + } else { + + tprev = temp; + temp = temp->pmuid_next; + } + } + + // If It is the first element(root) in the list + if(!ncmp_cbyc(temp->idcode,root_pmuid->idcode,2)) { + + root_pmuid = root_pmuid->pmuid_next; + free(temp); + // If it is any element other than first(root) in the list + } else { + + tprev->pmuid_next = temp->pmuid_next; + free(temp); + } + } + pthread_mutex_unlock(&mutex_status_change); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION to_intconvertor(): */ +/* ---------------------------------------------------------------------------- */ + +unsigned int to_intconvertor(unsigned char array[]) { + + unsigned int n; + n = array[0]; + n <<= 8; + n |= array[1]; + return n; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION long_int_to_ascii_convertor(): */ +/* ---------------------------------------------------------------------------- */ + +void long_int_to_ascii_convertor(unsigned long int n,unsigned char hex[]) { + + hex[0] = n >> 24; + hex[1] = n >> 16; + hex[2] = n >> 8; + hex[3] = n ; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION int_to_ascii_convertor(): */ +/* ---------------------------------------------------------------------------- */ + +void int_to_ascii_convertor(unsigned int n,unsigned char hex[]) { + + hex[0] = n >> 8; + hex[1] = n ; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION copy_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size) { + + int i; + for(i = 0; i< size; i++) + dst[i] = *(s + i); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION ncmp_cbyc(): */ +/* ---------------------------------------------------------------------------- */ + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size) { + + int i,flag = 0; + for(i = 0; i< size; i++) { + + if(dst[i] != src[i]) { + + flag = 1; + break; + } + } + return flag; +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION byte_by_byte_copy(): */ +/* ---------------------------------------------------------------------------- */ + +void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n) { + + int i; + for(i = 0;i>8)^message[i]; + crc<<=8; + quick=temp ^ ( temp >>4); + crc ^=quick; + quick<<=5; + crc ^=quick; + quick <<=7; + crc ^= quick; + } + return crc; +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/parser.h b/iPDC/parser.h new file mode 100755 index 0000000..d4ce901 --- /dev/null +++ b/iPDC/parser.h @@ -0,0 +1,169 @@ +/* ----------------------------------------------------------------------------- + * parser.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011 Nitesh Pandit + * Copyright (C) 2011 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#define MAXBUFLEN 2000 + + +/* ---------------------------------------------------------------- */ +/* Data Structure prototypes */ +/* ---------------------------------------------------------------- */ + +/* ---------------------------------------------------------------- */ +/* Configuartion Frame Data Structure */ +/* ---------------------------------------------------------------- */ + +struct cfg_frame { + + unsigned char *framesize; + unsigned char *idcode; + unsigned char *soc; + unsigned char *fracsec; + unsigned char *time_base; + unsigned char *num_pmu; + struct for_each_pmu **pmu; + unsigned char *data_rate; + struct cfg_frame *cfgnext; + +}*cfgfirst; + + +struct for_each_pmu{ + + unsigned char *stn; + unsigned char *idcode; + unsigned char *data_format; + struct format *fmt; + unsigned char *phnmr; + unsigned char *annmr; + unsigned char *dgnmr; + struct channel_names *cnext; + unsigned char **phunit; + unsigned char **anunit; + unsigned char **dgunit; + unsigned char *fnom; + unsigned char *cfg_cnt; +}; + +struct channel_names { + + unsigned char **phnames; + unsigned char **angnames; + struct dgnames *first; +}; + +struct dgnames { + + unsigned char **dgn; // Stores 16 digital names for each word + struct dgnames *dg_next; +}; + +struct format{ + + unsigned char freq; + unsigned char analog; + unsigned char phasor; + unsigned char polar; +}; + + +/* ---------------------------------------------------------------- */ +/* Data Frame Data Structure */ +/* ---------------------------------------------------------------- */ + +struct data_frame { + + unsigned char *framesize; + unsigned char *idcode; + unsigned char *soc; + unsigned char *fracsec; + int num_pmu; + struct data_for_each_pmu **dpmu; + struct data_frame *dnext; +}; + +struct data_for_each_pmu { + + unsigned char *stat; + int phnmr; + int annmr; + int dgnmr; + struct format *fmt; + unsigned char **phasors; + unsigned char **analog; + unsigned char *freq; + unsigned char *dfreq; + unsigned char **digital; +}; + +/* ---------------------------------------------------------------- */ +/* Status change Data Structure */ +/* ---------------------------------------------------------------- */ + +struct status_change_pmupdcid { + + unsigned char idcode[3]; + struct status_change_pmupdcid *pmuid_next; + +}*root_pmuid; + + +/* ---------------------------------------------------------------- */ +/* Function prototypes */ +/* ---------------------------------------------------------------- */ + +void cfgparser(unsigned char []); + +void write_cfg_to_file(); + +int dataparser(unsigned char data[]); + +int check_statword(unsigned char stat[]); + +void add_id_to_status_change_list(unsigned char idcode[]); + +void remove_id_from_status_change_list(unsigned char idcode[]); + +unsigned int to_intconvertor(unsigned char []); + +void long_int_to_ascii_convertor(unsigned long int n,unsigned char hex[]); + +void int_to_ascii_convertor(unsigned int n,unsigned char hex[]); + +void copy_cbyc(unsigned char dst[],unsigned char *s,int size); + +int ncmp_cbyc(unsigned char dst[],unsigned char src[],int size); + +void byte_by_byte_copy(unsigned char dst[],unsigned char src[],int index,int n); + +unsigned long int to_long_int_convertor(unsigned char array[]); + +uint16_t compute_CRC(unsigned char *message,int length); + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/recreate.c b/iPDC/recreate.c new file mode 100755 index 0000000..4b6c27b --- /dev/null +++ b/iPDC/recreate.c @@ -0,0 +1,879 @@ +/* ----------------------------------------------------------------------------- + * recreate.c + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include +#include +#include "parser.h" +#include "global.h" +#include "connections.h" +#include "recreate.h" +#include "new_pmu_or_pdc.h" + +/* ------------------------------------------------------------------------------------ */ +/* Functions defined in recreate.c */ +/* ------------------------------------------------------------------------------------ */ + +/* 1. recreate_cfg_objects() */ +/* 2. void init_cfgparser() */ +/* 3. void recreate_Connection_Table() */ +/* 4. void recreate_udp_connections(struct Lower_Layer_Details *t11) */ +/* 5. void recreate_tcp_connections(struct Lower_Layer_Details *t12) */ + +/* ------------------------------------------------------------------------------------ */ + + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_cfg_objects(): */ +/* It re-creates Configuration Objects from file cfg.bin if the ./server */ +/* program is stopped abruptly. It internally calls init_cfgparser() */ +/* ---------------------------------------------------------------------------- */ + + +void recreate_cfg_objects(){ + + /* ---------------------------------------------------------------- */ + /* Initialize Global Mutex Variable from global.h */ + /* ---------------------------------------------------------------- */ + + pthread_mutex_init(&mutex_file, NULL); + pthread_mutex_init(&mutex_cfg, NULL); + pthread_mutex_init(&mutex_status_change, NULL); + pthread_mutex_init(&mutex_Lower_Layer_Details, NULL); + pthread_mutex_init(&mutex_Upper_Layer_Details, NULL); + + CMDSYNC[0] = 0xaa; + CMDSYNC[1] = 0x41; + CMDSYNC[2] = '\0'; + + CMDCFGSEND[0] = 0x00; + CMDCFGSEND[1] = 0x05; + CMDCFGSEND[2] = '\0'; + + CMDDATASEND[0] = 0x00; + CMDDATASEND[1] = 0x02; + CMDDATASEND[2] = '\0'; + + CMDDATAOFF[0] = 0x00; + CMDDATAOFF[1] = 0x01; + CMDDATAOFF[2] = '\0'; + + DATASYNC[0] = 0xaa; + DATASYNC[1] = 0x01; + DATASYNC[2] = '\0'; + + CFGSYNC[0] = 0xaa; + CFGSYNC[1] = 0x31; + CFGSYNC[2] = '\0'; + + int yes =1; + + /* Create UDP socket for DB Server and bind to DBPORT */ + if ((DB_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + + perror("socket"); + exit(1); + + } else { + + printf("DB Socket:Sucessfully created\n"); + + } + if (setsockopt(DB_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { + perror("setsockopt"); + exit(1); + } + + bzero(&DB_Server_addr,sizeof(DB_Server_addr)); + DB_Server_addr.sin_family = AF_INET; // host byte order + DB_Server_addr.sin_port = htons(DBPORT); // short, network byte order + DB_Server_addr.sin_addr.s_addr = inet_addr(dbserver_ip); // automatically fill with my IP + memset(&(DB_Server_addr.sin_zero),'\0', 8); // zero the rest of the struct + + unsigned char *line; + unsigned int framesize; + + int tempi; + char *rline = NULL, *d1; + ssize_t read; + size_t len = 0; + + /* Create CFG Objects from cfg.bin*/ + FILE *file = fopen (ipdcFilePath,"rb"); + + if(file != NULL) + { + tempi = 1; + + while(tempi < 7) //iPDCServer + { + read = getline(&rline, &len, file); + tempi++; + } + + if(read > 0) //LowerDevices + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + while (tempi > 0) + { + read = getline(&rline, &len, file); + tempi--; + } + } + + read = getline(&rline, &len, file); //UpperDevices + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + while (tempi > 0) + { + read = getline(&rline, &len, file); + tempi--; + } + } + + read = getline(&rline, &len, file); //SourcesCFG + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if (tempi > 0) + { + getline(&rline, &len, file); + framesize = atoi(rline); + + line = malloc(framesize*sizeof(unsigned char)); + + fread(line, sizeof(unsigned char), framesize, file); + + init_cfgparser(line); + free(line); + + tempi--; + } + } + fclose (file); + } + else + { + printf("iPDC Setup File is missing, iPDC exit.\n"); + exit(1); + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION init_cfgparser(): */ +/* It is called by recreate_cfg_object() to read the file `cfg.bin` */ +/* and create cfg objects in the memory */ +/* ---------------------------------------------------------------------------- */ + +void init_cfgparser(unsigned char st[]){ + + unsigned char *s; + unsigned int phn,ann,dgn,num_pmu; + int i,j,dgchannels; + struct cfg_frame *cfg; + struct channel_names *cn; + + + /******************** PARSING BEGINGS *******************/ + + cfg = malloc(sizeof(struct cfg_frame)); + + if(!cfg) { + + printf("Not enough memory for cfg\n"); + } + + s = st; + + /* Memory Allocation Begins - Allocate memory to framesize */ + cfg->framesize = malloc(3*sizeof(unsigned char)); + if(!cfg->framesize) { + printf("Not enough memory for cfg->framesize\n"); + } + + // Allocate memory to idcode + cfg->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->idcode) { + printf("Not enough memory for cfg->framesize\n"); + } + + // Allocate memory to soc + cfg->soc = malloc(5*sizeof(unsigned char)); + if(!cfg->soc) { + printf("Not enough memory for cfg->soc\n"); + } + + // Allocate memory to fracsec + cfg->fracsec = malloc(5*sizeof(unsigned char)); + if(!cfg->fracsec) { + printf("Not enough memory for cfg->fracsec\n"); + } + + // Allocate memory to time_base + cfg->time_base = malloc(5*sizeof(unsigned char)); + if(!cfg->time_base) { + printf("Not enough memory for cfg->time_base\n"); + } + + // Allocate memory to num_pmu + cfg->num_pmu = malloc(3*sizeof(unsigned char)); + if(!cfg->num_pmu) { + printf("Not enough memory for cfg->num_pmu\n"); + } + + // Allocate memory to data_rate + cfg->data_rate = malloc(3*sizeof(unsigned char)); + if(!cfg->data_rate) { + printf("Not enough memory for cfg->data_rate\n"); + } + + // Skip the sync word + s = s + 2; + + // Separate the FRAME SIZE + copy_cbyc (cfg->framesize,(unsigned char *)s,2); + cfg->framesize[2]='\0'; + s = s + 2; + + //SEPARATE IDCODE + copy_cbyc (cfg->idcode,(unsigned char *)s,2); + cfg->idcode[2]='\0'; + int id = to_intconvertor(cfg->idcode); + printf("ID Code %d\n",id); + s = s + 2; + + //SEPARATE SOC + copy_cbyc (cfg->soc,(unsigned char *)s,4); + cfg->soc[4]='\0'; + s = s + 4; + + //SEPARATE FRACSEC + copy_cbyc (cfg->fracsec,(unsigned char *)s,4); + cfg->fracsec[4]='\0'; + s = s + 4; + + //SEPARATE TIMEBASE + copy_cbyc (cfg->time_base,(unsigned char *)s,4); + cfg->time_base[4]='\0'; + s = s + 4; + + //SEPARATE PMU NUM + copy_cbyc (cfg->num_pmu,(unsigned char *)s,2); + cfg->num_pmu[2]='\0'; + s = s + 2; + + num_pmu = to_intconvertor(cfg->num_pmu); + printf("Number of PMU's = %d.\n",num_pmu); + + // Allocate Memeory For Each PMU + cfg->pmu = malloc(num_pmu* sizeof(struct for_each_pmu *)); + if(!cfg->pmu) { + printf("Not enough memory pmu[][]\n"); + exit(1); + } + + for (i = 0; i < num_pmu; i++) { + + cfg->pmu[i] = malloc(sizeof(struct for_each_pmu)); + } + + j = 0; + + ///WHILE EACH PMU IS HANDLED + while(jpmu[j]->stn = malloc(17*sizeof(unsigned char)); + if(!cfg->pmu[j]->stn) { + printf("Not enough memory cfg->pmu[j]->stn\n"); + exit(1); + } + + // Memory Allocation for idcode + cfg->pmu[j]->idcode = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->idcode) { + printf("Not enough memory cfg->pmu[j]->idcode\n"); + exit(1); + } + + // Memory Allocation for format + cfg->pmu[j]->data_format = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->data_format) { + printf("Not enough memory cfg->pmu[j]->data_format\n"); + exit(1); + } + + // Memory Allocation for phnmr + cfg->pmu[j]->phnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->phnmr) { + printf("Not enough memory cfg->pmu[j]->phnmr\n"); + exit(1); + } + + // Memory Allocation for annmr + cfg->pmu[j]->annmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->annmr) { + printf("Not enough memory cfg->pmu[j]->annmr\n"); + exit(1); + } + + // Memory Allocation for dgnmr + cfg->pmu[j]->dgnmr = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->dgnmr) { + printf("Not enough memory cfg->pmu[j]->dgnmr\n"); + exit(1); + } + + // Memory Allocation for fnom + cfg->pmu[j]->fnom = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->fnom) { + printf("Not enough memory cfg->pmu[j]->fnom\n"); + exit(1); + } + + // Memory Allocation for cfg_cnt + cfg->pmu[j]->cfg_cnt = malloc(3*sizeof(unsigned char)); + if(!cfg->pmu[j]->cfg_cnt) { + printf("Not enough memory cfg->pmu[j]->cfg_cnt\n"); + exit(1); + } + + //SEPARATE STATION NAME + copy_cbyc (cfg->pmu[j]->stn,(unsigned char *)s,16); + cfg->pmu[j]->stn[16]='\0'; + s = s + 16; + + //SEPARATE IDCODE + copy_cbyc (cfg->pmu[j]->idcode,(unsigned char *)s,2); + cfg->pmu[j]->idcode[2]='\0'; + s = s + 2; + + //SEPARATE DATA FORMAT + copy_cbyc (cfg->pmu[j]->data_format,(unsigned char *)s,2); + cfg->pmu[j]->data_format[2]='\0'; + s = s + 2; + + // USE fmt + unsigned char hex = cfg->pmu[j]->data_format[1]; + hex <<= 4; + + // Extra field has been added to identify polar,rectangular,floating/fixed point + cfg->pmu[j]->fmt = malloc(sizeof(struct format)); + if((hex & 0x80) == 0x80) cfg->pmu[j]->fmt->freq = '1'; else cfg->pmu[j]->fmt->freq = '0'; + if((hex & 0x40) == 0x40 ) cfg->pmu[j]->fmt->analog = '1'; else cfg->pmu[j]->fmt->analog = '0'; + if((hex & 0x20) == 0x20) cfg->pmu[j]->fmt->phasor = '1'; else cfg->pmu[j]->fmt->phasor = '0'; + if((hex & 0x10) == 0x10) cfg->pmu[j]->fmt->polar = '1'; else cfg->pmu[j]->fmt->polar = '0'; + + //SEPARATE PHASORS + copy_cbyc (cfg->pmu[j]->phnmr,(unsigned char *)s,2); + cfg->pmu[j]->phnmr[2]='\0'; + s = s + 2; + phn = to_intconvertor(cfg->pmu[j]->phnmr); + + //SEPARATE ANALOGS + copy_cbyc (cfg->pmu[j]->annmr,(unsigned char *)s,2); + cfg->pmu[j]->annmr[2]='\0'; + s = s + 2; + ann = to_intconvertor(cfg->pmu[j]->annmr); + + //SEPARATE DIGITALS + copy_cbyc (cfg->pmu[j]->dgnmr,(unsigned char *)s,2); + cfg->pmu[j]->dgnmr[2] = '\0'; + s = s + 2; + dgn = to_intconvertor(cfg->pmu[j]->dgnmr); + printf("CFG consist Phasor = %d, Analogs = %d, and Digitals = %d.\n",phn,ann,dgn); + + cn = malloc(sizeof(struct channel_names)); + if(!cn) { + printf("Not enough memory cn\n"); + exit(1); + } + cn->first = NULL; + + ////SEPARATE PHASOR NAMES + if(phn != 0){ + + cn->phnames = malloc(phn*sizeof(unsigned char*)); + if(!cn->phnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cn->phnames[i] = malloc(17*sizeof(unsigned char)); + } + + i = 0;//Index for PHNAMES + + while(iphnames[i],(unsigned char *)s,16); + cn->phnames[i][16] = '\0'; + printf("Phnames %s\n",cn->phnames[i]); + s = s + 16; + i++; + } + } + + //SEPARATE ANALOG NAMES + if(ann!=0){ + cn->angnames = malloc(ann*sizeof(unsigned char*)); + if(!cn->angnames) { + printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cn->angnames[i] = malloc(17*sizeof(unsigned char)); + } + + i=0;//Index for ANGNAMES + + while(iangnames[i],(unsigned char *)s,16); + cn->angnames[i][16]='\0'; + printf("ANGNAMES %s\n",cn->angnames[i]); + s =s + 16; + i++; + } + } + + i = 0; //Index for number of dgwords + struct dgnames *q; + + while(idgn = malloc(16*sizeof(unsigned char *)); + if(!temp1->dgn) { + printf("Not enough memory temp1->dgn\n"); + exit(1); + } + + for (i = 0; i < 16; i++) { + + temp1->dgn[i] = malloc(17*sizeof(unsigned char)); + } + + temp1->dg_next = NULL; + + for(dgchannels=0;dgchannels<16;dgchannels++){ + + copy_cbyc (temp1->dgn[dgchannels],(unsigned char *)s,16); + temp1->dgn[dgchannels][16]='\0'; + s += 16; + printf("%s\n",temp1->dgn[dgchannels]); + } + + if(cn->first == NULL){ + cn->first = q = temp1; + } else { + while(q->dg_next!=NULL){ + q = q->dg_next; + } + q->dg_next = temp1; + } + i++; + } //DGWORD WHILE ENDS + + cfg->pmu[j]->cnext = cn;//Assign to pointers + + ///PHASOR FACTORS + if(phn != 0){ + + cfg->pmu[j]->phunit = malloc(phn*sizeof(unsigned char*)); + if(!cfg->pmu[j]->phunit) { + printf("Not enough memory cfg->pmu[j]->phunit[][]\n"); + exit(1); + } + + for (i = 0; i < phn; i++) { + + cfg->pmu[j]->phunit[i] = malloc(5*sizeof(unsigned char)); + } + + i = 0; + + while(ipmu[j]->phunit[i],(unsigned char *)s,4); + cfg->pmu[j]->phunit[i][4] = '\0'; + s = s + 4; + i++; + } + }//if for PHASOR Factors ends + + //ANALOG FACTORS + if(ann != 0){ + + cfg->pmu[j]->anunit = malloc(ann*sizeof(unsigned char*)); + if(!cfg->pmu[j]->anunit) { + printf("Not enough memory cfg->pmu[j]->anunit[][]\n"); + exit(1); + } + + for (i = 0; i < ann; i++) { + + cfg->pmu[j]->anunit[i] = malloc(5*sizeof(unsigned char)); + + } + + i = 0; + + while(ipmu[j]->anunit[i],(unsigned char *)s,4); + cfg->pmu[j]->anunit[i][4] = '\0'; + s = s + 4; + i++; + } + + } // if for ANALOG Factors ends + + if(dgn != 0){ + + cfg->pmu[j]->dgunit = malloc(dgn*sizeof(unsigned char*)); + if(!cfg->pmu[j]->dgunit) { + printf("Not enough memory cfg->pmu[j]->dgunit[][]\n"); + exit(1); + } + + for (i = 0; i < dgn; i++) { + cfg->pmu[j]->dgunit[i] = malloc(5*sizeof(unsigned char)); + } + + i = 0; + + while(ipmu[j]->dgunit[i],(unsigned char *)s,4); + cfg->pmu[j]->dgunit[i][4] = '\0'; + s = s + 4; + i++; + } + } //if for Digital Words Factors ends + + copy_cbyc (cfg->pmu[j]->fnom,(unsigned char *)s,2); + cfg->pmu[j]->fnom[2]='\0'; + s = s + 2; + + copy_cbyc (cfg->pmu[j]->cfg_cnt,(unsigned char *)s,2); + cfg->pmu[j]->cfg_cnt[2] = '\0'; + s = s + 2; + j++; + }//While for PMU number ends + + copy_cbyc (cfg->data_rate,(unsigned char *)s,2); + cfg->data_rate[2] = '\0'; + cfg->cfgnext = NULL; + + if (cfgfirst == NULL) { + cfgfirst = cfg; + } else { + + struct cfg_frame *t=cfgfirst; + while(t->cfgnext != NULL){ + t = t->cfgnext; + } + t->cfgnext = cfg; + } +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_Connection_Table(): */ +/* It re-creates objects by reading the file ipdcINFO.bin.*/ +/* ---------------------------------------------------------------------------- */ + +void recreate_Connection_Table() { + + char line[40],*ip,*port,*protocol,*id; + char *rline = NULL, *d1; + int err, tempi; + FILE *f; + ssize_t read; + size_t len = 0; + + // A new thread is created for each TCP connection in 'detached' mode. Thus allowing any number of threads to be created. + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + f = fopen(ipdcFilePath,"rb"); + tempi = 1; + + while(tempi < 7) + { + read = getline(&rline, &len, f); + tempi++; + } + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if (tempi > 0) //1 if + { + printf("#### CONNECTION TABLE OF SOURCE DEVICES ####\n"); + printf("-----------------------------------------------------------------\n"); + printf("| PMU ID | Lower IP | Port | Protocol |\n"); + printf("-----------------------------------------------------------------\n"); + + while (tempi > 0) //2 while + { + read = getline(&rline, &len, f); + + /* Extract the ip and protocol */ + id = strtok (rline,","); + ip = strtok (NULL,","); + port = strtok (NULL,","); + protocol = strtok (NULL,"\n"); + protocol[3] = '\0'; + printf("|\t%d\t|%s\t|\t%d\t|\t%s\t|\n",atoi(id),ip,atoi(port),protocol); + + struct Lower_Layer_Details *temp_pmu; + + temp_pmu = malloc(sizeof(struct Lower_Layer_Details)); + if(!temp_pmu) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + temp_pmu->pmuid = atoi(id); + strcpy(temp_pmu->ip,ip); + temp_pmu->port = atoi(port); + strcpy(temp_pmu->protocol,protocol); + temp_pmu->data_transmission_off = 0; + temp_pmu->pmu_remove = 0; + temp_pmu->request_cfg_frame = 0; + temp_pmu->next = NULL; + temp_pmu->prev = NULL; + + if(!strncasecmp(temp_pmu->protocol,"UDP",3)) { + + recreate_udp_connections(temp_pmu); + } + + if(!strncasecmp(temp_pmu->protocol,"TCP",3)) { + + recreate_tcp_connections(temp_pmu); + } + + memset(line,'\0',40); + tempi--; + } + printf("-----------------------------------------------------------------\n"); + + } else { + + printf("Source Devices Not Found.\n"); + } + } + + read = getline(&rline, &len, f); + + if(read > 0) + { + d1 = strtok (rline," "); + d1 = strtok (NULL,"\n"); + tempi = atoi(d1); + + if (tempi > 0) //1 if + { + printf("#### CONNECTION TABLE OF DESTINATION DEVICES ####\n"); + printf("-------------------------------------------------\n"); + printf("| Upper IP | Port | Protocol |\n"); + printf("-------------------------------------------------\n"); + + while (tempi > 0) //2 while + { + read = getline(&rline, &len, f); + + /* Extract the ip and protocol */ + ip = strtok (rline,","); + port = strtok (NULL,","); + protocol = strtok (NULL,"\n"); + protocol[3] = '\0'; + printf("|%s\t|\t%d\t|\t%s\t|\n",ip,atoi(port),protocol); + + struct Upper_Layer_Details *temp_pdc; + temp_pdc = malloc(sizeof(struct Upper_Layer_Details)); + if(!temp_pdc) { + + printf("Not enough memory temp_pmu\n"); + exit(1); + } + + strcpy(temp_pdc->ip,ip); + temp_pdc->port = atoi(port); + strcpy(temp_pdc->protocol,protocol); + + bzero(&temp_pdc->pdc_addr,sizeof(temp_pdc->pdc_addr)); + temp_pdc->pdc_addr.sin_family = AF_INET; + temp_pdc->pdc_addr.sin_addr.s_addr = inet_addr(temp_pdc->ip); + temp_pdc->pdc_addr.sin_port = htons(temp_pdc->port); + + memset(&(temp_pdc->pdc_addr.sin_zero), '\0', 8); // zero the rest of the struct + temp_pdc->config_change = 0; + temp_pdc->UL_upper_pdc_cfgsent = 0; + temp_pdc->UL_data_transmission_off = 1; + temp_pdc->address_set = 0; + temp_pdc->tcpup = 1; + + if(ULfirst == NULL) { + + ULfirst = temp_pdc; + temp_pdc->prev = NULL; + + } else { + + ULlast->next = temp_pdc; + temp_pdc->prev = ULlast; + } + + ULlast = temp_pdc; + temp_pdc->next = NULL; + memset(line,'\0',40); + + tempi--; + } + printf("-------------------------------------------------\n"); + } else { + + printf("Destination Devices Not Found.\n"); + } + } + fclose(f); +} + + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_udp_connections(struct Lower_Layer_Details *t11): */ +/* ---------------------------------------------------------------------------- */ + +void recreate_udp_connections(struct Lower_Layer_Details *t11) { + + int err; + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_t t; + + if(pthread_create(&t,&attr,connect_pmu_udp,(void *)t11)) { + + perror(strerror(err)); + exit(1); + } +} + +/* ---------------------------------------------------------------------------- */ +/* FUNCTION recreate_tcp_connections(struct Lower_Layer_Details *t12): */ +/* ---------------------------------------------------------------------------- */ + +void recreate_tcp_connections(struct Lower_Layer_Details *t12) { + + int err; + pthread_attr_t attr; + pthread_attr_init(&attr); + + /* In the detached state, the thread resources are immediately freed when it terminates, but + pthread_join(3) cannot be used to synchronize on the thread termination. */ + if((err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) { + + perror(strerror(err)); + exit(1); + } + + /* Shed policy = SCHED_FIFO (realtime, first-in first-out) */ + if((err = pthread_attr_setschedpolicy(&attr,SCHED_FIFO))) { + + perror(strerror(err)); + exit(1); + } + + pthread_t t; + + if(pthread_create(&t,&attr,connect_pmu_tcp,(void *)t12)) { + perror(strerror(err)); + exit(1); + } +} + +/**************************************** End of File *******************************************************/ diff --git a/iPDC/recreate.h b/iPDC/recreate.h new file mode 100755 index 0000000..e0c0be7 --- /dev/null +++ b/iPDC/recreate.h @@ -0,0 +1,44 @@ +/* ----------------------------------------------------------------------------- + * recreate.h + * + * iPDC - Phasor Data Concentrator + * + * Copyright (C) 2011-2012 Nitesh Pandit + * Copyright (C) 2011-2012 Kedar V. Khandeparkar + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Authors: + * Nitesh Pandit + * Kedar V. Khandeparkar + * + * ----------------------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* Function prototypes */ +/* ------------------------------------------------------------------ */ + +void recreate_cfg_objects(); + +void init_cfgparser(unsigned char []); + +void recreate_Connection_Table(); + +void recreate_udp_connections(struct Lower_Layer_Details *t11); + +void recreate_tcp_connections(struct Lower_Layer_Details *t12); + +/**************************************** End of File *******************************************************/