• Home
  • About
  • Contact
  • CBLLight
  • CBLM
Internet Exploder
Software Structure Overview (as of v1.2.1)
CBLM is built around a central program, a few (about 3 or so) utility subprograms to simplify some operations such as building a sensor subprogram list, subprograms to process inputs and outputs for each sensor, and subprograms to handle setting up and sanity checking of sensor interface I/O. The main program (CBLM Beta, currently) is responsible for the GUI, sequencing the I/O to the interface, making sure that the list of subprograms is current and usable, and transitioning control to subprograms. The universal CBL commands (0-7) are handled by the subprogram CBLMCH (the meaning of the name escapes me), and interface-specific functions (such as formatting status outputs, Flash memory management, sound output, and analog voltage output) are handled by the interface subprograms. The sensor subprograms provide a means for the main program to translate the raw data returned by the interface into meaningful data, in addition to informing the main program of the sensor's name and compatibility, since some sensors won't run on the original CBL due to hardware limitations. The subprogram list is built by CBLMBPLS, which produces three outputs: a list of sensor subprogram names, a list of sensor names, and a list of sensor modes. Displaying data is also handled by two subprograms: one for non-realtime data, and the other for data being collected in realtime mode. I may combine the two into the main program, but for the time being it is easier to debug code with them as separate programs. Interface and sensor detection are handled by subprograms CBLMDI and CBLMDS, respectively. They are very useful as standalone tools.
The syntax for these subprograms is recorded in detail to allow other developers (if they exist) to interface their code with these subprograms.

Revision Log

December 2013
10 December 2013: I have some of the code for the main program and the TI temperature module completed.

12 December: I decided to completely rewrite the main program to add support for more CBL commands. So far the command parsing module accepts command 1 and command 3. As the roles of each of the sensor module programs have been changed (they now only get and process data) I have to rewrite those.

January 2014
6 January 2014: Once again I had to rewrite everything. I acquired the impossible-to-find CBL Technical Manual only to realize that the CBL has enough quirks to break my code. Each sensor now has a module that is used to verify inputs, as errors disrupt data collection. Although it worked for the most part, many common modes which I haven't used (but an educator/student might) would throw unknown errors, and there is no online documentation on what these CBL-specific errors mean. Because of this, I now have an error translator that detects the error and displays what it means whenever CBLM encounters an error. There's also a lot of documentation that I wrote for CBLM, unlike a lot of the programs out there; it's currently at about 1000 words.

Also, I got a CBL2 primarily for CBLbot and I can actually test my code now.

Between January and April, I made little progress on CBLM.

April 2014 - First Public Beta
2 April: As alluded to in my CBLLight post, I'm going to continue development. I'm a bit concerned about the existing code: it is fairly robust but I am not sure what it does or can do. I'm avoiding another rewrite, but the base program that handles the interface (cblm\cblmch) needs several features before it is ready to handle sensors. I long regarded that subprogram to be a final final version, but today I have encountered a number of features that are not easy to implement through that subprogram and the interface (cblm\cblmcbl, cblm\cblmcbl2, cblm\cblmvlp) subprograms. I (fortunately) still have the above documentation, so I won't have to relearn how to write sensor/interface subprograms. When I'm feeling less lazy and I'm closer to my TI-89T, I'll give an overview on the current organization of the code.

3 April: I've officially resumed working on CBLM, now that my other projects are out of the way. I've finished sensor detection, but there are some quirks with interface detection (mainly old code) that I need to fix and separate from the main program. I still haven't finished control flow, so menus often don't go anywhere except label errors or the end of the program. I need to restudy the data display subprograms (which I'm certain are very broken in their current state) and add this to the main program. Currently CBLM can only detect sensors and interfaces, and display the user with options for sampling.

4 April: Sensor detection and interface detection are now separate from the main program, and rudimentary sampling and data display is now implemented. Since this can now sample data, I've planned the beta release of v1.0b for 5 April at the earliest. I haven't finished realtime mode and CBL1 sensor detection is buggy, but it is fully functional and shouldn't crash.
Working sensor and interface detection: (image)
Error catching and translating to user-readable English: (image)

June 2014 - First Usable Betas
22 June: I finally decided to implement multichannel support in CBLM v1.2, so the attached sensor does not have to be on CH1. Additionally this should allow multiple sensors to work simultaneously. I'll support the LabPro's CH4 later; currently only CH1-CH3 work.

23 June: Since there's multichannel support in CBLM's subprograms now, I'm adding proper multichannel support to CBLM (now at v1.2.1) itself. I did manage to delete yesterday's updated CBLM main program, so I'm starting again from the 5 April release and reworking that one to support multichannel operation.
Also, a video of CBLM v1.2.1 in action.

24 June: I've reworked the entire user interface to support sampling multiple channels simultaneously. Additionally I've reorganized the way data is stored as to allow for easier "Repeat last setup" functionality on the original CBL. While the link code doesn't reflect these changes, the hardest part of this is over. Up to six inputs can be specified by an interface, and hopefully I can get interface modules to provide this information rather than hard-coding this into CBLM itself; in the event that a non-CBL/LabPro interface appears, it could be supported by CBLM simply by writing the interface module and adding the name to the list of recognized interfaces.

25 June: Link code is fixed, and multichannel support is supported on CBL and CBL 2. LabPro's additional channels aren't yet supported, and the data display module will only display the first selected channel. But hey, the main program works-ish. Available for download here.

25 June, continued: Realtime mode works! The realtime module already supports multichannel operation, so I don't need to make any changes to it there. However, I want more options for displaying things; there's more work to do on the data display subprograms.

July 2014 - Public Release?
1 July: The Vernier Ion-Selective Electrodes are now fully supported. A separate program is included for calibrating these sensors. As a result of working with the sensor modules, v1.4 of the specification has been finalized, now supporting digital sensors properly. Some other sensors are also supported, such as the Vernier Wide Range Temperature Sensor. Some sensors are partially supported; these are the Vernier Blood Pressure Sensor and the Vernier Radiation Monitor.

Powered by Create your own unique website with customizable templates.