@@ -20,6 +20,7 | |||
|
20 | 20 | -- Mail : alexis.jeandet@lpp.polytechnique.fr |
|
21 | 21 | ----------------------------------------------------------------------------*/ |
|
22 | 22 | #include "memchecker.h" |
|
23 | #include <socexplorerengine.h> | |
|
23 | 24 | |
|
24 | 25 | memchecker::memchecker(socexplorerplugin* plugin) |
|
25 | 26 | { |
@@ -83,30 +84,7 unsigned int p_pow2(unsigned int v) | |||
|
83 | 84 | |
|
84 | 85 | unsigned int memchecker::measureMemSize(unsigned int address, unsigned int maxSize) |
|
85 | 86 | { |
|
86 | unsigned int curVal=1,testAddress=address; | |
|
87 | unsigned int size=0; | |
|
88 | this->plugin->Write(&curVal,1,testAddress); | |
|
89 | this->plugin->Read(&curVal,1,testAddress); | |
|
90 | if(curVal!=1) | |
|
91 | return size; | |
|
92 | unsigned int max= p_pow2((0xFFFFFFFFFFFFFFFF - address))+1; | |
|
93 | register unsigned int maxSizeLg=p_pow2(maxSize)-1; | |
|
94 | if(max>maxSizeLg) | |
|
95 | max=maxSizeLg; | |
|
96 | if(max>32)max=32; | |
|
97 | for(size=2;size<max;size++) //check each address bit | |
|
98 | { | |
|
99 | testAddress = (unsigned int)(address+(1<<size)); | |
|
100 | curVal = (unsigned int)(1<<size); | |
|
101 | this->plugin->Write(&curVal,1,testAddress); | |
|
102 | this->plugin->Read(&curVal,1,testAddress); | |
|
103 | if((unsigned int)curVal!=(unsigned int)(1<<size)) | |
|
104 | return (1<<(size)); | |
|
105 | this->plugin->Read(&curVal,1,address); | |
|
106 | if((curVal==(unsigned int)(1<<size)) && (size!=0)) | |
|
107 | return (1<<(size)); | |
|
108 | } | |
|
109 | return (1<<(size+1)); | |
|
87 | return SocExplorerEngine::memMeasureSize(this->plugin,address,maxSize); | |
|
110 | 88 | } |
|
111 | 89 | |
|
112 | 90 |
@@ -533,6 +533,8 bool stardundeeSPW_USB_Manager::connectB | |||
|
533 | 533 | |
|
534 | 534 | bool stardundeeSPW_USB_Manager::connectBridgeAsInterface() |
|
535 | 535 | { |
|
536 | if(this->connected) | |
|
537 | this->disconnectBridge(); | |
|
536 | 538 | this->handleMutex->lock(); |
|
537 | 539 | int status; |
|
538 | 540 | U32 statusControl; |
@@ -622,7 +624,8 bool stardundeeSPW_USB_Manager::connectB | |||
|
622 | 624 | |
|
623 | 625 | bool stardundeeSPW_USB_Manager::connectBridgeAsRouter() |
|
624 | 626 | { |
|
625 | // QMutexLocker mlock(&this->handleMutex); | |
|
627 | if(this->connected) | |
|
628 | this->disconnectBridge(); | |
|
626 | 629 | this->handleMutex->lock(); |
|
627 | 630 | int status; |
|
628 | 631 | U32 statusControl; |
@@ -904,6 +907,8 unsigned int stardundeeSPW_USB_Manager:: | |||
|
904 | 907 | |
|
905 | 908 | bool stardundeeSPW_USB_Manager::disconnectBridge() |
|
906 | 909 | { |
|
910 | if (this->connected==true) | |
|
911 | { | |
|
907 | 912 | this->handleMutex->lock(); |
|
908 | 913 | USBSpaceWire_UnregisterReceiveOnAllPorts(hDevice); // Stop receiving on all ports |
|
909 | 914 | USBSpaceWire_Close(hDevice); // Close the device |
@@ -917,6 +922,7 bool stardundeeSPW_USB_Manager::disconne | |||
|
917 | 922 | this->RMAP_AnswersMtx->unlock(); |
|
918 | 923 | this->RMAP_AnswersSem->acquire(this->RMAP_AnswersSem->available()); |
|
919 | 924 | this->connected=false; |
|
925 | } | |
|
920 | 926 | return true; |
|
921 | 927 | } |
|
922 | 928 |
General Comments 0
You need to be logged in to leave comments.
Login now