Im running into more and more times that I can only load code to a master after hours. I'd like to be able to leave studio open and program a timer to load the code to the selected rooms.
One way that I manage this is to push the new code to the master during business hours, but I leave the reboot checkbox unticked. I then set a "reboot time" via the program that is already running on the master. When it reaches the time, the program calls reboot(0), which results in the new program being loaded.
I set the reboot time via RMS. My approach is probably not the recommended one, but I parse the 'QUESTION-' string and look for specially constructed "questions". E.g. REBOOT AMX @ 23:30. I then parse the entire "question" to fill out my reboot timer, etc. My reboot code allows the following parameters: @ hh:mm, @ SHUTDOWN (when a user turns "off" the system), NOW (immediately), ASAP (immediately if in standby state, otherwise at shutdown), OFF (cancel the reboot request), ? (query for current reboot setting).
This approach gets really powerful when you use the Send A Question To Rooms (plural) feature, since you can pick a large number of rooms in one go. When doing major code roll outs (> 30 rooms in one night) I will stagger the reboot time from 10pm through to 11:30pm, just to reduce the load a bit on the server.
If you're running v3 firmware (I.e. haven't upgraded to v4, or have rolled your v4 back to v3) you can also exploit the FTP feature. I wrote a simple PHP script which takes a .tkn file and a list of IP addresses, then FTPs the .tkn to each IP address, with optional reboot.
I'm still working on a mass-deployment system which will leverage FTCon.exe, but interrupt-free time to develop such systems is hard to come by in most of our jobs.
Haven't looked in this thread in a long time and I might have said this already:
If I could just use constants in constant declarations for more complex data types(it works fine with integers), it would help me a lot.
1) I'd like the idea to have default directories for includes and modules. Instead of moving each module or include into my workspace folder and editing it from there, I keep all modules and includes in a central location, and add them from there. You can add those directories to the compiler in settings, but when you right click on "Includes" and select "Add Existing Include File", it always takes you to the workspace directory. That means every time I add a module or include, I always perform the same navigation to get to the directory the files are. Ideally this would be selectable to either use a default directory or use the workspace as default, so that people who do store their files in the workspace directory would also still be happy.
2) I know this is minor, but please fix the device mapping issue that requires "DEFINE_DEVICE" to be in all caps. Every other line of my code is in lowercase, but that is in uppercase, and it makes my little OCD brain twitch to the point that I had to put a comment in to remind myself not to change it It's just silly that you have a case sensitive IDE with a case insensitive language.
3) When the auto suggestion box pops up, why does Tab select one of the options? From my perspective I would much rather this only happen on enter. When I'm typing in variable declarations, I generally type volatile/persistent/nonvolatile, then tab twice, then the type, then tab twice, then the name of the variable. This means that if I'm creating, for example, a dev array, I type non_volatile tab tab dev tab, and as soon as I hit Tab after type dev, it autocompletes to devchan, even though I wanted dev. I'm not sure what utility there is in having tab select the autosuggestion when enter already does that, and when you might want to tab after typing something in.
I feel like there are more things that have been driving me crazy but that's all I remember for now. Perhaps I shall come back later with more ranting.
1) I'd like the idea to have default directories for includes and modules.
There are default directories, they're just not useful locations for me.
...every time I add a module or include, I always perform the same navigation to get to the directory the files are...
You can drag module and includes into the workspace from a Windows window; or maybe I'm not understanding the question. And I believe that the directory where the workspace is is in the path by default.
...
3) When the auto suggestion box pops up, why does Tab select one of the options?...
Because of such brain-damaged behavior, I keep auto-complete turned off. I find it's faster and less frustrating to just type what I want.
You can drag module and includes into the workspace from a Windows window; or maybe I'm not understanding the question.
I didn't know this. That's a useful workaround for now, but I'd still prefer to not have to have do it in windows, and just have this program know where my modules are. I can't be the only person out there who keeps all his modules in the same place.
I believe that the directory where the workspace is is in the path by default.
Right, and what I'm saying is I'd like to be able to choose EITHER the workspace as default (for people who keep modules and includes in their individual project folders) or a specified default directory (for people who keep everything in the same location). Just going to default directories like I use doesn't solve the problem, it just changes which users are unsatisfied with it I was trying to propose something that made it more useful for me without removing functionality that works well for other users.
Because of such brain-damaged behavior, I keep auto-complete turned off. I find it's faster and less frustrating to just type what I want.
I'm leaning that way myself, it's getting to where it hurts more than it helps. I just figured I might try ranting here and seeing if they would fix it before giving up completely.
There are default directories, they're just not useful locations for me.
You can change / add default directories by going to Settings -> Preferences -> NetLinx Compiler, and then select Include Files. Add or change at will.
That doesn't change what I'm talking about. If you look at my original post you'll see that I mentioned you could change what directories Compile from, I'm talking about what directory shows up when I right click on the "Module" folder in the workspace, and select "Add Existing Module File" That causes a dialog to open up that always starts within the workspace directory, NOT those compiler directories I selected.
I'd like the default directory for modules to be where the program expects me to look for modules. Clearly AMX understands that I keep all my modules in one place, because they allow me to set a directory that all of my modules are in. If the program understands that, then why does it keep expecting me to have modules in my workspace directory instead of my module directory?
2) I know this is minor, but please fix the device mapping issue that requires "DEFINE_DEVICE" to be in all caps. Every other line of my code is in lowercase, but that is in uppercase, and it makes my little OCD brain twitch to the point that I had to put a comment in to remind myself not to change it It's just silly that you have a case sensitive IDE with a case insensitive language.
Huh, so that's why that broke... I did not know that. I'm not sure I care about the functionality enough to put the caps back in though, I've just been doing custom device mapping since they broke that.
I actually didn't know it until very recently. I was going to post on here complaining about broken device mapping, then I decided to do a search on the forums to see if anyone else had the same problem, and I found the issue. Can't remember who originally figured it out.
This isnt so much for studio, but for tp4... Be able to change the focus of an object or group. For instance, I have a popup in front and in focus, but I select a sub option which opens on top of the previous popup, I would like to de-focus the previous popup, so that the new one can be used and more or less have a "cool" look effect; upon closing that popup, the previous background pop comes back into focus.
Obviously, as for studio, it would be nice to have commands to do this via code as well.
Not sure if this has been requested or not but it would be a nice addition if a function should be allowed to return a DEV value, so that the following would be possible.
DEFINE_FUNCTION DEV fASSIGN_DEV_TO_CTRL
{
bla bla bla
return 5001:1:0;
}
Double Click Compiler WARNING to Take you to the warning in code
I use #WARN to make notes for Compiling and it would be nice to be able to DBL Click to get to that location.
I know this has been requested, but it bears repeating...
It would also be nice to DBL Click Errors and get to the error; not 2 Page Ups to get near the error...
Works for me! The only problem seems to be with include file #WARN's they just go to the corresponding line number in the main but otherwise it works just fine for warn's in the main or modules.
Please parse this list and show one or two parameters on a line;
so I do not have a list of parameters on one line that may go off of the screen.
i.e.
In Netlinx Studio Type:
Define_Function TAudio_Create( - HINT POPS UP
Picture this on one line in a Hint Window:
TAudio_Create(Integer Index, Dev Device, Integer Zone, Integer Type, Integer SubType, Char Caption[], Char Name[]/*Polycom-VirtualChannel;Biamp-InstanceID;ClearOne-Name*/, Char Param1[]/*Polycom-NA;Biamp-Index1;ClearOne-DeviceType*/, Char Param2[]/*Polycom-NA;Biamp-UnitID;ClearOne-DeviceID*/)
I would like to see a multi-line HInt Window:
TAudio_Create(Integer Index, Dev Device,
Integer Zone, Integer Type,
Integer SubType, Char Caption[],
Char Name[]/*Polycom-VirtualChannel;Biamp-InstanceID;ClearOne-Name*/,
Char Param1[]/*Polycom-NA;Biamp-Index1;ClearOne-DeviceType*/,
Char Param2[]/*Polycom-NA;Biamp-UnitID;ClearOne-DeviceID*/)
Please and Thank you.
I know this is very easy to accomplish - even if it was coded in VB, but I think Netlinx Studio is code in Visual C++.
I hope for the following features / fixes:
- Timeline arrays that work with get_last(), such as the device arrays
- timeline_create does not work with INTEGER time interval arrays, only works with LONG type arrays. Still the code compiles without errors. Either make it possible to initialize a timeline with integer array, or give an error or at least a warning when compiling.
Comments
One way that I manage this is to push the new code to the master during business hours, but I leave the reboot checkbox unticked. I then set a "reboot time" via the program that is already running on the master. When it reaches the time, the program calls reboot(0), which results in the new program being loaded.
I set the reboot time via RMS. My approach is probably not the recommended one, but I parse the 'QUESTION-' string and look for specially constructed "questions". E.g. REBOOT AMX @ 23:30. I then parse the entire "question" to fill out my reboot timer, etc. My reboot code allows the following parameters: @ hh:mm, @ SHUTDOWN (when a user turns "off" the system), NOW (immediately), ASAP (immediately if in standby state, otherwise at shutdown), OFF (cancel the reboot request), ? (query for current reboot setting).
This approach gets really powerful when you use the Send A Question To Rooms (plural) feature, since you can pick a large number of rooms in one go. When doing major code roll outs (> 30 rooms in one night) I will stagger the reboot time from 10pm through to 11:30pm, just to reduce the load a bit on the server.
If you're running v3 firmware (I.e. haven't upgraded to v4, or have rolled your v4 back to v3) you can also exploit the FTP feature. I wrote a simple PHP script which takes a .tkn file and a list of IP addresses, then FTPs the .tkn to each IP address, with optional reboot.
I'm still working on a mass-deployment system which will leverage FTCon.exe, but interrupt-free time to develop such systems is hard to come by in most of our jobs.
Roger McLean
Swinburne University
If I could just use constants in constant declarations for more complex data types(it works fine with integers), it would help me a lot.
DEVCHAN dcOne = {dvREL8_11,1}
DEVCHAN dcTwo = {dvREL8_11,2}
DEVCHAN dcArr[] = {dcOne,dcTwo}
same thing with strings
I don't want to move things down into define_variable or some other ugly work around.
The ability to edit code while uploading FW or code. I know, it's silly, and I could just as easily open a new instance of NS, but this would be cool.
1) I'd like the idea to have default directories for includes and modules. Instead of moving each module or include into my workspace folder and editing it from there, I keep all modules and includes in a central location, and add them from there. You can add those directories to the compiler in settings, but when you right click on "Includes" and select "Add Existing Include File", it always takes you to the workspace directory. That means every time I add a module or include, I always perform the same navigation to get to the directory the files are. Ideally this would be selectable to either use a default directory or use the workspace as default, so that people who do store their files in the workspace directory would also still be happy.
2) I know this is minor, but please fix the device mapping issue that requires "DEFINE_DEVICE" to be in all caps. Every other line of my code is in lowercase, but that is in uppercase, and it makes my little OCD brain twitch to the point that I had to put a comment in to remind myself not to change it It's just silly that you have a case sensitive IDE with a case insensitive language.
3) When the auto suggestion box pops up, why does Tab select one of the options? From my perspective I would much rather this only happen on enter. When I'm typing in variable declarations, I generally type volatile/persistent/nonvolatile, then tab twice, then the type, then tab twice, then the name of the variable. This means that if I'm creating, for example, a dev array, I type non_volatile tab tab dev tab, and as soon as I hit Tab after type dev, it autocompletes to devchan, even though I wanted dev. I'm not sure what utility there is in having tab select the autosuggestion when enter already does that, and when you might want to tab after typing something in.
I feel like there are more things that have been driving me crazy but that's all I remember for now. Perhaps I shall come back later with more ranting.
There are default directories, they're just not useful locations for me.
You can drag module and includes into the workspace from a Windows window; or maybe I'm not understanding the question. And I believe that the directory where the workspace is is in the path by default.
Because of such brain-damaged behavior, I keep auto-complete turned off. I find it's faster and less frustrating to just type what I want.
There are directories, but when you choose "Add an existing file" It doesn't go to them. I'd like to have it start there.
I didn't know this. That's a useful workaround for now, but I'd still prefer to not have to have do it in windows, and just have this program know where my modules are. I can't be the only person out there who keeps all his modules in the same place.
Right, and what I'm saying is I'd like to be able to choose EITHER the workspace as default (for people who keep modules and includes in their individual project folders) or a specified default directory (for people who keep everything in the same location). Just going to default directories like I use doesn't solve the problem, it just changes which users are unsatisfied with it I was trying to propose something that made it more useful for me without removing functionality that works well for other users.
I'm leaning that way myself, it's getting to where it hurts more than it helps. I just figured I might try ranting here and seeing if they would fix it before giving up completely.
I'd like the default directory for modules to be where the program expects me to look for modules. Clearly AMX understands that I keep all my modules in one place, because they allow me to set a directory that all of my modules are in. If the program understands that, then why does it keep expecting me to have modules in my workspace directory instead of my module directory?
Huh, so that's why that broke... I did not know that. I'm not sure I care about the functionality enough to put the caps back in though, I've just been doing custom device mapping since they broke that.
Obviously, as for studio, it would be nice to have commands to do this via code as well.
Not sure if this has been requested or not but it would be a nice addition if a function should be allowed to return a DEV value, so that the following would be possible.
DEFINE_FUNCTION DEV fASSIGN_DEV_TO_CTRL
{
bla bla bla
return 5001:1:0;
}
button event
push[tp,btn]
pulse[fASSIGN_DEV_TO_CTRL,chan]
I use #WARN to make notes for Compiling and it would be nice to be able to DBL Click to get to that location.
I know this has been requested, but it bears repeating...
It would also be nice to DBL Click Errors and get to the error; not 2 Page Ups to get near the error...
It is as though include files were an after thought to Netlinx.
This is pretty much all that is in my Source file:
// ****************************************************************************
// Include Files
// ****************************************************************************
// Application System Compiler Switches
#INCLUDE 'SYS_Compiler.axi';
// Application System
#INCLUDE 'SYS_System.axi';
// Include AMX Framework Library of Functions
#INCLUDE 'AFL_System_2_0.axi';
// ****************************************************************************
// Include Files
// ****************************************************************************
maybe its good to be like a turbo C backgroun.. the blue background..just my idea..
A get_last() that works in a level_event.
.
@quibralj - You may already be aware of this, but you can change this in NS today. I personally use the dark palette found in this post: http://www.amxforums.com/showthread.php?8481-Solarized-colour-scheme
That was fixed back in 2007
http://www.amxforums.com/showthread.php?1670-get_last-for-dev-arrays-on-level-events-a-solution&p=21994#post21994
Did it break?
Please parse this list and show one or two parameters on a line;
so I do not have a list of parameters on one line that may go off of the screen.
i.e.
In Netlinx Studio Type:
Define_Function TAudio_Create( - HINT POPS UP
Picture this on one line in a Hint Window:
TAudio_Create(Integer Index, Dev Device, Integer Zone, Integer Type, Integer SubType, Char Caption[], Char Name[]/*Polycom-VirtualChannel;Biamp-InstanceID;ClearOne-Name*/, Char Param1[]/*Polycom-NA;Biamp-Index1;ClearOne-DeviceType*/, Char Param2[]/*Polycom-NA;Biamp-UnitID;ClearOne-DeviceID*/)
I would like to see a multi-line HInt Window:
TAudio_Create(Integer Index, Dev Device,
Integer Zone, Integer Type,
Integer SubType, Char Caption[],
Char Name[]/*Polycom-VirtualChannel;Biamp-InstanceID;ClearOne-Name*/,
Char Param1[]/*Polycom-NA;Biamp-Index1;ClearOne-DeviceType*/,
Char Param2[]/*Polycom-NA;Biamp-UnitID;ClearOne-DeviceID*/)
Please and Thank you.
I know this is very easy to accomplish - even if it was coded in VB, but I think Netlinx Studio is code in Visual C++.
#REGION 'Display Control'
DEFINE_EVENT
BUTTON_EVENT[tpsDisplay, btnsDisplayPowerOn]
{
PUSH:
{
TDisplay_Power(Get_Last(btnsDisplayPowerOn), True);
}
}
... etc
#ENDREGION
Very much THIS ^^^^^^
Being able to set custom folds would be a huge productivity boost.
I did not know it had been fixed. Maybe I should get in the habit of reading release notes :^|
Thanks.
.
Why not make NS Object Oriented ?
Duet Plugin Costs money, Not everyone willing to pay :-(
- Timeline arrays that work with get_last(), such as the device arrays
- timeline_create does not work with INTEGER time interval arrays, only works with LONG type arrays. Still the code compiles without errors. Either make it possible to initialize a timeline with integer array, or give an error or at least a warning when compiling.