implement bmc gpio,

clkeanup some code
This commit is contained in:
Arthur Lu 2024-02-16 14:45:10 -08:00
parent 6aebefc748
commit 930ae5498a
3 changed files with 34 additions and 13 deletions

4
cgi.h
View File

@ -5,10 +5,6 @@
#include "pico/cyw43_arch.h"
#include "handlers.h"
char parseRequestedState (char * requested_state) {
}
const char * cgi_power_handler (int iIndex, int iNumParams, char * pcParam [], char * pcValue []) {
// Check if an request for power has been made (/power?requested_state=x)
if (strcmp(pcParam[0] , "requested_state") == 0){

View File

@ -3,36 +3,54 @@
#include "pico/stdlib.h"
#define PW_SW_DELAY_MS 100
#define STATE_UPDATE_REPEAT_DELAY_MS 100
#define PW_SWITCH_PIN 0
#define PW_SWITCH_DELAY_MS 100
#define PW_STATE_PIN 1
#define PW_STATE_UPDATE_REPEAT_DELAY_MS 100
bool current_state = false;
struct repeating_timer * state_update_timer = NULL;
// handler fn to set the power switch pin to an active state
int64_t pw_sw_on_async (alarm_id_t id, void * user_data) {
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
return 0; // do not reschedule alarm
}
int64_t pw_sw_off_async (alarm_id_t id, void * user_data) {
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
gpio_put(PW_SWITCH_PIN, 1);
return 0; // do not reschedule alarm
}
// handler fn to set the power switch pin to an inactive state
int64_t pw_sw_off_async (alarm_id_t id, void * user_data) {
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
gpio_put(PW_SWITCH_PIN, 0);
return 0; // do not reschedule alarm
}
// hander fn to read from the power state
bool update_current_state_async (repeating_timer_t * rt) {
current_state = gpio_get(PW_STATE_PIN);
return true; // continue repeating alarm
}
// handler fn called to attempt to set the power state to the requested state
bool bmc_power_handler (bool requested_state) {
if (requested_state != current_state) {
add_alarm_in_ms(0, pw_sw_on_async, NULL, true);
add_alarm_in_ms(PW_SW_DELAY_MS, pw_sw_off_async, NULL, true);
add_alarm_in_ms(PW_SWITCH_DELAY_MS, pw_sw_off_async, NULL, true);
}
}
void bmc_handler_init () {
// init power switch pin as output
gpio_init(PW_SWITCH_PIN);
gpio_set_dir(PW_SWITCH_DELAY_MS, GPIO_OUT);
// init power state pin as input
gpio_init(PW_STATE_PIN);
gpio_set_dir(PW_STATE_PIN, GPIO_IN);
// set repeating timer for power state update
state_update_timer = malloc(sizeof(struct repeating_timer));
add_repeating_timer_ms(STATE_UPDATE_REPEAT_DELAY_MS, update_current_state_async, NULL, state_update_timer);
add_repeating_timer_ms(PW_STATE_UPDATE_REPEAT_DELAY_MS, update_current_state_async, NULL, state_update_timer);
}
void bmc_handler_deinit () {

7
main.c
View File

@ -23,17 +23,24 @@ int main() {
}
printf("Wi-Fi connected\n");
// init httpd
httpd_init();
printf("HTTP Server initialized at %s on port %d\n", ip4addr_ntoa(netif_ip4_addr(netif_list)), HTTPD_SERVER_PORT);
// enable ssi
ssi_init();
printf("SSI Handler initialized\n");
// enable cgi
cgi_init();
printf("CGI Handler initialised\n");
// init bmc handler
bmc_handler_init();
printf("BMC handler initialized\n");
// set LED to on to indicate it has connected and initialized
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
while(1);
}